rtw88-usb: remove upstream patches

No functional changes.
This commit is contained in:
AmadeusGhost 2023-02-14 23:02:50 +08:00
parent 58e26ac817
commit 0973fa001a
9 changed files with 73 additions and 960 deletions

View File

@ -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

View File

@ -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,

View File

@ -1,124 +0,0 @@
From d57ca103e54e2b3eea7e2603548c58bcc4155541 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
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 <s.hauer@pengutronix.de>
---
--- 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;

View File

@ -1,103 +0,0 @@
From 1e2701f4079a7906ff3fb43a315925d303e289d8 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
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 <s.hauer@pengutronix.de>
---
--- 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;

View File

@ -1,74 +0,0 @@
From 8647f7f0b9080bc2d2f6e02524782f2f02f159bc Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
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 <s.hauer@pengutronix.de>
---
--- 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;

View File

@ -1,196 +0,0 @@
From 78d5bf925f30bf9f79a69ce77386902672defe68 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <s.hauer@pengutronix.de>
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 <s.hauer@pengutronix.de>
Suggested-by: Ping-Ke shih <pkshih@realtek.com>
---
--- 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;

View File

@ -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

View File

@ -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;

View File

@ -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