[PATCH v8 3/3] staging: rtl8723bs: refactor queue priority initialization

From: artur . ugnivenko

Date: Mon May 25 2026 - 13:36:32 EST


From: Artur Ugnivenko <artur.ugnivenko@xxxxxx>

Pack individual priority values into an enum-indexed array
to simplify the initialization code and prevent passing around
six loose values as function parameters.

Signed-off-by: Artur Ugnivenko <artur.ugnivenko@xxxxxx>
---
Changes in v8:
- Remove the struct from v7, use an enum-indexed array instead
- Remove other lines ending in parentheses fixes to keep the
commit small
Changes in v7:
- Add changelog.
- Add transmit_queues struct in include/drv_types.h to improve
style of _InitNormalChipRegPriority
Changes in v6: Make the patch apply to gregkh/staging-testing.
Changes in v5: No changes in this patch.
Changes in v4: No changes in this patch.
Changes in v3: Split the patch into multiple patches.
Changes in v2: Make patch apply to gregkh/staging-testing.

drivers/staging/rtl8723bs/hal/sdio_halinit.c | 108 +++++++++---------
drivers/staging/rtl8723bs/include/drv_types.h | 10 ++
2 files changed, 65 insertions(+), 53 deletions(-)

diff --git a/drivers/staging/rtl8723bs/hal/sdio_halinit.c b/drivers/staging/rtl8723bs/hal/sdio_halinit.c
index 6f2aea984b30..01911188fd44 100644
--- a/drivers/staging/rtl8723bs/hal/sdio_halinit.c
+++ b/drivers/staging/rtl8723bs/hal/sdio_halinit.c
@@ -188,25 +188,18 @@ static void _InitTxBufferBoundary(struct adapter *padapter)
rtw_write8(padapter, REG_TDECTRL + 1, txpktbuf_bndy);
}

-static void _InitNormalChipRegPriority(
- struct adapter *Adapter,
- u16 beQ,
- u16 bkQ,
- u16 viQ,
- u16 voQ,
- u16 mgtQ,
- u16 hiQ
-)
+static void _InitNormalChipRegPriority(struct adapter *Adapter,
+ u16 queues[TX_Q_MAX])
{
u16 value16 = (rtw_read16(Adapter, REG_TRXDMA_CTRL) & 0x7);

value16 |=
- _TXDMA_BEQ_MAP(beQ) |
- _TXDMA_BKQ_MAP(bkQ) |
- _TXDMA_VIQ_MAP(viQ) |
- _TXDMA_VOQ_MAP(voQ) |
- _TXDMA_MGQ_MAP(mgtQ) |
- _TXDMA_HIQ_MAP(hiQ);
+ _TXDMA_BEQ_MAP(queues[TX_Q_BE]) |
+ _TXDMA_BKQ_MAP(queues[TX_Q_BK]) |
+ _TXDMA_VIQ_MAP(queues[TX_Q_VI]) |
+ _TXDMA_VOQ_MAP(queues[TX_Q_VO]) |
+ _TXDMA_MGQ_MAP(queues[TX_Q_MGT]) |
+ _TXDMA_HIQ_MAP(queues[TX_Q_HI]);

rtw_write16(Adapter, REG_TRXDMA_CTRL, value16);
}
@@ -231,17 +224,18 @@ static void _InitNormalChipOneOutEpPriority(struct adapter *Adapter)
break;
}

- _InitNormalChipRegPriority(
- Adapter, value, value, value, value, value, value
- );
+ u16 queues[TX_Q_MAX];
+
+ for (int i = 0; i < TX_Q_MAX; i++)
+ queues[i] = value;

+ _InitNormalChipRegPriority(Adapter, queues);
}

static void _InitNormalChipTwoOutEpPriority(struct adapter *Adapter)
{
struct hal_com_data *pHalData = GET_HAL_DATA(Adapter);
struct registry_priv *pregistrypriv = &Adapter->registrypriv;
- u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;

u16 valueHi = 0;
u16 valueLow = 0;
@@ -263,50 +257,58 @@ static void _InitNormalChipTwoOutEpPriority(struct adapter *Adapter)
break;
}

+ u16 typical_queues[TX_Q_MAX] = {
+ [TX_Q_BE] = valueLow,
+ [TX_Q_BK] = valueLow,
+ [TX_Q_VI] = valueHi,
+ [TX_Q_VO] = valueHi,
+ [TX_Q_MGT] = valueHi,
+ [TX_Q_HI] = valueHi,
+ };
+
+ u16 wmm_queues[TX_Q_MAX] = {
+ [TX_Q_BE] = valueLow,
+ [TX_Q_BK] = valueHi,
+ [TX_Q_VI] = valueHi,
+ [TX_Q_VO] = valueLow,
+ [TX_Q_MGT] = valueHi,
+ [TX_Q_HI] = valueHi,
+ };
+
if (!pregistrypriv->wifi_spec) {
- beQ = valueLow;
- bkQ = valueLow;
- viQ = valueHi;
- voQ = valueHi;
- mgtQ = valueHi;
- hiQ = valueHi;
+ _InitNormalChipRegPriority(Adapter, typical_queues);
} else {
/* for WMM , CONFIG_OUT_EP_WIFI_MODE */
- beQ = valueLow;
- bkQ = valueHi;
- viQ = valueHi;
- voQ = valueLow;
- mgtQ = valueHi;
- hiQ = valueHi;
+ _InitNormalChipRegPriority(Adapter, wmm_queues);
}
-
- _InitNormalChipRegPriority(Adapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
-
}

static void _InitNormalChipThreeOutEpPriority(struct adapter *padapter)
{
struct registry_priv *pregistrypriv = &padapter->registrypriv;
- u16 beQ, bkQ, viQ, voQ, mgtQ, hiQ;

- if (!pregistrypriv->wifi_spec) {
- /* typical setting */
- beQ = QUEUE_LOW;
- bkQ = QUEUE_LOW;
- viQ = QUEUE_NORMAL;
- voQ = QUEUE_HIGH;
- mgtQ = QUEUE_HIGH;
- hiQ = QUEUE_HIGH;
- } else {
- /* for WMM */
- beQ = QUEUE_LOW;
- bkQ = QUEUE_NORMAL;
- viQ = QUEUE_NORMAL;
- voQ = QUEUE_HIGH;
- mgtQ = QUEUE_HIGH;
- hiQ = QUEUE_HIGH;
- }
- _InitNormalChipRegPriority(padapter, beQ, bkQ, viQ, voQ, mgtQ, hiQ);
+ u16 typical_queues[TX_Q_MAX] = {
+ [TX_Q_BE] = QUEUE_LOW,
+ [TX_Q_BK] = QUEUE_LOW,
+ [TX_Q_VI] = QUEUE_NORMAL,
+ [TX_Q_VO] = QUEUE_HIGH,
+ [TX_Q_MGT] = QUEUE_HIGH,
+ [TX_Q_HI] = QUEUE_HIGH,
+ };
+
+ u16 wmm_queues[TX_Q_MAX] = {
+ [TX_Q_BE] = QUEUE_LOW,
+ [TX_Q_BK] = QUEUE_NORMAL,
+ [TX_Q_VI] = QUEUE_NORMAL,
+ [TX_Q_VO] = QUEUE_HIGH,
+ [TX_Q_MGT] = QUEUE_HIGH,
+ [TX_Q_HI] = QUEUE_HIGH,
+ };
+
+ if (!pregistrypriv->wifi_spec)
+ _InitNormalChipRegPriority(padapter, typical_queues);
+ else
+ _InitNormalChipRegPriority(padapter, wmm_queues);
}

static void _InitQueuePriority(struct adapter *Adapter)
diff --git a/drivers/staging/rtl8723bs/include/drv_types.h b/drivers/staging/rtl8723bs/include/drv_types.h
index 552d0c5fa47f..b2c43f53571a 100644
--- a/drivers/staging/rtl8723bs/include/drv_types.h
+++ b/drivers/staging/rtl8723bs/include/drv_types.h
@@ -373,6 +373,16 @@ struct adapter {
unsigned char in_cta_test;
};

+enum transmit_queues {
+ TX_Q_BE = 0,
+ TX_Q_BK,
+ TX_Q_VI,
+ TX_Q_VO,
+ TX_Q_MGT,
+ TX_Q_HI,
+ TX_Q_MAX,
+};
+
#define adapter_to_dvobj(adapter) (adapter->dvobj)
#define adapter_to_pwrctl(adapter) (dvobj_to_pwrctl(adapter->dvobj))
#define adapter_wdev_data(adapter) (&((adapter)->wdev_data))
--
2.54.0