diff mbox series

[rtw-next,v1,02/13] wifi: rtw89: Get dle_mem via rtw89_hci_dle_mem()

Message ID 594d5987-5e6d-405c-b482-d101b43cb65c@gmail.com
State New
Headers show
Series wifi: rtw89: Add support for USB devices | expand

Commit Message

Bitterblue Smith May 4, 2025, 8:49 p.m. UTC
Don't access dle_mem in get_dle_mem_cfg() directly. USB 2, USB 3, and
SDIO will need different sets of values.

Rename dle_mem in struct rtw89_chip_info to dle_mem_pcie and get it
via rtw89_hci_dle_mem() and rtw89_pci_ops_dle_mem().

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
---
 drivers/net/wireless/realtek/rtw89/core.h      | 10 +++++++++-
 drivers/net/wireless/realtek/rtw89/mac.c       |  2 +-
 drivers/net/wireless/realtek/rtw89/pci.c       |  8 ++++++++
 drivers/net/wireless/realtek/rtw89/rtw8851b.c  |  2 +-
 drivers/net/wireless/realtek/rtw89/rtw8852a.c  |  2 +-
 drivers/net/wireless/realtek/rtw89/rtw8852b.c  |  2 +-
 drivers/net/wireless/realtek/rtw89/rtw8852bt.c |  2 +-
 drivers/net/wireless/realtek/rtw89/rtw8852c.c  |  2 +-
 drivers/net/wireless/realtek/rtw89/rtw8922a.c  |  2 +-
 9 files changed, 24 insertions(+), 8 deletions(-)

Comments

