[x86] r8723au: Backport changes up to Linux 3.17 (Closes: #765685)

svn path=/dists/sid/linux/; revision=21973
This commit is contained in:
Ben Hutchings 2014-10-26 00:59:13 +00:00
parent 7d3bad8448
commit 7088f8b607
248 changed files with 23409 additions and 0 deletions

1
debian/changelog vendored
View File

@ -5,6 +5,7 @@ linux (3.16.5-2) UNRELEASED; urgency=medium
(Closes: #764804)
* [i386/486] Update description to say that the processor must have a TSC
(see #766105)
* [x86] r8723au: Backport changes up to Linux 3.17 (Closes: #765685)
[ Mauricio Faria de Oliveira ]
* [ppc64el] Disable CONFIG_CMDLINE{,_BOOL} usage for setting consoles

View File

@ -0,0 +1,156 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:53 +0200
Subject: [001/249] staging: rtl8723au: rtw_get_wps_ie23a(): Remove unused dest
pointer wps_ie
Origin: https://git.kernel.org/linus/fbf380cf9af65ef79741ef128f583bc14339da8b
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 7 +++++--
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 7 +------
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +-
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 6 ++----
drivers/staging/rtl8723au/include/ieee80211.h | 2 +-
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 9 ++++-----
6 files changed, 14 insertions(+), 19 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index c8700b3..976d4e4 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -660,7 +660,9 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
/* check if there is wps ie, */
/* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */
/* and at first time the security ie (RSN/WPA IE) will not include in beacon. */
- if (NULL == rtw_get_wps_ie23a(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
+ if (NULL == rtw_get_wps_ie23a(pnetwork->IEs + _FIXED_IE_LENGTH_,
+ pnetwork->IELength - _FIXED_IE_LENGTH_,
+ NULL))
pmlmeext->bstart_bss = true;
/* todo: update wmm, ht cap */
@@ -1239,7 +1241,8 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter)
if (pwps_ie_src == NULL)
return;
- pwps_ie = rtw_get_wps_ie23a(ie+_FIXED_IE_LENGTH_, ielen-_FIXED_IE_LENGTH_, NULL, &wps_ielen);
+ pwps_ie = rtw_get_wps_ie23a(ie + _FIXED_IE_LENGTH_,
+ ielen - _FIXED_IE_LENGTH_, &wps_ielen);
if (pwps_ie == NULL || wps_ielen == 0)
return;
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index adb86a5..52eb5ff 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -700,14 +700,12 @@ int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
* rtw_get_wps_ie23a - Search WPS IE from a series of IEs
* @in_ie: Address of IEs to search
* @in_len: Length limit from in_ie
- * @wps_ie: If not NULL and WPS IE is found, WPS IE will be copied to the
- * buf starting from wps_ie
* @wps_ielen: If not NULL and WPS IE is found, will set to the length of
* the entire WPS IE
*
* Returns: The address of the WPS IE found, or NULL
*/
-u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
+u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen)
{
uint cnt;
u8 *wpsie_ptr = NULL;
@@ -728,9 +726,6 @@ u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
!memcmp(&in_ie[cnt+2], wps_oui, 4)) {
wpsie_ptr = &in_ie[cnt];
- if (wps_ie)
- memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
if (wps_ielen)
*wps_ielen = in_ie[cnt + 1] + 2;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 7170258..f292fce 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -600,7 +600,7 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter,
if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
if (rtw_get_wps_ie23a(pnetwork->network.IEs + _FIXED_IE_LENGTH_,
pnetwork->network.IELength -
- _FIXED_IE_LENGTH_, NULL, &wps_ielen))
+ _FIXED_IE_LENGTH_, &wps_ielen))
return true;
else
return false;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index e1b28a2..c1e8299 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -2511,8 +2511,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms)
sizeof (struct ieee80211_hdr_3addr) +
_BEACON_IE_OFFSET_, pattrib->pktlen -
sizeof (struct ieee80211_hdr_3addr) -
- _BEACON_IE_OFFSET_, NULL,
- &wps_ielen);
+ _BEACON_IE_OFFSET_, &wps_ielen);
if (wps_ie && wps_ielen > 0) {
rtw_get_wps_attr_content23a(wps_ie, wps_ielen,
WPS_ATTR_SELECTED_REGISTRAR,
@@ -2677,8 +2676,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da,
pwps_ie = rtw_get_wps_ie23a(cur_network->IEs +
_FIXED_IE_LENGTH_,
cur_network->IELength -
- _FIXED_IE_LENGTH_, NULL,
- &wps_ielen);
+ _FIXED_IE_LENGTH_, &wps_ielen);
/* inerset & update wps_probe_resp_ie */
if (pmlmepriv->wps_probe_resp_ie && pwps_ie && wps_ielen > 0) {
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 69c0f5c..68ee71b 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -432,7 +432,7 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in
int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len);
-u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen);
+u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen);
u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index f0839f6..693310c 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1486,7 +1486,7 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter,
DBG_8723A("%s, ielen =%d\n", __func__, len);
if (len > 0) {
- wps_ie = rtw_get_wps_ie23a(buf, len, NULL, &wps_ielen);
+ wps_ie = rtw_get_wps_ie23a(buf, len, &wps_ielen);
if (wps_ie) {
DBG_8723A("probe_req_wps_ielen =%d\n", wps_ielen);
@@ -1886,7 +1886,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
uint wps_ielen;
u8 *wps_ie;
- wps_ie = rtw_get_wps_ie23a(buf, ielen, NULL, &wps_ielen);
+ wps_ie = rtw_get_wps_ie23a(buf, ielen, &wps_ielen);
if (wps_ie && wps_ielen > 0) {
DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ielen);
padapter->securitypriv.wps_ie_len =
@@ -2825,9 +2825,8 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
len = head_len + tail_len - 24;
/* check wps ie if inclued */
- if (rtw_get_wps_ie23a
- (pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_, NULL,
- &wps_ielen))
+ if (rtw_get_wps_ie23a(pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_,
+ &wps_ielen))
DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen);
/* pbss_network->IEs will not include p2p_ie, wfd ie */

View File

@ -0,0 +1,147 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:54 +0200
Subject: [002/249] staging: rtl8723au: rtw_mlme_ext.c: Convert
rtw_get_wps_ie23a() to cfg80211_find_vendor_ie()
Origin: https://git.kernel.org/linus/6e5e41840e2bdafbe1be3fffa2cb0d90bfd067ca
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 15 +++++-----
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 40 +++++++++++++++-----------
drivers/staging/rtl8723au/include/ieee80211.h | 4 +--
3 files changed, 34 insertions(+), 25 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 52eb5ff..a1a27e2 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -752,11 +752,11 @@ u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen)
*
* Returns: the address of the specific WPS attribute found, or NULL
*/
-u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
- u8 *buf_attr, u32 *len_attr)
+const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen,
+ u16 target_attr_id, u8 *buf_attr, u32 *len_attr)
{
- u8 *attr_ptr = NULL;
- u8 * target_attr_ptr = NULL;
+ const u8 *attr_ptr = NULL;
+ const u8 *target_attr_ptr = NULL;
u8 wps_oui[4] = {0x00, 0x50, 0xF2, 0x04};
if (len_attr)
@@ -808,10 +808,11 @@ u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
*
* Returns: the address of the specific WPS attribute content found, or NULL
*/
-u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id,
- u8 *buf_content, uint *len_content)
+const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen,
+ u16 target_attr_id, u8 *buf_content,
+ uint *len_content)
{
- u8 *attr_ptr;
+ const u8 *attr_ptr;
u32 attr_len;
if (len_content)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index c1e8299..20e9b62 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -2460,8 +2460,7 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms)
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};
- u8 *wps_ie;
- u32 wps_ielen;
+ const u8 *wps_ie;
u8 sr = 0;
int len_diff;
@@ -2498,6 +2497,8 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms)
pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
if ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) {
+ u8 *iebuf;
+ int buflen;
/* DBG_8723A("ie len =%d\n", cur_network->IELength); */
memcpy(pframe, cur_network->IEs, cur_network->IELength);
len_diff = update_hidden_ssid(pframe + _BEACON_IE_OFFSET_,
@@ -2507,13 +2508,17 @@ void issue_beacon23a(struct rtw_adapter *padapter, int timeout_ms)
pframe += (cur_network->IELength+len_diff);
pattrib->pktlen += (cur_network->IELength+len_diff);
- wps_ie = rtw_get_wps_ie23a(pmgntframe->buf_addr + TXDESC_OFFSET+
- sizeof (struct ieee80211_hdr_3addr) +
- _BEACON_IE_OFFSET_, pattrib->pktlen -
- sizeof (struct ieee80211_hdr_3addr) -
- _BEACON_IE_OFFSET_, &wps_ielen);
- if (wps_ie && wps_ielen > 0) {
- rtw_get_wps_attr_content23a(wps_ie, wps_ielen,
+ iebuf = pmgntframe->buf_addr + TXDESC_OFFSET +
+ sizeof (struct ieee80211_hdr_3addr) +
+ _BEACON_IE_OFFSET_;
+ buflen = pattrib->pktlen - sizeof (struct ieee80211_hdr_3addr) -
+ _BEACON_IE_OFFSET_;
+ wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ iebuf, buflen);
+
+ if (wps_ie && wps_ie[1] > 0) {
+ rtw_get_wps_attr_content23a(wps_ie, wps_ie[1],
WPS_ATTR_SELECTED_REGISTRAR,
(u8*)&sr, NULL);
}
@@ -2619,7 +2624,7 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da,
unsigned char *mac, *bssid;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
#ifdef CONFIG_8723AU_AP_MODE
- u8 *pwps_ie;
+ const u8 *pwps_ie;
uint wps_ielen;
u8 *ssid_ie;
int ssid_ielen;
@@ -2673,16 +2678,19 @@ static void issue_probersp(struct rtw_adapter *padapter, unsigned char *da,
#ifdef CONFIG_8723AU_AP_MODE
if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE) {
- pwps_ie = rtw_get_wps_ie23a(cur_network->IEs +
- _FIXED_IE_LENGTH_,
- cur_network->IELength -
- _FIXED_IE_LENGTH_, &wps_ielen);
+ pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ cur_network->IEs +
+ _FIXED_IE_LENGTH_,
+ cur_network->IELength -
+ _FIXED_IE_LENGTH_);
/* inerset & update wps_probe_resp_ie */
- if (pmlmepriv->wps_probe_resp_ie && pwps_ie && wps_ielen > 0) {
+ if (pmlmepriv->wps_probe_resp_ie && pwps_ie && pwps_ie[1] > 0) {
uint wps_offset, remainder_ielen;
- u8 *premainder_ie;
+ const u8 *premainder_ie;
+ wps_ielen = pwps_ie[1];
wps_offset = (uint)(pwps_ie - cur_network->IEs);
premainder_ie = pwps_ie + wps_ielen;
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 68ee71b..e023e05 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -433,8 +433,8 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in
int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len);
u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen);
-u8 *rtw_get_wps_attr23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
-u8 *rtw_get_wps_attr_content23a(u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
+const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
+const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);
uint rtw_get_rateset_len23a(u8 *rateset);

View File

@ -0,0 +1,42 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:55 +0200
Subject: [003/249] staging: rtl8723au: rtw_mlme.c: Convert rtw_get_wps_ie23a()
to cfg80211_find_vendor_ie()
Origin: https://git.kernel.org/linus/9c40e1230ec57a8ff7261681feeec6cbe72bbfb2
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index f292fce..0b9fd3a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -588,19 +588,18 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter,
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
u32 desired_encmode;
u32 privacy;
-
- /* u8 wps_ie[512]; */
- uint wps_ielen;
-
int bselected = true;
desired_encmode = psecuritypriv->ndisencryptstatus;
privacy = pnetwork->network.Privacy;
if (check_fwstate(pmlmepriv, WIFI_UNDER_WPS)) {
- if (rtw_get_wps_ie23a(pnetwork->network.IEs + _FIXED_IE_LENGTH_,
- pnetwork->network.IELength -
- _FIXED_IE_LENGTH_, &wps_ielen))
+ if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPA,
+ pnetwork->network.IEs +
+ _FIXED_IE_LENGTH_,
+ pnetwork->network.IELength -
+ _FIXED_IE_LENGTH_))
return true;
else
return false;

View File

@ -0,0 +1,128 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:56 +0200
Subject: [004/249] staging: rtl8723au: ioctl_cfg80211.c: Convert
rtw_get_wps_ie23a() to cfg80211_find_vendor_ie()
Origin: https://git.kernel.org/linus/d3797af488780e4f83d92ea0a3dc0a6381b566f3
Given that the IE len is stored in a u8, there is no point having a
512 buffer to store it, nor check if the size exceeds this size.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/include/ieee80211.h | 2 +-
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 48 +++++++++++------------
2 files changed, 24 insertions(+), 26 deletions(-)
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index e023e05..43ad669 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -317,7 +317,7 @@ struct ieee80211_snap_hdr {
#define MAX_CHANNEL_NUMBER 161
#define MAX_WPA_IE_LEN 256
-#define MAX_WPS_IE_LEN 512
+#define MAX_WPS_IE_LEN 256
#define MAX_P2P_IE_LEN 256
#define MAX_WFD_IE_LEN 128
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 693310c..d2fa9b20 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1479,16 +1479,17 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter,
char *buf, int len)
{
int ret = 0;
- uint wps_ielen = 0;
- u8 *wps_ie;
+ const u8 *wps_ie;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
DBG_8723A("%s, ielen =%d\n", __func__, len);
if (len > 0) {
- wps_ie = rtw_get_wps_ie23a(buf, len, &wps_ielen);
+ wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ buf, len);
if (wps_ie) {
- DBG_8723A("probe_req_wps_ielen =%d\n", wps_ielen);
+ DBG_8723A("probe_req_wps_ielen =%d\n", wps_ie[1]);
if (pmlmepriv->wps_probe_req_ie) {
pmlmepriv->wps_probe_req_ie_len = 0;
@@ -1496,15 +1497,14 @@ static int rtw_cfg80211_set_probe_req_wpsp2pie(struct rtw_adapter *padapter,
pmlmepriv->wps_probe_req_ie = NULL;
}
- pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie,
- wps_ielen,
+ pmlmepriv->wps_probe_req_ie = kmemdup(wps_ie, wps_ie[1],
GFP_KERNEL);
if (pmlmepriv->wps_probe_req_ie == NULL) {
DBG_8723A("%s()-%d: kmalloc() ERROR!\n",
__func__, __LINE__);
return -EINVAL;
}
- pmlmepriv->wps_probe_req_ie_len = wps_ielen;
+ pmlmepriv->wps_probe_req_ie_len = wps_ie[1];
}
}
@@ -1751,6 +1751,7 @@ static int rtw_cfg80211_set_key_mgt(struct security_priv *psecuritypriv,
static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
size_t ielen)
{
+ const u8 *wps_ie;
u8 *buf = NULL;
int group_cipher = 0, pairwise_cipher = 0;
int ret = 0;
@@ -1882,22 +1883,17 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
break;
}
- { /* handle wps_ie */
- uint wps_ielen;
- u8 *wps_ie;
-
- wps_ie = rtw_get_wps_ie23a(buf, ielen, &wps_ielen);
- if (wps_ie && wps_ielen > 0) {
- DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ielen);
- padapter->securitypriv.wps_ie_len =
- wps_ielen <
- MAX_WPS_IE_LEN ? wps_ielen : MAX_WPS_IE_LEN;
- memcpy(padapter->securitypriv.wps_ie, wps_ie,
- padapter->securitypriv.wps_ie_len);
- set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
- } else {
- _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
- }
+ wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ buf, ielen);
+ if (wps_ie && wps_ie[1] > 0) {
+ DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ie[1]);
+ padapter->securitypriv.wps_ie_len = wps_ie[1];
+ memcpy(padapter->securitypriv.wps_ie, wps_ie,
+ padapter->securitypriv.wps_ie_len);
+ set_fwstate(&padapter->mlmepriv, WIFI_UNDER_WPS);
+ } else {
+ _clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
}
/* TKIP and AES disallow multicast packets until installing group key */
@@ -2825,8 +2821,10 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
len = head_len + tail_len - 24;
/* check wps ie if inclued */
- if (rtw_get_wps_ie23a(pbuf + _FIXED_IE_LENGTH_, len - _FIXED_IE_LENGTH_,
- &wps_ielen))
+ if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ pbuf + _FIXED_IE_LENGTH_,
+ len - _FIXED_IE_LENGTH_))
DBG_8723A("add bcn, wps_ielen =%d\n", wps_ielen);
/* pbss_network->IEs will not include p2p_ie, wfd ie */

View File

@ -0,0 +1,78 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:57 +0200
Subject: [005/249] staging: rtl8723au: rtw_ap.c: Convert from
rtw_get_wps_ie23a() to cfg80211_find_vendor_ie()
Origin: https://git.kernel.org/linus/715a8a749310e78d6ca34d85229407db7a7775ec
Some of this is hackish, but so was the original code. This needs to
be cleaned up eventually.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 25 ++++++++++++++++---------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index 976d4e4..d03bb3e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -660,9 +660,11 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
/* check if there is wps ie, */
/* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */
/* and at first time the security ie (RSN/WPA IE) will not include in beacon. */
- if (NULL == rtw_get_wps_ie23a(pnetwork->IEs + _FIXED_IE_LENGTH_,
- pnetwork->IELength - _FIXED_IE_LENGTH_,
- NULL))
+ if (NULL == cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ pnetwork->IEs + _FIXED_IE_LENGTH_,
+ pnetwork->IELength -
+ _FIXED_IE_LENGTH_))
pmlmeext->bstart_bss = true;
/* todo: update wmm, ht cap */
@@ -1226,7 +1228,8 @@ static void update_bcn_wmm_ie(struct rtw_adapter *padapter)
static void update_bcn_wps_ie(struct rtw_adapter *padapter)
{
- u8 *pwps_ie = NULL, *pwps_ie_src, *premainder_ie, *pbackup_remainder_ie = NULL;
+ const u8 *pwps_ie, *premainder_ie;
+ u8 *pwps_ie_src, *pbackup_remainder_ie = NULL;
uint wps_ielen = 0, wps_offset, remainder_ielen;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -1241,12 +1244,15 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter)
if (pwps_ie_src == NULL)
return;
- pwps_ie = rtw_get_wps_ie23a(ie + _FIXED_IE_LENGTH_,
- ielen - _FIXED_IE_LENGTH_, &wps_ielen);
+ pwps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPS,
+ ie + _FIXED_IE_LENGTH_,
+ ielen - _FIXED_IE_LENGTH_);
- if (pwps_ie == NULL || wps_ielen == 0)
+ if (pwps_ie == NULL || pwps_ie[1] == 0)
return;
+ wps_ielen = pwps_ie[1];
wps_offset = (uint)(pwps_ie-ie);
premainder_ie = pwps_ie + wps_ielen;
@@ -1263,11 +1269,12 @@ static void update_bcn_wps_ie(struct rtw_adapter *padapter)
wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */
if ((wps_offset+wps_ielen+2+remainder_ielen)<= MAX_IE_SZ)
{
- memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
+ memcpy(ie + wps_offset, pwps_ie_src, wps_ielen + 2);
pwps_ie += (wps_ielen+2);
if (pbackup_remainder_ie)
- memcpy(pwps_ie, pbackup_remainder_ie, remainder_ielen);
+ memcpy(ie + wps_offset + wps_ielen + 2,
+ pbackup_remainder_ie, remainder_ielen);
/* update IELength */
pnetwork->IELength = wps_offset + (wps_ielen+2) + remainder_ielen;

View File

@ -0,0 +1,79 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:58 +0200
Subject: [006/249] staging: rtl8723au: Remove obsolete rtw_get_wps_ie23a()
Origin: https://git.kernel.org/linus/4aea177681d809cb64ff97a3f10ed49780a9de99
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 44 --------------------------
drivers/staging/rtl8723au/include/ieee80211.h | 1 -
2 files changed, 45 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index a1a27e2..3dc9119 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -697,50 +697,6 @@ int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
}
/**
- * rtw_get_wps_ie23a - Search WPS IE from a series of IEs
- * @in_ie: Address of IEs to search
- * @in_len: Length limit from in_ie
- * @wps_ielen: If not NULL and WPS IE is found, will set to the length of
- * the entire WPS IE
- *
- * Returns: The address of the WPS IE found, or NULL
- */
-u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen)
-{
- uint cnt;
- u8 *wpsie_ptr = NULL;
- u8 eid, wps_oui[4] = {0x0, 0x50, 0xf2, 0x04};
-
- if (wps_ielen)
- *wps_ielen = 0;
-
- if (!in_ie || in_len <= 0)
- return wpsie_ptr;
-
- cnt = 0;
-
- while (cnt < in_len) {
- eid = in_ie[cnt];
-
- if (eid == WLAN_EID_VENDOR_SPECIFIC &&
- !memcmp(&in_ie[cnt+2], wps_oui, 4)) {
- wpsie_ptr = &in_ie[cnt];
-
- if (wps_ielen)
- *wps_ielen = in_ie[cnt + 1] + 2;
-
- cnt += in_ie[cnt + 1] + 2;
-
- break;
- } else {
- cnt += in_ie[cnt + 1] + 2; /* goto next */
- }
- }
-
- return wpsie_ptr;
-}
-
-/**
* rtw_get_wps_attr23a - Search a specific WPS attribute from a given WPS IE
* @wps_ie: Address of WPS IE to search
* @wps_ielen: Length limit from wps_ie
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 43ad669..bb645cf 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -432,7 +432,6 @@ int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, in
int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len);
-u8 *rtw_get_wps_ie23a(u8 *in_ie, uint in_len, uint *wps_ielen);
const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);

View File

@ -0,0 +1,621 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:08 +0200
Subject: [009/249] staging: rtl8723au: rtw_mlme_ext.c: Fix up some of the bad
formatting
Origin: https://git.kernel.org/linus/d54239a4856cf447a4ba0cbbb4b4f35f4715e4f4
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 274 +++++++++++++++-----------
1 file changed, 160 insertions(+), 114 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 20e9b62..7a117c0 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -107,12 +107,12 @@ static u8 null_addr[ETH_ALEN]= {0, 0, 0, 0, 0, 0};
OUI definitions for the vendor specific IE
***************************************************/
unsigned char WMM_OUI23A[] = {0x00, 0x50, 0xf2, 0x02};
-unsigned char WPS_OUI23A[] = {0x00, 0x50, 0xf2, 0x04};
-unsigned char P2P_OUI23A[] = {0x50, 0x6F, 0x9A, 0x09};
-unsigned char WFD_OUI23A[] = {0x50, 0x6F, 0x9A, 0x0A};
+unsigned char WPS_OUI23A[] = {0x00, 0x50, 0xf2, 0x04};
+unsigned char P2P_OUI23A[] = {0x50, 0x6F, 0x9A, 0x09};
+unsigned char WFD_OUI23A[] = {0x50, 0x6F, 0x9A, 0x0A};
-unsigned char WMM_INFO_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
-unsigned char WMM_PARA_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
+unsigned char WMM_INFO_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
+unsigned char WMM_PARA_OUI23A[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
@@ -120,49 +120,87 @@ static unsigned char REALTEK_96B_IE[] = {0x00, 0xe0, 0x4c, 0x02, 0x01, 0x20};
MCS rate definitions
*********************************************************/
unsigned char MCS_rate_2R23A[16] = {
- 0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+ 0xff, 0xff, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
unsigned char MCS_rate_1R23A[16] = {
- 0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+ 0xff, 0x00, 0x0, 0x0, 0x01, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
/********************************************************
ChannelPlan definitions
*********************************************************/
-static struct rt_channel_plan_2g RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = {
- {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, /* 0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */
- {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13}, /* 0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */
- {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11}, /* 0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */
- {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14}, /* 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */
- {{10, 11, 12, 13}, 4}, /* 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */
- {{}, 0}, /* 0x05, RT_CHANNEL_DOMAIN_2G_NULL */
+static struct rt_channel_plan_2g RTW_ChannelPlan2G[RT_CHANNEL_DOMAIN_2G_MAX] = {
+ /* 0x00, RT_CHANNEL_DOMAIN_2G_WORLD , Passive scan CH 12, 13 */
+ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
+ /* 0x01, RT_CHANNEL_DOMAIN_2G_ETSI1 */
+ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}, 13},
+ /* 0x02, RT_CHANNEL_DOMAIN_2G_FCC1 */
+ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, 11},
+ /* 0x03, RT_CHANNEL_DOMAIN_2G_MIKK1 */
+ {{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14}, 14},
+ /* 0x04, RT_CHANNEL_DOMAIN_2G_ETSI2 */
+ {{10, 11, 12, 13}, 4},
+ /* 0x05, RT_CHANNEL_DOMAIN_2G_NULL */
+ {{}, 0},
};
-static struct rt_channel_plan_5g RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
- {{}, 0}, /* 0x00, RT_CHANNEL_DOMAIN_5G_NULL */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 19}, /* 0x01, RT_CHANNEL_DOMAIN_5G_ETSI1 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, /* 0x02, RT_CHANNEL_DOMAIN_5G_ETSI2 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 149, 153, 157, 161, 165}, 22}, /* 0x03, RT_CHANNEL_DOMAIN_5G_ETSI3 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24}, /* 0x04, RT_CHANNEL_DOMAIN_5G_FCC1 */
- {{36, 40, 44, 48, 149, 153, 157, 161, 165}, 9}, /* 0x05, RT_CHANNEL_DOMAIN_5G_FCC2 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 13}, /* 0x06, RT_CHANNEL_DOMAIN_5G_FCC3 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161}, 12}, /* 0x07, RT_CHANNEL_DOMAIN_5G_FCC4 */
- {{149, 153, 157, 161, 165}, 5}, /* 0x08, RT_CHANNEL_DOMAIN_5G_FCC5 */
- {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, /* 0x09, RT_CHANNEL_DOMAIN_5G_FCC6 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}, 20}, /* 0x0A, RT_CHANNEL_DOMAIN_5G_FCC7_IC1 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 149, 153, 157, 161, 165}, 20}, /* 0x0B, RT_CHANNEL_DOMAIN_5G_KCC1 */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 19}, /* 0x0C, RT_CHANNEL_DOMAIN_5G_MKK1 */
- {{36, 40, 44, 48, 52, 56, 60, 64}, 8}, /* 0x0D, RT_CHANNEL_DOMAIN_5G_MKK2 */
- {{100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 11}, /* 0x0E, RT_CHANNEL_DOMAIN_5G_MKK3 */
- {{56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149, 153, 157, 161, 165}, 15}, /* 0x0F, RT_CHANNEL_DOMAIN_5G_NCC1 */
- {{56, 60, 64, 149, 153, 157, 161, 165}, 8}, /* 0x10, RT_CHANNEL_DOMAIN_5G_NCC2 */
-
- /* Driver self defined for old channel plan Compatible , Remember to modify if have new channel plan definition ===== */
- {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112, 116, 132, 136, 140, 149, 153, 157, 161, 165}, 21}, /* 0x11, RT_CHANNEL_DOMAIN_5G_FCC */
- {{36, 40, 44, 48}, 4}, /* 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS */
- {{36, 40, 44, 48, 149, 153, 157, 161}, 8}, /* 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS */
+static struct rt_channel_plan_5g RTW_ChannelPlan5G[RT_CHANNEL_DOMAIN_5G_MAX] = {
+ /* 0x00, RT_CHANNEL_DOMAIN_5G_NULL */
+ {{}, 0},
+ /* 0x01, RT_CHANNEL_DOMAIN_5G_ETSI1 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 128, 132, 136, 140}, 19},
+ /* 0x02, RT_CHANNEL_DOMAIN_5G_ETSI2 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24},
+ /* 0x03, RT_CHANNEL_DOMAIN_5G_ETSI3 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 128, 132, 149, 153, 157, 161, 165}, 22},
+ /* 0x04, RT_CHANNEL_DOMAIN_5G_FCC1 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 128, 132, 136, 140, 149, 153, 157, 161, 165}, 24},
+ /* 0x05, RT_CHANNEL_DOMAIN_5G_FCC2 */
+ {{36, 40, 44, 48, 149, 153, 157, 161, 165}, 9},
+ /* 0x06, RT_CHANNEL_DOMAIN_5G_FCC3 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161, 165}, 13},
+ /* 0x07, RT_CHANNEL_DOMAIN_5G_FCC4 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 149, 153, 157, 161}, 12},
+ /* 0x08, RT_CHANNEL_DOMAIN_5G_FCC5 */
+ {{149, 153, 157, 161, 165}, 5},
+ /* 0x09, RT_CHANNEL_DOMAIN_5G_FCC6 */
+ {{36, 40, 44, 48, 52, 56, 60, 64}, 8},
+ /* 0x0A, RT_CHANNEL_DOMAIN_5G_FCC7_IC1 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 136, 140, 149, 153, 157, 161, 165}, 20},
+ /* 0x0B, RT_CHANNEL_DOMAIN_5G_KCC1 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 149, 153, 157, 161, 165}, 20},
+ /* 0x0C, RT_CHANNEL_DOMAIN_5G_MKK1 */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 120, 124, 128, 132, 136, 140}, 19},
+ /* 0x0D, RT_CHANNEL_DOMAIN_5G_MKK2 */
+ {{36, 40, 44, 48, 52, 56, 60, 64}, 8},
+ /* 0x0E, RT_CHANNEL_DOMAIN_5G_MKK3 */
+ {{100, 104, 108, 112, 116, 120, 124, 128, 132, 136, 140}, 11},
+ /* 0x0F, RT_CHANNEL_DOMAIN_5G_NCC1 */
+ {{56, 60, 64, 100, 104, 108, 112, 116, 136, 140, 149,
+ 153, 157, 161, 165}, 15},
+ /* 0x10, RT_CHANNEL_DOMAIN_5G_NCC2 */
+ {{56, 60, 64, 149, 153, 157, 161, 165}, 8},
+
+ /* Driver self defined for old channel plan Compatible,
+ Remember to modify if have new channel plan definition ===== */
+ /* 0x11, RT_CHANNEL_DOMAIN_5G_FCC */
+ {{36, 40, 44, 48, 52, 56, 60, 64, 100, 104, 108, 112,
+ 116, 132, 136, 140, 149, 153, 157, 161, 165}, 21},
+ /* 0x12, RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS */
+ {{36, 40, 44, 48}, 4},
+ /* 0x13, RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS */
+ {{36, 40, 44, 48, 149, 153, 157, 161}, 8},
};
-static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
+static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
/* 0x00 ~ 0x1F , Old Define ===== */
{0x02, 0x11}, /* 0x00, RT_CHANNEL_DOMAIN_FCC */
{0x02, 0x0A}, /* 0x01, RT_CHANNEL_DOMAIN_IC */
@@ -233,7 +271,8 @@ static struct rt_channel_plan_map RTW_ChannelPlanMap[RT_CHANNEL_DOMAIN_MAX] = {
{0x03, 0x00}, /* 0x41, RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G */
};
-static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE = {0x03, 0x02}; /* use the conbination for max channel numbers */
+static struct rt_channel_plan_map RTW_CHANNEL_PLAN_MAP_REALTEK_DEFINE =
+{0x03, 0x02}; /* use the conbination for max channel numbers */
static void dummy_event_callback(struct rtw_adapter *adapter, const u8 *pbuf)
{
@@ -250,8 +289,7 @@ static struct fwevent wlanevents[] =
{0, NULL},
{0, NULL},
{0, &rtw_survey_event_cb23a}, /*8*/
- {sizeof (struct surveydone_event), &rtw_surveydone_event_callback23a}, /*9*/
-
+ {sizeof (struct surveydone_event), &rtw_surveydone_event_callback23a},
{0, &rtw23a_joinbss_event_cb}, /*10*/
{sizeof(struct stassoc_event), &rtw_stassoc_event_callback23a},
{sizeof(struct stadel_event), &rtw_stadel_event_callback23a},
@@ -309,7 +347,7 @@ Following are the initialization functions for WiFi MLME
int init_hw_mlme_ext23a(struct rtw_adapter *padapter)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
set_channel_bwmode23a(padapter, pmlmeext->cur_channel,
pmlmeext->cur_ch_offset, pmlmeext->cur_bwmode);
@@ -318,7 +356,7 @@ int init_hw_mlme_ext23a(struct rtw_adapter *padapter)
static void init_mlme_ext_priv23a_value(struct rtw_adapter* padapter)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
unsigned char mixed_datarate[NumRates] = {
_1M_RATE_, _2M_RATE_, _5M_RATE_, _11M_RATE_, _6M_RATE_,
@@ -391,8 +429,8 @@ static int has_channel(struct rt_channel_info *channel_set,
static void init_channel_list(struct rtw_adapter *padapter,
struct rt_channel_info *channel_set,
u8 chanset_size,
- struct p2p_channels *channel_list) {
-
+ struct p2p_channels *channel_list)
+{
struct p2p_oper_class_map op_class[] = {
{ IEEE80211G, 81, 1, 13, 1, BW20 },
{ IEEE80211G, 82, 14, 14, 1, BW20 },
@@ -526,7 +564,7 @@ static u8 init_channel_set(struct rtw_adapter* padapter, u8 cplan,
int init_mlme_ext_priv23a(struct rtw_adapter* padapter)
{
- int res = _SUCCESS;
+ int res = _SUCCESS;
struct registry_priv* pregistrypriv = &padapter->registrypriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -1920,7 +1958,7 @@ OnDeAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
static int
OnDisassoc23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
{
- unsigned short reason;
+ unsigned short reason;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -2835,17 +2873,17 @@ static int _issue_probereq(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid, u8 *da, int wait_ack)
{
int ret = _FAIL;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct ieee80211_hdr *pwlanhdr;
- unsigned char *mac;
- unsigned char bssrate[NumRates];
+ struct xmit_frame *pmgntframe;
+ struct pkt_attrib *pattrib;
+ unsigned char *pframe;
+ struct ieee80211_hdr *pwlanhdr;
+ unsigned char *mac;
+ unsigned char bssrate[NumRates];
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- int bssrate_len = 0;
- u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
+ int bssrate_len = 0;
+ u8 bc_addr[] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
RT_TRACE(_module_rtl871x_mlme_c_, _drv_notice_,
("+%s\n", __func__));
@@ -4297,7 +4335,7 @@ int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr)
struct sta_priv *pstapriv = &padapter->stapriv;
struct sta_info *psta = NULL;
/* struct recv_reorder_ctrl *preorder_ctrl; */
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
u16 tid;
@@ -4334,8 +4372,8 @@ int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr)
int send_beacon23a(struct rtw_adapter *padapter)
{
- bool bxmitok;
- int issue = 0;
+ bool bxmitok;
+ int issue = 0;
int poll = 0;
unsigned long start = jiffies;
unsigned int passing_time;
@@ -4383,9 +4421,10 @@ bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel)
int i = 0;
u8 Channel_5G[45] = {36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58,
- 60, 62, 64, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122,
- 124, 126, 128, 130, 132, 134, 136, 138, 140, 149, 151, 153, 155, 157, 159,
- 161, 163, 165};
+ 60, 62, 64, 100, 102, 104, 106, 108, 110, 112,
+ 114, 116, 118, 120, 122, 124, 126, 128, 130, 132,
+ 134, 136, 138, 140, 149, 151, 153, 155, 157, 159,
+ 161, 163, 165};
for (i = 0; i < sizeof(Channel_5G); i++)
if (channel == Channel_5G[i])
return true;
@@ -4396,7 +4435,7 @@ static void rtw_site_survey(struct rtw_adapter *padapter)
{
unsigned char survey_channel = 0;
enum rt_scan_type ScanType = SCAN_PASSIVE;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct rtw_ieee80211_channel *ch;
@@ -4659,8 +4698,8 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
static void start_create_ibss(struct rtw_adapter* padapter)
{
- unsigned short caps;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ unsigned short caps;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
pmlmeext->cur_channel = (u8)pnetwork->DSConfig;
@@ -4711,9 +4750,9 @@ static void start_create_ibss(struct rtw_adapter* padapter)
static void start_clnt_join(struct rtw_adapter* padapter)
{
- unsigned short caps;
- u8 val8;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ unsigned short caps;
+ u8 val8;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
int beacon_timeout;
@@ -4771,7 +4810,7 @@ static void start_clnt_join(struct rtw_adapter* padapter)
static void start_clnt_auth(struct rtw_adapter* padapter)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
del_timer_sync(&pmlmeext->link_timer);
@@ -4789,8 +4828,10 @@ static void start_clnt_auth(struct rtw_adapter* padapter)
/* AP may: 1)not response auth or 2)deauth us after link is complete */
/* issue deauth before issuing auth to deal with the situation */
/* Commented by Albert 2012/07/21 */
- /* For the Win8 P2P connection, it will be hard to have a successful connection if this Wi-Fi doesn't connect to it. */
- issue_deauth23a(padapter, (&pmlmeinfo->network)->MacAddress, WLAN_REASON_DEAUTH_LEAVING);
+ /* For the Win8 P2P connection, it will be hard to have a
+ successful connection if this Wi-Fi doesn't connect to it. */
+ issue_deauth23a(padapter, (&pmlmeinfo->network)->MacAddress,
+ WLAN_REASON_DEAUTH_LEAVING);
DBG_8723A_LEVEL(_drv_always_, "start auth\n");
issue_auth(padapter, NULL, 0);
@@ -4800,7 +4841,7 @@ static void start_clnt_auth(struct rtw_adapter* padapter)
static void start_clnt_assoc(struct rtw_adapter* padapter)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
del_timer_sync(&pmlmeext->link_timer);
@@ -4816,7 +4857,7 @@ static void start_clnt_assoc(struct rtw_adapter* padapter)
int receive_disconnect23a(struct rtw_adapter *padapter,
unsigned char *MacAddr, unsigned short reason)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
/* check A3 */
@@ -5074,12 +5115,13 @@ Following are the functions to report events
*****************************************************************************/
-void report_survey_event23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
+void report_survey_event23a(struct rtw_adapter *padapter,
+ struct recv_frame *precv_frame)
{
struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
+ u8 *pevtcmd;
u32 cmdsz;
- struct survey_event *psurvey_evt;
+ struct survey_event *psurvey_evt;
struct C2HEvent_Header *pc2h_evt_hdr;
struct mlme_ext_priv *pmlmeext;
struct cmd_priv *pcmdpriv;
@@ -5134,11 +5176,11 @@ void report_survey_event23a(struct rtw_adapter *padapter, struct recv_frame *pre
void report_surveydone_event23a(struct rtw_adapter *padapter)
{
struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
+ u8 *pevtcmd;
u32 cmdsz;
struct surveydone_event *psurveydone_evt;
- struct C2HEvent_Header *pc2h_evt_hdr;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct C2HEvent_Header *pc2h_evt_hdr;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
@@ -5178,7 +5220,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter)
void report_join_res23a(struct rtw_adapter *padapter, int res)
{
struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
+ u8 *pevtcmd;
u32 cmdsz;
struct joinbss_event *pjoinbss_evt;
struct C2HEvent_Header *pc2h_evt_hdr;
@@ -5224,16 +5266,17 @@ void report_join_res23a(struct rtw_adapter *padapter, int res)
return;
}
-void report_del_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAddr, unsigned short reason)
+void report_del_sta_event23a(struct rtw_adapter *padapter,
+ unsigned char* MacAddr, unsigned short reason)
{
struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
+ u8 *pevtcmd;
u32 cmdsz;
struct sta_info *psta;
- int mac_id;
- struct stadel_event *pdel_sta_evt;
- struct C2HEvent_Header *pc2h_evt_hdr;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ int mac_id;
+ struct stadel_event *pdel_sta_evt;
+ struct C2HEvent_Header *pc2h_evt_hdr;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
@@ -5280,14 +5323,15 @@ void report_del_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAdd
return;
}
-void report_add_sta_event23a(struct rtw_adapter *padapter, unsigned char* MacAddr, int cam_idx)
+void report_add_sta_event23a(struct rtw_adapter *padapter,
+ unsigned char* MacAddr, int cam_idx)
{
struct cmd_obj *pcmd_obj;
- u8 *pevtcmd;
+ u8 *pevtcmd;
u32 cmdsz;
- struct stassoc_event *padd_sta_evt;
- struct C2HEvent_Header *pc2h_evt_hdr;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct stassoc_event *padd_sta_evt;
+ struct C2HEvent_Header *pc2h_evt_hdr;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
@@ -5335,8 +5379,8 @@ Following are the event callback functions
void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
/* ERP */
VCS_update23a(padapter, psta);
@@ -5377,13 +5421,14 @@ void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta)
psta->state = _FW_LINKED;
}
-void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter, int join_res)
+void mlmeext_joinbss_event_callback23a(struct rtw_adapter *padapter,
+ int join_res)
{
- struct sta_info *psta, *psta_bmc;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct sta_info *psta, *psta_bmc;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *cur_network = &pmlmeinfo->network;
- struct sta_priv *pstapriv = &padapter->stapriv;
+ struct sta_priv *pstapriv = &padapter->stapriv;
if (join_res < 0) {
hw_var_set_mlme_join(padapter, 1);
@@ -5459,7 +5504,8 @@ exit_mlmeext_joinbss_event_callback23a:
DBG_8723A("=>%s\n", __func__);
}
-void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter, struct sta_info *psta)
+void mlmeext_sta_add_event_callback23a(struct rtw_adapter *padapter,
+ struct sta_info *psta)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -5732,7 +5778,7 @@ static void link_timer_hdl(unsigned long data)
/* static unsigned int rx_pkt = 0; */
/* static u64 tx_cnt = 0; */
/* struct xmit_priv *pxmitpriv = &padapter->xmitpriv; */
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
/* struct sta_priv *pstapriv = &padapter->stapriv; */
@@ -5779,7 +5825,7 @@ static void link_timer_hdl(unsigned long data)
static void addba_timer_hdl(unsigned long data)
{
struct sta_info *psta = (struct sta_info *)data;
- struct ht_priv *phtpriv;
+ struct ht_priv *phtpriv;
if (!psta)
return;
@@ -5800,7 +5846,7 @@ void init_addba_retry_timer23a(struct sta_info *psta)
void init_mlme_ext_timer23a(struct rtw_adapter *padapter)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
setup_timer(&pmlmeext->survey_timer, survey_timer_hdl,
(unsigned long)padapter);
@@ -5851,7 +5897,7 @@ int setopmode_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
int createbss_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
{
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
@@ -6069,7 +6115,7 @@ int disconnect_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
rtw_free_uc_swdec_pending_queue23a(padapter);
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
static int
@@ -6080,7 +6126,7 @@ rtw_scan_ch_decision(struct rtw_adapter *padapter,
int i, j;
int scan_ch_num = 0;
int set_idx;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
/* clear out first */
memset(out, 0, sizeof(struct rtw_ieee80211_channel)*out_num);
@@ -6233,7 +6279,7 @@ int setauth_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
if (pparm->mode < 4)
pmlmeinfo->auth_algo = pparm->mode;
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
int setkey_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
@@ -6358,7 +6404,7 @@ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
psta = rtw_get_stainfo23a(&padapter->stapriv, pparm->addr);
if (!psta)
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
if (((pmlmeinfo->state & WIFI_FW_ASSOC_SUCCESS) &&
pmlmeinfo->HT_enable) ||
@@ -6370,15 +6416,15 @@ int add_ba_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
} else
psta->htpriv.candidate_tid_bitmap &= ~BIT(pparm->tid);
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
int set_tx_beacon_cmd23a(struct rtw_adapter* padapter)
{
struct cmd_obj *ph2c;
- struct Tx_Beacon_param *ptxBeacon_parm;
+ struct Tx_Beacon_param *ptxBeacon_parm;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
u8 res = _SUCCESS;
int len_diff = 0;
@@ -6518,7 +6564,7 @@ int tx_beacon_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
{
const struct set_ch_parm *set_ch_parm;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
if (!pbuf)
return H2C_PARAMETERS_ERROR;
@@ -6536,13 +6582,13 @@ int set_ch_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
set_channel_bwmode23a(padapter, set_ch_parm->ch,
set_ch_parm->ch_offset, set_ch_parm->bw);
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
{
const struct SetChannelPlan_param *setChannelPlan_param;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
+ struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
if (!pbuf)
return H2C_PARAMETERS_ERROR;
@@ -6555,7 +6601,7 @@ int set_chplan_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
init_channel_list(padapter, pmlmeext->channel_set,
pmlmeext->max_chan_nums, &pmlmeext->channel_list);
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
@@ -6567,12 +6613,12 @@ int led_blink_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
ledBlink_param = (struct LedBlink_param *)pbuf;
- return H2C_SUCCESS;
+ return H2C_SUCCESS;
}
int set_csa_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
{
- return H2C_REJECTED;
+ return H2C_REJECTED;
}
/* TDLS_WRCR : write RCR DATA BIT */

View File

@ -0,0 +1,102 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:09 +0200
Subject: [010/249] staging: rtl8723au: rtw_mlme.c: Remove some tab and
parenthesis abuse
Origin: https://git.kernel.org/linus/8b3d9cde7d8a50ae7bf7902cbf966adf856350d1
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 0b9fd3a..47a1df0 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -29,7 +29,7 @@
static void rtw_init_mlme_timer(struct rtw_adapter *padapter)
{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
setup_timer(&pmlmepriv->assoc_timer, rtw23a_join_to_handler,
(unsigned long)padapter);
@@ -369,11 +369,10 @@ int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst)
return ((src->Ssid.ssid_len == dst->Ssid.ssid_len) &&
/* (src->DSConfig == dst->DSConfig) && */
ether_addr_equal(src->MacAddress, dst->MacAddress) &&
- ((!memcmp(src->Ssid.ssid, dst->Ssid.ssid, src->Ssid.ssid_len))) &&
- ((s_cap & WLAN_CAPABILITY_IBSS) ==
- (d_cap & WLAN_CAPABILITY_IBSS)) &&
- ((s_cap & WLAN_CAPABILITY_ESS) ==
- (d_cap & WLAN_CAPABILITY_ESS)));
+ !memcmp(src->Ssid.ssid, dst->Ssid.ssid, src->Ssid.ssid_len) &&
+ (s_cap & WLAN_CAPABILITY_IBSS) ==
+ (d_cap & WLAN_CAPABILITY_IBSS) &&
+ (s_cap & WLAN_CAPABILITY_ESS) == (d_cap & WLAN_CAPABILITY_ESS));
}
struct wlan_network *
@@ -611,8 +610,7 @@ static int rtw_is_desired_network(struct rtw_adapter *adapter,
bselected = false;
}
- if (desired_encmode != Ndis802_11EncryptionDisabled &&
- privacy == 0) {
+ if (desired_encmode != Ndis802_11EncryptionDisabled && privacy == 0) {
DBG_8723A("desired_encmode: %d, privacy: %d\n",
desired_encmode, privacy);
bselected = false;
@@ -639,7 +637,7 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf)
{
u32 len;
struct wlan_bssid_ex *pnetwork;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
pnetwork = (struct wlan_bssid_ex *)pbuf;
@@ -698,7 +696,7 @@ exit:
void
rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
{
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
struct wlan_bssid_ex *pdev_network;
u8 *pibss;
@@ -937,7 +935,7 @@ void rtw_indicate_connect23a(struct rtw_adapter *padapter)
*/
void rtw_indicate_disconnect23a(struct rtw_adapter *padapter)
{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
("+rtw_indicate_disconnect23a\n"));
@@ -1538,12 +1536,12 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
void rtw23a_join_to_handler (unsigned long data)
{
struct rtw_adapter *adapter = (struct rtw_adapter *)data;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
int do_join_r;
DBG_8723A("%s, fw_state=%x\n", __func__, get_fwstate(pmlmepriv));
- if (adapter->bDriverStopped ||adapter->bSurpriseRemoved)
+ if (adapter->bDriverStopped || adapter->bSurpriseRemoved)
return;
spin_lock_bh(&pmlmepriv->lock);
@@ -1589,7 +1587,7 @@ void rtw23a_join_to_handler (unsigned long data)
void rtw_scan_timeout_handler23a(unsigned long data)
{
struct rtw_adapter *adapter = (struct rtw_adapter *)data;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
DBG_8723A("%s(%s): fw_state =%x\n", __func__, adapter->pnetdev->name,
get_fwstate(pmlmepriv));

View File

@ -0,0 +1,236 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:10 +0200
Subject: [011/249] staging: rtl8723au: Use struct ieee80211_mcs_info to
describe MCS information
Origin: https://git.kernel.org/linus/198e95d548ac741e91521f1e638aa8221bb0f468
The original RTL code defined the MCS information as a 16 byte array
and blindly applied it's masking over the full array, ignoring the
fact that only the first 10 bytes describe the rx_mask and the rest
are different fields.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 52 +++++++++++++-------------
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 +-
drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +--
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 +-
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 12 +++---
drivers/staging/rtl8723au/include/ieee80211.h | 3 +-
drivers/staging/rtl8723au/include/wifi.h | 2 +-
7 files changed, 40 insertions(+), 41 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 3dc9119..47ac4e9 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -924,69 +924,69 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
/* show MCS rate, unit: 100Kbps */
u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
- unsigned char * MCS_rate)
+ struct ieee80211_mcs_info *mcs)
{
u16 max_rate = 0;
if (rf_type == RF_1T1R) {
- if (MCS_rate[0] & BIT(7))
+ if (mcs->rx_mask[0] & BIT(7))
max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):
((short_GI_20)?722:650);
- else if (MCS_rate[0] & BIT(6))
+ else if (mcs->rx_mask[0] & BIT(6))
max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):
((short_GI_20)?650:585);
- else if (MCS_rate[0] & BIT(5))
+ else if (mcs->rx_mask[0] & BIT(5))
max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):
((short_GI_20)?578:520);
- else if (MCS_rate[0] & BIT(4))
+ else if (mcs->rx_mask[0] & BIT(4))
max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):
((short_GI_20)?433:390);
- else if (MCS_rate[0] & BIT(3))
+ else if (mcs->rx_mask[0] & BIT(3))
max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):
((short_GI_20)?289:260);
- else if (MCS_rate[0] & BIT(2))
+ else if (mcs->rx_mask[0] & BIT(2))
max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):
((short_GI_20)?217:195);
- else if (MCS_rate[0] & BIT(1))
+ else if (mcs->rx_mask[0] & BIT(1))
max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):
((short_GI_20)?144:130);
- else if (MCS_rate[0] & BIT(0))
+ else if (mcs->rx_mask[0] & BIT(0))
max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):
((short_GI_20)?72:65);
} else {
- if (MCS_rate[1]) {
- if (MCS_rate[1] & BIT(7))
+ if (mcs->rx_mask[1]) {
+ if (mcs->rx_mask[1] & BIT(7))
max_rate = (bw_40MHz) ? ((short_GI_40)?3000:2700):((short_GI_20)?1444:1300);
- else if (MCS_rate[1] & BIT(6))
+ else if (mcs->rx_mask[1] & BIT(6))
max_rate = (bw_40MHz) ? ((short_GI_40)?2700:2430):((short_GI_20)?1300:1170);
- else if (MCS_rate[1] & BIT(5))
+ else if (mcs->rx_mask[1] & BIT(5))
max_rate = (bw_40MHz) ? ((short_GI_40)?2400:2160):((short_GI_20)?1156:1040);
- else if (MCS_rate[1] & BIT(4))
+ else if (mcs->rx_mask[1] & BIT(4))
max_rate = (bw_40MHz) ? ((short_GI_40)?1800:1620):((short_GI_20)?867:780);
- else if (MCS_rate[1] & BIT(3))
+ else if (mcs->rx_mask[1] & BIT(3))
max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
- else if (MCS_rate[1] & BIT(2))
+ else if (mcs->rx_mask[1] & BIT(2))
max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
- else if (MCS_rate[1] & BIT(1))
+ else if (mcs->rx_mask[1] & BIT(1))
max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
- else if (MCS_rate[1] & BIT(0))
+ else if (mcs->rx_mask[1] & BIT(0))
max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
} else {
- if (MCS_rate[0] & BIT(7))
+ if (mcs->rx_mask[0] & BIT(7))
max_rate = (bw_40MHz) ? ((short_GI_40)?1500:1350):((short_GI_20)?722:650);
- else if (MCS_rate[0] & BIT(6))
+ else if (mcs->rx_mask[0] & BIT(6))
max_rate = (bw_40MHz) ? ((short_GI_40)?1350:1215):((short_GI_20)?650:585);
- else if (MCS_rate[0] & BIT(5))
+ else if (mcs->rx_mask[0] & BIT(5))
max_rate = (bw_40MHz) ? ((short_GI_40)?1200:1080):((short_GI_20)?578:520);
- else if (MCS_rate[0] & BIT(4))
+ else if (mcs->rx_mask[0] & BIT(4))
max_rate = (bw_40MHz) ? ((short_GI_40)?900:810):((short_GI_20)?433:390);
- else if (MCS_rate[0] & BIT(3))
+ else if (mcs->rx_mask[0] & BIT(3))
max_rate = (bw_40MHz) ? ((short_GI_40)?600:540):((short_GI_20)?289:260);
- else if (MCS_rate[0] & BIT(2))
+ else if (mcs->rx_mask[0] & BIT(2))
max_rate = (bw_40MHz) ? ((short_GI_40)?450:405):((short_GI_20)?217:195);
- else if (MCS_rate[0] & BIT(1))
+ else if (mcs->rx_mask[0] & BIT(1))
max_rate = (bw_40MHz) ? ((short_GI_40)?300:270):((short_GI_20)?144:130);
- else if (MCS_rate[0] & BIT(0))
+ else if (mcs->rx_mask[0] & BIT(0))
max_rate = (bw_40MHz) ? ((short_GI_40)?150:135):((short_GI_20)?72:65);
}
}
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index cf897c7..30474f5 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -406,7 +406,7 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
pregistrypriv->cbw40_enable,
short_GI_20, short_GI_40,
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate
+ &pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info
);
}
} else {
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 47a1df0..ab59ab7 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2328,11 +2328,11 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
rf_type = rtl8723a_get_rf_type(padapter);
/* update the MCS rates */
- for (i = 0; i < 16; i++) {
+ for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
if (rf_type == RF_1T1R || rf_type == RF_1T2R)
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_1R23A[i];
+ pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i];
else
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &= MCS_rate_2R23A[i];
+ pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i];
}
/* switch to the 40M Hz mode accoring to the AP */
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 7a117c0..6249ab2 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3498,7 +3498,7 @@ static void issue_assocreq(struct rtw_adapter *padapter)
if (pregpriv->rx_stbc)
pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);
- memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_1R23A, 16);
+ memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_1R23A, 16);
break;
case RF_2T2R:
@@ -3519,7 +3519,7 @@ static void issue_assocreq(struct rtw_adapter *padapter)
"STBC\n");
pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */
}
- memcpy(pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate, MCS_rate_2R23A, 16);
+ memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_2R23A, 16);
break;
}
pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info =
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 579a4a8..b63248b 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -762,13 +762,11 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p)
rf_type = rtl8723a_get_rf_type(padapter);
/* update the MCS rates */
- for (i = 0; i < 16; i++) {
+ for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
if (rf_type == RF_1T1R || rf_type == RF_1T2R)
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &=
- MCS_rate_1R23A[i];
+ pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i];
else
- pmlmeinfo->HT_caps.u.HT_cap_element.MCS_rate[i] &=
- MCS_rate_2R23A[i];
+ pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i];
}
return;
}
@@ -1344,8 +1342,8 @@ unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps)
{
unsigned int mask = 0;
- mask = pHT_caps->u.HT_cap_element.MCS_rate[0] << 12 |
- pHT_caps->u.HT_cap_element.MCS_rate[1] << 20;
+ mask = pHT_caps->u.HT_cap_element.mcs_info.rx_mask[0] << 12 |
+ pHT_caps->u.HT_cap_element.mcs_info.rx_mask[1] << 20;
return mask;
}
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index bb645cf..6f42d2d 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -447,7 +447,8 @@ int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel);
void rtw_get_bcn_info23a(struct wlan_network *pnetwork);
-u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40, unsigned char * MCS_rate);
+u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
+ struct ieee80211_mcs_info *mcs);
const char *action_public_str23a(u8 action);
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index cccea6a..f731833 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -81,7 +81,7 @@ struct HT_caps_element {
struct {
unsigned short HT_caps_info;
unsigned char AMPDU_para;
- unsigned char MCS_rate[16];
+ struct ieee80211_mcs_info mcs_info;
unsigned short HT_ext_caps;
unsigned int Beamforming_caps;
unsigned char ASEL_caps;

View File

@ -0,0 +1,426 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:11 +0200
Subject: [012/249] staging: rtl8723au: Use struct ieee80211_ht_cap and
associated #defines
Origin: https://git.kernel.org/linus/65be27da4953163c638a006542d279f5b1f346ea
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 9 ++--
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 11 ++--
drivers/staging/rtl8723au/core/rtw_mlme.c | 14 +++--
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 42 ++++++++-------
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 60 ++++++++++++----------
.../staging/rtl8723au/hal/rtl8723a_bt-coexist.c | 4 +-
drivers/staging/rtl8723au/hal/usb_halinit.c | 4 +-
drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 6 +--
drivers/staging/rtl8723au/include/wifi.h | 14 -----
9 files changed, 84 insertions(+), 80 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index d03bb3e..83be27f 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -623,15 +623,18 @@ static void update_hw_ht_param(struct rtw_adapter *padapter)
AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
AMPDU_para [4:2]:Min MPDU Start Spacing
*/
- max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
+ max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_FACTOR;
- min_MPDU_spacing = (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
+ min_MPDU_spacing = (pmlmeinfo->ht_cap.ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2;
rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing);
rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len);
/* Config SM Power Save setting */
- pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & 0x0C) >> 2;
+ pmlmeinfo->SM_PS = (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) &
+ IEEE80211_HT_CAP_SM_PS) >> 2;
if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
}
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 30474f5..e9f46a6 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -399,15 +399,18 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
/* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
- short_GI_20 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_20) ? 1:0;
- short_GI_40 = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info&IEEE80211_HT_CAP_SGI_40) ? 1:0;
+ short_GI_20 =
+ (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
+ short_GI_40 =
+ (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
rf_type = rtl8723a_get_rf_type(adapter);
max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
pregistrypriv->cbw40_enable,
short_GI_20, short_GI_40,
- &pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info
- );
+ &pmlmeinfo->ht_cap.mcs);
}
} else {
while ((pcur_bss->SupportedRates[i] != 0) &&
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index ab59ab7..19b891f 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2320,7 +2320,8 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
/* update cur_bwmode & cur_ch_offset */
if (pregistrypriv->cbw40_enable &&
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info & BIT(1) &&
+ pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
pmlmeinfo->HT_info.infos[0] & BIT(2)) {
int i;
u8 rf_type;
@@ -2330,9 +2331,11 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
/* update the MCS rates */
for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
if (rf_type == RF_1T1R || rf_type == RF_1T2R)
- pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i];
+ pmlmeinfo->ht_cap.mcs.rx_mask[i] &=
+ MCS_rate_1R23A[i];
else
- pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i];
+ pmlmeinfo->ht_cap.mcs.rx_mask[i] &=
+ MCS_rate_2R23A[i];
}
/* switch to the 40M Hz mode accoring to the AP */
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
@@ -2356,8 +2359,9 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
/* */
/* Config SM Power Save setting */
/* */
- pmlmeinfo->SM_PS = (pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &
- 0x0C) >> 2;
+ pmlmeinfo->SM_PS =
+ (le16_to_cpu(pmlmeinfo->ht_cap.cap_info) &
+ IEEE80211_HT_CAP_SM_PS) >> IEEE80211_HT_CAP_SM_PS_SHIFT;
if (pmlmeinfo->SM_PS == WLAN_HT_CAP_SM_PS_STATIC)
DBG_8723A("%s(): WLAN_HT_CAP_SM_PS_STATIC\n", __func__);
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 6249ab2..b5f1d40 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3476,19 +3476,22 @@ static void issue_assocreq(struct rtw_adapter *padapter)
p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len);
if (p && !is_ap_in_tkip23a(padapter)) {
- memcpy(&pmlmeinfo->HT_caps, p + 2,
- sizeof(struct HT_caps_element));
+ struct ieee80211_ht_cap *cap = &pmlmeinfo->ht_cap;
+
+ memcpy(cap, p + 2, sizeof(struct ieee80211_ht_cap));
/* to disable 40M Hz support while gd_bw_40MHz_en = 0 */
if (pregpriv->cbw40_enable == 0) {
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info &= (~(BIT(6) | BIT(1)));
+ cap->cap_info &= ~cpu_to_le16(
+ IEEE80211_HT_CAP_SGI_40 |
+ IEEE80211_HT_CAP_SUP_WIDTH_20_40);
} else {
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= BIT(1);
+ cap->cap_info |= cpu_to_le16(
+ IEEE80211_HT_CAP_SUP_WIDTH_20_40);
}
/* todo: disable SM power save mode */
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |=
- 0x000c;
+ cap->cap_info |= cpu_to_le16(IEEE80211_HT_CAP_SM_PS);
rf_type = rtl8723a_get_rf_type(padapter);
/* switch (pregpriv->rf_config) */
@@ -3496,9 +3499,9 @@ static void issue_assocreq(struct rtw_adapter *padapter)
case RF_1T1R:
/* RX STBC One spatial stream */
if (pregpriv->rx_stbc)
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0100);
+ cap->cap_info |= cpu_to_le16(1 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
- memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_1R23A, 16);
+ memcpy(&cap->mcs, MCS_rate_1R23A, 16);
break;
case RF_2T2R:
@@ -3517,23 +3520,23 @@ static void issue_assocreq(struct rtw_adapter *padapter)
pregpriv->wifi_spec == 1) {
DBG_8723A("declare supporting RX "
"STBC\n");
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info |= cpu_to_le16(0x0200);/* RX STBC two spatial stream */
+ /* RX STBC two spatial stream */
+ cap->cap_info |= cpu_to_le16(2 << IEEE80211_HT_CAP_RX_STBC_SHIFT);
}
- memcpy(&pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info, MCS_rate_2R23A, 16);
+ memcpy(&cap->mcs, MCS_rate_2R23A, 16);
break;
}
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info =
- cpu_to_le16(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info);
if (rtl8723a_BT_coexist(padapter) &&
rtl8723a_BT_using_antenna_1(padapter)) {
/* set to 8K */
- pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para &= (u8)~IEEE80211_HT_AMPDU_PARM_FACTOR;
-/* pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para |= MAX_AMPDU_FACTOR_8K */
+ cap->ampdu_params_info &=
+ ~IEEE80211_HT_AMPDU_PARM_FACTOR;
+/* cap->ampdu_params_info |= MAX_AMPDU_FACTOR_8K */
}
pframe = rtw_set_ie23a(pframe, WLAN_EID_HT_CAPABILITY,
- p[1], (u8 *)&pmlmeinfo->HT_caps,
+ p[1], (u8 *)&pmlmeinfo->ht_cap,
&pattrib->pktlen);
}
}
@@ -4679,10 +4682,11 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
bssid->IEs + ie_offset,
bssid->IELength - ie_offset);
if (p && p[1] > 0) {
- struct HT_caps_element *pHT_caps;
- pHT_caps = (struct HT_caps_element *)(p + 2);
+ struct ieee80211_ht_cap *pHT_caps;
+ pHT_caps = (struct ieee80211_ht_cap *)(p + 2);
- if (pHT_caps->u.HT_cap_element.HT_caps_info & BIT(14))
+ if (pHT_caps->cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_40MHZ_INTOLERANT))
pmlmepriv->num_FortyMHzIntolerant++;
} else
pmlmepriv->num_sta_no_ht++;
@@ -5392,7 +5396,7 @@ void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta)
psta->htpriv.ampdu_enable = pmlmepriv->htpriv.ampdu_enable;
- if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps))
+ if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
psta->htpriv.sgi = true;
psta->qos_option = true;
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index b63248b..1194a6e 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -720,6 +720,8 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p)
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct ht_priv *phtpriv = &pmlmepriv->htpriv;
+ struct ieee80211_ht_cap *cap;
+ u8 *dstcap;
if (!p)
return;
@@ -729,44 +731,44 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p)
pmlmeinfo->HT_caps_enable = 1;
+ cap = &pmlmeinfo->ht_cap;
+ dstcap = (u8 *)cap;
for (i = 0; i < p[1]; i++) {
if (i != 2) {
- /* Commented by Albert 2010/07/12 */
- /* Got the endian issue here. */
- pmlmeinfo->HT_caps.u.HT_cap[i] &= p[i + 2];
+ dstcap[i] &= p[i + 2];
} else {
/* modify from fw by Thomas 2010/11/17 */
- if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3) > (p[i + 2] & 0x3))
- max_AMPDU_len = p[i + 2] & 0x3;
+ if ((cap->ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_FACTOR) >
+ (p[i + 2] & IEEE80211_HT_AMPDU_PARM_FACTOR))
+ max_AMPDU_len = p[i + 2] &
+ IEEE80211_HT_AMPDU_PARM_FACTOR;
else
- max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x3;
-
- if ((pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) > (p[i + 2] & 0x1c))
- min_MPDU_spacing = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c;
+ max_AMPDU_len = cap->ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_FACTOR;
+
+ if ((cap->ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_DENSITY) >
+ (p[i + 2] & IEEE80211_HT_AMPDU_PARM_DENSITY))
+ min_MPDU_spacing = cap->ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_DENSITY;
else
- min_MPDU_spacing = p[i + 2] & 0x1c;
+ min_MPDU_spacing = p[i + 2] &
+ IEEE80211_HT_AMPDU_PARM_DENSITY;
- pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para =
+ cap->ampdu_params_info =
max_AMPDU_len | min_MPDU_spacing;
}
}
- /* Commented by Albert 2010/07/12 */
- /* Have to handle the endian issue after copying. */
- /* HT_ext_caps didn't be used yet. */
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info =
- le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_caps_info);
- pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps =
- le16_to_cpu(pmlmeinfo->HT_caps.u.HT_cap_element.HT_ext_caps);
-
rf_type = rtl8723a_get_rf_type(padapter);
/* update the MCS rates */
for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
if (rf_type == RF_1T1R || rf_type == RF_1T2R)
- pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_1R23A[i];
+ cap->mcs.rx_mask[i] &= MCS_rate_1R23A[i];
else
- pmlmeinfo->HT_caps.u.HT_cap_element.mcs_info.rx_mask[i] &= MCS_rate_2R23A[i];
+ cap->mcs.rx_mask[i] &= MCS_rate_2R23A[i];
}
return;
}
@@ -816,10 +818,12 @@ void HTOnAssocRsp23a(struct rtw_adapter *padapter)
AMPDU_para [1:0]:Max AMPDU Len => 0:8k , 1:16k, 2:32k, 3:64k
AMPDU_para [4:2]:Min MPDU Start Spacing
*/
- max_AMPDU_len = pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x03;
+ max_AMPDU_len = pmlmeinfo->ht_cap.ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_FACTOR;
min_MPDU_spacing =
- (pmlmeinfo->HT_caps.u.HT_cap_element.AMPDU_para & 0x1c) >> 2;
+ (pmlmeinfo->ht_cap.ampdu_params_info &
+ IEEE80211_HT_AMPDU_PARM_DENSITY) >> 2;
rtl8723a_set_ampdu_min_space(padapter, min_MPDU_spacing);
rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len);
@@ -1338,18 +1342,18 @@ unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz)
return mask;
}
-unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps)
+unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *pHT_caps)
{
unsigned int mask = 0;
- mask = pHT_caps->u.HT_cap_element.mcs_info.rx_mask[0] << 12 |
- pHT_caps->u.HT_cap_element.mcs_info.rx_mask[1] << 20;
+ mask = pHT_caps->mcs.rx_mask[0] << 12 |
+ pHT_caps->mcs.rx_mask[1] << 20;
return mask;
}
int support_short_GI23a(struct rtw_adapter *padapter,
- struct HT_caps_element *pHT_caps)
+ struct ieee80211_ht_cap *pHT_caps)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -1361,7 +1365,7 @@ int support_short_GI23a(struct rtw_adapter *padapter,
return _FAIL;
bit_offset = (pmlmeext->cur_bwmode & HT_CHANNEL_WIDTH_40)? 6: 5;
- if (pHT_caps->u.HT_cap_element.HT_caps_info & (0x1 << bit_offset))
+ if (pHT_caps->cap_info & cpu_to_le16(0x1 << bit_offset))
return _SUCCESS;
else
return _FAIL;
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
index c001053..bb86986 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
@@ -5871,8 +5871,8 @@ btdm_1AntUpdateHalRAMask(struct rtw_adapter *padapter, u32 mac_id, u32 filter)
mask = update_supported_rate23a(cur_network->SupportedRates,
supportRateNum);
mask |= (pmlmeinfo->HT_enable) ?
- update_MSC_rate23a(&pmlmeinfo->HT_caps):0;
- if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps))
+ update_MSC_rate23a(&pmlmeinfo->ht_cap):0;
+ if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
shortGIrate = true;
break;
case 1:/* for broadcast/multicast */
diff --git a/drivers/staging/rtl8723au/hal/usb_halinit.c b/drivers/staging/rtl8723au/hal/usb_halinit.c
index 6a7fb28..d3d7289 100644
--- a/drivers/staging/rtl8723au/hal/usb_halinit.c
+++ b/drivers/staging/rtl8723au/hal/usb_halinit.c
@@ -1532,9 +1532,9 @@ void rtl8723a_update_ramask(struct rtw_adapter *padapter,
mask = update_supported_rate23a(cur_network->SupportedRates,
supportRateNum);
mask |= (pmlmeinfo->HT_enable) ?
- update_MSC_rate23a(&pmlmeinfo->HT_caps) : 0;
+ update_MSC_rate23a(&pmlmeinfo->ht_cap) : 0;
- if (support_short_GI23a(padapter, &pmlmeinfo->HT_caps))
+ if (support_short_GI23a(padapter, &pmlmeinfo->ht_cap))
shortGIrate = true;
break;
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index badbce0..57622fb 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -366,7 +366,7 @@ struct mlme_ext_info
struct ADDBA_request ADDBA_req;
struct WMM_para_element WMM_param;
- struct HT_caps_element HT_caps;
+ struct ieee80211_ht_cap ht_cap;
struct HT_info_element HT_info;
struct wlan_bssid_ex network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */
struct FW_Sta_Info FW_sta_info[NUM_STA];
@@ -536,7 +536,7 @@ int update_sta_support_rate23a(struct rtw_adapter *padapter, u8* pvar_ie,
void update_sta_info23a(struct rtw_adapter *padapter, struct sta_info *psta);
unsigned int update_basic_rate23a(unsigned char *ptn, unsigned int ptn_sz);
unsigned int update_supported_rate23a(unsigned char *ptn, unsigned int ptn_sz);
-unsigned int update_MSC_rate23a(struct HT_caps_element *pHT_caps);
+unsigned int update_MSC_rate23a(struct ieee80211_ht_cap *ht_cap);
void Update_RA_Entry23a(struct rtw_adapter *padapter, struct sta_info *psta);
void set_sta_rate23a(struct rtw_adapter *padapter, struct sta_info *psta);
@@ -545,7 +545,7 @@ int receive_disconnect23a(struct rtw_adapter *padapter,
unsigned char get_highest_rate_idx23a(u32 mask);
int support_short_GI23a(struct rtw_adapter *padapter,
- struct HT_caps_element *pHT_caps);
+ struct ieee80211_ht_cap *ht_cap);
bool is_ap_in_tkip23a(struct rtw_adapter *padapter);
bool is_ap_in_wep23a(struct rtw_adapter *padapter);
bool should_forbid_n_rate23a(struct rtw_adapter *padapter);
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index f731833..d0a8c86 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -76,20 +76,6 @@ struct ieee80211_ht_addt_info {
unsigned char basic_set[16];
} __packed;
-struct HT_caps_element {
- union {
- struct {
- unsigned short HT_caps_info;
- unsigned char AMPDU_para;
- struct ieee80211_mcs_info mcs_info;
- unsigned short HT_ext_caps;
- unsigned int Beamforming_caps;
- unsigned char ASEL_caps;
- } HT_cap_element;
- unsigned char HT_cap[26];
- } u;
-} __packed;
-
struct HT_info_element {
unsigned char primary_channel;
unsigned char infos[5];

View File

@ -0,0 +1,66 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:12 +0200
Subject: [013/249] staging: rtl8723au: Use correct struct for
WLAN_EID_HT_CAPABILITY
Origin: https://git.kernel.org/linus/6594c965ca8c07ba2c152bfa3c23700650d2969b
WLAN_EID_HT_CAPABILITY carries a struct ieee80211_ht_operation - use
the right struct instead of a self invented one.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +++---
drivers/staging/rtl8723au/include/wifi.h | 8 --------
2 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 19b891f..297e2e4 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2249,7 +2249,7 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, in_ie + 12,
in_len -12);
- if (p && (p[1] == sizeof(struct ieee80211_ht_addt_info))) {
+ if (p && (p[1] == sizeof(struct ieee80211_ht_operation))) {
out_len = *pout_len;
pframe = rtw_set_ie23a(out_ie + out_len,
WLAN_EID_HT_OPERATION,
@@ -2266,7 +2266,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
u8 max_ampdu_sz;
const u8 *p;
struct ieee80211_ht_cap *pht_capie;
- struct ieee80211_ht_addt_info *pht_addtinfo;
+ struct ieee80211_ht_operation *pht_addtinfo;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct ht_priv *phtpriv = &pmlmepriv->htpriv;
struct registry_priv *pregistrypriv = &padapter->registrypriv;
@@ -2314,7 +2314,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, ie_len);
if (p && p[1] > 0) {
- pht_addtinfo = (struct ieee80211_ht_addt_info *)(p + 2);
+ pht_addtinfo = (struct ieee80211_ht_operation *)(p + 2);
/* todo: */
}
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index d0a8c86..6d221df 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -68,14 +68,6 @@
* This structure refers to "HT information element" as
* described in 802.11n draft section 7.3.2.53
*/
-struct ieee80211_ht_addt_info {
- unsigned char control_chan;
- unsigned char ht_param;
- unsigned short operation_mode;
- unsigned short stbc_param;
- unsigned char basic_set[16];
-} __packed;
-
struct HT_info_element {
unsigned char primary_channel;
unsigned char infos[5];

View File

@ -0,0 +1,331 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:13 +0200
Subject: [014/249] staging: rtl8723au: Eliminate struct HT_info_element
Origin: https://git.kernel.org/linus/4dc5f8bab2663b902b9cb0be29198dbbf38aa3fb
Yet another duplicate version of struct ieee80211_ht_operation
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 14 +++++++------
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 6 +++---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 4 ++--
drivers/staging/rtl8723au/core/rtw_mlme.c | 14 +++++++------
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 23 +++++++++++-----------
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 25 ++++++++++++------------
drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 2 +-
drivers/staging/rtl8723au/include/rtw_rf.h | 11 -----------
drivers/staging/rtl8723au/include/wifi.h | 11 -----------
9 files changed, 47 insertions(+), 63 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index 83be27f..d67a5f1 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -652,7 +652,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *pnetwork_mlmeext = &pmlmeinfo->network;
- struct HT_info_element *pht_info = NULL;
+ struct ieee80211_ht_operation *pht_info = NULL;
int bcn_fixed_size;
bcn_interval = (u16)pnetwork->BeaconPeriod;
@@ -736,18 +736,20 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
pnetwork->IEs + bcn_fixed_size,
pnetwork->IELength - bcn_fixed_size);
if (p && p[1]) {
- pht_info = (struct HT_info_element *)(p + 2);
+ pht_info = (struct ieee80211_ht_operation *)(p + 2);
- if (pregpriv->cbw40_enable && pht_info->infos[0] & BIT(2)) {
+ if (pregpriv->cbw40_enable && pht_info->ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
/* switch to the 40M Hz mode */
cur_bwmode = HT_CHANNEL_WIDTH_40;
- switch (pht_info->infos[0] & 0x3) {
- case 1:
+ switch (pht_info->ht_param &
+ IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+ case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
/* pmlmeext->cur_ch_offset =
HAL_PRIME_CHNL_OFFSET_LOWER; */
cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
break;
- case 3:
+ case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
break;
default:
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 47ac4e9..69d2423 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -859,7 +859,7 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
u8 bencrypt = 0;
/* u8 wpa_ie[255], rsn_ie[255]; */
u16 wpa_len = 0, rsn_len = 0;
- struct HT_info_element *pht_info;
+ struct ieee80211_ht_operation *pht_info;
struct ieee80211_ht_cap *pht_cap;
const u8 *p;
@@ -916,8 +916,8 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
pnetwork->network.IEs + _FIXED_IE_LENGTH_,
pnetwork->network.IELength - _FIXED_IE_LENGTH_);
if (p && p[1] > 0) {
- pht_info = (struct HT_info_element *)(p + 2);
- pnetwork->BcnInfo.ht_info_infos_0 = pht_info->infos[0];
+ pht_info = (struct ieee80211_ht_operation *)(p + 2);
+ pnetwork->BcnInfo.ht_info_infos_0 = pht_info->ht_param;
} else
pnetwork->BcnInfo.ht_info_infos_0 = 0;
}
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index e9f46a6..1d2ea4e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -394,8 +394,8 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
/* cur_bwmod is updated by beacon, pmlmeinfo is
updated by association response */
bw_40MHz = (pmlmeext->cur_bwmode &&
- (IEEE80211_HT_PARAM_CHAN_WIDTH_ANY &
- pmlmeinfo->HT_info.infos[0])) ? 1:0;
+ (pmlmeinfo->HT_info.ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
/* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
_SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 297e2e4..9982886 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2322,7 +2322,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
if (pregistrypriv->cbw40_enable &&
pmlmeinfo->ht_cap.cap_info &
cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
- pmlmeinfo->HT_info.infos[0] & BIT(2)) {
+ pmlmeinfo->HT_info.ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
int i;
u8 rf_type;
@@ -2339,13 +2339,13 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
}
/* switch to the 40M Hz mode accoring to the AP */
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
- switch ((pmlmeinfo->HT_info.infos[0] & 0x3))
- {
- case HT_EXTCHNL_OFFSET_UPPER:
+ switch (pmlmeinfo->HT_info.ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
+ case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
break;
- case HT_EXTCHNL_OFFSET_LOWER:
+ case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
break;
@@ -2368,7 +2368,9 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
/* */
/* Config current HT Protection mode. */
/* */
- pmlmeinfo->HT_protection = pmlmeinfo->HT_info.infos[1] & 0x3;
+ pmlmeinfo->HT_protection =
+ le16_to_cpu(pmlmeinfo->HT_info.operation_mode) &
+ IEEE80211_HT_OP_MODE_PROTECTION;
}
void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index b5f1d40..0dc49d3 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4640,9 +4640,9 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
bssid->IEs + ie_offset,
bssid->IELength - ie_offset);
if (p) {
- struct HT_info_element *HT_info =
- (struct HT_info_element *)(p + 2);
- bssid->DSConfig = HT_info->primary_channel;
+ struct ieee80211_ht_operation *HT_info =
+ (struct ieee80211_ht_operation *)(p + 2);
+ bssid->DSConfig = HT_info->primary_chan;
} else /* use current channel */
bssid->DSConfig = rtw_get_oper_ch23a(padapter);
}
@@ -5959,7 +5959,7 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *pnetwork = &pmlmeinfo->network;
const struct wlan_bssid_ex *pparm = (struct wlan_bssid_ex *)pbuf;
- struct HT_info_element *pht_info;
+ struct ieee80211_ht_operation *pht_info;
u32 i;
int bcn_fixed_size;
u8 *p;
@@ -6028,20 +6028,21 @@ int join_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
/* spec case only for cisco's ap because cisco's ap
* issue assoc rsp using mcs rate @40MHz or @20MHz */
- pht_info = (struct HT_info_element *)(p + 2);
+ pht_info = (struct ieee80211_ht_operation *)(p + 2);
- if ((pregpriv->cbw40_enable) &&
- (pht_info->infos[0] & BIT(2))) {
+ if (pregpriv->cbw40_enable &&
+ (pht_info->ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
/* switch to the 40M Hz mode according to AP */
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
- switch (pht_info->infos[0] & 0x3)
- {
- case 1:
+ switch (pht_info->ht_param &
+ IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
+ case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
pmlmeext->cur_ch_offset =
HAL_PRIME_CHNL_OFFSET_LOWER;
break;
- case 3:
+ case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
pmlmeext->cur_ch_offset =
HAL_PRIME_CHNL_OFFSET_UPPER;
break;
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 1194a6e..6d69811 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -635,7 +635,7 @@ void WMMOnAssocRsp23a(struct rtw_adapter *padapter)
static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p)
{
- struct HT_info_element *pHT_info;
+ struct ieee80211_ht_operation *pHT_info;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -648,19 +648,20 @@ static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p)
return;
if (!phtpriv->ht_option)
return;
- if (p[1] > sizeof(struct HT_info_element))
+ if (p[1] != sizeof(struct ieee80211_ht_operation))
return;
- pHT_info = (struct HT_info_element *)(p + 2);
+ pHT_info = (struct ieee80211_ht_operation *)(p + 2);
- if ((pHT_info->infos[0] & BIT(2)) && pregistrypriv->cbw40_enable) {
+ if ((pHT_info->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) &&
+ pregistrypriv->cbw40_enable) {
new_bwmode = HT_CHANNEL_WIDTH_40;
- switch (pHT_info->infos[0] & 0x3) {
- case 1:
+ switch (pHT_info->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET){
+ case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
new_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
break;
- case 3:
+ case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
new_ch_offset = HAL_PRIME_CHNL_OFFSET_UPPER;
break;
default:
@@ -786,7 +787,7 @@ void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p)
if (phtpriv->ht_option == false)
return;
- if (p[1] > sizeof(struct HT_info_element))
+ if (p[1] != sizeof(struct ieee80211_ht_operation))
return;
pmlmeinfo->HT_info_enable = 1;
@@ -883,7 +884,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
struct ieee80211_mgmt *mgmt, u32 pkt_len)
{
struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
- struct HT_info_element *pht_info;
+ struct ieee80211_ht_operation *pht_info;
struct ieee80211_ht_cap *pht_cap;
struct wlan_bssid_ex *bssid;
unsigned short val16;
@@ -952,8 +953,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
/* parsing HT_INFO_IE */
p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len);
if (p && p[1] > 0) {
- pht_info = (struct HT_info_element *)(p + 2);
- ht_info_infos_0 = pht_info->infos[0];
+ pht_info = (struct ieee80211_ht_operation *)(p + 2);
+ ht_info_infos_0 = pht_info->ht_param;
} else {
pht_info = NULL;
ht_info_infos_0 = 0;
@@ -985,7 +986,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len);
if (pht_info)
- bcn_channel = pht_info->primary_channel;
+ bcn_channel = pht_info->primary_chan;
else { /* we don't find channel IE, so don't check it */
DBG_8723A("Oops: %s we don't find channel IE, so don't "
"check it\n", __func__);
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index 57622fb..368e57d 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -367,7 +367,7 @@ struct mlme_ext_info
struct ADDBA_request ADDBA_req;
struct WMM_para_element WMM_param;
struct ieee80211_ht_cap ht_cap;
- struct HT_info_element HT_info;
+ struct ieee80211_ht_operation HT_info;
struct wlan_bssid_ex network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */
struct FW_Sta_Info FW_sta_info[NUM_STA];
};
diff --git a/drivers/staging/rtl8723au/include/rtw_rf.h b/drivers/staging/rtl8723au/include/rtw_rf.h
index 91a0a22..a7de714 100644
--- a/drivers/staging/rtl8723au/include/rtw_rf.h
+++ b/drivers/staging/rtl8723au/include/rtw_rf.h
@@ -89,17 +89,6 @@ enum ht_channel_width {
HT_CHANNEL_WIDTH_10 = 4,
};
-/* */
-/* Represent Extention Channel Offset in HT Capabilities */
-/* This is available only in 40Mhz mode. */
-/* */
-enum {
- HT_EXTCHNL_OFFSET_NO_EXT = 0,
- HT_EXTCHNL_OFFSET_UPPER = 1,
- HT_EXTCHNL_OFFSET_NO_DEF = 2,
- HT_EXTCHNL_OFFSET_LOWER = 3,
-};
-
/* 2007/11/15 MH Define different RF type. */
enum {
RF_1T2R = 0,
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index 6d221df..4ab28e5 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -63,17 +63,6 @@
Below is the definition for 802.11n
------------------------------------------------------------------------------*/
-/* struct rtw_ieee80211_ht_cap - HT additional information
- *
- * This structure refers to "HT information element" as
- * described in 802.11n draft section 7.3.2.53
- */
-struct HT_info_element {
- unsigned char primary_channel;
- unsigned char infos[5];
- unsigned char MCS_rate[16];
-} __packed;
-
struct AC_param {
unsigned char ACI_AIFSN;
unsigned char CW;

View File

@ -0,0 +1,146 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:14 +0200
Subject: [015/249] staging: rtl8723au: Don't carry ht_cap_info and ht_param in
struct wlan_bcn_info
Origin: https://git.kernel.org/linus/ed08b4de7c26a898b9deb65ee46c5d7eaf2bdd62
These were just stored to check whether the beacon info had changed
and print a debug message in this case. If we ever need this again, we
can determine this change differently.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 22 -------------
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 43 ++-----------------------
drivers/staging/rtl8723au/include/wlan_bssdef.h | 2 --
3 files changed, 3 insertions(+), 64 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 69d2423..2740639 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -859,9 +859,6 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
u8 bencrypt = 0;
/* u8 wpa_ie[255], rsn_ie[255]; */
u16 wpa_len = 0, rsn_len = 0;
- struct ieee80211_ht_operation *pht_info;
- struct ieee80211_ht_cap *pht_cap;
- const u8 *p;
cap = get_unaligned_le16(
rtw_get_capability23a_from_ie(pnetwork->network.IEs));
@@ -901,25 +898,6 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
rtw_get_cipher_info(pnetwork);
/* get bwmode and ch_offset */
- /* parsing HT_CAP_IE */
- p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
- pnetwork->network.IEs + _FIXED_IE_LENGTH_,
- pnetwork->network.IELength - _FIXED_IE_LENGTH_);
- if (p && p[1] > 0) {
- pht_cap = (struct ieee80211_ht_cap *)(p + 2);
- pnetwork->BcnInfo.ht_cap_info = pht_cap->cap_info;
- } else
- pnetwork->BcnInfo.ht_cap_info = 0;
-
- /* parsing HT_INFO_IE */
- p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
- pnetwork->network.IEs + _FIXED_IE_LENGTH_,
- pnetwork->network.IELength - _FIXED_IE_LENGTH_);
- if (p && p[1] > 0) {
- pht_info = (struct ieee80211_ht_operation *)(p + 2);
- pnetwork->BcnInfo.ht_info_infos_0 = pht_info->ht_param;
- } else
- pnetwork->BcnInfo.ht_info_infos_0 = 0;
}
/* show MCS rate, unit: 100Kbps */
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 6d69811..8c007cd 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -885,15 +885,12 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
{
struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
struct ieee80211_ht_operation *pht_info;
- struct ieee80211_ht_cap *pht_cap;
struct wlan_bssid_ex *bssid;
unsigned short val16;
u16 wpa_len = 0, rsn_len = 0;
u8 encryp_protocol;
int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r;
u32 bcn_channel;
- unsigned short ht_cap_info;
- unsigned char ht_info_infos_0;
int len, pie_len, ie_offset;
const u8 *p;
u8 *pie;
@@ -941,41 +938,6 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
pie = bssid->IEs + ie_offset;
pie_len = pkt_len - ie_offset;
- p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len);
- if (p && p[1] > 0) {
- pht_cap = (struct ieee80211_ht_cap *)(p + 2);
- ht_cap_info = pht_cap->cap_info;
- } else {
- pht_cap = NULL;
- ht_cap_info = 0;
- }
-
- /* parsing HT_INFO_IE */
- p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len);
- if (p && p[1] > 0) {
- pht_info = (struct ieee80211_ht_operation *)(p + 2);
- ht_info_infos_0 = pht_info->ht_param;
- } else {
- pht_info = NULL;
- ht_info_infos_0 = 0;
- }
-
- if (ht_cap_info != cur_network->BcnInfo.ht_cap_info ||
- ((ht_info_infos_0 & 0x03) !=
- (cur_network->BcnInfo.ht_info_infos_0 & 0x03))) {
- DBG_8723A("%s bcn now: ht_cap_info:%x ht_info_infos_0:%x\n",
- __func__, ht_cap_info, ht_info_infos_0);
- DBG_8723A("%s bcn link: ht_cap_info:%x ht_info_infos_0:%x\n",
- __func__, cur_network->BcnInfo.ht_cap_info,
- cur_network->BcnInfo.ht_info_infos_0);
- DBG_8723A("%s bw mode change, disconnect\n", __func__);
- /* bcn_info_update */
- cur_network->BcnInfo.ht_cap_info = ht_cap_info;
- cur_network->BcnInfo.ht_info_infos_0 = ht_info_infos_0;
- /* to do : need to check that whether modify related
- register of BB or not */
- }
-
/* Checking for channel */
p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, pie, pie_len);
if (p)
@@ -985,9 +947,10 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
info for channel */
p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len);
- if (pht_info)
+ if (p && p[1] > 0) {
+ pht_info = (struct ieee80211_ht_operation *)(p + 2);
bcn_channel = pht_info->primary_chan;
- else { /* we don't find channel IE, so don't check it */
+ } else { /* we don't find channel IE, so don't check it */
DBG_8723A("Oops: %s we don't find channel IE, so don't "
"check it\n", __func__);
bcn_channel = Adapter->mlmeextpriv.cur_channel;
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h
index 664015d..b717687 100644
--- a/drivers/staging/rtl8723au/include/wlan_bssdef.h
+++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h
@@ -83,8 +83,6 @@ struct wlan_bcn_info {
int is_8021x;
/* bwmode 20/40 and ch_offset UP/LOW */
- unsigned short ht_cap_info;
- unsigned char ht_info_infos_0;
};
struct wlan_bssid_ex {

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:15 +0200
Subject: [016/249] staging: rtl8723au: rtw_check_bcn_info23a(): Use capability
bit define
Origin: https://git.kernel.org/linus/a665bcc2441fcf30636c2792c125a4d07d44d617
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 8c007cd..67fb7ec 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -995,7 +995,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
/* check encryption info */
val16 = rtw_get_capability23a(bssid);
- if (val16 & BIT(4))
+ if (val16 & WLAN_CAPABILITY_PRIVACY)
bssid->Privacy = 1;
else
bssid->Privacy = 0;

View File

@ -0,0 +1,168 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:16 +0200
Subject: [017/249] staging: rtl8723au: Remmove buddy-adapter linking
Origin: https://git.kernel.org/linus/e3916153ea15f97a343e463c4b69bd819229d41a
This sort of stuff should be handled by the bonding driver
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_pwrctrl.c | 16 ----------------
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 25 -------------------------
drivers/staging/rtl8723au/include/drv_types.h | 3 ---
drivers/staging/rtl8723au/os_dep/os_intfs.c | 5 -----
drivers/staging/rtl8723au/os_dep/usb_intf.c | 12 ++----------
5 files changed, 2 insertions(+), 59 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c
index dbd01b6..7dc7c90 100644
--- a/drivers/staging/rtl8723au/core/rtw_pwrctrl.c
+++ b/drivers/staging/rtl8723au/core/rtw_pwrctrl.c
@@ -114,7 +114,6 @@ int ips_leave23a(struct rtw_adapter * padapter)
static bool rtw_pwr_unassociated_idle(struct rtw_adapter *adapter)
{
- struct rtw_adapter *buddy = adapter->pbuddy_adapter;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct xmit_priv *pxmit_priv = &adapter->xmitpriv;
@@ -130,21 +129,6 @@ static bool rtw_pwr_unassociated_idle(struct rtw_adapter *adapter)
goto exit;
}
- /* consider buddy, if exist */
- if (buddy) {
- struct mlme_priv *b_pmlmepriv = &buddy->mlmepriv;
-
- if (check_fwstate(b_pmlmepriv,
- WIFI_ASOC_STATE|WIFI_SITE_MONITOR) ||
- check_fwstate(b_pmlmepriv,
- WIFI_UNDER_LINKING|WIFI_UNDER_WPS) ||
- check_fwstate(b_pmlmepriv, WIFI_AP_STATE) ||
- check_fwstate(b_pmlmepriv,
- WIFI_ADHOC_MASTER_STATE|WIFI_ADHOC_STATE)) {
- goto exit;
- }
- }
-
if (pxmit_priv->free_xmitbuf_cnt != NR_XMITBUFF ||
pxmit_priv->free_xmit_extbuf_cnt != NR_XMIT_EXTBUFF) {
DBG_8723A_LEVEL(_drv_always_,
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 67fb7ec..a9fa109 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -1644,28 +1644,3 @@ void process_addba_req23a(struct rtw_adapter *padapter,
true : false;
}
}
-
-static struct rtw_adapter *pbuddy_padapter;
-
-int rtw_handle_dualmac23a(struct rtw_adapter *adapter, bool init)
-{
- int status = _SUCCESS;
-
- if (init) {
- if (pbuddy_padapter == NULL) {
- pbuddy_padapter = adapter;
- DBG_8723A("%s(): pbuddy_padapter == NULL, "
- "Set pbuddy_padapter\n", __func__);
- } else {
- adapter->pbuddy_adapter = pbuddy_padapter;
- pbuddy_padapter->pbuddy_adapter = adapter;
- /* clear global value */
- pbuddy_padapter = NULL;
- DBG_8723A("%s(): pbuddy_padapter exist, "
- "Exchange Information\n", __func__);
- }
- } else
- pbuddy_padapter = NULL;
-
- return status;
-}
diff --git a/drivers/staging/rtl8723au/include/drv_types.h b/drivers/staging/rtl8723au/include/drv_types.h
index a94857d..3ef9d7a 100644
--- a/drivers/staging/rtl8723au/include/drv_types.h
+++ b/drivers/staging/rtl8723au/include/drv_types.h
@@ -259,7 +259,6 @@ struct rtw_adapter {
u8 bWritePortCancel;
/* The driver will show the desired chan nor when this flag is 1. */
u8 bNotifyChannelChange;
- struct rtw_adapter *pbuddy_adapter;
/* extend to support multi interface */
/* IFACE_ID0 is equals to PRIMARY_ADAPTER */
@@ -269,8 +268,6 @@ struct rtw_adapter {
#define adapter_to_dvobj(adapter) (adapter->dvobj)
-int rtw_handle_dualmac23a(struct rtw_adapter *adapter, bool init);
-
static inline u8 *myid(struct eeprom_priv *peepriv)
{
return peepriv->mac_addr;
diff --git a/drivers/staging/rtl8723au/os_dep/os_intfs.c b/drivers/staging/rtl8723au/os_dep/os_intfs.c
index 1fb3438..ee3d62c 100644
--- a/drivers/staging/rtl8723au/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8723au/os_dep/os_intfs.c
@@ -584,11 +584,6 @@ int rtw_free_drv_sw23a(struct rtw_adapter *padapter)
kfree(padapter->HalData);
padapter->HalData = NULL;
- RT_TRACE(_module_os_intfs_c_, _drv_info_, ("<== rtw_free_drv_sw23a\n"));
-
- /* clear pbuddy_adapter to avoid access wrong pointer. */
- if (padapter->pbuddy_adapter != NULL)
- padapter->pbuddy_adapter->pbuddy_adapter = NULL;
RT_TRACE(_module_os_intfs_c_, _drv_info_, ("-rtw_free_drv_sw23a\n"));
return _SUCCESS;
}
diff --git a/drivers/staging/rtl8723au/os_dep/usb_intf.c b/drivers/staging/rtl8723au/os_dep/usb_intf.c
index 8b25c1a..d0a3a1e6 100644
--- a/drivers/staging/rtl8723au/os_dep/usb_intf.c
+++ b/drivers/staging/rtl8723au/os_dep/usb_intf.c
@@ -572,7 +572,7 @@ static struct rtw_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
pnetdev = rtw_init_netdev23a(padapter);
if (!pnetdev)
- goto handle_dualmac;
+ goto free_adapter;
padapter = netdev_priv(pnetdev);
padapter->dvobj = dvobj;
@@ -583,13 +583,10 @@ static struct rtw_adapter *rtw_usb_if1_init(struct dvobj_priv *dvobj,
rtl8723au_set_hw_type(padapter);
- if (rtw_handle_dualmac23a(padapter, 1) != _SUCCESS)
- goto free_adapter;
-
SET_NETDEV_DEV(pnetdev, dvobj_to_dev(dvobj));
if (rtw_wdev_alloc(padapter, dvobj_to_dev(dvobj)))
- goto handle_dualmac;
+ goto free_adapter;
/* step 2. allocate HalData */
padapter->HalData = kzalloc(sizeof(struct hal_data_8723a), GFP_KERNEL);
@@ -650,9 +647,6 @@ free_wdev:
rtw_wdev_unregister(padapter->rtw_wdev);
rtw_wdev_free(padapter->rtw_wdev);
}
-handle_dualmac:
- if (status != _SUCCESS)
- rtw_handle_dualmac23a(padapter, 0);
free_adapter:
if (status != _SUCCESS) {
if (pnetdev)
@@ -684,8 +678,6 @@ static void rtw_usb_if1_deinit(struct rtw_adapter *if1)
DBG_8723A("+r871xu_dev_remove, hw_init_completed =%d\n",
if1->hw_init_completed);
- rtw_handle_dualmac23a(if1, 0);
-
if (if1->rtw_wdev) {
rtw_wdev_unregister(if1->rtw_wdev);
rtw_wdev_free(if1->rtw_wdev);

View File

@ -0,0 +1,144 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:17 +0200
Subject: [018/249] staging: rtl8723au: Rewrite update_beacon23a_info() tto use
cfg80211_find_ie()
Origin: https://git.kernel.org/linus/7882ef454c613c8e79700ca1c81274357e1286ff
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 5 ++--
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 38 ++++++++++--------------
drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 9 +++---
3 files changed, 22 insertions(+), 30 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 0dc49d3..bf0d62e 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -789,7 +789,6 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
struct sta_priv *pstapriv = &padapter->stapriv;
struct sk_buff *skb = precv_frame->pkt;
struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *) skb->data;
- u8 *pframe = skb->data;
int pkt_len = skb->len;
struct wlan_bssid_ex *pbss;
int ret = _SUCCESS;
@@ -869,7 +868,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
the number of the beacon received */
if ((sta_rx_pkts(psta) & 0xf) == 0) {
/* DBG_8723A("update_bcn_info\n"); */
- update_beacon23a_info(padapter, pframe,
+ update_beacon23a_info(padapter, mgmt,
pkt_len, psta);
}
}
@@ -881,7 +880,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
number of the beacon received */
if ((sta_rx_pkts(psta) & 0xf) == 0) {
/* DBG_8723A("update_bcn_info\n"); */
- update_beacon23a_info(padapter, pframe,
+ update_beacon23a_info(padapter, mgmt,
pkt_len, psta);
}
} else {
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index a9fa109..82904d0 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -633,7 +633,7 @@ void WMMOnAssocRsp23a(struct rtw_adapter *padapter)
return;
}
-static void bwmode_update_check(struct rtw_adapter *padapter, u8 *p)
+static void bwmode_update_check(struct rtw_adapter *padapter, const u8 *p)
{
struct ieee80211_ht_operation *pHT_info;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -774,7 +774,7 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p)
return;
}
-void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p)
+void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -830,7 +830,7 @@ void HTOnAssocRsp23a(struct rtw_adapter *padapter)
rtl8723a_set_ampdu_factor(padapter, max_AMPDU_len);
}
-void ERP_IE_handler23a(struct rtw_adapter *padapter, u8 *p)
+void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p)
{
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -1091,32 +1091,24 @@ _mismatch:
return _FAIL;
}
-void update_beacon23a_info(struct rtw_adapter *padapter, u8 *pframe,
+void update_beacon23a_info(struct rtw_adapter *padapter,
+ struct ieee80211_mgmt *mgmt,
uint pkt_len, struct sta_info *psta)
{
- unsigned int i;
unsigned int len;
- u8 *p;
+ const u8 *p;
- len = pkt_len -
- (_BEACON_IE_OFFSET_ + sizeof(struct ieee80211_hdr_3addr));
+ len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
- for (i = 0; i < len;) {
- p = (u8 *)(pframe + (_BEACON_IE_OFFSET_ + sizeof(struct ieee80211_hdr_3addr)) + i);
+ p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, mgmt->u.beacon.variable,
+ len);
+ if (p)
+ bwmode_update_check(padapter, p);
- switch (p[0]) {
- case WLAN_EID_HT_OPERATION: /* HT info */
- /* HT_info_handler23a(padapter, pIE); */
- bwmode_update_check(padapter, p);
- break;
- case WLAN_EID_ERP_INFO:
- ERP_IE_handler23a(padapter, p);
- VCS_update23a(padapter, psta);
- break;
- default:
- break;
- }
- i += (p[1] + 2);
+ p = cfg80211_find_ie(WLAN_EID_ERP_INFO, mgmt->u.beacon.variable, len);
+ if (p) {
+ ERP_IE_handler23a(padapter, p);
+ VCS_update23a(padapter, psta);
}
}
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index 368e57d..b8a108b 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -514,14 +514,15 @@ int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p);
void WMMOnAssocRsp23a(struct rtw_adapter *padapter);
void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p);
-void HT_info_handler23a(struct rtw_adapter *padapter, u8 *p);
+void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p);
void HTOnAssocRsp23a(struct rtw_adapter *padapter);
-void ERP_IE_handler23a(struct rtw_adapter *padapter, u8 *p);
+void ERP_IE_handler23a(struct rtw_adapter *padapter, const u8 *p);
void VCS_update23a(struct rtw_adapter *padapter, struct sta_info *psta);
-void update_beacon23a_info(struct rtw_adapter *padapter, u8 *pframe, uint len,
- struct sta_info *psta);
+void update_beacon23a_info(struct rtw_adapter *padapter,
+ struct ieee80211_mgmt *mgmt, uint len,
+ struct sta_info *psta);
int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
struct ieee80211_mgmt *mgmt, u32 packet_len);
void update_IOT_info23a(struct rtw_adapter *padapter);

View File

@ -0,0 +1,58 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:18 +0200
Subject: [019/249] staging: rtl8723au: collect_bss_info23a(): Collect
beacon_interval correct
Origin: https://git.kernel.org/linus/5b124b1aa2979b1319d6434464c318ef0111ceb4
Only retrieve beacon_interval from frames where it is present. This
avoids setting BeaconPeriod to garbage for other frame types.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index bf0d62e..fde8a32 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4547,20 +4547,28 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
bssid->reserved = 1;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
capab_info = mgmt->u.beacon.capab_info;
+ bssid->BeaconPeriod =
+ get_unaligned_le16(&mgmt->u.beacon.beacon_int);
} else if (ieee80211_is_probe_req(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_req.variable);
bssid->reserved = 2;
capab_info = 0;
+ bssid->BeaconPeriod =
+ padapter->registrypriv.dev_network.BeaconPeriod;
} else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_resp.variable);
bssid->reserved = 3;
capab_info = mgmt->u.probe_resp.capab_info;
+ bssid->BeaconPeriod =
+ get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
} else {
bssid->reserved = 0;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
capab_info = mgmt->u.beacon.capab_info;
+ bssid->BeaconPeriod =
+ padapter->registrypriv.dev_network.BeaconPeriod;
}
ie_offset -= offsetof(struct ieee80211_mgmt, u);
@@ -4654,9 +4662,6 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
return _SUCCESS;
}
- bssid->BeaconPeriod = get_unaligned_le16(
- rtw_get_beacon_interval23a_from_ie(bssid->IEs));
-
if (capab_info & BIT(0)) {
bssid->ifmode = NL80211_IFTYPE_STATION;
ether_addr_copy(bssid->MacAddress, mgmt->sa);

View File

@ -0,0 +1,59 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Sat, 31 May 2014 18:05:19 +0200
Subject: [020/249] staging: rtl8723au: collect_bss_info23a(): ieee80211_mgmt
capab_info is little endian
Origin: https://git.kernel.org/linus/c2b8047aff855bfbcb5a2ff478465c01bb82fda5
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index fde8a32..1c22d1b 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4546,7 +4546,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
if (ieee80211_is_beacon(mgmt->frame_control)) {
bssid->reserved = 1;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
- capab_info = mgmt->u.beacon.capab_info;
+ capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.beacon.beacon_int);
} else if (ieee80211_is_probe_req(mgmt->frame_control)) {
@@ -4560,13 +4560,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_resp.variable);
bssid->reserved = 3;
- capab_info = mgmt->u.probe_resp.capab_info;
+ capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
} else {
bssid->reserved = 0;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
- capab_info = mgmt->u.beacon.capab_info;
+ capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
padapter->registrypriv.dev_network.BeaconPeriod;
}
@@ -4662,7 +4662,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
return _SUCCESS;
}
- if (capab_info & BIT(0)) {
+ if (capab_info & WLAN_CAPABILITY_ESS) {
bssid->ifmode = NL80211_IFTYPE_STATION;
ether_addr_copy(bssid->MacAddress, mgmt->sa);
} else {
@@ -4670,7 +4670,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
ether_addr_copy(bssid->MacAddress, mgmt->bssid);
}
- if (capab_info & BIT(4))
+ if (capab_info & WLAN_CAPABILITY_PRIVACY)
bssid->Privacy = 1;
else
bssid->Privacy = 0;

View File

@ -0,0 +1,42 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Tue, 3 Jun 2014 23:41:22 +0200
Subject: [021/249] staging: rtl8723au: rtw_update_ht_cap23a(): Use correct
mask when determining 40MHz channel location
Origin: https://git.kernel.org/linus/b2775415844e89d528a0c40f81caedd6aad595f7
commit 4dc5f8bab2663b902b9cb0be29198dbbf38aa3fb
Author: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Tue May 27 13:43:12 2014 +0200
staging: rtl8723au: Eliminate struct HT_info_element
Yet another duplicate version of struct ieee80211_ht_operation
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
introduced a bad error, applying the wrong value as the mask when
determining the location of the 40MHz channel, effectively making it
always determining it as not present. This caused hangs and delays
when running in 40MHz channel mode.
This should get it right.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 9982886..76e1797 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2340,7 +2340,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
/* switch to the 40M Hz mode accoring to the AP */
pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40;
switch (pmlmeinfo->HT_info.ht_param &
- IEEE80211_HT_PARAM_CHAN_WIDTH_ANY) {
+ IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
break;

View File

@ -0,0 +1,64 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:15:59 +0200
Subject: [022/249] staging: rtl8723au: rtw_get_bcn_info23a(): Use cfg80211_*
to obtain crypto info
Origin: https://git.kernel.org/linus/54ddd2266a429e801382a32733177ec33384c8a0
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 29 +++++++++++++-------------
1 file changed, 14 insertions(+), 15 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 2740639..484272e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -857,8 +857,9 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
{
unsigned short cap;
u8 bencrypt = 0;
- /* u8 wpa_ie[255], rsn_ie[255]; */
- u16 wpa_len = 0, rsn_len = 0;
+ int pie_len, ie_offset;
+ u8 *pie;
+ const u8 *p;
cap = get_unaligned_le16(
rtw_get_capability23a_from_ie(pnetwork->network.IEs));
@@ -868,24 +869,22 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork)
} else
pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
- rtw_get_sec_ie23a(pnetwork->network.IEs, pnetwork->network.IELength,
- NULL, &rsn_len, NULL, &wpa_len);
RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
("rtw_get_bcn_info23a: ssid =%s\n", pnetwork->network.Ssid.ssid));
- RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
- ("rtw_get_bcn_info23a: wpa_len =%d rsn_len =%d\n",
- wpa_len, rsn_len));
- RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
- ("rtw_get_bcn_info23a: ssid =%s\n", pnetwork->network.Ssid.ssid));
- RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
- ("rtw_get_bcn_info23a: wpa_len =%d rsn_len =%d\n",
- wpa_len, rsn_len));
- if (rsn_len > 0)
+ ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
+ offsetof(struct ieee80211_mgmt, u);
+ pie = pnetwork->network.IEs + ie_offset;
+ pie_len = pnetwork->network.IELength - ie_offset;
+
+ p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
+ if (p && p[1]) {
pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA2;
- else if (wpa_len > 0)
+ } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPA,
+ pie, pie_len)) {
pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WPA;
- else {
+ } else {
if (bencrypt)
pnetwork->BcnInfo.encryp_protocol = ENCRYP_PROTOCOL_WEP;
}

View File

@ -0,0 +1,45 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:00 +0200
Subject: [023/249] staging: rtl8723au: rtw_wlan_util.c: Use cfg80211_* to
determine crypto
Origin: https://git.kernel.org/linus/77953edfac8dfc2c5b0d2007fdc64839c736e7a1
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 82904d0..043ba40 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -887,7 +887,6 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
struct ieee80211_ht_operation *pht_info;
struct wlan_bssid_ex *bssid;
unsigned short val16;
- u16 wpa_len = 0, rsn_len = 0;
u8 encryp_protocol;
int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r;
u32 bcn_channel;
@@ -1009,14 +1008,14 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
goto _mismatch;
}
- rtw_get_sec_ie23a(bssid->IEs, bssid->IELength, NULL, &rsn_len, NULL,
- &wpa_len);
-
- if (rsn_len > 0)
+ p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
+ if (p && p[1]) {
encryp_protocol = ENCRYP_PROTOCOL_WPA2;
- else if (wpa_len > 0)
+ } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WPA,
+ pie, pie_len)) {
encryp_protocol = ENCRYP_PROTOCOL_WPA;
- else {
+ } else {
if (bssid->Privacy)
encryp_protocol = ENCRYP_PROTOCOL_WEP;
else

View File

@ -0,0 +1,111 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:01 +0200
Subject: [024/249] staging: rtl8723au: Remove obsolete rtw_get_sec_ie23a()
Origin: https://git.kernel.org/linus/0b548a5c4d55058393b27c888a5cd04610c95ee3
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 75 --------------------------
drivers/staging/rtl8723au/include/ieee80211.h | 2 -
2 files changed, 77 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 484272e..cbb1b85 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -621,81 +621,6 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher,
return ret;
}
-int rtw_get_sec_ie23a(u8 *in_ie, uint in_len, u8 *rsn_ie, u16 *rsn_len,
- u8 *wpa_ie, u16 *wpa_len)
-{
- u8 authmode, sec_idx, i;
- uint cnt;
-
-
- /* Search required WPA or WPA2 IE and copy to sec_ie[ ] */
-
- cnt = (_TIMESTAMP_ + _BEACON_ITERVAL_ + _CAPABILITY_);
-
- sec_idx = 0;
-
- while(cnt < in_len) {
- authmode = in_ie[cnt];
-
- if ((authmode == WLAN_EID_VENDOR_SPECIFIC) &&
- !memcmp(&in_ie[cnt+2], RTW_WPA_OUI23A_TYPE, 4)) {
- RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
- ("\n rtw_get_wpa_ie23a: sec_idx =%d "
- "in_ie[cnt+1]+2 =%d\n",
- sec_idx, in_ie[cnt + 1] + 2));
-
- if (wpa_ie) {
- memcpy(wpa_ie, &in_ie[cnt], in_ie[cnt+1]+2);
-
- for (i = 0; i < (in_ie[cnt + 1] + 2); i = i + 8) {
- RT_TRACE(_module_rtl871x_mlme_c_,
- _drv_info_,
- ("\n %2x,%2x,%2x,%2x,%2x,%2x,"
- "%2x,%2x\n", wpa_ie[i],
- wpa_ie[i + 1], wpa_ie[i + 2],
- wpa_ie[i + 3], wpa_ie[i + 4],
- wpa_ie[i + 5], wpa_ie[i + 6],
- wpa_ie[i + 7]));
- }
- }
-
- *wpa_len = in_ie[cnt + 1] + 2;
- cnt += in_ie[cnt + 1] + 2; /* get next */
- } else {
- if (authmode == _WPA2_IE_ID_) {
- RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
- ("\n get_rsn_ie: sec_idx =%d in_ie"
- "[cnt+1]+2 =%d\n", sec_idx,
- in_ie[cnt + 1] + 2));
-
- if (rsn_ie) {
- memcpy(rsn_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
-
- for (i = 0; i < (in_ie[cnt + 1] + 2); i = i + 8) {
- RT_TRACE(_module_rtl871x_mlme_c_,
- _drv_info_,
- ("\n %2x,%2x,%2x,%2x,%2x,%2x,"
- "%2x,%2x\n", rsn_ie[i],
- rsn_ie[i + 1], rsn_ie[i + 2],
- rsn_ie[i + 3], rsn_ie[i + 4],
- rsn_ie[i + 5], rsn_ie[i + 6],
- rsn_ie[i + 7]));
- }
- }
-
- *rsn_len = in_ie[cnt + 1] + 2;
- cnt += in_ie[cnt + 1] + 2; /* get next */
- } else {
- cnt += in_ie[cnt + 1] + 2; /* get next */
- }
- }
- }
-
-
-
- return *rsn_len + *wpa_len;
-}
-
/**
* rtw_get_wps_attr23a - Search a specific WPS attribute from a given WPS IE
* @wps_ie: Address of WPS IE to search
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 6f42d2d..3738978 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -430,8 +430,6 @@ int rtw_get_wpa2_cipher_suite23a(const u8 *s);
int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);
int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);
-int rtw_get_sec_ie23a(u8 *in_ie,uint in_len,u8 *rsn_ie,u16 *rsn_len,u8 *wpa_ie,u16 *wpa_len);
-
const u8 *rtw_get_wps_attr23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_attr, u32 *len_attr);
const u8 *rtw_get_wps_attr_content23a(const u8 *wps_ie, uint wps_ielen, u16 target_attr_id ,u8 *buf_content, uint *len_content);

View File

@ -0,0 +1,84 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:02 +0200
Subject: [025/249] staging: rtl8723au: Declare rtw_get_wpa{2, }_cipher_suite()
static
Origin: https://git.kernel.org/linus/0cac3f9ee447e42c01a38a795c4f6eccd2868084
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 12 ++++++------
drivers/staging/rtl8723au/include/ieee80211.h | 2 --
2 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index cbb1b85..fa3ca9e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -436,7 +436,7 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv)
return sz;
}
-int rtw_get_wpa_cipher_suite23a(const u8 *s)
+static int rtw_get_wpa_cipher_suite(const u8 *s)
{
if (!memcmp(s, WPA_CIPHER_SUITE_NONE23A, WPA_SELECTOR_LEN))
return WPA_CIPHER_NONE;
@@ -452,7 +452,7 @@ int rtw_get_wpa_cipher_suite23a(const u8 *s)
return 0;
}
-int rtw_get_wpa2_cipher_suite23a(const u8 *s)
+static int rtw_get_wpa2_cipher_suite(const u8 *s)
{
if (!memcmp(s, RSN_CIPHER_SUITE_NONE23A, RSN_SELECTOR_LEN))
return WPA_CIPHER_NONE;
@@ -490,7 +490,7 @@ int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int
/* group_cipher */
if (left >= WPA_SELECTOR_LEN) {
- *group_cipher = rtw_get_wpa_cipher_suite23a(pos);
+ *group_cipher = rtw_get_wpa_cipher_suite(pos);
pos += WPA_SELECTOR_LEN;
left -= WPA_SELECTOR_LEN;
@@ -518,7 +518,7 @@ int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int
}
for (i = 0; i < count; i++) {
- *pairwise_cipher |= rtw_get_wpa_cipher_suite23a(pos);
+ *pairwise_cipher |= rtw_get_wpa_cipher_suite(pos);
pos += WPA_SELECTOR_LEN;
left -= WPA_SELECTOR_LEN;
@@ -567,7 +567,7 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher,
/* group_cipher */
if (left >= RSN_SELECTOR_LEN) {
- *group_cipher = rtw_get_wpa2_cipher_suite23a(pos);
+ *group_cipher = rtw_get_wpa2_cipher_suite(pos);
pos += RSN_SELECTOR_LEN;
left -= RSN_SELECTOR_LEN;
@@ -594,7 +594,7 @@ int rtw_parse_wpa2_ie23a(const u8* rsn_ie, int rsn_ie_len, int *group_cipher,
}
for (i = 0; i < count; i++) {
- *pairwise_cipher |= rtw_get_wpa2_cipher_suite23a(pos);
+ *pairwise_cipher |= rtw_get_wpa2_cipher_suite(pos);
pos += RSN_SELECTOR_LEN;
left -= RSN_SELECTOR_LEN;
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 3738978..0ef6e79 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -425,8 +425,6 @@ int rtw_ies_remove_ie23a(u8 *ies, uint *ies_len, uint offset, u8 eid, u8 *oui, u
void rtw_set_supported_rate23a(u8* SupportedRates, uint mode) ;
-int rtw_get_wpa_cipher_suite23a(const u8 *s);
-int rtw_get_wpa2_cipher_suite23a(const u8 *s);
int rtw_parse_wpa_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);
int rtw_parse_wpa2_ie23a(const u8* wpa_ie, int wpa_ie_len, int *group_cipher, int *pairwise_cipher, int *is_8021x);

View File

@ -0,0 +1,52 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:03 +0200
Subject: [026/249] staging: rtl8723au: Make WMM_param_handler23a() and
HT_caps_handler23a() take a const u8 *
Origin: https://git.kernel.org/linus/3cdf27730ac7a005cc0ca15bea5743389e136030
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 4 ++--
drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 043ba40..b9ca088 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -504,7 +504,7 @@ void flush_all_cam_entry23a(struct rtw_adapter *padapter)
memset(pmlmeinfo->FW_sta_info, 0, sizeof(pmlmeinfo->FW_sta_info));
}
-int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p)
+int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p)
{
/* struct registry_priv *pregpriv = &padapter->registrypriv; */
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -712,7 +712,7 @@ static void bwmode_update_check(struct rtw_adapter *padapter, const u8 *p)
}
}
-void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p)
+void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p)
{
unsigned int i;
u8 rf_type;
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index b8a108b..eb61012 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -510,10 +510,10 @@ bool is_IBSS_empty23a(struct rtw_adapter *padapter);
unsigned char check_assoc_AP23a(u8 *pframe, uint len);
-int WMM_param_handler23a(struct rtw_adapter *padapter, u8 *p);
+int WMM_param_handler23a(struct rtw_adapter *padapter, const u8 *p);
void WMMOnAssocRsp23a(struct rtw_adapter *padapter);
-void HT_caps_handler23a(struct rtw_adapter *padapter, u8 *p);
+void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p);
void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p);
void HTOnAssocRsp23a(struct rtw_adapter *padapter);

View File

@ -0,0 +1,104 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:04 +0200
Subject: [027/249] staging: rtl8723au: OnAssocRsp23a(): Use cfg80211_* to
parse IEs
Origin: https://git.kernel.org/linus/e1d143b49521e5c5859c3b7dd48ac301720000af
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 66 +++++++++++++++------------
1 file changed, 37 insertions(+), 29 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 1c22d1b..e32df75 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -1805,11 +1805,12 @@ OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct sk_buff *skb = precv_frame->pkt;
struct ieee80211_mgmt *pmgmt = (struct ieee80211_mgmt *) skb->data;
- int res, i;
+ int res;
unsigned short status;
- u8 *p;
+ const u8 *p, *pie;
u8 *pframe = skb->data;
int pkt_len = skb->len;
+ int pielen;
DBG_8723A("%s\n", __func__);
@@ -1843,38 +1844,45 @@ OnAssocRsp23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
/* AID */
res = pmlmeinfo->aid = le16_to_cpu(pmgmt->u.assoc_resp.aid) & 0x3fff;
- /* following are moved to join event callback function */
- /* to handle HT, WMM, rate adaptive, update MAC reg */
- /* for not to handle the synchronous IO in the tasklet */
- for (i = offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
- i < pkt_len;) {
- p = pframe + i;
-
- switch (p[0])
- {
- case WLAN_EID_VENDOR_SPECIFIC:
- if (!memcmp(p + 2, WMM_PARA_OUI23A, 6))/* WMM */
- WMM_param_handler23a(padapter, p);
- break;
-
- case WLAN_EID_HT_CAPABILITY: /* HT caps */
- HT_caps_handler23a(padapter, p);
+ pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
+ pielen = pkt_len -
+ offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
+
+ p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
+ pmgmt->u.assoc_resp.variable, pielen);
+ if (p && p[1])
+ HT_caps_handler23a(padapter, p);
+
+ p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
+ pmgmt->u.assoc_resp.variable, pielen);
+ if (p && p[1])
+ HT_info_handler23a(padapter, p);
+
+ p = cfg80211_find_ie(WLAN_EID_ERP_INFO,
+ pmgmt->u.assoc_resp.variable, pielen);
+ if (p && p[1])
+ ERP_IE_handler23a(padapter, p);
+
+ pie = pframe + offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
+ while (true) {
+ p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
+ WLAN_OUI_TYPE_MICROSOFT_WMM,
+ pie, pframe + pkt_len - pie);
+ if (!p)
break;
- case WLAN_EID_HT_OPERATION: /* HT info */
- HT_info_handler23a(padapter, p);
+ pie = p + p[1] + 2;
+ /* if this IE is too short, try the next */
+ if (p[1] <= 4)
+ continue;
+ /* if this IE is WMM params, we found what we wanted */
+ if (p[6] == 1)
break;
-
- case WLAN_EID_ERP_INFO:
- ERP_IE_handler23a(padapter, p);
-
- default:
- break;
- }
-
- i += (p[1] + 2);
}
+ if (p && p[1])
+ WMM_param_handler23a(padapter, p);
+
pmlmeinfo->state &= ~WIFI_FW_ASSOC_STATE;
pmlmeinfo->state |= WIFI_FW_ASSOC_SUCCESS;

View File

@ -0,0 +1,58 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:05 +0200
Subject: [028/249] staging: rtl8723au: Remove WMM_ defines
Origin: https://git.kernel.org/linus/c9324c88533fbb15ec59de8e0d4b9d0c9d100026
Only one is used, and only describes the size of an array defined in a
local function. Use sizeof() in the local function to deobfuscate it.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 7 ++++---
drivers/staging/rtl8723au/include/wifi.h | 7 -------
2 files changed, 4 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 76e1797..a3174c0 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2197,7 +2197,7 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
unsigned char *pframe;
const u8 *p;
struct ieee80211_ht_cap ht_capie;
- unsigned char WMM_IE[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
+ u8 WMM_IE[7] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01, 0x00};
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct ht_priv *phtpriv = &pmlmepriv->htpriv;
@@ -2210,8 +2210,9 @@ unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
if (pmlmepriv->qos_option == 0) {
out_len = *pout_len;
pframe = rtw_set_ie23a(out_ie + out_len,
- WLAN_EID_VENDOR_SPECIFIC,
- _WMM_IE_Length_, WMM_IE, pout_len);
+ WLAN_EID_VENDOR_SPECIFIC,
+ sizeof(WMM_IE), WMM_IE,
+ pout_len);
pmlmepriv->qos_option = 1;
}
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index 4ab28e5..07ea4c6 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -53,13 +53,6 @@
#define _TIMESTAMP_ 8
/*-----------------------------------------------------------------------------
- Below is the definition for WMM
-------------------------------------------------------------------------------*/
-#define _WMM_IE_Length_ 7 /* for WMM STA */
-#define _WMM_Para_Element_Length_ 24
-
-
-/*-----------------------------------------------------------------------------
Below is the definition for 802.11n
------------------------------------------------------------------------------*/

View File

@ -0,0 +1,58 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:06 +0200
Subject: [029/249] staging: rtl8723au: Make struct ht_priv.ht_option a bool
Origin: https://git.kernel.org/linus/6f765c20ca85b4d11d9f1e4b81d0d3251f5a4321
Match the return type of rtw_restructure_ht_ie23a() accordingly
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++--
drivers/staging/rtl8723au/include/rtw_ht.h | 2 +-
drivers/staging/rtl8723au/include/rtw_mlme.h | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index a3174c0..d48b986 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2189,8 +2189,8 @@ void rtw_joinbss_reset23a(struct rtw_adapter *padapter)
}
/* the fucntion is >= passive_level */
-unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
- u8 *out_ie, uint in_len, uint *pout_len)
+bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
+ u8 *out_ie, uint in_len, uint *pout_len)
{
u32 out_len;
int max_rx_ampdu_factor;
diff --git a/drivers/staging/rtl8723au/include/rtw_ht.h b/drivers/staging/rtl8723au/include/rtw_ht.h
index 86ce86b..f086376 100644
--- a/drivers/staging/rtl8723au/include/rtw_ht.h
+++ b/drivers/staging/rtl8723au/include/rtw_ht.h
@@ -21,7 +21,7 @@
struct ht_priv
{
- u32 ht_option;
+ bool ht_option;
u32 ampdu_enable;/* for enable Tx A-MPDU */
/* u8 baddbareq_issued[16]; */
u32 tx_amsdu_enable;/* for enable Tx A-MSDU */
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index 4d327ba..a11b5bd 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -356,8 +356,8 @@ __le16 *rtw_get_beacon_interval23a_from_ie(u8 *ie);
void rtw_joinbss_reset23a(struct rtw_adapter *padapter);
-unsigned int rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
- u8 *out_ie, uint in_len, uint *pout_len);
+bool rtw_restructure_ht_ie23a(struct rtw_adapter *padapter, u8 *in_ie,
+ u8 *out_ie, uint in_len, uint *pout_len);
void rtw_update_ht_cap23a(struct rtw_adapter *padapter,
u8 *pie, uint ie_len);
void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,

View File

@ -0,0 +1,112 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:07 +0200
Subject: [030/249] staging: rtl8723au: Be consistent in how htpriv.ht_option
is checked
Origin: https://git.kernel.org/linus/6a5f657db5cb7e0ced04d085154d7f96296488e6
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 6 +++---
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +-
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 6 +++---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 4 ++--
4 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index d67a5f1..a52662e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -1391,7 +1391,7 @@ static int rtw_ht_operation_update(struct rtw_adapter *padapter)
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct ht_priv *phtpriv_ap = &pmlmepriv->htpriv;
- if (pmlmepriv->htpriv.ht_option == true)
+ if (pmlmepriv->htpriv.ht_option)
return 0;
/* if (!iface->conf->ieee80211n || iface->conf->ht_op_mode_fixed) */
@@ -1627,7 +1627,7 @@ void bss_cap_update_on_sta_join23a(struct rtw_adapter *padapter, struct sta_info
psta->no_ht_set = 1;
pmlmepriv->num_sta_no_ht++;
}
- if (pmlmepriv->htpriv.ht_option == true) {
+ if (pmlmepriv->htpriv.ht_option) {
DBG_8723A("%s STA " MAC_FMT
" - no HT, num of non-HT stations %d\n",
__func__, MAC_ARG(psta->hwaddr),
@@ -1865,7 +1865,7 @@ void sta_info_update23a(struct rtw_adapter *padapter, struct sta_info *psta)
psta->htpriv.ht_option = false;
}
- if (pmlmepriv->htpriv.ht_option == false)
+ if (!pmlmepriv->htpriv.ht_option)
psta->htpriv.ht_option = false;
update_sta_info23a_apmode23a(padapter, psta);
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index d48b986..31c414a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2409,7 +2409,7 @@ void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
phtpriv = &psta->htpriv;
- if (phtpriv->ht_option == true && phtpriv->ampdu_enable == true) {
+ if (phtpriv->ht_option && phtpriv->ampdu_enable == true) {
issued = (phtpriv->agg_enable_bitmap>>priority)&0x1;
issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index e32df75..ae8d38f 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -1666,7 +1666,7 @@ OnAssocReq23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
} else
pstat->flags &= ~WLAN_STA_HT;
- if (pmlmepriv->htpriv.ht_option == false && pstat->flags & WLAN_STA_HT){
+ if (!pmlmepriv->htpriv.ht_option && pstat->flags & WLAN_STA_HT){
status = WLAN_STATUS_UNSPECIFIED_FAILURE;
goto OnAssocReq23aFail;
}
@@ -3479,7 +3479,7 @@ static void issue_assocreq(struct rtw_adapter *padapter)
&pattrib->pktlen);
/* HT caps */
- if (padapter->mlmepriv.htpriv.ht_option == true) {
+ if (padapter->mlmepriv.htpriv.ht_option) {
p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, pie, pie_len);
if (p && !is_ap_in_tkip23a(padapter)) {
@@ -5848,7 +5848,7 @@ static void addba_timer_hdl(unsigned long data)
phtpriv = &psta->htpriv;
- if (phtpriv->ht_option == true && phtpriv->ampdu_enable == true) {
+ if (phtpriv->ht_option && phtpriv->ampdu_enable == true) {
if (phtpriv->candidate_tid_bitmap)
phtpriv->candidate_tid_bitmap = 0x0;
}
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index b9ca088..3195b44 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -727,7 +727,7 @@ void HT_caps_handler23a(struct rtw_adapter *padapter, const u8 *p)
if (!p)
return;
- if (phtpriv->ht_option == false)
+ if (!phtpriv->ht_option)
return;
pmlmeinfo->HT_caps_enable = 1;
@@ -784,7 +784,7 @@ void HT_info_handler23a(struct rtw_adapter *padapter, const u8 *p)
if (!p)
return;
- if (phtpriv->ht_option == false)
+ if (!phtpriv->ht_option)
return;
if (p[1] != sizeof(struct ieee80211_ht_operation))

View File

@ -0,0 +1,64 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:08 +0200
Subject: [031/249] staging: rtl8723au: Make struct htpriv.ampdu_enable a bool
Origin: https://git.kernel.org/linus/47e5d2f26d86d8bf1b5ecff2994f939e4283ffeb
Be consistent in parsing it's value
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +-
drivers/staging/rtl8723au/include/rtw_ht.h | 2 +-
3 files changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 31c414a..4a33e7d 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2291,8 +2291,7 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter, u8 *pie, uint ie_len)
ie_len -= bcn_fixed_size;
/* maybe needs check if ap supports rx ampdu. */
- if (phtpriv->ampdu_enable == false &&
- pregistrypriv->ampdu_enable == 1) {
+ if (!phtpriv->ampdu_enable && pregistrypriv->ampdu_enable == 1) {
if (pregistrypriv->wifi_spec == 1)
phtpriv->ampdu_enable = false;
else
@@ -2409,7 +2408,7 @@ void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
phtpriv = &psta->htpriv;
- if (phtpriv->ht_option && phtpriv->ampdu_enable == true) {
+ if (phtpriv->ht_option && phtpriv->ampdu_enable) {
issued = (phtpriv->agg_enable_bitmap>>priority)&0x1;
issued |= (phtpriv->candidate_tid_bitmap>>priority)&0x1;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index ae8d38f..9b8566c 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -5848,7 +5848,7 @@ static void addba_timer_hdl(unsigned long data)
phtpriv = &psta->htpriv;
- if (phtpriv->ht_option && phtpriv->ampdu_enable == true) {
+ if (phtpriv->ht_option && phtpriv->ampdu_enable) {
if (phtpriv->candidate_tid_bitmap)
phtpriv->candidate_tid_bitmap = 0x0;
}
diff --git a/drivers/staging/rtl8723au/include/rtw_ht.h b/drivers/staging/rtl8723au/include/rtw_ht.h
index f086376..cfc947d 100644
--- a/drivers/staging/rtl8723au/include/rtw_ht.h
+++ b/drivers/staging/rtl8723au/include/rtw_ht.h
@@ -22,7 +22,7 @@
struct ht_priv
{
bool ht_option;
- u32 ampdu_enable;/* for enable Tx A-MPDU */
+ bool ampdu_enable;/* for enable Tx A-MPDU */
/* u8 baddbareq_issued[16]; */
u32 tx_amsdu_enable;/* for enable Tx A-MSDU */
u32 tx_amdsu_maxlen; /* 1: 8k, 0:4k ; default:8k, for tx */

View File

@ -0,0 +1,191 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:09 +0200
Subject: [032/249] staging: rtl8723au: issue_auth(): Convert to using struct
ieee80211_mgmt
Origin: https://git.kernel.org/linus/88e06f020083d7d276fda6df331f96469f1517c8
This reduces the dependency of rtw_set_fixed_ie23a() which is
scheduled to go away.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 101 +++++++++++---------------
1 file changed, 44 insertions(+), 57 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 9b8566c..616bb7c 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3036,9 +3036,10 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
struct xmit_frame *pmgntframe;
struct pkt_attrib *pattrib;
unsigned char *pframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
unsigned int val32;
unsigned short val16;
+ u16 auth_algo;
int use_shared_key = 0;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
@@ -3055,23 +3056,20 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)pframe;
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_AUTH);
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->frame_control =
+ cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_AUTH);
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pframe += sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
+ pattrib->pktlen = offsetof(struct ieee80211_mgmt, u.auth.variable);
if (psta) { /* for AP mode */
#ifdef CONFIG_8723AU_AP_MODE
-
- ether_addr_copy(pwlanhdr->addr1, psta->hwaddr);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->da, psta->hwaddr);
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid, myid(&padapter->eeprompriv));
/* setting auth algo number */
val16 = (u16)psta->authalg;
@@ -3079,29 +3077,19 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
if (status != WLAN_STATUS_SUCCESS)
val16 = 0;
- if (val16) {
- val16 = cpu_to_le16(val16);
+ if (val16)
use_shared_key = 1;
- }
- pframe = rtw_set_fixed_ie23a(pframe, _AUTH_ALGM_NUM_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ mgmt->u.auth.auth_alg = cpu_to_le16(val16);
/* setting auth seq number */
- val16 = (u16)psta->auth_seq;
- val16 = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie23a(pframe, _AUTH_SEQ_NUM_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ mgmt->u.auth.auth_transaction =
+ cpu_to_le16((u16)psta->auth_seq);
/* setting status code... */
- val16 = status;
- val16 = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ mgmt->u.auth.status_code = cpu_to_le16(status);
+ pframe = mgmt->u.auth.variable;
/* added challenging text... */
if ((psta->auth_seq == 2) &&
(psta->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1))
@@ -3109,19 +3097,21 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
psta->chg_txt, &pattrib->pktlen);
#endif
} else {
- ether_addr_copy(pwlanhdr->addr1,
- get_my_bssid23a(&pmlmeinfo->network));
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3,
+ struct ieee80211_mgmt *iv_mgmt;
+
+ ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid,
get_my_bssid23a(&pmlmeinfo->network));
/* setting auth algo number */
/* 0:OPEN System, 1:Shared key */
- val16 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared)? 1: 0;
- if (val16) {
- val16 = cpu_to_le16(val16);
+ if (pmlmeinfo->auth_algo == dot11AuthAlgrthm_Shared) {
use_shared_key = 1;
- }
+ auth_algo = WLAN_AUTH_SHARED_KEY;
+ } else
+ auth_algo = WLAN_AUTH_OPEN;
+
/* DBG_8723A("%s auth_algo = %s auth_seq =%d\n", __func__,
(pmlmeinfo->auth_algo == 0)?"OPEN":"SHARED",
pmlmeinfo->auth_seq); */
@@ -3130,35 +3120,32 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
if ((pmlmeinfo->auth_seq == 3) &&
(pmlmeinfo->state & WIFI_FW_AUTH_STATE) &&
(use_shared_key == 1)) {
+ u32 *piv = (u32 *)&mgmt->u.auth;
+
+ iv_mgmt = (struct ieee80211_mgmt *)(pframe + 4);
/* DBG_8723A("==> iv(%d), key_index(%d)\n",
pmlmeinfo->iv, pmlmeinfo->key_index); */
- val32 = ((pmlmeinfo->iv++) |
- (pmlmeinfo->key_index << 30));
- val32 = cpu_to_le32(val32);
- pframe = rtw_set_fixed_ie23a(pframe, 4,
- (unsigned char *)&val32,
- &pattrib->pktlen);
+ val32 = (pmlmeinfo->iv & 0x3fffffff) |
+ (pmlmeinfo->key_index << 30);
+ pmlmeinfo->iv++;
+ put_unaligned_le32(val32, piv);
+
+ pattrib->pktlen += 4;
pattrib->iv_len = IEEE80211_WEP_IV_LEN;
- }
+ } else
+ iv_mgmt = mgmt;
- pframe = rtw_set_fixed_ie23a(pframe, _AUTH_ALGM_NUM_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ iv_mgmt->u.auth.auth_alg = cpu_to_le16(auth_algo);
/* setting auth seq number */
- val16 = pmlmeinfo->auth_seq;
- val16 = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie23a(pframe, _AUTH_SEQ_NUM_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ iv_mgmt->u.auth.auth_transaction =
+ cpu_to_le16(pmlmeinfo->auth_seq);
/* setting status code... */
- val16 = status;
- val16 = cpu_to_le16(val16);
- pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_,
- (unsigned char *)&val16,
- &pattrib->pktlen);
+ iv_mgmt->u.auth.status_code = cpu_to_le16(status);
+
+ pframe = iv_mgmt->u.auth.variable;
/* then checking to see if sending challenging text... */
if ((pmlmeinfo->auth_seq == 3) &&
@@ -3168,7 +3155,7 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
pmlmeinfo->chg_txt,
&pattrib->pktlen);
- pwlanhdr->frame_control |=
+ mgmt->frame_control |=
cpu_to_le16(IEEE80211_FCTL_PROTECTED);
pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);

View File

@ -0,0 +1,75 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:10 +0200
Subject: [033/249] staging: rtl8723au: issue_assocrsp(): Use struct
ieee80211_mgmt instead of rtw_set_fixed_ie23a()
Origin: https://git.kernel.org/linus/c144c3bbd50b0a900d7f952333e5cf76377d0109
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 33 +++++++++++----------------
1 file changed, 13 insertions(+), 20 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 616bb7c..e5df86a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3182,7 +3182,7 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status,
struct sta_info *pstat, u16 pkt_type)
{
struct xmit_frame *pmgntframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
struct pkt_attrib *pattrib;
unsigned char *pframe;
unsigned short val;
@@ -3207,37 +3207,30 @@ static void issue_assocrsp(struct rtw_adapter *padapter, unsigned short status,
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)pframe;
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | pkt_type);
+ mgmt->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT | pkt_type);
- ether_addr_copy(pwlanhdr->addr1, pstat->hwaddr);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->da, pstat->hwaddr);
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen += pattrib->hdrlen;
- pframe += pattrib->hdrlen;
+ pattrib->pktlen =
+ offsetof(struct ieee80211_mgmt, u.assoc_resp.variable);
/* capability */
val = *(unsigned short *)rtw_get_capability23a_from_ie(ie);
- pframe = rtw_set_fixed_ie23a(pframe, _CAPABILITY_,
- (unsigned char *)&val, &pattrib->pktlen);
+ mgmt->u.assoc_resp.capab_info = val;
+ mgmt->u.assoc_resp.status_code = cpu_to_le16(status);
+ mgmt->u.assoc_resp.aid = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
- status = cpu_to_le16(status);
- pframe = rtw_set_fixed_ie23a(pframe, _STATUS_CODE_,
- (unsigned char *)&status,
- &pattrib->pktlen);
-
- val = cpu_to_le16(pstat->aid | BIT(14) | BIT(15));
- pframe = rtw_set_fixed_ie23a(pframe, _ASOC_ID_, (unsigned char *)&val,
- &pattrib->pktlen);
+ pframe = mgmt->u.assoc_resp.variable;
if (pstat->bssratelen <= 8) {
pframe = rtw_set_ie23a(pframe, WLAN_EID_SUPP_RATES,

View File

@ -0,0 +1,63 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:13 +0200
Subject: [034/249] staging: rtl8723au: _issue_deauth(): Use struct
ieee80211_mgmt to build frame
Origin: https://git.kernel.org/linus/f89547b651d842035c982f43d4303c0e7b890191
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index e5df86a..d109256 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3840,8 +3840,7 @@ static int _issue_deauth(struct rtw_adapter *padapter, unsigned char *da,
{
struct xmit_frame *pmgntframe;
struct pkt_attrib *pattrib;
- unsigned char *pframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -3860,27 +3859,21 @@ static int _issue_deauth(struct rtw_adapter *padapter, unsigned char *da,
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_DEAUTH);
+ mgmt->frame_control =
+ cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH);
- ether_addr_copy(pwlanhdr->addr1, da);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->da, da);
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pframe += sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
+ pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 2;
- reason = cpu_to_le16(reason);
- pframe = rtw_set_fixed_ie23a(pframe, WLAN_REASON_PREV_AUTH_NOT_VALID,
- (unsigned char *)&reason,
- &pattrib->pktlen);
+ mgmt->u.deauth.reason_code = cpu_to_le16(reason);
pattrib->last_txcmdsz = pattrib->pktlen;

View File

@ -0,0 +1,70 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:14 +0200
Subject: [035/249] staging: rtl8723au: issue_action_spct_ch_switch23a(): Use
struct ieee80211_mgmt
Origin: https://git.kernel.org/linus/7ed61b5b305d107ccb627d7c285a240574b86864
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 32 +++++++++++----------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index d109256..b397029 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3946,10 +3946,9 @@ void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter,
struct xmit_frame *pmgntframe;
struct pkt_attrib *pattrib;
unsigned char *pframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- u8 category, action;
DBG_8723A("%s(%s): ra ="MAC_FMT", ch:%u, offset:%u\n", __func__,
padapter->pnetdev->name, MAC_ARG(ra), new_ch, ch_offset);
@@ -3964,29 +3963,24 @@ void issue_action_spct_ch_switch23a(struct rtw_adapter *padapter,
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_ACTION);
+ mgmt->frame_control =
+ cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
- ether_addr_copy(pwlanhdr->addr1, ra); /* RA */
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv)); /* TA */
- ether_addr_copy(pwlanhdr->addr3, ra); /* DA = RA */
+ ether_addr_copy(mgmt->da, ra); /* RA */
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv)); /* TA */
+ ether_addr_copy(mgmt->bssid, ra); /* DA = RA */
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pframe += sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
-
- /* category, action */
- category = WLAN_CATEGORY_SPECTRUM_MGMT;
- action = WLAN_ACTION_SPCT_CHL_SWITCH;
+ mgmt->u.action.category = WLAN_CATEGORY_SPECTRUM_MGMT;
+ mgmt->u.action.u.chan_switch.action_code = WLAN_ACTION_SPCT_CHL_SWITCH;
- pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen);
- pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen);
+ pframe = mgmt->u.action.u.chan_switch.variable;
+ pattrib->pktlen = offsetof(struct ieee80211_mgmt,
+ u.action.u.chan_switch.variable);
pframe = rtw_set_ie23a_ch_switch (pframe, &pattrib->pktlen, 0,
new_ch, 0);

View File

@ -0,0 +1,88 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:15 +0200
Subject: [036/249] staging: rtl8723au: issue_action_BSSCoexistPacket(): Use
struct ieee80211_mgmt
Origin: https://git.kernel.org/linus/85d5120d5234f5655662b4eda697c0b1af72bca4
This gets rid of the rtw_set_fixed_ie23a() usage here. Note that this
abuses ieee80211_mgmt.u.action.u.chan_switch for now, since the
correct defines are currently missing, and this one matches.
Need to fix up the definitions in ieee80211.h and afterwards fix it up
here.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 35 ++++++++++++++-------------
1 file changed, 18 insertions(+), 17 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index b397029..eedac9a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4177,11 +4177,10 @@ out:
static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
{
struct list_head *plist, *phead, *ptmp;
- unsigned char category, action;
struct xmit_frame *pmgntframe;
struct pkt_attrib *pattrib;
u8 *pframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
struct wlan_network *pnetwork;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -4201,9 +4200,6 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
DBG_8723A("%s\n", __func__);
- category = WLAN_CATEGORY_PUBLIC;
- action = ACT_PUBLIC_BSSCOEXIST;
-
pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
if (!pmgntframe)
return;
@@ -4215,24 +4211,29 @@ static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)pframe;
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_ACTION);
+ mgmt->frame_control =
+ cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
- ether_addr_copy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network));
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pframe += sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
+ mgmt->u.action.category = WLAN_CATEGORY_PUBLIC;
+ /*
+ * This is cheating, but as there is currently no coexist_action
+ * defined in struct struct ieee80211_mgmt, abuse chan_switch
+ * for now, since it matches.
+ */
+ mgmt->u.action.u.chan_switch.action_code = ACT_PUBLIC_BSSCOEXIST;
- pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen);
- pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen);
+ pframe = mgmt->u.action.u.chan_switch.variable;
+ pattrib->pktlen = offsetof(struct ieee80211_mgmt,
+ u.action.u.chan_switch.variable);
if (pmlmepriv->num_FortyMHzIntolerant > 0) {
u8 iedata = BIT(2);/* 20 MHz BSS Width Request */

View File

@ -0,0 +1,174 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:16 +0200
Subject: [037/249] staging: rtl8723au: Do not xmit BSS Coexistence management
action frames
Origin: https://git.kernel.org/linus/372713a942c7eee27fe67a661902c6e30c014930
The driver should not be issuing BSS Coexistence management action
frames when scanning. This isn't required by the spec, and if needed,
these should come from wpa_s instead.
Recommended by Johannes Berg.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 138 --------------------------
1 file changed, 138 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index eedac9a..051ea49 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4174,140 +4174,6 @@ out:
dump_mgntframe23a(padapter, pmgntframe);
}
-static void issue_action_BSSCoexistPacket(struct rtw_adapter *padapter)
-{
- struct list_head *plist, *phead, *ptmp;
- struct xmit_frame *pmgntframe;
- struct pkt_attrib *pattrib;
- u8 *pframe;
- struct ieee80211_mgmt *mgmt;
- struct wlan_network *pnetwork;
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct rtw_queue *queue = &pmlmepriv->scanned_queue;
- u8 InfoContent[16] = {0};
- u8 ICS[8][15];
- int i;
-
- if (pmlmepriv->num_FortyMHzIntolerant == 0 ||
- pmlmepriv->num_sta_no_ht == 0)
- return;
-
- if (pmlmeinfo->bwmode_updated)
- return;
-
- DBG_8723A("%s\n", __func__);
-
- pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
- if (!pmgntframe)
- return;
-
- /* update attribute */
- pattrib = &pmgntframe->attrib;
- update_mgntframe_attrib23a(padapter, pattrib);
-
- memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
-
- pframe = (u8 *)pmgntframe->buf_addr + TXDESC_OFFSET;
- mgmt = (struct ieee80211_mgmt *)pframe;
-
- mgmt->frame_control =
- cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
-
- ether_addr_copy(mgmt->da, get_my_bssid23a(&pmlmeinfo->network));
- ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
- ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
-
- mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
- pmlmeext->mgnt_seq++;
-
- mgmt->u.action.category = WLAN_CATEGORY_PUBLIC;
- /*
- * This is cheating, but as there is currently no coexist_action
- * defined in struct struct ieee80211_mgmt, abuse chan_switch
- * for now, since it matches.
- */
- mgmt->u.action.u.chan_switch.action_code = ACT_PUBLIC_BSSCOEXIST;
-
- pframe = mgmt->u.action.u.chan_switch.variable;
- pattrib->pktlen = offsetof(struct ieee80211_mgmt,
- u.action.u.chan_switch.variable);
-
- if (pmlmepriv->num_FortyMHzIntolerant > 0) {
- u8 iedata = BIT(2);/* 20 MHz BSS Width Request */
-
- pframe = rtw_set_ie23a(pframe, WLAN_EID_BSS_COEX_2040, 1,
- &iedata, &pattrib->pktlen);
- }
-
- if (pmlmepriv->num_sta_no_ht <= 0)
- goto out;
-
- memset(ICS, 0, sizeof(ICS));
-
- spin_lock_bh(&pmlmepriv->scanned_queue.lock);
-
- phead = get_list_head(queue);
- plist = phead->next;
-
- list_for_each_safe(plist, ptmp, phead) {
- const u8 *p;
- struct wlan_bssid_ex *pbss_network;
-
- pnetwork = container_of(plist, struct wlan_network, list);
-
- pbss_network = &pnetwork->network;
-
- p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
- pbss_network->IEs + _FIXED_IE_LENGTH_,
- pbss_network->IELength -_FIXED_IE_LENGTH_);
- if (!p || !p[1]) { /* non-HT */
- if (pbss_network->DSConfig <= 0 ||
- pbss_network->DSConfig > 14)
- continue;
-
- ICS[0][pbss_network->DSConfig] = 1;
-
- if (ICS[0][0] == 0)
- ICS[0][0] = 1;
- }
-
- }
-
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
- for (i = 0; i < 8;i++) {
- if (ICS[i][0] == 1) {
- int j, k = 0;
-
- InfoContent[k] = i;
- /* SET_BSS_INTOLERANT_ELE_REG_CLASS(InfoContent, i); */
- k++;
-
- for (j = 1; j <= 14; j++) {
- if (ICS[i][j] == 1) {
- if (k < 16) {
- /* channel number */
- InfoContent[k] = j;
- k++;
- }
- }
- }
-
- pframe = rtw_set_ie23a(pframe,
- EID_BSSIntolerantChlReport, k,
- InfoContent, &pattrib->pktlen);
- }
- }
-
-out:
- pattrib->last_txcmdsz = pattrib->pktlen;
-
- dump_mgntframe23a(padapter, pmgntframe);
-}
-
int send_delba23a(struct rtw_adapter *padapter, u8 initiator, u8 *addr)
{
struct sta_priv *pstapriv = &padapter->stapriv;
@@ -4485,10 +4351,6 @@ static void rtw_site_survey(struct rtw_adapter *padapter)
pmlmeext->chan_scan_time = SURVEY_TO;
pmlmeext->sitesurvey_res.state = SCAN_DISABLE;
-
- issue_action_BSSCoexistPacket(padapter);
- issue_action_BSSCoexistPacket(padapter);
- issue_action_BSSCoexistPacket(padapter);
}
return;

View File

@ -0,0 +1,357 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:17 +0200
Subject: [038/249] staging: rtl8723au: Let cfg80211 handle public action
management frames
Origin: https://git.kernel.org/linus/2e74d336edb945b4a1f851e821001093e4094729
The driver shouldn't be dealing with public action management frames.
Let these go directly to the cfg80211 layer which can defer them to
userland if needed.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 26 ----
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 132 +++------------------
drivers/staging/rtl8723au/include/ieee80211.h | 23 +---
drivers/staging/rtl8723au/include/ioctl_cfg80211.h | 3 -
drivers/staging/rtl8723au/include/wifi.h | 1 -
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 43 +------
6 files changed, 18 insertions(+), 210 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index fa3ca9e..9f6dd77 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -894,29 +894,3 @@ u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
}
return max_rate;
}
-
-static const char *_action_public_str23a[] = {
- "ACT_PUB_BSSCOEXIST",
- "ACT_PUB_DSE_ENABLE",
- "ACT_PUB_DSE_DEENABLE",
- "ACT_PUB_DSE_REG_LOCATION",
- "ACT_PUB_EXT_CHL_SWITCH",
- "ACT_PUB_DSE_MSR_REQ",
- "ACT_PUB_DSE_MSR_RPRT",
- "ACT_PUB_MP",
- "ACT_PUB_DSE_PWR_CONSTRAINT",
- "ACT_PUB_VENDOR",
- "ACT_PUB_GAS_INITIAL_REQ",
- "ACT_PUB_GAS_INITIAL_RSP",
- "ACT_PUB_GAS_COMEBACK_REQ",
- "ACT_PUB_GAS_COMEBACK_RSP",
- "ACT_PUB_TDLS_DISCOVERY_RSP",
- "ACT_PUB_LOCATION_TRACK",
- "ACT_PUB_RSVD",
-};
-
-const char *action_public_str23a(u8 action)
-{
- action = (action >= ACT_PUBLIC_MAX) ? ACT_PUBLIC_MAX : action;
- return _action_public_str23a[action];
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 051ea49..80a822c 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -2135,136 +2135,32 @@ static int OnAction23a_back23a(struct rtw_adapter *padapter,
return _SUCCESS;
}
-static int rtw_action_public_decache(struct recv_frame *recv_frame, s32 token)
-{
- struct rtw_adapter *adapter = recv_frame->adapter;
- struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv;
- struct sk_buff *skb = recv_frame->pkt;
- struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
- u16 seq_ctrl;
-
- seq_ctrl = ((recv_frame->attrib.seq_num&0xffff) << 4) |
- (recv_frame->attrib.frag_num & 0xf);
-
- if (ieee80211_has_retry(hdr->frame_control)) {
- if (token >= 0) {
- if ((seq_ctrl == mlmeext->action_public_rxseq) &&
- (token == mlmeext->action_public_dialog_token)) {
- DBG_8723A("%s(%s): seq_ctrl = 0x%x, "
- "rxseq = 0x%x, token:%d\n", __func__,
- adapter->pnetdev->name, seq_ctrl,
- mlmeext->action_public_rxseq, token);
- return _FAIL;
- }
- } else {
- if (seq_ctrl == mlmeext->action_public_rxseq) {
- DBG_8723A("%s(%s): seq_ctrl = 0x%x, "
- "rxseq = 0x%x\n", __func__,
- adapter->pnetdev->name, seq_ctrl,
- mlmeext->action_public_rxseq);
- return _FAIL;
- }
- }
- }
-
- mlmeext->action_public_rxseq = seq_ctrl;
-
- if (token >= 0)
- mlmeext->action_public_dialog_token = token;
-
- return _SUCCESS;
-}
-
-static int on_action_public23a_p2p(struct recv_frame *precv_frame)
-{
- struct sk_buff *skb = precv_frame->pkt;
- u8 *pframe = skb->data;
- u8 *frame_body;
- u8 dialogToken = 0;
-
- frame_body = (unsigned char *)
- (pframe + sizeof(struct ieee80211_hdr_3addr));
-
- dialogToken = frame_body[7];
-
- if (rtw_action_public_decache(precv_frame, dialogToken) == _FAIL)
- return _FAIL;
-
- return _SUCCESS;
-}
-
-static int on_action_public23a_vendor(struct recv_frame *precv_frame)
-{
- unsigned int ret = _FAIL;
- struct sk_buff *skb = precv_frame->pkt;
- u8 *pframe = skb->data;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
-
- if (!memcmp(frame_body + 2, P2P_OUI23A, 4)) {
- ret = on_action_public23a_p2p(precv_frame);
- }
-
- return ret;
-}
-
-static unsigned int
-on_action_public23a_default(struct recv_frame *precv_frame, u8 action)
-{
- unsigned int ret = _FAIL;
- struct sk_buff *skb = precv_frame->pkt;
- u8 *pframe = skb->data;
- uint frame_len = skb->len;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- u8 token;
- struct rtw_adapter *adapter = precv_frame->adapter;
- int cnt = 0;
- char msg[64];
-
- token = frame_body[2];
-
- if (rtw_action_public_decache(precv_frame, token) == _FAIL)
- goto exit;
-
- cnt += sprintf((msg+cnt), "%s(token:%u)",
- action_public_str23a(action), token);
- rtw_cfg80211_rx_action(adapter, pframe, frame_len, msg);
-
- ret = _SUCCESS;
-
-exit:
- return ret;
-}
-
static int on_action_public23a(struct rtw_adapter *padapter,
struct recv_frame *precv_frame)
{
- int ret = _FAIL;
struct sk_buff *skb = precv_frame->pkt;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
u8 *pframe = skb->data;
- u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
- u8 category, action;
+ int freq, channel;
/* check RA matches or not */
if (!ether_addr_equal(myid(&padapter->eeprompriv), hdr->addr1))
- goto exit;
+ return _FAIL;
- category = frame_body[0];
- if (category != WLAN_CATEGORY_PUBLIC)
- goto exit;
+ channel = rtw_get_oper_ch23a(padapter);
- action = frame_body[1];
- switch (action) {
- case ACT_PUBLIC_VENDOR:
- ret = on_action_public23a_vendor(precv_frame);
- break;
- default:
- ret = on_action_public23a_default(precv_frame, action);
- break;
- }
+ if (channel <= RTW_CH_MAX_2G_CHANNEL)
+ freq = ieee80211_channel_to_frequency(channel,
+ IEEE80211_BAND_2GHZ);
+ else
+ freq = ieee80211_channel_to_frequency(channel,
+ IEEE80211_BAND_5GHZ);
-exit:
- return ret;
+ if (cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pframe,
+ skb->len, 0, GFP_ATOMIC))
+ return _SUCCESS;
+
+ return _FAIL;
}
static int
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 0ef6e79..f6e982e 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -315,6 +315,7 @@ struct ieee80211_snap_hdr {
#define MAX_RATES_LENGTH 12
#define MAX_RATES_EX_LENGTH 16
#define MAX_CHANNEL_NUMBER 161
+#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */
#define MAX_WPA_IE_LEN 256
#define MAX_WPS_IE_LEN 256
@@ -335,26 +336,6 @@ join_res:
#define MAXTID 16
-enum _PUBLIC_ACTION{
- ACT_PUBLIC_BSSCOEXIST = 0, /* 20/40 BSS Coexistence */
- ACT_PUBLIC_DSE_ENABLE = 1,
- ACT_PUBLIC_DSE_DEENABLE = 2,
- ACT_PUBLIC_DSE_REG_LOCATION = 3,
- ACT_PUBLIC_EXT_CHL_SWITCH = 4,
- ACT_PUBLIC_DSE_MSR_REQ = 5,
- ACT_PUBLIC_DSE_MSR_RPRT = 6,
- ACT_PUBLIC_MP = 7, /* Measurement Pilot */
- ACT_PUBLIC_DSE_PWR_CONSTRAINT = 8,
- ACT_PUBLIC_VENDOR = 9, /* for WIFI_DIRECT */
- ACT_PUBLIC_GAS_INITIAL_REQ = 10,
- ACT_PUBLIC_GAS_INITIAL_RSP = 11,
- ACT_PUBLIC_GAS_COMEBACK_REQ = 12,
- ACT_PUBLIC_GAS_COMEBACK_RSP = 13,
- ACT_PUBLIC_TDLS_DISCOVERY_RSP = 14,
- ACT_PUBLIC_LOCATION_TRACK = 15,
- ACT_PUBLIC_MAX
-};
-
#define WME_OUI_TYPE 2
#define WME_OUI_SUBTYPE_INFORMATION_ELEMENT 0
#define WME_OUI_SUBTYPE_PARAMETER_ELEMENT 1
@@ -446,6 +427,4 @@ void rtw_get_bcn_info23a(struct wlan_network *pnetwork);
u16 rtw_mcs_rate23a(u8 rf_type, u8 bw_40MHz, u8 short_GI_20, u8 short_GI_40,
struct ieee80211_mcs_info *mcs);
-const char *action_public_str23a(u8 action);
-
#endif /* IEEE80211_H */
diff --git a/drivers/staging/rtl8723au/include/ioctl_cfg80211.h b/drivers/staging/rtl8723au/include/ioctl_cfg80211.h
index 63e921f..3a4ead5 100644
--- a/drivers/staging/rtl8723au/include/ioctl_cfg80211.h
+++ b/drivers/staging/rtl8723au/include/ioctl_cfg80211.h
@@ -61,9 +61,6 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
unsigned char *da, unsigned short reason);
#endif /* CONFIG_8723AU_AP_MODE */
-void rtw_cfg80211_rx_action(struct rtw_adapter *adapter, u8 *frame,
- uint frame_len, const char*msg);
-
bool rtw_cfg80211_pwr_mgmt(struct rtw_adapter *adapter);
#endif /* __IOCTL_CFG80211_H__ */
diff --git a/drivers/staging/rtl8723au/include/wifi.h b/drivers/staging/rtl8723au/include/wifi.h
index 07ea4c6..3f64546 100644
--- a/drivers/staging/rtl8723au/include/wifi.h
+++ b/drivers/staging/rtl8723au/include/wifi.h
@@ -32,7 +32,6 @@
#define _AUTH_IE_OFFSET_ 6
#define _DEAUTH_IE_OFFSET_ 0
#define _BEACON_IE_OFFSET_ 12
-#define _PUBLIC_ACTION_IE_OFFSET_ 8
#define _FIXED_IE_LENGTH_ _BEACON_IE_OFFSET_
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index d2fa9b20..0d581c8 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -26,8 +26,6 @@
#define RTW_MAX_REMAIN_ON_CHANNEL_DURATION 65535 /* ms */
#define RTW_MAX_NUM_PMKIDS 4
-#define RTW_CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */
-
static const u32 rtw_cipher_suites[] = {
WLAN_CIPHER_SUITE_WEP40,
WLAN_CIPHER_SUITE_WEP104,
@@ -2593,11 +2591,8 @@ static int rtw_cfg80211_monitor_if_xmit_entry(struct sk_buff *skb,
MAC_ARG(mgmt->da), __func__, ndev->name);
category = mgmt->u.action.category;
action = mgmt->u.action.u.wme_action.action_code;
- if (mgmt->u.action.category == WLAN_CATEGORY_PUBLIC)
- DBG_8723A("RTW_Tx:%s\n", action_public_str23a(action));
- else
- DBG_8723A("RTW_Tx:category(%u), action(%u)\n", category,
- action);
+ DBG_8723A("RTW_Tx:category(%u), action(%u)\n",
+ category, action);
/* starting alloc mgmt frame to dump it */
pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
@@ -3011,34 +3006,6 @@ static int cfg80211_rtw_change_bss(struct wiphy *wiphy, struct net_device *ndev,
}
#endif /* CONFIG_8723AU_AP_MODE */
-void rtw_cfg80211_rx_action(struct rtw_adapter *adapter, u8 *frame,
- uint frame_len, const char *msg)
-{
- struct ieee80211_mgmt *hdr = (struct ieee80211_mgmt *)frame;
- s32 freq;
- int channel;
-
- channel = rtw_get_oper_ch23a(adapter);
-
- DBG_8723A("RTW_Rx:cur_ch =%d\n", channel);
- if (msg)
- DBG_8723A("RTW_Rx:%s\n", msg);
- else
- DBG_8723A("RTW_Rx:category(%u), action(%u)\n",
- hdr->u.action.category,
- hdr->u.action.u.wme_action.action_code);
-
- if (channel <= RTW_CH_MAX_2G_CHANNEL)
- freq = ieee80211_channel_to_frequency(channel,
- IEEE80211_BAND_2GHZ);
- else
- freq = ieee80211_channel_to_frequency(channel,
- IEEE80211_BAND_5GHZ);
-
- cfg80211_rx_mgmt(adapter->rtw_wdev, freq, 0, frame, frame_len,
- 0, GFP_ATOMIC);
-}
-
static int _cfg80211_rtw_mgmt_tx(struct rtw_adapter *padapter, u8 tx_ch,
const u8 *buf, size_t len)
{
@@ -3145,11 +3112,7 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
MAC_ARG(hdr->da));
category = hdr->u.action.category;
action = hdr->u.action.u.wme_action.action_code;
- if (category == WLAN_CATEGORY_PUBLIC)
- DBG_8723A("RTW_Tx:%s\n", action_public_str23a(action));
- else
- DBG_8723A("RTW_Tx:category(%u), action(%u)\n",
- category, action);
+ DBG_8723A("RTW_Tx:category(%u), action(%u)\n", category, action);
do {
dump_cnt++;

View File

@ -0,0 +1,74 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:18 +0200
Subject: [039/249] staging: rtl8723au: ioctl_cfg80211.c: Use struct
ieee80211_mgmt to build mgmt frame
Origin: https://git.kernel.org/linus/cc531f6154167893f1cf8ab084871fe06b38fb2b
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 30 ++++++++---------------
1 file changed, 10 insertions(+), 20 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 0d581c8..2fdc2b5 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2437,17 +2437,15 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
{
s32 freq;
int channel;
- u8 *pmgmt_frame;
uint frame_len;
- struct ieee80211_hdr *pwlanhdr;
- u8 mgmt_buf[128];
+ struct ieee80211_mgmt mgmt;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct net_device *ndev = padapter->pnetdev;
DBG_8723A("%s(padapter =%p,%s)\n", __func__, padapter, ndev->name);
- memset(mgmt_buf, 0, 128);
+ memset(&mgmt, 0, sizeof(struct ieee80211_mgmt));
#if defined(RTW_USE_CFG80211_STA_EVENT)
cfg80211_del_sta(ndev, da, GFP_ATOMIC);
@@ -2460,29 +2458,21 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
freq = ieee80211_channel_to_frequency(channel,
IEEE80211_BAND_5GHZ);
- pmgmt_frame = mgmt_buf;
- pwlanhdr = (struct ieee80211_hdr *)pmgmt_frame;
-
- pwlanhdr->frame_control =
+ mgmt.frame_control =
cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_DEAUTH);
- ether_addr_copy(pwlanhdr->addr1, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr2, da);
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt.da, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt.sa, da);
+ ether_addr_copy(mgmt.bssid, get_my_bssid23a(&pmlmeinfo->network));
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt.seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pmgmt_frame += sizeof(struct ieee80211_hdr_3addr);
- frame_len = sizeof(struct ieee80211_hdr_3addr);
+ mgmt.u.disassoc.reason_code = cpu_to_le16(reason);
- reason = cpu_to_le16(reason);
- pmgmt_frame = rtw_set_fixed_ie23a(pmgmt_frame,
- WLAN_REASON_PREV_AUTH_NOT_VALID,
- (unsigned char *)&reason, &frame_len);
+ frame_len = sizeof(struct ieee80211_hdr_3addr) + 2;
- cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, mgmt_buf, frame_len,
+ cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, (u8 *)&mgmt, frame_len,
0, GFP_ATOMIC);
#endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
}

View File

@ -0,0 +1,247 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:19 +0200
Subject: [040/249] staging: rtl8723au: issue_action_BA23a(): Use struct
ieee80211_mgmt to build action frames
Origin: https://git.kernel.org/linus/a491548d6641f2dc4a83bb6ab337cccfdd53afe4
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 149 +++++++++++++-------------
1 file changed, 74 insertions(+), 75 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 80a822c..ff0800e 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -3892,17 +3892,15 @@ void issue_action_BA23a(struct rtw_adapter *padapter,
const unsigned char *raddr,
unsigned char action, unsigned short status)
{
- u8 category = WLAN_CATEGORY_BACK;
u16 start_seq;
u16 BA_para_set;
- u16 reason_code;
u16 BA_timeout_value;
u16 BA_starting_seqctrl;
+ u16 BA_para;
int max_rx_ampdu_factor;
struct xmit_frame *pmgntframe;
struct pkt_attrib *pattrib;
- u8 *pframe;
- struct ieee80211_hdr *pwlanhdr;
+ struct ieee80211_mgmt *mgmt;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
@@ -3911,8 +3909,7 @@ void issue_action_BA23a(struct rtw_adapter *padapter,
struct registry_priv *pregpriv = &padapter->registrypriv;
u8 tendaAPMac[] = {0xC8, 0x3A, 0x35};
- DBG_8723A("%s, category =%d, action =%d, status =%d\n",
- __func__, category, action, status);
+ DBG_8723A("%s, action =%d, status =%d\n", __func__, action, status);
pmgntframe = alloc_mgtxmitframe23a(pxmitpriv);
if (!pmgntframe)
@@ -3924,40 +3921,36 @@ void issue_action_BA23a(struct rtw_adapter *padapter,
memset(pmgntframe->buf_addr, 0, WLANHDR_OFFSET + TXDESC_OFFSET);
- pframe = (u8 *)(pmgntframe->buf_addr) + TXDESC_OFFSET;
- pwlanhdr = (struct ieee80211_hdr *)pframe;
+ mgmt = (struct ieee80211_mgmt *)(pmgntframe->buf_addr + TXDESC_OFFSET);
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_ACTION);
+ mgmt->frame_control =
+ cpu_to_le16(IEEE80211_FTYPE_MGMT | IEEE80211_STYPE_ACTION);
- /* memcpy(pwlanhdr->addr1, get_my_bssid23a(&pmlmeinfo->network), ETH_ALEN); */
- ether_addr_copy(pwlanhdr->addr1, raddr);
- ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
- ether_addr_copy(pwlanhdr->addr3, get_my_bssid23a(&pmlmeinfo->network));
+ ether_addr_copy(mgmt->da, raddr);
+ ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
+ ether_addr_copy(mgmt->bssid, get_my_bssid23a(&pmlmeinfo->network));
- pwlanhdr->seq_ctrl =
- cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
+ mgmt->seq_ctrl = cpu_to_le16(IEEE80211_SN_TO_SEQ(pmlmeext->mgnt_seq));
pmlmeext->mgnt_seq++;
- pframe += sizeof(struct ieee80211_hdr_3addr);
- pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr);
+ mgmt->u.action.category = WLAN_CATEGORY_BACK;
- pframe = rtw_set_fixed_ie23a(pframe, 1, &category, &pattrib->pktlen);
- pframe = rtw_set_fixed_ie23a(pframe, 1, &action, &pattrib->pktlen);
+ pattrib->pktlen = sizeof(struct ieee80211_hdr_3addr) + 1;
status = cpu_to_le16(status);
- if (category != 3)
- goto out;
+ switch (action) {
+ case WLAN_ACTION_ADDBA_REQ:
+ pattrib->pktlen += sizeof(mgmt->u.action.u.addba_req);
+
+ mgmt->u.action.u.addba_req.action_code = action;
- switch (action)
- {
- case 0: /* ADDBA req */
do {
pmlmeinfo->dialogToken++;
} while (pmlmeinfo->dialogToken == 0);
- pframe = rtw_set_fixed_ie23a(pframe, 1, &pmlmeinfo->dialogToken,
- &pattrib->pktlen);
+
+ mgmt->u.action.u.addba_req.dialog_token =
+ pmlmeinfo->dialogToken;
if (rtl8723a_BT_coexist(padapter) &&
rtl8723a_BT_using_antenna_1(padapter) &&
@@ -3978,51 +3971,60 @@ void issue_action_BA23a(struct rtw_adapter *padapter,
/* immediate ack & 64 buffer size */
BA_para_set = (0x1002 | ((status & 0xf) << 2));
}
- BA_para_set = cpu_to_le16(BA_para_set);
- pframe = rtw_set_fixed_ie23a(pframe, 2,
- (unsigned char *)&BA_para_set,
- &pattrib->pktlen);
+
+ put_unaligned_le16(BA_para_set,
+ &mgmt->u.action.u.addba_req.capab);
BA_timeout_value = 5000;/* 5ms */
BA_timeout_value = cpu_to_le16(BA_timeout_value);
- pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *)
- &BA_timeout_value,
- &pattrib->pktlen);
+ put_unaligned_le16(BA_timeout_value,
+ &mgmt->u.action.u.addba_req.timeout);
+
+ psta = rtw_get_stainfo23a(pstapriv, raddr);
+ if (psta) {
+ int idx;
- /* if ((psta = rtw_get_stainfo23a(pstapriv,
- pmlmeinfo->network.MacAddress)) != NULL) */
- if ((psta = rtw_get_stainfo23a(pstapriv, raddr))) {
- start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
+ idx = status & 0x07;
+ start_seq =
+ (psta->sta_xmitpriv.txseq_tid[idx] & 0xfff) + 1;
DBG_8723A("BA_starting_seqctrl = %d for TID =%d\n",
- start_seq, status & 0x07);
+ start_seq, idx);
- psta->BA_starting_seqctrl[status & 0x07] = start_seq;
+ psta->BA_starting_seqctrl[idx] = start_seq;
BA_starting_seqctrl = start_seq << 4;
- }
+ } else
+ BA_starting_seqctrl = 0;
+
+ put_unaligned_le16(BA_starting_seqctrl,
+ &mgmt->u.action.u.addba_req.start_seq_num);
- BA_starting_seqctrl = cpu_to_le16(BA_starting_seqctrl);
- pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *)&BA_starting_seqctrl, &pattrib->pktlen);
break;
- case 1: /* ADDBA rsp */
- pframe = rtw_set_fixed_ie23a(pframe, 1, &pmlmeinfo->ADDBA_req.dialog_token, &pattrib->pktlen);
- pframe = rtw_set_fixed_ie23a(pframe, 2,
- (unsigned char *)&status,
- &pattrib->pktlen);
+ case WLAN_ACTION_ADDBA_RESP:
+ pattrib->pktlen += sizeof(mgmt->u.action.u.addba_resp);
+
+ mgmt->u.action.u.addba_resp.action_code = action;
+ mgmt->u.action.u.addba_resp.dialog_token =
+ pmlmeinfo->ADDBA_req.dialog_token;
+ put_unaligned_le16(status,
+ &mgmt->u.action.u.addba_resp.status);
+
GetHalDefVar8192CUsb(padapter, HW_VAR_MAX_RX_AMPDU_FACTOR,
&max_rx_ampdu_factor);
+
+ BA_para = le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f;
if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_64K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */
+ BA_para_set = BA_para | 0x1000; /* 64 buffer size */
else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_32K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0800); /* 32 buffer size */
+ BA_para_set = BA_para | 0x0800; /* 32 buffer size */
else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_16K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0400); /* 16 buffer size */
+ BA_para_set = BA_para | 0x0400; /* 16 buffer size */
else if (max_rx_ampdu_factor == IEEE80211_HT_MAX_AMPDU_8K)
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x0200); /* 8 buffer size */
+ BA_para_set = BA_para | 0x0200; /* 8 buffer size */
else
- BA_para_set = ((le16_to_cpu(pmlmeinfo->ADDBA_req.BA_para_set) & 0x3f) | 0x1000); /* 64 buffer size */
+ BA_para_set = BA_para | 0x1000; /* 64 buffer size */
if (rtl8723a_BT_coexist(padapter) &&
rtl8723a_BT_using_antenna_1(padapter) &&
@@ -4035,36 +4037,33 @@ void issue_action_BA23a(struct rtw_adapter *padapter,
}
if (pregpriv->ampdu_amsdu == 0)/* disabled */
- BA_para_set = cpu_to_le16(BA_para_set & ~BIT(0));
+ BA_para_set &= ~BIT(0);
else if (pregpriv->ampdu_amsdu == 1)/* enabled */
- BA_para_set = cpu_to_le16(BA_para_set | BIT(0));
- else /* auto */
- BA_para_set = cpu_to_le16(BA_para_set);
-
- pframe = rtw_set_fixed_ie23a(pframe, 2,
- (unsigned char *)&BA_para_set,
- &pattrib->pktlen);
- pframe = rtw_set_fixed_ie23a(pframe, 2, (unsigned char *)&pmlmeinfo->ADDBA_req.BA_timeout_value, &pattrib->pktlen);
+ BA_para_set |= BIT(0);
+
+ put_unaligned_le16(BA_para_set,
+ &mgmt->u.action.u.addba_resp.capab);
+
+ put_unaligned_le16(pmlmeinfo->ADDBA_req.BA_timeout_value,
+ &mgmt->u.action.u.addba_resp.timeout);
+
+ pattrib->pktlen += 8;
break;
- case 2:/* DELBA */
+ case WLAN_ACTION_DELBA:
+ pattrib->pktlen += sizeof(mgmt->u.action.u.delba);
+
+ mgmt->u.action.u.delba.action_code = action;
BA_para_set = (status & 0x1F) << 3;
- BA_para_set = cpu_to_le16(BA_para_set);
- pframe = rtw_set_fixed_ie23a(pframe, 2,
- (unsigned char *)&BA_para_set,
- &pattrib->pktlen);
-
- reason_code = 37;/* Requested from peer STA as it does not
- want to use the mechanism */
- reason_code = cpu_to_le16(reason_code);
- pframe = rtw_set_fixed_ie23a(pframe, 2,
- (unsigned char *)&reason_code,
- &pattrib->pktlen);
+ mgmt->u.action.u.delba.params = cpu_to_le16(BA_para_set);
+ mgmt->u.action.u.delba.reason_code =
+ cpu_to_le16(WLAN_REASON_QSTA_NOT_USE);
+
+ pattrib->pktlen += 5;
break;
default:
break;
}
-out:
pattrib->last_txcmdsz = pattrib->pktlen;
dump_mgntframe23a(padapter, pmgntframe);

View File

@ -0,0 +1,43 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:20 +0200
Subject: [041/249] staging: rtl8723au: Remove obsolete rtw_set_fixed_ie23a()
Origin: https://git.kernel.org/linus/2a907fe46b861f16135c58580ce222c7abb02c2d
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 8 --------
drivers/staging/rtl8723au/include/ieee80211.h | 1 -
2 files changed, 9 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 9f6dd77..922b45e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -124,14 +124,6 @@ int rtw_check_network_type23a(unsigned char *rate, int ratelen, int channel)
}
}
-u8 *rtw_set_fixed_ie23a(unsigned char *pbuf, unsigned int len,
- unsigned char *source, unsigned int *frlen)
-{
- memcpy((void *)pbuf, (void *)source, len);
- *frlen = *frlen + len;
- return pbuf + len;
-}
-
/* rtw_set_ie23a will update frame length */
u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen)
{
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index f6e982e..9e03d41 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -388,7 +388,6 @@ struct rtw_ieee80211_channel {
/*, (channel)->orig_mag*/ \
/*, (channel)->orig_mpwr*/ \
-u8 *rtw_set_fixed_ie23a(unsigned char *pbuf, unsigned int len, unsigned char *source, unsigned int *frlen);
u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen);
enum secondary_ch_offset {

View File

@ -0,0 +1,52 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:21 +0200
Subject: [042/249] staging: rtl8723au: Remove duplicate defines of
IEEE80211_HT_PARAM_CHA_SEC_*
Origin: https://git.kernel.org/linus/bf51cb6780a17b2ab64b6e6c0eacfc1b882a5d54
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 10 ++++------
drivers/staging/rtl8723au/include/ieee80211.h | 5 -----
2 files changed, 4 insertions(+), 11 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 922b45e..9d0662c 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -153,14 +153,12 @@ inline u8 *rtw_set_ie23a_ch_switch (u8 *buf, u32 *buf_len, u8 ch_switch_mode,
inline u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset)
{
- if (ch_offset == HAL_PRIME_CHNL_OFFSET_DONT_CARE)
- return SCN;
- else if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
- return SCB;
+ if (ch_offset == HAL_PRIME_CHNL_OFFSET_LOWER)
+ return IEEE80211_HT_PARAM_CHA_SEC_BELOW;
else if (ch_offset == HAL_PRIME_CHNL_OFFSET_UPPER)
- return SCA;
+ return IEEE80211_HT_PARAM_CHA_SEC_ABOVE;
- return SCN;
+ return IEEE80211_HT_PARAM_CHA_SEC_NONE;
}
inline u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len,
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 9e03d41..cb3f4fa 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -390,11 +390,6 @@ struct rtw_ieee80211_channel {
u8 *rtw_set_ie23a(u8 *pbuf, int index, uint len, const u8 *source, uint *frlen);
-enum secondary_ch_offset {
- SCN = 0, /* no secondary channel */
- SCA = 1, /* secondary channel above */
- SCB = 3, /* secondary channel below */
-};
u8 hal_ch_offset_to_secondary_ch_offset23a(u8 ch_offset);
u8 *rtw_set_ie23a_ch_switch(u8 *buf, u32 *buf_len, u8 ch_switch_mode, u8 new_ch, u8 ch_switch_cnt);
u8 *rtw_set_ie23a_secondary_ch_offset(u8 *buf, u32 *buf_len, u8 secondary_ch_offset);

View File

@ -0,0 +1,33 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:22 +0200
Subject: [043/249] staging: rtl8723au: Remove unused #defines WEP_KEY_LEN and
MGMT_QUEUE_NUM
Origin: https://git.kernel.org/linus/e0ea5c8e665f14b1d018bc3f6e8f2f2f1d8a4b1d
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/include/ieee80211.h | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index cb3f4fa..7d22825 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -27,8 +27,6 @@
#endif
-#define MGMT_QUEUE_NUM 5
-
#ifdef CONFIG_8723AU_AP_MODE
/* STA flags */
@@ -305,7 +303,6 @@ struct ieee80211_snap_hdr {
#define IEEE80211_OFDM_SHIFT_MASK_A 4
#define WEP_KEYS 4
-#define WEP_KEY_LEN 13
/* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs

View File

@ -0,0 +1,37 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:23 +0200
Subject: [044/249] staging: rtl8723au: Remove some unused 80211 header parsing
macros
Origin: https://git.kernel.org/linus/51dacaa7baa95b00f7369a687295f59d4e963d64
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/include/ieee80211.h | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index 7d22825..c2c57c7 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -219,20 +219,10 @@ struct ieee80211_snap_hdr {
#define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
-#define WLAN_FC_GET_TYPE(fc) (fc & IEEE80211_FCTL_FTYPE)
-#define WLAN_FC_GET_STYPE(fc) (fc & IEEE80211_FCTL_STYPE)
-
-#define WLAN_QC_GET_TID(qc) (qc & 0x0f)
-
-#define WLAN_GET_SEQ_FRAG(seq) (seq & RTW_IEEE80211_SCTL_FRAG)
-#define WLAN_GET_SEQ_SEQ(seq) (seq & RTW_IEEE80211_SCTL_SEQ)
-
-
#define WLAN_REASON_JOIN_WRONG_CHANNEL 65534
#define WLAN_REASON_EXPIRATION_CHK 65535
-
#define IEEE80211_STATMASK_SIGNAL (1<<0)
#define IEEE80211_STATMASK_RSSI (1<<1)
#define IEEE80211_STATMASK_NOISE (1<<2)

View File

@ -0,0 +1,30 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:24 +0200
Subject: [045/249] staging: rtl8723au: rtw_check_bcn_info23a(): Use
ether_addr_equal() to check BSSID
Origin: https://git.kernel.org/linus/0c45e6170d65332e9f314dbc36468884a650b412
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 3195b44..a2c249f 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -910,10 +910,9 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
return _FAIL;
}
- if (memcmp(cur_network->network.MacAddress, mgmt->bssid, 6)) {
- DBG_8723A("Oops: rtw_check_network_encrypt linked but recv "
- "other bssid bcn\n" MAC_FMT MAC_FMT,
- MAC_ARG(mgmt->bssid),
+ if (!ether_addr_equal(cur_network->network.MacAddress, mgmt->bssid)) {
+ DBG_8723A("%s: linked but recv other bssid bcn"
+ MAC_FMT MAC_FMT "\n", __func__, MAC_ARG(mgmt->bssid),
MAC_ARG(cur_network->network.MacAddress));
return true;
}

View File

@ -0,0 +1,218 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:25 +0200
Subject: [046/249] staging: rtl8723au: rtw_check_bcn_info23a(): Don't make a
local copy of beacon just to parse it
Origin: https://git.kernel.org/linus/17b19396a675659e04eac6dbdbe57b2a9e462950
In addition be consistent with return values and parsing them.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +-
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 88 +++++++++-----------------
2 files changed, 32 insertions(+), 58 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index ff0800e..693a1a4 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -857,7 +857,7 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
psta = rtw_get_stainfo23a(pstapriv, mgmt->sa);
if (psta) {
ret = rtw_check_bcn_info23a(padapter, mgmt, pkt_len);
- if (!ret) {
+ if (ret != _SUCCESS) {
DBG_8723A_LEVEL(_drv_always_, "ap has changed, "
"disconnect now\n");
receive_disconnect23a(padapter, pmlmeinfo->network.MacAddress, 65535);
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index a2c249f..17b04c2 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -885,28 +885,19 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
{
struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
struct ieee80211_ht_operation *pht_info;
- struct wlan_bssid_ex *bssid;
unsigned short val16;
u8 encryp_protocol;
int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r;
u32 bcn_channel;
- int len, pie_len, ie_offset;
- const u8 *p;
- u8 *pie;
+ int pie_len, ie_offset, ssid_len, privacy;
+ const u8 *p, *ssid;
if (is_client_associated_to_ap23a(Adapter) == false)
- return true;
+ return _SUCCESS;
if (unlikely(!ieee80211_is_beacon(mgmt->frame_control))) {
printk(KERN_WARNING "%s: received a non beacon frame!\n",
__func__);
- return false;
- }
-
- len = pkt_len - sizeof(struct ieee80211_hdr_3addr);
-
- if (len > MAX_IE_SZ) {
- DBG_8723A("%s IE too long for survey event\n", __func__);
return _FAIL;
}
@@ -914,36 +905,25 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
DBG_8723A("%s: linked but recv other bssid bcn"
MAC_FMT MAC_FMT "\n", __func__, MAC_ARG(mgmt->bssid),
MAC_ARG(cur_network->network.MacAddress));
- return true;
- }
-
- bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
- if (!bssid)
return _FAIL;
-
- bssid->reserved = 1;
-
- bssid->Length = offsetof(struct wlan_bssid_ex, IEs) + len;
-
- /* below is to copy the information element */
- bssid->IELength = len;
- memcpy(bssid->IEs, &mgmt->u, len);
+ }
/* check bw and channel offset */
/* parsing HT_CAP_IE */
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable) -
offsetof(struct ieee80211_mgmt, u);
- pie = bssid->IEs + ie_offset;
- pie_len = pkt_len - ie_offset;
+ pie_len = pkt_len - offsetof(struct ieee80211_mgmt, u.beacon.variable);
/* Checking for channel */
- p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, pie, pie_len);
+ p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, mgmt->u.beacon.variable,
+ pie_len);
if (p)
bcn_channel = p[2];
else {
/* In 5G, some ap do not have DSSET IE checking HT
info for channel */
- p = cfg80211_find_ie(WLAN_EID_HT_OPERATION, pie, pie_len);
+ p = cfg80211_find_ie(WLAN_EID_HT_OPERATION,
+ mgmt->u.beacon.variable, pie_len);
if (p && p[1] > 0) {
pht_info = (struct ieee80211_ht_operation *)(p + 2);
@@ -962,60 +942,55 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
}
/* checking SSID */
- p = cfg80211_find_ie(WLAN_EID_SSID, pie, pie_len);
+ p = cfg80211_find_ie(WLAN_EID_SSID, mgmt->u.beacon.variable, pie_len);
if (p && p[1]) {
- memcpy(bssid->Ssid.ssid, p + 2, p[1]);
- bssid->Ssid.ssid_len = p[1];
+ ssid = p + 2;
+ ssid_len = p[1];
} else {
DBG_8723A("%s marc: cannot find SSID for survey event\n",
__func__);
- bssid->Ssid.ssid_len = 0;
- bssid->Ssid.ssid[0] = '\0';
+ ssid = NULL;
+ ssid_len = 0;
}
RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
("%s bssid.Ssid.Ssid:%s bssid.Ssid.SsidLength:%d "
"cur_network->network.Ssid.Ssid:%s len:%d\n", __func__,
- bssid->Ssid.ssid, bssid->Ssid.ssid_len,
- cur_network->network.Ssid.ssid,
+ ssid, ssid_len, cur_network->network.Ssid.ssid,
cur_network->network.Ssid.ssid_len));
- if (memcmp(bssid->Ssid.ssid, cur_network->network.Ssid.ssid, 32) ||
- bssid->Ssid.ssid_len != cur_network->network.Ssid.ssid_len) {
- if (bssid->Ssid.ssid[0] != '\0' &&
- bssid->Ssid.ssid_len != 0) { /* not hidden ssid */
- DBG_8723A("%s(), SSID is not match return FAIL\n",
- __func__);
- goto _mismatch;
- }
+ if (ssid_len != cur_network->network.Ssid.ssid_len || ssid_len > 32 ||
+ (ssid_len &&
+ memcmp(ssid, cur_network->network.Ssid.ssid, ssid_len))) {
+ DBG_8723A("%s(), SSID is not match return FAIL\n", __func__);
+ goto _mismatch;
}
/* check encryption info */
- val16 = rtw_get_capability23a(bssid);
+ val16 = le16_to_cpu(mgmt->u.beacon.capab_info);
if (val16 & WLAN_CAPABILITY_PRIVACY)
- bssid->Privacy = 1;
+ privacy = 1;
else
- bssid->Privacy = 0;
+ privacy = 0;
RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
("%s(): cur_network->network.Privacy is %d, bssid.Privacy "
- "is %d\n", __func__, cur_network->network.Privacy,
- bssid->Privacy));
- if (cur_network->network.Privacy != bssid->Privacy) {
+ "is %d\n", __func__, cur_network->network.Privacy, privacy));
+ if (cur_network->network.Privacy != privacy) {
DBG_8723A("%s(), privacy is not match return FAIL\n", __func__);
goto _mismatch;
}
- p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
+ p = cfg80211_find_ie(WLAN_EID_RSN, mgmt->u.beacon.variable, pie_len);
if (p && p[1]) {
encryp_protocol = ENCRYP_PROTOCOL_WPA2;
} else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
WLAN_OUI_TYPE_MICROSOFT_WPA,
- pie, pie_len)) {
+ mgmt->u.beacon.variable, pie_len)) {
encryp_protocol = ENCRYP_PROTOCOL_WPA;
} else {
- if (bssid->Privacy)
+ if (privacy)
encryp_protocol = ENCRYP_PROTOCOL_WEP;
else
encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
@@ -1030,7 +1005,7 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
encryp_protocol == ENCRYP_PROTOCOL_WPA2) {
p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
WLAN_OUI_TYPE_MICROSOFT_WPA,
- pie, pie_len);
+ mgmt->u.beacon.variable, pie_len);
if (p && p[1] > 0) {
r = rtw_parse_wpa_ie23a(p, p[1] + 2, &group_cipher,
&pairwise_cipher, &is_8021x);
@@ -1041,7 +1016,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
"%d\n", __func__, pairwise_cipher,
group_cipher, is_8021x));
} else {
- p = cfg80211_find_ie(WLAN_EID_RSN, pie, pie_len);
+ p = cfg80211_find_ie(WLAN_EID_RSN,
+ mgmt->u.beacon.variable, pie_len);
if (p && p[1] > 0) {
r = rtw_parse_wpa2_ie23a(p, p[1] + 2,
@@ -1080,11 +1056,9 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
}
}
- kfree(bssid);
return _SUCCESS;
_mismatch:
- kfree(bssid);
return _FAIL;
}

View File

@ -0,0 +1,107 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:26 +0200
Subject: [047/249] staging: rtl8723au: rtw_check_bcn_info23a(): Don't search
for WPA/WPA2 info twice
Origin: https://git.kernel.org/linus/bbf5fdbd56f8a97ccfe25621057771742725c3b0
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_wlan_util.c | 63 ++++++++++----------------
1 file changed, 25 insertions(+), 38 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_wlan_util.c b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
index 17b04c2..5aaff13 100644
--- a/drivers/staging/rtl8723au/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723au/core/rtw_wlan_util.c
@@ -886,9 +886,8 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
struct wlan_network *cur_network = &Adapter->mlmepriv.cur_network;
struct ieee80211_ht_operation *pht_info;
unsigned short val16;
- u8 encryp_protocol;
+ u8 crypto, bcn_channel;
int group_cipher = 0, pairwise_cipher = 0, is_8021x = 0, r;
- u32 bcn_channel;
int pie_len, ie_offset, ssid_len, privacy;
const u8 *p, *ssid;
@@ -984,29 +983,23 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
p = cfg80211_find_ie(WLAN_EID_RSN, mgmt->u.beacon.variable, pie_len);
if (p && p[1]) {
- encryp_protocol = ENCRYP_PROTOCOL_WPA2;
- } else if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
- WLAN_OUI_TYPE_MICROSOFT_WPA,
- mgmt->u.beacon.variable, pie_len)) {
- encryp_protocol = ENCRYP_PROTOCOL_WPA;
+ crypto = ENCRYP_PROTOCOL_WPA2;
+ if (p && p[1]) {
+ r = rtw_parse_wpa2_ie23a(p, p[1] + 2, &group_cipher,
+ &pairwise_cipher, &is_8021x);
+ if (r == _SUCCESS)
+ RT_TRACE(_module_rtl871x_mlme_c_, _drv_info_,
+ ("%s pnetwork->pairwise_cipher: %d, "
+ "pnetwork->group_cipher: %d, is_802x "
+ ": %d\n", __func__, pairwise_cipher,
+ group_cipher, is_8021x));
+ }
} else {
- if (privacy)
- encryp_protocol = ENCRYP_PROTOCOL_WEP;
- else
- encryp_protocol = ENCRYP_PROTOCOL_OPENSYS;
- }
-
- if (cur_network->BcnInfo.encryp_protocol != encryp_protocol) {
- DBG_8723A("%s(): enctyp is not match, return FAIL\n", __func__);
- goto _mismatch;
- }
-
- if (encryp_protocol == ENCRYP_PROTOCOL_WPA ||
- encryp_protocol == ENCRYP_PROTOCOL_WPA2) {
p = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
WLAN_OUI_TYPE_MICROSOFT_WPA,
mgmt->u.beacon.variable, pie_len);
- if (p && p[1] > 0) {
+ if (p && p[1]) {
+ crypto = ENCRYP_PROTOCOL_WPA;
r = rtw_parse_wpa_ie23a(p, p[1] + 2, &group_cipher,
&pairwise_cipher, &is_8021x);
if (r == _SUCCESS)
@@ -1016,25 +1009,19 @@ int rtw_check_bcn_info23a(struct rtw_adapter *Adapter,
"%d\n", __func__, pairwise_cipher,
group_cipher, is_8021x));
} else {
- p = cfg80211_find_ie(WLAN_EID_RSN,
- mgmt->u.beacon.variable, pie_len);
-
- if (p && p[1] > 0) {
- r = rtw_parse_wpa2_ie23a(p, p[1] + 2,
- &group_cipher,
- &pairwise_cipher,
- &is_8021x);
- if (r == _SUCCESS)
- RT_TRACE(_module_rtl871x_mlme_c_,
- _drv_info_,
- ("%s pnetwork->pairwise_cipher"
- ": %d, pnetwork->group_cipher"
- " is %d, is_802x is %d\n",
- __func__, pairwise_cipher,
- group_cipher, is_8021x));
- }
+ if (privacy)
+ crypto = ENCRYP_PROTOCOL_WEP;
+ else
+ crypto = ENCRYP_PROTOCOL_OPENSYS;
}
+ }
+
+ if (cur_network->BcnInfo.encryp_protocol != crypto) {
+ DBG_8723A("%s(): encryption mismatch, return FAIL\n", __func__);
+ goto _mismatch;
+ }
+ if (crypto == ENCRYP_PROTOCOL_WPA || crypto == ENCRYP_PROTOCOL_WPA2) {
RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
("%s cur_network->group_cipher is %d: %d\n", __func__,
cur_network->BcnInfo.group_cipher, group_cipher));

View File

@ -0,0 +1,50 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:27 +0200
Subject: [048/249] staging: rtl8723au: Declare rtw_update_scanned_network()
static
Origin: https://git.kernel.org/linus/8ab7bdba0ddb0f6a9ca93562f2d6065b1350802e
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 6 +++---
drivers/staging/rtl8723au/include/rtw_mlme.h | 2 --
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 4a33e7d..44a5249 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -487,8 +487,8 @@ static void update_current_network(struct rtw_adapter *adapter,
Caller must hold pmlmepriv->lock first.
*/
-void rtw_update_scanned_network23a(struct rtw_adapter *adapter,
- struct wlan_bssid_ex *target)
+static void rtw_update_scanned_network(struct rtw_adapter *adapter,
+ struct wlan_bssid_ex *target)
{
struct list_head *plist, *phead;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
@@ -571,7 +571,7 @@ static void rtw_add_network(struct rtw_adapter *adapter,
struct wlan_bssid_ex *pnetwork)
{
update_current_network(adapter, pnetwork);
- rtw_update_scanned_network23a(adapter, pnetwork);
+ rtw_update_scanned_network(adapter, pnetwork);
}
/* select the desired network based on the capability of the (i)bss. */
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index a11b5bd..baac8da 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -308,8 +308,6 @@ static inline void clr_fwstate_ex(struct mlme_priv *pmlmepriv, int state)
}
u16 rtw_get_capability23a(struct wlan_bssid_ex *bss);
-void rtw_update_scanned_network23a(struct rtw_adapter *adapter,
- struct wlan_bssid_ex *target);
void rtw_disconnect_hdl23a_under_linked(struct rtw_adapter *adapter,
struct sta_info *psta, u8 free_assoc);
void rtw_generate_random_ibss23a(u8 *pibss);

View File

@ -0,0 +1,27 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:28 +0200
Subject: [049/249] staging: rtl8723au: rtw_survey_event_cb23a(): Use the
correct types for the received arguments
Origin: https://git.kernel.org/linus/7195dc0e1a9982eb950b614e07abc5ba3068e95d
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 44a5249..639dfca 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -638,8 +638,9 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf)
u32 len;
struct wlan_bssid_ex *pnetwork;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct survey_event *survey = (struct survey_event *)pbuf;
- pnetwork = (struct wlan_bssid_ex *)pbuf;
+ pnetwork = &survey->bss;
RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,
("rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid));

View File

@ -0,0 +1,79 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:29 +0200
Subject: [050/249] staging: rtl8723au: Do not embed struct wlan_bssid_ex in
struct survey_event
Origin: https://git.kernel.org/linus/246879640e636256326221e70df8e1c3ef84ece0
Instead allocate it separately and reference it from survey_event.
This will allow for us to pass it on later without having to copy it.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++++-
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 9 +++++++--
drivers/staging/rtl8723au/include/rtw_event.h | 2 +-
3 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 639dfca..71ff753 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -640,7 +640,7 @@ void rtw_survey_event_cb23a(struct rtw_adapter *adapter, const u8 *pbuf)
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct survey_event *survey = (struct survey_event *)pbuf;
- pnetwork = &survey->bss;
+ pnetwork = survey->bss;
RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,
("rtw_survey_event_cb23a, ssid=%s\n", pnetwork->Ssid.ssid));
@@ -691,6 +691,9 @@ exit:
spin_unlock_bh(&pmlmepriv->lock);
+ kfree(survey->bss);
+ survey->bss = NULL;
+
return;
}
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 693a1a4..9b6d918 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4898,14 +4898,19 @@ void report_survey_event23a(struct rtw_adapter *padapter,
pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
+ psurvey_evt->bss = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
+ if (!psurvey_evt->bss) {
+ kfree(pcmd_obj);
+ kfree(pevtcmd);
+ }
- if (collect_bss_info23a(padapter, precv_frame, &psurvey_evt->bss) == _FAIL) {
+ if (collect_bss_info23a(padapter, precv_frame, psurvey_evt->bss) == _FAIL) {
kfree(pcmd_obj);
kfree(pevtcmd);
return;
}
- process_80211d(padapter, &psurvey_evt->bss);
+ process_80211d(padapter, psurvey_evt->bss);
rtw_enqueue_cmd23a(pcmdpriv, pcmd_obj);
diff --git a/drivers/staging/rtl8723au/include/rtw_event.h b/drivers/staging/rtl8723au/include/rtw_event.h
index 807cc83..4557aec 100644
--- a/drivers/staging/rtl8723au/include/rtw_event.h
+++ b/drivers/staging/rtl8723au/include/rtw_event.h
@@ -22,7 +22,7 @@
Used to report a bss has been scanned
*/
struct survey_event {
- struct wlan_bssid_ex bss;
+ struct wlan_bssid_ex *bss;
};
/*

View File

@ -0,0 +1,173 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:30 +0200
Subject: [051/249] staging: rtl8723au: Allocate struct wlan_bssid_ex in
collect_bss_info()
Origin: https://git.kernel.org/linus/1bebe756269a020add3e128c93b2edf1ef66362f
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 52 ++++++++++++------------
drivers/staging/rtl8723au/include/rtw_mlme_ext.h | 3 --
2 files changed, 25 insertions(+), 30 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 9b6d918..02180fc 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -61,6 +61,8 @@ static void start_clnt_assoc(struct rtw_adapter *padapter);
static void start_clnt_auth(struct rtw_adapter *padapter);
static void start_clnt_join(struct rtw_adapter *padapter);
static void start_create_ibss(struct rtw_adapter *padapter);
+static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
+ struct recv_frame *precv_frame);
#ifdef CONFIG_8723AU_AP_MODE
static int OnAuth23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame);
@@ -825,16 +827,11 @@ OnBeacon23a(struct rtw_adapter *padapter, struct recv_frame *precv_frame)
if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
/* we should update current network before auth,
or some IE is wrong */
- pbss = (struct wlan_bssid_ex *)
- kmalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
+ pbss = collect_bss_info(padapter, precv_frame);
if (pbss) {
- if (collect_bss_info23a(padapter, precv_frame, pbss) ==
- _SUCCESS) {
- update_network23a(
- &pmlmepriv->cur_network.network, pbss,
- padapter, true);
- rtw_get_bcn_info23a(&pmlmepriv->cur_network);
- }
+ update_network23a(&pmlmepriv->cur_network.network, pbss,
+ padapter, true);
+ rtw_get_bcn_info23a(&pmlmepriv->cur_network);
kfree(pbss);
}
@@ -4252,9 +4249,8 @@ static void rtw_site_survey(struct rtw_adapter *padapter)
}
/* collect bss info from Beacon and Probe request/response frames. */
-int collect_bss_info23a(struct rtw_adapter *padapter,
- struct recv_frame *precv_frame,
- struct wlan_bssid_ex *bssid)
+static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
+ struct recv_frame *precv_frame)
{
int i;
const u8 *p;
@@ -4265,16 +4261,19 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
struct registry_priv *pregistrypriv = &padapter->registrypriv;
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ struct wlan_bssid_ex *bssid;
u16 capab_info;
length = skb->len - sizeof(struct ieee80211_hdr_3addr);
if (length > MAX_IE_SZ) {
/* DBG_8723A("IE too long for survey event\n"); */
- return _FAIL;
+ return NULL;
}
- memset(bssid, 0, sizeof(struct wlan_bssid_ex));
+ bssid = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
+ if (!bssid)
+ return NULL;
if (ieee80211_is_beacon(mgmt->frame_control)) {
bssid->reserved = 1;
@@ -4325,13 +4324,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
if (!p) {
DBG_8723A("marc: cannot find SSID for survey event\n");
- return _FAIL;
+ goto fail;
}
if (p[1] > IEEE80211_MAX_SSID_LEN) {
DBG_8723A("%s()-%d: IE too long (%d) for survey "
"event\n", __func__, __LINE__, p[1]);
- return _FAIL;
+ goto fail;
}
memcpy(bssid->Ssid.ssid, p + 2, p[1]);
bssid->Ssid.ssid_len = p[1];
@@ -4346,7 +4345,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
if (p[1] > NDIS_802_11_LENGTH_RATES_EX) {
DBG_8723A("%s()-%d: IE too long (%d) for survey "
"event\n", __func__, __LINE__, p[1]);
- return _FAIL;
+ goto fail;
}
memcpy(bssid->SupportedRates, p + 2, p[1]);
i = p[1];
@@ -4358,13 +4357,13 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
if (p[1] > (NDIS_802_11_LENGTH_RATES_EX-i)) {
DBG_8723A("%s()-%d: IE too long (%d) for survey "
"event\n", __func__, __LINE__, p[1]);
- return _FAIL;
+ goto fail;
}
memcpy(bssid->SupportedRates + i, p + 2, p[1]);
}
if (bssid->IELength < 12)
- return _FAIL;
+ goto fail;
/* Checking for DSConfig */
p = cfg80211_find_ie(WLAN_EID_DS_PARAMS, bssid->IEs + ie_offset,
@@ -4392,7 +4391,7 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
bssid->ifmode = NL80211_IFTYPE_STATION;
ether_addr_copy(bssid->MacAddress, mgmt->sa);
bssid->Privacy = 1;
- return _SUCCESS;
+ return bssid;
}
if (capab_info & WLAN_CAPABILITY_ESS) {
@@ -4434,7 +4433,10 @@ int collect_bss_info23a(struct rtw_adapter *padapter,
if (bssid->DSConfig != rtw_get_oper_ch23a(padapter))
bssid->PhyInfo.SignalQuality = 101;
- return _SUCCESS;
+ return bssid;
+fail:
+ kfree (bssid);
+ return NULL;
}
static void start_create_ibss(struct rtw_adapter* padapter)
@@ -4898,13 +4900,9 @@ void report_survey_event23a(struct rtw_adapter *padapter,
pc2h_evt_hdr->seq = atomic_inc_return(&pmlmeext->event_seq);
psurvey_evt = (struct survey_event*)(pevtcmd + sizeof(struct C2HEvent_Header));
- psurvey_evt->bss = kzalloc(sizeof(struct wlan_bssid_ex), GFP_ATOMIC);
- if (!psurvey_evt->bss) {
- kfree(pcmd_obj);
- kfree(pevtcmd);
- }
- if (collect_bss_info23a(padapter, precv_frame, psurvey_evt->bss) == _FAIL) {
+ psurvey_evt->bss = collect_bss_info(padapter, precv_frame);
+ if (!psurvey_evt->bss) {
kfree(pcmd_obj);
kfree(pevtcmd);
return;
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
index eb61012..0219aa1 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme_ext.h
@@ -495,9 +495,6 @@ void flush_all_cam_entry23a(struct rtw_adapter *padapter);
bool IsLegal5GChannel(struct rtw_adapter *Adapter, u8 channel);
-int collect_bss_info23a(struct rtw_adapter *padapter,
- struct recv_frame *precv_frame,
- struct wlan_bssid_ex *bssid);
void update_network23a(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
struct rtw_adapter *padapter, bool update_ie);

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:31 +0200
Subject: [052/249] staging: rtl8723au: collect_bss_info(): Don't memset() what
we just kzalloc()'d
Origin: https://git.kernel.org/linus/8d7fb1b874988b663d796f5b3b328cc50e99c1e2
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 02180fc..14193b4 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4335,8 +4335,6 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
memcpy(bssid->Ssid.ssid, p + 2, p[1]);
bssid->Ssid.ssid_len = p[1];
- memset(bssid->SupportedRates, 0, NDIS_802_11_LENGTH_RATES_EX);
-
/* checking rate info... */
i = 0;
p = cfg80211_find_ie(WLAN_EID_SUPP_RATES, bssid->IEs + ie_offset,

View File

@ -0,0 +1,30 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:32 +0200
Subject: [053/249] staging: rtl8723au: free_scanqueue(): Use
_rtw_free_network23a()
Origin: https://git.kernel.org/linus/46805acb89edec720493e5779459ae8d0ccc680d
Use _rtw_free_network23() so elements are freed in one place.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 71ff753..7c99c37 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -831,9 +831,9 @@ static void free_scanqueue(struct mlme_priv *pmlmepriv)
phead = get_list_head(scan_queue);
list_for_each_safe(plist, ptemp, phead) {
- list_del_init(plist);
pnetwork = container_of(plist, struct wlan_network, list);
- kfree(pnetwork);
+ pnetwork->fixed = false;
+ _rtw_free_network23a(pmlmepriv, pnetwork);
}
spin_unlock_bh(&scan_queue->lock);

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:33 +0200
Subject: [054/249] staging: rtl8723au: rtw_stadel_event_callback23a(): Remove
superfluous memset()
Origin: https://git.kernel.org/linus/1ae17bf1690d6781d260db96952b8a937a204570
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 7c99c37..bcc6893 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -1506,8 +1506,6 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
memcpy(pdev_network, &tgt_network->network,
get_wlan_bssid_ex_sz(&tgt_network->network));
- memset(&pdev_network->Ssid, 0,
- sizeof(struct cfg80211_ssid));
memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid,
sizeof(struct cfg80211_ssid));

View File

@ -0,0 +1,24 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:34 +0200
Subject: [055/249] staging: rtl8723au: OnAuth23a(): Use ether_addr_copy()
Origin: https://git.kernel.org/linus/ded7a20f827164bb7efc602f6f11e70cfa3e73e4
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 14193b4..bed7eb7 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -1087,7 +1087,7 @@ auth_fail:
pstat = &stat;
memset((char *)pstat, '\0', sizeof(stat));
pstat->auth_seq = 2;
- memcpy(pstat->hwaddr, sa, 6);
+ ether_addr_copy(pstat->hwaddr, sa);
issue_auth(padapter, pstat, (unsigned short)status);

View File

@ -0,0 +1,53 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:35 +0200
Subject: [056/249] staging: rtl8723au: Get rid of IW_ESSID_MAX_SIZE
Origin: https://git.kernel.org/linus/7b2e06a159a2398c6b03d38d5e023f98da8c53c6
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 3 ++-
drivers/staging/rtl8723au/include/ieee80211.h | 2 --
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +-
3 files changed, 3 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index bed7eb7..59047ad 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -5945,7 +5945,8 @@ int sitesurvey_cmd_hdl23a(struct rtw_adapter *padapter, const u8 *pbuf)
for (i = 0; i < RTW_SSID_SCAN_AMOUNT; i++) {
if (pparm->ssid[i].ssid_len) {
memcpy(pmlmeext->sitesurvey_res.ssid[i].ssid,
- pparm->ssid[i].ssid, IW_ESSID_MAX_SIZE);
+ pparm->ssid[i].ssid,
+ IEEE80211_MAX_SSID_LEN);
pmlmeext->sitesurvey_res.ssid[i].ssid_len =
pparm->ssid[i].ssid_len;
} else {
diff --git a/drivers/staging/rtl8723au/include/ieee80211.h b/drivers/staging/rtl8723au/include/ieee80211.h
index c2c57c7..43f002d 100644
--- a/drivers/staging/rtl8723au/include/ieee80211.h
+++ b/drivers/staging/rtl8723au/include/ieee80211.h
@@ -309,8 +309,6 @@ struct ieee80211_snap_hdr {
#define MAX_P2P_IE_LEN 256
#define MAX_WFD_IE_LEN 128
-#define IW_ESSID_MAX_SIZE 32
-
/*
join_res:
-1: authentication fail
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 2fdc2b5..5e05134 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2020,7 +2020,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
goto exit;
}
- if (sme->ssid_len > IW_ESSID_MAX_SIZE) {
+ if (sme->ssid_len > IEEE80211_MAX_SSID_LEN) {
ret = -E2BIG;
goto exit;
}

View File

@ -0,0 +1,105 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:36 +0200
Subject: [057/249] staging: rtl8723au: Make rtw_is_same_ibss23a() return bool
Origin: https://git.kernel.org/linus/ec36ce29ca8e935d747ec0eddfa813da9324ee6d
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 44 ++++++++++++++++----------
drivers/staging/rtl8723au/core/rtw_mlme.c | 6 ++--
drivers/staging/rtl8723au/include/rtw_mlme.h | 4 +--
3 files changed, 33 insertions(+), 21 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 1d2ea4e..8d76748 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -188,26 +188,38 @@ int rtw_set_802_11_ssid23a(struct rtw_adapter* padapter,
!memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid,
ssid->ssid_len)) {
if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("Set SSID is the same ssid, fw_state = 0x%08x\n",
- get_fwstate(pmlmepriv)));
+ RT_TRACE(_module_rtl871x_ioctl_set_c_,
+ _drv_err_, ("New SSID is same SSID, "
+ "fw_state = 0x%08x\n",
+ get_fwstate(pmlmepriv)));
+
+ if (rtw_is_same_ibss23a(padapter, pnetwork)) {
+ /*
+ * it means driver is in
+ * WIFI_ADHOC_MASTER_STATE, we needn't
+ * create bss again.
+ */
+ goto release_mlme_lock;
+ }
- if (rtw_is_same_ibss23a(padapter, pnetwork) == false)
- {
- /* if in WIFI_ADHOC_MASTER_STATE | WIFI_ADHOC_STATE, create bss or rejoin again */
- rtw_disassoc_cmd23a(padapter, 0, true);
+ /*
+ * if in WIFI_ADHOC_MASTER_STATE |
+ * WIFI_ADHOC_STATE, create bss or
+ * rejoin again
+ */
+ rtw_disassoc_cmd23a(padapter, 0, true);
- if (check_fwstate(pmlmepriv, _FW_LINKED))
- rtw_indicate_disconnect23a(padapter);
+ if (check_fwstate(pmlmepriv, _FW_LINKED))
+ rtw_indicate_disconnect23a(padapter);
- rtw_free_assoc_resources23a(padapter, 1);
+ rtw_free_assoc_resources23a(padapter, 1);
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
- _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
- set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
- }
- } else {
- goto release_mlme_lock;/* it means driver is in WIFI_ADHOC_MASTER_STATE, we needn't create bss again. */
+ if (check_fwstate(pmlmepriv,
+ WIFI_ADHOC_MASTER_STATE)) {
+ _clr_fwstate_(pmlmepriv,
+ WIFI_ADHOC_MASTER_STATE);
+ set_fwstate(pmlmepriv,
+ WIFI_ADHOC_STATE);
}
} else {
rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_JOINBSS, 1);
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index bcc6893..2a0c43a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -334,10 +334,10 @@ static void rtw_free_network_nolock(struct mlme_priv *pmlmepriv,
_rtw_free_network23a(pmlmepriv, pnetwork);
}
-int rtw_is_same_ibss23a(struct rtw_adapter *adapter,
- struct wlan_network *pnetwork)
+bool rtw_is_same_ibss23a(struct rtw_adapter *adapter,
+ struct wlan_network *pnetwork)
{
- int ret = true;
+ int ret;
struct security_priv *psecuritypriv = &adapter->securitypriv;
if (psecuritypriv->dot11PrivacyAlgrthm != 0 &&
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index baac8da..c8e82bf 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -361,8 +361,8 @@ void rtw_update_ht_cap23a(struct rtw_adapter *padapter,
void rtw_issue_addbareq_cmd23a(struct rtw_adapter *padapter,
struct xmit_frame *pxmitframe);
-int rtw_is_same_ibss23a(struct rtw_adapter *adapter,
- struct wlan_network *pnetwork);
+bool rtw_is_same_ibss23a(struct rtw_adapter *adapter,
+ struct wlan_network *pnetwork);
int is_same_network23a(struct wlan_bssid_ex *src, struct wlan_bssid_ex *dst);
void rtw23a_roaming(struct rtw_adapter *adapter,

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:37 +0200
Subject: [058/249] staging: rtl8723au: cfg80211_rtw_connect(): Check correct
return value from rtw_set_802_11_ssid23a()
Origin: https://git.kernel.org/linus/7c0e0636753ed98941eb4f904a03b2c6b5e5614d
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 5e05134..c116b21 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2204,7 +2204,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */
- if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) == false) {
+ if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) != _SUCCESS) {
ret = -1;
goto exit;
}

View File

@ -0,0 +1,90 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:38 +0200
Subject: [059/249] staging: rtl8723au: Fold
rtw_set_802_11_authentication_mode23a() into cfg80211_rtw_connect()
Origin: https://git.kernel.org/linus/39dbc446a7168e4d7542d6523132ee44189d0ba2
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 24 -----------------------
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 2 --
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 10 +++++++---
3 files changed, 7 insertions(+), 29 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 8d76748..5c3b561 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -343,30 +343,6 @@ exit:
return res;
}
-int rtw_set_802_11_authentication_mode23a(struct rtw_adapter* padapter,
- enum ndis_802_11_auth_mode authmode)
-{
- struct security_priv *psecuritypriv = &padapter->securitypriv;
- int res;
-
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("set_802_11_auth.mode(): mode =%x\n", authmode));
-
- psecuritypriv->ndisauthtype = authmode;
-
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("rtw_set_802_11_authentication_mode23a:"
- "psecuritypriv->ndisauthtype =%d",
- psecuritypriv->ndisauthtype));
-
- if (psecuritypriv->ndisauthtype > 3)
- psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
-
- res = rtw_set_auth23a(padapter, psecuritypriv);
-
- return res;
-}
-
/*
* rtw_get_cur_max_rate23a -
* @adapter: pointer to _adapter structure
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
index 040543b..bc5805a 100644
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
@@ -17,8 +17,6 @@
#include <drv_types.h>
-int rtw_set_802_11_authentication_mode23a(struct rtw_adapter *pdapter,
- enum ndis_802_11_auth_mode authmode);
int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid,
int ssid_max_num);
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index c116b21..0628416 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1987,7 +1987,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
int ret = 0;
struct list_head *phead, *plist, *ptmp;
struct wlan_network *pnetwork = NULL;
- enum ndis_802_11_auth_mode authmode;
struct cfg80211_ssid ndis_ssid;
u8 *dst_ssid;
u8 *src_ssid;
@@ -2198,8 +2197,13 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
goto exit;
}
- authmode = psecuritypriv->ndisauthtype;
- rtw_set_802_11_authentication_mode23a(padapter, authmode);
+ if (psecuritypriv->ndisauthtype > 3)
+ psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
+
+ if (rtw_set_auth23a(padapter, psecuritypriv) != _SUCCESS) {
+ ret = -EBUSY;
+ goto exit;
+ }
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */

View File

@ -0,0 +1,325 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:39 +0200
Subject: [060/249] staging: rtl8723au: Move rtw_set_802_11_ssid23a() to
ioctl_cfg80211.c
Origin: https://git.kernel.org/linus/97c4361d50e833a0c178cf425590a15e9663f3d0
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 135 ----------------------
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 2 -
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 134 ++++++++++++++++++++-
3 files changed, 132 insertions(+), 139 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 5c3b561..7b0d3db 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -151,141 +151,6 @@ exit:
return ret;
}
-int rtw_set_802_11_ssid23a(struct rtw_adapter* padapter,
- struct cfg80211_ssid *ssid)
-{
- int status = _SUCCESS;
- u32 cur_time = 0;
-
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct wlan_network *pnetwork = &pmlmepriv->cur_network;
-
-
-
- DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n",
- ssid->ssid, get_fwstate(pmlmepriv));
-
- if (padapter->hw_init_completed == false) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("set_ssid: hw_init_completed == false =>exit!!!\n"));
- status = _FAIL;
- goto exit;
- }
-
- spin_lock_bh(&pmlmepriv->lock);
-
- DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv));
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- goto handle_tkip_countermeasure;
- else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- goto release_mlme_lock;
-
- if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n"));
-
- if ((pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len) &&
- !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid,
- ssid->ssid_len)) {
- if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_,
- _drv_err_, ("New SSID is same SSID, "
- "fw_state = 0x%08x\n",
- get_fwstate(pmlmepriv)));
-
- if (rtw_is_same_ibss23a(padapter, pnetwork)) {
- /*
- * it means driver is in
- * WIFI_ADHOC_MASTER_STATE, we needn't
- * create bss again.
- */
- goto release_mlme_lock;
- }
-
- /*
- * if in WIFI_ADHOC_MASTER_STATE |
- * WIFI_ADHOC_STATE, create bss or
- * rejoin again
- */
- rtw_disassoc_cmd23a(padapter, 0, true);
-
- if (check_fwstate(pmlmepriv, _FW_LINKED))
- rtw_indicate_disconnect23a(padapter);
-
- rtw_free_assoc_resources23a(padapter, 1);
-
- if (check_fwstate(pmlmepriv,
- WIFI_ADHOC_MASTER_STATE)) {
- _clr_fwstate_(pmlmepriv,
- WIFI_ADHOC_MASTER_STATE);
- set_fwstate(pmlmepriv,
- WIFI_ADHOC_STATE);
- }
- } else {
- rtw_lps_ctrl_wk_cmd23a(padapter, LPS_CTRL_JOINBSS, 1);
- }
- } else {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("Set SSID not the same ssid\n"));
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("set_ssid =[%s] len = 0x%x\n", ssid->ssid,
- (unsigned int)ssid->ssid_len));
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("assoc_ssid =[%s] len = 0x%x\n",
- pmlmepriv->assoc_ssid.ssid,
- (unsigned int)pmlmepriv->assoc_ssid.ssid_len));
-
- rtw_disassoc_cmd23a(padapter, 0, true);
-
- if (check_fwstate(pmlmepriv, _FW_LINKED))
- rtw_indicate_disconnect23a(padapter);
-
- rtw_free_assoc_resources23a(padapter, 1);
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
- _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
- set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
- }
- }
- }
-
-handle_tkip_countermeasure:
-
- if (padapter->securitypriv.btkip_countermeasure == true) {
- cur_time = jiffies;
-
- if ((cur_time - padapter->securitypriv.btkip_countermeasure_time) > 60 * HZ)
- {
- padapter->securitypriv.btkip_countermeasure = false;
- padapter->securitypriv.btkip_countermeasure_time = 0;
- }
- else
- {
- status = _FAIL;
- goto release_mlme_lock;
- }
- }
-
- memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid));
- pmlmepriv->assoc_by_bssid = false;
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- pmlmepriv->to_join = true;
- else
- status = rtw_do_join23a(padapter);
-
-release_mlme_lock:
- spin_unlock_bh(&pmlmepriv->lock);
-
-exit:
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("-rtw_set_802_11_ssid23a: status =%d\n", status));
-
-
-
- return status;
-}
-
int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid,
int ssid_max_num)
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
index bc5805a..14a36f5 100644
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
@@ -20,8 +20,6 @@
int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid,
int ssid_max_num);
-int rtw_set_802_11_ssid23a(struct rtw_adapter * padapter,
- struct cfg80211_ssid * ssid);
u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter);
s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 0628416..30473d0 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1981,6 +1981,136 @@ exit:
return res;
}
+static int rtw_set_ssid(struct rtw_adapter* padapter,
+ struct cfg80211_ssid *ssid)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ struct wlan_network *pnetwork = &pmlmepriv->cur_network;
+ int status = _SUCCESS;
+ u32 cur_time = 0;
+
+ DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n",
+ ssid->ssid, get_fwstate(pmlmepriv));
+
+ if (padapter->hw_init_completed == false) {
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
+ ("set_ssid: hw_init_completed == false =>exit!!!\n"));
+ status = _FAIL;
+ goto exit;
+ }
+
+ spin_lock_bh(&pmlmepriv->lock);
+
+ DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv));
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ goto handle_tkip_countermeasure;
+ else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
+ goto release_mlme_lock;
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) {
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
+ ("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n"));
+
+ if (pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len &&
+ !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid,
+ ssid->ssid_len)) {
+ if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
+ RT_TRACE(_module_rtl871x_ioctl_set_c_,
+ _drv_err_, ("New SSID is same SSID, "
+ "fw_state = 0x%08x\n",
+ get_fwstate(pmlmepriv)));
+
+ if (rtw_is_same_ibss23a(padapter, pnetwork)) {
+ /*
+ * it means driver is in
+ * WIFI_ADHOC_MASTER_STATE, we needn't
+ * create bss again.
+ */
+ goto release_mlme_lock;
+ }
+
+ /*
+ * if in WIFI_ADHOC_MASTER_STATE |
+ * WIFI_ADHOC_STATE, create bss or
+ * rejoin again
+ */
+ rtw_disassoc_cmd23a(padapter, 0, true);
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED))
+ rtw_indicate_disconnect23a(padapter);
+
+ rtw_free_assoc_resources23a(padapter, 1);
+
+ if (check_fwstate(pmlmepriv,
+ WIFI_ADHOC_MASTER_STATE)) {
+ _clr_fwstate_(pmlmepriv,
+ WIFI_ADHOC_MASTER_STATE);
+ set_fwstate(pmlmepriv,
+ WIFI_ADHOC_STATE);
+ }
+ } else {
+ rtw_lps_ctrl_wk_cmd23a(padapter,
+ LPS_CTRL_JOINBSS, 1);
+ }
+ } else {
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
+ ("Set SSID not the same ssid\n"));
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
+ ("set_ssid =[%s] len = 0x%x\n", ssid->ssid,
+ ssid->ssid_len));
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
+ ("assoc_ssid =[%s] len = 0x%x\n",
+ pmlmepriv->assoc_ssid.ssid,
+ pmlmepriv->assoc_ssid.ssid_len));
+
+ rtw_disassoc_cmd23a(padapter, 0, true);
+
+ if (check_fwstate(pmlmepriv, _FW_LINKED))
+ rtw_indicate_disconnect23a(padapter);
+
+ rtw_free_assoc_resources23a(padapter, 1);
+
+ if (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) {
+ _clr_fwstate_(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
+ set_fwstate(pmlmepriv, WIFI_ADHOC_STATE);
+ }
+ }
+ }
+
+handle_tkip_countermeasure:
+
+ if (padapter->securitypriv.btkip_countermeasure == true) {
+ cur_time = jiffies;
+
+ if ((cur_time -
+ padapter->securitypriv.btkip_countermeasure_time) >
+ 60 * HZ) {
+ padapter->securitypriv.btkip_countermeasure = false;
+ padapter->securitypriv.btkip_countermeasure_time = 0;
+ } else {
+ status = _FAIL;
+ goto release_mlme_lock;
+ }
+ }
+
+ memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid));
+ pmlmepriv->assoc_by_bssid = false;
+
+ if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
+ pmlmepriv->to_join = true;
+ else
+ status = rtw_do_join23a(padapter);
+
+release_mlme_lock:
+ spin_unlock_bh(&pmlmepriv->lock);
+
+exit:
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
+ ("-%s: status =%d\n", __func__, status));
+
+ return status;
+}
+
static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
struct cfg80211_connect_params *sme)
{
@@ -2208,8 +2338,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */
- if (rtw_set_802_11_ssid23a(padapter, &ndis_ssid) != _SUCCESS) {
- ret = -1;
+ if (rtw_set_ssid(padapter, &ndis_ssid) != _SUCCESS) {
+ ret = -EBUSY;
goto exit;
}

View File

@ -0,0 +1,140 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:40 +0200
Subject: [061/249] staging: rtl8723au: cfg80211_rtw_connect(): Clean up
various bits
Origin: https://git.kernel.org/linus/c5178b0bc2ea2e72d45a90ae346a9b2fda0b5f08
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 53 +++++++++--------------
1 file changed, 20 insertions(+), 33 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 30473d0..b0d959e 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2117,11 +2117,9 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
int ret = 0;
struct list_head *phead, *plist, *ptmp;
struct wlan_network *pnetwork = NULL;
- struct cfg80211_ssid ndis_ssid;
+ struct cfg80211_ssid ssid;
u8 *dst_ssid;
- u8 *src_ssid;
u8 *dst_bssid;
- const u8 *src_bssid;
/* u8 matched_by_bssid = false; */
/* u8 matched_by_ssid = false; */
u8 matched = false;
@@ -2144,21 +2142,13 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
goto exit;
}
- if (!sme->ssid || !sme->ssid_len) {
+ if (!sme->ssid || !sme->ssid_len ||
+ sme->ssid_len > IEEE80211_MAX_SSID_LEN) {
ret = -EINVAL;
goto exit;
}
- if (sme->ssid_len > IEEE80211_MAX_SSID_LEN) {
- ret = -E2BIG;
- goto exit;
- }
-
- memset(&ndis_ssid, 0, sizeof(struct cfg80211_ssid));
- ndis_ssid.ssid_len = sme->ssid_len;
- memcpy(ndis_ssid.ssid, sme->ssid, sme->ssid_len);
-
- DBG_8723A("ssid =%s, len =%zu\n", ndis_ssid.ssid, sme->ssid_len);
+ DBG_8723A("ssid =%s, len =%zu\n", sme->ssid, sme->ssid_len);
if (sme->bssid)
DBG_8723A("bssid =" MAC_FMT "\n", MAC_ARG(sme->bssid));
@@ -2173,6 +2163,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
rtw_scan_abort23a(padapter);
}
+ memset(ssid.ssid, 0, sizeof(struct cfg80211_ssid));
+
spin_lock_bh(&queue->lock);
phead = get_list_head(queue);
@@ -2197,28 +2189,24 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
}
if (sme->bssid) {
- src_bssid = sme->bssid;
-
- if (ether_addr_equal(dst_bssid, src_bssid)) {
+ if (ether_addr_equal(dst_bssid, sme->bssid)) {
DBG_8723A("matched by bssid\n");
- ndis_ssid.ssid_len =
- pnetwork->network.Ssid.ssid_len;
- memcpy(ndis_ssid.ssid,
- pnetwork->network.Ssid.ssid,
+ memcpy(ssid.ssid, pnetwork->network.Ssid.ssid,
pnetwork->network.Ssid.ssid_len);
+ ssid.ssid_len = pnetwork->network.Ssid.ssid_len;
matched = true;
break;
}
-
} else if (sme->ssid && sme->ssid_len) {
- src_ssid = ndis_ssid.ssid;
-
- if ((!memcmp(dst_ssid, src_ssid, ndis_ssid.ssid_len)) &&
- (pnetwork->network.Ssid.ssid_len ==
- ndis_ssid.ssid_len)) {
+ if (!memcmp(dst_ssid, sme->ssid, sme->ssid_len) &&
+ pnetwork->network.Ssid.ssid_len == sme->ssid_len) {
DBG_8723A("matched by ssid\n");
+
+ memcpy(ssid.ssid, sme->ssid, sme->ssid_len);
+ ssid.ssid_len = sme->ssid_len;
+
matched = true;
break;
}
@@ -2227,7 +2215,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
spin_unlock_bh(&queue->lock);
- if (!matched || (pnetwork == NULL)) {
+ if (!matched || !pnetwork) {
ret = -ENOENT;
DBG_8723A("connect, matched == false, goto exit\n");
goto exit;
@@ -2245,9 +2233,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_Open;
psecuritypriv->ndisauthtype = Ndis802_11AuthModeOpen;
- ret =
- rtw_cfg80211_set_wpa_version(psecuritypriv,
- sme->crypto.wpa_versions);
+ ret = rtw_cfg80211_set_wpa_version(psecuritypriv,
+ sme->crypto.wpa_versions);
if (ret < 0)
goto exit;
@@ -2318,7 +2305,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
ret = rtw_cfg80211_set_cipher(psecuritypriv,
sme->crypto.cipher_group, false);
if (ret < 0)
- return ret;
+ goto exit;
if (sme->crypto.n_akm_suites) {
ret = rtw_cfg80211_set_key_mgt(psecuritypriv,
@@ -2338,7 +2325,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */
- if (rtw_set_ssid(padapter, &ndis_ssid) != _SUCCESS) {
+ if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) {
ret = -EBUSY;
goto exit;
}

View File

@ -0,0 +1,58 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:41 +0200
Subject: [062/249] staging: rtl8723au: cfg80211_rtw_connect(): Remove
obfuscating pointers
Origin: https://git.kernel.org/linus/9ab98d42401d50d6ab5f6ef59e1d63c486391f1c
dst_ssid and dst_bssid were just obfuscating that we were in fact
looking at pnetwork.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index b0d959e..281b48c 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2118,8 +2118,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
struct list_head *phead, *plist, *ptmp;
struct wlan_network *pnetwork = NULL;
struct cfg80211_ssid ssid;
- u8 *dst_ssid;
- u8 *dst_bssid;
/* u8 matched_by_bssid = false; */
/* u8 matched_by_ssid = false; */
u8 matched = false;
@@ -2172,9 +2170,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
list_for_each_safe(plist, ptmp, phead) {
pnetwork = container_of(plist, struct wlan_network, list);
- dst_ssid = pnetwork->network.Ssid.ssid;
- dst_bssid = pnetwork->network.MacAddress;
-
if (sme->bssid) {
if (!ether_addr_equal(pnetwork->network.MacAddress,
sme->bssid))
@@ -2189,7 +2184,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
}
if (sme->bssid) {
- if (ether_addr_equal(dst_bssid, sme->bssid)) {
+ if (ether_addr_equal(pnetwork->network.MacAddress,
+ sme->bssid)) {
DBG_8723A("matched by bssid\n");
memcpy(ssid.ssid, pnetwork->network.Ssid.ssid,
@@ -2200,7 +2196,8 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
break;
}
} else if (sme->ssid && sme->ssid_len) {
- if (!memcmp(dst_ssid, sme->ssid, sme->ssid_len) &&
+ if (!memcmp(pnetwork->network.Ssid.ssid,
+ sme->ssid, sme->ssid_len) &&
pnetwork->network.Ssid.ssid_len == sme->ssid_len) {
DBG_8723A("matched by ssid\n");

View File

@ -0,0 +1,52 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:42 +0200
Subject: [063/249] staging: rtl8723au: cfg80211_rtw_connect(): Simplify ssid
preparation
Origin: https://git.kernel.org/linus/9cb08ff32c386cda497f83635817cd328478a308
Since we just matched sme->{ssid,ssid_len} to
pnetwork->network.Ssid.{ssid,ssid_len} we can simplify the copy and
move it to just before the call to rtw_set_ssid().
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 11 ++++-------
1 file changed, 4 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 281b48c..0a6922d 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2188,10 +2188,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
sme->bssid)) {
DBG_8723A("matched by bssid\n");
- memcpy(ssid.ssid, pnetwork->network.Ssid.ssid,
- pnetwork->network.Ssid.ssid_len);
- ssid.ssid_len = pnetwork->network.Ssid.ssid_len;
-
matched = true;
break;
}
@@ -2201,9 +2197,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
pnetwork->network.Ssid.ssid_len == sme->ssid_len) {
DBG_8723A("matched by ssid\n");
- memcpy(ssid.ssid, sme->ssid, sme->ssid_len);
- ssid.ssid_len = sme->ssid_len;
-
matched = true;
break;
}
@@ -2322,6 +2315,10 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */
+ memcpy(ssid.ssid, pnetwork->network.Ssid.ssid,
+ pnetwork->network.Ssid.ssid_len);
+ ssid.ssid_len = pnetwork->network.Ssid.ssid_len;
+
if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) {
ret = -EBUSY;
goto exit;

View File

@ -0,0 +1,107 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:43 +0200
Subject: [064/249] staging: rtl8723au: Pass a struct wlan_network to
rtw_set_ssid()
Origin: https://git.kernel.org/linus/e73d82efa4583e5ecaf598d85341403806a16e62
There is no point copying the ssid out of struct wlan_network when we
can just pass on the whole struct.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 32 +++++++++++------------
1 file changed, 15 insertions(+), 17 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 0a6922d..c03181d 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1981,8 +1981,8 @@ exit:
return res;
}
-static int rtw_set_ssid(struct rtw_adapter* padapter,
- struct cfg80211_ssid *ssid)
+static int rtw_set_ssid(struct rtw_adapter *padapter,
+ struct wlan_network *newnetwork)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct wlan_network *pnetwork = &pmlmepriv->cur_network;
@@ -1990,7 +1990,7 @@ static int rtw_set_ssid(struct rtw_adapter* padapter,
u32 cur_time = 0;
DBG_8723A_LEVEL(_drv_always_, "set ssid [%s] fw_state = 0x%08x\n",
- ssid->ssid, get_fwstate(pmlmepriv));
+ newnetwork->network.Ssid.ssid, get_fwstate(pmlmepriv));
if (padapter->hw_init_completed == false) {
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
@@ -2011,9 +2011,11 @@ static int rtw_set_ssid(struct rtw_adapter* padapter,
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
("set_ssid: _FW_LINKED||WIFI_ADHOC_MASTER_STATE\n"));
- if (pmlmepriv->assoc_ssid.ssid_len == ssid->ssid_len &&
- !memcmp(&pmlmepriv->assoc_ssid.ssid, ssid->ssid,
- ssid->ssid_len)) {
+ if (pmlmepriv->assoc_ssid.ssid_len ==
+ newnetwork->network.Ssid.ssid_len &&
+ !memcmp(&pmlmepriv->assoc_ssid.ssid,
+ newnetwork->network.Ssid.ssid,
+ newnetwork->network.Ssid.ssid_len)) {
if (!check_fwstate(pmlmepriv, WIFI_STATION_STATE)) {
RT_TRACE(_module_rtl871x_ioctl_set_c_,
_drv_err_, ("New SSID is same SSID, "
@@ -2056,8 +2058,9 @@ static int rtw_set_ssid(struct rtw_adapter* padapter,
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
("Set SSID not the same ssid\n"));
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("set_ssid =[%s] len = 0x%x\n", ssid->ssid,
- ssid->ssid_len));
+ ("set_ssid =[%s] len = 0x%x\n",
+ newnetwork->network.Ssid.ssid,
+ newnetwork->network.Ssid.ssid_len));
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
("assoc_ssid =[%s] len = 0x%x\n",
pmlmepriv->assoc_ssid.ssid,
@@ -2093,7 +2096,9 @@ handle_tkip_countermeasure:
}
}
- memcpy(&pmlmepriv->assoc_ssid, ssid, sizeof(struct cfg80211_ssid));
+ memcpy(&pmlmepriv->assoc_ssid, &newnetwork->network.Ssid,
+ sizeof(struct cfg80211_ssid));
+
pmlmepriv->assoc_by_bssid = false;
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
@@ -2117,7 +2122,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
int ret = 0;
struct list_head *phead, *plist, *ptmp;
struct wlan_network *pnetwork = NULL;
- struct cfg80211_ssid ssid;
/* u8 matched_by_bssid = false; */
/* u8 matched_by_ssid = false; */
u8 matched = false;
@@ -2161,8 +2165,6 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
rtw_scan_abort23a(padapter);
}
- memset(ssid.ssid, 0, sizeof(struct cfg80211_ssid));
-
spin_lock_bh(&queue->lock);
phead = get_list_head(queue);
@@ -2315,11 +2317,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
/* rtw_set_802_11_encryption_mode(padapter,
padapter->securitypriv.ndisencryptstatus); */
- memcpy(ssid.ssid, pnetwork->network.Ssid.ssid,
- pnetwork->network.Ssid.ssid_len);
- ssid.ssid_len = pnetwork->network.Ssid.ssid_len;
-
- if (rtw_set_ssid(padapter, &ssid) != _SUCCESS) {
+ if (rtw_set_ssid(padapter, pnetwork) != _SUCCESS) {
ret = -EBUSY;
goto exit;
}

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:44 +0200
Subject: [065/249] staging: rtl8723au: rtw_set_ssid(): This is never called
with _FW_UNDER_LINKING
Origin: https://git.kernel.org/linus/70fbc1a8a191bb97c4a38ea105a92dd6cd20a140
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index c03181d..5a8b88c 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2004,8 +2004,6 @@ static int rtw_set_ssid(struct rtw_adapter *padapter,
DBG_8723A("Set SSID under fw_state = 0x%08x\n", get_fwstate(pmlmepriv));
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
goto handle_tkip_countermeasure;
- else if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING))
- goto release_mlme_lock;
if (check_fwstate(pmlmepriv, _FW_LINKED|WIFI_ADHOC_MASTER_STATE)) {
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,

View File

@ -0,0 +1,31 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:45 +0200
Subject: [066/249] staging: rtl8723au: rtw_cfg80211_add_wep(): Use
WLAN_KEY_LEN_*
Origin: https://git.kernel.org/linus/4d9c63bbd207b20ae648bd6bd3ebcf6e52619616
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 5a8b88c..9c36f6c 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1931,12 +1931,12 @@ static int rtw_cfg80211_add_wep(struct rtw_adapter *padapter,
}
switch (wep->keylen) {
- case 5:
+ case WLAN_KEY_LEN_WEP40:
psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP40;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
("%s:wep->KeyLength = 5\n", __func__));
break;
- case 13:
+ case WLAN_KEY_LEN_WEP104:
psecuritypriv->dot11PrivacyAlgrthm = WLAN_CIPHER_SUITE_WEP104;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
("%s:wep->KeyLength = 13\n", __func__));

View File

@ -0,0 +1,27 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:46 +0200
Subject: [067/249] staging: rtl8723au: rtw_do_join23a(): Use correct error
return values
Origin: https://git.kernel.org/linus/be82728e9c10542688dfc0810afa38fd47f4a06b
Don't mix true/fail with _SUCCESS/_FAIL as return value
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 7b0d3db..28cfea5 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -109,7 +109,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
_drv_err_,
("***Error =>do_goin: rtw_creat"
"ebss_cmd status FAIL***\n"));
- ret = false;
+ ret = _FAIL;
goto exit;
}

View File

@ -0,0 +1,34 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:47 +0200
Subject: [068/249] staging: rtl8723au: Minor debug message fixup
Origin: https://git.kernel.org/linus/2febc8679edbe1f885bd2aedc548ff383853465b
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 2a0c43a..31cf1ac 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -1771,7 +1771,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
pnetwork = container_of(plist, struct wlan_network, list);
if (!pnetwork) {
RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
- ("%s return _FAIL:(pnetwork == NULL)\n",
+ ("%s: return _FAIL:(pnetwork == NULL)\n",
__func__));
ret = _FAIL;
goto exit;
@@ -1793,8 +1793,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
/* check for situation of _FW_LINKED */
if (check_fwstate(pmlmepriv, _FW_LINKED)) {
- DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!!!\n",
- __func__);
+ DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__);
rtw_disassoc_cmd23a(adapter, 0, true);
rtw_indicate_disconnect23a(adapter);

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:48 +0200
Subject: [069/249] staging: rtl8723au: Don't prepend debug console messages
with 'ERROR '
Origin: https://git.kernel.org/linus/fa862a7f799fcf60f9e0aed9c04fbfdeae518668
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/include/rtw_debug.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/include/rtw_debug.h b/drivers/staging/rtl8723au/include/rtw_debug.h
index a69d6e2..b6b0173 100644
--- a/drivers/staging/rtl8723au/include/rtw_debug.h
+++ b/drivers/staging/rtl8723au/include/rtw_debug.h
@@ -146,7 +146,7 @@
#define DBG_8723A_LEVEL(_level, fmt, arg...) \
do { \
if (_level <= GlobalDebugLevel23A) \
- pr_info(DRIVER_PREFIX"ERROR " fmt, ##arg);\
+ pr_info(DRIVER_PREFIX fmt, ##arg);\
} while (0)
#define DBG_8723A(...) \

View File

@ -0,0 +1,89 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:49 +0200
Subject: [070/249] staging: rtl8723au: Introduce
rtw_select_candidate_from_queue()
Origin: https://git.kernel.org/linus/0e634a029b4397c5a045f1d26fad6b7458386738
This splits a portion of rtw_select_and_join_from_scanned_queue23a()
into rtw_select_candidate_from_queue()
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 31 +++++++++++++++++++++----------
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 31cf1ac..9248f48 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -27,6 +27,9 @@
#include <rtw_ioctl_set.h>
#include <rtw_sreset.h>
+static struct wlan_network *
+rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv);
+
static void rtw_init_mlme_timer(struct rtw_adapter *padapter)
{
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
@@ -1754,18 +1757,15 @@ pmlmepriv->lock
*/
-int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
+static struct wlan_network *
+rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv)
{
- int ret;
- struct list_head *phead, *plist, *ptmp;
- struct rtw_adapter *adapter;
+ struct wlan_network *pnetwork, *candidate = NULL;
struct rtw_queue *queue = &pmlmepriv->scanned_queue;
- struct wlan_network *pnetwork;
- struct wlan_network *candidate = NULL;
+ struct list_head *phead, *plist, *ptmp;
spin_lock_bh(&pmlmepriv->scanned_queue.lock);
phead = get_list_head(queue);
- adapter = pmlmepriv->nic_hdl;
list_for_each_safe(plist, ptmp, phead) {
pnetwork = container_of(plist, struct wlan_network, list);
@@ -1773,13 +1773,26 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
("%s: return _FAIL:(pnetwork == NULL)\n",
__func__));
- ret = _FAIL;
goto exit;
}
rtw_check_join_candidate(pmlmepriv, &candidate, pnetwork);
}
+exit:
+ spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
+ return candidate;
+}
+
+int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
+{
+ struct rtw_adapter *adapter;
+ struct wlan_network *candidate = NULL;
+ int ret;
+
+ adapter = pmlmepriv->nic_hdl;
+
+ candidate = rtw_select_candidate_from_queue(pmlmepriv);
if (!candidate) {
DBG_8723A("%s: return _FAIL(candidate == NULL)\n", __func__);
ret = _FAIL;
@@ -1803,8 +1816,6 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
ret = rtw_joinbss_cmd23a(adapter, candidate);
exit:
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
-
return ret;
}

View File

@ -0,0 +1,119 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:50 +0200
Subject: [071/249] staging: rtl8723au: Introduce rtw_do_join_network()
Origin: https://git.kernel.org/linus/b66dad2d502080d05320b74f38d247bf1a9993fa
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 2 --
drivers/staging/rtl8723au/core/rtw_mlme.c | 46 ++++++++++++++++----------
drivers/staging/rtl8723au/include/rtw_mlme.h | 2 ++
3 files changed, 30 insertions(+), 20 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 28cfea5..d2ed9d1 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -79,8 +79,6 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
select_ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
if (select_ret == _SUCCESS) {
pmlmepriv->to_join = false;
- mod_timer(&pmlmepriv->assoc_timer,
- jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
} else {
if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
struct wlan_bssid_ex *pdev_network;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 9248f48..4a146fb 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -739,8 +739,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
if (rtw_select_and_join_from_scanned_queue23a(
pmlmepriv) == _SUCCESS) {
- mod_timer(&pmlmepriv->assoc_timer,
- jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
} else {
pdev_network = &adapter->registrypriv.dev_network;
pibss = adapter->registrypriv.dev_network.MacAddress;
@@ -782,14 +780,10 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
pmlmepriv->to_join = false;
ret = rtw_select_and_join_from_scanned_queue23a(
pmlmepriv);
- if (ret == _SUCCESS) {
- unsigned long e;
- e = msecs_to_jiffies(MAX_JOIN_TIMEOUT);
- mod_timer(&pmlmepriv->assoc_timer, jiffies + e);
- } else if (ret == 2) {/* there is no need to wait */
+ if (ret == 2) {/* there is no need to wait */
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
rtw_indicate_connect23a(adapter);
- } else {
+ } else if (ret != _SUCCESS) {
DBG_8723A("try_to_join, but select scanning "
"queue fail, to_roaming:%d\n",
adapter->mlmepriv.to_roaming);
@@ -1784,6 +1778,31 @@ exit:
return candidate;
}
+
+int rtw_do_join_network(struct rtw_adapter *adapter,
+ struct wlan_network *candidate)
+{
+ int ret;
+
+ /* check for situation of _FW_LINKED */
+ if (check_fwstate(&adapter->mlmepriv, _FW_LINKED)) {
+ DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__);
+
+ rtw_disassoc_cmd23a(adapter, 0, true);
+ rtw_indicate_disconnect23a(adapter);
+ rtw_free_assoc_resources23a(adapter, 0);
+ }
+ set_fwstate(&adapter->mlmepriv, _FW_UNDER_LINKING);
+
+ ret = rtw_joinbss_cmd23a(adapter, candidate);
+
+ if (ret == _SUCCESS)
+ mod_timer(&adapter->mlmepriv.assoc_timer,
+ jiffies + msecs_to_jiffies(MAX_JOIN_TIMEOUT));
+
+ return ret;
+}
+
int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
{
struct rtw_adapter *adapter;
@@ -1804,16 +1823,7 @@ int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv)
candidate->network.DSConfig);
}
- /* check for situation of _FW_LINKED */
- if (check_fwstate(pmlmepriv, _FW_LINKED)) {
- DBG_8723A("%s: _FW_LINKED while ask_for_joinbss!\n", __func__);
-
- rtw_disassoc_cmd23a(adapter, 0, true);
- rtw_indicate_disconnect23a(adapter);
- rtw_free_assoc_resources23a(adapter, 0);
- }
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
- ret = rtw_joinbss_cmd23a(adapter, candidate);
+ ret = rtw_do_join_network(adapter, candidate);
exit:
return ret;
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index c8e82bf..e48518f 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -240,6 +240,8 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *adapter);
void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
+int rtw_do_join_network(struct rtw_adapter *adapter,
+ struct wlan_network *candidate);
int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv);
int rtw_set_key23a(struct rtw_adapter *adapter,
struct security_priv *psecuritypriv, int keyid, u8 set_tx);

View File

@ -0,0 +1,57 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:51 +0200
Subject: [072/249] staging: rtl8723au: rtw_do_join23a(): Use __func__ to get
function name in debug messages
Origin: https://git.kernel.org/linus/557f9a452df4e0388fa48402b0e2673c45a579f8
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index d2ed9d1..f3dd995 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -35,8 +35,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
plist = phead->next;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("\n rtw_do_join23a: phead = %p; plist = %p\n\n\n",
- phead, plist));
+ ("%s: phead = %p; plist = %p\n\n\n", __func__, phead, plist));
pmlmepriv->cur_network.join_res = -2;
@@ -55,8 +54,8 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
if (pmlmepriv->LinkDetectInfo.bBusyTraffic == false ||
padapter->mlmepriv.to_roaming > 0) {
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("rtw_do_join23a(): site survey if scanned_queue "
- "is empty\n."));
+ ("%s: site survey if scanned_queue is empty\n",
+ __func__));
/* submit site_survey23a_cmd */
ret = rtw_sitesurvey_cmd23a(padapter,
&pmlmepriv->assoc_ssid, 1,
@@ -64,8 +63,8 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
if (ret != _SUCCESS) {
pmlmepriv->to_join = false;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("rtw_do_join23a(): site survey return "
- "error\n."));
+ ("%s: site survey return error\n",
+ __func__));
}
} else {
pmlmepriv->to_join = false;
@@ -134,7 +133,7 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
ret = rtw_sitesurvey_cmd23a(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
if (ret != _SUCCESS) {
pmlmepriv->to_join = false;
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("do_join(): site survey return error\n."));
+ RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("%s: site survey return error\n", __func__));
}
} else {
ret = _FAIL;

View File

@ -0,0 +1,25 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:52 +0200
Subject: [073/249] staging: rtl8723au: rtw_surveydone_event_callback23a():
Remove superfluous memset()
Origin: https://git.kernel.org/linus/ca3504be633315cb19b433bada574d109065e2fa
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 4a146fb..77a0a4a 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -751,8 +751,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
("switching to adhoc "
"master\n"));
- memset(&pdev_network->Ssid, 0,
- sizeof(struct cfg80211_ssid));
memcpy(&pdev_network->Ssid,
&pmlmepriv->assoc_ssid,
sizeof(struct cfg80211_ssid));

View File

@ -0,0 +1,221 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:53 +0200
Subject: [074/249] staging: rtl8723au: Consolidate duplicate adhoc joining
code into rtw_do_join_adhoc()
Origin: https://git.kernel.org/linus/fcc6020ae8915eedf8f9bd584f32a6f731ff1d14
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 40 +----------
drivers/staging/rtl8723au/core/rtw_mlme.c | 93 ++++++++++----------------
drivers/staging/rtl8723au/include/rtw_mlme.h | 1 +
3 files changed, 41 insertions(+), 93 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index f3dd995..a994893e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -25,7 +25,6 @@
int rtw_do_join23a(struct rtw_adapter *padapter)
{
struct list_head *plist, *phead;
- u8* pibss = NULL;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct rtw_queue *queue = &pmlmepriv->scanned_queue;
int ret = _SUCCESS;
@@ -80,43 +79,10 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
pmlmepriv->to_join = false;
} else {
if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- struct wlan_bssid_ex *pdev_network;
- /* submit createbss_cmd to change to a
- ADHOC_MASTER */
-
- /* pmlmepriv->lock has been acquired by
- caller... */
- pdev_network =
- &padapter->registrypriv.dev_network;
-
- pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
-
- pibss = padapter->registrypriv.dev_network.MacAddress;
-
- memcpy(&pdev_network->Ssid,
- &pmlmepriv->assoc_ssid,
- sizeof(struct cfg80211_ssid));
-
- rtw_update_registrypriv_dev_network23a(padapter);
-
- rtw_generate_random_ibss23a(pibss);
-
- if (rtw_createbss_cmd23a(padapter) != _SUCCESS) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_,
- _drv_err_,
- ("***Error =>do_goin: rtw_creat"
- "ebss_cmd status FAIL***\n"));
- ret = _FAIL;
+ /* switch to ADHOC_MASTER */
+ ret = rtw_do_join_adhoc(padapter);
+ if (ret != _SUCCESS)
goto exit;
- }
-
- pmlmepriv->to_join = false;
-
- RT_TRACE(_module_rtl871x_ioctl_set_c_,
- _drv_info_,
- ("***Error => rtw_select_and_join_from"
- "_scanned_queue FAIL under STA_Mode"
- "***\n "));
} else {
/* can't associate ; reset under-linking */
_clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 77a0a4a..81693c1 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -705,8 +705,6 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
{
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct wlan_bssid_ex *pdev_network;
- u8 *pibss;
spin_lock_bh(&pmlmepriv->lock);
@@ -738,39 +736,8 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
if (rtw_select_and_join_from_scanned_queue23a(
- pmlmepriv) == _SUCCESS) {
- } else {
- pdev_network = &adapter->registrypriv.dev_network;
- pibss = adapter->registrypriv.dev_network.MacAddress;
-
- _clr_fwstate_(pmlmepriv,
- _FW_UNDER_SURVEY);
-
- RT_TRACE(_module_rtl871x_mlme_c_,
- _drv_err_,
- ("switching to adhoc "
- "master\n"));
-
- memcpy(&pdev_network->Ssid,
- &pmlmepriv->assoc_ssid,
- sizeof(struct cfg80211_ssid));
-
- rtw_update_registrypriv_dev_network23a(
- adapter);
- rtw_generate_random_ibss23a(pibss);
-
- pmlmepriv->fw_state =
- WIFI_ADHOC_MASTER_STATE;
-
- if (rtw_createbss_cmd23a(adapter) !=
- _SUCCESS)
- RT_TRACE(_module_rtl871x_mlme_c_,
- _drv_err_,
- ("Error =>rtw_createbss_cmd23a"
- " status FAIL\n"));
-
- pmlmepriv->to_join = false;
- }
+ pmlmepriv) != _SUCCESS)
+ rtw_do_join_adhoc(adapter);
}
} else {
int ret;
@@ -1425,7 +1392,6 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
struct sta_info *psta;
struct wlan_network* pwlan;
struct wlan_bssid_ex *pdev_network;
- u8 *pibss;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct stadel_event *pstadel = (struct stadel_event *)pbuf;
struct sta_priv *pstapriv = &adapter->stapriv;
@@ -1496,30 +1462,11 @@ void rtw_stadel_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
/* re-create ibss */
pdev_network = &adapter->registrypriv.dev_network;
- pibss = adapter->registrypriv.dev_network.MacAddress;
memcpy(pdev_network, &tgt_network->network,
get_wlan_bssid_ex_sz(&tgt_network->network));
- memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid,
- sizeof(struct cfg80211_ssid));
-
- rtw_update_registrypriv_dev_network23a(adapter);
-
- rtw_generate_random_ibss23a(pibss);
-
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- set_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE);
- _clr_fwstate_(pmlmepriv, WIFI_ADHOC_STATE);
- }
-
- if (rtw_createbss_cmd23a(adapter) != _SUCCESS) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_,
- _drv_err_,
- ("***Error =>stadel_event_callback: "
- "rtw_createbss_cmd23a status "
- "FAIL***\n"));
- }
+ rtw_do_join_adhoc(adapter);
}
}
@@ -1777,6 +1724,40 @@ exit:
}
+int rtw_do_join_adhoc(struct rtw_adapter *adapter)
+{
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct wlan_bssid_ex *pdev_network;
+ u8 *ibss;
+ int ret;
+
+ pdev_network = &adapter->registrypriv.dev_network;
+ ibss = adapter->registrypriv.dev_network.MacAddress;
+
+ _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
+
+ RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
+ ("switching to adhoc master\n"));
+
+ memcpy(&pdev_network->Ssid, &pmlmepriv->assoc_ssid,
+ sizeof(struct cfg80211_ssid));
+
+ rtw_update_registrypriv_dev_network23a(adapter);
+ rtw_generate_random_ibss23a(ibss);
+
+ pmlmepriv->fw_state = WIFI_ADHOC_MASTER_STATE;
+
+ ret = rtw_createbss_cmd23a(adapter);
+ if (ret != _SUCCESS) {
+ RT_TRACE(_module_rtl871x_mlme_c_, _drv_err_,
+ ("Error =>rtw_createbss_cmd23a status FAIL\n"));
+ } else {
+ pmlmepriv->to_join = false;
+ }
+
+ return ret;
+}
+
int rtw_do_join_network(struct rtw_adapter *adapter,
struct wlan_network *candidate)
{
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index e48518f..79c3b3d 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -240,6 +240,7 @@ int rtw_init_mlme_priv23a(struct rtw_adapter *adapter);
void rtw_free_mlme_priv23a(struct mlme_priv *pmlmepriv);
+int rtw_do_join_adhoc(struct rtw_adapter *adapter);
int rtw_do_join_network(struct rtw_adapter *adapter,
struct wlan_network *candidate);
int rtw_select_and_join_from_scanned_queue23a(struct mlme_priv *pmlmepriv);

View File

@ -0,0 +1,51 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:54 +0200
Subject: [075/249] staging: rtl8723au: Remove no-op
rtw_get_encrypt_decrypt_from_registrypriv23a()
Origin: https://git.kernel.org/linus/3221bb536d92967ac204424140699a4fc23e0ac5
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 7 -------
drivers/staging/rtl8723au/include/rtw_mlme.h | 2 --
2 files changed, 9 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 81693c1..efb2161 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -1151,8 +1151,6 @@ void rtw_joinbss_event_prehandle23a(struct rtw_adapter *adapter, u8 *pbuf)
("joinbss event call back received with res=%d\n",
pnetwork->join_res));
- rtw_get_encrypt_decrypt_from_registrypriv23a(adapter);
-
if (pmlmepriv->assoc_ssid.ssid_len == 0) {
RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,
("@@@@@ joinbss event call back for Any SSid\n"));
@@ -2155,11 +2153,6 @@ void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter)
/* pdev_network->IELength = cpu_to_le32(sz); */
}
-void rtw_get_encrypt_decrypt_from_registrypriv23a(struct rtw_adapter* adapter)
-{
-
-}
-
/* the fucntion is at passive_level */
void rtw_joinbss_reset23a(struct rtw_adapter *padapter)
{
diff --git a/drivers/staging/rtl8723au/include/rtw_mlme.h b/drivers/staging/rtl8723au/include/rtw_mlme.h
index 79c3b3d..bc420ec 100644
--- a/drivers/staging/rtl8723au/include/rtw_mlme.h
+++ b/drivers/staging/rtl8723au/include/rtw_mlme.h
@@ -331,8 +331,6 @@ void rtw_init_registrypriv_dev_network23a(struct rtw_adapter *adapter);
void rtw_update_registrypriv_dev_network23a(struct rtw_adapter *adapter);
-void rtw_get_encrypt_decrypt_from_registrypriv23a(struct rtw_adapter *adapter);
-
void rtw_scan_timeout_handler23a(unsigned long data);
void rtw_dynamic_check_timer_handler(unsigned long data);

View File

@ -0,0 +1,45 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:55 +0200
Subject: [076/249] staging: rtl8723au: to_join will no be true if _FW_LINKED
is set
Origin: https://git.kernel.org/linus/e5c4db0959fd604baf95508e5ac6c62b72bf2c7a
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index efb2161..06dc897 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -705,6 +705,7 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
{
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+ int ret;
spin_lock_bh(&pmlmepriv->lock);
@@ -732,15 +733,13 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
if (pmlmepriv->to_join == true) {
if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- if (!check_fwstate(pmlmepriv, _FW_LINKED)) {
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
+ set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
- if (rtw_select_and_join_from_scanned_queue23a(
- pmlmepriv) != _SUCCESS)
- rtw_do_join_adhoc(adapter);
- }
+ ret = rtw_select_and_join_from_scanned_queue23a(
+ pmlmepriv);
+ if (ret != _SUCCESS)
+ rtw_do_join_adhoc(adapter);
} else {
- int ret;
set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
pmlmepriv->to_join = false;
ret = rtw_select_and_join_from_scanned_queue23a(

View File

@ -0,0 +1,33 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:56 +0200
Subject: [077/249] staging: rtl8723au: rtw_surveydone_event_callback23a(): We
always set _FW_UNDER_LINKING
Origin: https://git.kernel.org/linus/66ed1bc999eaa4357bd2d7098386e2284439098c
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 06dc897..d2b38f7 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -732,15 +732,13 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
rtw_set_signal_stat_timer(&adapter->recvpriv);
if (pmlmepriv->to_join == true) {
+ set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
ret = rtw_select_and_join_from_scanned_queue23a(
pmlmepriv);
if (ret != _SUCCESS)
rtw_do_join_adhoc(adapter);
} else {
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
pmlmepriv->to_join = false;
ret = rtw_select_and_join_from_scanned_queue23a(
pmlmepriv);

View File

@ -0,0 +1,28 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:57 +0200
Subject: [078/249] staging: rtl8723au:
rtw_select_and_join_from_scanned_queue23a() never returns 2
Origin: https://git.kernel.org/linus/85b3c5e48e6bd5e29272f9b1a4c1e2fd03eb21ab
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index d2b38f7..1557088 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -742,10 +742,7 @@ rtw_surveydone_event_callback23a(struct rtw_adapter *adapter, const u8 *pbuf)
pmlmepriv->to_join = false;
ret = rtw_select_and_join_from_scanned_queue23a(
pmlmepriv);
- if (ret == 2) {/* there is no need to wait */
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
- rtw_indicate_connect23a(adapter);
- } else if (ret != _SUCCESS) {
+ if (ret != _SUCCESS) {
DBG_8723A("try_to_join, but select scanning "
"queue fail, to_roaming:%d\n",
adapter->mlmepriv.to_roaming);

View File

@ -0,0 +1,53 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:58 +0200
Subject: [079/249] staging: rtl8723au: rtw_set_ssid(): Use
rtw_do_join_network()
Origin: https://git.kernel.org/linus/72795e9de7deae0952d1174cfb37cb869b582d29
We already have the wlan_network we wish to join, hence it's pointless
to go back to the scanned_queue and pull it out of there, before
running the join logic.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 25 +++++++++++++++++++----
1 file changed, 21 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 9c36f6c..e75e078 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2099,11 +2099,28 @@ handle_tkip_countermeasure:
pmlmepriv->assoc_by_bssid = false;
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY))
- pmlmepriv->to_join = true;
- else
- status = rtw_do_join23a(padapter);
+ pmlmepriv->to_join = true;
+
+ if (!check_fwstate(pmlmepriv, _FW_UNDER_SURVEY)) {
+ pmlmepriv->cur_network.join_res = -2;
+ status = rtw_do_join_network(padapter, newnetwork);
+ if (status == _SUCCESS) {
+ pmlmepriv->to_join = false;
+ } else {
+ if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
+ /* switch to ADHOC_MASTER */
+ status = rtw_do_join_adhoc(padapter);
+ if (status != _SUCCESS)
+ goto release_mlme_lock;
+ } else {
+ /* can't associate ; reset under-linking */
+ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
+ status = _FAIL;
+ pmlmepriv->to_join = false;
+ }
+ }
+ }
release_mlme_lock:
spin_unlock_bh(&pmlmepriv->lock);

View File

@ -0,0 +1,126 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:16:59 +0200
Subject: [080/249] staging: rtl8723au: rtw_do_join23a(): Don't start scanning
if network isn't found
Origin: https://git.kernel.org/linus/e89c05505ff6f2796a044931d622b6565f416e18
Don't start running network scans if trying to connect to a network
not in our cache. Let the 802.11 stack do it's job instead.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 85 ++++----------------------
1 file changed, 13 insertions(+), 72 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index a994893e..4f6d7f5 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -24,17 +24,8 @@
int rtw_do_join23a(struct rtw_adapter *padapter)
{
- struct list_head *plist, *phead;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- struct rtw_queue *queue = &pmlmepriv->scanned_queue;
- int ret = _SUCCESS;
-
- spin_lock_bh(&pmlmepriv->scanned_queue.lock);
- phead = get_list_head(queue);
- plist = phead->next;
-
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("%s: phead = %p; plist = %p\n\n\n", __func__, phead, plist));
+ int ret;
pmlmepriv->cur_network.join_res = -2;
@@ -42,75 +33,25 @@ int rtw_do_join23a(struct rtw_adapter *padapter)
pmlmepriv->to_join = true;
- if (list_empty(&queue->queue)) {
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
- /* when set_ssid/set_bssid for rtw_do_join23a(), but
- scanning queue is empty */
- /* we try to issue sitesurvey firstly */
-
- if (pmlmepriv->LinkDetectInfo.bBusyTraffic == false ||
- padapter->mlmepriv.to_roaming > 0) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_,
- ("%s: site survey if scanned_queue is empty\n",
- __func__));
- /* submit site_survey23a_cmd */
- ret = rtw_sitesurvey_cmd23a(padapter,
- &pmlmepriv->assoc_ssid, 1,
- NULL, 0);
- if (ret != _SUCCESS) {
- pmlmepriv->to_join = false;
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("%s: site survey return error\n",
- __func__));
- }
+ ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
+ if (ret == _SUCCESS) {
+ pmlmepriv->to_join = false;
+ } else {
+ if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
+ /* switch to ADHOC_MASTER */
+ ret = rtw_do_join_adhoc(padapter);
+ if (ret != _SUCCESS)
+ goto exit;
} else {
- pmlmepriv->to_join = false;
- ret = _FAIL;
- }
+ /* can't associate ; reset under-linking */
+ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
- goto exit;
- } else {
- int select_ret;
- spin_unlock_bh(&pmlmepriv->scanned_queue.lock);
- select_ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
- if (select_ret == _SUCCESS) {
+ ret = _FAIL;
pmlmepriv->to_join = false;
- } else {
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- /* switch to ADHOC_MASTER */
- ret = rtw_do_join_adhoc(padapter);
- if (ret != _SUCCESS)
- goto exit;
- } else {
- /* can't associate ; reset under-linking */
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
- /* when set_ssid/set_bssid for rtw_do_join23a(),
- but there are no desired bss in scanning
- queue */
- /* we try to issue sitesurvey firstly */
- if (pmlmepriv->LinkDetectInfo.bBusyTraffic ==
- false || padapter->mlmepriv.to_roaming > 0){
- /* DBG_8723A("rtw_do_join23a() when no "
- "desired bss in scanning queue\n");
- */
- ret = rtw_sitesurvey_cmd23a(padapter, &pmlmepriv->assoc_ssid, 1, NULL, 0);
- if (ret != _SUCCESS) {
- pmlmepriv->to_join = false;
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_, ("%s: site survey return error\n", __func__));
- }
- } else {
- ret = _FAIL;
- pmlmepriv->to_join = false;
- }
- }
}
}
exit:
-
return ret;
}

View File

@ -0,0 +1,139 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:00 +0200
Subject: [081/249] staging: rtl8723au: Move rtw_do_join23a() to rtw_mlme.c and
declare it static
Origin: https://git.kernel.org/linus/e007b4c77cd70c087929c1493cc4207dd5163748
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 33 --------------------
drivers/staging/rtl8723au/core/rtw_mlme.c | 38 +++++++++++++++++++++--
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 1 -
3 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 4f6d7f5..77835fc 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -22,39 +22,6 @@
#include <usb_ops.h>
#include <linux/ieee80211.h>
-int rtw_do_join23a(struct rtw_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- int ret;
-
- pmlmepriv->cur_network.join_res = -2;
-
- set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
-
- pmlmepriv->to_join = true;
-
- ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
- if (ret == _SUCCESS) {
- pmlmepriv->to_join = false;
- } else {
- if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
- /* switch to ADHOC_MASTER */
- ret = rtw_do_join_adhoc(padapter);
- if (ret != _SUCCESS)
- goto exit;
- } else {
- /* can't associate ; reset under-linking */
- _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
-
- ret = _FAIL;
- pmlmepriv->to_join = false;
- }
- }
-
-exit:
- return ret;
-}
-
int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid,
int ssid_max_num)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 1557088..bdebde7 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -29,6 +29,7 @@
static struct wlan_network *
rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv);
+static int rtw_do_join(struct rtw_adapter *padapter);
static void rtw_init_mlme_timer(struct rtw_adapter *padapter)
{
@@ -280,7 +281,7 @@ static void _rtw_roaming(struct rtw_adapter *padapter,
pmlmepriv->assoc_by_bssid = false;
while (1) {
- do_join_r = rtw_do_join23a(padapter);
+ do_join_r = rtw_do_join(padapter);
if (do_join_r == _SUCCESS)
break;
else {
@@ -1489,7 +1490,7 @@ void rtw23a_join_to_handler (unsigned long data)
if (adapter->mlmepriv.to_roaming != 0) {
/* try another */
DBG_8723A("%s try another roaming\n", __func__);
- do_join_r = rtw_do_join23a(adapter);
+ do_join_r = rtw_do_join(adapter);
if (do_join_r != _SUCCESS) {
DBG_8723A("%s roaming do_join return "
"%d\n", __func__ , do_join_r);
@@ -1688,6 +1689,39 @@ pmlmepriv->lock
*/
+static int rtw_do_join(struct rtw_adapter *padapter)
+{
+ struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
+ int ret;
+
+ pmlmepriv->cur_network.join_res = -2;
+
+ set_fwstate(pmlmepriv, _FW_UNDER_LINKING);
+
+ pmlmepriv->to_join = true;
+
+ ret = rtw_select_and_join_from_scanned_queue23a(pmlmepriv);
+ if (ret == _SUCCESS) {
+ pmlmepriv->to_join = false;
+ } else {
+ if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)) {
+ /* switch to ADHOC_MASTER */
+ ret = rtw_do_join_adhoc(padapter);
+ if (ret != _SUCCESS)
+ goto exit;
+ } else {
+ /* can't associate ; reset under-linking */
+ _clr_fwstate_(pmlmepriv, _FW_UNDER_LINKING);
+
+ ret = _FAIL;
+ pmlmepriv->to_join = false;
+ }
+ }
+
+exit:
+ return ret;
+}
+
static struct wlan_network *
rtw_select_candidate_from_queue(struct mlme_priv *pmlmepriv)
{
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
index 14a36f5..e84a422 100644
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
@@ -23,6 +23,5 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter);
s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-int rtw_do_join23a(struct rtw_adapter *padapter);
#endif

View File

@ -0,0 +1,27 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:01 +0200
Subject: [082/249] staging: rtl8723au: rtw_get_cur_max_rate23a(): Remove
duplicate fwstate checks
Origin: https://git.kernel.org/linus/8f9558b906bed222231fcfaed89cca36d0b56f01
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 77835fc..481f94c 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -100,10 +100,6 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
u16 mcs_rate = 0;
- if (!check_fwstate(pmlmepriv, _FW_LINKED) &&
- !check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE))
- return 0;
-
if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) {
p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
&pcur_bss->IEs[12],

View File

@ -0,0 +1,87 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:02 +0200
Subject: [083/249] staging: rtl8723au: rtw_get_cur_max_rate23a(): We are in N
mode if WLAN_EID_HT_CAPABILITY is present
Origin: https://git.kernel.org/linus/023b40d882d7bfee65612115fd736bafd285e8dc
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 63 ++++++++++++--------------
1 file changed, 29 insertions(+), 34 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index 481f94c..e2c40a6 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -100,41 +100,36 @@ u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
u16 mcs_rate = 0;
- if (pmlmeext->cur_wireless_mode & (WIRELESS_11_24N|WIRELESS_11_5N)) {
- p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY,
- &pcur_bss->IEs[12],
- pcur_bss->IELength - 12);
- if (p && p[1] > 0) {
- pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-
- memcpy(&mcs_rate, &pht_capie->mcs, 2);
-
- /* bw_40MHz = (pht_capie->cap_info&
- IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */
- /* cur_bwmod is updated by beacon, pmlmeinfo is
- updated by association response */
- bw_40MHz = (pmlmeext->cur_bwmode &&
- (pmlmeinfo->HT_info.ht_param &
- IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
-
- /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
- _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
- short_GI_20 =
- (pmlmeinfo->ht_cap.cap_info &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
- short_GI_40 =
- (pmlmeinfo->ht_cap.cap_info &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
-
- rf_type = rtl8723a_get_rf_type(adapter);
- max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
- pregistrypriv->cbw40_enable,
- short_GI_20, short_GI_40,
- &pmlmeinfo->ht_cap.mcs);
- }
+ p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12],
+ pcur_bss->IELength - 12);
+ if (p && p[1] > 0) {
+ pht_capie = (struct ieee80211_ht_cap *)(p + 2);
+
+ memcpy(&mcs_rate, &pht_capie->mcs, 2);
+
+ /* bw_40MHz = (pht_capie->cap_info&
+ IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */
+ /* cur_bwmod is updated by beacon, pmlmeinfo is
+ updated by association response */
+ bw_40MHz = (pmlmeext->cur_bwmode &&
+ (pmlmeinfo->HT_info.ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
+
+ /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
+ _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
+ short_GI_20 = (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
+ short_GI_40 = (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
+
+ rf_type = rtl8723a_get_rf_type(adapter);
+ max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
+ pregistrypriv->cbw40_enable,
+ short_GI_20, short_GI_40,
+ &pmlmeinfo->ht_cap.mcs);
} else {
- while ((pcur_bss->SupportedRates[i] != 0) &&
- (pcur_bss->SupportedRates[i] != 0xFF)) {
+ while (pcur_bss->SupportedRates[i] != 0 &&
+ pcur_bss->SupportedRates[i] != 0xFF) {
rate = pcur_bss->SupportedRates[i] & 0x7F;
if (rate>max_rate)
max_rate = rate;

View File

@ -0,0 +1,176 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:03 +0200
Subject: [084/249] staging: rtl8723au: Move rtw_get_cur_max_rate23a() to
ioctl_cfg80211.c
Origin: https://git.kernel.org/linus/27fd731ece203c37f0a3708cafc95e9cead8cd2d
This function has only one caller, so move it home and declare it static
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 63 -----------------------
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 1 -
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 59 ++++++++++++++++++++-
3 files changed, 58 insertions(+), 65 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index e2c40a6..b58cd9e 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -78,66 +78,3 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
exit:
return res;
}
-
-/*
-* rtw_get_cur_max_rate23a -
-* @adapter: pointer to _adapter structure
-*
-* Return 0 or 100Kbps
-*/
-u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter)
-{
- int i = 0;
- const u8 *p;
- u16 rate = 0, max_rate = 0;
- struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
- struct registry_priv *pregistrypriv = &adapter->registrypriv;
- struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
- struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
- struct ieee80211_ht_cap *pht_capie;
- u8 rf_type = 0;
- u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
- u16 mcs_rate = 0;
-
- p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12],
- pcur_bss->IELength - 12);
- if (p && p[1] > 0) {
- pht_capie = (struct ieee80211_ht_cap *)(p + 2);
-
- memcpy(&mcs_rate, &pht_capie->mcs, 2);
-
- /* bw_40MHz = (pht_capie->cap_info&
- IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */
- /* cur_bwmod is updated by beacon, pmlmeinfo is
- updated by association response */
- bw_40MHz = (pmlmeext->cur_bwmode &&
- (pmlmeinfo->HT_info.ht_param &
- IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
-
- /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
- _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
- short_GI_20 = (pmlmeinfo->ht_cap.cap_info &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
- short_GI_40 = (pmlmeinfo->ht_cap.cap_info &
- cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
-
- rf_type = rtl8723a_get_rf_type(adapter);
- max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
- pregistrypriv->cbw40_enable,
- short_GI_20, short_GI_40,
- &pmlmeinfo->ht_cap.mcs);
- } else {
- while (pcur_bss->SupportedRates[i] != 0 &&
- pcur_bss->SupportedRates[i] != 0xFF) {
- rate = pcur_bss->SupportedRates[i] & 0x7F;
- if (rate>max_rate)
- max_rate = rate;
- i++;
- }
-
- max_rate = max_rate * 10 / 2;
- }
-
- return max_rate;
-}
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
index e84a422..855fc40 100644
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
@@ -21,7 +21,6 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
struct cfg80211_ssid *pssid,
int ssid_max_num);
-u16 rtw_get_cur_max_rate23a(struct rtw_adapter *adapter);
s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
#endif
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index e75e078..a29718d 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1223,6 +1223,63 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
return 0;
}
+static u16 rtw_get_cur_max_rate(struct rtw_adapter *adapter)
+{
+ int i = 0;
+ const u8 *p;
+ u16 rate = 0, max_rate = 0;
+ struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
+ struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
+ struct registry_priv *pregistrypriv = &adapter->registrypriv;
+ struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct wlan_bssid_ex *pcur_bss = &pmlmepriv->cur_network.network;
+ struct ieee80211_ht_cap *pht_capie;
+ u8 rf_type = 0;
+ u8 bw_40MHz = 0, short_GI_20 = 0, short_GI_40 = 0;
+ u16 mcs_rate = 0;
+
+ p = cfg80211_find_ie(WLAN_EID_HT_CAPABILITY, &pcur_bss->IEs[12],
+ pcur_bss->IELength - 12);
+ if (p && p[1] > 0) {
+ pht_capie = (struct ieee80211_ht_cap *)(p + 2);
+
+ memcpy(&mcs_rate, &pht_capie->mcs, 2);
+
+ /* bw_40MHz = (pht_capie->cap_info&
+ IEEE80211_HT_CAP_SUP_WIDTH_20_40) ? 1:0; */
+ /* cur_bwmod is updated by beacon, pmlmeinfo is
+ updated by association response */
+ bw_40MHz = (pmlmeext->cur_bwmode &&
+ (pmlmeinfo->HT_info.ht_param &
+ IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) ? 1:0;
+
+ /* short_GI = (pht_capie->cap_info & (IEEE80211_HT_CAP
+ _SGI_20|IEEE80211_HT_CAP_SGI_40)) ? 1 : 0; */
+ short_GI_20 = (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_20)) ? 1:0;
+ short_GI_40 = (pmlmeinfo->ht_cap.cap_info &
+ cpu_to_le16(IEEE80211_HT_CAP_SGI_40)) ? 1:0;
+
+ rf_type = rtl8723a_get_rf_type(adapter);
+ max_rate = rtw_mcs_rate23a(rf_type, bw_40MHz &
+ pregistrypriv->cbw40_enable,
+ short_GI_20, short_GI_40,
+ &pmlmeinfo->ht_cap.mcs);
+ } else {
+ while (pcur_bss->SupportedRates[i] != 0 &&
+ pcur_bss->SupportedRates[i] != 0xFF) {
+ rate = pcur_bss->SupportedRates[i] & 0x7F;
+ if (rate>max_rate)
+ max_rate = rate;
+ i++;
+ }
+
+ max_rate = max_rate * 10 / 2;
+ }
+
+ return max_rate;
+}
+
static int cfg80211_rtw_get_station(struct wiphy *wiphy,
struct net_device *ndev,
const u8 *mac, struct station_info *sinfo)
@@ -1267,7 +1324,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy,
signal_strength);
sinfo->filled |= STATION_INFO_TX_BITRATE;
- sinfo->txrate.legacy = rtw_get_cur_max_rate23a(padapter);
+ sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter);
sinfo->filled |= STATION_INFO_RX_PACKETS;
sinfo->rx_packets = sta_rx_data_pkts(psta);

View File

@ -0,0 +1,47 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:04 +0200
Subject: [085/249] staging: rtl8723au: rtw_set_802_11_bssid23a_list_scan():
Use __func__ to print function name
Origin: https://git.kernel.org/linus/e9bb5ad46d85aa81036913b938d2f4410beceb85
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 10 ++++------
1 file changed, 4 insertions(+), 6 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
index b58cd9e..30287af 100644
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
@@ -30,8 +30,7 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
int res = _SUCCESS;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("+rtw_set_802_11_bssid23a_list_scan(), fw_state =%x\n",
- get_fwstate(pmlmepriv)));
+ ("+%s: fw_state =%x\n", __func__, get_fwstate(pmlmepriv)));
if (!padapter) {
res = _FAIL;
@@ -40,8 +39,7 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
if (padapter->hw_init_completed == false) {
res = _FAIL;
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("\n === rtw_set_802_11_bssid23a_list_scan:"
- "hw_init_completed == false ===\n"));
+ ("%s: hw_init_completed == false ===\n", __func__));
goto exit;
}
@@ -49,8 +47,8 @@ int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
(pmlmepriv->LinkDetectInfo.bBusyTraffic == true)) {
/* Scan or linking is in progress, do nothing. */
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("rtw_set_802_11_bssid23a_list_scan fail since fw_state "
- "= %x\n", get_fwstate(pmlmepriv)));
+ ("%s fail since fw_state = %x\n", __func__,
+ get_fwstate(pmlmepriv)));
if (check_fwstate(pmlmepriv,
(_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) {

View File

@ -0,0 +1,169 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:05 +0200
Subject: [086/249] staging: rtl8723au: Don't run regular scans in the driver,
the stack handles that
Origin: https://git.kernel.org/linus/073c9d47c33e549bfad1935d986710f1d1e57279
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/Makefile | 1 -
drivers/staging/rtl8723au/core/rtw_ioctl_set.c | 78 -----------------------
drivers/staging/rtl8723au/core/rtw_mlme.c | 21 ------
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 4 --
4 files changed, 104 deletions(-)
delete mode 100644 drivers/staging/rtl8723au/core/rtw_ioctl_set.c
diff --git a/drivers/staging/rtl8723au/Makefile b/drivers/staging/rtl8723au/Makefile
index a6316af..6f76c7b 100644
--- a/drivers/staging/rtl8723au/Makefile
+++ b/drivers/staging/rtl8723au/Makefile
@@ -1,7 +1,6 @@
r8723au-y := \
core/rtw_cmd.o \
core/rtw_efuse.o \
- core/rtw_ioctl_set.o \
core/rtw_ieee80211.o \
core/rtw_led.o \
core/rtw_mlme.o \
diff --git a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c b/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
deleted file mode 100644
index 30287af..0000000
--- a/drivers/staging/rtl8723au/core/rtw_ioctl_set.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2012 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#define _RTW_IOCTL_SET_C_
-
-#include <osdep_service.h>
-#include <drv_types.h>
-#include <rtw_ioctl_set.h>
-#include <hal_intf.h>
-
-#include <usb_ops.h>
-#include <linux/ieee80211.h>
-
-int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
- struct cfg80211_ssid *pssid,
- int ssid_max_num)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- int res = _SUCCESS;
-
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("+%s: fw_state =%x\n", __func__, get_fwstate(pmlmepriv)));
-
- if (!padapter) {
- res = _FAIL;
- goto exit;
- }
- if (padapter->hw_init_completed == false) {
- res = _FAIL;
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("%s: hw_init_completed == false ===\n", __func__));
- goto exit;
- }
-
- if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY | _FW_UNDER_LINKING) ||
- (pmlmepriv->LinkDetectInfo.bBusyTraffic == true)) {
- /* Scan or linking is in progress, do nothing. */
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("%s fail since fw_state = %x\n", __func__,
- get_fwstate(pmlmepriv)));
-
- if (check_fwstate(pmlmepriv,
- (_FW_UNDER_SURVEY|_FW_UNDER_LINKING))) {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("\n###_FW_UNDER_SURVEY|_FW_UNDER_LINKING\n"));
- } else {
- RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_err_,
- ("\n###pmlmepriv->sitesurveyctrl.traffic_"
- "busy == true\n"));
- }
- } else {
- if (rtw_is_scan_deny(padapter)) {
- DBG_8723A("%s(%s): scan deny\n",
- __func__, padapter->pnetdev->name);
- return _SUCCESS;
- }
-
- spin_lock_bh(&pmlmepriv->lock);
-
- res = rtw_sitesurvey_cmd23a(padapter, pssid, ssid_max_num,
- NULL, 0);
-
- spin_unlock_bh(&pmlmepriv->lock);
- }
-exit:
- return res;
-}
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index bdebde7..e89d019 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -1538,26 +1538,9 @@ void rtw_scan_timeout_handler23a(unsigned long data)
rtw_cfg80211_indicate_scan_done(wdev_to_priv(adapter->rtw_wdev), true);
}
-static void rtw_auto_scan_handler(struct rtw_adapter *padapter)
-{
- struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
-
- /* auto site survey per 60sec */
- if (pmlmepriv->scan_interval > 0) {
- pmlmepriv->scan_interval--;
- if (pmlmepriv->scan_interval == 0) {
- DBG_8723A("%s\n", __func__);
- rtw_set_802_11_bssid23a_list_scan(padapter, NULL, 0);
- /* 30*2 sec = 60sec */
- pmlmepriv->scan_interval = SCAN_INTERVAL;
- }
- }
-}
-
void rtw_dynamic_check_timer_handler(unsigned long data)
{
struct rtw_adapter *adapter = (struct rtw_adapter *)data;
- struct registry_priv *pregistrypriv = &adapter->registrypriv;
if (adapter->hw_init_completed == false)
goto out;
@@ -1571,10 +1554,6 @@ void rtw_dynamic_check_timer_handler(unsigned long data)
rtw_dynamic_chk_wk_cmd23a(adapter);
- if (pregistrypriv->wifi_spec == 1) {
- /* auto site survey */
- rtw_auto_scan_handler(adapter);
- }
out:
mod_timer(&adapter->mlmepriv.dynamic_chk_timer,
jiffies + msecs_to_jiffies(2000));
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
index 855fc40..6c102dc 100644
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
@@ -17,10 +17,6 @@
#include <drv_types.h>
-int rtw_set_802_11_bssid23a_list_scan(struct rtw_adapter *padapter,
- struct cfg80211_ssid *pssid,
- int ssid_max_num);
-
s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
#endif

View File

@ -0,0 +1,32 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:06 +0200
Subject: [087/249] staging: rtl8723au: Quiet unused variable warning when
building with CONFIG_8723AU_AP_MODE=n
Origin: https://git.kernel.org/linus/da23732c6320dd1dfe802191532072da8e967833
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 59047ad..0d52699 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -2931,7 +2931,6 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
unsigned char *pframe;
struct ieee80211_mgmt *mgmt;
unsigned int val32;
- unsigned short val16;
u16 auth_algo;
int use_shared_key = 0;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -2960,6 +2959,7 @@ static void issue_auth(struct rtw_adapter *padapter, struct sta_info *psta,
if (psta) { /* for AP mode */
#ifdef CONFIG_8723AU_AP_MODE
+ unsigned short val16;
ether_addr_copy(mgmt->da, psta->hwaddr);
ether_addr_copy(mgmt->sa, myid(&padapter->eeprompriv));
ether_addr_copy(mgmt->bssid, myid(&padapter->eeprompriv));

View File

@ -0,0 +1,120 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:07 +0200
Subject: [088/249] staging: rtl8723au: Move FillH2CCmd() prototype to
rtl8723a_cmd.h where it really belongs
Origin: https://git.kernel.org/linus/379878662637a1247f19caf938a22918d702b14b
As an added bonus, remove the now obsolete rtw_ioctl_set.h
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 1 -
.../staging/rtl8723au/hal/rtl8723a_bt-coexist.c | 1 -
drivers/staging/rtl8723au/hal/rtl8723a_cmd.c | 1 -
drivers/staging/rtl8723au/include/rtl8723a_cmd.h | 2 ++
drivers/staging/rtl8723au/include/rtw_ioctl_set.h | 22 ----------------------
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 1 -
drivers/staging/rtl8723au/os_dep/mlme_linux.c | 1 -
7 files changed, 2 insertions(+), 27 deletions(-)
delete mode 100644 drivers/staging/rtl8723au/include/rtw_ioctl_set.h
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index e89d019..ab95ef0 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -24,7 +24,6 @@
#include <linux/ieee80211.h>
#include <wifi.h>
#include <wlan_bssdef.h>
-#include <rtw_ioctl_set.h>
#include <rtw_sreset.h>
static struct wlan_network *
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
index bb86986..9054a98 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_bt-coexist.c
@@ -14,7 +14,6 @@
******************************************************************************/
#include <drv_types.h>
#include <rtl8723a_hal.h>
-#include <rtw_ioctl_set.h>
#include <usb_ops_linux.h>
#define DIS_PS_RX_BCN
diff --git a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
index e873791..6e1fed2 100644
--- a/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
+++ b/drivers/staging/rtl8723au/hal/rtl8723a_cmd.c
@@ -18,7 +18,6 @@
#include <drv_types.h>
#include <recv_osdep.h>
#include <mlme_osdep.h>
-#include <rtw_ioctl_set.h>
#include <rtl8723a_hal.h>
#include <usb_ops_linux.h>
diff --git a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h
index 900bacc..e1ecbd0 100644
--- a/drivers/staging/rtl8723au/include/rtl8723a_cmd.h
+++ b/drivers/staging/rtl8723au/include/rtl8723a_cmd.h
@@ -155,4 +155,6 @@ void rtl8723a_add_rateatid(struct rtw_adapter *padapter, u32 bitmap, u8 arg, u8
void CheckFwRsvdPageContent23a(struct rtw_adapter *padapter);
+int FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
+
#endif
diff --git a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h b/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
deleted file mode 100644
index 6c102dc..0000000
--- a/drivers/staging/rtl8723au/include/rtw_ioctl_set.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/******************************************************************************
- *
- * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of version 2 of the GNU General Public License as
- * published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- ******************************************************************************/
-#ifndef __RTW_IOCTL_SET_H_
-#define __RTW_IOCTL_SET_H_
-
-#include <drv_types.h>
-
-s32 FillH2CCmd(struct rtw_adapter *padapter, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer);
-
-#endif
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index a29718d..5f0a6c7 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -16,7 +16,6 @@
#include <osdep_service.h>
#include <drv_types.h>
-#include <rtw_ioctl_set.h>
#include <xmit_osdep.h>
#include "ioctl_cfg80211.h"
diff --git a/drivers/staging/rtl8723au/os_dep/mlme_linux.c b/drivers/staging/rtl8723au/os_dep/mlme_linux.c
index ac618fb..ca24369 100644
--- a/drivers/staging/rtl8723au/os_dep/mlme_linux.c
+++ b/drivers/staging/rtl8723au/os_dep/mlme_linux.c
@@ -18,7 +18,6 @@
#include <osdep_service.h>
#include <drv_types.h>
#include <mlme_osdep.h>
-#include <rtw_ioctl_set.h>
static struct rt_pmkid_list backupPMKIDList[NUM_PMKID_CACHE];

View File

@ -0,0 +1,86 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Mon, 9 Jun 2014 15:17:08 +0200
Subject: [089/249] staging: rtl8723au: rtw_cfg80211_set_wpa_ie(): Avoid
pointless memcpy
Origin: https://git.kernel.org/linus/7579a7e47d6572455c48f822dd47bd1993ec9d95
There is no point copying a buffer, just to scan it and then free it
again.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 21 +++++++--------------
1 file changed, 7 insertions(+), 14 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 5f0a6c7..9ad049c 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -1806,7 +1806,6 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
size_t ielen)
{
const u8 *wps_ie;
- u8 *buf = NULL;
int group_cipher = 0, pairwise_cipher = 0;
int ret = 0;
const u8 *pwpa, *pwpa2;
@@ -1822,19 +1821,14 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
ret = -EINVAL;
goto exit;
}
- buf = kmemdup(pie, ielen, GFP_KERNEL);
- if (buf == NULL) {
- ret = -ENOMEM;
- goto exit;
- }
/* dump */
DBG_8723A("set wpa_ie(length:%zu):\n", ielen);
for (i = 0; i < ielen; i = i + 8)
- DBG_8723A("0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x 0x%.2x\n",
- buf[i], buf[i + 1],
- buf[i + 2], buf[i + 3], buf[i + 4],
- buf[i + 5], buf[i + 6], buf[i + 7]);
+ DBG_8723A("0x%.2x 0x%.2x 0x%.2x 0x%.2x "
+ "0x%.2x 0x%.2x 0x%.2x 0x%.2x\n",
+ pie[i], pie[i + 1], pie[i + 2], pie[i + 3],
+ pie[i + 4], pie[i + 5], pie[i + 6], pie[i + 7]);
if (ielen < RSN_HEADER_LEN) {
RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_,
("Ie len too short %d\n", (int)ielen));
@@ -1844,7 +1838,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
pwpa = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
WLAN_OUI_TYPE_MICROSOFT_WPA,
- buf, ielen);
+ pie, ielen);
if (pwpa && pwpa[1] > 0) {
if (rtw_parse_wpa_ie23a(pwpa, pwpa[1] + 2, &group_cipher,
&pairwise_cipher, NULL) == _SUCCESS) {
@@ -1859,7 +1853,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
}
}
- pwpa2 = cfg80211_find_ie(WLAN_EID_RSN, buf, ielen);
+ pwpa2 = cfg80211_find_ie(WLAN_EID_RSN, pie, ielen);
if (pwpa2 && pwpa2[1] > 0) {
if (rtw_parse_wpa2_ie23a (pwpa2, pwpa2[1] + 2, &group_cipher,
&pairwise_cipher, NULL) == _SUCCESS) {
@@ -1939,7 +1933,7 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
wps_ie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,
WLAN_OUI_TYPE_MICROSOFT_WPS,
- buf, ielen);
+ pie, ielen);
if (wps_ie && wps_ie[1] > 0) {
DBG_8723A("got wps_ie, wps_ielen:%u\n", wps_ie[1]);
padapter->securitypriv.wps_ie_len = wps_ie[1];
@@ -1967,7 +1961,6 @@ static int rtw_cfg80211_set_wpa_ie(struct rtw_adapter *padapter, const u8 *pie,
padapter->securitypriv.ndisauthtype));
exit:
- kfree(buf);
if (ret)
_clr_fwstate_(&padapter->mlmepriv, WIFI_UNDER_WPS);
return ret;

View File

@ -0,0 +1,27 @@
From: Geert Uytterhoeven <geert@linux-m68k.org>
Date: Wed, 11 Jun 2014 16:57:46 +0200
Subject: [090/249] staging: rtl8723au: Add compiler check for -Wtype-limits
Origin: https://git.kernel.org/linus/ee264346fa08395aa6e846b72e7b3987e959f053
Gcc versions before 4.3 do not support -Wtype-limits:
cc1: error: unrecognized command line option "-Wtype-limits"
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/Makefile | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/Makefile b/drivers/staging/rtl8723au/Makefile
index 6f76c7b..a9aae21 100644
--- a/drivers/staging/rtl8723au/Makefile
+++ b/drivers/staging/rtl8723au/Makefile
@@ -52,4 +52,5 @@ r8723au-$(CONFIG_8723AU_AP_MODE) += core/rtw_ap.o
obj-$(CONFIG_R8723AU) := r8723au.o
-ccflags-y += -Wtype-limits -D__CHECK_ENDIAN__ -I$(src)/include
+ccflags-y += $(call cc-option,-Wtype-limits,)
+ccflags-y += -D__CHECK_ENDIAN__ -I$(src)/include

View File

@ -0,0 +1,102 @@
From: Sachin Kamat <sachin.kamat@linaro.org>
Date: Thu, 29 May 2014 17:05:18 +0530
Subject: [091/249] staging: rtl8723au: Remove redundant casting in
rtw_mlme_ext.c
Origin: https://git.kernel.org/linus/248c95915277edbe632ab171b0b082c2ba1af935
Casting value returned by kzalloc is useless.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 27 ++++++++++-----------------
1 file changed, 10 insertions(+), 17 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 0d52699..84ca06b 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4873,8 +4873,7 @@ void report_survey_event23a(struct rtw_adapter *padapter,
pmlmeext = &padapter->mlmeextpriv;
pcmdpriv = &padapter->cmdpriv;
- pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!pcmd_obj)
return;
@@ -4925,8 +4924,7 @@ void report_surveydone_event23a(struct rtw_adapter *padapter)
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!pcmd_obj)
return;
@@ -4970,8 +4968,7 @@ void report_join_res23a(struct rtw_adapter *padapter, int res)
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!pcmd_obj)
return;
@@ -5021,8 +5018,7 @@ void report_del_sta_event23a(struct rtw_adapter *padapter,
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!pcmd_obj)
return;
@@ -5076,8 +5072,7 @@ void report_add_sta_event23a(struct rtw_adapter *padapter,
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
- pcmd_obj = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ pcmd_obj = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!pcmd_obj)
return;
@@ -5493,13 +5488,12 @@ static void survey_timer_hdl(unsigned long data)
pmlmeext->scan_abort = false;/* reset */
}
- ph2c = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj),
- GFP_ATOMIC);
+ ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!ph2c)
goto exit_survey_timer_hdl;
- psurveyPara = (struct sitesurvey_parm*)
- kzalloc(sizeof(struct sitesurvey_parm), GFP_ATOMIC);
+ psurveyPara = kzalloc(sizeof(struct sitesurvey_parm),
+ GFP_ATOMIC);
if (!psurveyPara) {
kfree(ph2c);
goto exit_survey_timer_hdl;
@@ -6173,14 +6167,13 @@ int set_tx_beacon_cmd23a(struct rtw_adapter* padapter)
u8 res = _SUCCESS;
int len_diff = 0;
- ph2c = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
+ ph2c = kzalloc(sizeof(struct cmd_obj), GFP_ATOMIC);
if (!ph2c) {
res = _FAIL;
goto exit;
}
- ptxBeacon_parm = (struct Tx_Beacon_param *)
- kzalloc(sizeof(struct Tx_Beacon_param), GFP_ATOMIC);
+ ptxBeacon_parm = kzalloc(sizeof(struct Tx_Beacon_param), GFP_ATOMIC);
if (!ptxBeacon_parm) {
kfree(ph2c);
res = _FAIL;

View File

@ -0,0 +1,26 @@
From: Sachin Kamat <sachin.kamat@linaro.org>
Date: Thu, 29 May 2014 17:05:19 +0530
Subject: [092/249] staging: rtl8723au: Remove redundant casting in rtw_mlme.c
Origin: https://git.kernel.org/linus/db5767a3f9715540411d9c1cf2dfb4aeec366893
Casting value returned by kzalloc is useless.
Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index ab95ef0..799338b 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -1820,7 +1820,7 @@ int rtw_set_auth23a(struct rtw_adapter * adapter,
struct cmd_priv *pcmdpriv = &adapter->cmdpriv;
int res = _SUCCESS;
- pcmd = (struct cmd_obj *)kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
+ pcmd = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
if (!pcmd) {
res = _FAIL; /* try again */
goto exit;

View File

@ -0,0 +1,33 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:16 +0200
Subject: [093/249] staging: rtl8723au: rtw_cfg80211_inform_bss(): timestamp
isn't used
Origin: https://git.kernel.org/linus/8a3adc24806060b4ade2bc6bd172077a57455f98
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 9ad049c..f102e03 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -249,7 +249,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
/* struct ieee80211_supported_band *band; */
u16 channel;
u32 freq;
- u64 notify_timestamp;
u16 notify_capability;
u16 notify_interval;
u8 *notify_ie;
@@ -280,8 +279,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
notify_channel = ieee80211_get_channel(wiphy, freq);
- notify_timestamp = jiffies_to_msecs(jiffies) * 1000; /* uSec */
-
notify_interval =
get_unaligned_le16(
rtw_get_beacon_interval23a_from_ie(pnetwork->network.IEs));

View File

@ -0,0 +1,107 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:17 +0200
Subject: [094/249] staging: rtl8723au: rtw_cfg80211_inform_bss(): Use
cfg80211_inform_bss()
Origin: https://git.kernel.org/linus/4062f7aa8f867e515267aeec62a152d2cf763a1c
There is no point in creating a fake beacon frame to call
cfg80211_inform_bss_frame() when we can just call
cfg80211_inform_bss() with the parameters we were sticking into the
fake frame.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 47 +++--------------------
1 file changed, 5 insertions(+), 42 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index f102e03..0a0c58d 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -239,14 +239,12 @@ rtw_cfg80211_default_mgmt_stypes[NUM_NL80211_IFTYPES] = {
},
};
-#define MAX_BSSINFO_LEN 1000
static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
struct wlan_network *pnetwork)
{
int ret = 0;
struct ieee80211_channel *notify_channel;
struct cfg80211_bss *bss;
- /* struct ieee80211_supported_band *band; */
u16 channel;
u32 freq;
u16 notify_capability;
@@ -254,21 +252,10 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
u8 *notify_ie;
size_t notify_ielen;
s32 notify_signal;
- u8 buf[MAX_BSSINFO_LEN], *pbuf;
- size_t len;
- struct ieee80211_hdr *pwlanhdr;
struct wireless_dev *wdev = padapter->rtw_wdev;
struct wiphy *wiphy = wdev->wiphy;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
- /* DBG_8723A("%s\n", __func__); */
-
- if (pnetwork->network.IELength > MAX_IE_SZ) {
- DBG_8723A("%s IE Length too long > %d byte\n", __func__,
- MAX_IE_SZ);
- goto exit;
- }
-
channel = pnetwork->network.DSConfig;
if (channel <= RTW_CH_MAX_2G_CHANNEL)
freq = ieee80211_channel_to_frequency(channel,
@@ -299,35 +286,12 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
} else {
notify_signal = 100 * translate_percentage_to_dbm(pnetwork->network.PhyInfo.SignalStrength); /* dbm */
}
- pbuf = buf;
-
- pwlanhdr = (struct ieee80211_hdr *)pbuf;
-
- pwlanhdr->seq_ctrl = 0;
-
- if (pnetwork->network.reserved == 1) { /* WIFI_BEACON */
- eth_broadcast_addr(pwlanhdr->addr1);
- pwlanhdr->frame_control = cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_BEACON);
- } else {
- ether_addr_copy(pwlanhdr->addr1, myid(&padapter->eeprompriv));
- pwlanhdr->frame_control =
- cpu_to_le16(IEEE80211_FTYPE_MGMT |
- IEEE80211_STYPE_PROBE_RESP);
- }
-
- ether_addr_copy(pwlanhdr->addr2, pnetwork->network.MacAddress);
- ether_addr_copy(pwlanhdr->addr3, pnetwork->network.MacAddress);
- pbuf += sizeof(struct ieee80211_hdr_3addr);
- len = sizeof(struct ieee80211_hdr_3addr);
-
- memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength);
- len += pnetwork->network.IELength;
-
- bss = cfg80211_inform_bss_frame(wiphy, notify_channel,
- (struct ieee80211_mgmt *)buf, len,
- notify_signal, GFP_ATOMIC);
+ bss = cfg80211_inform_bss(wiphy, notify_channel,
+ pnetwork->network.MacAddress, 0,
+ notify_capability, notify_interval,
+ notify_ie, notify_ielen,
+ notify_signal, GFP_ATOMIC);
if (unlikely(!bss)) {
DBG_8723A("rtw_cfg80211_inform_bss error\n");
@@ -336,7 +300,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
cfg80211_put_bss(wiphy, bss);
-exit:
return ret;
}

View File

@ -0,0 +1,75 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:18 +0200
Subject: [095/249] staging: rtl8723au: Save timestamp for network in
collect_bss_info() and report it to the stack
Origin: https://git.kernel.org/linus/993c52ba61a72a8c669c8091fa75c9514776b3f7
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 4 ++++
drivers/staging/rtl8723au/include/wlan_bssdef.h | 1 +
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 3 ++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 84ca06b..823489b 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4281,6 +4281,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.beacon.beacon_int);
+ bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
} else if (ieee80211_is_probe_req(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_req.variable);
@@ -4288,6 +4289,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
capab_info = 0;
bssid->BeaconPeriod =
padapter->registrypriv.dev_network.BeaconPeriod;
+ bssid->tsf = 0;
} else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_resp.variable);
@@ -4295,12 +4297,14 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
+ bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp);
} else {
bssid->reserved = 0;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
padapter->registrypriv.dev_network.BeaconPeriod;
+ bssid->tsf = 0;
}
ie_offset -= offsetof(struct ieee80211_mgmt, u);
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h
index b717687..60455e6 100644
--- a/drivers/staging/rtl8723au/include/wlan_bssdef.h
+++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h
@@ -93,6 +93,7 @@ struct wlan_bssid_ex {
u32 Privacy;
long Rssi;/* in dBM, raw data , get from PHY) */
u16 BeaconPeriod; /* units are Kusec */
+ u64 tsf;
u32 ATIMWindow; /* units are Kusec */
u32 DSConfig; /* Frequency, units are kHz */
enum nl80211_iftype ifmode;
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 0a0c58d..2621a0e 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -288,7 +288,8 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
}
bss = cfg80211_inform_bss(wiphy, notify_channel,
- pnetwork->network.MacAddress, 0,
+ pnetwork->network.MacAddress,
+ pnetwork->network.tsf,
notify_capability, notify_interval,
notify_ie, notify_ielen,
notify_signal, GFP_ATOMIC);

View File

@ -0,0 +1,47 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:19 +0200
Subject: [096/249] staging: rtl8723au: rtw_cfg80211_inform_bss(): Report the
beacon interval already retrieved
Origin: https://git.kernel.org/linus/2620e339e84320814eb9b4c46d9295703ada1010
Use the beacon interval we already retreived in collect_bss_info()
instead of pulling it out of the saved IE array again.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 2621a0e..ff838fc 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -248,7 +248,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
u16 channel;
u32 freq;
u16 notify_capability;
- u16 notify_interval;
u8 *notify_ie;
size_t notify_ielen;
s32 notify_signal;
@@ -266,9 +265,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
notify_channel = ieee80211_get_channel(wiphy, freq);
- notify_interval =
- get_unaligned_le16(
- rtw_get_beacon_interval23a_from_ie(pnetwork->network.IEs));
notify_capability =
get_unaligned_le16(
rtw_get_capability23a_from_ie(pnetwork->network.IEs));
@@ -290,7 +286,8 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
bss = cfg80211_inform_bss(wiphy, notify_channel,
pnetwork->network.MacAddress,
pnetwork->network.tsf,
- notify_capability, notify_interval,
+ notify_capability,
+ pnetwork->network.BeaconPeriod,
notify_ie, notify_ielen,
notify_signal, GFP_ATOMIC);

View File

@ -0,0 +1,93 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:20 +0200
Subject: [097/249] staging: rtl8723au: collect_bss_info(): Save capability in
struct wlan_bssid_ex
Origin: https://git.kernel.org/linus/53c660006766aef0c4d423cd0990ead2537bed6a
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 16 +++++++++-------
drivers/staging/rtl8723au/include/wlan_bssdef.h | 1 +
2 files changed, 10 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index 823489b..a91198f 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4262,7 +4262,6 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &pmlmeext->mlmext_info;
struct wlan_bssid_ex *bssid;
- u16 capab_info;
length = skb->len - sizeof(struct ieee80211_hdr_3addr);
@@ -4278,7 +4277,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
if (ieee80211_is_beacon(mgmt->frame_control)) {
bssid->reserved = 1;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
- capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
+ bssid->capability =
+ get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.beacon.beacon_int);
bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
@@ -4286,7 +4286,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_req.variable);
bssid->reserved = 2;
- capab_info = 0;
+ bssid->capability = 0;
bssid->BeaconPeriod =
padapter->registrypriv.dev_network.BeaconPeriod;
bssid->tsf = 0;
@@ -4294,14 +4294,16 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
ie_offset = offsetof(struct ieee80211_mgmt,
u.probe_resp.variable);
bssid->reserved = 3;
- capab_info = get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
+ bssid->capability =
+ get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
bssid->BeaconPeriod =
get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp);
} else {
bssid->reserved = 0;
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
- capab_info = get_unaligned_le16(&mgmt->u.beacon.capab_info);
+ bssid->capability =
+ get_unaligned_le16(&mgmt->u.beacon.capab_info);
bssid->BeaconPeriod =
padapter->registrypriv.dev_network.BeaconPeriod;
bssid->tsf = 0;
@@ -4396,7 +4398,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
return bssid;
}
- if (capab_info & WLAN_CAPABILITY_ESS) {
+ if (bssid->capability & WLAN_CAPABILITY_ESS) {
bssid->ifmode = NL80211_IFTYPE_STATION;
ether_addr_copy(bssid->MacAddress, mgmt->sa);
} else {
@@ -4404,7 +4406,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
ether_addr_copy(bssid->MacAddress, mgmt->bssid);
}
- if (capab_info & WLAN_CAPABILITY_PRIVACY)
+ if (bssid->capability & WLAN_CAPABILITY_PRIVACY)
bssid->Privacy = 1;
else
bssid->Privacy = 0;
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h
index 60455e6..c43c855 100644
--- a/drivers/staging/rtl8723au/include/wlan_bssdef.h
+++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h
@@ -93,6 +93,7 @@ struct wlan_bssid_ex {
u32 Privacy;
long Rssi;/* in dBM, raw data , get from PHY) */
u16 BeaconPeriod; /* units are Kusec */
+ u16 capability;
u64 tsf;
u32 ATIMWindow; /* units are Kusec */
u32 DSConfig; /* Frequency, units are kHz */

View File

@ -0,0 +1,47 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:21 +0200
Subject: [098/249] staging: rtl8723au: rtw_cfg80211_inform_bss(): Use the
capability info we already saved
Origin: https://git.kernel.org/linus/11a80e8877bf2db8a13b68018049b48e367bd76e
No point in pulling capability info out of the IE array when it's
already stored in struct wlan_bssid_ex
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index ff838fc..4eef408 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -247,7 +247,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
struct cfg80211_bss *bss;
u16 channel;
u32 freq;
- u16 notify_capability;
u8 *notify_ie;
size_t notify_ielen;
s32 notify_signal;
@@ -265,10 +264,6 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
notify_channel = ieee80211_get_channel(wiphy, freq);
- notify_capability =
- get_unaligned_le16(
- rtw_get_capability23a_from_ie(pnetwork->network.IEs));
-
notify_ie = pnetwork->network.IEs + _FIXED_IE_LENGTH_;
notify_ielen = pnetwork->network.IELength - _FIXED_IE_LENGTH_;
@@ -286,7 +281,7 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
bss = cfg80211_inform_bss(wiphy, notify_channel,
pnetwork->network.MacAddress,
pnetwork->network.tsf,
- notify_capability,
+ pnetwork->network.capability,
pnetwork->network.BeaconPeriod,
notify_ie, notify_ielen,
notify_signal, GFP_ATOMIC);

View File

@ -0,0 +1,138 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:22 +0200
Subject: [099/249] staging: rtl8723au: struct wlan_bssid_ex: Rename
BeaconPeriod to beacon_interval
Origin: https://git.kernel.org/linus/143ced27acaa948cbcf34cafe0bca3c926fd35fc
This is to be more consistent mapping the names in wlan_bssid_ex to
those in struct ieee80211_mgmt.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 4 ++--
drivers/staging/rtl8723au/core/rtw_ieee80211.c | 2 +-
drivers/staging/rtl8723au/core/rtw_mlme.c | 2 +-
drivers/staging/rtl8723au/core/rtw_mlme_ext.c | 12 ++++++------
drivers/staging/rtl8723au/include/wlan_bssdef.h | 2 +-
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 2 +-
6 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index a52662e..73161b9 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -655,7 +655,7 @@ static void start_bss_network(struct rtw_adapter *padapter, u8 *pbuf)
struct ieee80211_ht_operation *pht_info = NULL;
int bcn_fixed_size;
- bcn_interval = (u16)pnetwork->BeaconPeriod;
+ bcn_interval = (u16)pnetwork->beacon_interval;
cur_channel = pnetwork->DSConfig;
cur_bwmode = HT_CHANNEL_WIDTH_20;;
cur_ch_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
@@ -847,7 +847,7 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf,
/* beacon interval */
/* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */
pbeacon = rtw_get_beacon_interval23a_from_ie(ie);
- pbss_network->BeaconPeriod = get_unaligned_le16(pbeacon);
+ pbss_network->beacon_interval = get_unaligned_le16(pbeacon);
/* capability */
cap = get_unaligned_le16(ie);
diff --git a/drivers/staging/rtl8723au/core/rtw_ieee80211.c b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
index 9d0662c..442bdef 100644
--- a/drivers/staging/rtl8723au/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8723au/core/rtw_ieee80211.c
@@ -360,7 +360,7 @@ int rtw_generate_ie23a(struct registry_priv *pregistrypriv)
/* beacon interval : 2bytes */
/* BCN_INTERVAL; */
- *(u16*)ie = cpu_to_le16(pdev_network->BeaconPeriod);
+ *(u16*)ie = cpu_to_le16(pdev_network->beacon_interval);
sz += 2;
ie += 2;
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme.c b/drivers/staging/rtl8723au/core/rtw_mlme.c
index 799338b..567be5e 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme.c
@@ -2117,7 +2117,7 @@ void rtw_init_registrypriv_dev_network23a(struct rtw_adapter* adapter)
memcpy(&pdev_network->Ssid, &pregistrypriv->ssid,
sizeof(struct cfg80211_ssid));
- pdev_network->BeaconPeriod = 100;
+ pdev_network->beacon_interval = 100;
}
void rtw_update_registrypriv_dev_network23a(struct rtw_adapter* adapter)
diff --git a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
index a91198f..f40b733 100644
--- a/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723au/core/rtw_mlme_ext.c
@@ -4279,7 +4279,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
bssid->capability =
get_unaligned_le16(&mgmt->u.beacon.capab_info);
- bssid->BeaconPeriod =
+ bssid->beacon_interval =
get_unaligned_le16(&mgmt->u.beacon.beacon_int);
bssid->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
} else if (ieee80211_is_probe_req(mgmt->frame_control)) {
@@ -4287,8 +4287,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
u.probe_req.variable);
bssid->reserved = 2;
bssid->capability = 0;
- bssid->BeaconPeriod =
- padapter->registrypriv.dev_network.BeaconPeriod;
+ bssid->beacon_interval =
+ padapter->registrypriv.dev_network.beacon_interval;
bssid->tsf = 0;
} else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
ie_offset = offsetof(struct ieee80211_mgmt,
@@ -4296,7 +4296,7 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
bssid->reserved = 3;
bssid->capability =
get_unaligned_le16(&mgmt->u.probe_resp.capab_info);
- bssid->BeaconPeriod =
+ bssid->beacon_interval =
get_unaligned_le16(&mgmt->u.probe_resp.beacon_int);
bssid->tsf = get_unaligned_le64(&mgmt->u.probe_resp.timestamp);
} else {
@@ -4304,8 +4304,8 @@ static struct wlan_bssid_ex *collect_bss_info(struct rtw_adapter *padapter,
ie_offset = offsetof(struct ieee80211_mgmt, u.beacon.variable);
bssid->capability =
get_unaligned_le16(&mgmt->u.beacon.capab_info);
- bssid->BeaconPeriod =
- padapter->registrypriv.dev_network.BeaconPeriod;
+ bssid->beacon_interval =
+ padapter->registrypriv.dev_network.beacon_interval;
bssid->tsf = 0;
}
ie_offset -= offsetof(struct ieee80211_mgmt, u);
diff --git a/drivers/staging/rtl8723au/include/wlan_bssdef.h b/drivers/staging/rtl8723au/include/wlan_bssdef.h
index c43c855..96e8074 100644
--- a/drivers/staging/rtl8723au/include/wlan_bssdef.h
+++ b/drivers/staging/rtl8723au/include/wlan_bssdef.h
@@ -92,7 +92,7 @@ struct wlan_bssid_ex {
struct cfg80211_ssid Ssid;
u32 Privacy;
long Rssi;/* in dBM, raw data , get from PHY) */
- u16 BeaconPeriod; /* units are Kusec */
+ u16 beacon_interval;
u16 capability;
u64 tsf;
u32 ATIMWindow; /* units are Kusec */
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 4eef408..638e833 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -282,7 +282,7 @@ static int rtw_cfg80211_inform_bss(struct rtw_adapter *padapter,
pnetwork->network.MacAddress,
pnetwork->network.tsf,
pnetwork->network.capability,
- pnetwork->network.BeaconPeriod,
+ pnetwork->network.beacon_interval,
notify_ie, notify_ielen,
notify_signal, GFP_ATOMIC);

View File

@ -0,0 +1,49 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:23 +0200
Subject: [100/249] staging: rtl8723au: rtw_add_beacon(): Replace magic
constant with appropriate struct size
Origin: https://git.kernel.org/linus/db97812c2c5e8a18d7cf3eb679a4cfdd6125f748
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 638e833..80d5fe7 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2912,7 +2912,7 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
size_t head_len, const u8 *tail, size_t tail_len)
{
int ret = 0;
- u8 *pbuf = NULL;
+ u8 *pbuf;
uint len, wps_ielen = 0;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
/* struct sta_priv *pstapriv = &padapter->stapriv; */
@@ -2923,17 +2923,19 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true)
return -EINVAL;
- if (head_len < 24)
+ if (head_len < sizeof(struct ieee80211_hdr_3addr))
return -EINVAL;
pbuf = kzalloc(head_len + tail_len, GFP_KERNEL);
if (!pbuf)
return -ENOMEM;
/* 24 = beacon header len. */
- memcpy(pbuf, (void *)head + 24, head_len - 24);
- memcpy(pbuf + head_len - 24, (void *)tail, tail_len);
+ memcpy(pbuf, (void *)head + sizeof(struct ieee80211_hdr_3addr),
+ head_len - sizeof(struct ieee80211_hdr_3addr));
+ memcpy(pbuf + head_len - sizeof(struct ieee80211_hdr_3addr),
+ (void *)tail, tail_len);
- len = head_len + tail_len - 24;
+ len = head_len + tail_len - sizeof(struct ieee80211_hdr_3addr);
/* check wps ie if inclued */
if (cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT,

View File

@ -0,0 +1,76 @@
From: Jes Sorensen <Jes.Sorensen@redhat.com>
Date: Thu, 19 Jun 2014 11:37:24 +0200
Subject: [101/249] staging: rtl8723au: Update bss beacon info in
rtw_add_beacon()
Origin: https://git.kernel.org/linus/ddf5c2bd1044d923ad82f519c68cdf12a055a568
Pull out the core info beacon_interval, capability, and tsf and update
cur_network.network with the info in rtw_add_beacon() instead of
relying on it being in ->IEs.
This will help later when getting rid of the beacon struct info from
->IEs and only carrying the actual IEs there.
Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
drivers/staging/rtl8723au/core/rtw_ap.c | 6 ------
drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c | 9 ++++++++-
2 files changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/staging/rtl8723au/core/rtw_ap.c b/drivers/staging/rtl8723au/core/rtw_ap.c
index 73161b9..e943b6b 100644
--- a/drivers/staging/rtl8723au/core/rtw_ap.c
+++ b/drivers/staging/rtl8723au/core/rtw_ap.c
@@ -798,7 +798,6 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf,
u8 *pHT_caps_ie = NULL;
u8 *pHT_info_ie = NULL;
struct sta_info *psta = NULL;
- __le16 *pbeacon;
u16 cap, ht_cap = false;
uint ie_len = 0;
int group_cipher, pairwise_cipher;
@@ -844,11 +843,6 @@ int rtw_check_beacon_data23a(struct rtw_adapter *padapter, u8 *pbuf,
memcpy(pbss_network->MacAddress, myid(&padapter->eeprompriv), ETH_ALEN);
- /* beacon interval */
- /* ie + 8; 8: TimeStamp, 2: Beacon Interval 2:Capability */
- pbeacon = rtw_get_beacon_interval23a_from_ie(ie);
- pbss_network->beacon_interval = get_unaligned_le16(pbeacon);
-
/* capability */
cap = get_unaligned_le16(ie);
diff --git a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
index 80d5fe7..6c06d57 100644
--- a/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723au/os_dep/ioctl_cfg80211.c
@@ -2915,6 +2915,8 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
u8 *pbuf;
uint len, wps_ielen = 0;
struct mlme_priv *pmlmepriv = &adapter->mlmepriv;
+ struct wlan_bssid_ex *bss = &pmlmepriv->cur_network.network;
+ const struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)head;
/* struct sta_priv *pstapriv = &padapter->stapriv; */
DBG_8723A("%s beacon_head_len =%zu, beacon_tail_len =%zu\n",
@@ -2923,12 +2925,17 @@ static int rtw_add_beacon(struct rtw_adapter *adapter, const u8 *head,
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) != true)
return -EINVAL;
- if (head_len < sizeof(struct ieee80211_hdr_3addr))
+ if (head_len < offsetof(struct ieee80211_mgmt, u.beacon.variable))
return -EINVAL;
pbuf = kzalloc(head_len + tail_len, GFP_KERNEL);
if (!pbuf)
return -ENOMEM;
+
+ bss->beacon_interval = get_unaligned_le16(&mgmt->u.beacon.beacon_int);
+ bss->capability = get_unaligned_le16(&mgmt->u.beacon.capab_info);
+ bss->tsf = get_unaligned_le64(&mgmt->u.beacon.timestamp);
+
/* 24 = beacon header len. */
memcpy(pbuf, (void *)head + sizeof(struct ieee80211_hdr_3addr),
head_len - sizeof(struct ieee80211_hdr_3addr));

Some files were not shown because too many files have changed in this diff Show More