All of lore.kernel.org
 help / color / mirror / Atom feed
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


  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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.