Re: [PATCH 2/3] net-next: dsa: add Qualcomm tag RX/TX handler
flat view
From: Andrew Lunn <andrew@lunn.ch>
Date: 2016-09-12 12:27:05
Also in:
lkml
Hi John
quoted hunk ↗ jump to hunk
+ +static inline int reg_to_port(int reg) +{ + if (reg < 5) + return reg + 1; + + return -1; +} + +static inline int port_to_reg(int port) +{ + if (port >= 1 && port <= 6) + return port - 1; + + return -1; +}
No need for inline, leave the compiler to decide.
quoted hunk ↗ jump to hunk
+ +static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) +{ + struct dsa_slave_priv *p = netdev_priv(dev); + u16 *phdr, hdr; + + dev->stats.tx_packets++; + dev->stats.tx_bytes += skb->len; + + if (skb_cow_head(skb, 0) < 0) + goto out_free; + + skb_push(skb, QCA_HDR_LEN); + + memmove(skb->data, skb->data + QCA_HDR_LEN, 2 * ETH_ALEN); + phdr = (u16 *)(skb->data + 2 * ETH_ALEN); + + /* Set the version field, and set destination port information */ + hdr = QCA_HDR_VERSION << QCA_HDR_XMIT_VERSION_S | + QCA_HDR_XMIT_FROM_CPU | + 1 << reg_to_port(p->port); + + *phdr = htons(hdr); + + //skb->dev = p->parent->dst->master_netdev; + //dev_queue_xmit(skb);
No commented out code please.
quoted hunk ↗ jump to hunk
+ + return skb; + +out_free: + kfree_skb(skb); + return NULL; +} + +static int qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, + struct packet_type *pt, struct net_device *orig_dev) +{ + struct dsa_switch_tree *dst = dev->dsa_ptr; + struct dsa_switch *ds; + u8 ver; + int port, phy; + __be16 *phdr, hdr; + + if (unlikely(!dst)) + goto out_drop; + + skb = skb_unshare(skb, GFP_ATOMIC); + if (!skb) + goto out; + + if (unlikely(!pskb_may_pull(skb, QCA_HDR_LEN))) + goto out_drop; + + /* Ethernet is added by the switch between src addr and Ethertype
'Ethernet' seems to be the wrong word here.
quoted hunk ↗ jump to hunk
+ + /* Get source port information */ + port = (hdr & QCA_HDR_RECV_SOURCE_PORT_MASK); + phy = port_to_reg(port); + if (unlikely(phy < 0) || !ds->ports[phy].netdev) + goto out_drop;
Could you use a different variable name than phy. phy has a well known meaning, and this usage is not it. Otherwise, this looks good. Andrew