diff --git a/package/kernel/rtw88-usb/Makefile b/package/kernel/rtw88-usb/Makefile index 10536b6b4..c7d9090bf 100644 --- a/package/kernel/rtw88-usb/Makefile +++ b/package/kernel/rtw88-usb/Makefile @@ -11,14 +11,12 @@ PKG_NAME:=rtw88-usb PKG_RELEASE:=1 PKG_SOURCE_PROTO:=git -PKG_SOURCE_DATE:=2021-07-06 -PKG_SOURCE_URL:=https://github.com/ulli-kroll/rtw88-usb.git -PKG_SOURCE_VERSION:=dd05eec8e5ac934b3d8e67e8008228f842b4ce1c -PKG_MIRROR_HASH:=9932f69573a3469d1eba403c7964a9472530fcfa1c29356babeecdad8d9c6991 +PKG_SOURCE_DATE:=2023-02-11 +PKG_SOURCE_URL:=https://github.com/lwfinger/rtw88.git +PKG_SOURCE_VERSION:=3af004dd40588e86280f0c58a483de6f53b9803f +PKG_MIRROR_HASH:=13a476c6e46702dee0a3ea2cd743587ab889414be2dce979e652f3bbfa106d76 PKG_BUILD_PARALLEL:=1 -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:=LICENSE STAMP_CONFIGURED_DEPENDS := $(STAGING_DIR)/usr/include/mac80211-backport/backport/autoconf.h @@ -36,8 +34,8 @@ define KernelPackage/rtw88-usb $(KernelPackage/rtw88-default) HIDDEN:=1 FILES:= \ - $(PKG_BUILD_DIR)/rtw88_usb.ko \ - $(PKG_BUILD_DIR)/rtw88_core.ko + $(PKG_BUILD_DIR)/rtw_core.ko \ + $(PKG_BUILD_DIR)/rtw88_usb.ko endef define KernelPackage/rtl8723du @@ -45,7 +43,7 @@ define KernelPackage/rtl8723du TITLE:=Realtek RTL8723DU support DEPENDS+=+kmod-rtw88-usb +rtl8723du-firmware FILES:= \ - $(PKG_BUILD_DIR)/rtw88_8723d.ko \ + $(PKG_BUILD_DIR)/rtw_8723d.ko \ $(PKG_BUILD_DIR)/rtw88_8723du.ko AUTOLOAD:=$(call AutoProbe,rtw88_8723du) endef @@ -55,7 +53,7 @@ define KernelPackage/rtl8821cu TITLE:=Realtek RTL8821CU support DEPENDS+=+kmod-rtw88-usb +rtl8821ce-firmware FILES:= \ - $(PKG_BUILD_DIR)/rtw88_8821c.ko \ + $(PKG_BUILD_DIR)/rtw_8821c.ko \ $(PKG_BUILD_DIR)/rtw88_8821cu.ko AUTOLOAD:=$(call AutoProbe,rtw88_8821cu) endef @@ -65,7 +63,7 @@ define KernelPackage/rtl8822bu TITLE:=Realtek RTL8822BU support DEPENDS+=+kmod-rtw88-usb +rtl8822be-firmware FILES:= \ - $(PKG_BUILD_DIR)/rtw88_8822b.ko \ + $(PKG_BUILD_DIR)/rtw_8822b.ko \ $(PKG_BUILD_DIR)/rtw88_8822bu.ko AUTOLOAD:=$(call AutoProbe,rtw88_8822bu) endef @@ -75,7 +73,7 @@ define KernelPackage/rtl8822cu TITLE:=Realtek RTL8822CU support DEPENDS+=+kmod-rtw88-usb +rtl8822ce-firmware FILES:= \ - $(PKG_BUILD_DIR)/rtw88_8822c.ko \ + $(PKG_BUILD_DIR)/rtw_8822c.ko \ $(PKG_BUILD_DIR)/rtw88_8822cu.ko AUTOLOAD:=$(call AutoProbe,rtw88_8822cu) endef @@ -90,36 +88,11 @@ NOSTDINC_FLAGS := \ -include backport/autoconf.h \ -include backport/backport.h -ifdef CONFIG_PACKAGE_kmod-rtw88-usb -PKG_MAKE_FLAGS += \ - CONFIG_RTW88_USB=m \ - CONFIG_RTW88_CORE=m -endif -ifdef CONFIG_PACKAGE_kmod-rtl8723du - PKG_MAKE_FLAGS += \ - CONFIG_RTW88_8723D=m \ - CONFIG_RTW88_8723DU=m -endif -ifdef CONFIG_PACKAGE_kmod-rtl8821cu - PKG_MAKE_FLAGS += \ - CONFIG_RTW88_8821C=m \ - CONFIG_RTW88_8821CU=m -endif -ifdef CONFIG_PACKAGE_kmod-rtl8822bu - PKG_MAKE_FLAGS += \ - CONFIG_RTW88_8822B=m \ - CONFIG_RTW88_8822BU=m -endif -ifdef CONFIG_PACKAGE_kmod-rtl8822cu - PKG_MAKE_FLAGS += \ - CONFIG_RTW88_8822C=m \ - CONFIG_RTW88_8822CU=m -endif +NOSTDINC_FLAGS+=-DBUILD_OPENWRT define Build/Compile +$(MAKE) $(PKG_JOBS) -C "$(LINUX_DIR)" \ $(KERNEL_MAKE_FLAGS) \ - $(PKG_MAKE_FLAGS) \ M="$(PKG_BUILD_DIR)" \ NOSTDINC_FLAGS="$(NOSTDINC_FLAGS)" \ modules diff --git a/package/kernel/rtw88-usb/patches/001-sync-upstream-regd.patch b/package/kernel/rtw88-usb/patches/001-sync-upstream-regd.patch deleted file mode 100644 index 8b4843088..000000000 --- a/package/kernel/rtw88-usb/patches/001-sync-upstream-regd.patch +++ /dev/null @@ -1,391 +0,0 @@ ---- a/debug.c -+++ b/debug.c -@@ -868,37 +868,6 @@ static int rtw_debugfs_get_coex_enable(struct seq_file *m, void *v) - return 0; - } - --static ssize_t rtw_debugfs_set_edcca_enable(struct file *filp, -- const char __user *buffer, -- size_t count, loff_t *loff) --{ -- struct seq_file *seqpriv = (struct seq_file *)filp->private_data; -- struct rtw_debugfs_priv *debugfs_priv = seqpriv->private; -- struct rtw_dev *rtwdev = debugfs_priv->rtwdev; -- char tmp[32 + 1]; -- int err; -- -- rtw_debugfs_copy_from_user(tmp, sizeof(tmp), buffer, count, 1); -- -- err = kstrtobool(tmp, &rtw_edcca_enabled); -- if (err) -- return err; -- rtw_phy_adaptivity_set_mode(rtwdev); -- -- return count; --} -- --static int rtw_debugfs_get_edcca_enable(struct seq_file *m, void *v) --{ -- struct rtw_debugfs_priv *debugfs_priv = m->private; -- struct rtw_dev *rtwdev = debugfs_priv->rtwdev; -- struct rtw_dm_info *dm_info = &rtwdev->dm_info; -- -- seq_printf(m, "EDCCA mode %d\n", dm_info->edcca_mode); -- -- return 0; --} -- - static ssize_t rtw_debugfs_set_fw_crash(struct file *filp, - const char __user *buffer, - size_t count, loff_t *loff) -@@ -1118,11 +1087,6 @@ static struct rtw_debugfs_priv rtw_debug_priv_coex_info = { - .cb_read = rtw_debugfs_get_coex_info, - }; - --static struct rtw_debugfs_priv rtw_debug_priv_edcca_enable = { -- .cb_write = rtw_debugfs_set_edcca_enable, -- .cb_read = rtw_debugfs_get_edcca_enable, --}; -- - static struct rtw_debugfs_priv rtw_debug_priv_fw_crash = { - .cb_write = rtw_debugfs_set_fw_crash, - .cb_read = rtw_debugfs_get_fw_crash, -@@ -1209,7 +1173,6 @@ void rtw_debugfs_init(struct rtw_dev *rtwdev) - rtw_debugfs_add_r(tx_pwr_tbl); - rtw_debugfs_add_rw(fw_crash); - rtw_debugfs_add_rw(dm_cap); -- rtw_debugfs_add_rw(edcca_enable); - } - - #endif /* CONFIG_RTW88_DEBUGFS */ ---- a/phy.c -+++ b/phy.c -@@ -9,7 +9,6 @@ - #include "fw.h" - #include "phy.h" - #include "debug.h" --#include "regd.h" - - struct phy_cfg_pair { - u32 addr; -@@ -121,58 +120,6 @@ static void rtw_phy_cck_pd_init(struct rtw_dev *rtwdev) - dm_info->cck_fa_avg = CCK_FA_AVG_RESET; - } - --void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l) --{ -- struct rtw_hw_reg_offset *edcca_th = rtwdev->chip->edcca_th; -- -- rtw_write32_mask(rtwdev, -- edcca_th[EDCCA_TH_L2H_IDX].hw_reg.addr, -- edcca_th[EDCCA_TH_L2H_IDX].hw_reg.mask, -- l2h + edcca_th[EDCCA_TH_L2H_IDX].offset); -- rtw_write32_mask(rtwdev, -- edcca_th[EDCCA_TH_H2L_IDX].hw_reg.addr, -- edcca_th[EDCCA_TH_H2L_IDX].hw_reg.mask, -- h2l + edcca_th[EDCCA_TH_H2L_IDX].offset); --} --EXPORT_SYMBOL(rtw_phy_set_edcca_th); -- --void rtw_phy_adaptivity_set_mode(struct rtw_dev *rtwdev) --{ -- struct rtw_chip_info *chip = rtwdev->chip; -- struct rtw_dm_info *dm_info = &rtwdev->dm_info; -- -- /* turn off in debugfs for debug usage */ -- if (!rtw_edcca_enabled) { -- dm_info->edcca_mode = RTW_EDCCA_NORMAL; -- rtw_dbg(rtwdev, RTW_DBG_PHY, "EDCCA disabled, cannot be set\n"); -- return; -- } -- -- switch (rtwdev->regd.region) { -- case NL80211_DFS_ETSI: -- dm_info->edcca_mode = RTW_EDCCA_ADAPTIVITY; -- dm_info->l2h_th_ini = chip->l2h_th_ini_ad; -- break; -- case NL80211_DFS_JP: -- dm_info->edcca_mode = RTW_EDCCA_ADAPTIVITY; -- dm_info->l2h_th_ini = chip->l2h_th_ini_cs; -- break; -- default: -- dm_info->edcca_mode = RTW_EDCCA_NORMAL; -- break; -- } --} -- --static void rtw_phy_adaptivity_init(struct rtw_dev *rtwdev) --{ -- struct rtw_chip_info *chip = rtwdev->chip; -- -- rtw_regd_init_dfs_region(rtwdev, rtwdev->regd.region); -- rtw_phy_adaptivity_set_mode(rtwdev); -- if (chip->ops->adaptivity_init) -- chip->ops->adaptivity_init(rtwdev); --} -- - static void rtw_phy_cfo_init(struct rtw_dev *rtwdev) - { - struct rtw_chip_info *chip = rtwdev->chip; -@@ -202,8 +149,6 @@ void rtw_phy_init(struct rtw_dev *rtwdev) - rtw_phy_cck_pd_init(rtwdev); - - dm_info->iqk.done = false; -- dm_info->iqk.done = false; -- rtw_phy_adaptivity_init(rtwdev); - } - EXPORT_SYMBOL(rtw_phy_init); - ---- a/phy.h -+++ b/phy.h -@@ -61,8 +61,6 @@ void rtw_phy_config_swing_table(struct rtw_dev *rtwdev, - struct rtw_swing_table *swing_table); - void rtw_phy_parsing_cfo(struct rtw_dev *rtwdev, - struct rtw_rx_pkt_stat *pkt_stat); --void rtw_phy_set_edcca_th(struct rtw_dev *rtwdev, u8 l2h, u8 h2l); --void rtw_phy_adaptivity_set_mode(struct rtw_dev *rtwdev); - - struct rtw_txpwr_lmt_cfg_pair { - u8 regd; ---- a/regd.c -+++ b/regd.c -@@ -7,18 +7,6 @@ - #include "debug.h" - #include "phy.h" - --static const struct ieee80211_regdomain rtw88_world_regdom = { -- .n_reg_rules = 5, -- .alpha2 = "99", -- .reg_rules = { -- REG_RULE(2412 - 10, 2462 + 10, 40, 0, 20, 0), -- REG_RULE(2467 - 10, 2484 + 10, 40, 0, 20, NL80211_RRF_NO_IR), -- REG_RULE(5180 - 10, 5240 + 10, 80, 0, 20, NL80211_RRF_NO_IR), -- REG_RULE(5260 - 10, 5700 + 10, 80, 0, 20, -- NL80211_RRF_NO_IR | NL80211_RRF_DFS), -- REG_RULE(5745 - 10, 5825 + 10, 80, 0, 20, NL80211_RRF_NO_IR), -- } --}; - #define COUNTRY_CHPLAN_ENT(_alpha2, _chplan, _txpwr_regd) \ - {.alpha2 = (_alpha2), \ - .chplan = (_chplan), \ -@@ -351,73 +339,28 @@ static struct rtw_regulatory rtw_regd_find_reg_by_name(char *alpha2) - return rtw_defined_chplan; - } - --static bool rtw_regd_is_ww(struct rtw_regulatory *reg) --{ -- if (reg->txpwr_regd == RTW_REGD_WW) -- return true; -- return false; --} -- --void rtw_regd_init_dfs_region(struct rtw_dev *rtwdev, -- enum nl80211_dfs_regions curr_region) --{ -- struct ieee80211_hw *hw = rtwdev->hw; -- const struct ieee80211_regdomain *wiphy_regd = NULL; -- -- if (curr_region != RTW_REGION_INVALID) -- return; -- -- rcu_read_lock(); -- wiphy_regd = rcu_dereference(hw->wiphy->regd); -- if (wiphy_regd) -- rtwdev->regd.region = wiphy_regd->dfs_region; -- rcu_read_unlock(); --} -- - static int rtw_regd_notifier_apply(struct rtw_dev *rtwdev, - struct wiphy *wiphy, - struct regulatory_request *request) - { -- if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER) -- return -ENOTSUPP; -- if (request->initiator == NL80211_REGDOM_SET_BY_USER && -- !IS_ENABLED(CONFIG_RTW88_REGD_USER_REG_HINTS)) -- return -EPERM; -- if (request->initiator == NL80211_REGDOM_SET_BY_COUNTRY_IE && -- !rtw_regd_is_ww(&rtwdev->regd)) -- return -EINVAL; -- if (request->initiator == NL80211_REGDOM_SET_BY_CORE && -- !rtwdev->efuse.country_worldwide) { -- rtwdev->regd = -- rtw_regd_find_reg_by_name(rtwdev->efuse.country_code); -- /* return to the efuse setting */ -- rtw_regd_init_dfs_region(rtwdev, RTW_REGION_INVALID); -+ if (request->initiator == NL80211_REGDOM_SET_BY_USER) - return 0; -- } - rtwdev->regd = rtw_regd_find_reg_by_name(request->alpha2); - rtw_regd_apply_world_flags(wiphy, request->initiator); -- rtwdev->regd.region = request->dfs_region; - - return 0; - } - - static int --rtw_regd_init_wiphy(struct rtw_dev *rtwdev, struct wiphy *wiphy, -+rtw_regd_init_wiphy(struct rtw_regulatory *reg, struct wiphy *wiphy, - void (*reg_notifier)(struct wiphy *wiphy, - struct regulatory_request *request)) - { -- struct rtw_regulatory *reg = &rtwdev->regd; -- - wiphy->reg_notifier = reg_notifier; - -- if (rtw_regd_is_ww(reg)) { -- rtwdev->efuse.country_worldwide = true; -- wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; -- wiphy_apply_custom_regulatory(wiphy, &rtw88_world_regdom); -- } else { -- rtwdev->efuse.country_worldwide = false; -- } -- wiphy->regulatory_flags |= REGULATORY_STRICT_REG; -+ wiphy->regulatory_flags &= ~REGULATORY_CUSTOM_REG; -+ wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG; -+ wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS; - - rtw_regd_apply_hw_cap_flags(wiphy); - -@@ -434,8 +377,7 @@ int rtw_regd_init(struct rtw_dev *rtwdev, - return -EINVAL; - - rtwdev->regd = rtw_regd_find_reg_by_name(rtwdev->efuse.country_code); -- rtw_regd_init_wiphy(rtwdev, wiphy, reg_notifier); -- rtwdev->regd.region = RTW_REGION_INVALID; -+ rtw_regd_init_wiphy(&rtwdev->regd, wiphy, reg_notifier); - - return 0; - } -@@ -445,21 +387,12 @@ void rtw_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request) - struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy); - struct rtw_dev *rtwdev = hw->priv; - struct rtw_hal *hal = &rtwdev->hal; -- int ret; - -- ret = rtw_regd_notifier_apply(rtwdev, wiphy, request); -- if (ret) { -- rtw_warn(rtwdev, "failed to apply regulatory from initiator %d: %d\n", -- request->initiator, ret); -- return; -- } -+ rtw_regd_notifier_apply(rtwdev, wiphy, request); - rtw_dbg(rtwdev, RTW_DBG_REGD, - "get alpha2 %c%c from initiator %d, mapping to chplan 0x%x, txregd %d\n", -- request->alpha2[0], request->alpha2[1], -- request->initiator, rtwdev->regd.chplan, -- rtwdev->regd.txpwr_regd); -- -- rtw_phy_adaptivity_set_mode(rtwdev); -+ request->alpha2[0], request->alpha2[1], request->initiator, -+ rtwdev->regd.chplan, rtwdev->regd.txpwr_regd); - - rtw_phy_set_tx_power_level(rtwdev, hal->current_channel); - } ---- a/regd.h -+++ b/regd.h -@@ -68,6 +68,4 @@ int rtw_regd_init(struct rtw_dev *rtwdev, - void (*reg_notifier)(struct wiphy *wiphy, - struct regulatory_request *request)); - void rtw_regd_notifier(struct wiphy *wiphy, struct regulatory_request *request); --void rtw_regd_init_dfs_region(struct rtw_dev *rtwdev, -- enum nl80211_dfs_regions curr_region); - #endif ---- a/rtw8822b.c -+++ b/rtw8822b.c -@@ -1561,37 +1561,6 @@ static void rtw8822b_bf_config_bfee(struct rtw_dev *rtwdev, struct rtw_vif *vif, - rtw_warn(rtwdev, "wrong bfee role\n"); - } - --static void rtw8822b_adaptivity_init(struct rtw_dev *rtwdev) --{ -- rtw_phy_set_edcca_th(rtwdev, 0x7f, 0x7f); -- /* mac edcca state setting */ -- rtw_write32_mask(rtwdev, REG_TX_PTCL_CTRL, BIT_DIS_EDCCA, 0); -- rtw_write32_mask(rtwdev, REG_RD_CTRL, BIT_EDCCA_MSK_CNTDOWN_EN, 1); -- -- rtw_write32_mask(rtwdev, REG_EDCCA_SOURCE, BIT_SOURCE_OPTION, 1); -- rtw_write32_mask(rtwdev, REG_EDCCA_POW_MA, BIT_MA_LEVEL, 0); -- /* edcca decistion opt */ -- rtw_write32_mask(rtwdev, REG_EDCCA_DECISION, BIT_EDCCA_OPTION, 1); --} -- --static void rtw8822b_adaptivity(struct rtw_dev *rtwdev) --{ -- struct rtw_dm_info *dm_info = &rtwdev->dm_info; -- s8 l2h, h2l; -- u8 igi; -- -- igi = dm_info->igi_history[0]; -- if (dm_info->edcca_mode == RTW_EDCCA_NORMAL) { -- l2h = max_t(s8, igi + EDCCA_IGI_L2H_DIFF, EDCCA_TH_L2H_LB); -- h2l = l2h - EDCCA_L2H_H2L_DIFF_NORMAL; -- } else { -- l2h = min_t(s8, igi, dm_info->l2h_th_ini); -- h2l = l2h - EDCCA_L2H_H2L_DIFF; -- } -- -- rtw_phy_set_edcca_th(rtwdev, l2h, h2l); --} -- - static void rtw8822b_fill_txdesc_checksum(struct rtw_dev *rtwdev, - struct rtw_tx_pkt_info *pkt_info, - u8 *txdesc) -@@ -2174,8 +2143,6 @@ static struct rtw_chip_ops rtw8822b_ops = { - .config_bfee = rtw8822b_bf_config_bfee, - .set_gid_table = rtw_bf_set_gid_table, - .cfg_csi_rate = rtw_bf_cfg_csi_rate, -- .adaptivity_init = rtw8822b_adaptivity_init, -- .adaptivity = rtw8822b_adaptivity, - .fill_txdesc_checksum = rtw8822b_fill_txdesc_checksum, - - .coex_set_init = rtw8822b_coex_cfg_init, ---- a/rtw8822c.c -+++ b/rtw8822c.c -@@ -4442,37 +4442,6 @@ static void rtw8822c_pwr_track(struct rtw_dev *rtwdev) - dm_info->pwr_trk_triggered = false; - } - --static void rtw8822c_adaptivity_init(struct rtw_dev *rtwdev) --{ -- rtw_phy_set_edcca_th(rtwdev, 0x7f, 0x7f); -- /* mac edcca state setting */ -- rtw_write32_mask(rtwdev, REG_TX_PTCL_CTRL, BIT_DIS_EDCCA, 0); -- rtw_write32_mask(rtwdev, REG_RD_CTRL, BIT_EDCCA_MSK_CNTDOWN_EN, 1); -- /* edcca decistion opt */ -- rtw_write32_mask(rtwdev, REG_EDCCA_DECISION, BIT_EDCCA_OPTION, 0); --} -- --static void rtw8822c_adaptivity(struct rtw_dev *rtwdev) --{ -- struct rtw_dm_info *dm_info = &rtwdev->dm_info; -- s8 l2h, h2l; -- u8 igi; -- -- igi = dm_info->igi_history[0]; -- if (dm_info->edcca_mode == RTW_EDCCA_NORMAL) { -- l2h = max_t(s8, igi + EDCCA_IGI_L2H_DIFF, EDCCA_TH_L2H_LB); -- h2l = l2h - EDCCA_L2H_H2L_DIFF_NORMAL; -- } else { -- if (igi < dm_info->l2h_th_ini - EDCCA_ADC_BACKOFF) -- l2h = igi + EDCCA_ADC_BACKOFF; -- else -- l2h = dm_info->l2h_th_ini; -- h2l = l2h - EDCCA_L2H_H2L_DIFF; -- } -- -- rtw_phy_set_edcca_th(rtwdev, l2h, h2l); --} -- - static void rtw8822c_fill_txdesc_checksum(struct rtw_dev *rtwdev, - struct rtw_tx_pkt_info *pkt_info, - u8 *txdesc) -@@ -4903,8 +4872,6 @@ static struct rtw_chip_ops rtw8822c_ops = { - .cfg_csi_rate = rtw_bf_cfg_csi_rate, - .cfo_init = rtw8822c_cfo_init, - .cfo_track = rtw8822c_cfo_track, -- .adaptivity_init = rtw8822c_adaptivity_init, -- .adaptivity = rtw8822c_adaptivity, - .fill_txdesc_checksum = rtw8822c_fill_txdesc_checksum, - - .coex_set_init = rtw8822c_coex_cfg_init, diff --git a/package/kernel/rtw88-usb/patches/002-drop-rf_lock.patch b/package/kernel/rtw88-usb/patches/002-drop-rf_lock.patch deleted file mode 100644 index 5255721af..000000000 --- a/package/kernel/rtw88-usb/patches/002-drop-rf_lock.patch +++ /dev/null @@ -1,124 +0,0 @@ -From d57ca103e54e2b3eea7e2603548c58bcc4155541 Mon Sep 17 00:00:00 2001 -From: Sascha Hauer -Date: Fri, 2 Dec 2022 09:12:16 +0100 -Subject: [PATCH] wifi: rtw88: Drop rf_lock - -The rtwdev->rf_lock spinlock protects the rf register accesses in -rtw_read_rf() and rtw_write_rf(). Most callers of these functions hold -rtwdev->mutex already with the exception of the callsites in the debugfs -code. The debugfs code doesn't justify an extra lock, so acquire the mutex -there as well before calling rf register accessors and drop the now -unnecessary spinlock. - -Signed-off-by: Sascha Hauer ---- - ---- a/debug.c -+++ b/debug.c -@@ -144,7 +144,9 @@ static int rtw_debugfs_get_rf_read(struct seq_file *m, void *v) - addr = debugfs_priv->rf_addr; - mask = debugfs_priv->rf_mask; - -+ mutex_lock(&rtwdev->mutex); - val = rtw_read_rf(rtwdev, path, addr, mask); -+ mutex_unlock(&rtwdev->mutex); - - seq_printf(m, "rf_read path:%d addr:0x%08x mask:0x%08x val=0x%08x\n", - path, addr, mask, val); -@@ -418,7 +420,9 @@ static ssize_t rtw_debugfs_set_rf_write(struct file *filp, - return count; - } - -+ mutex_lock(&rtwdev->mutex); - rtw_write_rf(rtwdev, path, addr, mask, val); -+ mutex_unlock(&rtwdev->mutex); - rtw_dbg(rtwdev, RTW_DBG_DEBUGFS, - "write_rf path:%d addr:0x%08x mask:0x%08x, val:0x%08x\n", - path, addr, mask, val); -@@ -523,6 +527,8 @@ static int rtw_debug_get_rf_dump(struct seq_file *m, void *v) - u32 addr, offset, data; - u8 path; - -+ mutex_lock(&rtwdev->mutex); -+ - for (path = 0; path < rtwdev->hal.rf_path_num; path++) { - seq_printf(m, "RF path:%d\n", path); - for (addr = 0; addr < 0x100; addr += 4) { -@@ -537,6 +543,8 @@ static int rtw_debug_get_rf_dump(struct seq_file *m, void *v) - seq_puts(m, "\n"); - } - -+ mutex_unlock(&rtwdev->mutex); -+ - return 0; - } - -@@ -1027,6 +1035,8 @@ static void dump_gapk_status(struct rtw_dev *rtwdev, struct seq_file *m) - dm_info->dm_flags & BIT(RTW_DM_CAP_TXGAPK) ? '-' : '+', - rtw_dm_cap_strs[RTW_DM_CAP_TXGAPK]); - -+ mutex_lock(&rtwdev->mutex); -+ - for (path = 0; path < rtwdev->hal.rf_path_num; path++) { - val = rtw_read_rf(rtwdev, path, RF_GAINTX, RFREG_MASK); - seq_printf(m, "path %d:\n0x%x = 0x%x\n", path, RF_GAINTX, val); -@@ -1036,6 +1046,7 @@ static void dump_gapk_status(struct rtw_dev *rtwdev, struct seq_file *m) - txgapk->rf3f_fs[path][i], i); - seq_puts(m, "\n"); - } -+ mutex_unlock(&rtwdev->mutex); - } - - static int rtw_debugfs_get_dm_cap(struct seq_file *m, void *v) ---- a/hci.h -+++ b/hci.h -@@ -166,12 +166,11 @@ static inline u32 - rtw_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, - u32 addr, u32 mask) - { -- unsigned long flags; - u32 val; - -- spin_lock_irqsave(&rtwdev->rf_lock, flags); -+ lockdep_assert_held(&rtwdev->mutex); -+ - val = rtwdev->chip->ops->read_rf(rtwdev, rf_path, addr, mask); -- spin_unlock_irqrestore(&rtwdev->rf_lock, flags); - - return val; - } -@@ -180,11 +179,9 @@ static inline void - rtw_write_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, - u32 addr, u32 mask, u32 data) - { -- unsigned long flags; -+ lockdep_assert_held(&rtwdev->mutex); - -- spin_lock_irqsave(&rtwdev->rf_lock, flags); - rtwdev->chip->ops->write_rf(rtwdev, rf_path, addr, mask, data); -- spin_unlock_irqrestore(&rtwdev->rf_lock, flags); - } - - static inline u32 ---- a/main.c -+++ b/main.c -@@ -1994,7 +1994,6 @@ int rtw_core_init(struct rtw_dev *rtwdev) - skb_queue_head_init(&rtwdev->coex.queue); - skb_queue_head_init(&rtwdev->tx_report.queue); - -- spin_lock_init(&rtwdev->rf_lock); - spin_lock_init(&rtwdev->h2c.lock); - spin_lock_init(&rtwdev->txq_lock); - spin_lock_init(&rtwdev->tx_report.q_lock); ---- a/main.h -+++ b/main.h -@@ -1994,9 +1994,6 @@ struct rtw_dev { - /* ensures exclusive access from mac80211 callbacks */ - struct mutex mutex; - -- /* read/write rf register */ -- spinlock_t rf_lock; -- - /* watch dog every 2 sec */ - struct delayed_work watch_dog_work; - u32 watch_dog_cnt; diff --git a/package/kernel/rtw88-usb/patches/003-drop-h2c-lock.patch b/package/kernel/rtw88-usb/patches/003-drop-h2c-lock.patch deleted file mode 100644 index d28cbfd8f..000000000 --- a/package/kernel/rtw88-usb/patches/003-drop-h2c-lock.patch +++ /dev/null @@ -1,103 +0,0 @@ -From 1e2701f4079a7906ff3fb43a315925d303e289d8 Mon Sep 17 00:00:00 2001 -From: Sascha Hauer -Date: Fri, 2 Dec 2022 09:12:17 +0100 -Subject: [PATCH] wifi: rtw88: Drop h2c.lock - -The h2c.lock spinlock is used in rtw_fw_send_h2c_command() and -rtw_fw_send_h2c_packet(). Most callers call this with rtwdev->mutex -held, except from one callsite in the debugfs code. The debugfs code -alone doesn't justify the extra lock, so acquire rtwdev->mutex in -debugfs and drop the now unnecessary spinlock. - -Signed-off-by: Sascha Hauer ---- - ---- a/debug.c -+++ b/debug.c -@@ -396,7 +396,9 @@ static ssize_t rtw_debugfs_set_h2c(struct file *filp, - return -EINVAL; - } - -+ mutex_lock(&rtwdev->mutex); - rtw_fw_h2c_cmd_dbg(rtwdev, param); -+ mutex_unlock(&rtwdev->mutex); - - return count; - } ---- a/fw.c -+++ b/fw.c -@@ -320,7 +320,7 @@ static void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev, - h2c[3], h2c[2], h2c[1], h2c[0], - h2c[7], h2c[6], h2c[5], h2c[4]); - -- spin_lock(&rtwdev->h2c.lock); -+ lockdep_assert_held(&rtwdev->mutex); - - box = rtwdev->h2c.last_box_num; - switch (box) { -@@ -342,7 +342,7 @@ static void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev, - break; - default: - WARN(1, "invalid h2c mail box number\n"); -- goto out; -+ return; - } - - ret = read_poll_timeout_atomic(rtw_read8, box_state, -@@ -351,7 +351,7 @@ static void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev, - - if (ret) { - rtw_err(rtwdev, "failed to send h2c command\n"); -- goto out; -+ return; - } - - for (idx = 0; idx < 4; idx++) -@@ -361,9 +361,6 @@ static void rtw_fw_send_h2c_command(struct rtw_dev *rtwdev, - - if (++rtwdev->h2c.last_box_num >= 4) - rtwdev->h2c.last_box_num = 0; -- --out: -- spin_unlock(&rtwdev->h2c.lock); - } - - void rtw_fw_h2c_cmd_dbg(struct rtw_dev *rtwdev, u8 *h2c) -@@ -375,15 +372,13 @@ static void rtw_fw_send_h2c_packet(struct rtw_dev *rtwdev, u8 *h2c_pkt) - { - int ret; - -- spin_lock(&rtwdev->h2c.lock); -+ lockdep_assert_held(&rtwdev->mutex); - - FW_OFFLOAD_H2C_SET_SEQ_NUM(h2c_pkt, rtwdev->h2c.seq); - ret = rtw_hci_write_data_h2c(rtwdev, h2c_pkt, H2C_PKT_SIZE); - if (ret) - rtw_err(rtwdev, "failed to send h2c packet\n"); - rtwdev->h2c.seq++; -- -- spin_unlock(&rtwdev->h2c.lock); - } - - void ---- a/main.c -+++ b/main.c -@@ -1994,7 +1994,6 @@ int rtw_core_init(struct rtw_dev *rtwdev) - skb_queue_head_init(&rtwdev->coex.queue); - skb_queue_head_init(&rtwdev->tx_report.queue); - -- spin_lock_init(&rtwdev->h2c.lock); - spin_lock_init(&rtwdev->txq_lock); - spin_lock_init(&rtwdev->tx_report.q_lock); - ---- a/main.h -+++ b/main.h -@@ -2018,8 +2018,6 @@ struct rtw_dev { - struct { - /* incicate the mail box to use with fw */ - u8 last_box_num; -- /* protect to send h2c to fw */ -- spinlock_t lock; - u32 seq; - } h2c; - diff --git a/package/kernel/rtw88-usb/patches/004-drop-coex-mutex.patch b/package/kernel/rtw88-usb/patches/004-drop-coex-mutex.patch deleted file mode 100644 index cd3af524a..000000000 --- a/package/kernel/rtw88-usb/patches/004-drop-coex-mutex.patch +++ /dev/null @@ -1,74 +0,0 @@ -From 8647f7f0b9080bc2d2f6e02524782f2f02f159bc Mon Sep 17 00:00:00 2001 -From: Sascha Hauer -Date: Fri, 2 Dec 2022 09:12:18 +0100 -Subject: [PATCH] wifi: rtw88: Drop coex mutex - -coex->mutex is used in rtw_coex_info_request() only. Most callers of this -function hold rtwdev->mutex already, except for one callsite in the -debugfs code. The debugfs code alone doesn't justify the extra lock, so -acquire rtwdev->mutex there as well and drop the now unnecessary -spinlock. - -Signed-off-by: Sascha Hauer ---- - ---- a/coex.c -+++ b/coex.c -@@ -633,7 +633,7 @@ static struct sk_buff *rtw_coex_info_request(struct rtw_dev *rtwdev, - struct rtw_coex *coex = &rtwdev->coex; - struct sk_buff *skb_resp = NULL; - -- mutex_lock(&coex->mutex); -+ lockdep_assert_held(&rtwdev->mutex); - - rtw_fw_query_bt_mp_info(rtwdev, req); - -@@ -650,7 +650,6 @@ static struct sk_buff *rtw_coex_info_request(struct rtw_dev *rtwdev, - } - - out: -- mutex_unlock(&coex->mutex); - return skb_resp; - } - ---- a/debug.c -+++ b/debug.c -@@ -842,7 +842,9 @@ static int rtw_debugfs_get_coex_info(struct seq_file *m, void *v) - struct rtw_debugfs_priv *debugfs_priv = m->private; - struct rtw_dev *rtwdev = debugfs_priv->rtwdev; - -+ mutex_lock(&rtwdev->mutex); - rtw_coex_display_coex_info(rtwdev, m); -+ mutex_unlock(&rtwdev->mutex); - - return 0; - } ---- a/main.c -+++ b/main.c -@@ -1998,7 +1998,6 @@ int rtw_core_init(struct rtw_dev *rtwdev) - spin_lock_init(&rtwdev->tx_report.q_lock); - - mutex_init(&rtwdev->mutex); -- mutex_init(&rtwdev->coex.mutex); - mutex_init(&rtwdev->hal.tx_power_mutex); - - init_waitqueue_head(&rtwdev->coex.wait); -@@ -2066,7 +2065,6 @@ void rtw_core_deinit(struct rtw_dev *rtwdev) - } - - mutex_destroy(&rtwdev->mutex); -- mutex_destroy(&rtwdev->coex.mutex); - mutex_destroy(&rtwdev->hal.tx_power_mutex); - } - EXPORT_SYMBOL(rtw_core_deinit); ---- a/main.h -+++ b/main.h -@@ -1507,8 +1507,6 @@ struct rtw_coex_stat { - }; - - struct rtw_coex { -- /* protects coex info request section */ -- struct mutex mutex; - struct sk_buff_head queue; - wait_queue_head_t wait; - diff --git a/package/kernel/rtw88-usb/patches/005-iterate-over-vif-sta-list-non-atomically.patch b/package/kernel/rtw88-usb/patches/005-iterate-over-vif-sta-list-non-atomically.patch deleted file mode 100644 index 87369f827..000000000 --- a/package/kernel/rtw88-usb/patches/005-iterate-over-vif-sta-list-non-atomically.patch +++ /dev/null @@ -1,196 +0,0 @@ -From 78d5bf925f30bf9f79a69ce77386902672defe68 Mon Sep 17 00:00:00 2001 -From: Sascha Hauer -Date: Fri, 2 Dec 2022 09:12:19 +0100 -Subject: [PATCH] wifi: rtw88: iterate over vif/sta list non-atomically - -The driver uses ieee80211_iterate_active_interfaces_atomic() -and ieee80211_iterate_stations_atomic() in several places and does -register accesses in the iterators. This doesn't cope with upcoming -USB support as registers can only be accessed non-atomically. - -Split these into a two stage process: First use the atomic iterator -functions to collect all active interfaces or stations on a list, then -iterate over the list non-atomically and call the iterator on each -entry. - -Signed-off-by: Sascha Hauer -Suggested-by: Ping-Ke shih ---- - ---- a/phy.c -+++ b/phy.c -@@ -300,7 +300,7 @@ static void rtw_phy_stat_rssi(struct rtw_dev *rtwdev) - - data.rtwdev = rtwdev; - data.min_rssi = U8_MAX; -- rtw_iterate_stas_atomic(rtwdev, rtw_phy_stat_rssi_iter, &data); -+ rtw_iterate_stas(rtwdev, rtw_phy_stat_rssi_iter, &data); - - dm_info->pre_min_rssi = dm_info->min_rssi; - dm_info->min_rssi = data.min_rssi; -@@ -544,7 +544,7 @@ static void rtw_phy_ra_info_update(struct rtw_dev *rtwdev) - if (rtwdev->watch_dog_cnt & 0x3) - return; - -- rtw_iterate_stas_atomic(rtwdev, rtw_phy_ra_info_update_iter, rtwdev); -+ rtw_iterate_stas(rtwdev, rtw_phy_ra_info_update_iter, rtwdev); - } - - static u32 rtw_phy_get_rrsr_mask(struct rtw_dev *rtwdev, u8 rate_idx) -@@ -597,7 +597,7 @@ static void rtw_phy_rrsr_update(struct rtw_dev *rtwdev) - struct rtw_dm_info *dm_info = &rtwdev->dm_info; - - dm_info->rrsr_mask_min = RRSR_RATE_ORDER_MAX; -- rtw_iterate_stas_atomic(rtwdev, rtw_phy_rrsr_mask_min_iter, rtwdev); -+ rtw_iterate_stas(rtwdev, rtw_phy_rrsr_mask_min_iter, rtwdev); - rtw_write32(rtwdev, REG_RRSR, dm_info->rrsr_val_init & dm_info->rrsr_mask_min); - } - ---- a/ps.c -+++ b/ps.c -@@ -58,7 +58,7 @@ int rtw_leave_ips(struct rtw_dev *rtwdev) - return ret; - } - -- rtw_iterate_vifs_atomic(rtwdev, rtw_restore_port_cfg_iter, rtwdev); -+ rtw_iterate_vifs(rtwdev, rtw_restore_port_cfg_iter, rtwdev); - - rtw_coex_ips_notify(rtwdev, COEX_IPS_LEAVE); - ---- a/util.c -+++ b/util.c -@@ -105,3 +105,106 @@ void rtw_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss) - *mcs = rate - DESC_RATEMCS0; - } - } -+ -+struct rtw_stas_entry { -+ struct list_head list; -+ struct ieee80211_sta *sta; -+}; -+ -+struct rtw_iter_stas_data { -+ struct rtw_dev *rtwdev; -+ struct list_head list; -+}; -+ -+static void rtw_collect_sta_iter(void *data, struct ieee80211_sta *sta) -+{ -+ struct rtw_iter_stas_data *iter_stas = data; -+ struct rtw_stas_entry *stas_entry; -+ -+ stas_entry = kmalloc(sizeof(*stas_entry), GFP_ATOMIC); -+ if (!stas_entry) -+ return; -+ -+ stas_entry->sta = sta; -+ list_add_tail(&stas_entry->list, &iter_stas->list); -+} -+ -+void rtw_iterate_stas(struct rtw_dev *rtwdev, -+ void (*iterator)(void *data, -+ struct ieee80211_sta *sta), -+ void *data) -+{ -+ struct rtw_iter_stas_data iter_data; -+ struct rtw_stas_entry *sta_entry, *tmp; -+ -+ /* &rtwdev->mutex makes sure no stations can be removed between -+ * collecting the stations and iterating over them. -+ */ -+ lockdep_assert_held(&rtwdev->mutex); -+ -+ iter_data.rtwdev = rtwdev; -+ INIT_LIST_HEAD(&iter_data.list); -+ -+ ieee80211_iterate_stations_atomic(rtwdev->hw, rtw_collect_sta_iter, -+ &iter_data); -+ -+ list_for_each_entry_safe(sta_entry, tmp, &iter_data.list, -+ list) { -+ list_del_init(&sta_entry->list); -+ iterator(data, sta_entry->sta); -+ kfree(sta_entry); -+ } -+} -+ -+struct rtw_vifs_entry { -+ struct list_head list; -+ struct ieee80211_vif *vif; -+ u8 mac[ETH_ALEN]; -+}; -+ -+struct rtw_iter_vifs_data { -+ struct rtw_dev *rtwdev; -+ struct list_head list; -+}; -+ -+void rtw_collect_vif_iter(void *data, u8 *mac, struct ieee80211_vif *vif) -+{ -+ struct rtw_iter_vifs_data *iter_stas = data; -+ struct rtw_vifs_entry *vifs_entry; -+ -+ vifs_entry = kmalloc(sizeof(*vifs_entry), GFP_ATOMIC); -+ if (!vifs_entry) -+ return; -+ -+ vifs_entry->vif = vif; -+ ether_addr_copy(vifs_entry->mac, mac); -+ list_add_tail(&vifs_entry->list, &iter_stas->list); -+} -+ -+void rtw_iterate_vifs(struct rtw_dev *rtwdev, -+ void (*iterator)(void *data, u8 *mac, -+ struct ieee80211_vif *vif), -+ void *data) -+{ -+ struct rtw_iter_vifs_data iter_data; -+ struct rtw_vifs_entry *vif_entry, *tmp; -+ -+ /* &rtwdev->mutex makes sure no interfaces can be removed between -+ * collecting the interfaces and iterating over them. -+ */ -+ lockdep_assert_held(&rtwdev->mutex); -+ -+ iter_data.rtwdev = rtwdev; -+ INIT_LIST_HEAD(&iter_data.list); -+ -+ ieee80211_iterate_active_interfaces_atomic(rtwdev->hw, -+ IEEE80211_IFACE_ITER_NORMAL, -+ rtw_collect_vif_iter, &iter_data); -+ -+ list_for_each_entry_safe(vif_entry, tmp, &iter_data.list, -+ list) { -+ list_del_init(&vif_entry->list); -+ iterator(data, vif_entry->mac, vif_entry->vif); -+ kfree(vif_entry); -+ } -+} ---- a/util.h -+++ b/util.h -@@ -7,9 +7,6 @@ - - struct rtw_dev; - --#define rtw_iterate_vifs(rtwdev, iterator, data) \ -- ieee80211_iterate_active_interfaces(rtwdev->hw, \ -- IEEE80211_IFACE_ITER_NORMAL, iterator, data) - #define rtw_iterate_vifs_atomic(rtwdev, iterator, data) \ - ieee80211_iterate_active_interfaces_atomic(rtwdev->hw, \ - IEEE80211_IFACE_ITER_NORMAL, iterator, data) -@@ -20,6 +17,15 @@ struct rtw_dev; - #define rtw_iterate_keys_rcu(rtwdev, vif, iterator, data) \ - ieee80211_iter_keys_rcu((rtwdev)->hw, vif, iterator, data) - -+void rtw_iterate_vifs(struct rtw_dev *rtwdev, -+ void (*iterator)(void *data, u8 *mac, -+ struct ieee80211_vif *vif), -+ void *data); -+void rtw_iterate_stas(struct rtw_dev *rtwdev, -+ void (*iterator)(void *data, -+ struct ieee80211_sta *sta), -+ void *data); -+ - static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr) - { - __le16 fc = hdr->frame_control; diff --git a/package/kernel/rtw88-usb/patches/100-update-makefile.patch b/package/kernel/rtw88-usb/patches/100-update-makefile.patch deleted file mode 100644 index 170a6bc11..000000000 --- a/package/kernel/rtw88-usb/patches/100-update-makefile.patch +++ /dev/null @@ -1,25 +0,0 @@ ---- a/Makefile -+++ b/Makefile -@@ -2,22 +2,6 @@ - KERNELDIR ?= /lib/modules/$(shell uname -r)/build - PWD := $(shell pwd) - --CONFIG_RTW88_CORE=m --CONFIG_RTW88_PCI=m --CONFIG_RTW88_USB=m --CONFIG_RTW88_8822BE=m --CONFIG_RTW88_8822BU=m --CONFIG_RTW88_8822B=m --CONFIG_RTW88_8821CE=m --CONFIG_RTW88_8821CU=m --CONFIG_RTW88_8821C=m --CONFIG_RTW88_8822CE=m --CONFIG_RTW88_8822CU=m --CONFIG_RTW88_8822C=m --CONFIG_RTW88_8723DE=m --CONFIG_RTW88_8723DU=m --CONFIG_RTW88_8723D=m -- - ifneq ($(CONFIG_RTW88_8822BE),m) - ccflags-y += -DCONFIG_RTW88_8822BE=y - endif diff --git a/package/kernel/rtw88-usb/patches/101-wireless-5.14.patch b/package/kernel/rtw88-usb/patches/101-wireless-5.14.patch index ba8ebfcda..21e1e9f2f 100644 --- a/package/kernel/rtw88-usb/patches/101-wireless-5.14.patch +++ b/package/kernel/rtw88-usb/patches/101-wireless-5.14.patch @@ -1,14 +1,11 @@ --- a/mac80211.c +++ b/mac80211.c -@@ -614,7 +614,11 @@ static void rtw_ops_sw_scan_complete(struct ieee80211_hw *hw, - +@@ -698,7 +698,7 @@ static void rtw_ops_sw_scan_complete(struct ieee80211_hw *hw, + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 18, 0) static void rtw_ops_mgd_prepare_tx(struct ieee80211_hw *hw, struct ieee80211_vif *vif, -+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 14, 0)) -+ struct ieee80211_prep_tx_info *info) -+#else +- #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)) ++ #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,14,0)) || defined(BUILD_OPENWRT) + struct ieee80211_prep_tx_info *info) + #else u16 duration) -+#endif - { - struct rtw_dev *rtwdev = hw->priv; - diff --git a/package/kernel/rtw88-usb/patches/102-disable-pcie.patch b/package/kernel/rtw88-usb/patches/102-disable-pcie.patch new file mode 100644 index 000000000..dad7e362f --- /dev/null +++ b/package/kernel/rtw88-usb/patches/102-disable-pcie.patch @@ -0,0 +1,56 @@ +--- a/Makefile ++++ b/Makefile +@@ -24,10 +24,6 @@ NO_SKIP_SIGN := y + endif + + EXTRA_CFLAGS += -O2 +-EXTRA_CFLAGS += -DCONFIG_RTW88_8822BE=1 +-EXTRA_CFLAGS += -DCONFIG_RTW88_8821CE=1 +-EXTRA_CFLAGS += -DCONFIG_RTW88_8822CE=1 +-EXTRA_CFLAGS += -DCONFIG_RTW88_8723DE=1 + #EXTRA_CFLAGS += -DCONFIG_RTW88_DEBUG=1 + #EXTRA_CFLAGS += -DCONFIG_RTW88_DEBUGFS=1 + #EXTRA_CFLAGS += -DCONFIG_RTW88_REGD_USER_REG_HINTS +@@ -54,42 +50,27 @@ rtw_core-objs += main.o \ + obj-m += rtw_8822b.o + rtw_8822b-objs := rtw8822b.o rtw8822b_table.o + +-obj-m += rtw_8822be.o +-rtw_8822be-objs := rtw8822be.o +- + obj-m += rtw88_8822bu.o + rtw88_8822bu-objs := rtw8822bu.o + + obj-m += rtw_8822c.o + rtw_8822c-objs := rtw8822c.o rtw8822c_table.o + +-obj-m += rtw_8822ce.o +-rtw_8822ce-objs := rtw8822ce.o +- + obj-m += rtw88_8822cu.o + rtw88_8822cu-objs := rtw8822cu.o + + obj-m += rtw_8723d.o + rtw_8723d-objs := rtw8723d.o rtw8723d_table.o + +-obj-m += rtw_8723de.o +-rtw_8723de-objs := rtw8723de.o +- + obj-m += rtw88_8723du.o + rtw88_8723du-objs := rtw8723du.o + + obj-m += rtw_8821c.o + rtw_8821c-objs := rtw8821c.o rtw8821c_table.o + +-obj-m += rtw_8821ce.o +-rtw_8821ce-objs := rtw8821ce.o +- + obj-m += rtw88_8821cu.o + rtw88_8821cu-objs := rtw8821cu.o + +-obj-m += rtw_pci.o +-rtw_pci-objs := pci.o +- + obj-m += rtw_usb.o + rtw_usb-objs := usb.o +