Skip to content

Commit 104372f

Browse files
author
Kalle Valo
committed
Merge tag 'rtw-next-2024-12-12' of https://github.com/pkshih/rtw
rtw-next patches for v6.14 Regular development in this period. Main changes are listed: rtl8xxxu: * add more USB devices IDs rtlwifi: * refine error path rtw88: * add more USB devices IDs * enable USB RX aggregation and USB 3 to improve performance rtw89: * implement more stuffs including PS flow for MLO
2 parents b05d30c + 0948981 commit 104372f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

47 files changed

+1840
-358
lines changed

drivers/net/wireless/realtek/rtl8xxxu/core.c

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8147,6 +8147,8 @@ static const struct usb_device_id dev_table[] = {
81478147
.driver_info = (unsigned long)&rtl8192cu_fops},
81488148
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x817e, 0xff, 0xff, 0xff),
81498149
.driver_info = (unsigned long)&rtl8192cu_fops},
8150+
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x8186, 0xff, 0xff, 0xff),
8151+
.driver_info = (unsigned long)&rtl8192cu_fops},
81508152
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x818a, 0xff, 0xff, 0xff),
81518153
.driver_info = (unsigned long)&rtl8192cu_fops},
81528154
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x317f, 0xff, 0xff, 0xff),
@@ -8157,12 +8159,18 @@ static const struct usb_device_id dev_table[] = {
81578159
.driver_info = (unsigned long)&rtl8192cu_fops},
81588160
{USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1102, 0xff, 0xff, 0xff),
81598161
.driver_info = (unsigned long)&rtl8192cu_fops},
8162+
{USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x11f2, 0xff, 0xff, 0xff),
8163+
.driver_info = (unsigned long)&rtl8192cu_fops},
81608164
{USB_DEVICE_AND_INTERFACE_INFO(0x06f8, 0xe033, 0xff, 0xff, 0xff),
81618165
.driver_info = (unsigned long)&rtl8192cu_fops},
8166+
{USB_DEVICE_AND_INTERFACE_INFO(0x07b8, 0x8188, 0xff, 0xff, 0xff),
8167+
.driver_info = (unsigned long)&rtl8192cu_fops},
81628168
{USB_DEVICE_AND_INTERFACE_INFO(0x07b8, 0x8189, 0xff, 0xff, 0xff),
81638169
.driver_info = (unsigned long)&rtl8192cu_fops},
81648170
{USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9041, 0xff, 0xff, 0xff),
81658171
.driver_info = (unsigned long)&rtl8192cu_fops},
8172+
{USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9043, 0xff, 0xff, 0xff),
8173+
.driver_info = (unsigned long)&rtl8192cu_fops},
81668174
{USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x17ba, 0xff, 0xff, 0xff),
81678175
.driver_info = (unsigned long)&rtl8192cu_fops},
81688176
{USB_DEVICE_AND_INTERFACE_INFO(USB_VENDOR_ID_REALTEK, 0x1e1e, 0xff, 0xff, 0xff),
@@ -8179,6 +8187,10 @@ static const struct usb_device_id dev_table[] = {
81798187
.driver_info = (unsigned long)&rtl8192cu_fops},
81808188
{USB_DEVICE_AND_INTERFACE_INFO(0x13d3, 0x3357, 0xff, 0xff, 0xff),
81818189
.driver_info = (unsigned long)&rtl8192cu_fops},
8190+
{USB_DEVICE_AND_INTERFACE_INFO(0x13d3, 0x3358, 0xff, 0xff, 0xff),
8191+
.driver_info = (unsigned long)&rtl8192cu_fops},
8192+
{USB_DEVICE_AND_INTERFACE_INFO(0x13d3, 0x3359, 0xff, 0xff, 0xff),
8193+
.driver_info = (unsigned long)&rtl8192cu_fops},
81828194
{USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x330b, 0xff, 0xff, 0xff),
81838195
.driver_info = (unsigned long)&rtl8192cu_fops},
81848196
{USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0x4902, 0xff, 0xff, 0xff),
@@ -8193,6 +8205,8 @@ static const struct usb_device_id dev_table[] = {
81938205
.driver_info = (unsigned long)&rtl8192cu_fops},
81948206
{USB_DEVICE_AND_INTERFACE_INFO(0x4856, 0x0091, 0xff, 0xff, 0xff),
81958207
.driver_info = (unsigned long)&rtl8192cu_fops},
8208+
{USB_DEVICE_AND_INTERFACE_INFO(0x9846, 0x9041, 0xff, 0xff, 0xff),
8209+
.driver_info = (unsigned long)&rtl8192cu_fops},
81968210
{USB_DEVICE_AND_INTERFACE_INFO(0xcdab, 0x8010, 0xff, 0xff, 0xff),
81978211
.driver_info = (unsigned long)&rtl8192cu_fops},
81988212
{USB_DEVICE_AND_INTERFACE_INFO(0x04f2, 0xaff7, 0xff, 0xff, 0xff),
@@ -8218,6 +8232,8 @@ static const struct usb_device_id dev_table[] = {
82188232
.driver_info = (unsigned long)&rtl8192cu_fops},
82198233
{USB_DEVICE_AND_INTERFACE_INFO(0x0586, 0x341f, 0xff, 0xff, 0xff),
82208234
.driver_info = (unsigned long)&rtl8192cu_fops},
8235+
{USB_DEVICE_AND_INTERFACE_INFO(0x06f8, 0xe033, 0xff, 0xff, 0xff),
8236+
.driver_info = (unsigned long)&rtl8192cu_fops},
82218237
{USB_DEVICE_AND_INTERFACE_INFO(0x06f8, 0xe035, 0xff, 0xff, 0xff),
82228238
.driver_info = (unsigned long)&rtl8192cu_fops},
82238239
{USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x17ab, 0xff, 0xff, 0xff),
@@ -8226,6 +8242,8 @@ static const struct usb_device_id dev_table[] = {
82268242
.driver_info = (unsigned long)&rtl8192cu_fops},
82278243
{USB_DEVICE_AND_INTERFACE_INFO(0x0df6, 0x0070, 0xff, 0xff, 0xff),
82288244
.driver_info = (unsigned long)&rtl8192cu_fops},
8245+
{USB_DEVICE_AND_INTERFACE_INFO(0x0df6, 0x0077, 0xff, 0xff, 0xff),
8246+
.driver_info = (unsigned long)&rtl8192cu_fops},
82298247
{USB_DEVICE_AND_INTERFACE_INFO(0x0789, 0x016d, 0xff, 0xff, 0xff),
82308248
.driver_info = (unsigned long)&rtl8192cu_fops},
82318249
{USB_DEVICE_AND_INTERFACE_INFO(0x07aa, 0x0056, 0xff, 0xff, 0xff),
@@ -8248,6 +8266,8 @@ static const struct usb_device_id dev_table[] = {
82488266
.driver_info = (unsigned long)&rtl8192cu_fops},
82498267
{USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x330a, 0xff, 0xff, 0xff),
82508268
.driver_info = (unsigned long)&rtl8192cu_fops},
8269+
{USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x330d, 0xff, 0xff, 0xff),
8270+
.driver_info = (unsigned long)&rtl8192cu_fops},
82518271
{USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0xab2b, 0xff, 0xff, 0xff),
82528272
.driver_info = (unsigned long)&rtl8192cu_fops},
82538273
{USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x624d, 0xff, 0xff, 0xff),

