From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
To: "linux-wireless@vger.kernel.org" <linux-wireless@vger.kernel.org>
Cc: Ping-Ke Shih <pkshih@realtek.com>
Subject: [PATCH rtw-next 3/5] wifi: rtw88: pci: Introduce struct rtw_pci_gen
Date: Sat, 24 Oct 2026 02:01:15 +0300 [thread overview]
Message-ID: <fc308de1-a470-4890-a86a-d8936e093bd5@gmail.com> (raw)
In-Reply-To: <2033f1b1-fb12-4a04-aef4-923590e64463@gmail.com>
Move a few functions into a new struct rtw_pci_gen in order to add
support for RTL8821AE and RTL8812AE. That is an older generation of
chips which handle the PCI communications differently.
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
---
drivers/net/wireless/realtek/rtw88/pci.c | 109 ++++++++++++------
drivers/net/wireless/realtek/rtw88/pci.h | 35 ++++++
.../net/wireless/realtek/rtw88/rtw8723de.c | 7 +-
.../net/wireless/realtek/rtw88/rtw8814ae.c | 7 +-
.../net/wireless/realtek/rtw88/rtw8821ce.c | 9 +-
.../net/wireless/realtek/rtw88/rtw8822be.c | 7 +-
.../net/wireless/realtek/rtw88/rtw8822ce.c | 9 +-
7 files changed, 143 insertions(+), 40 deletions(-)
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
index d8c5c11bf728..c51ad15cfba7 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.c
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
@@ -254,6 +254,8 @@ static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
struct rtw_pci_rx_ring *rx_ring,
u8 desc_size, u32 len)
{
+ struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
struct pci_dev *pdev = to_pci_dev(rtwdev->dev);
struct sk_buff *skb = NULL;
dma_addr_t dma;
@@ -269,6 +271,11 @@ static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
return -ENOMEM;
}
rx_ring->r.head = head;
+ rx_ring->r.dma = dma;
+ rx_ring->r.len = len;
+ rx_ring->r.desc_size = desc_size;
+ rx_ring->r.wp = 0;
+ rx_ring->r.rp = 0;
for (i = 0; i < len; i++) {
skb = dev_alloc_skb(buf_sz);
@@ -280,7 +287,7 @@ static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
memset(skb->data, 0, buf_sz);
rx_ring->buf[i] = skb;
- ret = rtw_pci_reset_rx_desc(rtwdev, skb, rx_ring, i, desc_size);
+ ret = pci_gen->reset_rx_desc(rtwdev, skb, rx_ring, i, desc_size);
if (ret) {
allocated = i;
dev_kfree_skb_any(skb);
@@ -288,12 +295,6 @@ static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
}
}
- rx_ring->r.dma = dma;
- rx_ring->r.len = len;
- rx_ring->r.desc_size = desc_size;
- rx_ring->r.wp = 0;
- rx_ring->r.rp = 0;
-
return 0;
err_out:
@@ -316,6 +317,7 @@ static int rtw_pci_init_rx_ring(struct rtw_dev *rtwdev,
static int rtw_pci_init_trx_ring(struct rtw_dev *rtwdev)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
struct rtw_pci_tx_ring *tx_ring;
struct rtw_pci_rx_ring *rx_ring;
const struct rtw_chip_info *chip = rtwdev->chip;
@@ -329,7 +331,7 @@ static int rtw_pci_init_trx_ring(struct rtw_dev *rtwdev)
for (i = 0; i < RTK_MAX_TX_QUEUE_NUM; i++) {
tx_ring = &rtwpci->tx_rings[i];
len = max_num_of_tx_queue(i);
- ret = rtw_pci_init_tx_ring(rtwdev, tx_ring, tx_desc_size, len);
+ ret = pci_gen->init_tx_ring(rtwdev, tx_ring, tx_desc_size, len);
if (ret)
goto out;
}
@@ -525,7 +527,7 @@ static void rtw_pci_dma_reset(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci)
rtwpci->rx_tag = 0;
}
-static int rtw_pci_setup(struct rtw_dev *rtwdev)
+static int rtw_pci_reset(struct rtw_dev *rtwdev)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
@@ -535,6 +537,14 @@ static int rtw_pci_setup(struct rtw_dev *rtwdev)
return 0;
}
+static int rtw_pci_setup(struct rtw_dev *rtwdev)
+{
+ struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
+
+ return pci_gen->reset(rtwdev);
+}
+
static void rtw_pci_dma_release(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci)
{
struct rtw_pci_tx_ring *tx_ring;
@@ -710,7 +720,7 @@ static u32 __pci_get_hw_tx_ring_rp(struct rtw_dev *rtwdev, u8 pci_q)
return FIELD_GET(TRX_BD_IDX_MASK, bd_idx);
}
-static void __pci_flush_queue(struct rtw_dev *rtwdev, u8 pci_q, bool drop)
+static void rtw_pci_flush_queue(struct rtw_dev *rtwdev, u8 pci_q, bool drop)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
struct rtw_pci_tx_ring *ring = &rtwpci->tx_rings[pci_q];
@@ -738,6 +748,9 @@ static void __pci_flush_queue(struct rtw_dev *rtwdev, u8 pci_q, bool drop)
static void __rtw_pci_flush_queues(struct rtw_dev *rtwdev, u32 pci_queues,
bool drop)
{
+ struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
+
u8 q;
for (q = 0; q < RTK_MAX_TX_QUEUE_NUM; q++) {
@@ -747,7 +760,7 @@ static void __rtw_pci_flush_queues(struct rtw_dev *rtwdev, u32 pci_queues,
continue;
if (pci_queues & BIT(q))
- __pci_flush_queue(rtwdev, q, drop);
+ pci_gen->flush_queue(rtwdev, q, drop);
}
}
@@ -790,11 +803,12 @@ static void rtw_pci_tx_kick_off_queue(struct rtw_dev *rtwdev,
static void rtw_pci_tx_kick_off(struct rtw_dev *rtwdev)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
enum rtw_tx_queue_type queue;
for (queue = 0; queue < RTK_MAX_TX_QUEUE_NUM; queue++)
if (test_and_clear_bit(queue, rtwpci->tx_queued))
- rtw_pci_tx_kick_off_queue(rtwdev, queue);
+ pci_gen->tx_kick_off_queue(rtwdev, queue);
}
static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev,
@@ -867,28 +881,32 @@ static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev,
return 0;
}
+static void rtw_pci_kick_beacon_queue(struct rtw_dev *rtwdev)
+{
+ rtw_write8_set(rtwdev, RTK_PCI_TXBD_BCN_WORK, BIT_PCI_BCNQ_FLAG);
+}
+
static int rtw_pci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf,
u32 size)
{
- struct sk_buff *skb;
+ struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
struct rtw_tx_pkt_info pkt_info = {0};
- u8 reg_bcn_work;
+ struct sk_buff *skb;
int ret;
skb = rtw_tx_write_data_rsvd_page_get(rtwdev, &pkt_info, buf, size);
if (!skb)
return -ENOMEM;
- ret = rtw_pci_tx_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_BCN);
+ ret = pci_gen->tx_write_data(rtwdev, &pkt_info, skb, RTW_TX_QUEUE_BCN);
if (ret) {
rtw_err(rtwdev, "failed to write rsvd page data\n");
return ret;
}
/* reserved pages go through beacon queue */
- reg_bcn_work = rtw_read8(rtwdev, RTK_PCI_TXBD_BCN_WORK);
- reg_bcn_work |= BIT_PCI_BCNQ_FLAG;
- rtw_write8(rtwdev, RTK_PCI_TXBD_BCN_WORK, reg_bcn_work);
+ pci_gen->kick_beacon_queue(rtwdev);
return 0;
}
@@ -920,10 +938,11 @@ static int rtw_pci_tx_write(struct rtw_dev *rtwdev,
{
enum rtw_tx_queue_type queue = rtw_tx_queue_mapping(skb);
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
struct rtw_pci_tx_ring *ring;
int ret;
- ret = rtw_pci_tx_write_data(rtwdev, pkt_info, skb, queue);
+ ret = pci_gen->tx_write_data(rtwdev, pkt_info, skb, queue);
if (ret)
return ret;
@@ -1174,6 +1193,7 @@ static irqreturn_t rtw_pci_interrupt_threadfn(int irq, void *dev)
{
struct rtw_dev *rtwdev = dev;
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
u32 irq_status[4];
bool rx = false;
@@ -1181,19 +1201,19 @@ static irqreturn_t rtw_pci_interrupt_threadfn(int irq, void *dev)
rtw_pci_irq_recognized(rtwdev, rtwpci, irq_status);
if (irq_status[0] & IMR_MGNTDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_MGMT);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_MGMT);
if (irq_status[0] & IMR_HIGHDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_HI0);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_HI0);
if (irq_status[0] & IMR_BEDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BE);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BE);
if (irq_status[0] & IMR_BKDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BK);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_BK);
if (irq_status[0] & IMR_VODOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VO);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VO);
if (irq_status[0] & IMR_VIDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VI);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_VI);
if (irq_status[3] & IMR_H2CDOK)
- rtw_pci_tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_H2C);
+ pci_gen->tx_isr(rtwdev, rtwpci, RTW_TX_QUEUE_H2C);
if (irq_status[0] & IMR_ROK) {
rtw_pci_rx_isr(rtwdev);
rx = true;
@@ -1385,6 +1405,7 @@ static void rtw_pci_aspm_set(struct rtw_dev *rtwdev, bool enable)
static void rtw_pci_link_ps(struct rtw_dev *rtwdev, bool enter)
{
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
/* Like CLKREQ, ASPM is also implemented by two HW modules, and can
* only be enabled when host supports it.
@@ -1401,13 +1422,14 @@ static void rtw_pci_link_ps(struct rtw_dev *rtwdev, bool enter)
if ((enter && atomic_dec_if_positive(&rtwpci->link_usage) == 0) ||
(!enter && atomic_inc_return(&rtwpci->link_usage) == 1))
- rtw_pci_aspm_set(rtwdev, enter);
+ pci_gen->aspm_set(rtwdev, enter);
}
static void rtw_pci_link_cfg(struct rtw_dev *rtwdev)
{
- const struct rtw_chip_info *chip = rtwdev->chip;
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
+ const struct rtw_chip_info *chip = rtwdev->chip;
struct pci_dev *pdev = rtwpci->pdev;
u16 link_ctrl;
int ret;
@@ -1441,7 +1463,7 @@ static void rtw_pci_link_cfg(struct rtw_dev *rtwdev)
}
if (link_ctrl & PCI_EXP_LNKCTL_CLKREQ_EN)
- rtw_pci_clkreq_set(rtwdev, true);
+ pci_gen->clkreq_set(rtwdev, true);
rtwpci->link_ctrl = link_ctrl;
}
@@ -1664,6 +1686,7 @@ static int rtw_pci_napi_poll(struct napi_struct *napi, int budget)
struct rtw_pci *rtwpci = container_of(napi, struct rtw_pci, napi);
struct rtw_dev *rtwdev = container_of((void *)rtwpci, struct rtw_dev,
priv);
+ const struct rtw_pci_gen *pci_gen = rtwpci->gen;
int work_done = 0;
if (rtwpci->rx_no_aspm)
@@ -1672,8 +1695,9 @@ static int rtw_pci_napi_poll(struct napi_struct *napi, int budget)
while (work_done < budget) {
u32 work_done_once;
- work_done_once = rtw_pci_rx_napi(rtwdev, rtwpci, RTW_RX_QUEUE_MPDU,
- budget - work_done);
+ work_done_once = pci_gen->rx_napi(rtwdev, rtwpci,
+ RTW_RX_QUEUE_MPDU,
+ budget - work_done);
if (work_done_once == 0)
break;
work_done += work_done_once;
@@ -1689,7 +1713,7 @@ static int rtw_pci_napi_poll(struct napi_struct *napi, int budget)
* not be processed immediately. Check whether dma ring is
* empty and perform napi_schedule accordingly.
*/
- if (rtw_pci_get_hw_rx_ring_nr(rtwdev, rtwpci))
+ if (pci_gen->get_hw_rx_ring_nr(rtwdev, rtwpci))
napi_schedule(napi);
}
if (rtwpci->rx_no_aspm)
@@ -1826,6 +1850,7 @@ static const struct dmi_system_id rtw_pci_quirks[] = {
int rtw_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{
+ struct rtw_pci_info *pci_info = (struct rtw_pci_info *)id->driver_data;
struct pci_dev *bridge = pci_upstream_bridge(pdev);
struct ieee80211_hw *hw;
struct rtw_dev *rtwdev;
@@ -1843,13 +1868,15 @@ int rtw_pci_probe(struct pci_dev *pdev,
rtwdev = hw->priv;
rtwdev->hw = hw;
rtwdev->dev = &pdev->dev;
- rtwdev->chip = (struct rtw_chip_info *)id->driver_data;
+ rtwdev->chip = pci_info->chip_info;
rtwdev->hci.ops = &rtw_pci_ops;
rtwdev->hci.type = RTW_HCI_TYPE_PCIE;
rtwpci = (struct rtw_pci *)rtwdev->priv;
atomic_set(&rtwpci->link_usage, 1);
+ rtwpci->gen = pci_info->pci_gen;
+
dmi_check_system(rtw_pci_quirks);
ret = rtw_core_init(rtwdev);
@@ -1966,6 +1993,22 @@ void rtw_pci_shutdown(struct pci_dev *pdev)
}
EXPORT_SYMBOL(rtw_pci_shutdown);
+const struct rtw_pci_gen rtw_pci_gen_new = {
+ .init_tx_ring = rtw_pci_init_tx_ring,
+ .reset_rx_desc = rtw_pci_reset_rx_desc,
+ .reset = rtw_pci_reset,
+ .flush_queue = rtw_pci_flush_queue,
+ .tx_kick_off_queue = rtw_pci_tx_kick_off_queue,
+ .tx_write_data = rtw_pci_tx_write_data,
+ .kick_beacon_queue = rtw_pci_kick_beacon_queue,
+ .tx_isr = rtw_pci_tx_isr,
+ .get_hw_rx_ring_nr = rtw_pci_get_hw_rx_ring_nr,
+ .rx_napi = rtw_pci_rx_napi,
+ .clkreq_set = rtw_pci_clkreq_set,
+ .aspm_set = rtw_pci_aspm_set,
+};
+EXPORT_SYMBOL(rtw_pci_gen_new);
+
MODULE_AUTHOR("Realtek Corporation");
MODULE_DESCRIPTION("Realtek PCI 802.11ac wireless driver");
MODULE_LICENSE("Dual BSD/GPL");
diff --git a/drivers/net/wireless/realtek/rtw88/pci.h b/drivers/net/wireless/realtek/rtw88/pci.h
index 8ffdea11378f..5ab78ba3255d 100644
--- a/drivers/net/wireless/realtek/rtw88/pci.h
+++ b/drivers/net/wireless/realtek/rtw88/pci.h
@@ -203,8 +203,37 @@ struct rtw_pci_rx_ring {
#define RX_TAG_MAX 8192
+struct rtw_pci;
+
+struct rtw_pci_gen {
+ int (*init_tx_ring)(struct rtw_dev *rtwdev,
+ struct rtw_pci_tx_ring *tx_ring,
+ u8 desc_size, u32 len);
+ int (*reset_rx_desc)(struct rtw_dev *rtwdev, struct sk_buff *skb,
+ struct rtw_pci_rx_ring *rx_ring, u32 idx,
+ u32 desc_sz);
+ int (*reset)(struct rtw_dev *rtwdev);
+ void (*flush_queue)(struct rtw_dev *rtwdev, u8 pci_q, bool drop);
+ void (*tx_kick_off_queue)(struct rtw_dev *rtwdev,
+ enum rtw_tx_queue_type queue);
+ int (*tx_write_data)(struct rtw_dev *rtwdev,
+ struct rtw_tx_pkt_info *pkt_info,
+ struct sk_buff *skb,
+ enum rtw_tx_queue_type queue);
+ void (*kick_beacon_queue)(struct rtw_dev *rtwdev);
+ void (*tx_isr)(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
+ u8 hw_queue);
+ int (*get_hw_rx_ring_nr)(struct rtw_dev *rtwdev,
+ struct rtw_pci *rtwpci);
+ u32 (*rx_napi)(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
+ u8 hw_queue, u32 limit);
+ void (*clkreq_set)(struct rtw_dev *rtwdev, bool enable);
+ void (*aspm_set)(struct rtw_dev *rtwdev, bool enable);
+};
+
struct rtw_pci {
struct pci_dev *pdev;
+ const struct rtw_pci_gen *gen;
/* Used for PCI interrupt. */
spinlock_t hwirq_lock;
@@ -230,8 +259,14 @@ struct rtw_pci {
void __iomem *mmap;
};
+struct rtw_pci_info {
+ const struct rtw_chip_info *chip_info;
+ const struct rtw_pci_gen *pci_gen;
+};
+
extern const struct dev_pm_ops rtw_pm_ops;
extern const struct pci_error_handlers rtw_pci_err_handler;
+extern const struct rtw_pci_gen rtw_pci_gen_new;
int rtw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id);
void rtw_pci_remove(struct pci_dev *pdev);
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723de.c b/drivers/net/wireless/realtek/rtw88/rtw8723de.c
index c6d0c88e5d81..894b6639ac98 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8723de.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723de.c
@@ -7,10 +7,15 @@
#include "pci.h"
#include "rtw8723d.h"
+static const struct rtw_pci_info rtw_8723de_pci_info = {
+ .chip_info = &rtw8723d_hw_spec,
+ .pci_gen = &rtw_pci_gen_new,
+};
+
static const struct pci_device_id rtw_8723de_id_table[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xD723),
- .driver_data = (kernel_ulong_t)&rtw8723d_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8723de_pci_info
},
{}
};
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8814ae.c b/drivers/net/wireless/realtek/rtw88/rtw8814ae.c
index c7436f1c8d40..bfcf4c073a39 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8814ae.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8814ae.c
@@ -7,10 +7,15 @@
#include "pci.h"
#include "rtw8814a.h"
+static const struct rtw_pci_info rtw_8814ae_pci_info = {
+ .chip_info = &rtw8814a_hw_spec,
+ .pci_gen = &rtw_pci_gen_new,
+};
+
static const struct pci_device_id rtw_8814ae_id_table[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0x8813),
- .driver_data = (kernel_ulong_t)&rtw8814a_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8814ae_pci_info
},
{}
};
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821ce.c b/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
index 52a19cb17daa..b696a83eeb33 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821ce.c
@@ -7,14 +7,19 @@
#include "pci.h"
#include "rtw8821c.h"
+static const struct rtw_pci_info rtw_8821ce_pci_info = {
+ .chip_info = &rtw8821c_hw_spec,
+ .pci_gen = &rtw_pci_gen_new,
+};
+
static const struct pci_device_id rtw_8821ce_id_table[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xB821),
- .driver_data = (kernel_ulong_t)&rtw8821c_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8821ce_pci_info
},
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xC821),
- .driver_data = (kernel_ulong_t)&rtw8821c_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8821ce_pci_info
},
{}
};
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822be.c b/drivers/net/wireless/realtek/rtw88/rtw8822be.c
index dda597d73219..b6ff59820bc5 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822be.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822be.c
@@ -7,10 +7,15 @@
#include "pci.h"
#include "rtw8822b.h"
+static const struct rtw_pci_info rtw_8822be_pci_info = {
+ .chip_info = &rtw8822b_hw_spec,
+ .pci_gen = &rtw_pci_gen_new,
+};
+
static const struct pci_device_id rtw_8822be_id_table[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xB822),
- .driver_data = (kernel_ulong_t)&rtw8822b_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8822be_pci_info
},
{}
};
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822ce.c b/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
index 7ae95415c224..96ec95582bc8 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822ce.c
@@ -7,14 +7,19 @@
#include "pci.h"
#include "rtw8822c.h"
+static const struct rtw_pci_info rtw_8822ce_pci_info = {
+ .chip_info = &rtw8822c_hw_spec,
+ .pci_gen = &rtw_pci_gen_new,
+};
+
static const struct pci_device_id rtw_8822ce_id_table[] = {
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xC822),
- .driver_data = (kernel_ulong_t)&rtw8822c_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8822ce_pci_info
},
{
PCI_DEVICE(PCI_VENDOR_ID_REALTEK, 0xC82F),
- .driver_data = (kernel_ulong_t)&rtw8822c_hw_spec
+ .driver_data = (kernel_ulong_t)&rtw_8822ce_pci_info
},
{}
};
--
2.55.0
next prev parent reply other threads:[~2026-10-23 23:01 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 22:57 [PATCH rtw-next 0/5] wifi: rtw88: pci: Support an older design, like RTL8821AE/RTL8812AE Bitterblue Smith
2026-10-23 22:59 ` [PATCH rtw-next 1/5] wifi: rtw88: Pass RX buffer to rtw_rx_query_rx_desc() Bitterblue Smith
2026-10-23 23:00 ` [PATCH rtw-next 2/5] wifi: rtw88: Pass TX descriptor to rtw_tx_fill_tx_desc() Bitterblue Smith
2026-10-23 23:01 ` Bitterblue Smith [this message]
2026-10-24 8:41 ` [PATCH rtw-next 3/5] wifi: rtw88: pci: Introduce struct rtw_pci_gen Luka Gejak
2026-10-28 21:26 ` Bitterblue Smith
2026-10-23 23:02 ` [PATCH rtw-next 4/5] wifi: rtw88: pci: Add functions to support older chips Bitterblue Smith
2026-10-24 8:36 ` Luka Gejak
2026-10-28 17:40 ` Bitterblue Smith
2026-10-23 23:05 ` [PATCH rtw-next 5/5] wifi: rtw88: pci: Handle more RX interrupts for RTL8821AE Bitterblue Smith
2026-10-27 1:52 ` [PATCH rtw-next 0/5] wifi: rtw88: pci: Support an older design, like RTL8821AE/RTL8812AE Ping-Ke Shih
2026-10-27 7:25 ` Luka Gejak
2026-10-27 8:07 ` Ping-Ke Shih
2026-10-28 17:41 ` Bitterblue Smith
2026-10-29 0:51 ` Ping-Ke Shih
2026-10-29 1:29 ` Ping-Ke Shih
2026-10-29 21:00 ` Bitterblue Smith
2026-10-30 0:43 ` Ping-Ke Shih
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=fc308de1-a470-4890-a86a-d8936e093bd5@gmail.com \
--to=rtl8821cerfe2@gmail.com \
--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.