From: Ho Jie Feng <hjf3108@gmail.com>
To: Ping-Ke Shih <pkshih@realtek.com>
Cc: linux-wireless@vger.kernel.org, Ho Jie Feng <hjf3108@gmail.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH 1/2] wifi: rtw88: allow driver-owned TX buffers to bypass mac80211 TX status
Date: Thu, 29 Oct 2026 14:08:56 +0800 [thread overview]
Message-ID: <20261029060859.90002-2-hjf3108@gmail.com> (raw)
In-Reply-To: <20261029060859.90002-1-hjf3108@gmail.com>
Add a flag so that the driver can flag certain frames that
skip reporting back to mac80211. This is used for driver
generated frames that aren't a TX from mac80211.
Signed-off-by: Ho Jie Feng <hjf3108@gmail.com>
---
drivers/net/wireless/realtek/rtw88/main.h | 1 +
drivers/net/wireless/realtek/rtw88/pci.c | 6 ++++++
drivers/net/wireless/realtek/rtw88/pci.h | 1 +
drivers/net/wireless/realtek/rtw88/sdio.c | 6 ++++++
drivers/net/wireless/realtek/rtw88/sdio.h | 1 +
drivers/net/wireless/realtek/rtw88/usb.c | 6 ++++++
drivers/net/wireless/realtek/rtw88/usb.h | 1 +
7 files changed, 22 insertions(+)
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
index d59f6e323adf0..7bd2e224e845b 100644
--- a/drivers/net/wireless/realtek/rtw88/main.h
+++ b/drivers/net/wireless/realtek/rtw88/main.h
@@ -637,6 +637,7 @@ struct rtw_tx_pkt_info {
u8 hw_ssn_sel;
bool nav_use_hdr;
bool bt_null;
+ bool drv_frame;
};
struct rtw_rx_pkt_stat {
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
index 66d2e5f514447..5f6df521e9c16 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -848,6 +848,7 @@ static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev,
tx_data = rtw_pci_get_tx_data(skb);
tx_data->dma = dma;
tx_data->sn = pkt_info->sn;
+ tx_data->drv_frame = pkt_info->drv_frame;
spin_lock_bh(&rtwpci->irq_lock);
@@ -992,6 +993,11 @@ static void rtw_pci_tx_isr(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz);
+ if (tx_data->drv_frame) {
+ dev_kfree_skb_irq(skb);
+ continue;
+ }
+
info = IEEE80211_SKB_CB(skb);
/* enqueue to wait for tx report */
diff --git a/drivers/net/wireless/realtek/rtw88/pci.h b/drivers/net/wireless/realtek/rtw88/pci.h
index 8ffdea11378f0..37d90caf8269c 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.h
+++ b/drivers/net/wireless/realtek/rtw88/pci.h
@@ -171,6 +171,7 @@ struct rtw_pci_tx_buffer_desc {
struct rtw_pci_tx_data {
dma_addr_t dma;
u8 sn;
+ bool drv_frame;
};
struct rtw_pci_ring {
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
index dc2fd0f8f9fff..6666aa5245d70 100644
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
@@ -1312,6 +1312,7 @@ static int rtw_sdio_tx_write(struct rtw_dev *rtwdev,
tx_data = rtw_sdio_get_tx_data(skb);
tx_data->sn = pkt_info->sn;
+ tx_data->drv_frame = pkt_info->drv_frame;
/* The TX worker may already have freed the skb, so do not touch it. */
skb_queue_tail(&rtwsdio->tx_queue[queue], skb);
@@ -1604,6 +1605,11 @@ static void rtw_sdio_indicate_tx_status(struct rtw_dev *rtwdev,
skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz);
+ if (tx_data->drv_frame) {
+ dev_kfree_skb_any(skb);
+ return;
+ }
+
/* enqueue to wait for tx report */
if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) {
rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn);
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.h b/drivers/net/wireless/realtek/rtw88/sdio.h
index 6e7e6009744b0..19852077326a4 100644
--- a/drivers/net/wireless/realtek/rtw88/sdio.h
+++ b/drivers/net/wireless/realtek/rtw88/sdio.h
@@ -153,6 +153,7 @@ struct sdio_device_id;
struct rtw_sdio_tx_data {
u8 sn;
+ bool drv_frame;
};
struct rtw_sdio_work_data {
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
index 715a2ce342d92..f03b00e517576 100644
--- a/drivers/net/wireless/realtek/rtw88/usb.c
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
@@ -342,6 +342,11 @@ static void rtw_usb_write_port_tx_complete(struct urb *urb)
skb_pull(skb, rtwdev->chip->tx_pkt_desc_sz);
+ if (tx_data->drv_frame) {
+ dev_kfree_skb_any(skb);
+ continue;
+ }
+
/* enqueue to wait for tx report */
if (info->flags & IEEE80211_TX_CTL_REQ_TX_STATUS) {
rtw_tx_report_enqueue(rtwdev, skb, tx_data->sn);
@@ -655,6 +660,7 @@ static int rtw_usb_tx_write(struct rtw_dev *rtwdev,
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
tx_data = rtw_usb_get_tx_data(skb);
tx_data->sn = pkt_info->sn;
+ tx_data->drv_frame = pkt_info->drv_frame;
skb_queue_tail(&rtwusb->tx_queue[ep], skb);
diff --git a/drivers/net/wireless/realtek/rtw88/usb.h b/drivers/net/wireless/realtek/rtw88/usb.h
index 94ff21dd08463..e861e9a66ab22 100644
--- a/drivers/net/wireless/realtek/rtw88/usb.h
+++ b/drivers/net/wireless/realtek/rtw88/usb.h
@@ -59,6 +59,7 @@ struct rx_usb_ctrl_block {
struct rtw_usb_tx_data {
u8 sn;
+ bool drv_frame;
};
struct rtw_usb {
--
2.55.0
next prev parent reply other threads:[~2026-10-29 6:09 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-29 6:08 [PATCH 0/2] wifi: rtw88: keep driver-owned buffers out of mac80211 TX status Ho Jie Feng
2026-10-29 6:08 ` Ho Jie Feng [this message]
2026-10-29 12:05 ` [PATCH 1/2] wifi: rtw88: allow driver-owned TX buffers to bypass " Bitterblue Smith
2026-10-29 14:28 ` Ho Jie Feng
2026-10-29 6:08 ` [PATCH 2/2] wifi: rtw88: usb: don't report the aggregation buffer as a frame Ho Jie Feng
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=20261029060859.90002-2-hjf3108@gmail.com \
--to=hjf3108@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
--cc=pkshih@realtek.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.