drivers/net/wireless/realtek/rtlwifi/base.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -575,9 +575,15 @@ static void rtl_free_entries_from_ack_queue(struct ieee80211_hw *hw,
575575

576576
void rtl_deinit_core(struct ieee80211_hw *hw)
577577
{
578+
struct rtl_priv *rtlpriv = rtl_priv(hw);
579+
578580
rtl_c2hcmd_launcher(hw, 0);
579581
rtl_free_entries_from_scan_list(hw);
580582
rtl_free_entries_from_ack_queue(hw, false);
583+
if (rtlpriv->works.rtl_wq) {
584+
destroy_workqueue(rtlpriv->works.rtl_wq);
585+
rtlpriv->works.rtl_wq = NULL;
586+
}
581587
}
582588
EXPORT_SYMBOL_GPL(rtl_deinit_core);
583589

@@ -2696,9 +2702,6 @@ MODULE_AUTHOR("Larry Finger <[email protected]>");
26962702
MODULE_LICENSE("GPL");
26972703
MODULE_DESCRIPTION("Realtek 802.11n PCI wireless core");
26982704

2699-
struct rtl_global_var rtl_global_var = {};
2700-
EXPORT_SYMBOL_GPL(rtl_global_var);
2701-
27022705
static int __init rtl_core_module_init(void)
27032706
{
27042707
BUILD_BUG_ON(TX_PWR_BY_RATE_NUM_RATE < TX_PWR_BY_RATE_NUM_SECTION);
@@ -2712,10 +2715,6 @@ static int __init rtl_core_module_init(void)
27122715
/* add debugfs */
27132716
rtl_debugfs_add_topdir();
27142717

2715-
/* init some global vars */
2716-
INIT_LIST_HEAD(&rtl_global_var.glb_priv_list);
2717-
spin_lock_init(&rtl_global_var.glb_list_lock);
2718-
27192718
return 0;
27202719
}
27212720

drivers/net/wireless/realtek/rtlwifi/base.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ int rtl_send_smps_action(struct ieee80211_hw *hw,
124124
u8 *rtl_find_ie(u8 *data, unsigned int len, u8 ie);
125125
void rtl_recognize_peer(struct ieee80211_hw *hw, u8 *data, unsigned int len);
126126
u8 rtl_tid_to_ac(u8 tid);
127-
extern struct rtl_global_var rtl_global_var;
128127
void rtl_phy_scan_operation_backup(struct ieee80211_hw *hw, u8 operation);
129128

130129
#endif

drivers/net/wireless/realtek/rtlwifi/pci.c

Lines changed: 9 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -295,46 +295,6 @@ static bool rtl_pci_get_amd_l1_patch(struct ieee80211_hw *hw)
295295
return status;
296296
}
297297

298-
static bool rtl_pci_check_buddy_priv(struct ieee80211_hw *hw,
299-
struct rtl_priv **buddy_priv)
300-
{
301-
struct rtl_priv *rtlpriv = rtl_priv(hw);
302-
struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
303-
struct rtl_priv *tpriv = NULL, *iter;
304-
struct rtl_pci_priv *tpcipriv = NULL;
305-
306-
if (!list_empty(&rtlpriv->glb_var->glb_priv_list)) {
307-
list_for_each_entry(iter, &rtlpriv->glb_var->glb_priv_list,
308-
list) {
309-
tpcipriv = (struct rtl_pci_priv *)iter->priv;
310-
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
311-
"pcipriv->ndis_adapter.funcnumber %x\n",
312-
pcipriv->ndis_adapter.funcnumber);
313-
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
314-
"tpcipriv->ndis_adapter.funcnumber %x\n",
315-
tpcipriv->ndis_adapter.funcnumber);
316-
317-
if (pcipriv->ndis_adapter.busnumber ==
318-
tpcipriv->ndis_adapter.busnumber &&
319-
pcipriv->ndis_adapter.devnumber ==
320-
tpcipriv->ndis_adapter.devnumber &&
321-
pcipriv->ndis_adapter.funcnumber !=
322-
tpcipriv->ndis_adapter.funcnumber) {
323-
tpriv = iter;
324-
break;
325-
}
326-
}
327-
}
328-
329-
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
330-
"find_buddy_priv %d\n", tpriv != NULL);
331-
332-
if (tpriv)
333-
*buddy_priv = tpriv;
334-
335-
return tpriv != NULL;
336-
}
337-
338298
static void rtl_pci_parse_configuration(struct pci_dev *pdev,
339299
struct ieee80211_hw *hw)
340300
{
@@ -1696,8 +1656,6 @@ static void rtl_pci_deinit(struct ieee80211_hw *hw)
16961656
synchronize_irq(rtlpci->pdev->irq);
16971657
tasklet_kill(&rtlpriv->works.irq_tasklet);
16981658
cancel_work_sync(&rtlpriv->works.lps_change_work);
1699-
1700-
destroy_workqueue(rtlpriv->works.rtl_wq);
17011659
}
17021660

17031661
static int rtl_pci_init(struct ieee80211_hw *hw, struct pci_dev *pdev)
@@ -2011,7 +1969,6 @@ static bool _rtl_pci_find_adapter(struct pci_dev *pdev,
20111969
pcipriv->ndis_adapter.amd_l1_patch);
20121970

20131971
rtl_pci_parse_configuration(pdev, hw);
2014-
list_add_tail(&rtlpriv->list, &rtlpriv->glb_var->glb_priv_list);
20151972

20161973
return true;
20171974
}
@@ -2158,7 +2115,6 @@ int rtl_pci_probe(struct pci_dev *pdev,
21582115
rtlpriv->rtlhal.interface = INTF_PCI;
21592116
rtlpriv->cfg = (struct rtl_hal_cfg *)(id->driver_data);
21602117
rtlpriv->intf_ops = &rtl_pci_ops;
2161-
rtlpriv->glb_var = &rtl_global_var;
21622118
rtl_efuse_ops_init(hw);
21632119

21642120
/* MEM map */
@@ -2209,7 +2165,7 @@ int rtl_pci_probe(struct pci_dev *pdev,
22092165
if (rtlpriv->cfg->ops->init_sw_vars(hw)) {
22102166
pr_err("Can't init_sw_vars\n");
22112167
err = -ENODEV;
2212-
goto fail3;
2168+
goto fail2;
22132169
}
22142170
rtl_init_sw_leds(hw);
22152171

@@ -2227,14 +2183,14 @@ int rtl_pci_probe(struct pci_dev *pdev,
22272183
err = rtl_pci_init(hw, pdev);
22282184
if (err) {
22292185
pr_err("Failed to init PCI\n");
2230-
goto fail3;
2186+
goto fail4;
22312187
}
22322188

22332189
err = ieee80211_register_hw(hw);
22342190
if (err) {
22352191
pr_err("Can't register mac80211 hw.\n");
22362192
err = -ENODEV;
2237-
goto fail3;
2193+
goto fail5;
22382194
}
22392195
rtlpriv->mac80211.mac80211_registered = 1;
22402196

@@ -2257,16 +2213,19 @@ int rtl_pci_probe(struct pci_dev *pdev,
22572213
set_bit(RTL_STATUS_INTERFACE_START, &rtlpriv->status);
22582214
return 0;
22592215

2260-
fail3:
2261-
pci_set_drvdata(pdev, NULL);
2216+
fail5:
2217+
rtl_pci_deinit(hw);
2218+
fail4:
22622219
rtl_deinit_core(hw);
2220+
fail3:
2221+
wait_for_completion(&rtlpriv->firmware_loading_complete);
2222+
rtlpriv->cfg->ops->deinit_sw_vars(hw);
22632223

22642224
fail2:
22652225
if (rtlpriv->io.pci_mem_start != 0)
22662226
pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start);
22672227

22682228
pci_release_regions(pdev);
2269-
complete(&rtlpriv->firmware_loading_complete);
22702229

22712230
fail1:
22722231
if (hw)
@@ -2317,7 +2276,6 @@ void rtl_pci_disconnect(struct pci_dev *pdev)
23172276
if (rtlpci->using_msi)
23182277
pci_disable_msi(rtlpci->pdev);
23192278

2320-
list_del(&rtlpriv->list);
23212279
if (rtlpriv->io.pci_mem_start != 0) {
23222280
pci_iounmap(pdev, (void __iomem *)rtlpriv->io.pci_mem_start);
23232281
pci_release_regions(pdev);
@@ -2376,7 +2334,6 @@ EXPORT_SYMBOL(rtl_pci_resume);
23762334
const struct rtl_intf_ops rtl_pci_ops = {
23772335
.adapter_start = rtl_pci_start,
23782336
.adapter_stop = rtl_pci_stop,
2379-
.check_buddy_priv = rtl_pci_check_buddy_priv,
23802337
.adapter_tx = rtl_pci_tx,
23812338
.flush = rtl_pci_flush,
23822339
.reset_trx_ring = rtl_pci_reset_trx_ring,

drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,23 @@ static void rtl92se_fw_cb(const struct firmware *firmware, void *context)
6464

6565
rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
6666
"Firmware callback routine entered!\n");
67-
complete(&rtlpriv->firmware_loading_complete);
6867
if (!firmware) {
6968
pr_err("Firmware %s not available\n", fw_name);
7069
rtlpriv->max_fw_size = 0;
71-
return;
70+
goto exit;
7271
}
7372
if (firmware->size > rtlpriv->max_fw_size) {
7473
pr_err("Firmware is too big!\n");
7574
rtlpriv->max_fw_size = 0;
7675
release_firmware(firmware);
77-
return;
76+
goto exit;
7877
}
7978
pfirmware = (struct rt_firmware *)rtlpriv->rtlhal.pfirmware;
8079
memcpy(pfirmware->sz_fw_tmpbuffer, firmware->data, firmware->size);
8180
pfirmware->sz_fw_tmpbufferlen = firmware->size;
8281
release_firmware(firmware);
82+
exit:
83+
complete(&rtlpriv->firmware_loading_complete);
8384
}
8485

8586
static int rtl92s_init_sw_vars(struct ieee80211_hw *hw)

drivers/net/wireless/realtek/rtlwifi/rtl8821ae/phy.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2033,8 +2033,10 @@ static bool _rtl8821ae_phy_config_bb_with_pgheaderfile(struct ieee80211_hw *hw,
20332033
if (!_rtl8821ae_check_condition(hw, v1)) {
20342034
i += 2; /* skip the pair of expression*/
20352035
v2 = array[i+1];
2036-
while (v2 != 0xDEAD)
2036+
while (v2 != 0xDEAD) {
20372037
i += 3;
2038+
v2 = array[i + 1];
2039+
}
20382040
}
20392041
}
20402042
}

drivers/net/wireless/realtek/rtlwifi/usb.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -629,11 +629,6 @@ static void _rtl_usb_cleanup_rx(struct ieee80211_hw *hw)
629629
tasklet_kill(&rtlusb->rx_work_tasklet);
630630
cancel_work_sync(&rtlpriv->works.lps_change_work);
631631

632-
if (rtlpriv->works.rtl_wq) {
633-
destroy_workqueue(rtlpriv->works.rtl_wq);
634-
rtlpriv->works.rtl_wq = NULL;
635-
}
636-
637632
skb_queue_purge(&rtlusb->rx_queue);
638633

639634
while ((urb = usb_get_from_anchor(&rtlusb->rx_cleanup_urbs))) {
@@ -1028,19 +1023,22 @@ int rtl_usb_probe(struct usb_interface *intf,
10281023
err = ieee80211_register_hw(hw);
10291024
if (err) {
10301025
pr_err("Can't register mac80211 hw.\n");
1031-
goto error_out;
1026+
goto error_init_vars;
10321027
}
10331028
rtlpriv->mac80211.mac80211_registered = 1;
10341029

10351030
set_bit(RTL_STATUS_INTERFACE_START, &rtlpriv->status);
10361031
return 0;
10371032

1033+
error_init_vars:
1034+
wait_for_completion(&rtlpriv->firmware_loading_complete);
1035+
rtlpriv->cfg->ops->deinit_sw_vars(hw);
10381036
error_out:
1037+
rtl_usb_deinit(hw);
10391038
rtl_deinit_core(hw);
10401039
error_out2:
10411040
_rtl_usb_io_handler_release(hw);
10421041
usb_put_dev(udev);
1043-
complete(&rtlpriv->firmware_loading_complete);
10441042
kfree(rtlpriv->usb_data);
10451043
ieee80211_free_hw(hw);
10461044
return -ENODEV;

drivers/net/wireless/realtek/rtlwifi/wifi.h

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2270,8 +2270,6 @@ struct rtl_intf_ops {
22702270
/*com */
22712271
int (*adapter_start)(struct ieee80211_hw *hw);
22722272
void (*adapter_stop)(struct ieee80211_hw *hw);
2273-
bool (*check_buddy_priv)(struct ieee80211_hw *hw,
2274-
struct rtl_priv **buddy_priv);
22752273

22762274
int (*adapter_tx)(struct ieee80211_hw *hw,
22772275
struct ieee80211_sta *sta,
@@ -2514,14 +2512,6 @@ struct dig_t {
25142512
u32 rssi_max;
25152513
};
25162514

2517-
struct rtl_global_var {
2518-
/* from this list we can get
2519-
* other adapter's rtl_priv
2520-
*/
2521-
struct list_head glb_priv_list;
2522-
spinlock_t glb_list_lock;
2523-
};
2524-
25252515
#define IN_4WAY_TIMEOUT_TIME (30 * MSEC_PER_SEC) /* 30 seconds */
25262516

25272517
struct rtl_btc_info {
@@ -2667,9 +2657,7 @@ struct rtl_scan_list {
26672657
struct rtl_priv {
26682658
struct ieee80211_hw *hw;
26692659
struct completion firmware_loading_complete;
2670-
struct list_head list;
26712660
struct rtl_priv *buddy_priv;
2672-
struct rtl_global_var *glb_var;
26732661
struct rtl_dmsp_ctl dmsp_ctl;
26742662
struct rtl_locks locks;
26752663
struct rtl_works works;

0 commit comments

Comments
 (0)