Ping-Ke Shih May 13, 2025, 2:51 a.m. UTC | #1
Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> Don't access dle_mem in get_dle_mem_cfg() directly. USB 2, USB 3, and
> SDIO will need different sets of values.
> 
> Rename dle_mem in struct rtw89_chip_info to dle_mem_pcie and get it
> via rtw89_hci_dle_mem() and rtw89_pci_ops_dle_mem().
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>

Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Ping-Ke Shih May 14, 2025, 12:56 a.m. UTC | #2
Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> Don't access dle_mem in get_dle_mem_cfg() directly. USB 2, USB 3, and
> SDIO will need different sets of values.
> 
> Rename dle_mem in struct rtw89_chip_info to dle_mem_pcie and get it
> via rtw89_hci_dle_mem() and rtw89_pci_ops_dle_mem().
> 
> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
> ---
>  drivers/net/wireless/realtek/rtw89/core.h      | 10 +++++++++-
>  drivers/net/wireless/realtek/rtw89/mac.c       |  2 +-
>  drivers/net/wireless/realtek/rtw89/pci.c       |  8 ++++++++
>  drivers/net/wireless/realtek/rtw89/rtw8851b.c  |  2 +-
>  drivers/net/wireless/realtek/rtw89/rtw8852a.c  |  2 +-
>  drivers/net/wireless/realtek/rtw89/rtw8852b.c  |  2 +-
>  drivers/net/wireless/realtek/rtw89/rtw8852bt.c |  2 +-
>  drivers/net/wireless/realtek/rtw89/rtw8852c.c  |  2 +-
>  drivers/net/wireless/realtek/rtw89/rtw8922a.c  |  2 +-
>  9 files changed, 24 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
> index be1259cfa712..afcf0353a625 100644
> --- a/drivers/net/wireless/realtek/rtw89/core.h
> +++ b/drivers/net/wireless/realtek/rtw89/core.h
> @@ -3579,6 +3579,8 @@ struct rtw89_hci_ops {
>         void (*disable_intr)(struct rtw89_dev *rtwdev);
>         void (*enable_intr)(struct rtw89_dev *rtwdev);
>         int (*rst_bdram)(struct rtw89_dev *rtwdev);

an empty line

> +       const struct rtw89_dle_mem *(*dle_mem)(struct rtw89_dev *rtwdev,
> +                                              u8 qta_mode);
>  };
> 
>  struct rtw89_hci_info {
> @@ -4271,7 +4273,7 @@ struct rtw89_chip_info {
>         bool dis_2g_40m_ul_ofdma;
>         u32 rsvd_ple_ofst;
>         const struct rtw89_hfc_param_ini *hfc_param_ini;
> -       const struct rtw89_dle_mem *dle_mem;
> +       const struct rtw89_dle_mem *dle_mem_pcie;

I reconsider if this can be an array with a new enum = {PCIE, USB2, USB3, SDIO}
stored in hal->hci_dle_mem_type. Then, consumers can just access it via
chip->dle_mem[hal->hci_dle_mem_type][quota]. But, I'm not sure if USB
subsystem can notify driver when USB speed is changed. 

This is a thought to simply the struct definition. 

>         u8 wde_qempty_acq_grpnum;
>         u8 wde_qempty_mgq_grpsel;
>         u32 rf_base_addr[2];
> @@ -6146,6 +6148,12 @@ static inline void rtw89_hci_clear(struct rtw89_dev *rtwdev, struct pci_dev *pde
>                 rtwdev->hci.ops->clear(rtwdev, pdev);
>  }
> 
> +static inline const
> +struct rtw89_dle_mem *rtw89_hci_dle_mem(struct rtw89_dev *rtwdev, u8 qta_mode)
> +{
> +       return rtwdev->hci.ops->dle_mem(rtwdev, qta_mode);
> +}
> +
>  static inline
>  struct rtw89_tx_skb_data *RTW89_TX_SKB_CB(struct sk_buff *skb)
>  {
> diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
> index 592fbb6d2728..77d35db3e133 100644
> --- a/drivers/net/wireless/realtek/rtw89/mac.c
> +++ b/drivers/net/wireless/realtek/rtw89/mac.c
> @@ -1719,7 +1719,7 @@ static const struct rtw89_dle_mem *get_dle_mem_cfg(struct rtw89_dev *rtwdev,
>         struct rtw89_mac_info *mac = &rtwdev->mac;
>         const struct rtw89_dle_mem *cfg;
> 
> -       cfg = &rtwdev->chip->dle_mem[mode];
> +       cfg = rtw89_hci_dle_mem(rtwdev, mode);
>         if (!cfg)
>                 return NULL;
> 
> diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
> index c2fe5a898dc7..1dec603012ba 100644
> --- a/drivers/net/wireless/realtek/rtw89/pci.c
> +++ b/drivers/net/wireless/realtek/rtw89/pci.c
> @@ -4341,6 +4341,13 @@ static int __maybe_unused rtw89_pci_resume(struct device *dev)
>  SIMPLE_DEV_PM_OPS(rtw89_pm_ops, rtw89_pci_suspend, rtw89_pci_resume);
>  EXPORT_SYMBOL(rtw89_pm_ops);
> 
> +static const
> +struct rtw89_dle_mem *rtw89_pci_ops_dle_mem(struct rtw89_dev *rtwdev,
> +                                           u8 qta_mode)
> +{
> +       return &rtwdev->chip->dle_mem_pcie[qta_mode];
> +}
> +
>  const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
>         .isr_rdu = B_AX_RDU_INT,
>         .isr_halt_c2h = B_AX_HALT_C2H_INT_EN,
> @@ -4413,6 +4420,7 @@ static const struct rtw89_hci_ops rtw89_pci_ops = {
>         .disable_intr   = rtw89_pci_disable_intr_lock,
>         .enable_intr    = rtw89_pci_enable_intr_lock,
>         .rst_bdram      = rtw89_pci_reset_bdram,

an empty line

> +       .dle_mem        = rtw89_pci_ops_dle_mem,
>  };
> 

[...]
Bitterblue Smith May 25, 2025, 10:04 p.m. UTC | #3
On 14/05/2025 03:56, Ping-Ke Shih wrote:
> Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
>> Don't access dle_mem in get_dle_mem_cfg() directly. USB 2, USB 3, and
>> SDIO will need different sets of values.
>>
>> Rename dle_mem in struct rtw89_chip_info to dle_mem_pcie and get it
>> via rtw89_hci_dle_mem() and rtw89_pci_ops_dle_mem().
>>
>> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
>> ---
>>  drivers/net/wireless/realtek/rtw89/core.h      | 10 +++++++++-
>>  drivers/net/wireless/realtek/rtw89/mac.c       |  2 +-
>>  drivers/net/wireless/realtek/rtw89/pci.c       |  8 ++++++++
>>  drivers/net/wireless/realtek/rtw89/rtw8851b.c  |  2 +-
>>  drivers/net/wireless/realtek/rtw89/rtw8852a.c  |  2 +-
>>  drivers/net/wireless/realtek/rtw89/rtw8852b.c  |  2 +-
>>  drivers/net/wireless/realtek/rtw89/rtw8852bt.c |  2 +-
>>  drivers/net/wireless/realtek/rtw89/rtw8852c.c  |  2 +-
>>  drivers/net/wireless/realtek/rtw89/rtw8922a.c  |  2 +-
>>  9 files changed, 24 insertions(+), 8 deletions(-)
>>
>> diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
>> index be1259cfa712..afcf0353a625 100644
>> --- a/drivers/net/wireless/realtek/rtw89/core.h
>> +++ b/drivers/net/wireless/realtek/rtw89/core.h
>> @@ -3579,6 +3579,8 @@ struct rtw89_hci_ops {
>>         void (*disable_intr)(struct rtw89_dev *rtwdev);
>>         void (*enable_intr)(struct rtw89_dev *rtwdev);
>>         int (*rst_bdram)(struct rtw89_dev *rtwdev);
> 
> an empty line
> 
>> +       const struct rtw89_dle_mem *(*dle_mem)(struct rtw89_dev *rtwdev,
>> +                                              u8 qta_mode);
>>  };
>>
>>  struct rtw89_hci_info {
>> @@ -4271,7 +4273,7 @@ struct rtw89_chip_info {
>>         bool dis_2g_40m_ul_ofdma;
>>         u32 rsvd_ple_ofst;
>>         const struct rtw89_hfc_param_ini *hfc_param_ini;
>> -       const struct rtw89_dle_mem *dle_mem;
>> +       const struct rtw89_dle_mem *dle_mem_pcie;
> 
> I reconsider if this can be an array with a new enum = {PCIE, USB2, USB3, SDIO}
> stored in hal->hci_dle_mem_type. Then, consumers can just access it via
> chip->dle_mem[hal->hci_dle_mem_type][quota]. But, I'm not sure if USB
> subsystem can notify driver when USB speed is changed. 
> 
> This is a thought to simply the struct definition. 
> 

The hard part is naming the new enum. It's basically rtw89_hci_type
but more detailed.

I don't expect the USB speed to change during the lifetime of struct
rtw89_dev. When the device switches from USB 2 to USB 3 it disconnects
and reappears as a new device:

Apr 21 22:02:22 ideapad2 kernel: usb 1-4: new high-speed USB device number 17 using xhci_hcd
Apr 21 22:02:22 ideapad2 kernel: usb 1-4: New USB device found, idVendor=0bda, idProduct=c832, bcdDevice= 0.00
Apr 21 22:02:22 ideapad2 kernel: usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 21 22:02:22 ideapad2 kernel: usb 1-4: Product: 802.11ax WLAN Adapter
Apr 21 22:02:22 ideapad2 kernel: usb 1-4: Manufacturer: Realtek
Apr 21 22:02:22 ideapad2 kernel: usb 1-4: SerialNumber: 00e04c000001
Apr 21 22:02:24 ideapad2 kernel: eric-tx CALL alloc_txring !!!!
Apr 21 22:02:24 ideapad2 kernel: usb 1-4: USB disconnect, device number 17
Apr 21 22:02:24 ideapad2 kernel: rtl8852cu 1-4:1.0: Runtime PM usage count underflow!

Apr 21 22:02:27 ideapad2 kernel: usb 2-4: new SuperSpeed USB device number 2 using xhci_hcd
Apr 21 22:02:27 ideapad2 kernel: usb 2-4: New USB device found, idVendor=0bda, idProduct=c832, bcdDevice= 0.00
Apr 21 22:02:28 ideapad2 kernel: usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Apr 21 22:02:28 ideapad2 kernel: usb 2-4: Product: 802.11ax WLAN Adapter
Apr 21 22:02:28 ideapad2 kernel: usb 2-4: Manufacturer: Realtek
Apr 21 22:02:28 ideapad2 kernel: usb 2-4: SerialNumber: 00e04c000001
Apr 21 22:02:28 ideapad2 kernel: eric-tx CALL alloc_txring !!!!
Apr 21 22:02:28 ideapad2 kernel: rtl8852cu 2-4:1.0 wlp3s0f3u4: renamed from wlan0

>>         u8 wde_qempty_acq_grpnum;
>>         u8 wde_qempty_mgq_grpsel;
>>         u32 rf_base_addr[2];
>> @@ -6146,6 +6148,12 @@ static inline void rtw89_hci_clear(struct rtw89_dev *rtwdev, struct pci_dev *pde
>>                 rtwdev->hci.ops->clear(rtwdev, pdev);
>>  }
>>
>> +static inline const
>> +struct rtw89_dle_mem *rtw89_hci_dle_mem(struct rtw89_dev *rtwdev, u8 qta_mode)
>> +{
>> +       return rtwdev->hci.ops->dle_mem(rtwdev, qta_mode);
>> +}
>> +
>>  static inline
>>  struct rtw89_tx_skb_data *RTW89_TX_SKB_CB(struct sk_buff *skb)
>>  {
>> diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
>> index 592fbb6d2728..77d35db3e133 100644
>> --- a/drivers/net/wireless/realtek/rtw89/mac.c
>> +++ b/drivers/net/wireless/realtek/rtw89/mac.c
>> @@ -1719,7 +1719,7 @@ static const struct rtw89_dle_mem *get_dle_mem_cfg(struct rtw89_dev *rtwdev,
>>         struct rtw89_mac_info *mac = &rtwdev->mac;
>>         const struct rtw89_dle_mem *cfg;
>>
>> -       cfg = &rtwdev->chip->dle_mem[mode];
>> +       cfg = rtw89_hci_dle_mem(rtwdev, mode);
>>         if (!cfg)
>>                 return NULL;
>>
>> diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
>> index c2fe5a898dc7..1dec603012ba 100644
>> --- a/drivers/net/wireless/realtek/rtw89/pci.c
>> +++ b/drivers/net/wireless/realtek/rtw89/pci.c
>> @@ -4341,6 +4341,13 @@ static int __maybe_unused rtw89_pci_resume(struct device *dev)
>>  SIMPLE_DEV_PM_OPS(rtw89_pm_ops, rtw89_pci_suspend, rtw89_pci_resume);
>>  EXPORT_SYMBOL(rtw89_pm_ops);
>>
>> +static const
>> +struct rtw89_dle_mem *rtw89_pci_ops_dle_mem(struct rtw89_dev *rtwdev,
>> +                                           u8 qta_mode)
>> +{
>> +       return &rtwdev->chip->dle_mem_pcie[qta_mode];
>> +}
>> +
>>  const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
>>         .isr_rdu = B_AX_RDU_INT,
>>         .isr_halt_c2h = B_AX_HALT_C2H_INT_EN,
>> @@ -4413,6 +4420,7 @@ static const struct rtw89_hci_ops rtw89_pci_ops = {
>>         .disable_intr   = rtw89_pci_disable_intr_lock,
>>         .enable_intr    = rtw89_pci_enable_intr_lock,
>>         .rst_bdram      = rtw89_pci_reset_bdram,
> 
> an empty line
> 
>> +       .dle_mem        = rtw89_pci_ops_dle_mem,
>>  };
>>
> 
> [...]
> 
>
Ping-Ke Shih May 26, 2025, 2:52 a.m. UTC | #4
Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> On 14/05/2025 03:56, Ping-Ke Shih wrote:
> > Bitterblue Smith <rtl8821cerfe2@gmail.com> wrote:
> >> Don't access dle_mem in get_dle_mem_cfg() directly. USB 2, USB 3, and
> >> SDIO will need different sets of values.
> >>
> >> Rename dle_mem in struct rtw89_chip_info to dle_mem_pcie and get it
> >> via rtw89_hci_dle_mem() and rtw89_pci_ops_dle_mem().
> >>
> >> Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
> >> ---
> >>  drivers/net/wireless/realtek/rtw89/core.h      | 10 +++++++++-
> >>  drivers/net/wireless/realtek/rtw89/mac.c       |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/pci.c       |  8 ++++++++
> >>  drivers/net/wireless/realtek/rtw89/rtw8851b.c  |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/rtw8852a.c  |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/rtw8852b.c  |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/rtw8852bt.c |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/rtw8852c.c  |  2 +-
> >>  drivers/net/wireless/realtek/rtw89/rtw8922a.c  |  2 +-
> >>  9 files changed, 24 insertions(+), 8 deletions(-)
> >>
> >> diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
> >> index be1259cfa712..afcf0353a625 100644
> >> --- a/drivers/net/wireless/realtek/rtw89/core.h
> >> +++ b/drivers/net/wireless/realtek/rtw89/core.h
> >> @@ -3579,6 +3579,8 @@ struct rtw89_hci_ops {
> >>         void (*disable_intr)(struct rtw89_dev *rtwdev);
> >>         void (*enable_intr)(struct rtw89_dev *rtwdev);
> >>         int (*rst_bdram)(struct rtw89_dev *rtwdev);
> >
> > an empty line
> >
> >> +       const struct rtw89_dle_mem *(*dle_mem)(struct rtw89_dev *rtwdev,
> >> +                                              u8 qta_mode);
> >>  };
> >>
> >>  struct rtw89_hci_info {
> >> @@ -4271,7 +4273,7 @@ struct rtw89_chip_info {
> >>         bool dis_2g_40m_ul_ofdma;
> >>         u32 rsvd_ple_ofst;
> >>         const struct rtw89_hfc_param_ini *hfc_param_ini;
> >> -       const struct rtw89_dle_mem *dle_mem;
> >> +       const struct rtw89_dle_mem *dle_mem_pcie;
> >
> > I reconsider if this can be an array with a new enum = {PCIE, USB2, USB3, SDIO}
> > stored in hal->hci_dle_mem_type. Then, consumers can just access it via
> > chip->dle_mem[hal->hci_dle_mem_type][quota]. But, I'm not sure if USB
> > subsystem can notify driver when USB speed is changed.
> >
> > This is a thought to simply the struct definition.
> >
> 
> The hard part is naming the new enum. It's basically rtw89_hci_type
> but more detailed.

If it only used by DLE, maybe rtw89_hci_dle_type is fine?

> 
> I don't expect the USB speed to change during the lifetime of struct
> rtw89_dev. When the device switches from USB 2 to USB 3 it disconnects
> and reappears as a new device:

So seemingly it is workable to store the USB speed in a variable at USB probe.
Please try if it looks good.

> 
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: new high-speed USB device number 17 using xhci_hcd
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: New USB device found, idVendor=0bda, idProduct=c832, bcdDevice=
> 0.00
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: Product: 802.11ax WLAN Adapter
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: Manufacturer: Realtek
> Apr 21 22:02:22 ideapad2 kernel: usb 1-4: SerialNumber: 00e04c000001
> Apr 21 22:02:24 ideapad2 kernel: eric-tx CALL alloc_txring !!!!
> Apr 21 22:02:24 ideapad2 kernel: usb 1-4: USB disconnect, device number 17
> Apr 21 22:02:24 ideapad2 kernel: rtl8852cu 1-4:1.0: Runtime PM usage count underflow!
> 
> Apr 21 22:02:27 ideapad2 kernel: usb 2-4: new SuperSpeed USB device number 2 using xhci_hcd
> Apr 21 22:02:27 ideapad2 kernel: usb 2-4: New USB device found, idVendor=0bda, idProduct=c832, bcdDevice=
> 0.00
> Apr 21 22:02:28 ideapad2 kernel: usb 2-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
> Apr 21 22:02:28 ideapad2 kernel: usb 2-4: Product: 802.11ax WLAN Adapter
> Apr 21 22:02:28 ideapad2 kernel: usb 2-4: Manufacturer: Realtek
> Apr 21 22:02:28 ideapad2 kernel: usb 2-4: SerialNumber: 00e04c000001
> Apr 21 22:02:28 ideapad2 kernel: eric-tx CALL alloc_txring !!!!
> Apr 21 22:02:28 ideapad2 kernel: rtl8852cu 2-4:1.0 wlp3s0f3u4: renamed from wlan0
>
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtw89/core.h b/drivers/net/wireless/realtek/rtw89/core.h
index be1259cfa712..afcf0353a625 100644
--- a/drivers/net/wireless/realtek/rtw89/core.h
+++ b/drivers/net/wireless/realtek/rtw89/core.h
@@ -3579,6 +3579,8 @@  struct rtw89_hci_ops {
 	void (*disable_intr)(struct rtw89_dev *rtwdev);
 	void (*enable_intr)(struct rtw89_dev *rtwdev);
 	int (*rst_bdram)(struct rtw89_dev *rtwdev);
+	const struct rtw89_dle_mem *(*dle_mem)(struct rtw89_dev *rtwdev,
+					       u8 qta_mode);
 };
 
 struct rtw89_hci_info {
@@ -4271,7 +4273,7 @@  struct rtw89_chip_info {
 	bool dis_2g_40m_ul_ofdma;
 	u32 rsvd_ple_ofst;
 	const struct rtw89_hfc_param_ini *hfc_param_ini;
-	const struct rtw89_dle_mem *dle_mem;
+	const struct rtw89_dle_mem *dle_mem_pcie;
 	u8 wde_qempty_acq_grpnum;
 	u8 wde_qempty_mgq_grpsel;
 	u32 rf_base_addr[2];
@@ -6146,6 +6148,12 @@  static inline void rtw89_hci_clear(struct rtw89_dev *rtwdev, struct pci_dev *pde
 		rtwdev->hci.ops->clear(rtwdev, pdev);
 }
 
+static inline const
+struct rtw89_dle_mem *rtw89_hci_dle_mem(struct rtw89_dev *rtwdev, u8 qta_mode)
+{
+	return rtwdev->hci.ops->dle_mem(rtwdev, qta_mode);
+}
+
 static inline
 struct rtw89_tx_skb_data *RTW89_TX_SKB_CB(struct sk_buff *skb)
 {
diff --git a/drivers/net/wireless/realtek/rtw89/mac.c b/drivers/net/wireless/realtek/rtw89/mac.c
index 592fbb6d2728..77d35db3e133 100644
--- a/drivers/net/wireless/realtek/rtw89/mac.c
+++ b/drivers/net/wireless/realtek/rtw89/mac.c
@@ -1719,7 +1719,7 @@  static const struct rtw89_dle_mem *get_dle_mem_cfg(struct rtw89_dev *rtwdev,
 	struct rtw89_mac_info *mac = &rtwdev->mac;
 	const struct rtw89_dle_mem *cfg;
 
-	cfg = &rtwdev->chip->dle_mem[mode];
+	cfg = rtw89_hci_dle_mem(rtwdev, mode);
 	if (!cfg)
 		return NULL;
 
diff --git a/drivers/net/wireless/realtek/rtw89/pci.c b/drivers/net/wireless/realtek/rtw89/pci.c
index c2fe5a898dc7..1dec603012ba 100644
--- a/drivers/net/wireless/realtek/rtw89/pci.c
+++ b/drivers/net/wireless/realtek/rtw89/pci.c
@@ -4341,6 +4341,13 @@  static int __maybe_unused rtw89_pci_resume(struct device *dev)
 SIMPLE_DEV_PM_OPS(rtw89_pm_ops, rtw89_pci_suspend, rtw89_pci_resume);
 EXPORT_SYMBOL(rtw89_pm_ops);
 
+static const
+struct rtw89_dle_mem *rtw89_pci_ops_dle_mem(struct rtw89_dev *rtwdev,
+					    u8 qta_mode)
+{
+	return &rtwdev->chip->dle_mem_pcie[qta_mode];
+}
+
 const struct rtw89_pci_gen_def rtw89_pci_gen_ax = {
 	.isr_rdu = B_AX_RDU_INT,
 	.isr_halt_c2h = B_AX_HALT_C2H_INT_EN,
@@ -4413,6 +4420,7 @@  static const struct rtw89_hci_ops rtw89_pci_ops = {
 	.disable_intr	= rtw89_pci_disable_intr_lock,
 	.enable_intr	= rtw89_pci_enable_intr_lock,
 	.rst_bdram	= rtw89_pci_reset_bdram,
+	.dle_mem	= rtw89_pci_ops_dle_mem,
 };
 
 int rtw89_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8851b.c b/drivers/net/wireless/realtek/rtw89/rtw8851b.c
index 8d774bd75edb..1295718b8fdc 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8851b.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8851b.c
@@ -2465,7 +2465,7 @@  const struct rtw89_chip_info rtw8851b_chip_info = {
 	.dis_2g_40m_ul_ofdma	= true,
 	.rsvd_ple_ofst		= 0x2f800,
 	.hfc_param_ini		= rtw8851b_hfc_param_ini_pcie,
-	.dle_mem		= rtw8851b_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8851b_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 4,
 	.wde_qempty_mgq_grpsel	= 4,
 	.rf_base_addr		= {0xe000},
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852a.c b/drivers/net/wireless/realtek/rtw89/rtw8852a.c
index 408c2f7b3eec..5e9e2fc09458 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852a.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852a.c
@@ -2184,7 +2184,7 @@  const struct rtw89_chip_info rtw8852a_chip_info = {
 	.dis_2g_40m_ul_ofdma	= true,
 	.rsvd_ple_ofst		= 0x6f800,
 	.hfc_param_ini		= rtw8852a_hfc_param_ini_pcie,
-	.dle_mem		= rtw8852a_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8852a_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 16,
 	.wde_qempty_mgq_grpsel	= 16,
 	.rf_base_addr		= {0xc000, 0xd000},
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852b.c b/drivers/net/wireless/realtek/rtw89/rtw8852b.c
index dec736a07c54..badaea9d4cb8 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852b.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852b.c
@@ -820,7 +820,7 @@  const struct rtw89_chip_info rtw8852b_chip_info = {
 	.dis_2g_40m_ul_ofdma	= true,
 	.rsvd_ple_ofst		= 0x2f800,
 	.hfc_param_ini		= rtw8852b_hfc_param_ini_pcie,
-	.dle_mem		= rtw8852b_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8852b_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 4,
 	.wde_qempty_mgq_grpsel	= 4,
 	.rf_base_addr		= {0xe000, 0xf000},
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
index 3aaf70e32652..74619361e29b 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852bt.c
@@ -754,7 +754,7 @@  const struct rtw89_chip_info rtw8852bt_chip_info = {
 	.dis_2g_40m_ul_ofdma	= true,
 	.rsvd_ple_ofst		= 0x6f800,
 	.hfc_param_ini		= rtw8852bt_hfc_param_ini_pcie,
-	.dle_mem		= rtw8852bt_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8852bt_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 4,
 	.wde_qempty_mgq_grpsel	= 4,
 	.rf_base_addr		= {0xe000, 0xf000},
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8852c.c b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
index 9a2235f28e24..8b049c3ace93 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8852c.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8852c.c
@@ -3004,7 +3004,7 @@  const struct rtw89_chip_info rtw8852c_chip_info = {
 	.dis_2g_40m_ul_ofdma	= false,
 	.rsvd_ple_ofst		= 0x6f800,
 	.hfc_param_ini		= rtw8852c_hfc_param_ini_pcie,
-	.dle_mem		= rtw8852c_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8852c_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 16,
 	.wde_qempty_mgq_grpsel	= 16,
 	.rf_base_addr		= {0xe000, 0xf000},
diff --git a/drivers/net/wireless/realtek/rtw89/rtw8922a.c b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
index cc595cae53f5..505f45595dc8 100644
--- a/drivers/net/wireless/realtek/rtw89/rtw8922a.c
+++ b/drivers/net/wireless/realtek/rtw89/rtw8922a.c
@@ -2816,7 +2816,7 @@  const struct rtw89_chip_info rtw8922a_chip_info = {
 	.dis_2g_40m_ul_ofdma	= false,
 	.rsvd_ple_ofst		= 0x8f800,
 	.hfc_param_ini		= rtw8922a_hfc_param_ini_pcie,
-	.dle_mem		= rtw8922a_dle_mem_pcie,
+	.dle_mem_pcie		= rtw8922a_dle_mem_pcie,
 	.wde_qempty_acq_grpnum	= 4,
 	.wde_qempty_mgq_grpsel	= 4,
 	.rf_base_addr		= {0xe000, 0xf000},