Messages in this thread Patch in this message | | | From | Alexander Lobakin <> | Subject | [PATCH RFC net-next 17/19] net: dsa: tag_qca: switch to bitfield helpers | Date | Mon, 30 Dec 2019 17:30:25 +0300 |
| |
Make code look cleaner and more readable by using bitfield macros. Misc: fix several macro identation and phdr type in qca_tag_xmit().
Signed-off-by: Alexander Lobakin <alobakin@dlink.ru> --- net/dsa/tag_qca.c | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/net/dsa/tag_qca.c b/net/dsa/tag_qca.c index e1c4dd04734a..8939abce36d7 100644 --- a/net/dsa/tag_qca.c +++ b/net/dsa/tag_qca.c @@ -3,15 +3,15 @@ * Copyright (c) 2015, The Linux Foundation. All rights reserved. */ +#include <linux/bitfield.h> #include <linux/etherdevice.h> #include "dsa_priv.h" -#define QCA_HDR_LEN 2 -#define QCA_HDR_VERSION 0x2 +#define QCA_HDR_LEN 2 +#define QCA_HDR_VERSION 0x2 -#define QCA_HDR_RECV_VERSION_MASK GENMASK(15, 14) -#define QCA_HDR_RECV_VERSION_S 14 +#define QCA_HDR_RECV_VERSION(tag) FIELD_GET(GENMASK(15, 14), tag) #define QCA_HDR_RECV_PRIORITY_MASK GENMASK(13, 11) #define QCA_HDR_RECV_PRIORITY_S 11 #define QCA_HDR_RECV_TYPE_MASK GENMASK(10, 6) @@ -19,19 +19,20 @@ #define QCA_HDR_RECV_FRAME_IS_TAGGED BIT(3) #define QCA_HDR_RECV_SOURCE_PORT_MASK GENMASK(2, 0) -#define QCA_HDR_XMIT_VERSION_MASK GENMASK(15, 14) -#define QCA_HDR_XMIT_VERSION_S 14 +#define QCA_HDR_XMIT_VERSION FIELD_PREP(GENMASK(15, 14), \ + QCA_HDR_VERSION) #define QCA_HDR_XMIT_PRIORITY_MASK GENMASK(13, 11) #define QCA_HDR_XMIT_PRIORITY_S 11 #define QCA_HDR_XMIT_CONTROL_MASK GENMASK(10, 8) #define QCA_HDR_XMIT_CONTROL_S 8 #define QCA_HDR_XMIT_FROM_CPU BIT(7) -#define QCA_HDR_XMIT_DP_BIT_MASK GENMASK(6, 0) +#define QCA_HDR_XMIT_DP(port) FIELD_PREP(GENMASK(6, 0), BIT(port)) static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) { - struct dsa_port *dp = dsa_slave_to_port(dev); - u16 *phdr, hdr; + const struct dsa_port *dp = dsa_slave_to_port(dev); + __be16 *phdr; + u16 hdr; if (skb_cow_head(skb, 0) < 0) return NULL; @@ -39,11 +40,11 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) skb_push(skb, QCA_HDR_LEN); memmove(skb->data, skb->data + QCA_HDR_LEN, 2 * ETH_ALEN); - phdr = (u16 *)(skb->data + 2 * ETH_ALEN); + phdr = (__be16 *)(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 | BIT(dp->index); + hdr = QCA_HDR_XMIT_VERSION | QCA_HDR_XMIT_FROM_CPU | + QCA_HDR_XMIT_DP(dp->index); *phdr = htons(hdr); @@ -53,7 +54,6 @@ static struct sk_buff *qca_tag_xmit(struct sk_buff *skb, struct net_device *dev) static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt) { - u8 ver; int port; __be16 *phdr, hdr; @@ -68,8 +68,7 @@ static struct sk_buff *qca_tag_rcv(struct sk_buff *skb, struct net_device *dev, hdr = ntohs(*phdr); /* Make sure the version is correct */ - ver = (hdr & QCA_HDR_RECV_VERSION_MASK) >> QCA_HDR_RECV_VERSION_S; - if (unlikely(ver != QCA_HDR_VERSION)) + if (unlikely(QCA_HDR_RECV_VERSION(hdr) != QCA_HDR_VERSION)) return NULL; /* Remove QCA tag and recalculate checksum */ -- 2.24.1
| |