OSDN Git Service

staging: rtl8712: code improvements to make_wlanhdr
authorAiman Najjar <aiman.najjar@hurranet.com>
Sun, 29 Mar 2020 18:57:46 +0000 (14:57 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Apr 2020 06:55:29 +0000 (08:55 +0200)
1. Refactor make_wlanhdr to improve code style.
2. Use ether_addr_copy instead of memcpy to copy addresses.

Suggested-by: Joe Perches <joe@perches.com>
Signed-off-by: Aiman Najjar <aiman.najjar@hurranet.com>
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: https://lore.kernel.org/r/275773a0379e4a03839cd832d2ed952fd7bfee48.1585508171.git.aiman.najjar@hurranet.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rtl8712/rtl871x_xmit.c
drivers/staging/rtl8712/rtl871x_xmit.h

index 0f789c8..2102629 100644 (file)
@@ -477,75 +477,72 @@ static int make_wlanhdr(struct _adapter *padapter, u8 *hdr,
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct qos_priv *pqospriv = &pmlmepriv->qospriv;
        __le16 *fctrl = &pwlanhdr->frame_ctl;
+       u8 *bssid;
 
        memset(hdr, 0, WLANHDR_OFFSET);
        SetFrameSubType(fctrl, pattrib->subtype);
-       if (pattrib->subtype & WIFI_DATA_TYPE) {
-               if (check_fwstate(pmlmepriv,  WIFI_STATION_STATE)) {
-                       /* to_ds = 1, fr_ds = 0; */
-                       SetToDs(fctrl);
-                       memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv),
-                               ETH_ALEN);
-                       memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
-                       memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
-               } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
-                       /* to_ds = 0, fr_ds = 1; */
-                       SetFrDs(fctrl);
-                       memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
-                       memcpy(pwlanhdr->addr2, get_bssid(pmlmepriv),
-                               ETH_ALEN);
-                       memcpy(pwlanhdr->addr3, pattrib->src, ETH_ALEN);
-               } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
-                          check_fwstate(pmlmepriv,
-                                        WIFI_ADHOC_MASTER_STATE)) {
-                       memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
-                       memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
-                       memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv),
-                               ETH_ALEN);
-               } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
-                       memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
-                       memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
-                       memcpy(pwlanhdr->addr3, get_bssid(pmlmepriv),
-                               ETH_ALEN);
-               } else {
-                       return -EINVAL;
-               }
+       if (!(pattrib->subtype & WIFI_DATA_TYPE))
+               return 0;
 
-               if (pattrib->encrypt)
-                       SetPrivacy(fctrl);
-               if (pqospriv->qos_option) {
-                       qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
-                       if (pattrib->priority)
-                               SetPriority(qc, pattrib->priority);
-                       SetAckpolicy(qc, pattrib->ack_policy);
-               }
-               /* TODO: fill HT Control Field */
-               /* Update Seq Num will be handled by f/w */
-               {
-                       struct sta_info *psta;
-                       bool bmcst = is_multicast_ether_addr(pattrib->ra);
-
-                       if (pattrib->psta) {
-                               psta = pattrib->psta;
-                       } else {
-                               if (bmcst)
-                                       psta = r8712_get_bcmc_stainfo(padapter);
-                               else
-                                       psta =
-                                        r8712_get_stainfo(&padapter->stapriv,
-                                        pattrib->ra);
-                       }
-                       if (psta) {
-                               psta->sta_xmitpriv.txseq_tid
-                                                 [pattrib->priority]++;
-                               psta->sta_xmitpriv.txseq_tid[pattrib->priority]
-                                                  &= 0xFFF;
-                               pattrib->seqnum = psta->sta_xmitpriv.
-                                                 txseq_tid[pattrib->priority];
-                               SetSeqNum(hdr, pattrib->seqnum);
-                       }
+       bssid = get_bssid(pmlmepriv);
+
+       if (check_fwstate(pmlmepriv,  WIFI_STATION_STATE)) {
+               /* to_ds = 1, fr_ds = 0; */
+               SetToDs(fctrl);
+               ether_addr_copy(pwlanhdr->addr1, bssid);
+               ether_addr_copy(pwlanhdr->addr2, pattrib->src);
+               ether_addr_copy(pwlanhdr->addr3, pattrib->dst);
+       } else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
+               /* to_ds = 0, fr_ds = 1; */
+               SetFrDs(fctrl);
+               ether_addr_copy(pwlanhdr->addr1, pattrib->dst);
+               ether_addr_copy(pwlanhdr->addr2, bssid);
+               ether_addr_copy(pwlanhdr->addr3, pattrib->src);
+       } else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) ||
+                  check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
+               ether_addr_copy(pwlanhdr->addr1, pattrib->dst);
+               ether_addr_copy(pwlanhdr->addr2, pattrib->src);
+               ether_addr_copy(pwlanhdr->addr3, bssid);
+       } else if (check_fwstate(pmlmepriv, WIFI_MP_STATE)) {
+               ether_addr_copy(pwlanhdr->addr1, pattrib->dst);
+               ether_addr_copy(pwlanhdr->addr2, pattrib->src);
+               ether_addr_copy(pwlanhdr->addr3, bssid);
+       } else {
+               return -EINVAL;
+       }
+
+       if (pattrib->encrypt)
+               SetPrivacy(fctrl);
+       if (pqospriv->qos_option) {
+               qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
+               if (pattrib->priority)
+                       SetPriority(qc, pattrib->priority);
+               SetAckpolicy(qc, pattrib->ack_policy);
+       }
+       /* TODO: fill HT Control Field */
+       /* Update Seq Num will be handled by f/w */
+       {
+               struct sta_info *psta;
+               bool bmcst = is_multicast_ether_addr(pattrib->ra);
+
+               if (pattrib->psta)
+                       psta = pattrib->psta;
+               else if (bmcst)
+                       psta = r8712_get_bcmc_stainfo(padapter);
+               else
+                       psta = r8712_get_stainfo(&padapter->stapriv,
+                                                pattrib->ra);
+
+               if (psta) {
+                       u16 *txtid = psta->sta_xmitpriv.txseq_tid;
+
+                       txtid[pattrib->priority]++;
+                       txtid[pattrib->priority] &= 0xFFF;
+                       pattrib->seqnum = txtid[pattrib->priority];
+                       SetSeqNum(hdr, pattrib->seqnum);
                }
        }
+
        return 0;
 }
 
index f227828..c0c0c78 100644 (file)
@@ -115,7 +115,7 @@ struct pkt_attrib {
        u8      icv_len;
        unsigned char iv[8];
        unsigned char icv[8];
-       u8      dst[ETH_ALEN];
+       u8      dst[ETH_ALEN] __aligned(2);     /* for ether_addr_copy */
        u8      src[ETH_ALEN];
        u8      ta[ETH_ALEN];
        u8      ra[ETH_ALEN];