Commit a4daaf06 authored by Álvaro Fernández Rojas's avatar Álvaro Fernández Rojas Committed by Jakub Kicinski
Browse files

net: dsa: tag_brcm: legacy: reorganize functions



Move brcm_leg_tag_rcv() definition to top.
This function is going to be shared between two different tags.

Reviewed-by: default avatarFlorian Fainelli <florian.fainelli@broadcom.com>
Signed-off-by: default avatarÁlvaro Fernández Rojas <noltari@gmail.com>
Link: https://patch.msgid.link/20250614080000.1884236-2-noltari@gmail.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 62889b6a
Loading
Loading
Loading
Loading
+32 −32
Original line number Diff line number Diff line
@@ -213,6 +213,38 @@ MODULE_ALIAS_DSA_TAG_DRIVER(DSA_TAG_PROTO_BRCM, BRCM_NAME);
#endif

#if IS_ENABLED(CONFIG_NET_DSA_TAG_BRCM_LEGACY)
static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
					struct net_device *dev)
{
	int len = BRCM_LEG_TAG_LEN;
	int source_port;
	u8 *brcm_tag;

	if (unlikely(!pskb_may_pull(skb, BRCM_LEG_TAG_LEN + VLAN_HLEN)))
		return NULL;

	brcm_tag = dsa_etype_header_pos_rx(skb);

	source_port = brcm_tag[5] & BRCM_LEG_PORT_ID;

	skb->dev = dsa_conduit_find_user(dev, 0, source_port);
	if (!skb->dev)
		return NULL;

	/* VLAN tag is added by BCM63xx internal switch */
	if (netdev_uses_dsa(skb->dev))
		len += VLAN_HLEN;

	/* Remove Broadcom tag and update checksum */
	skb_pull_rcsum(skb, len);

	dsa_default_offload_fwd_mark(skb);

	dsa_strip_etype_header(skb, len);

	return skb;
}

static struct sk_buff *brcm_leg_tag_xmit(struct sk_buff *skb,
					 struct net_device *dev)
{
@@ -250,38 +282,6 @@ static struct sk_buff *brcm_leg_tag_xmit(struct sk_buff *skb,
	return skb;
}

static struct sk_buff *brcm_leg_tag_rcv(struct sk_buff *skb,
					struct net_device *dev)
{
	int len = BRCM_LEG_TAG_LEN;
	int source_port;
	u8 *brcm_tag;

	if (unlikely(!pskb_may_pull(skb, BRCM_LEG_TAG_LEN + VLAN_HLEN)))
		return NULL;

	brcm_tag = dsa_etype_header_pos_rx(skb);

	source_port = brcm_tag[5] & BRCM_LEG_PORT_ID;

	skb->dev = dsa_conduit_find_user(dev, 0, source_port);
	if (!skb->dev)
		return NULL;

	/* VLAN tag is added by BCM63xx internal switch */
	if (netdev_uses_dsa(skb->dev))
		len += VLAN_HLEN;

	/* Remove Broadcom tag and update checksum */
	skb_pull_rcsum(skb, len);

	dsa_default_offload_fwd_mark(skb);

	dsa_strip_etype_header(skb, len);

	return skb;
}

static const struct dsa_device_ops brcm_legacy_netdev_ops = {
	.name = BRCM_LEGACY_NAME,
	.proto = DSA_TAG_PROTO_BRCM_LEGACY,