[PATCH 59/61] staging: rtl8723bs: inline rtl8723bs_init_xmit_priv helper

From: Arsenii Pashchenko

Date: Wed Jul 15 2026 - 09:07:40 EST


Inline the xmit private initialization logic from the internal function
directly into rtw_hal_init_xmit_priv. This eliminates an unnecessary
redirection layer for initializing SDIO-specific completions and locks.

Signed-off-by: Arsenii Pashchenko <ulijg308@xxxxxxxxx>
---
drivers/staging/rtl8723bs/hal/hal_intf.c | 118 +++++++++++++++++-
.../staging/rtl8723bs/hal/rtl8723bs_recv.c | 88 +------------
.../staging/rtl8723bs/hal/rtl8723bs_xmit.c | 53 --------
.../staging/rtl8723bs/include/rtl8723b_hal.h | 2 +
.../staging/rtl8723bs/include/rtl8723b_recv.h | 2 +-
.../staging/rtl8723bs/include/rtl8723b_xmit.h | 3 +-
6 files changed, 121 insertions(+), 145 deletions(-)

diff --git a/drivers/staging/rtl8723bs/hal/hal_intf.c b/drivers/staging/rtl8723bs/hal/hal_intf.c
index 7cf5128e7..3244f121d 100644
--- a/drivers/staging/rtl8723bs/hal/hal_intf.c
+++ b/drivers/staging/rtl8723bs/hal/hal_intf.c
@@ -278,17 +278,129 @@ s32 rtw_hal_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe)

s32 rtw_hal_init_xmit_priv(struct adapter *padapter)
{
- return rtl8723bs_init_xmit_priv(padapter);
+ struct xmit_priv *xmitpriv = &padapter->xmitpriv;
+ struct hal_com_data *phal;
+
+ phal = GET_HAL_DATA(padapter);
+
+ spin_lock_init(&phal->SdioTxFIFOFreePageLock);
+ init_completion(&xmitpriv->SdioXmitStart);
+ init_completion(&xmitpriv->SdioXmitTerminate);
+
+ return _SUCCESS;
}

void rtw_hal_free_xmit_priv(struct adapter *padapter)
{
- rtl8723bs_free_xmit_priv(padapter);
+ struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
+ struct xmit_buf *pxmitbuf;
+ struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue;
+ struct list_head *plist, *phead;
+ struct list_head tmplist;
+
+ phead = get_list_head(pqueue);
+ INIT_LIST_HEAD(&tmplist);
+
+ spin_lock_bh(&pqueue->lock);
+ if (!list_empty(&pqueue->queue)) {
+ /* Insert tmplist to end of queue, and delete phead */
+ /* then tmplist become head of queue. */
+ list_add_tail(&tmplist, phead);
+ list_del_init(phead);
+ }
+ spin_unlock_bh(&pqueue->lock);
+
+ phead = &tmplist;
+ while (!list_empty(phead)) {
+ plist = get_next(phead);
+ list_del_init(plist);
+
+ pxmitbuf = container_of(plist, struct xmit_buf, list);
+ rtw_free_xmitframe(pxmitpriv, (struct xmit_frame *)pxmitbuf->priv_data);
+ pxmitbuf->priv_data = NULL;
+ rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
+ }
}

s32 rtw_hal_init_recv_priv(struct adapter *padapter)
{
- return rtl8723bs_init_recv_priv(padapter);
+ s32 res;
+ u32 i, n;
+ struct recv_priv *precvpriv;
+ struct recv_buf *precvbuf;
+
+ res = _SUCCESS;
+ precvpriv = &padapter->recvpriv;
+
+ /* 3 1. init recv buffer */
+ INIT_LIST_HEAD(&precvpriv->free_recv_buf_queue.queue);
+ spin_lock_init(&precvpriv->free_recv_buf_queue.lock);
+ INIT_LIST_HEAD(&precvpriv->recv_buf_pending_queue.queue);
+ spin_lock_init(&precvpriv->recv_buf_pending_queue.lock);
+
+ n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
+ precvpriv->pallocated_recv_buf = kzalloc(n, GFP_KERNEL);
+ if (!precvpriv->pallocated_recv_buf) {
+ res = _FAIL;
+ goto exit;
+ }
+
+ precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
+
+ /* init each recv buffer */
+ precvbuf = (struct recv_buf *)precvpriv->precv_buf;
+ for (i = 0; i < NR_RECVBUFF; i++) {
+ initrecvbuf(precvbuf, padapter);
+
+ if (!precvbuf->pskb) {
+ SIZE_PTR tmpaddr = 0;
+ SIZE_PTR alignment = 0;
+
+ precvbuf->pskb = __dev_alloc_skb(
+ MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ,
+ GFP_ATOMIC);
+ if (precvbuf->pskb) {
+ precvbuf->pskb->dev = padapter->pnetdev;
+
+ tmpaddr = (SIZE_PTR)precvbuf->pskb->data;
+ alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
+ skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
+ }
+ }
+
+ list_add_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue);
+
+ precvbuf++;
+ }
+ precvpriv->free_recv_buf_queue_cnt = i;
+
+ if (res == _FAIL)
+ goto initbuferror;
+
+ /* 3 2. init tasklet */
+ tasklet_setup(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet);
+
+ goto exit;
+
+initbuferror:
+ precvbuf = (struct recv_buf *)precvpriv->precv_buf;
+ if (precvbuf) {
+ n = precvpriv->free_recv_buf_queue_cnt;
+ precvpriv->free_recv_buf_queue_cnt = 0;
+ for (i = 0; i < n ; i++) {
+ list_del_init(&precvbuf->list);
+ if (precvbuf->pskb)
+ dev_kfree_skb_any(precvbuf->pskb);
+ precvbuf++;
+ }
+ precvpriv->precv_buf = NULL;
+ }
+
+ kfree(precvpriv->pallocated_recv_buf);
+ precvpriv->pallocated_recv_buf = NULL;
+
+exit:
+ return res;
}

