* [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing
@ 2022-03-23 7:48 Martin Kaiser
2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser
` (7 more replies)
0 siblings, 8 replies; 21+ messages in thread
From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging,
linux-kernel, Martin Kaiser
Update some of the code for parsing incoming messages to use
the ieee80211 helpers.
Martin Kaiser (7):
staging: r8188eu: use ieee80211 define for version check
staging: r8188eu: use ieee80211 helper to read the pwr bit
staging: r8188eu: use standard mechanisms for control frames
staging: r8188eu: use standard mechanisms for data frames
staging: r8188eu: use standard mechanisms for qos data frames
staging: r8188eu: remove unused data frame subtypes
staging: r8188eu: remove unused control frame subtypes
drivers/staging/r8188eu/core/rtw_recv.c | 18 +++++-----
drivers/staging/r8188eu/core/rtw_xmit.c | 6 ++--
drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c | 3 +-
drivers/staging/r8188eu/include/wifi.h | 36 ++++---------------
4 files changed, 21 insertions(+), 42 deletions(-)
--
2.30.2
^ permalink raw reply [flat|nested] 21+ messages in thread* [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 14:28 ` David Laight 2022-03-23 23:59 ` kernel test robot 2022-03-23 7:48 ` [PATCH 2/7] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser ` (6 subsequent siblings) 7 siblings, 2 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Use the IEEE80211_FCTL_VERS define to check the version number of a received frame. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 8800ea4825ff..524a00345501 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1063,7 +1063,6 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv struct rx_pkt_attrib *pattrib = &precv_frame->attrib; u8 *ptr = precv_frame->rx_data; __le16 fc = *(__le16 *)ptr; - u8 ver = (unsigned char)(*ptr) & 0x3; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { @@ -1072,8 +1071,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pmlmeext->channel_set[ch_set_idx].rx_count++; } - /* add version chk */ - if (ver != 0) + if ((fc & IEEE80211_FCTL_VERS) != 0) return _FAIL; pattrib->to_fr_ds = get_tofr_ds(ptr); -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* RE: [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check 2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser @ 2022-03-23 14:28 ` David Laight 2022-03-27 18:19 ` Martin Kaiser 2022-03-23 23:59 ` kernel test robot 1 sibling, 1 reply; 21+ messages in thread From: David Laight @ 2022-03-23 14:28 UTC (permalink / raw) To: 'Martin Kaiser', Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org From: Martin Kaiser > Sent: 23 March 2022 07:49 > > Use the IEEE80211_FCTL_VERS define to check the version number > of a received frame. > > Signed-off-by: Martin Kaiser <martin@kaiser.cx> > --- > drivers/staging/r8188eu/core/rtw_recv.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c > index 8800ea4825ff..524a00345501 100644 > --- a/drivers/staging/r8188eu/core/rtw_recv.c > +++ b/drivers/staging/r8188eu/core/rtw_recv.c > @@ -1063,7 +1063,6 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv > struct rx_pkt_attrib *pattrib = &precv_frame->attrib; > u8 *ptr = precv_frame->rx_data; > __le16 fc = *(__le16 *)ptr; Those two lines are somewhat horrid. Casts of pointers to integer types have a nasty habit of being bugs. In any case 'ptr' should probably be 'frame_data'. If the first two bytes are some kind of 16 bit id, then what follows? Should this be a 'struct' that defines the frame data layout?? David > - u8 ver = (unsigned char)(*ptr) & 0x3; > struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; > > if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { > @@ -1072,8 +1071,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv > pmlmeext->channel_set[ch_set_idx].rx_count++; > } > > - /* add version chk */ > - if (ver != 0) > + if ((fc & IEEE80211_FCTL_VERS) != 0) > return _FAIL; > > pattrib->to_fr_ds = get_tofr_ds(ptr); > -- > 2.30.2 - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales) ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check 2022-03-23 14:28 ` David Laight @ 2022-03-27 18:19 ` Martin Kaiser 0 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:19 UTC (permalink / raw) To: David Laight Cc: Greg Kroah-Hartman, Larry Finger, Phillip Potter, Michael Straube, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org Thus wrote David Laight (David.Laight@ACULAB.COM): > From: Martin Kaiser > > Sent: 23 March 2022 07:49 > > Use the IEEE80211_FCTL_VERS define to check the version number > > of a received frame. > > Signed-off-by: Martin Kaiser <martin@kaiser.cx> > > --- > > drivers/staging/r8188eu/core/rtw_recv.c | 4 +--- > > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c > > index 8800ea4825ff..524a00345501 100644 > > --- a/drivers/staging/r8188eu/core/rtw_recv.c > > +++ b/drivers/staging/r8188eu/core/rtw_recv.c > > @@ -1063,7 +1063,6 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv > > struct rx_pkt_attrib *pattrib = &precv_frame->attrib; > > u8 *ptr = precv_frame->rx_data; > > __le16 fc = *(__le16 *)ptr; > Those two lines are somewhat horrid. > Casts of pointers to integer types have a nasty habit of being bugs. The fc is the Frame Control field, which is at the start of an incoming 80211 frame. The existing helper functions that parse the Frame Control want an fc parameter like this. I looked at the drawing in https://einstein.informatik.uni-oldenburg.de/rechnernetze/frame.htm for the structure that the r8188eu driver is trying to parse (the text is in German, sorry). > In any case 'ptr' should probably be 'frame_data'. I'm trying to remove ptr complety and use existing helper functions for all components. > If the first two bytes are some kind of 16 bit id, then what follows? > Should this be a 'struct' that defines the frame data layout?? I define an fc variable in functions that use only components of Frame Control. If we need other fields, I use a struct ieee80211_hdr. I've just sent a v2 of this series where I replaced fc with a struct ieee80211_hdr in the validate_recv_frame function. Best regards, Martin ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check 2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser 2022-03-23 14:28 ` David Laight @ 2022-03-23 23:59 ` kernel test robot 1 sibling, 0 replies; 21+ messages in thread From: kernel test robot @ 2022-03-23 23:59 UTC (permalink / raw) To: Martin Kaiser, Greg Kroah-Hartman Cc: kbuild-all, Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Hi Martin, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on staging/staging-testing] url: https://github.com/0day-ci/linux/commits/Martin-Kaiser/staging-r8188eu-use-ieee80211-helpers-for-parsing/20220323-155119 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git 41197a5f11a4b2d11ac19bc62552022153032811 config: sh-randconfig-s031-20220323 (https://download.01.org/0day-ci/archive/20220324/202203240701.1JNFezRj-lkp@intel.com/config) compiler: sh4-linux-gcc (GCC) 11.2.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # apt-get install sparse # sparse version: v0.6.4-dirty # https://github.com/0day-ci/linux/commit/ab583161be478f342c621b22766fc7f233769bef git remote add linux-review https://github.com/0day-ci/linux git fetch --no-tags linux-review Martin-Kaiser/staging-r8188eu-use-ieee80211-helpers-for-parsing/20220323-155119 git checkout ab583161be478f342c621b22766fc7f233769bef # save the config file to linux build tree mkdir build_dir COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-11.2.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sh SHELL=/bin/bash If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <lkp@intel.com> sparse warnings: (new ones prefixed by >>) >> drivers/staging/r8188eu/core/rtw_recv.c:1074:14: sparse: sparse: restricted __le16 degrades to integer vim +1074 drivers/staging/r8188eu/core/rtw_recv.c 1054 1055 static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv_frame) 1056 { 1057 /* shall check frame subtype, to / from ds, da, bssid */ 1058 1059 /* then call check if rx seq/frag. duplicated. */ 1060 1061 int retval = _FAIL; 1062 u8 bDumpRxPkt; 1063 struct rx_pkt_attrib *pattrib = &precv_frame->attrib; 1064 u8 *ptr = precv_frame->rx_data; 1065 __le16 fc = *(__le16 *)ptr; 1066 struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; 1067 1068 if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { 1069 int ch_set_idx = rtw_ch_set_search_ch(pmlmeext->channel_set, rtw_get_oper_ch(adapter)); 1070 if (ch_set_idx >= 0) 1071 pmlmeext->channel_set[ch_set_idx].rx_count++; 1072 } 1073 > 1074 if ((fc & IEEE80211_FCTL_VERS) != 0) 1075 return _FAIL; 1076 1077 pattrib->to_fr_ds = get_tofr_ds(ptr); 1078 1079 pattrib->frag_num = GetFragNum(ptr); 1080 pattrib->seq_num = GetSequence(ptr); 1081 1082 pattrib->pw_save = GetPwrMgt(ptr); 1083 pattrib->mfrag = ieee80211_has_morefrags(fc); 1084 pattrib->mdata = ieee80211_has_moredata(fc); 1085 pattrib->privacy = ieee80211_has_protected(fc); 1086 pattrib->order = ieee80211_has_order(fc); 1087 1088 /* Dump rx packets */ 1089 GetHalDefVar8188EUsb(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt); 1090 1091 /* We return _SUCCESS only for data frames. */ 1092 if (ieee80211_is_mgmt(fc)) 1093 validate_recv_mgnt_frame(adapter, precv_frame); 1094 else if (ieee80211_is_ctl(fc)) 1095 validate_recv_ctrl_frame(adapter, precv_frame); 1096 else if (ieee80211_is_data(fc)) { 1097 rtw_led_control(adapter, LED_CTL_RX); 1098 pattrib->qos = ieee80211_is_data_qos(fc); 1099 retval = validate_recv_data_frame(adapter, precv_frame); 1100 if (retval == _FAIL) { 1101 struct recv_priv *precvpriv = &adapter->recvpriv; 1102 precvpriv->rx_drop++; 1103 } 1104 } 1105 1106 return retval; 1107 } 1108 -- 0-DAY CI Kernel Test Service https://01.org/lkp ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 2/7] staging: r8188eu: use ieee80211 helper to read the pwr bit 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 7:48 ` [PATCH 3/7] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser ` (5 subsequent siblings) 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Use the ieee80211 helper to read the power management bit. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 524a00345501..fa0ae1c1187b 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1079,7 +1079,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pattrib->frag_num = GetFragNum(ptr); pattrib->seq_num = GetSequence(ptr); - pattrib->pw_save = GetPwrMgt(ptr); + pattrib->pw_save = ieee80211_has_pm(fc); pattrib->mfrag = ieee80211_has_morefrags(fc); pattrib->mdata = ieee80211_has_moredata(fc); pattrib->privacy = ieee80211_has_protected(fc); -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 3/7] staging: r8188eu: use standard mechanisms for control frames 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser 2022-03-23 7:48 ` [PATCH 2/7] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 7:48 ` [PATCH 4/7] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser ` (4 subsequent siblings) 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Use defines and macros from ieee80211.h to check for control frames and to define control frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 3 ++- drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c | 3 ++- drivers/staging/r8188eu/include/wifi.h | 21 ++++++------------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index fa0ae1c1187b..f1983f3ff9f3 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -801,9 +801,10 @@ static int validate_recv_ctrl_frame(struct adapter *padapter, struct rx_pkt_attrib *pattrib = &precv_frame->attrib; struct sta_priv *pstapriv = &padapter->stapriv; u8 *pframe = precv_frame->rx_data; + __le16 fc = *(__le16 *)pframe; /* uint len = precv_frame->len; */ - if (GetFrameType(pframe) != WIFI_CTRL_TYPE) + if (!ieee80211_is_ctl(fc)) return _FAIL; /* receive the frames that ra(a1) is my address */ diff --git a/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c b/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c index 9bf7a9248026..7e50a42b6f75 100644 --- a/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c +++ b/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c @@ -113,12 +113,13 @@ void update_recvframe_phyinfo_88e(struct recv_frame *precvframe, struct phy_stat struct hal_data_8188e *pHalData = &padapter->haldata; struct phy_info *pPHYInfo = &pattrib->phy_info; u8 *wlanhdr = precvframe->rx_data; + __le16 fc = *(__le16 *)wlanhdr; struct odm_per_pkt_info pkt_info; u8 *sa = NULL; struct sta_priv *pstapriv; struct sta_info *psta; - pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) && + pkt_info.bPacketMatchBSSID = ((!ieee80211_is_ctl(fc)) && !pattrib->icv_err && !pattrib->crc_err && !memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN)); diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 299553351246..47b73fde2006 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -13,7 +13,6 @@ #define WLAN_SSID_MAXLEN 32 enum WIFI_FRAME_TYPE { - WIFI_CTRL_TYPE = (BIT(2)), WIFI_DATA_TYPE = (BIT(3)), WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ }; @@ -34,13 +33,12 @@ enum WIFI_FRAME_SUBTYPE { WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT), /* below is for control frame */ - WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE), - WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | - WIFI_CTRL_TYPE), + WIFI_PSPOLL = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL), + WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), + WIFI_CTS = (BIT(7) | BIT(6) | IEEE80211_FTYPE_CTL), + WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_CTL), + WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | IEEE80211_FTYPE_CTL), + WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ WIFI_DATA = (0 | WIFI_DATA_TYPE), @@ -340,13 +338,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe) return sa; } -static inline bool IsFrameTypeCtrl(unsigned char *pframe) -{ - if (WIFI_CTRL_TYPE == GetFrameType(pframe)) - return true; - else - return false; -} /*----------------------------------------------------------------------------- Below is for the security related definition ------------------------------------------------------------------------------*/ -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 4/7] staging: r8188eu: use standard mechanisms for data frames 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (2 preceding siblings ...) 2022-03-23 7:48 ` [PATCH 3/7] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 7:48 ` [PATCH 5/7] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser ` (3 subsequent siblings) 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Use defines and macros from ieee80211.h to check for data frames and to define data frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 5 +++-- drivers/staging/r8188eu/core/rtw_xmit.c | 4 ++-- drivers/staging/r8188eu/include/wifi.h | 17 ++++++++--------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index f1983f3ff9f3..7b1c83e502f0 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1283,8 +1283,9 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr psta_addr = pfhdr->attrib.ta; psta = rtw_get_stainfo(pstapriv, psta_addr); if (!psta) { - u8 type = GetFrameType(pfhdr->rx_data); - if (type != WIFI_DATA_TYPE) { + __le16 fc = *(__le16 *)pfhdr->rx_data; + + if (ieee80211_is_data(fc)) { psta = rtw_get_bcmc_stainfo(padapter); pdefrag_q = &psta->sta_recvpriv.defrag_q; } else { diff --git a/drivers/staging/r8188eu/core/rtw_xmit.c b/drivers/staging/r8188eu/core/rtw_xmit.c index c2a550e7250e..781dc80ff9ed 100644 --- a/drivers/staging/r8188eu/core/rtw_xmit.c +++ b/drivers/staging/r8188eu/core/rtw_xmit.c @@ -497,7 +497,7 @@ static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct p pattrib->pkt_hdrlen = ETH_HLEN;/* pattrib->ether_type == 0x8100) ? (14 + 4): 14; vlan tag */ pattrib->hdrlen = WLAN_HDR_A3_LEN; - pattrib->subtype = WIFI_DATA_TYPE; + pattrib->subtype = IEEE80211_FTYPE_DATA; pattrib->priority = 0; if (check_fwstate(pmlmepriv, WIFI_AP_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) { @@ -717,7 +717,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr SetFrameSubType(fctrl, pattrib->subtype); - if (pattrib->subtype & WIFI_DATA_TYPE) { + if (pattrib->subtype & IEEE80211_FTYPE_DATA) { if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { /* to_ds = 1, fr_ds = 0; */ /* Data transfer to AP */ diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 47b73fde2006..c71334f3986a 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -13,7 +13,6 @@ #define WLAN_SSID_MAXLEN 32 enum WIFI_FRAME_TYPE { - WIFI_DATA_TYPE = (BIT(3)), WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ }; @@ -41,14 +40,14 @@ enum WIFI_FRAME_SUBTYPE { WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ - WIFI_DATA = (0 | WIFI_DATA_TYPE), - WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE), - WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE), - WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE), - WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE), - WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE), + WIFI_DATA = (0 | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFACK = (BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFPOLL = (BIT(5) | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_DATA_NULL = (BIT(6) | IEEE80211_FTYPE_DATA), + WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), + WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), }; -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 5/7] staging: r8188eu: use standard mechanisms for qos data frames 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (3 preceding siblings ...) 2022-03-23 7:48 ` [PATCH 4/7] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 7:48 ` [PATCH 6/7] staging: r8188eu: remove unused data frame subtypes Martin Kaiser ` (2 subsequent siblings) 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Use defines and macros from ieee80211.h to check for qos data frames and to mark a frame as qos data. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/r8188eu/core/rtw_xmit.c | 2 +- drivers/staging/r8188eu/include/wifi.h | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 7b1c83e502f0..cad7cbb92d07 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -749,6 +749,7 @@ static int sta2ap_data_frame(struct adapter *adapter, struct sta_priv *pstapriv = &adapter->stapriv; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; u8 *ptr = precv_frame->rx_data; + __le16 fc = *(__le16 *)ptr; unsigned char *mybssid = get_bssid(pmlmepriv); int ret = _SUCCESS; @@ -769,9 +770,8 @@ static int sta2ap_data_frame(struct adapter *adapter, process_pwrbit_data(adapter, precv_frame); - if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) { + if (ieee80211_is_data_qos(fc)) process_wmmps_data(adapter, precv_frame); - } if (GetFrameSubType(ptr) & BIT(6)) { /* No data, will not indicate to upper layer, temporily count it here */ diff --git a/drivers/staging/r8188eu/core/rtw_xmit.c b/drivers/staging/r8188eu/core/rtw_xmit.c index 781dc80ff9ed..aede8ef8b098 100644 --- a/drivers/staging/r8188eu/core/rtw_xmit.c +++ b/drivers/staging/r8188eu/core/rtw_xmit.c @@ -399,7 +399,7 @@ static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib) pattrib->priority = user_prio; pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN; - pattrib->subtype = WIFI_QOS_DATA_TYPE; + pattrib->subtype = IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA; } static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct pkt_attrib *pattrib) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index c71334f3986a..2e42b4b48c25 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -12,10 +12,6 @@ #define WLAN_HDR_A3_QOS_LEN 26 #define WLAN_SSID_MAXLEN 32 -enum WIFI_FRAME_TYPE { - WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ -}; - enum WIFI_FRAME_SUBTYPE { /* below is for mgt frame */ WIFI_ASSOCREQ = (0 | IEEE80211_FTYPE_MGMT), @@ -48,7 +44,7 @@ enum WIFI_FRAME_SUBTYPE { WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), - WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), + WIFI_QOS_DATA_NULL = (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA), }; enum WIFI_REASON_CODE { -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 6/7] staging: r8188eu: remove unused data frame subtypes 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (4 preceding siblings ...) 2022-03-23 7:48 ` [PATCH 5/7] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-23 7:48 ` [PATCH 7/7] staging: r8188eu: remove unused control " Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Remove unused defines for data frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/include/wifi.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 2e42b4b48c25..79a2675c6cc1 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -41,9 +41,6 @@ enum WIFI_FRAME_SUBTYPE { WIFI_DATA_CFPOLL = (BIT(5) | IEEE80211_FTYPE_DATA), WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_DATA_NULL = (BIT(6) | IEEE80211_FTYPE_DATA), - WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), - WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), - WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_QOS_DATA_NULL = (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA), }; -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH 7/7] staging: r8188eu: remove unused control frame subtypes 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (5 preceding siblings ...) 2022-03-23 7:48 ` [PATCH 6/7] staging: r8188eu: remove unused data frame subtypes Martin Kaiser @ 2022-03-23 7:48 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 7 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-23 7:48 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, Martin Kaiser Remove unused defines for control frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/include/wifi.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 79a2675c6cc1..24d404f0f5f4 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -29,11 +29,6 @@ enum WIFI_FRAME_SUBTYPE { /* below is for control frame */ WIFI_PSPOLL = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL), - WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), - WIFI_CTS = (BIT(7) | BIT(6) | IEEE80211_FTYPE_CTL), - WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_CTL), - WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | IEEE80211_FTYPE_CTL), - WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ WIFI_DATA = (0 | IEEE80211_FTYPE_DATA), -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (6 preceding siblings ...) 2022-03-23 7:48 ` [PATCH 7/7] staging: r8188eu: remove unused control " Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 1/9] staging: r8188eu: use ieee80211 define for version check Martin Kaiser ` (8 more replies) 7 siblings, 9 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Update some of the code for parsing incoming messages to use the ieee80211 helpers. v2: - fix an endianness issue in the version check patch - add two more patches for validate_recv_frame, use a struct ieee80211_hdr instead of a frame control variable in this function Martin Kaiser (9): staging: r8188eu: use ieee80211 define for version check staging: r8188eu: use ieee80211 helper to read the pwr bit staging: r8188eu: use standard mechanisms for control frames staging: r8188eu: use standard mechanisms for data frames staging: r8188eu: use standard mechanisms for qos data frames staging: r8188eu: remove unused data frame subtypes staging: r8188eu: remove unused control frame subtypes staging: r8188eu: use ieee80211 macro for sequence number staging: r8188eu: use ieee80211 define for fragment number drivers/staging/r8188eu/core/rtw_recv.c | 40 +++++++++--------- drivers/staging/r8188eu/core/rtw_xmit.c | 6 +-- drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c | 3 +- drivers/staging/r8188eu/include/wifi.h | 42 ++++--------------- 4 files changed, 32 insertions(+), 59 deletions(-) -- 2.30.2 ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2 1/9] staging: r8188eu: use ieee80211 define for version check 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 2/9] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser ` (7 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser, kernel test robot Use the IEEE80211_FCTL_VERS define to check the version number of a received frame. Covert IEEE80211_FCTL_VERS to le16 before using it as a mask for fc, which is also an le16 value. The ieee80211_... helper functions use the same approach. Reported-by: kernel test robot <lkp@intel.com> Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- v2 - fix a sparse warning, conver IEEE80211_FCTL_VERS to little endian drivers/staging/r8188eu/core/rtw_recv.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 8800ea4825ff..fc7f2a559f9b 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1063,7 +1063,6 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv struct rx_pkt_attrib *pattrib = &precv_frame->attrib; u8 *ptr = precv_frame->rx_data; __le16 fc = *(__le16 *)ptr; - u8 ver = (unsigned char)(*ptr) & 0x3; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { @@ -1072,8 +1071,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pmlmeext->channel_set[ch_set_idx].rx_count++; } - /* add version chk */ - if (ver != 0) + if ((fc & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0) return _FAIL; pattrib->to_fr_ds = get_tofr_ds(ptr); -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 2/9] staging: r8188eu: use ieee80211 helper to read the pwr bit 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 1/9] staging: r8188eu: use ieee80211 define for version check Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 3/9] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser ` (6 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use the ieee80211 helper to read the power management bit. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index fc7f2a559f9b..5af715a08430 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1079,7 +1079,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pattrib->frag_num = GetFragNum(ptr); pattrib->seq_num = GetSequence(ptr); - pattrib->pw_save = GetPwrMgt(ptr); + pattrib->pw_save = ieee80211_has_pm(fc); pattrib->mfrag = ieee80211_has_morefrags(fc); pattrib->mdata = ieee80211_has_moredata(fc); pattrib->privacy = ieee80211_has_protected(fc); -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 3/9] staging: r8188eu: use standard mechanisms for control frames 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 1/9] staging: r8188eu: use ieee80211 define for version check Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 2/9] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 4/9] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser ` (5 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use defines and macros from ieee80211.h to check for control frames and to define control frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 3 ++- drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c | 3 ++- drivers/staging/r8188eu/include/wifi.h | 21 ++++++------------- 3 files changed, 10 insertions(+), 17 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 5af715a08430..7735fbe6fa72 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -801,9 +801,10 @@ static int validate_recv_ctrl_frame(struct adapter *padapter, struct rx_pkt_attrib *pattrib = &precv_frame->attrib; struct sta_priv *pstapriv = &padapter->stapriv; u8 *pframe = precv_frame->rx_data; + __le16 fc = *(__le16 *)pframe; /* uint len = precv_frame->len; */ - if (GetFrameType(pframe) != WIFI_CTRL_TYPE) + if (!ieee80211_is_ctl(fc)) return _FAIL; /* receive the frames that ra(a1) is my address */ diff --git a/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c b/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c index 9bf7a9248026..7e50a42b6f75 100644 --- a/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c +++ b/drivers/staging/r8188eu/hal/rtl8188e_rxdesc.c @@ -113,12 +113,13 @@ void update_recvframe_phyinfo_88e(struct recv_frame *precvframe, struct phy_stat struct hal_data_8188e *pHalData = &padapter->haldata; struct phy_info *pPHYInfo = &pattrib->phy_info; u8 *wlanhdr = precvframe->rx_data; + __le16 fc = *(__le16 *)wlanhdr; struct odm_per_pkt_info pkt_info; u8 *sa = NULL; struct sta_priv *pstapriv; struct sta_info *psta; - pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) && + pkt_info.bPacketMatchBSSID = ((!ieee80211_is_ctl(fc)) && !pattrib->icv_err && !pattrib->crc_err && !memcmp(get_hdr_bssid(wlanhdr), get_bssid(&padapter->mlmepriv), ETH_ALEN)); diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 299553351246..47b73fde2006 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -13,7 +13,6 @@ #define WLAN_SSID_MAXLEN 32 enum WIFI_FRAME_TYPE { - WIFI_CTRL_TYPE = (BIT(2)), WIFI_DATA_TYPE = (BIT(3)), WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ }; @@ -34,13 +33,12 @@ enum WIFI_FRAME_SUBTYPE { WIFI_ACTION = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_MGMT), /* below is for control frame */ - WIFI_PSPOLL = (BIT(7) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CTS = (BIT(7) | BIT(6) | WIFI_CTRL_TYPE), - WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | WIFI_CTRL_TYPE), - WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | WIFI_CTRL_TYPE), - WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | - WIFI_CTRL_TYPE), + WIFI_PSPOLL = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL), + WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), + WIFI_CTS = (BIT(7) | BIT(6) | IEEE80211_FTYPE_CTL), + WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_CTL), + WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | IEEE80211_FTYPE_CTL), + WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ WIFI_DATA = (0 | WIFI_DATA_TYPE), @@ -340,13 +338,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char *pframe) return sa; } -static inline bool IsFrameTypeCtrl(unsigned char *pframe) -{ - if (WIFI_CTRL_TYPE == GetFrameType(pframe)) - return true; - else - return false; -} /*----------------------------------------------------------------------------- Below is for the security related definition ------------------------------------------------------------------------------*/ -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 4/9] staging: r8188eu: use standard mechanisms for data frames 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (2 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 3/9] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 5/9] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser ` (4 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use defines and macros from ieee80211.h to check for data frames and to define data frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 5 +++-- drivers/staging/r8188eu/core/rtw_xmit.c | 4 ++-- drivers/staging/r8188eu/include/wifi.h | 17 ++++++++--------- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 7735fbe6fa72..341aca28b97f 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1283,8 +1283,9 @@ struct recv_frame *recvframe_chk_defrag(struct adapter *padapter, struct recv_fr psta_addr = pfhdr->attrib.ta; psta = rtw_get_stainfo(pstapriv, psta_addr); if (!psta) { - u8 type = GetFrameType(pfhdr->rx_data); - if (type != WIFI_DATA_TYPE) { + __le16 fc = *(__le16 *)pfhdr->rx_data; + + if (ieee80211_is_data(fc)) { psta = rtw_get_bcmc_stainfo(padapter); pdefrag_q = &psta->sta_recvpriv.defrag_q; } else { diff --git a/drivers/staging/r8188eu/core/rtw_xmit.c b/drivers/staging/r8188eu/core/rtw_xmit.c index c2a550e7250e..781dc80ff9ed 100644 --- a/drivers/staging/r8188eu/core/rtw_xmit.c +++ b/drivers/staging/r8188eu/core/rtw_xmit.c @@ -497,7 +497,7 @@ static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct p pattrib->pkt_hdrlen = ETH_HLEN;/* pattrib->ether_type == 0x8100) ? (14 + 4): 14; vlan tag */ pattrib->hdrlen = WLAN_HDR_A3_LEN; - pattrib->subtype = WIFI_DATA_TYPE; + pattrib->subtype = IEEE80211_FTYPE_DATA; pattrib->priority = 0; if (check_fwstate(pmlmepriv, WIFI_AP_STATE | WIFI_ADHOC_STATE | WIFI_ADHOC_MASTER_STATE)) { @@ -717,7 +717,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr SetFrameSubType(fctrl, pattrib->subtype); - if (pattrib->subtype & WIFI_DATA_TYPE) { + if (pattrib->subtype & IEEE80211_FTYPE_DATA) { if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)) { /* to_ds = 1, fr_ds = 0; */ /* Data transfer to AP */ diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 47b73fde2006..c71334f3986a 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -13,7 +13,6 @@ #define WLAN_SSID_MAXLEN 32 enum WIFI_FRAME_TYPE { - WIFI_DATA_TYPE = (BIT(3)), WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ }; @@ -41,14 +40,14 @@ enum WIFI_FRAME_SUBTYPE { WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ - WIFI_DATA = (0 | WIFI_DATA_TYPE), - WIFI_DATA_CFACK = (BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_CFPOLL = (BIT(5) | WIFI_DATA_TYPE), - WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | WIFI_DATA_TYPE), - WIFI_DATA_NULL = (BIT(6) | WIFI_DATA_TYPE), - WIFI_CF_ACK = (BIT(6) | BIT(4) | WIFI_DATA_TYPE), - WIFI_CF_POLL = (BIT(6) | BIT(5) | WIFI_DATA_TYPE), - WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE), + WIFI_DATA = (0 | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFACK = (BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFPOLL = (BIT(5) | IEEE80211_FTYPE_DATA), + WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_DATA_NULL = (BIT(6) | IEEE80211_FTYPE_DATA), + WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), + WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), + WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), }; -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 5/9] staging: r8188eu: use standard mechanisms for qos data frames 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (3 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 4/9] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 6/9] staging: r8188eu: remove unused data frame subtypes Martin Kaiser ` (3 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use defines and macros from ieee80211.h to check for qos data frames and to mark a frame as qos data. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 4 ++-- drivers/staging/r8188eu/core/rtw_xmit.c | 2 +- drivers/staging/r8188eu/include/wifi.h | 6 +----- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 341aca28b97f..bb67abd3ed99 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -749,6 +749,7 @@ static int sta2ap_data_frame(struct adapter *adapter, struct sta_priv *pstapriv = &adapter->stapriv; struct mlme_priv *pmlmepriv = &adapter->mlmepriv; u8 *ptr = precv_frame->rx_data; + __le16 fc = *(__le16 *)ptr; unsigned char *mybssid = get_bssid(pmlmepriv); int ret = _SUCCESS; @@ -769,9 +770,8 @@ static int sta2ap_data_frame(struct adapter *adapter, process_pwrbit_data(adapter, precv_frame); - if ((GetFrameSubType(ptr) & WIFI_QOS_DATA_TYPE) == WIFI_QOS_DATA_TYPE) { + if (ieee80211_is_data_qos(fc)) process_wmmps_data(adapter, precv_frame); - } if (GetFrameSubType(ptr) & BIT(6)) { /* No data, will not indicate to upper layer, temporily count it here */ diff --git a/drivers/staging/r8188eu/core/rtw_xmit.c b/drivers/staging/r8188eu/core/rtw_xmit.c index 781dc80ff9ed..aede8ef8b098 100644 --- a/drivers/staging/r8188eu/core/rtw_xmit.c +++ b/drivers/staging/r8188eu/core/rtw_xmit.c @@ -399,7 +399,7 @@ static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib) pattrib->priority = user_prio; pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN; - pattrib->subtype = WIFI_QOS_DATA_TYPE; + pattrib->subtype = IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA; } static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct pkt_attrib *pattrib) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index c71334f3986a..2e42b4b48c25 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -12,10 +12,6 @@ #define WLAN_HDR_A3_QOS_LEN 26 #define WLAN_SSID_MAXLEN 32 -enum WIFI_FRAME_TYPE { - WIFI_QOS_DATA_TYPE = (BIT(7)|BIT(3)), /* QoS Data */ -}; - enum WIFI_FRAME_SUBTYPE { /* below is for mgt frame */ WIFI_ASSOCREQ = (0 | IEEE80211_FTYPE_MGMT), @@ -48,7 +44,7 @@ enum WIFI_FRAME_SUBTYPE { WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), - WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE), + WIFI_QOS_DATA_NULL = (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA), }; enum WIFI_REASON_CODE { -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 6/9] staging: r8188eu: remove unused data frame subtypes 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (4 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 5/9] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 7/9] staging: r8188eu: remove unused control " Martin Kaiser ` (2 subsequent siblings) 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Remove unused defines for data frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/include/wifi.h | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 2e42b4b48c25..79a2675c6cc1 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -41,9 +41,6 @@ enum WIFI_FRAME_SUBTYPE { WIFI_DATA_CFPOLL = (BIT(5) | IEEE80211_FTYPE_DATA), WIFI_DATA_CFACKPOLL = (BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_DATA_NULL = (BIT(6) | IEEE80211_FTYPE_DATA), - WIFI_CF_ACK = (BIT(6) | BIT(4) | IEEE80211_FTYPE_DATA), - WIFI_CF_POLL = (BIT(6) | BIT(5) | IEEE80211_FTYPE_DATA), - WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_DATA), WIFI_QOS_DATA_NULL = (BIT(6) | IEEE80211_STYPE_QOS_DATA | IEEE80211_FTYPE_DATA), }; -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 7/9] staging: r8188eu: remove unused control frame subtypes 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (5 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 6/9] staging: r8188eu: remove unused data frame subtypes Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 8/9] staging: r8188eu: use ieee80211 macro for sequence number Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 9/9] staging: r8188eu: use ieee80211 define for fragment number Martin Kaiser 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Remove unused defines for control frame subtypes. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/include/wifi.h | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 79a2675c6cc1..24d404f0f5f4 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -29,11 +29,6 @@ enum WIFI_FRAME_SUBTYPE { /* below is for control frame */ WIFI_PSPOLL = (BIT(7) | BIT(5) | IEEE80211_FTYPE_CTL), - WIFI_RTS = (BIT(7) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), - WIFI_CTS = (BIT(7) | BIT(6) | IEEE80211_FTYPE_CTL), - WIFI_ACK = (BIT(7) | BIT(6) | BIT(4) | IEEE80211_FTYPE_CTL), - WIFI_CFEND = (BIT(7) | BIT(6) | BIT(5) | IEEE80211_FTYPE_CTL), - WIFI_CFEND_CFACK = (BIT(7) | BIT(6) | BIT(5) | BIT(4) | IEEE80211_FTYPE_CTL), /* below is for data frame */ WIFI_DATA = (0 | IEEE80211_FTYPE_DATA), -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 8/9] staging: r8188eu: use ieee80211 macro for sequence number 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (6 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 7/9] staging: r8188eu: remove unused control " Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 9/9] staging: r8188eu: use ieee80211 define for fragment number Martin Kaiser 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use the IEEE80211_SEQ_TO_SN macro in function validate_recv_frame to get the sequence number of an incoming frame. Map the incoming rx bytes to a struct ieee80211_hdr. Replace the fc variable with struct ieee80211_hdr's frame control component. The IEEE80211_SEQ_TO_SN macro takes the sequence control field of an ieee80211 header and extracts the sequence number. The macro's input parameter must be in host endianness, the sequence number in the 80211 header is little-endian, we have to convert it to host endianness. Remove the local GetSequence macro, it is not used any more. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 24 ++++++++++++------------ drivers/staging/r8188eu/include/wifi.h | 3 --- 2 files changed, 12 insertions(+), 15 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index bb67abd3ed99..415747da7e3b 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1063,7 +1063,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv u8 bDumpRxPkt; struct rx_pkt_attrib *pattrib = &precv_frame->attrib; u8 *ptr = precv_frame->rx_data; - __le16 fc = *(__le16 *)ptr; + struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data; struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv; if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) { @@ -1072,31 +1072,31 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pmlmeext->channel_set[ch_set_idx].rx_count++; } - if ((fc & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0) + if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0) return _FAIL; pattrib->to_fr_ds = get_tofr_ds(ptr); pattrib->frag_num = GetFragNum(ptr); - pattrib->seq_num = GetSequence(ptr); + pattrib->seq_num = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl)); - pattrib->pw_save = ieee80211_has_pm(fc); - pattrib->mfrag = ieee80211_has_morefrags(fc); - pattrib->mdata = ieee80211_has_moredata(fc); - pattrib->privacy = ieee80211_has_protected(fc); - pattrib->order = ieee80211_has_order(fc); + pattrib->pw_save = ieee80211_has_pm(hdr->frame_control); + pattrib->mfrag = ieee80211_has_morefrags(hdr->frame_control); + pattrib->mdata = ieee80211_has_moredata(hdr->frame_control); + pattrib->privacy = ieee80211_has_protected(hdr->frame_control); + pattrib->order = ieee80211_has_order(hdr->frame_control); /* Dump rx packets */ GetHalDefVar8188EUsb(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt); /* We return _SUCCESS only for data frames. */ - if (ieee80211_is_mgmt(fc)) + if (ieee80211_is_mgmt(hdr->frame_control)) validate_recv_mgnt_frame(adapter, precv_frame); - else if (ieee80211_is_ctl(fc)) + else if (ieee80211_is_ctl(hdr->frame_control)) validate_recv_ctrl_frame(adapter, precv_frame); - else if (ieee80211_is_data(fc)) { + else if (ieee80211_is_data(hdr->frame_control)) { rtw_led_control(adapter, LED_CTL_RX); - pattrib->qos = ieee80211_is_data_qos(fc); + pattrib->qos = ieee80211_is_data_qos(hdr->frame_control); retval = validate_recv_data_frame(adapter, precv_frame); if (retval == _FAIL) { struct recv_priv *precvpriv = &adapter->recvpriv; diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index 24d404f0f5f4..dbda1880c45a 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -189,9 +189,6 @@ enum WIFI_REG_DOMAIN { *(__le16 *)(pbuf) |= cpu_to_le16(type); \ } while (0) -#define GetSequence(pbuf) \ - (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) >> 4) - #define GetFragNum(pbuf) \ (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f) -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 9/9] staging: r8188eu: use ieee80211 define for fragment number 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser ` (7 preceding siblings ...) 2022-03-27 18:09 ` [PATCH v2 8/9] staging: r8188eu: use ieee80211 macro for sequence number Martin Kaiser @ 2022-03-27 18:09 ` Martin Kaiser 8 siblings, 0 replies; 21+ messages in thread From: Martin Kaiser @ 2022-03-27 18:09 UTC (permalink / raw) To: Greg Kroah-Hartman Cc: Larry Finger, Phillip Potter, Michael Straube, linux-staging, linux-kernel, David Laight, Martin Kaiser Use the IEEE80211_SCTL_FRAG define to extract the fragment number from an incoming frame. pattrib->frag_num must be in host endianness, we have to convert hdr->seq_ctrl, this field is little-endian. Remove the local GetFragNum macro, it is not used any more. Signed-off-by: Martin Kaiser <martin@kaiser.cx> --- drivers/staging/r8188eu/core/rtw_recv.c | 2 +- drivers/staging/r8188eu/include/wifi.h | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/drivers/staging/r8188eu/core/rtw_recv.c b/drivers/staging/r8188eu/core/rtw_recv.c index 415747da7e3b..62cf2df90073 100644 --- a/drivers/staging/r8188eu/core/rtw_recv.c +++ b/drivers/staging/r8188eu/core/rtw_recv.c @@ -1077,7 +1077,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv pattrib->to_fr_ds = get_tofr_ds(ptr); - pattrib->frag_num = GetFragNum(ptr); + pattrib->frag_num = le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_FRAG; pattrib->seq_num = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl)); pattrib->pw_save = ieee80211_has_pm(hdr->frame_control); diff --git a/drivers/staging/r8188eu/include/wifi.h b/drivers/staging/r8188eu/include/wifi.h index dbda1880c45a..e10cf17d6aa0 100644 --- a/drivers/staging/r8188eu/include/wifi.h +++ b/drivers/staging/r8188eu/include/wifi.h @@ -189,9 +189,6 @@ enum WIFI_REG_DOMAIN { *(__le16 *)(pbuf) |= cpu_to_le16(type); \ } while (0) -#define GetFragNum(pbuf) \ - (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f) - #define GetTupleCache(pbuf) \ (cpu_to_le16(*(unsigned short *)((size_t)(pbuf) + 22))) -- 2.30.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
end of thread, other threads:[~2022-03-27 18:19 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-03-23 7:48 [PATCH 0/7] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-23 7:48 ` [PATCH 1/7] staging: r8188eu: use ieee80211 define for version check Martin Kaiser 2022-03-23 14:28 ` David Laight 2022-03-27 18:19 ` Martin Kaiser 2022-03-23 23:59 ` kernel test robot 2022-03-23 7:48 ` [PATCH 2/7] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser 2022-03-23 7:48 ` [PATCH 3/7] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser 2022-03-23 7:48 ` [PATCH 4/7] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser 2022-03-23 7:48 ` [PATCH 5/7] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser 2022-03-23 7:48 ` [PATCH 6/7] staging: r8188eu: remove unused data frame subtypes Martin Kaiser 2022-03-23 7:48 ` [PATCH 7/7] staging: r8188eu: remove unused control " Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 0/9] staging: r8188eu: use ieee80211 helpers for parsing Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 1/9] staging: r8188eu: use ieee80211 define for version check Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 2/9] staging: r8188eu: use ieee80211 helper to read the pwr bit Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 3/9] staging: r8188eu: use standard mechanisms for control frames Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 4/9] staging: r8188eu: use standard mechanisms for data frames Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 5/9] staging: r8188eu: use standard mechanisms for qos " Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 6/9] staging: r8188eu: remove unused data frame subtypes Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 7/9] staging: r8188eu: remove unused control " Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 8/9] staging: r8188eu: use ieee80211 macro for sequence number Martin Kaiser 2022-03-27 18:09 ` [PATCH v2 9/9] staging: r8188eu: use ieee80211 define for fragment number Martin Kaiser
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox