]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
wifi: rtw89: pci: move chip ISR definition out from chip generation
authorPing-Ke Shih <pkshih@realtek.com>
Tue, 26 Aug 2025 08:51:43 +0000 (16:51 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Mon, 1 Sep 2025 02:52:00 +0000 (10:52 +0800)
The existing WiFi 6 chips can share the same ISR (interrupt status
registers), but the coming WiFi 7 chip 8922DE can't share the same
definition with existing WiFi 7 chip, so move the definition to an
individual struct.

Don't change logic at all.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250826085152.28164-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/pci.c
drivers/net/wireless/realtek/rtw89/pci.h
drivers/net/wireless/realtek/rtw89/pci_be.c
drivers/net/wireless/realtek/rtw89/rtw8851be.c
drivers/net/wireless/realtek/rtw89/rtw8852ae.c
drivers/net/wireless/realtek/rtw89/rtw8852be.c
drivers/net/wireless/realtek/rtw89/rtw8852bte.c
drivers/net/wireless/realtek/rtw89/rtw8852ce.c
drivers/net/wireless/realtek/rtw89/rtw8922ae.c

index a669f2f843aab4998c3471ab229fba3329508c6c..162075882fa4273a4a910ee5b891a359e86cda07 100644 (file)
@@ -885,7 +885,7 @@ static irqreturn_t rtw89_pci_interrupt_threadfn(int irq, void *dev)
        struct rtw89_dev *rtwdev = dev;
        struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
        const struct rtw89_pci_info *info = rtwdev->pci_info;
-       const struct rtw89_pci_gen_def *gen_def = info->gen_def;
+       const struct rtw89_pci_isr_def *isr_def = info->isr_def;
        struct rtw89_pci_isrs isrs;
        unsigned long flags;
 
@@ -893,13 +893,13 @@ static irqreturn_t rtw89_pci_interrupt_threadfn(int irq, void *dev)
        rtw89_chip_recognize_intrs(rtwdev, rtwpci, &isrs);
        spin_unlock_irqrestore(&rtwpci->irq_lock, flags);
 
-       if (unlikely(isrs.isrs[0] & gen_def->isr_rdu))
+       if (unlikely(isrs.isrs[0] & isr_def->isr_rdu))
                rtw89_pci_isr_rxd_unavail(rtwdev, rtwpci);
 
-       if (unlikely(isrs.halt_c2h_isrs & gen_def->isr_halt_c2h))
+       if (unlikely(isrs.halt_c2h_isrs & isr_def->isr_halt_c2h))
                rtw89_ser_notify(rtwdev, rtw89_mac_get_err_status(rtwdev));
 
-       if (unlikely(isrs.halt_c2h_isrs & gen_def->isr_wdt_timeout))
+       if (unlikely(isrs.halt_c2h_isrs & isr_def->isr_wdt_timeout))
                rtw89_ser_notify(rtwdev, MAC_AX_ERR_L2_ERR_WDT_TIMEOUT_INT);
 
        if (unlikely(rtwpci->under_recovery))
@@ -4228,18 +4228,18 @@ static int rtw89_pci_napi_poll(struct napi_struct *napi, int budget)
        struct rtw89_dev *rtwdev = container_of(napi, struct rtw89_dev, napi);
        struct rtw89_pci *rtwpci = (struct rtw89_pci *)rtwdev->priv;
        const struct rtw89_pci_info *info = rtwdev->pci_info;
-       const struct rtw89_pci_gen_def *gen_def = info->gen_def;
+       const struct rtw89_pci_isr_def *isr_def = info->isr_def;
        unsigned long flags;
        int work_done;
 
        rtwdev->napi_budget_countdown = budget;
 
-       rtw89_write32(rtwdev, gen_def->isr_clear_rpq.addr, gen_def->isr_clear_rpq.data);
+       rtw89_write32(rtwdev, isr_def->isr_clear_rpq.addr, isr_def->isr_clear_rpq.data);
        work_done = rtw89_pci_poll_rpq_dma(rtwdev, rtwpci, rtwdev->napi_budget_countdown);
        if (work_done == budget)
                return budget;
 
-       rtw89_write32(rtwdev, gen_def->isr_clear_rxq.addr, gen_def->isr_clear_rxq.data);
+       rtw89_write32(rtwdev, isr_def->isr_clear_rxq.addr, isr_def->isr_clear_rxq.data);
        work_done += rtw89_pci_poll_rxq_dma(rtwdev, rtwpci, rtwdev->napi_budget_countdown);
        if (work_done < budget && napi_complete_done(napi, work_done)) {
                spin_lock_irqsave(&rtwpci->irq_lock, flags);
@@ -4394,14 +4394,17 @@ const struct pci_error_handlers rtw89_pci_err_handler = {
 };
 EXPORT_SYMBOL(rtw89_pci_err_handler);
 
-const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
+const struct rtw89_pci_isr_def rtw89_pci_isr_ax = {
        .isr_rdu = B_AX_RDU_INT,
        .isr_halt_c2h = B_AX_HALT_C2H_INT_EN,
        .isr_wdt_timeout = B_AX_WDT_TIMEOUT_INT_EN,
        .isr_clear_rpq = {R_AX_PCIE_HISR00, B_AX_RPQDMA_INT | B_AX_RPQBD_FULL_INT},
        .isr_clear_rxq = {R_AX_PCIE_HISR00, B_AX_RXP1DMA_INT | B_AX_RXDMA_INT |
                                            B_AX_RDU_INT},
+};
+EXPORT_SYMBOL(rtw89_pci_isr_ax);
 
+const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
        .mac_pre_init = rtw89_pci_ops_mac_pre_init_ax,
        .mac_pre_deinit = rtw89_pci_ops_mac_pre_deinit_ax,
        .mac_post_init = rtw89_pci_ops_mac_post_init_ax,
index 52f527069da647d57a471560a8e241f37940dc31..14b1d388d46bb4755946213e56d345c1cf217091 100644 (file)
@@ -1267,13 +1267,15 @@ struct rtw89_pci_bd_ram {
        u8 min_num;
 };
 
-struct rtw89_pci_gen_def {
+struct rtw89_pci_isr_def {
        u32 isr_rdu;
        u32 isr_halt_c2h;
        u32 isr_wdt_timeout;
        struct rtw89_reg2_def isr_clear_rpq;
        struct rtw89_reg2_def isr_clear_rxq;
+};
 
+struct rtw89_pci_gen_def {
        int (*mac_pre_init)(struct rtw89_dev *rtwdev);
        int (*mac_pre_deinit)(struct rtw89_dev *rtwdev);
        int (*mac_post_init)(struct rtw89_dev *rtwdev);
@@ -1311,6 +1313,7 @@ struct rtw89_pci_ssid_quirk {
 
 struct rtw89_pci_info {
        const struct rtw89_pci_gen_def *gen_def;
+       const struct rtw89_pci_isr_def *isr_def;
        enum mac_ax_bd_trunc_mode txbd_trunc_mode;
        enum mac_ax_bd_trunc_mode rxbd_trunc_mode;
        enum mac_ax_rxbd_mode rxbd_mode;
@@ -1628,6 +1631,8 @@ extern const struct rtw89_pci_ch_dma_addr_set rtw89_pci_ch_dma_addr_set_v1;
 extern const struct rtw89_pci_ch_dma_addr_set rtw89_pci_ch_dma_addr_set_be;
 extern const struct rtw89_pci_bd_ram rtw89_bd_ram_table_dual[RTW89_TXCH_NUM];
 extern const struct rtw89_pci_bd_ram rtw89_bd_ram_table_single[RTW89_TXCH_NUM];
+extern const struct rtw89_pci_isr_def rtw89_pci_isr_ax;
+extern const struct rtw89_pci_isr_def rtw89_pci_isr_be;
 extern const struct rtw89_pci_gen_def rtw89_pci_gen_ax;
 extern const struct rtw89_pci_gen_def rtw89_pci_gen_be;
 
index 12e6a0cbb889b213d34b0617dcffa81812fd7e6c..29ca58b860857aa0f109ba8418e11398729afc9d 100644 (file)
@@ -665,13 +665,16 @@ static int __maybe_unused rtw89_pci_resume_be(struct device *dev)
 SIMPLE_DEV_PM_OPS(rtw89_pm_ops_be, rtw89_pci_suspend_be, rtw89_pci_resume_be);
 EXPORT_SYMBOL(rtw89_pm_ops_be);
 
-const struct rtw89_pci_gen_def rtw89_pci_gen_be = {
+const struct rtw89_pci_isr_def rtw89_pci_isr_be = {
        .isr_rdu = B_BE_RDU_CH1_INT_V1 | B_BE_RDU_CH0_INT_V1,
        .isr_halt_c2h = B_BE_HALT_C2H_INT,
        .isr_wdt_timeout = B_BE_WDT_TIMEOUT_INT,
        .isr_clear_rpq = {R_BE_PCIE_DMA_ISR, B_BE_PCIE_RX_RPQ0_ISR_V1},
        .isr_clear_rxq = {R_BE_PCIE_DMA_ISR, B_BE_PCIE_RX_RX0P2_ISR_V1},
+};
+EXPORT_SYMBOL(rtw89_pci_isr_be);
 
+const struct rtw89_pci_gen_def rtw89_pci_gen_be = {
        .mac_pre_init = rtw89_pci_ops_mac_pre_init_be,
        .mac_pre_deinit = rtw89_pci_ops_mac_pre_deinit_be,
        .mac_post_init = rtw89_pci_ops_mac_post_init_be,
index 59873083170752833f8d9f65e8261532d3fd86fe..c9d60870ed9e046269097b79b0f660ddd37df052 100644 (file)
@@ -11,6 +11,7 @@
 
 static const struct rtw89_pci_info rtw8851b_pci_info = {
        .gen_def                = &rtw89_pci_gen_ax,
+       .isr_def                = &rtw89_pci_isr_ax,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,
index 90ffaf9f4f6afc2cd6d190cb24304e6ed9ebf9fe..1bfade7e7e1b7aa9da0b16f2ea3a23fca632d07c 100644 (file)
@@ -11,6 +11,7 @@
 
 static const struct rtw89_pci_info rtw8852a_pci_info = {
        .gen_def                = &rtw89_pci_gen_ax,
+       .isr_def                = &rtw89_pci_isr_ax,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,
index b0726f590ca2d8a0e311df39ff7c30e931e2ac17..8f7676a0a89e315faea3e92081a6dadb4ade7cb9 100644 (file)
@@ -11,6 +11,7 @@
 
 static const struct rtw89_pci_info rtw8852b_pci_info = {
        .gen_def                = &rtw89_pci_gen_ax,
+       .isr_def                = &rtw89_pci_isr_ax,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,
index a584c75b801d1452db2832d51b40f1815a9512ec..642ab20e9d06b8a003f13ecc365fc2ccf242a586 100644 (file)
@@ -17,6 +17,7 @@ static const struct rtw89_pci_ssid_quirk rtw8852bt_pci_ssid_quirks[] = {
 
 static const struct rtw89_pci_info rtw8852bt_pci_info = {
        .gen_def                = &rtw89_pci_gen_ax,
+       .isr_def                = &rtw89_pci_isr_ax,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,
index db01d3966c275a8d3b9e887a5f44b5244abaadda..4c7682f1d00c4df1b13a558c81a96f31ffece1c1 100644 (file)
@@ -20,6 +20,7 @@ static const struct rtw89_pci_bd_idx_addr rtw8852c_bd_idx_addr_low_power = {
 
 static const struct rtw89_pci_info rtw8852c_pci_info = {
        .gen_def                = &rtw89_pci_gen_ax,
+       .isr_def                = &rtw89_pci_isr_ax,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,
index b730d79edd10ad6e3b3fb751dc9c3951056260b0..a0fc6b2832e16f313e2a9fb2026c832f145b25ee 100644 (file)
@@ -17,6 +17,7 @@ static const struct rtw89_pci_ssid_quirk rtw8922a_pci_ssid_quirks[] = {
 
 static const struct rtw89_pci_info rtw8922a_pci_info = {
        .gen_def                = &rtw89_pci_gen_be,
+       .isr_def                = &rtw89_pci_isr_be,
        .txbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_trunc_mode        = MAC_AX_BD_TRUNC,
        .rxbd_mode              = MAC_AX_RXBD_PKT,