void rtw_hal_free_recv_priv(struct adapter *padapter)
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
index 97dce28fd..384c5e643 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
@@ -8,7 +8,7 @@
#include <drv_types.h>
#include <rtl8723b_hal.h>

-static void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter)
+void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter)
{
INIT_LIST_HEAD(&precvbuf->list);
spin_lock_init(&precvbuf->recvbuf_lock);
@@ -213,7 +213,7 @@ static inline bool pkt_exceeds_tail(struct recv_priv *precvpriv,
return false;
}

-static void rtl8723bs_recv_tasklet(struct tasklet_struct *t)
+void rtl8723bs_recv_tasklet(struct tasklet_struct *t)
{
struct adapter *padapter = from_tasklet(padapter, t,
recvpriv.recv_tasklet);
@@ -357,90 +357,6 @@ static void rtl8723bs_recv_tasklet(struct tasklet_struct *t)
} while (1);
}

-/*
- * Initialize recv private variable for hardware dependent
- * 1. recv buf
- * 2. recv tasklet
- *
- */
-s32 rtl8723bs_init_recv_priv(struct adapter *padapter)
-{
- s32 res;
- u32 i, n;
- struct recv_priv *precvpriv;
- struct recv_buf *precvbuf;
-
- res = _SUCCESS;
- precvpriv = &padapter->recvpriv;
-
- /* 3 1. init recv buffer */
- INIT_LIST_HEAD(&precvpriv->free_recv_buf_queue.queue);
- spin_lock_init(&precvpriv->free_recv_buf_queue.lock);
- INIT_LIST_HEAD(&precvpriv->recv_buf_pending_queue.queue);
- spin_lock_init(&precvpriv->recv_buf_pending_queue.lock);
-
- n = NR_RECVBUFF * sizeof(struct recv_buf) + 4;
- precvpriv->pallocated_recv_buf = kzalloc(n, GFP_KERNEL);
- if (!precvpriv->pallocated_recv_buf) {
- res = _FAIL;
- goto exit;
- }
-
- precvpriv->precv_buf = (u8 *)N_BYTE_ALIGMENT((SIZE_PTR)(precvpriv->pallocated_recv_buf), 4);
-
- /* init each recv buffer */
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- for (i = 0; i < NR_RECVBUFF; i++) {
- initrecvbuf(precvbuf, padapter);
-
- if (!precvbuf->pskb) {
- SIZE_PTR tmpaddr = 0;
- SIZE_PTR alignment = 0;
-
- precvbuf->pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, GFP_ATOMIC);
- if (precvbuf->pskb) {
- precvbuf->pskb->dev = padapter->pnetdev;
-
- tmpaddr = (SIZE_PTR)precvbuf->pskb->data;
- alignment = tmpaddr & (RECVBUFF_ALIGN_SZ-1);
- skb_reserve(precvbuf->pskb, (RECVBUFF_ALIGN_SZ - alignment));
- }
- }
-
- list_add_tail(&precvbuf->list, &precvpriv->free_recv_buf_queue.queue);
-
- precvbuf++;
- }
- precvpriv->free_recv_buf_queue_cnt = i;
-
- if (res == _FAIL)
- goto initbuferror;
-
- /* 3 2. init tasklet */
- tasklet_setup(&precvpriv->recv_tasklet, rtl8723bs_recv_tasklet);
-
- goto exit;
-
-initbuferror:
- precvbuf = (struct recv_buf *)precvpriv->precv_buf;
- if (precvbuf) {
- n = precvpriv->free_recv_buf_queue_cnt;
- precvpriv->free_recv_buf_queue_cnt = 0;
- for (i = 0; i < n ; i++) {
- list_del_init(&precvbuf->list);
- if (precvbuf->pskb)
- dev_kfree_skb_any(precvbuf->pskb);
- precvbuf++;
- }
- precvpriv->precv_buf = NULL;
- }
-
- kfree(precvpriv->pallocated_recv_buf);
- precvpriv->pallocated_recv_buf = NULL;
-
-exit:
- return res;
-}

