mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
net: dsa: tag_ksz: use the dsa_xmit_port_mask() helper
The "ksz8795", "ksz9893", "ksz9477" and "lan937x" tagging protocols populate a bit mask for the TX ports. Unlike the others, "ksz9477" also accelerates HSR packet duplication. Make the HSR duplication logic available generically to all 4 taggers by using the dsa_xmit_port_mask() function to set the TX port mask. Cc: Woojung Huh <woojung.huh@microchip.com> Cc: UNGLinuxDriver@microchip.com Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Link: https://patch.msgid.link/20251127120902.292555-6-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
f59e44cc0d
commit
ea659a9292
@@ -120,7 +120,6 @@ static struct sk_buff *ksz_common_rcv(struct sk_buff *skb,
|
||||
|
||||
static struct sk_buff *ksz8795_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct dsa_port *dp = dsa_user_to_port(dev);
|
||||
struct ethhdr *hdr;
|
||||
u8 *tag;
|
||||
|
||||
@@ -131,7 +130,7 @@ static struct sk_buff *ksz8795_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
tag = skb_put(skb, KSZ_INGRESS_TAG_LEN);
|
||||
hdr = skb_eth_hdr(skb);
|
||||
|
||||
*tag = 1 << dp->index;
|
||||
*tag = dsa_xmit_port_mask(skb, dev);
|
||||
if (is_link_local_ether_addr(hdr->h_dest))
|
||||
*tag |= KSZ8795_TAIL_TAG_OVERRIDE;
|
||||
|
||||
@@ -294,21 +293,12 @@ static struct sk_buff *ksz9477_xmit(struct sk_buff *skb,
|
||||
tag = skb_put(skb, KSZ9477_INGRESS_TAG_LEN);
|
||||
hdr = skb_eth_hdr(skb);
|
||||
|
||||
val = BIT(dp->index);
|
||||
|
||||
val = dsa_xmit_port_mask(skb, dev);
|
||||
val |= FIELD_PREP(KSZ9477_TAIL_TAG_PRIO, prio);
|
||||
|
||||
if (is_link_local_ether_addr(hdr->h_dest))
|
||||
val |= KSZ9477_TAIL_TAG_OVERRIDE;
|
||||
|
||||
if (dev->features & NETIF_F_HW_HSR_DUP) {
|
||||
struct net_device *hsr_dev = dp->hsr_dev;
|
||||
struct dsa_port *other_dp;
|
||||
|
||||
dsa_hsr_foreach_port(other_dp, dp->ds, hsr_dev)
|
||||
val |= BIT(other_dp->index);
|
||||
}
|
||||
|
||||
*tag = cpu_to_be16(val);
|
||||
|
||||
return ksz_defer_xmit(dp, skb);
|
||||
@@ -371,8 +361,7 @@ static struct sk_buff *ksz9893_xmit(struct sk_buff *skb,
|
||||
tag = skb_put(skb, KSZ_INGRESS_TAG_LEN);
|
||||
hdr = skb_eth_hdr(skb);
|
||||
|
||||
*tag = BIT(dp->index);
|
||||
|
||||
*tag = dsa_xmit_port_mask(skb, dev);
|
||||
*tag |= FIELD_PREP(KSZ9893_TAIL_TAG_PRIO, prio);
|
||||
|
||||
if (is_link_local_ether_addr(hdr->h_dest))
|
||||
@@ -436,8 +425,7 @@ static struct sk_buff *lan937x_xmit(struct sk_buff *skb,
|
||||
|
||||
tag = skb_put(skb, LAN937X_EGRESS_TAG_LEN);
|
||||
|
||||
val = BIT(dp->index);
|
||||
|
||||
val = dsa_xmit_port_mask(skb, dev);
|
||||
val |= FIELD_PREP(LAN937X_TAIL_TAG_PRIO, prio);
|
||||
|
||||
if (is_link_local_ether_addr(hdr->h_dest))
|
||||
|
||||
Reference in New Issue
Block a user