staging: rtl8723au: Get rid of ugly SetDuration() macro usage
[firefly-linux-kernel-4.4.55.git] / drivers / staging / rtl8723au / hal / rtl8723a_cmd.c
index 457ce921a2c7f7656deb8c2c5457715972a7413b..a58de6775bca52df3a26dd4ceee0a982fb97cfd9 100644 (file)
@@ -204,26 +204,26 @@ void rtl8723a_set_FwPwrMode_cmd(struct rtw_adapter *padapter, u8 Mode)
 static void ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength)
 {
        struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
        u32 rate_len, pktlen;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
        u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+       int bcn_fixed_size;
 
        /* DBG_8723A("%s\n", __FUNCTION__); */
 
        pwlanhdr = (struct ieee80211_hdr *)pframe;
 
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
+       pwlanhdr->frame_control = 0;
 
        memcpy(pwlanhdr->addr1, bc_addr, ETH_ALEN);
        memcpy(pwlanhdr->addr2, myid(&padapter->eeprompriv), ETH_ALEN);
        memcpy(pwlanhdr->addr3, get_my_bssid23a(cur_network), ETH_ALEN);
 
-       SetSeqNum(pwlanhdr, 0/*pmlmeext->mgnt_seq*/);
-       /* pmlmeext->mgnt_seq++; */
+       /* A Beacon frame shouldn't have fragment bits set */
+       pwlanhdr->seq_ctrl = 0;
+
        SetFrameSubType(pframe, WIFI_BEACON);
 
        pframe += sizeof(struct ieee80211_hdr_3addr);
@@ -246,9 +246,13 @@ static void ConstructBeacon(struct rtw_adapter *padapter, u8 *pframe, u32 *pLeng
        pktlen += 2;
 
        if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) {
+               bcn_fixed_size =
+                       offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+                       offsetof(struct ieee80211_mgmt, u.beacon);
+
                /* DBG_8723A("ie len =%d\n", cur_network->IELength); */
-               pktlen += cur_network->IELength - sizeof(struct ndis_802_11_fixed_ies);
-               memcpy(pframe, cur_network->IEs+sizeof(struct ndis_802_11_fixed_ies), pktlen);
+               pktlen += cur_network->IELength - bcn_fixed_size;
+               memcpy(pframe, cur_network->IEs + bcn_fixed_size, pktlen);
 
                goto _ConstructBeacon;
        }
@@ -302,7 +306,8 @@ _ConstructBeacon:
 
 }
 
-static void ConstructPSPoll(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength)
+static void ConstructPSPoll(struct rtw_adapter *padapter,
+                           u8 *pframe, u32 *pLength)
 {
        struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
@@ -318,7 +323,7 @@ static void ConstructPSPoll(struct rtw_adapter *padapter, u8 *pframe, u32 *pLeng
        SetFrameSubType(pframe, WIFI_PSPOLL);
 
        /*  AID. */
-       SetDuration(pframe, (pmlmeinfo->aid | 0xc000));
+       pwlanhdr->duration_id = cpu_to_le16(pmlmeinfo->aid | 0xc000);
 
        /*  BSSID. */
        memcpy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN);
@@ -329,28 +334,26 @@ static void ConstructPSPoll(struct rtw_adapter *padapter, u8 *pframe, u32 *pLeng
        *pLength = 16;
 }
 
-static void ConstructNullFunctionData(
-       struct rtw_adapter *padapter,
-       u8 *pframe,
-       u32 *pLength,
-       u8 *StaAddr,
-       u8 bQoS,
-       u8 AC,
-       u8 bEosp,
-       u8 bForcePowerSave)
+static void
+ConstructNullFunctionData(struct rtw_adapter *padapter, u8 *pframe,
+                         u32 *pLength, u8 *StaAddr, u8 bQoS, u8 AC,
+                         u8 bEosp, u8 bForcePowerSave)
 {
        struct ieee80211_hdr *pwlanhdr;
        __le16 *fctrl;
        u32 pktlen;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-       struct wlan_network             *cur_network = &pmlmepriv->cur_network;
+       struct wlan_network *cur_network = &pmlmepriv->cur_network;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
 
        pwlanhdr = (struct ieee80211_hdr *)pframe;
 
+       pwlanhdr->frame_control = 0;
+       pwlanhdr->seq_ctrl = 0;
+
        fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
+
        if (bForcePowerSave)
                SetPwrMgt(fctrl);
 
@@ -382,8 +385,6 @@ static void ConstructNullFunctionData(
                break;
        }
 
-       SetSeqNum(pwlanhdr, 0);
-
        if (bQoS == true) {
                struct ieee80211_qos_hdr *pwlanqoshdr;
 
@@ -403,10 +404,10 @@ static void ConstructNullFunctionData(
        *pLength = pktlen;
 }
 
-static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, u32 *pLength, u8 *StaAddr, bool bHideSSID)
+static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe,
+                             u32 *pLength, u8 *StaAddr, bool bHideSSID)
 {
        struct ieee80211_hdr *pwlanhdr;
-       __le16 *fctrl;
        u8 *mac, *bssid;
        u32 pktlen;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -420,14 +421,14 @@ static void ConstructProbeRsp(struct rtw_adapter *padapter, u8 *pframe, u32 *pLe
        mac = myid(&padapter->eeprompriv);
        bssid = cur_network->MacAddress;
 
-       fctrl = &pwlanhdr->frame_control;
-       *(fctrl) = 0;
+       pwlanhdr->frame_control = 0;
+       pwlanhdr->seq_ctrl = 0;
+
        memcpy(pwlanhdr->addr1, StaAddr, ETH_ALEN);
        memcpy(pwlanhdr->addr2, mac, ETH_ALEN);
        memcpy(pwlanhdr->addr3, bssid, ETH_ALEN);
 
-       SetSeqNum(pwlanhdr, 0);
-       SetFrameSubType(fctrl, WIFI_PROBERSP);
+       SetFrameSubType(&pwlanhdr->frame_control, WIFI_PROBERSP);
 
        pktlen = sizeof(struct ieee80211_hdr_3addr);
        pframe += pktlen;
@@ -516,13 +517,13 @@ static void SetFwRsvdPagePkt(struct rtw_adapter *padapter, bool bDLFinished)
 
        /* 3 (3) null data */
        RsvdPageLoc.LocNullData = PageNum;
-       ConstructNullFunctionData(
-               padapter,
-               &ReservedPagePacket[BufIndex],
-               &NullDataLength,
-               get_my_bssid23a(&pmlmeinfo->network),
-               false, 0, 0, false);
-       rtl8723a_fill_fake_txdesc(padapter, &ReservedPagePacket[BufIndex-TxDescLen], NullDataLength, false, false);
+       ConstructNullFunctionData(padapter, &ReservedPagePacket[BufIndex],
+                                 &NullDataLength,
+                                 get_my_bssid23a(&pmlmeinfo->network),
+                                 false, 0, 0, false);
+       rtl8723a_fill_fake_txdesc(padapter,
+                                 &ReservedPagePacket[BufIndex-TxDescLen],
+                                 NullDataLength, false, false);
 
        PageNeed = (u8)PageNum_128(TxDescLen + NullDataLength);
        PageNum += PageNeed;