/*
* Free recv private variable of hardware dependent
diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c b/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
index 2298c41df..1037b9d11 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_xmit.c
@@ -452,56 +452,3 @@ s32 rtl8723bs_mgnt_xmit(

return ret;
}
-
-
-/*
- * Return
- *_SUCCESS start thread ok
- *_FAIL start thread fail
- *
- */
-s32 rtl8723bs_init_xmit_priv(struct adapter *padapter)
-{
- struct xmit_priv *xmitpriv = &padapter->xmitpriv;
- struct hal_com_data *phal;
-
- phal = GET_HAL_DATA(padapter);
-
- spin_lock_init(&phal->SdioTxFIFOFreePageLock);
- init_completion(&xmitpriv->SdioXmitStart);
- init_completion(&xmitpriv->SdioXmitTerminate);
-
- return _SUCCESS;
-}
-
-void rtl8723bs_free_xmit_priv(struct adapter *padapter)
-{
- struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
- struct xmit_buf *pxmitbuf;
- struct __queue *pqueue = &pxmitpriv->pending_xmitbuf_queue;
- struct list_head *plist, *phead;
- struct list_head tmplist;
-
- phead = get_list_head(pqueue);
- INIT_LIST_HEAD(&tmplist);
-
- spin_lock_bh(&pqueue->lock);
- if (!list_empty(&pqueue->queue)) {
- /* Insert tmplist to end of queue, and delete phead */
- /* then tmplist become head of queue. */
- list_add_tail(&tmplist, phead);
- list_del_init(phead);
- }
- spin_unlock_bh(&pqueue->lock);
-
- phead = &tmplist;
- while (!list_empty(phead)) {
- plist = get_next(phead);
- list_del_init(plist);
-
- pxmitbuf = container_of(plist, struct xmit_buf, list);
- rtw_free_xmitframe(pxmitpriv, (struct xmit_frame *)pxmitbuf->priv_data);
- pxmitbuf->priv_data = NULL;
- rtw_free_xmitbuf(pxmitpriv, pxmitbuf);
- }
-}
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h b/drivers/staging/rtl8723bs/include/rtl8723b_hal.h
index fe6401c4f..e00d9e6b2 100644
--- a/drivers/staging/rtl8723bs/include/rtl8723b_hal.h
+++ b/drivers/staging/rtl8723bs/include/rtl8723b_hal.h
@@ -242,5 +242,7 @@ void Hal_ReadRFGainOffset(struct adapter *padapter, u8 *hwinfo,

void phy_StoreTxPowerByRateBase(struct adapter *padapter);
void phy_ConvertTxPowerByRateInDbmToRelativeValues(struct adapter *padapter);
+void initrecvbuf(struct recv_buf *precvbuf, struct adapter *padapter);
+void rtl8723bs_recv_tasklet(struct tasklet_struct *t);

#endif
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
index e9ebecb22..c4c91f5f4 100644
--- a/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
+++ b/drivers/staging/rtl8723bs/include/rtl8723b_recv.h
@@ -81,7 +81,7 @@ struct rxreport_8723b {
u32 tsfl;
};

-s32 rtl8723bs_init_recv_priv(struct adapter *padapter);
+
void rtl8723bs_free_recv_priv(struct adapter *padapter);

void rtl8723b_query_rx_phy_status(union recv_frame *prframe, struct phy_stat *pphy_stat);
diff --git a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h b/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
index 157b2a808..d467cc301 100644
--- a/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
+++ b/drivers/staging/rtl8723bs/include/rtl8723b_xmit.h
@@ -407,8 +407,7 @@ void rtl8723b_fill_fake_txdesc(struct adapter *padapter, u8 *pDesc, u32 BufferLe

u32 rtl8723bs_hal_init(struct adapter *padapter);
u32 rtl8723bs_hal_deinit(struct adapter *padapter);
-s32 rtl8723bs_init_xmit_priv(struct adapter *padapter);
-void rtl8723bs_free_xmit_priv(struct adapter *padapter);
+
s32 rtl8723bs_mgnt_xmit(struct adapter *padapter, struct xmit_frame *pmgntframe);
s32 rtl8723bs_xmit_buf_handler(struct adapter *padapter);
int rtl8723bs_xmit_thread(void *context);
--
2.55.0