From: Rishik Yechuri <epicrishik@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org,
Rishik Yechuri <rishik.yechuri.code@gmail.com>
Subject: [PATCH 03/10] staging: rtl8723bs: set frame control flags with IEEE80211_FCTL_* masks
Date: Tue, 13 Oct 2026 15:15:31 -0500 [thread overview]
Message-ID: <20261013201538.43156-4-rishik.yechuri.code@gmail.com> (raw)
In-Reply-To: <20261013201538.43156-1-rishik.yechuri.code@gmail.com>
The driver defines SetToDs(), SetFrDs(), SetMFrag(), ClearMFrag(),
ClearRetry(), SetPwrMgt(), ClearPwrMgt(), SetMData(), ClearMData() and
SetPrivacy() in wifi.h to set and clear bits of the IEEE 802.11 Frame
Control field, using private _TO_DS_ through _ORDER_ bit definitions
that duplicate the IEEE80211_FCTL_* constants in <linux/ieee80211.h>.
Replace each use of these macros by operating on the frame_control
member directly with the corresponding IEEE80211_FCTL_* mask, as is
done elsewhere in the wireless subsystem.
In rtw_xmitframe_coalesce(), the header pointer is updated on each
iteration of the fragmentation loop, since mem_start advances to a new
fragment each time.
When constructing the BIP additional authentication data, mask the
Retry, Power Management and More Data bits in a local copy of the
Frame Control field before copying it into the buffer. This matches
bip_aad() in net/mac80211/wpa.c.
Remove the macro definitions and the private bit definitions, which no
longer have any users. Also remove the mem_start variable from
rtw_mgmt_xmitframe_coalesce(), as its only use was the SetPrivacy()
call.
No functional change intended.
Signed-off-by: Rishik Yechuri <rishik.yechuri.code@gmail.com>
---
drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 12 +++---
drivers/staging/rtl8723bs/core/rtw_security.c | 9 +++--
drivers/staging/rtl8723bs/core/rtw_xmit.c | 29 +++++++-------
drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c | 12 +++---
drivers/staging/rtl8723bs/include/wifi.h | 39 -------------------
5 files changed, 33 insertions(+), 68 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
index d318b0ff4..842c3d39c 100644
--- a/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8723bs/core/rtw_mlme_ext.c
@@ -2573,7 +2573,7 @@ void issue_auth(struct adapter *padapter, struct sta_info *psta, unsigned short
if ((pmlmeinfo->auth_seq == 3) && (pmlmeinfo->state & WIFI_FW_AUTH_STATE) && (use_shared_key == 1)) {
pframe = rtw_set_ie(pframe, WLAN_EID_CHALLENGE, 128, pmlmeinfo->chg_txt, &(pattrib->pktlen));
- SetPrivacy(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
pattrib->hdrlen = sizeof(struct ieee80211_hdr_3addr);
@@ -2926,12 +2926,12 @@ static int _issue_nulldata(struct adapter *padapter, unsigned char *da,
*(fctrl) = 0;
if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)
- SetFrDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
else if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE)
- SetToDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_TODS);
if (power_mode)
- SetPwrMgt(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PM);
memcpy(pwlanhdr->addr1, da, ETH_ALEN);
memcpy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)), ETH_ALEN);
@@ -3068,9 +3068,9 @@ static int _issue_qos_nulldata(struct adapter *padapter, unsigned char *da,
*(fctrl) = 0;
if ((pmlmeinfo->state & 0x03) == WIFI_FW_AP_STATE)
- SetFrDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
else if ((pmlmeinfo->state & 0x03) == WIFI_FW_STATION_STATE)
- SetToDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_TODS);
qc = (unsigned short *)(pframe + pattrib->hdrlen - 2);
diff --git a/drivers/staging/rtl8723bs/core/rtw_security.c b/drivers/staging/rtl8723bs/core/rtw_security.c
index ae64823af..fc3113922 100644
--- a/drivers/staging/rtl8723bs/core/rtw_security.c
+++ b/drivers/staging/rtl8723bs/core/rtw_security.c
@@ -1277,6 +1277,7 @@ u32 rtw_BIP_verify(struct adapter *padapter, u8 *precvframe)
u8 mic[16];
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
__le16 le_tmp;
+ __le16 mask_fc;
__le64 le_tmp64 = 0;
ori_len = pattrib->pkt_len - WLAN_HDR_A3_LEN + BIP_AAD_SIZE;
@@ -1320,10 +1321,10 @@ u32 rtw_BIP_verify(struct adapter *padapter, u8 *precvframe)
memset(p + 2 + len - 8, 0, 8);
/* conscruct AAD, copy frame control field */
- memcpy(BIP_AAD, &pwlanhdr->frame_control, 2);
- ClearRetry(BIP_AAD);
- ClearPwrMgt(BIP_AAD);
- ClearMData(BIP_AAD);
+ mask_fc = pwlanhdr->frame_control;
+ mask_fc &= ~cpu_to_le16(IEEE80211_FCTL_RETRY | IEEE80211_FCTL_PM |
+ IEEE80211_FCTL_MOREDATA);
+ memcpy(BIP_AAD, &mask_fc, 2);
/* conscruct AAD, copy address 1 to address 3 */
memcpy(BIP_AAD + 2, &pwlanhdr->addrs, sizeof(pwlanhdr->addrs));
diff --git a/drivers/staging/rtl8723bs/core/rtw_xmit.c b/drivers/staging/rtl8723bs/core/rtw_xmit.c
index 364de3c8d..db75ff51f 100644
--- a/drivers/staging/rtl8723bs/core/rtw_xmit.c
+++ b/drivers/staging/rtl8723bs/core/rtw_xmit.c
@@ -921,7 +921,7 @@ int rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
{
/* 1.Data transfer to AP */
/* 2.Arp pkt will relayed by AP */
- SetToDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_TODS);
memcpy(pwlanhdr->addr1, get_bssid(pmlmepriv), ETH_ALEN);
memcpy(pwlanhdr->addr2, pattrib->src, ETH_ALEN);
memcpy(pwlanhdr->addr3, pattrib->dst, ETH_ALEN);
@@ -930,7 +930,7 @@ int rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
if (pqospriv->qos_option)
qos_option = true;
} else if (check_fwstate(pmlmepriv, WIFI_AP_STATE)) {
- SetFrDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
memcpy(pwlanhdr->addr1, pattrib->dst, ETH_ALEN);
memcpy(pwlanhdr->addr2, get_bssid(pmlmepriv), ETH_ALEN);
memcpy(pwlanhdr->addr3, pattrib->src, ETH_ALEN);
@@ -950,10 +950,10 @@ int rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
}
if (pattrib->mdata)
- SetMData(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_MOREDATA);
if (pattrib->encrypt)
- SetPrivacy(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
if (qos_option) {
qc = (unsigned short *)(hdr + pattrib->hdrlen - 2);
@@ -1069,6 +1069,7 @@ int rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct
SIZE_PTR addr;
u8 *pframe, *mem_start;
+ struct ieee80211_hdr *hdr;
u8 hw_hdr_offset;
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
@@ -1106,8 +1107,9 @@ int rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct
mpdu_len = frg_len;
pframe = mem_start;
+ hdr = (struct ieee80211_hdr *)mem_start;
- SetMFrag(mem_start);
+ hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
pframe += pattrib->hdrlen;
mpdu_len -= pattrib->hdrlen;
@@ -1157,7 +1159,7 @@ int rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct
((pattrib->bswenc) ? pattrib->icv_len : 0) +
mem_sz;
- ClearMFrag(mem_start);
+ hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS);
break;
}
@@ -1185,7 +1187,7 @@ int rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct
/* broadcast or multicast management pkt use BIP, unicast management pkt use CCMP encryption */
int rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, struct xmit_frame *pxmitframe)
{
- u8 *pframe, *mem_start = NULL, *tmp_buf = NULL;
+ u8 *pframe, *tmp_buf = NULL;
u8 subtype;
struct sta_info *psta = NULL;
struct pkt_attrib *pattrib = &pxmitframe->attrib;
@@ -1196,10 +1198,11 @@ int rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, s
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
struct ieee80211_hdr *pwlanhdr;
+ __le16 mask_fc;
u8 MME[_MME_IE_LENGTH_];
u32 ori_len;
- mem_start = pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
+ pframe = (u8 *)(pxmitframe->buf_addr) + TXDESC_OFFSET;
pwlanhdr = (struct ieee80211_hdr *)pframe;
ori_len = BIP_AAD_SIZE + pattrib->pktlen;
@@ -1249,10 +1252,10 @@ int rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, s
frame_body_len = pattrib->pktlen - sizeof(struct ieee80211_hdr_3addr);
/* conscruct AAD, copy frame control field */
- memcpy(BIP_AAD, &pwlanhdr->frame_control, 2);
- ClearRetry(BIP_AAD);
- ClearPwrMgt(BIP_AAD);
- ClearMData(BIP_AAD);
+ mask_fc = pwlanhdr->frame_control;
+ mask_fc &= ~cpu_to_le16(IEEE80211_FCTL_RETRY | IEEE80211_FCTL_PM |
+ IEEE80211_FCTL_MOREDATA);
+ memcpy(BIP_AAD, &mask_fc, 2);
/* conscruct AAD, copy address 1 to address 3 */
memcpy(BIP_AAD + 2, &pwlanhdr->addrs, sizeof(pwlanhdr->addrs));
/* copy management fram body */
@@ -1329,7 +1332,7 @@ int rtw_mgmt_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, s
pattrib->last_txcmdsz = pattrib->pktlen;
/* set protected bit must be before SW encrypt */
- SetPrivacy(mem_start);
+ pwlanhdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_PROTECTED);
/* software encrypt */
xmitframe_swencrypt(padapter, pxmitframe);
}
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c b/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
index 734fb9bb1..5600d9064 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c
@@ -192,7 +192,7 @@ static void ConstructPSPoll(struct adapter *padapter, u8 *pframe, u32 *pLength)
/* Frame control. */
fctrl = &pwlanhdr->frame_control;
*(fctrl) = 0;
- SetPwrMgt(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PM);
SetFrameSubType(pframe, WIFI_PSPOLL);
/* AID. */
@@ -229,17 +229,17 @@ static void ConstructNullFunctionData(struct adapter *padapter,
fctrl = &pwlanhdr->frame_control;
*(fctrl) = 0;
if (bForcePowerSave)
- SetPwrMgt(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PM);
switch (cur_network->network.infrastructure_mode) {
case NL80211_IFTYPE_STATION:
- SetToDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_TODS);
ether_addr_copy(pwlanhdr->addr1, get_my_bssid(&(pmlmeinfo->network)));
ether_addr_copy(pwlanhdr->addr2, myid(&(padapter->eeprompriv)));
ether_addr_copy(pwlanhdr->addr3, StaAddr);
break;
case NL80211_IFTYPE_AP:
- SetFrDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
ether_addr_copy(pwlanhdr->addr1, StaAddr);
ether_addr_copy(pwlanhdr->addr2, get_my_bssid(&(pmlmeinfo->network)));
ether_addr_copy(pwlanhdr->addr3, myid(&(padapter->eeprompriv)));
@@ -732,9 +732,9 @@ static void ConstructBtNullFunctionData(struct adapter *padapter,
fctrl = &pwlanhdr->frame_control;
*fctrl = 0;
if (bForcePowerSave)
- SetPwrMgt(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_PM);
- SetFrDs(fctrl);
+ *fctrl |= cpu_to_le16(IEEE80211_FCTL_FROMDS);
ether_addr_copy(pwlanhdr->addr1, StaAddr);
ether_addr_copy(pwlanhdr->addr2, myid(&padapter->eeprompriv));
ether_addr_copy(pwlanhdr->addr3, myid(&padapter->eeprompriv));
diff --git a/drivers/staging/rtl8723bs/include/wifi.h b/drivers/staging/rtl8723bs/include/wifi.h
index 800bfd962..bfc985870 100644
--- a/drivers/staging/rtl8723bs/include/wifi.h
+++ b/drivers/staging/rtl8723bs/include/wifi.h
@@ -63,45 +63,6 @@ enum {
WIFI_QOS_DATA_NULL = (BIT(6) | WIFI_QOS_DATA_TYPE),
};
-#define _TO_DS_ BIT(8)
-#define _FROM_DS_ BIT(9)
-#define _MORE_FRAG_ BIT(10)
-#define _RETRY_ BIT(11)
-#define _PWRMGT_ BIT(12)
-#define _MORE_DATA_ BIT(13)
-#define _PRIVACY_ BIT(14)
-#define _ORDER_ BIT(15)
-
-#define SetToDs(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_))
-
-#define SetFrDs(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_))
-
-#define SetMFrag(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_))
-
-#define ClearMFrag(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_)))
-
-#define ClearRetry(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_)))
-
-#define SetPwrMgt(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_))
-
-#define ClearPwrMgt(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_)))
-
-#define SetMData(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_))
-
-#define ClearMData(pbuf) \
- (*(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_)))
-
-#define SetPrivacy(pbuf) \
- (*(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_))
-
#define GetFrameType(pbuf) \
(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
--
2.43.0
next prev parent reply other threads:[~2026-10-13 20:15 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 20:15 [PATCH 00/10] staging: rtl8723bs: replace private 802.11 header macros with generic helpers Rishik Yechuri
2026-10-13 20:15 ` [PATCH 01/10] staging: rtl8723bs: use struct ieee80211_hdr for header addresses Rishik Yechuri
2026-10-13 20:15 ` [PATCH 02/10] staging: rtl8723bs: use ieee80211_has_*() to test frame control flags Rishik Yechuri
2026-10-13 20:15 ` Rishik Yechuri [this message]
2026-10-13 20:15 ` [PATCH 04/10] staging: rtl8723bs: use ieee80211_is_*() for frame type tests Rishik Yechuri
2026-10-13 20:15 ` [PATCH 05/10] staging: rtl8723bs: use IEEE80211_FCTL_* masks for frame type dispatch Rishik Yechuri
2026-10-13 20:15 ` [PATCH 06/10] staging: rtl8723bs: remove unused num member from struct mlme_handler Rishik Yechuri
2026-10-13 20:15 ` [PATCH 07/10] staging: rtl8723bs: use IEEE80211_FTYPE_* and IEEE80211_STYPE_* values Rishik Yechuri
2026-10-13 20:15 ` [PATCH 08/10] staging: rtl8723bs: use struct ieee80211_hdr for seq_ctrl and duration_id Rishik Yechuri
2026-10-13 20:15 ` [PATCH 09/10] staging: rtl8723bs: use IEEE80211_QOS_CTL_* masks for QoS control Rishik Yechuri
2026-10-13 20:15 ` [PATCH 10/10] staging: rtl8723bs: use ieee80211_get_DA() and ieee80211_get_SA() Rishik Yechuri
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261013201538.43156-4-rishik.yechuri.code@gmail.com \
--to=epicrishik@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=rishik.yechuri.code@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox