From: Jes Sorensen <jes.soren...@redhat.com>

Signed-off-by: Jes Sorensen <jes.soren...@redhat.com>
---
 drivers/staging/rtl8723au/core/rtw_ap.c         | 10 +++++----
 drivers/staging/rtl8723au/core/rtw_mlme.c       | 22 ++++++++++++++-----
 drivers/staging/rtl8723au/core/rtw_mlme_ext.c   | 20 +++++++++++-------
 drivers/staging/rtl8723au/core/rtw_wlan_util.c  | 28 ++++++++++++++++++-------
 drivers/staging/rtl8723au/hal/rtl8723a_cmd.c    |  9 ++++++--
 drivers/staging/rtl8723au/include/wlan_bssdef.h |  6 ------
 6 files changed, 62 insertions(+), 33 deletions(-)

diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c 
b/drivers/staging/rtl8723au/core/rtw_ap.c
index e86e5f8..878d2b5 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -652,6 +652,7 @@ static void start_bss_network(struct rtw_adapter *padapter, 
u8 *pbuf)
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
        struct HT_info_element *pht_info = NULL;
+       int bcn_fixed_size;
 
        bcn_interval = (u16)pnetwork->BeaconPeriod;
        cur_channel = pnetwork->DSConfig;
@@ -723,11 +724,12 @@ static void start_bss_network(struct rtw_adapter 
*padapter, u8 *pbuf)
                                                 DYNAMIC_ALL_FUNC_ENABLE);
        }
        /* set channel, bwmode */
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
        p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
-                            pnetwork->IEs +
-                            sizeof(struct ndis_802_11_fixed_ies),
-                            pnetwork->IELength -
-                            sizeof(struct ndis_802_11_fixed_ies));
+                            pnetwork->IEs + bcn_fixed_size,
+                            pnetwork->IELength - bcn_fixed_size);
        if (p && p[1]) {
                pht_info = (struct HT_info_element *)(p + 2);
 
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c 
b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 40a3d6f..da25485 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -469,11 +469,16 @@ static void update_current_network(struct rtw_adapter 
*adapter,
 
        if (check_fwstate(pmlmepriv, _FW_LINKED) &&
            is_same_network23a(&pmlmepriv->cur_network.network, pnetwork)) {
+               int bcn_size;
                update_network23a(&pmlmepriv->cur_network.network,
                                  pnetwork,adapter, true);
+
+               bcn_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+                       offsetof(struct ieee80211_mgmt, u.beacon);
+
                rtw_update_protection23a(adapter,
                                         pmlmepriv->cur_network.network.IEs +
-                                        sizeof (struct ndis_802_11_fixed_ies),
+                                        bcn_size,
                                         
pmlmepriv->cur_network.network.IELength);
        }
 }
@@ -1101,6 +1106,7 @@ rtw_joinbss_update_network23a(struct rtw_adapter 
*padapter,
 {
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_network *cur_network = &pmlmepriv->cur_network;
+       int bcn_size;
 
        DBG_8723A("%s\n", __func__);
 
@@ -1153,9 +1159,11 @@ rtw_joinbss_update_network23a(struct rtw_adapter 
*padapter,
                break;
        }
 
+       bcn_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
        rtw_update_protection23a(padapter, cur_network->network.IEs +
-                                sizeof (struct ndis_802_11_fixed_ies),
-                                cur_network->network.IELength);
+                                bcn_size, cur_network->network.IELength);
 
        rtw_update_ht_cap23a(padapter, cur_network->network.IEs,
                             cur_network->network.IELength);
@@ -2282,6 +2290,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, 
u8 *pie, uint ie_len)
        struct registry_priv *pregistrypriv = &padapter->registrypriv;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+       int bcn_fixed_size;
 
        if (!phtpriv->ht_option)
                return;
@@ -2291,9 +2300,12 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, 
u8 *pie, uint ie_len)
 
        DBG_8723A("+rtw_update_ht_cap23a()\n");
 
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
        /* Adjust pie + ie_len for our searches */
-       pie += sizeof (struct ndis_802_11_fixed_ies);
-       ie_len -= sizeof (struct ndis_802_11_fixed_ies);
+       pie += bcn_fixed_size;
+       ie_len -= bcn_fixed_size;
 
        /* maybe needs check if ap supports rx ampdu. */
        if (phtpriv->ampdu_enable == false &&
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 41ca73c..8c73fed 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3278,7 +3278,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
-       int bssrate_len = 0, sta_bssrate_len = 0, pie_len;
+       int bssrate_len = 0, sta_bssrate_len = 0, pie_len, bcn_fixed_size;
        u8 * pie;
 
        pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
@@ -3393,9 +3393,11 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
                                       bssrate_len, bssrate, &pattrib->pktlen);
 
        /* RSN */
-       pie = pmlmeinfo->network.IEs + sizeof(struct ndis_802_11_fixed_ies);
-       pie_len = pmlmeinfo->network.IELength -
-               sizeof(struct ndis_802_11_fixed_ies);
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
+       pie = pmlmeinfo->network.IEs + bcn_fixed_size;
+       pie_len = pmlmeinfo->network.IELength - bcn_fixed_size;
 
        p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
        if (p)
@@ -3471,8 +3473,7 @@ void issue_assocreq23a(struct rtw_adapter *padapter)
        }
 
        /* vendor specific IE, such as WPA, WMM, WPS */
-       for (i = sizeof(struct ndis_802_11_fixed_ies);
-            i < pmlmeinfo->network.IELength;) {
+       for (i = bcn_fixed_size;  i < pmlmeinfo->network.IELength;) {
                pIE = (struct ndis_802_11_var_ies *)
                        (pmlmeinfo->network.IEs + i);
 
@@ -5900,6 +5901,7 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const 
u8 *pbuf)
        const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
        struct HT_info_element *pht_info;
        u32 i;
+       int bcn_fixed_size;
         /* u32 initialgain; */
        /* u32  acparm; */
 
@@ -5945,8 +5947,10 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const 
u8 *pbuf)
        /* pmlmeinfo->assoc_AP_vendor = check_assoc_AP23a(pnetwork->IEs,
           pnetwork->IELength); */
 
-       for (i = sizeof(struct ndis_802_11_fixed_ies); i < pnetwork->IELength;)
-       {
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
+       for (i = bcn_fixed_size; i < pnetwork->IELength;) {
                pIE = (struct ndis_802_11_var_ies *)(pnetwork->IEs + i);
 
                switch (pIE->ElementID)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c 
b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index c4c4716..ce73cbe 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -1173,10 +1173,13 @@ bool is_ap_in_tkip23a(struct rtw_adapter *padapter)
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
+       int bcn_fixed_size;
+
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
 
        if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) {
-               for (i = sizeof(struct ndis_802_11_fixed_ies);
-                    i < pmlmeinfo->network.IELength;) {
+               for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) {
                        pIE = (struct ndis_802_11_var_ies *)
                                (pmlmeinfo->network.IEs + i);
 
@@ -1207,10 +1210,13 @@ bool should_forbid_n_rate23a(struct rtw_adapter * 
padapter)
        struct ndis_802_11_var_ies *pIE;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct wlan_bssid_ex  *cur_network = &pmlmepriv->cur_network.network;
+       int bcn_fixed_size;
+
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
 
        if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) {
-               for (i = sizeof(struct ndis_802_11_fixed_ies);
-                    i < cur_network->IELength;) {
+               for (i = bcn_fixed_size; i < cur_network->IELength;) {
                        pIE = (struct ndis_802_11_var_ies *)
                                (cur_network->IEs + i);
 
@@ -1248,10 +1254,13 @@ bool is_ap_in_wep23a(struct rtw_adapter *padapter)
        struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
        struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
        struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
+       int bcn_fixed_size;
+
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
 
        if (rtw_get_capability23a(cur_network) & WLAN_CAPABILITY_PRIVACY) {
-               for (i = sizeof(struct ndis_802_11_fixed_ies);
-                    i < pmlmeinfo->network.IELength;) {
+               for (i = bcn_fixed_size; i < pmlmeinfo->network.IELength;) {
                        pIE = (struct ndis_802_11_var_ies *)
                                (pmlmeinfo->network.IEs + i);
 
@@ -1432,14 +1441,17 @@ void update_tx_basic_rate23a(struct rtw_adapter 
*padapter, u8 wirelessmode)
 
 unsigned char check_assoc_AP23a(u8 *pframe, uint len)
 {
-       unsigned int i;
+       int i, bcn_fixed_size;
        struct ndis_802_11_var_ies *pIE;
        u8 epigram_vendor_flag;
        u8 ralink_vendor_flag;
        epigram_vendor_flag = 0;
        ralink_vendor_flag = 0;
 
-       for (i = sizeof(struct ndis_802_11_fixed_ies); i < len;) {
+       bcn_fixed_size = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+               offsetof(struct ieee80211_mgmt, u.beacon);
+
+       for (i = bcn_fixed_size; i < len;) {
                pIE = (struct ndis_802_11_var_ies *)(pframe + i);
 
                switch (pIE->ElementID) {
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c 
b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
index 457ce92..1166062 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
@@ -210,6 +210,7 @@ static void ConstructBeacon(struct rtw_adapter *padapter, 
u8 *pframe, u32 *pLeng
        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__); */
 
@@ -246,9 +247,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;
        }
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h 
b/drivers/staging/rtl8723au/include/wlan_bssdef.h
index 3c330f3..c0dfcda 100644
--- a/drivers/staging/rtl8723au/include/wlan_bssdef.h
+++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h
@@ -22,12 +22,6 @@
 #define NDIS_802_11_LENGTH_RATES        8
 #define NDIS_802_11_LENGTH_RATES_EX     16
 
-struct ndis_802_11_fixed_ies {
-       u8  Timestamp[8];
-       u16  BeaconInterval;
-       u16  Capabilities;
-};
-
 struct ndis_802_11_var_ies {
        u8  ElementID;
        u8  Length;
-- 
1.9.0

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to