mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
Merge pull request #9519 from HiassofT/le13-kernel-6.12
linux (RPi): update to 6.12
This commit is contained in:
commit
18f088ca3c
@ -23,11 +23,11 @@ case "${LINUX}" in
|
||||
PKG_PATCH_DIRS="default rtlwifi/after-6.12"
|
||||
;;
|
||||
raspberrypi)
|
||||
PKG_VERSION="66aef6ce3557edd9d58d794e4a800c5be49ca0e7" # 6.6.60
|
||||
PKG_SHA256="6e9843b8954faa1e5195aaf3a76a43fcc2ddb6cd152f628605d0e2ce61f551ea"
|
||||
PKG_VERSION="521f2baed818c04981fd61b275c996a8ef03b833" # 6.12
|
||||
PKG_SHA256="7dc120ed828ab5d9adff848f699865c776c291f80af90f0d9b81d8905601a4a0"
|
||||
PKG_URL="https://github.com/raspberrypi/linux/archive/${PKG_VERSION}.tar.gz"
|
||||
PKG_SOURCE_NAME="linux-${LINUX}-${PKG_VERSION}.tar.gz"
|
||||
PKG_PATCH_DIRS="raspberrypi rtlwifi/6.9 rtlwifi/6.10 rtlwifi/6.11 rtlwifi/6.11.2 rtlwifi/6.12 rtlwifi/after-6.12"
|
||||
PKG_PATCH_DIRS="raspberrypi rtlwifi/after-6.12"
|
||||
;;
|
||||
*)
|
||||
PKG_VERSION="6.12"
|
||||
|
@ -1,49 +0,0 @@
|
||||
From 826beca0ce76876507372349da860a986078eacd Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Istv=C3=A1n=20V=C3=A1radi?= <ivaradi@varadiistvan.hu>
|
||||
Date: Tue, 13 Feb 2024 21:20:32 +0100
|
||||
Subject: [PATCH] media: anysee: accept read buffers of length 1 in
|
||||
anysee_master_xfer
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
anysee_master_xfer currently accepts read messages of length 2 only.
|
||||
However, several frontends, e.g. tda10023 send buffers of length 1,
|
||||
containing an 8-bit register number (see tda10023_readreg).
|
||||
These buffers are rejected currently, making many Anysee variants
|
||||
to not work. In these cases the "Unsupported Anysee version"
|
||||
message is logged.
|
||||
|
||||
This patch alters the function to accept buffers of a length of 1 too.
|
||||
|
||||
Signed-off-by: István Váradi <ivaradi@varadiistvan.hu>
|
||||
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
||||
[hverkuil: add spaces around '<', fix typo in 'sevaral']
|
||||
---
|
||||
drivers/media/usb/dvb-usb-v2/anysee.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/media/usb/dvb-usb-v2/anysee.c b/drivers/media/usb/dvb-usb-v2/anysee.c
|
||||
index a1235d0cce92..8699846eb416 100644
|
||||
--- a/drivers/media/usb/dvb-usb-v2/anysee.c
|
||||
+++ b/drivers/media/usb/dvb-usb-v2/anysee.c
|
||||
@@ -202,14 +202,14 @@ static int anysee_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msg,
|
||||
|
||||
while (i < num) {
|
||||
if (num > i + 1 && (msg[i+1].flags & I2C_M_RD)) {
|
||||
- if (msg[i].len != 2 || msg[i + 1].len > 60) {
|
||||
+ if (msg[i].len < 1 || msg[i].len > 2 || msg[i + 1].len > 60) {
|
||||
ret = -EOPNOTSUPP;
|
||||
break;
|
||||
}
|
||||
buf[0] = CMD_I2C_READ;
|
||||
buf[1] = (msg[i].addr << 1) | 0x01;
|
||||
buf[2] = msg[i].buf[0];
|
||||
- buf[3] = msg[i].buf[1];
|
||||
+ buf[3] = (msg[i].len < 2) ? 0 : msg[i].buf[1];
|
||||
buf[4] = msg[i].len-1;
|
||||
buf[5] = msg[i+1].len;
|
||||
ret = anysee_ctrl_msg(d, buf, 6, msg[i+1].buf,
|
||||
--
|
||||
2.34.1
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,683 +0,0 @@
|
||||
From 7335e62025a7cfe186aab54609b23c4f24d838e0 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 25 Apr 2024 21:15:20 +0300
|
||||
Subject: [PATCH 06/07] 6.10: wifi: rtlwifi: Adjust rtl8192d-common
|
||||
for USB
|
||||
|
||||
A few of the shared functions need small changes for the USB driver:
|
||||
- firmware loading
|
||||
- efuse reading
|
||||
- rate mask updating
|
||||
- rf register reading
|
||||
- initial gain for scanning
|
||||
|
||||
Also, add a few macros to wifi.h and initialise rtlhal.interfaceindex
|
||||
for USB devices.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://msgid.link/28100330-f421-4b85-b41b-f1045380cef2@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/efuse.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/efuse.h | 2 +-
|
||||
.../realtek/rtlwifi/rtl8192d/fw_common.c | 23 ++-
|
||||
.../realtek/rtlwifi/rtl8192d/fw_common.h | 10 ++
|
||||
.../realtek/rtlwifi/rtl8192d/hw_common.c | 61 +++++--
|
||||
.../realtek/rtlwifi/rtl8192d/phy_common.c | 22 ++-
|
||||
.../realtek/rtlwifi/rtl8192d/phy_common.h | 24 +++
|
||||
.../wireless/realtek/rtlwifi/rtl8192d/reg.h | 160 +++++++++++++++---
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.c | 3 +
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 5 +
|
||||
10 files changed, 268 insertions(+), 44 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/efuse.c b/drivers/net/wireless/realtek/rtlwifi/efuse.c
|
||||
index c1fbc29d5ca1..82cf5fb5175f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/efuse.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/efuse.c
|
||||
@@ -1211,7 +1211,7 @@ static u8 efuse_calculate_word_cnts(u8 word_en)
|
||||
}
|
||||
|
||||
int rtl_get_hwinfo(struct ieee80211_hw *hw, struct rtl_priv *rtlpriv,
|
||||
- int max_size, u8 *hwinfo, int *params)
|
||||
+ int max_size, u8 *hwinfo, const int *params)
|
||||
{
|
||||
struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
|
||||
struct rtl_pci_priv *rtlpcipriv = rtl_pcipriv(hw);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/efuse.h b/drivers/net/wireless/realtek/rtlwifi/efuse.h
|
||||
index 4821625ad1e5..e250ffb0f4b2 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/efuse.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/efuse.h
|
||||
@@ -89,7 +89,7 @@ void efuse_force_write_vendor_id(struct ieee80211_hw *hw);
|
||||
void efuse_re_pg_section(struct ieee80211_hw *hw, u8 section_idx);
|
||||
void efuse_power_switch(struct ieee80211_hw *hw, u8 write, u8 pwrstate);
|
||||
int rtl_get_hwinfo(struct ieee80211_hw *hw, struct rtl_priv *rtlpriv,
|
||||
- int max_size, u8 *hwinfo, int *params);
|
||||
+ int max_size, u8 *hwinfo, const int *params);
|
||||
void rtl_fill_dummy(u8 *pfwbuf, u32 *pfwlen);
|
||||
void rtl_fw_page_write(struct ieee80211_hw *hw, u32 page, u8 *buffer,
|
||||
u32 size);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c
|
||||
index ecdbe3cd5161..aa54dbde6ea8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.c
|
||||
@@ -98,24 +98,45 @@ int rtl92d_fw_free_to_go(struct ieee80211_hw *hw)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl92d_fw_free_to_go);
|
||||
|
||||
+#define RTL_USB_DELAY_FACTOR 60
|
||||
+
|
||||
void rtl92d_firmware_selfreset(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
u8 u1b_tmp;
|
||||
u8 delay = 100;
|
||||
|
||||
+ if (rtlhal->interface == INTF_USB) {
|
||||
+ delay *= RTL_USB_DELAY_FACTOR;
|
||||
+
|
||||
+ rtl_write_byte(rtlpriv, REG_FSIMR, 0);
|
||||
+
|
||||
+ /* We need to disable other HRCV INT to influence 8051 reset. */
|
||||
+ rtl_write_byte(rtlpriv, REG_FWIMR, 0x20);
|
||||
+
|
||||
+ /* Close mask to prevent incorrect FW write operation. */
|
||||
+ rtl_write_byte(rtlpriv, REG_FTIMR, 0);
|
||||
+ }
|
||||
+
|
||||
/* Set (REG_HMETFR + 3) to 0x20 is reset 8051 */
|
||||
rtl_write_byte(rtlpriv, REG_HMETFR + 3, 0x20);
|
||||
|
||||
u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
|
||||
|
||||
- while (u1b_tmp & BIT(2)) {
|
||||
+ while (u1b_tmp & (FEN_CPUEN >> 8)) {
|
||||
delay--;
|
||||
if (delay == 0)
|
||||
break;
|
||||
udelay(50);
|
||||
u1b_tmp = rtl_read_byte(rtlpriv, REG_SYS_FUNC_EN + 1);
|
||||
}
|
||||
+
|
||||
+ if (rtlhal->interface == INTF_USB) {
|
||||
+ if ((u1b_tmp & (FEN_CPUEN >> 8)) && delay == 0)
|
||||
+ rtl_write_byte(rtlpriv, REG_FWIMR, 0);
|
||||
+ }
|
||||
+
|
||||
WARN_ONCE((delay <= 0), "rtl8192de: 8051 reset failed!\n");
|
||||
rtl_dbg(rtlpriv, COMP_FW, DBG_DMESG,
|
||||
"=====> 8051 reset success (%d)\n", delay);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h
|
||||
index 4e8e2b716f88..4b73e0bd4ac4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/fw_common.h
|
||||
@@ -25,6 +25,16 @@
|
||||
#define GET_FIRMWARE_HDR_SUB_VER(__fwhdr) \
|
||||
le32_get_bits(*(__le32 *)((__fwhdr) + 4), GENMASK(23, 16))
|
||||
|
||||
+#define RAID_MASK GENMASK(31, 28)
|
||||
+#define RATE_MASK_MASK GENMASK(27, 0)
|
||||
+#define SHORT_GI_MASK BIT(5)
|
||||
+#define MACID_MASK GENMASK(4, 0)
|
||||
+
|
||||
+struct rtl92d_rate_mask_h2c {
|
||||
+ __le32 rate_mask_and_raid;
|
||||
+ u8 macid_and_short_gi;
|
||||
+} __packed;
|
||||
+
|
||||
bool rtl92d_is_fw_downloaded(struct rtl_priv *rtlpriv);
|
||||
void rtl92d_enable_fw_download(struct ieee80211_hw *hw, bool enable);
|
||||
void rtl92d_write_fw(struct ieee80211_hw *hw,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
index 40aadb9c4609..920bfb4eaaef 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
@@ -618,9 +618,14 @@ static void _rtl92de_read_macphymode_from_prom(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
- u8 macphy_crvalue = content[EEPROM_MAC_FUNCTION];
|
||||
+ bool is_single_mac = true;
|
||||
|
||||
- if (macphy_crvalue & BIT(3)) {
|
||||
+ if (rtlhal->interface == INTF_PCI)
|
||||
+ is_single_mac = !!(content[EEPROM_MAC_FUNCTION] & BIT(3));
|
||||
+ else if (rtlhal->interface == INTF_USB)
|
||||
+ is_single_mac = !(content[EEPROM_ENDPOINT_SETTING] & BIT(0));
|
||||
+
|
||||
+ if (is_single_mac) {
|
||||
rtlhal->macphymode = SINGLEMAC_SINGLEPHY;
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
"MacPhyMode SINGLEMAC_SINGLEPHY\n");
|
||||
@@ -659,6 +664,7 @@ static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "D-CUT!!!\n");
|
||||
break;
|
||||
case 0xCC33:
|
||||
+ case 0x33CC:
|
||||
chipver |= CHIP_92D_E_CUT;
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "E-CUT!!!\n");
|
||||
break;
|
||||
@@ -672,15 +678,27 @@ static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
|
||||
static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
|
||||
{
|
||||
+ static const int params_pci[] = {
|
||||
+ RTL8190_EEPROM_ID, EEPROM_VID, EEPROM_DID,
|
||||
+ EEPROM_SVID, EEPROM_SMID, EEPROM_MAC_ADDR_MAC0_92D,
|
||||
+ EEPROM_CHANNEL_PLAN, EEPROM_VERSION, EEPROM_CUSTOMER_ID,
|
||||
+ COUNTRY_CODE_WORLD_WIDE_13
|
||||
+ };
|
||||
+ static const int params_usb[] = {
|
||||
+ RTL8190_EEPROM_ID, EEPROM_VID_USB, EEPROM_PID_USB,
|
||||
+ EEPROM_VID_USB, EEPROM_PID_USB, EEPROM_MAC_ADDR_MAC0_92DU,
|
||||
+ EEPROM_CHANNEL_PLAN, EEPROM_VERSION, EEPROM_CUSTOMER_ID,
|
||||
+ COUNTRY_CODE_WORLD_WIDE_13
|
||||
+ };
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
- int params[] = {RTL8190_EEPROM_ID, EEPROM_VID, EEPROM_DID,
|
||||
- EEPROM_SVID, EEPROM_SMID, EEPROM_MAC_ADDR_MAC0_92D,
|
||||
- EEPROM_CHANNEL_PLAN, EEPROM_VERSION, EEPROM_CUSTOMER_ID,
|
||||
- COUNTRY_CODE_WORLD_WIDE_13};
|
||||
+ const int *params = params_pci;
|
||||
u8 *hwinfo;
|
||||
|
||||
+ if (rtlhal->interface == INTF_USB)
|
||||
+ params = params_usb;
|
||||
+
|
||||
hwinfo = kzalloc(HWSET_MAX_SIZE, GFP_KERNEL);
|
||||
if (!hwinfo)
|
||||
return;
|
||||
@@ -842,6 +860,7 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_phy *rtlphy = &rtlpriv->phy;
|
||||
struct rtl_sta_info *sta_entry = NULL;
|
||||
+ struct rtl92d_rate_mask_h2c rate_mask;
|
||||
enum wireless_mode wirelessmode;
|
||||
bool shortgi = false;
|
||||
u8 curshortgi_40mhz;
|
||||
@@ -849,7 +868,6 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
u8 curtxbw_40mhz;
|
||||
u32 ratr_bitmap;
|
||||
u8 ratr_index;
|
||||
- u32 value[2];
|
||||
u8 macid = 0;
|
||||
u8 mimo_ps;
|
||||
|
||||
@@ -965,12 +983,28 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
break;
|
||||
}
|
||||
|
||||
- value[0] = (ratr_bitmap & 0x0fffffff) | (ratr_index << 28);
|
||||
- value[1] = macid | (shortgi ? 0x20 : 0x00) | 0x80;
|
||||
+ le32p_replace_bits(&rate_mask.rate_mask_and_raid, ratr_bitmap, RATE_MASK_MASK);
|
||||
+ le32p_replace_bits(&rate_mask.rate_mask_and_raid, ratr_index, RAID_MASK);
|
||||
+ u8p_replace_bits(&rate_mask.macid_and_short_gi, macid, MACID_MASK);
|
||||
+ u8p_replace_bits(&rate_mask.macid_and_short_gi, shortgi, SHORT_GI_MASK);
|
||||
+ u8p_replace_bits(&rate_mask.macid_and_short_gi, 1, BIT(7));
|
||||
+
|
||||
rtl_dbg(rtlpriv, COMP_RATR, DBG_DMESG,
|
||||
- "ratr_bitmap :%x value0:%x value1:%x\n",
|
||||
- ratr_bitmap, value[0], value[1]);
|
||||
- rtl92d_fill_h2c_cmd(hw, H2C_RA_MASK, 5, (u8 *)value);
|
||||
+ "Rate_index:%x, ratr_val:%x, %5phC\n",
|
||||
+ ratr_index, ratr_bitmap, &rate_mask);
|
||||
+
|
||||
+ if (rtlhal->interface == INTF_PCI) {
|
||||
+ rtl92d_fill_h2c_cmd(hw, H2C_RA_MASK, sizeof(rate_mask),
|
||||
+ (u8 *)&rate_mask);
|
||||
+ } else {
|
||||
+ /* rtl92d_fill_h2c_cmd() does USB I/O and will result in a
|
||||
+ * "scheduled while atomic" if called directly
|
||||
+ */
|
||||
+ memcpy(rtlpriv->rate_mask, &rate_mask,
|
||||
+ sizeof(rtlpriv->rate_mask));
|
||||
+ schedule_work(&rtlpriv->works.fill_h2c_cmd);
|
||||
+ }
|
||||
+
|
||||
if (macid != 0)
|
||||
sta_entry->ratr_index = ratr_index;
|
||||
}
|
||||
@@ -1014,7 +1048,8 @@ bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
|
||||
bool actuallyset = false;
|
||||
unsigned long flag;
|
||||
|
||||
- if (rtlpci->being_init_adapter)
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_PCI &&
|
||||
+ rtlpci->being_init_adapter)
|
||||
return false;
|
||||
if (ppsc->swrf_processing)
|
||||
return false;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c
|
||||
index dbc8ea39d6fc..228c84ab5b90 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.c
|
||||
@@ -89,11 +89,11 @@ u32 rtl92d_phy_query_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
||||
rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), rfpath(%#x), bitmask(%#x)\n",
|
||||
regaddr, rfpath, bitmask);
|
||||
- spin_lock(&rtlpriv->locks.rf_lock);
|
||||
+ rtl92d_pci_lock(rtlpriv);
|
||||
original_value = _rtl92d_phy_rf_serial_read(hw, rfpath, regaddr);
|
||||
bitshift = calculate_bit_shift(bitmask);
|
||||
readback_value = (original_value & bitmask) >> bitshift;
|
||||
- spin_unlock(&rtlpriv->locks.rf_lock);
|
||||
+ rtl92d_pci_unlock(rtlpriv);
|
||||
rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), rfpath(%#x), bitmask(%#x), original_value(%#x)\n",
|
||||
regaddr, rfpath, bitmask, original_value);
|
||||
@@ -113,7 +113,7 @@ void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
||||
regaddr, bitmask, data, rfpath);
|
||||
if (bitmask == 0)
|
||||
return;
|
||||
- spin_lock(&rtlpriv->locks.rf_lock);
|
||||
+ rtl92d_pci_lock(rtlpriv);
|
||||
if (rtlphy->rf_mode != RF_OP_BY_FW) {
|
||||
if (bitmask != RFREG_OFFSET_MASK) {
|
||||
original_value = _rtl92d_phy_rf_serial_read(hw,
|
||||
@@ -125,7 +125,7 @@ void rtl92d_phy_set_rf_reg(struct ieee80211_hw *hw, enum radio_path rfpath,
|
||||
}
|
||||
_rtl92d_phy_rf_serial_write(hw, rfpath, regaddr, data);
|
||||
}
|
||||
- spin_unlock(&rtlpriv->locks.rf_lock);
|
||||
+ rtl92d_pci_unlock(rtlpriv);
|
||||
rtl_dbg(rtlpriv, COMP_RF, DBG_TRACE,
|
||||
"regaddr(%#x), bitmask(%#x), data(%#x), rfpath(%#x)\n",
|
||||
regaddr, bitmask, data, rfpath);
|
||||
@@ -650,6 +650,8 @@ static void rtl92d_phy_set_io(struct ieee80211_hw *hw)
|
||||
case IO_CMD_PAUSE_DM_BY_SCAN:
|
||||
rtlphy->initgain_backup.xaagccore1 = de_digtable->cur_igvalue;
|
||||
de_digtable->cur_igvalue = 0x37;
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_USB)
|
||||
+ de_digtable->cur_igvalue = 0x17;
|
||||
rtl92d_dm_write_dig(hw);
|
||||
break;
|
||||
default:
|
||||
@@ -710,22 +712,28 @@ void rtl92d_phy_config_macphymode(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
u8 offset = REG_MAC_PHY_CTRL_NORMAL;
|
||||
+ u8 phy_ctrl = 0xf0;
|
||||
+
|
||||
+ if (rtlhal->interface == INTF_USB) {
|
||||
+ phy_ctrl = rtl_read_byte(rtlpriv, offset);
|
||||
+ phy_ctrl &= ~(BIT(0) | BIT(1) | BIT(2));
|
||||
+ }
|
||||
|
||||
switch (rtlhal->macphymode) {
|
||||
case DUALMAC_DUALPHY:
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
"MacPhyMode: DUALMAC_DUALPHY\n");
|
||||
- rtl_write_byte(rtlpriv, offset, 0xF3);
|
||||
+ rtl_write_byte(rtlpriv, offset, phy_ctrl | BIT(0) | BIT(1));
|
||||
break;
|
||||
case SINGLEMAC_SINGLEPHY:
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
"MacPhyMode: SINGLEMAC_SINGLEPHY\n");
|
||||
- rtl_write_byte(rtlpriv, offset, 0xF4);
|
||||
+ rtl_write_byte(rtlpriv, offset, phy_ctrl | BIT(2));
|
||||
break;
|
||||
case DUALMAC_SINGLEPHY:
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
"MacPhyMode: DUALMAC_SINGLEPHY\n");
|
||||
- rtl_write_byte(rtlpriv, offset, 0xF1);
|
||||
+ rtl_write_byte(rtlpriv, offset, phy_ctrl | BIT(0));
|
||||
break;
|
||||
}
|
||||
}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h
|
||||
index f9b5d0d3a7e6..0f794557af47 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/phy_common.h
|
||||
@@ -32,6 +32,9 @@ static inline void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_USB)
|
||||
+ return;
|
||||
+
|
||||
if (rtlpriv->rtlhal.interfaceindex == 1)
|
||||
spin_lock_irqsave(&rtlpriv->locks.cck_and_rw_pagea_lock, *flag);
|
||||
}
|
||||
@@ -41,6 +44,9 @@ static inline void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_USB)
|
||||
+ return;
|
||||
+
|
||||
if (rtlpriv->rtlhal.interfaceindex == 1)
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.cck_and_rw_pagea_lock,
|
||||
*flag);
|
||||
@@ -84,4 +90,22 @@ void rtl92d_acquire_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
|
||||
void rtl92d_release_cckandrw_pagea_ctl(struct ieee80211_hw *hw,
|
||||
unsigned long *flag);
|
||||
|
||||
+/* Without these helpers and the declarations sparse warns about
|
||||
+ * context imbalance.
|
||||
+ */
|
||||
+static inline void rtl92d_pci_lock(struct rtl_priv *rtlpriv)
|
||||
+{
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_PCI)
|
||||
+ spin_lock(&rtlpriv->locks.rf_lock);
|
||||
+}
|
||||
+
|
||||
+static inline void rtl92d_pci_unlock(struct rtl_priv *rtlpriv)
|
||||
+{
|
||||
+ if (rtlpriv->rtlhal.interface == INTF_PCI)
|
||||
+ spin_unlock(&rtlpriv->locks.rf_lock);
|
||||
+}
|
||||
+
|
||||
+void rtl92d_pci_lock(struct rtl_priv *rtlpriv);
|
||||
+void rtl92d_pci_unlock(struct rtl_priv *rtlpriv);
|
||||
+
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h
|
||||
index 1dc52abe3d0d..b5b906b799cb 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/reg.h
|
||||
@@ -52,6 +52,8 @@
|
||||
#define REG_HMEBOX_EXT_3 0x008E
|
||||
#define SIZE_OF_REG_HMEBOX_EXT 2
|
||||
|
||||
+#define REG_EFUSE_ACCESS 0x00CF
|
||||
+
|
||||
#define REG_BIST_SCAN 0x00D0
|
||||
#define REG_BIST_RPT 0x00D4
|
||||
#define REG_BIST_ROM_RPT 0x00D8
|
||||
@@ -87,6 +89,7 @@
|
||||
#define REG_CPWM 0x012F
|
||||
#define REG_FWIMR 0x0130
|
||||
#define REG_FWISR 0x0134
|
||||
+#define REG_FTIMR 0x0138
|
||||
#define REG_PKTBUF_DBG_CTRL 0x0140
|
||||
#define REG_PKTBUF_DBG_DATA_L 0x0144
|
||||
#define REG_PKTBUF_DBG_DATA_H 0x0148
|
||||
@@ -199,6 +202,8 @@
|
||||
#define REG_POWER_STAGE1 0x04B4
|
||||
#define REG_POWER_STAGE2 0x04B8
|
||||
#define REG_PKT_LIFE_TIME 0x04C0
|
||||
+#define REG_PKT_VO_VI_LIFE_TIME 0x04C0
|
||||
+#define REG_PKT_BE_BK_LIFE_TIME 0x04C2
|
||||
#define REG_STBC_SETTING 0x04C4
|
||||
#define REG_PROT_MODE_CTRL 0x04C8
|
||||
#define REG_MAX_AGGR_NUM 0x04CA
|
||||
@@ -235,6 +240,7 @@
|
||||
#define REG_RD_NAV_NXT 0x0544
|
||||
#define REG_NAV_PROT_LEN 0x0546
|
||||
#define REG_BCN_CTRL 0x0550
|
||||
+#define REG_BCN_CTRL_1 0x0551
|
||||
#define REG_MBID_NUM 0x0552
|
||||
#define REG_DUAL_TSF_RST 0x0553
|
||||
#define REG_BCN_INTERVAL 0x0554
|
||||
@@ -321,6 +327,8 @@
|
||||
#define REG_BT_COEX_TABLE 0x06C0
|
||||
#define REG_WMAC_RESP_TXINFO 0x06D8
|
||||
|
||||
+#define REG_USB_Queue_Select_MAC0 0xFE44
|
||||
+#define REG_USB_Queue_Select_MAC1 0xFE47
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
/* Redifine 8192C register definition for compatibility */
|
||||
@@ -357,27 +365,27 @@
|
||||
#define RRSR_RSC_UPSUBCHNL 0x400000
|
||||
#define RRSR_RSC_LOWSUBCHNL 0x200000
|
||||
#define RRSR_SHORT 0x800000
|
||||
-#define RRSR_1M BIT0
|
||||
-#define RRSR_2M BIT1
|
||||
-#define RRSR_5_5M BIT2
|
||||
-#define RRSR_11M BIT3
|
||||
-#define RRSR_6M BIT4
|
||||
-#define RRSR_9M BIT5
|
||||
-#define RRSR_12M BIT6
|
||||
-#define RRSR_18M BIT7
|
||||
-#define RRSR_24M BIT8
|
||||
-#define RRSR_36M BIT9
|
||||
-#define RRSR_48M BIT10
|
||||
-#define RRSR_54M BIT11
|
||||
-#define RRSR_MCS0 BIT12
|
||||
-#define RRSR_MCS1 BIT13
|
||||
-#define RRSR_MCS2 BIT14
|
||||
-#define RRSR_MCS3 BIT15
|
||||
-#define RRSR_MCS4 BIT16
|
||||
-#define RRSR_MCS5 BIT17
|
||||
-#define RRSR_MCS6 BIT18
|
||||
-#define RRSR_MCS7 BIT19
|
||||
-#define BRSR_ACKSHORTPMB BIT23
|
||||
+#define RRSR_1M BIT(0)
|
||||
+#define RRSR_2M BIT(1)
|
||||
+#define RRSR_5_5M BIT(2)
|
||||
+#define RRSR_11M BIT(3)
|
||||
+#define RRSR_6M BIT(4)
|
||||
+#define RRSR_9M BIT(5)
|
||||
+#define RRSR_12M BIT(6)
|
||||
+#define RRSR_18M BIT(7)
|
||||
+#define RRSR_24M BIT(8)
|
||||
+#define RRSR_36M BIT(9)
|
||||
+#define RRSR_48M BIT(10)
|
||||
+#define RRSR_54M BIT(11)
|
||||
+#define RRSR_MCS0 BIT(12)
|
||||
+#define RRSR_MCS1 BIT(13)
|
||||
+#define RRSR_MCS2 BIT(14)
|
||||
+#define RRSR_MCS3 BIT(15)
|
||||
+#define RRSR_MCS4 BIT(16)
|
||||
+#define RRSR_MCS5 BIT(17)
|
||||
+#define RRSR_MCS6 BIT(18)
|
||||
+#define RRSR_MCS7 BIT(19)
|
||||
+#define BRSR_ACKSHORTPMB BIT(23)
|
||||
|
||||
/* ----------------------------------------------------- */
|
||||
/* 8192C Rate Definition */
|
||||
@@ -602,7 +610,11 @@
|
||||
#define EEPROM_SVID 0x2C /* SE Vendor ID.E-F */
|
||||
#define EEPROM_SMID 0x2E /* SE PCI Subsystem ID. 10-11 */
|
||||
|
||||
+#define EEPROM_VID_USB 0xC
|
||||
+#define EEPROM_PID_USB 0xE
|
||||
+#define EEPROM_ENDPOINT_SETTING 0x10
|
||||
#define EEPROM_MAC_ADDR 0x16 /* SEMAC Address. 12-17 */
|
||||
+#define EEPROM_MAC_ADDR_MAC0_92DU 0x19
|
||||
#define EEPROM_MAC_ADDR_MAC0_92D 0x55
|
||||
#define EEPROM_MAC_ADDR_MAC1_92D 0x5B
|
||||
|
||||
@@ -917,6 +929,42 @@
|
||||
#define BD_HCI_SEL BIT(26)
|
||||
#define TYPE_ID BIT(27)
|
||||
|
||||
+#define HCI_TXDMA_EN BIT(0)
|
||||
+#define HCI_RXDMA_EN BIT(1)
|
||||
+#define TXDMA_EN BIT(2)
|
||||
+#define RXDMA_EN BIT(3)
|
||||
+#define PROTOCOL_EN BIT(4)
|
||||
+#define SCHEDULE_EN BIT(5)
|
||||
+#define MACTXEN BIT(6)
|
||||
+#define MACRXEN BIT(7)
|
||||
+#define ENSWBCN BIT(8)
|
||||
+#define ENSEC BIT(9)
|
||||
+
|
||||
+#define HQSEL_VOQ BIT(0)
|
||||
+#define HQSEL_VIQ BIT(1)
|
||||
+#define HQSEL_BEQ BIT(2)
|
||||
+#define HQSEL_BKQ BIT(3)
|
||||
+#define HQSEL_MGTQ BIT(4)
|
||||
+#define HQSEL_HIQ BIT(5)
|
||||
+
|
||||
+#define TXDMA_HIQ_MAP GENMASK(15, 14)
|
||||
+#define TXDMA_MGQ_MAP GENMASK(13, 12)
|
||||
+#define TXDMA_BKQ_MAP GENMASK(11, 10)
|
||||
+#define TXDMA_BEQ_MAP GENMASK(9, 8)
|
||||
+#define TXDMA_VIQ_MAP GENMASK(7, 6)
|
||||
+#define TXDMA_VOQ_MAP GENMASK(5, 4)
|
||||
+
|
||||
+#define QUEUE_LOW 1
|
||||
+#define QUEUE_NORMAL 2
|
||||
+#define QUEUE_HIGH 3
|
||||
+
|
||||
+#define HPQ_MASK GENMASK(7, 0)
|
||||
+#define LPQ_MASK GENMASK(15, 8)
|
||||
+#define PUBQ_MASK GENMASK(23, 16)
|
||||
+#define LD_RQPN BIT(31)
|
||||
+
|
||||
+#define DROP_DATA_EN BIT(9)
|
||||
+
|
||||
/* LLT_INIT */
|
||||
#define _LLT_NO_ACTIVE 0x0
|
||||
#define _LLT_WRITE_ACCESS 0x1
|
||||
@@ -931,6 +979,10 @@
|
||||
/* ----------------------------------------------------- */
|
||||
/* 0x0400h ~ 0x047Fh Protocol Configuration */
|
||||
/* ----------------------------------------------------- */
|
||||
+/* FWHW_TXQ_CTRL */
|
||||
+#define EN_AMPDU_RTY_NEW BIT(7)
|
||||
+#define EN_BCNQ_DL BIT(22)
|
||||
+
|
||||
#define RETRY_LIMIT_SHORT_SHIFT 8
|
||||
#define RETRY_LIMIT_LONG_SHIFT 0
|
||||
|
||||
@@ -944,6 +996,13 @@
|
||||
#define AC_PARAM_ECW_MIN_OFFSET 8
|
||||
#define AC_PARAM_AIFS_OFFSET 0
|
||||
|
||||
+/* REG_RD_CTRL */
|
||||
+#define DIS_EDCA_CNT_DWN BIT(11)
|
||||
+
|
||||
+/* REG_BCN_CTRL */
|
||||
+#define EN_BCN_FUNCTION BIT(3)
|
||||
+#define DIS_TSF_UDT BIT(4)
|
||||
+
|
||||
/* ACMHWCTRL */
|
||||
#define ACMHW_HWEN BIT(0)
|
||||
#define ACMHW_BEQEN BIT(1)
|
||||
@@ -1075,6 +1134,11 @@
|
||||
#define RCCK0_FACOUNTERLOWER 0xa5c
|
||||
#define RCCK0_FACOUNTERUPPER 0xa58
|
||||
|
||||
+#define RPDP_ANTA 0xb00
|
||||
+#define RCONFIG_ANTA 0xb68
|
||||
+#define RCONFIG_ANTB 0xb6c
|
||||
+#define RPDP_ANTB 0xb70
|
||||
+
|
||||
/* 6. PageC(0xC00) */
|
||||
#define ROFDM0_LSTF 0xc00
|
||||
|
||||
@@ -1128,6 +1192,7 @@
|
||||
#define ROFDM0_TXPSEUDONOISEWGT 0xce4
|
||||
#define ROFDM0_FRAMESYNC 0xcf0
|
||||
#define ROFDM0_DFSREPORT 0xcf4
|
||||
+#define ROFDM0_RXIQEXTANTA 0xca0
|
||||
#define ROFDM0_TXCOEFF1 0xca4
|
||||
#define ROFDM0_TXCOEFF2 0xca8
|
||||
#define ROFDM0_TXCOEFF3 0xcac
|
||||
@@ -1186,17 +1251,70 @@
|
||||
#define RTXAGC_B_MCS15_MCS12 0x868
|
||||
#define RTXAGC_B_CCK11_A_CCK2_11 0x86c
|
||||
|
||||
+#define RFPGA0_IQK 0xe28
|
||||
+#define RTX_IQK_TONE_A 0xe30
|
||||
+#define RRX_IQK_TONE_A 0xe34
|
||||
+#define RTX_IQK_PI_A 0xe38
|
||||
+#define RRX_IQK_PI_A 0xe3c
|
||||
+
|
||||
+#define RTX_IQK 0xe40
|
||||
+#define RRX_IQK 0xe44
|
||||
+#define RIQK_AGC_PTS 0xe48
|
||||
+#define RIQK_AGC_RSP 0xe4c
|
||||
+#define RTX_IQK_TONE_B 0xe50
|
||||
+#define RRX_IQK_TONE_B 0xe54
|
||||
+#define RTX_IQK_PI_B 0xe58
|
||||
+#define RRX_IQK_PI_B 0xe5c
|
||||
+#define RIQK_AGC_CONT 0xe60
|
||||
+
|
||||
+#define RBLUE_TOOTH 0xe6c
|
||||
+#define RRX_WAIT_CCA 0xe70
|
||||
+#define RTX_CCK_RFON 0xe74
|
||||
+#define RTX_CCK_BBON 0xe78
|
||||
+#define RTX_OFDM_RFON 0xe7c
|
||||
+#define RTX_OFDM_BBON 0xe80
|
||||
+#define RTX_TO_RX 0xe84
|
||||
+#define RTX_TO_TX 0xe88
|
||||
+#define RRX_CCK 0xe8c
|
||||
+
|
||||
+#define RTX_POWER_BEFORE_IQK_A 0xe94
|
||||
+#define RTX_POWER_AFTER_IQK_A 0xe9c
|
||||
+
|
||||
+#define RRX_POWER_BEFORE_IQK_A 0xea0
|
||||
+#define RRX_POWER_BEFORE_IQK_A_2 0xea4
|
||||
+#define RRX_POWER_AFTER_IQK_A 0xea8
|
||||
+#define RRX_POWER_AFTER_IQK_A_2 0xeac
|
||||
+
|
||||
+#define RTX_POWER_BEFORE_IQK_B 0xeb4
|
||||
+#define RTX_POWER_AFTER_IQK_B 0xebc
|
||||
+
|
||||
+#define RRX_POWER_BEFORE_IQK_B 0xec0
|
||||
+#define RRX_POWER_BEFORE_IQK_B_2 0xec4
|
||||
+#define RRX_POWER_AFTER_IQK_B 0xec8
|
||||
+#define RRX_POWER_AFTER_IQK_B_2 0xecc
|
||||
+
|
||||
+#define MASK_IQK_RESULT 0x03ff0000
|
||||
+
|
||||
+#define RRX_OFDM 0xed0
|
||||
+#define RRX_WAIT_RIFS 0xed4
|
||||
+#define RRX_TO_RX 0xed8
|
||||
+#define RSTANDBY 0xedc
|
||||
+#define RSLEEP 0xee0
|
||||
+#define RPMPD_ANAEN 0xeec
|
||||
+
|
||||
/* RL6052 Register definition */
|
||||
#define RF_AC 0x00
|
||||
|
||||
#define RF_IQADJ_G1 0x01
|
||||
#define RF_IQADJ_G2 0x02
|
||||
+#define RF_BS_PA_APSET_G1_G4 0x03
|
||||
#define RF_POW_TRSW 0x05
|
||||
|
||||
#define RF_GAIN_RX 0x06
|
||||
#define RF_GAIN_TX 0x07
|
||||
|
||||
#define RF_TXM_IDAC 0x08
|
||||
+#define RF_TXPA_AG 0x0B
|
||||
#define RF_BS_IQGEN 0x0F
|
||||
|
||||
#define RF_MODE1 0x10
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
index 6e8c87a2fae4..2ea72d9e3957 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
@@ -979,6 +979,9 @@ int rtl_usb_probe(struct usb_interface *intf,
|
||||
usb_priv->dev.intf = intf;
|
||||
usb_priv->dev.udev = udev;
|
||||
usb_set_intfdata(intf, hw);
|
||||
+ /* For dual MAC RTL8192DU, which has two interfaces. */
|
||||
+ rtlpriv->rtlhal.interfaceindex =
|
||||
+ intf->altsetting[0].desc.bInterfaceNumber;
|
||||
/* init cfg & intf_ops */
|
||||
rtlpriv->rtlhal.interface = INTF_USB;
|
||||
rtlpriv->cfg = rtl_hal_cfg;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 098db85e381c..4f1c21c130f4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -20,6 +20,7 @@
|
||||
#define MASKBYTE1 0xff00
|
||||
#define MASKBYTE2 0xff0000
|
||||
#define MASKBYTE3 0xff000000
|
||||
+#define MASKH3BYTES 0xffffff00
|
||||
#define MASKHWORD 0xffff0000
|
||||
#define MASKLWORD 0x0000ffff
|
||||
#define MASKDWORD 0xffffffff
|
||||
@@ -48,6 +49,10 @@
|
||||
#define MASK20BITS 0xfffff
|
||||
#define RFREG_OFFSET_MASK 0xfffff
|
||||
|
||||
+/* For dual MAC RTL8192DU */
|
||||
+#define MAC0_ACCESS_PHY1 0x4000
|
||||
+#define MAC1_ACCESS_PHY0 0x2000
|
||||
+
|
||||
#define RF_CHANGE_BY_INIT 0
|
||||
#define RF_CHANGE_BY_IPS BIT(28)
|
||||
#define RF_CHANGE_BY_PS BIT(29)
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,52 +0,0 @@
|
||||
From d34a7e456b723f5b5b11834abd39f46352d2b776 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 29 May 2024 20:19:47 +0300
|
||||
Subject: [PATCH 07/07] 6.10: wifi: rtlwifi: Ignore
|
||||
IEEE80211_CONF_CHANGE_RETRY_LIMITS
|
||||
|
||||
Since commit 0a44dfc07074 ("wifi: mac80211: simplify non-chanctx
|
||||
drivers") ieee80211_hw_config() is no longer called with changed = ~0.
|
||||
rtlwifi relied on ~0 in order to ignore the default retry limits of
|
||||
4/7, preferring 48/48 in station mode and 7/7 in AP/IBSS.
|
||||
|
||||
RTL8192DU has a lot of packet loss with the default limits from
|
||||
mac80211. Fix it by ignoring IEEE80211_CONF_CHANGE_RETRY_LIMITS
|
||||
completely, because it's the simplest solution.
|
||||
|
||||
Link: https://lore.kernel.org/linux-wireless/cedd13d7691f4692b2a2fa5a24d44a22@realtek.com/
|
||||
Cc: stable@vger.kernel.org # 6.9.x
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 15 ---------------
|
||||
1 file changed, 15 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index 2e60a6991ca1..42b7db12b1bd 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -633,21 +633,6 @@ static int rtl_op_config(struct ieee80211_hw *hw, u32 changed)
|
||||
}
|
||||
}
|
||||
|
||||
- if (changed & IEEE80211_CONF_CHANGE_RETRY_LIMITS) {
|
||||
- rtl_dbg(rtlpriv, COMP_MAC80211, DBG_LOUD,
|
||||
- "IEEE80211_CONF_CHANGE_RETRY_LIMITS %x\n",
|
||||
- hw->conf.long_frame_max_tx_count);
|
||||
- /* brought up everything changes (changed == ~0) indicates first
|
||||
- * open, so use our default value instead of that of wiphy.
|
||||
- */
|
||||
- if (changed != ~0) {
|
||||
- mac->retry_long = hw->conf.long_frame_max_tx_count;
|
||||
- mac->retry_short = hw->conf.long_frame_max_tx_count;
|
||||
- rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RETRY_LIMIT,
|
||||
- (u8 *)(&hw->conf.long_frame_max_tx_count));
|
||||
- }
|
||||
- }
|
||||
-
|
||||
if (changed & IEEE80211_CONF_CHANGE_CHANNEL &&
|
||||
!rtlpriv->proximity.proxim_on) {
|
||||
struct ieee80211_channel *channel = hw->conf.chandef.chan;
|
||||
--
|
||||
2.34.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,231 +0,0 @@
|
||||
From da2abdcdbbb8c498fcfb2bc88ba56028bccdbc8a Mon Sep 17 00:00:00 2001
|
||||
From: Fiona Klute <fiona.klute@gmx.de>
|
||||
Date: Mon, 11 Mar 2024 11:37:06 +0100
|
||||
Subject: [PATCH] wifi: rtw88: Debug output for rtw8723x EFUSE
|
||||
|
||||
Some 8703b chips contain invalid EFUSE data, getting detailed
|
||||
information is critical when analyzing issues caused by that.
|
||||
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Tested-by: Pavel Machek <pavel@ucw.cz>
|
||||
Signed-off-by: Fiona Klute <fiona.klute@gmx.de>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/20240311103735.615541-3-fiona.klute@gmx.de
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723x.c | 159 ++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723x.h | 11 ++
|
||||
2 files changed, 170 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723x.c b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
index c23650c5a20080..0d0b6c2cb9aa19 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
@@ -63,6 +63,163 @@ static void __rtw8723x_lck(struct rtw_dev *rtwdev)
|
||||
rtw_write8(rtwdev, REG_TXPAUSE, 0x00);
|
||||
}
|
||||
|
||||
+#define DBG_EFUSE_VAL(rtwdev, map, name) \
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, # name "=0x%02x\n", \
|
||||
+ (map)->name)
|
||||
+#define DBG_EFUSE_2BYTE(rtwdev, map, name) \
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, # name "=0x%02x%02x\n", \
|
||||
+ (map)->name[0], (map)->name[1])
|
||||
+
|
||||
+static void rtw8723xe_efuse_debug(struct rtw_dev *rtwdev,
|
||||
+ struct rtw8723x_efuse *map)
|
||||
+{
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "mac_addr=%pM\n", map->e.mac_addr);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, e.vendor_id);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, e.device_id);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, e.sub_vendor_id);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, e.sub_device_id);
|
||||
+}
|
||||
+
|
||||
+static void rtw8723xu_efuse_debug(struct rtw_dev *rtwdev,
|
||||
+ struct rtw8723x_efuse *map)
|
||||
+{
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, u.vendor_id);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, u.product_id);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, u.usb_option);
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "mac_addr=%pM\n", map->u.mac_addr);
|
||||
+}
|
||||
+
|
||||
+static void rtw8723xs_efuse_debug(struct rtw_dev *rtwdev,
|
||||
+ struct rtw8723x_efuse *map)
|
||||
+{
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "mac_addr=%pM\n", map->s.mac_addr);
|
||||
+}
|
||||
+
|
||||
+static void __rtw8723x_debug_txpwr_limit(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_txpwr_idx *table,
|
||||
+ int tx_path_count)
|
||||
+{
|
||||
+ if (!rtw_dbg_is_enabled(rtwdev, RTW_DBG_EFUSE))
|
||||
+ return;
|
||||
+
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "Power index table (2.4G):\n");
|
||||
+ /* CCK base */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "CCK base\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF G0 G1 G2 G3 G4 G5\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %3u %3u %3u %3u %3u %3u\n",
|
||||
+ 'A' + i,
|
||||
+ table[i].pwr_idx_2g.cck_base[0],
|
||||
+ table[i].pwr_idx_2g.cck_base[1],
|
||||
+ table[i].pwr_idx_2g.cck_base[2],
|
||||
+ table[i].pwr_idx_2g.cck_base[3],
|
||||
+ table[i].pwr_idx_2g.cck_base[4],
|
||||
+ table[i].pwr_idx_2g.cck_base[5]);
|
||||
+ /* CCK diff */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "CCK diff\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF 1S 2S 3S 4S\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %2d %2d %2d %2d\n",
|
||||
+ 'A' + i, 0 /* no diff for 1S */,
|
||||
+ table[i].pwr_idx_2g.ht_2s_diff.cck,
|
||||
+ table[i].pwr_idx_2g.ht_3s_diff.cck,
|
||||
+ table[i].pwr_idx_2g.ht_4s_diff.cck);
|
||||
+ /* BW40-1S base */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "BW40-1S base\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF G0 G1 G2 G3 G4\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %3u %3u %3u %3u %3u\n",
|
||||
+ 'A' + i,
|
||||
+ table[i].pwr_idx_2g.bw40_base[0],
|
||||
+ table[i].pwr_idx_2g.bw40_base[1],
|
||||
+ table[i].pwr_idx_2g.bw40_base[2],
|
||||
+ table[i].pwr_idx_2g.bw40_base[3],
|
||||
+ table[i].pwr_idx_2g.bw40_base[4]);
|
||||
+ /* OFDM diff */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "OFDM diff\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF 1S 2S 3S 4S\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %2d %2d %2d %2d\n",
|
||||
+ 'A' + i,
|
||||
+ table[i].pwr_idx_2g.ht_1s_diff.ofdm,
|
||||
+ table[i].pwr_idx_2g.ht_2s_diff.ofdm,
|
||||
+ table[i].pwr_idx_2g.ht_3s_diff.ofdm,
|
||||
+ table[i].pwr_idx_2g.ht_4s_diff.ofdm);
|
||||
+ /* BW20 diff */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "BW20 diff\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF 1S 2S 3S 4S\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %2d %2d %2d %2d\n",
|
||||
+ 'A' + i,
|
||||
+ table[i].pwr_idx_2g.ht_1s_diff.bw20,
|
||||
+ table[i].pwr_idx_2g.ht_2s_diff.bw20,
|
||||
+ table[i].pwr_idx_2g.ht_3s_diff.bw20,
|
||||
+ table[i].pwr_idx_2g.ht_4s_diff.bw20);
|
||||
+ /* BW40 diff */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "BW40 diff\n");
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "RF 1S 2S 3S 4S\n");
|
||||
+ for (int i = 0; i < tx_path_count; i++)
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE,
|
||||
+ "[%c]: %2d %2d %2d %2d\n",
|
||||
+ 'A' + i, 0 /* no diff for 1S */,
|
||||
+ table[i].pwr_idx_2g.ht_2s_diff.bw40,
|
||||
+ table[i].pwr_idx_2g.ht_3s_diff.bw40,
|
||||
+ table[i].pwr_idx_2g.ht_4s_diff.bw40);
|
||||
+}
|
||||
+
|
||||
+static void efuse_debug_dump(struct rtw_dev *rtwdev,
|
||||
+ struct rtw8723x_efuse *map)
|
||||
+{
|
||||
+ if (!rtw_dbg_is_enabled(rtwdev, RTW_DBG_EFUSE))
|
||||
+ return;
|
||||
+
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "EFUSE raw logical map:\n");
|
||||
+ print_hex_dump(KERN_DEBUG, "", DUMP_PREFIX_OFFSET, 16, 1,
|
||||
+ (u8 *)map, sizeof(struct rtw8723x_efuse), false);
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_EFUSE, "Parsed rtw8723x EFUSE data:\n");
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rtl_id);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, afe);
|
||||
+ rtw8723x_debug_txpwr_limit(rtwdev, map->txpwr_idx_table, 4);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, channel_plan);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, xtal_k);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, thermal_meter);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, iqk_lck);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, pa_type);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, lna_type_2g);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, lna_type_5g);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rf_board_option);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rf_feature_option);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rf_bt_setting);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, eeprom_version);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, eeprom_customer_id);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, tx_bb_swing_setting_2g);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, tx_pwr_calibrate_rate);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rf_antenna_option);
|
||||
+ DBG_EFUSE_VAL(rtwdev, map, rfe_option);
|
||||
+ DBG_EFUSE_2BYTE(rtwdev, map, country_code);
|
||||
+
|
||||
+ switch (rtw_hci_type(rtwdev)) {
|
||||
+ case RTW_HCI_TYPE_PCIE:
|
||||
+ rtw8723xe_efuse_debug(rtwdev, map);
|
||||
+ break;
|
||||
+ case RTW_HCI_TYPE_USB:
|
||||
+ rtw8723xu_efuse_debug(rtwdev, map);
|
||||
+ break;
|
||||
+ case RTW_HCI_TYPE_SDIO:
|
||||
+ rtw8723xs_efuse_debug(rtwdev, map);
|
||||
+ break;
|
||||
+ default:
|
||||
+ /* unsupported now */
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void rtw8723xe_efuse_parsing(struct rtw_efuse *efuse,
|
||||
struct rtw8723x_efuse *map)
|
||||
{
|
||||
@@ -88,6 +245,7 @@ static int __rtw8723x_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)
|
||||
int i;
|
||||
|
||||
map = (struct rtw8723x_efuse *)log_map;
|
||||
+ efuse_debug_dump(rtwdev, map);
|
||||
|
||||
efuse->rfe_option = 0;
|
||||
efuse->rf_board_option = map->rf_board_option;
|
||||
@@ -553,6 +711,7 @@ const struct rtw8723x_common rtw8723x_common = {
|
||||
.pwrtrack_set_xtal = __rtw8723x_pwrtrack_set_xtal,
|
||||
.coex_cfg_init = __rtw8723x_coex_cfg_init,
|
||||
.fill_txdesc_checksum = __rtw8723x_fill_txdesc_checksum,
|
||||
+ .debug_txpwr_limit = __rtw8723x_debug_txpwr_limit,
|
||||
};
|
||||
EXPORT_SYMBOL(rtw8723x_common);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723x.h b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
index cace285fc03397..d6dfee5a1806e2 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
@@ -154,6 +154,9 @@ struct rtw8723x_common {
|
||||
void (*fill_txdesc_checksum)(struct rtw_dev *rtwdev,
|
||||
struct rtw_tx_pkt_info *pkt_info,
|
||||
u8 *txdesc);
|
||||
+ void (*debug_txpwr_limit)(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_txpwr_idx *table,
|
||||
+ int tx_path_count);
|
||||
};
|
||||
|
||||
extern const struct rtw8723x_common rtw8723x_common;
|
||||
@@ -346,6 +349,14 @@ static inline s32 iqk_mult(s32 x, s32 y, s32 *ext)
|
||||
return (t >> 8); /* Q.16 --> Q.8 */
|
||||
}
|
||||
|
||||
+static inline
|
||||
+void rtw8723x_debug_txpwr_limit(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_txpwr_idx *table,
|
||||
+ int tx_path_count)
|
||||
+{
|
||||
+ rtw8723x_common.debug_txpwr_limit(rtwdev, table, tx_path_count);
|
||||
+}
|
||||
+
|
||||
static inline void rtw8723x_lck(struct rtw_dev *rtwdev)
|
||||
{
|
||||
rtw8723x_common.lck(rtwdev);
|
@ -1,106 +0,0 @@
|
||||
From 9bb762b3a957faffb4ba596165525521c07ad2eb Mon Sep 17 00:00:00 2001
|
||||
From: Fiona Klute <fiona.klute@gmx.de>
|
||||
Date: Mon, 11 Mar 2024 11:37:07 +0100
|
||||
Subject: [PATCH] wifi: rtw88: Add definitions for 8703b chip
|
||||
|
||||
default_cck_index is used in power track, the rx_cck_agc_report_type
|
||||
for RX PHY status. GET_RX_DESC_BW is an RX descriptor field not used
|
||||
by the other chip drivers.
|
||||
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Tested-by: Pavel Machek <pavel@ucw.cz>
|
||||
Signed-off-by: Fiona Klute <fiona.klute@gmx.de>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/20240311103735.615541-4-fiona.klute@gmx.de
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723x.h | 11 +++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rx.h | 2 ++
|
||||
3 files changed, 16 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index e14d1da43940fa..49894331f7b495 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -187,6 +187,7 @@ enum rtw_chip_type {
|
||||
RTW_CHIP_TYPE_8822C,
|
||||
RTW_CHIP_TYPE_8723D,
|
||||
RTW_CHIP_TYPE_8821C,
|
||||
+ RTW_CHIP_TYPE_8703B,
|
||||
};
|
||||
|
||||
enum rtw_tx_queue_type {
|
||||
@@ -1700,11 +1701,13 @@ struct rtw_dm_info {
|
||||
s8 delta_power_index[RTW_RF_PATH_MAX];
|
||||
s8 delta_power_index_last[RTW_RF_PATH_MAX];
|
||||
u8 default_ofdm_index;
|
||||
+ u8 default_cck_index;
|
||||
bool pwr_trk_triggered;
|
||||
bool pwr_trk_init_trigger;
|
||||
struct ewma_thermal avg_thermal[RTW_RF_PATH_MAX];
|
||||
s8 txagc_remnant_cck;
|
||||
s8 txagc_remnant_ofdm;
|
||||
+ u8 rx_cck_agc_report_type;
|
||||
|
||||
/* backup dack results for each path and I/Q */
|
||||
u32 dack_adck[RTW_RF_PATH_MAX];
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723x.h b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
index d6dfee5a1806e2..e93bfce994bf82 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.h
|
||||
@@ -165,6 +165,8 @@ extern const struct rtw8723x_common rtw8723x_common;
|
||||
#define MAX_TOLERANCE 5
|
||||
#define IQK_TX_X_ERR 0x142
|
||||
#define IQK_TX_Y_ERR 0x42
|
||||
+#define IQK_RX_X_ERR 0x132
|
||||
+#define IQK_RX_Y_ERR 0x36
|
||||
#define IQK_RX_X_UPPER 0x11a
|
||||
#define IQK_RX_X_LOWER 0xe6
|
||||
#define IQK_RX_Y_LMT 0x1a
|
||||
@@ -177,6 +179,10 @@ extern const struct rtw8723x_common rtw8723x_common;
|
||||
#define DIS_3WIRE 0xccf000c0
|
||||
#define EN_3WIRE 0xccc000c0
|
||||
#define START_PSD 0x400000
|
||||
+#define FREQ_CH5 0xfccd
|
||||
+#define FREQ_CH6 0xfc4d
|
||||
+#define FREQ_CH7 0xffcd
|
||||
+#define FREQ_CH8 0xff4d
|
||||
#define FREQ_CH13 0xfccd
|
||||
#define FREQ_CH14 0xff9a
|
||||
#define RFCFGCH_CHANNEL_MASK GENMASK(7, 0)
|
||||
@@ -239,10 +245,13 @@ extern const struct rtw8723x_common rtw8723x_common;
|
||||
#define BIT_MASK_OFDM0_EXT_C BIT(29)
|
||||
#define BIT_MASK_OFDM0_EXTS (BIT(31) | BIT(29) | BIT(28))
|
||||
#define BIT_SET_OFDM0_EXTS(a, c, d) (((a) << 31) | ((c) << 29) | ((d) << 28))
|
||||
+#define BIT_MASK_OFDM0_EXTS_B (BIT(27) | BIT(25) | BIT(24))
|
||||
+#define BIT_SET_OFDM0_EXTS_B(a, c, d) (((a) << 27) | ((c) << 25) | ((d) << 24))
|
||||
#define REG_OFDM0_XAAGC1 0x0c50
|
||||
#define REG_OFDM0_XBAGC1 0x0c58
|
||||
#define REG_AGCRSSI 0x0c78
|
||||
#define REG_OFDM_0_XA_TX_IQ_IMBALANCE 0x0c80
|
||||
+#define REG_OFDM_0_XB_TX_IQ_IMBALANCE 0x0c88
|
||||
#define BIT_MASK_TXIQ_ELM_A 0x03ff
|
||||
#define BIT_SET_TXIQ_ELM_ACD(a, c, d) (((d) << 22) | (((c) & 0x3F) << 16) | \
|
||||
((a) & 0x03ff))
|
||||
@@ -303,6 +312,8 @@ extern const struct rtw8723x_common rtw8723x_common;
|
||||
#define REG_IQK_AGC_RSP_11N 0x0e4c
|
||||
#define REG_TX_IQK_TONE_B 0x0e50
|
||||
#define REG_RX_IQK_TONE_B 0x0e54
|
||||
+#define REG_TXIQK_PI_B 0x0e58
|
||||
+#define REG_RXIQK_PI_B 0x0e5c
|
||||
#define REG_IQK_RES_TX 0x0e94
|
||||
#define BIT_MASK_RES_TX GENMASK(25, 16)
|
||||
#define REG_IQK_RES_TY 0x0e9c
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rx.h b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
index 3342e37612813a..d3668c4efc24d5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
@@ -40,6 +40,8 @@ enum rtw_rx_desc_enc {
|
||||
le32_get_bits(*((__le32 *)(rxdesc) + 0x02), GENMASK(30, 29))
|
||||
#define GET_RX_DESC_TSFL(rxdesc) \
|
||||
le32_get_bits(*((__le32 *)(rxdesc) + 0x05), GENMASK(31, 0))
|
||||
+#define GET_RX_DESC_BW(rxdesc) \
|
||||
+ (le32_get_bits(*((__le32 *)(rxdesc) + 0x04), GENMASK(31, 24)))
|
||||
|
||||
void rtw_rx_stats(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct sk_buff *skb);
|
File diff suppressed because it is too large
Load Diff
@ -1,36 +0,0 @@
|
||||
From aefa7a3a7cbe6c7de08fd7a7447c797a97c2e0cf Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Tue, 23 Jul 2024 22:32:59 +0300
|
||||
Subject: [PATCH 2/7] wifi: rtw88: 8703b: Fix reported RX band width
|
||||
|
||||
The definition of GET_RX_DESC_BW is incorrect. Fix it according to the
|
||||
GET_RX_STATUS_DESC_BW_8703B macro from the official driver.
|
||||
|
||||
Tested only with RTL8812AU, which uses the same bits.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Fixes: 9bb762b3a957 ("wifi: rtw88: Add definitions for 8703b chip")
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Tested-by: Fiona Klute <fiona.klute@gmx.de>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/1cfed9d5-4304-4b96-84c5-c347f59fedb9@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/rx.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rx.h b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
index d3668c4efc24..8a072dd3d73c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
@@ -41,7 +41,7 @@ enum rtw_rx_desc_enc {
|
||||
#define GET_RX_DESC_TSFL(rxdesc) \
|
||||
le32_get_bits(*((__le32 *)(rxdesc) + 0x05), GENMASK(31, 0))
|
||||
#define GET_RX_DESC_BW(rxdesc) \
|
||||
- (le32_get_bits(*((__le32 *)(rxdesc) + 0x04), GENMASK(31, 24)))
|
||||
+ (le32_get_bits(*((__le32 *)(rxdesc) + 0x04), GENMASK(5, 4)))
|
||||
|
||||
void rtw_rx_stats(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
struct sk_buff *skb);
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,701 +0,0 @@
|
||||
From dec5fc45e4b69ac5c4c628fa9e482199d6e5ad71 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:43:37 +0300
|
||||
Subject: [PATCH 01/12] 6.11: wifi: rtlwifi: rtl8192d: Use "rtl92d"
|
||||
prefix
|
||||
|
||||
Some functions moved from rtl8192de still use the "rtl92de" prefix.
|
||||
Rename them.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../realtek/rtlwifi/rtl8192d/hw_common.c | 94 +++++++++----------
|
||||
.../realtek/rtlwifi/rtl8192d/hw_common.h | 28 +++---
|
||||
.../realtek/rtlwifi/rtl8192d/trx_common.c | 92 +++++++++---------
|
||||
.../realtek/rtlwifi/rtl8192d/trx_common.h | 16 ++--
|
||||
.../wireless/realtek/rtlwifi/rtl8192de/hw.c | 18 ++--
|
||||
.../wireless/realtek/rtlwifi/rtl8192de/sw.c | 20 ++--
|
||||
.../wireless/realtek/rtlwifi/rtl8192de/trx.c | 2 +-
|
||||
7 files changed, 135 insertions(+), 135 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
index 920bfb4eaaef..3b14eec08b64 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.c
|
||||
@@ -14,7 +14,7 @@
|
||||
#include "hw_common.h"
|
||||
#include "phy_common.h"
|
||||
|
||||
-void rtl92de_stop_tx_beacon(struct ieee80211_hw *hw)
|
||||
+void rtl92d_stop_tx_beacon(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
u8 tmp1byte;
|
||||
@@ -27,9 +27,9 @@ void rtl92de_stop_tx_beacon(struct ieee80211_hw *hw)
|
||||
tmp1byte &= ~(BIT(0));
|
||||
rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_stop_tx_beacon);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_stop_tx_beacon);
|
||||
|
||||
-void rtl92de_resume_tx_beacon(struct ieee80211_hw *hw)
|
||||
+void rtl92d_resume_tx_beacon(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
u8 tmp1byte;
|
||||
@@ -42,7 +42,7 @@ void rtl92de_resume_tx_beacon(struct ieee80211_hw *hw)
|
||||
tmp1byte |= BIT(0);
|
||||
rtl_write_byte(rtlpriv, REG_TBTT_PROHIBIT + 2, tmp1byte);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_resume_tx_beacon);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_resume_tx_beacon);
|
||||
|
||||
void rtl92d_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
{
|
||||
@@ -285,7 +285,7 @@ void rtl92d_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(rtl92d_set_hw_reg);
|
||||
|
||||
-bool rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
|
||||
+bool rtl92d_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
bool status = true;
|
||||
@@ -307,9 +307,9 @@ bool rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data)
|
||||
} while (++count);
|
||||
return status;
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_llt_write);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_llt_write);
|
||||
|
||||
-void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw)
|
||||
+void rtl92d_enable_hw_security_config(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
u8 sec_reg_value;
|
||||
@@ -334,16 +334,16 @@ void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw)
|
||||
"The SECR-value %x\n", sec_reg_value);
|
||||
rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_WPA_CONFIG, &sec_reg_value);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_enable_hw_security_config);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_enable_hw_security_config);
|
||||
|
||||
/* don't set REG_EDCA_BE_PARAM here because
|
||||
* mac80211 will send pkt when scan
|
||||
*/
|
||||
-void rtl92de_set_qos(struct ieee80211_hw *hw, int aci)
|
||||
+void rtl92d_set_qos(struct ieee80211_hw *hw, int aci)
|
||||
{
|
||||
rtl92d_dm_init_edca_turbo(hw);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_set_qos);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_set_qos);
|
||||
|
||||
static enum version_8192d _rtl92d_read_chip_version(struct ieee80211_hw *hw)
|
||||
{
|
||||
@@ -362,8 +362,8 @@ static enum version_8192d _rtl92d_read_chip_version(struct ieee80211_hw *hw)
|
||||
return version;
|
||||
}
|
||||
|
||||
-static void _rtl92de_readpowervalue_fromprom(struct txpower_info *pwrinfo,
|
||||
- u8 *efuse, bool autoloadfail)
|
||||
+static void _rtl92d_readpowervalue_fromprom(struct txpower_info *pwrinfo,
|
||||
+ u8 *efuse, bool autoloadfail)
|
||||
{
|
||||
u32 rfpath, eeaddr, group, offset, offset1, offset2;
|
||||
u8 i, val8;
|
||||
@@ -500,8 +500,8 @@ static void _rtl92de_readpowervalue_fromprom(struct txpower_info *pwrinfo,
|
||||
}
|
||||
}
|
||||
|
||||
-static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw,
|
||||
- bool autoload_fail, u8 *hwinfo)
|
||||
+static void _rtl92d_read_txpower_info(struct ieee80211_hw *hw,
|
||||
+ bool autoload_fail, u8 *hwinfo)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
|
||||
@@ -509,7 +509,7 @@ static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw,
|
||||
u8 tempval[2], i, pwr, diff;
|
||||
u32 ch, rfpath, group;
|
||||
|
||||
- _rtl92de_readpowervalue_fromprom(&pwrinfo, hwinfo, autoload_fail);
|
||||
+ _rtl92d_readpowervalue_fromprom(&pwrinfo, hwinfo, autoload_fail);
|
||||
if (!autoload_fail) {
|
||||
/* bit0~2 */
|
||||
rtlefuse->eeprom_regulatory = (hwinfo[EEPROM_RF_OPT1] & 0x7);
|
||||
@@ -613,8 +613,8 @@ static void _rtl92de_read_txpower_info(struct ieee80211_hw *hw,
|
||||
}
|
||||
}
|
||||
|
||||
-static void _rtl92de_read_macphymode_from_prom(struct ieee80211_hw *hw,
|
||||
- u8 *content)
|
||||
+static void _rtl92d_read_macphymode_from_prom(struct ieee80211_hw *hw,
|
||||
+ u8 *content)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
@@ -636,15 +636,15 @@ static void _rtl92de_read_macphymode_from_prom(struct ieee80211_hw *hw,
|
||||
}
|
||||
}
|
||||
|
||||
-static void _rtl92de_read_macphymode_and_bandtype(struct ieee80211_hw *hw,
|
||||
- u8 *content)
|
||||
+static void _rtl92d_read_macphymode_and_bandtype(struct ieee80211_hw *hw,
|
||||
+ u8 *content)
|
||||
{
|
||||
- _rtl92de_read_macphymode_from_prom(hw, content);
|
||||
+ _rtl92d_read_macphymode_from_prom(hw, content);
|
||||
rtl92d_phy_config_macphymode(hw);
|
||||
rtl92d_phy_config_macphymode_info(hw);
|
||||
}
|
||||
|
||||
-static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
+static void _rtl92d_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
enum version_8192d chipver = rtlpriv->rtlhal.version;
|
||||
@@ -676,7 +676,7 @@ static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
rtlpriv->rtlhal.version = chipver;
|
||||
}
|
||||
|
||||
-static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
|
||||
+static void _rtl92d_read_adapter_info(struct ieee80211_hw *hw)
|
||||
{
|
||||
static const int params_pci[] = {
|
||||
RTL8190_EEPROM_ID, EEPROM_VID, EEPROM_DID,
|
||||
@@ -706,8 +706,8 @@ static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
|
||||
if (rtl_get_hwinfo(hw, rtlpriv, HWSET_MAX_SIZE, hwinfo, params))
|
||||
goto exit;
|
||||
|
||||
- _rtl92de_efuse_update_chip_version(hw);
|
||||
- _rtl92de_read_macphymode_and_bandtype(hw, hwinfo);
|
||||
+ _rtl92d_efuse_update_chip_version(hw);
|
||||
+ _rtl92d_read_macphymode_and_bandtype(hw, hwinfo);
|
||||
|
||||
/* Read Permanent MAC address for 2nd interface */
|
||||
if (rtlhal->interfaceindex != 0)
|
||||
@@ -717,7 +717,7 @@ static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
|
||||
rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR,
|
||||
rtlefuse->dev_addr);
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG, "%pM\n", rtlefuse->dev_addr);
|
||||
- _rtl92de_read_txpower_info(hw, rtlefuse->autoload_failflag, hwinfo);
|
||||
+ _rtl92d_read_txpower_info(hw, rtlefuse->autoload_failflag, hwinfo);
|
||||
|
||||
/* Read Channel Plan */
|
||||
switch (rtlhal->bandset) {
|
||||
@@ -739,7 +739,7 @@ static void _rtl92de_read_adapter_info(struct ieee80211_hw *hw)
|
||||
kfree(hwinfo);
|
||||
}
|
||||
|
||||
-void rtl92de_read_eeprom_info(struct ieee80211_hw *hw)
|
||||
+void rtl92d_read_eeprom_info(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
|
||||
@@ -760,15 +760,15 @@ void rtl92de_read_eeprom_info(struct ieee80211_hw *hw)
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "Autoload OK\n");
|
||||
|
||||
rtlefuse->autoload_failflag = false;
|
||||
- _rtl92de_read_adapter_info(hw);
|
||||
+ _rtl92d_read_adapter_info(hw);
|
||||
} else {
|
||||
pr_err("Autoload ERR!!\n");
|
||||
}
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_read_eeprom_info);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_read_eeprom_info);
|
||||
|
||||
-static void rtl92de_update_hal_rate_table(struct ieee80211_hw *hw,
|
||||
- struct ieee80211_sta *sta)
|
||||
+static void rtl92d_update_hal_rate_table(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -851,9 +851,9 @@ static void rtl92de_update_hal_rate_table(struct ieee80211_hw *hw,
|
||||
rtl_read_dword(rtlpriv, REG_ARFR0));
|
||||
}
|
||||
|
||||
-static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
- struct ieee80211_sta *sta,
|
||||
- u8 rssi_level, bool update_bw)
|
||||
+static void rtl92d_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_sta *sta,
|
||||
+ u8 rssi_level, bool update_bw)
|
||||
{
|
||||
struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -1009,20 +1009,20 @@ static void rtl92de_update_hal_rate_mask(struct ieee80211_hw *hw,
|
||||
sta_entry->ratr_index = ratr_index;
|
||||
}
|
||||
|
||||
-void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
|
||||
- struct ieee80211_sta *sta,
|
||||
- u8 rssi_level, bool update_bw)
|
||||
+void rtl92d_update_hal_rate_tbl(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_sta *sta,
|
||||
+ u8 rssi_level, bool update_bw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
if (rtlpriv->dm.useramask)
|
||||
- rtl92de_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
|
||||
+ rtl92d_update_hal_rate_mask(hw, sta, rssi_level, update_bw);
|
||||
else
|
||||
- rtl92de_update_hal_rate_table(hw, sta);
|
||||
+ rtl92d_update_hal_rate_table(hw, sta);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_update_hal_rate_tbl);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_update_hal_rate_tbl);
|
||||
|
||||
-void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw)
|
||||
+void rtl92d_update_channel_access_setting(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -1036,9 +1036,9 @@ void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw)
|
||||
sifs_timer = 0x1010;
|
||||
rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_SIFS, (u8 *)&sifs_timer);
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_update_channel_access_setting);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_update_channel_access_setting);
|
||||
|
||||
-bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
|
||||
+bool rtl92d_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
|
||||
@@ -1093,11 +1093,11 @@ bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid)
|
||||
*valid = 1;
|
||||
return !ppsc->hwradiooff;
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_gpio_radio_on_off_checking);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_gpio_radio_on_off_checking);
|
||||
|
||||
-void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
|
||||
- u8 *p_macaddr, bool is_group, u8 enc_algo,
|
||||
- bool is_wepkey, bool clear_all)
|
||||
+void rtl92d_set_key(struct ieee80211_hw *hw, u32 key_index,
|
||||
+ u8 *p_macaddr, bool is_group, u8 enc_algo,
|
||||
+ bool is_wepkey, bool clear_all)
|
||||
{
|
||||
static const u8 cam_const_addr[4][6] = {
|
||||
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
@@ -1222,4 +1222,4 @@ void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
|
||||
}
|
||||
}
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_set_key);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_set_key);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h
|
||||
index 2c07f5cc5766..4da1bab15f36 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/hw_common.h
|
||||
@@ -4,21 +4,21 @@
|
||||
#ifndef __RTL92D_HW_COMMON_H__
|
||||
#define __RTL92D_HW_COMMON_H__
|
||||
|
||||
-void rtl92de_stop_tx_beacon(struct ieee80211_hw *hw);
|
||||
-void rtl92de_resume_tx_beacon(struct ieee80211_hw *hw);
|
||||
+void rtl92d_stop_tx_beacon(struct ieee80211_hw *hw);
|
||||
+void rtl92d_resume_tx_beacon(struct ieee80211_hw *hw);
|
||||
void rtl92d_get_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
|
||||
void rtl92d_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val);
|
||||
-bool rtl92de_llt_write(struct ieee80211_hw *hw, u32 address, u32 data);
|
||||
-void rtl92de_enable_hw_security_config(struct ieee80211_hw *hw);
|
||||
-void rtl92de_set_qos(struct ieee80211_hw *hw, int aci);
|
||||
-void rtl92de_read_eeprom_info(struct ieee80211_hw *hw);
|
||||
-void rtl92de_update_hal_rate_tbl(struct ieee80211_hw *hw,
|
||||
- struct ieee80211_sta *sta,
|
||||
- u8 rssi_level, bool update_bw);
|
||||
-void rtl92de_update_channel_access_setting(struct ieee80211_hw *hw);
|
||||
-bool rtl92de_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
|
||||
-void rtl92de_set_key(struct ieee80211_hw *hw, u32 key_index,
|
||||
- u8 *p_macaddr, bool is_group, u8 enc_algo,
|
||||
- bool is_wepkey, bool clear_all);
|
||||
+bool rtl92d_llt_write(struct ieee80211_hw *hw, u32 address, u32 data);
|
||||
+void rtl92d_enable_hw_security_config(struct ieee80211_hw *hw);
|
||||
+void rtl92d_set_qos(struct ieee80211_hw *hw, int aci);
|
||||
+void rtl92d_read_eeprom_info(struct ieee80211_hw *hw);
|
||||
+void rtl92d_update_hal_rate_tbl(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_sta *sta,
|
||||
+ u8 rssi_level, bool update_bw);
|
||||
+void rtl92d_update_channel_access_setting(struct ieee80211_hw *hw);
|
||||
+bool rtl92d_gpio_radio_on_off_checking(struct ieee80211_hw *hw, u8 *valid);
|
||||
+void rtl92d_set_key(struct ieee80211_hw *hw, u32 key_index,
|
||||
+ u8 *p_macaddr, bool is_group, u8 enc_algo,
|
||||
+ bool is_wepkey, bool clear_all);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c
|
||||
index 72d2b7426d82..9f9a34492030 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.c
|
||||
@@ -7,8 +7,8 @@
|
||||
#include "def.h"
|
||||
#include "trx_common.h"
|
||||
|
||||
-static long _rtl92de_translate_todbm(struct ieee80211_hw *hw,
|
||||
- u8 signal_strength_index)
|
||||
+static long _rtl92d_translate_todbm(struct ieee80211_hw *hw,
|
||||
+ u8 signal_strength_index)
|
||||
{
|
||||
long signal_power;
|
||||
|
||||
@@ -17,13 +17,13 @@ static long _rtl92de_translate_todbm(struct ieee80211_hw *hw,
|
||||
return signal_power;
|
||||
}
|
||||
|
||||
-static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *pstats,
|
||||
- __le32 *pdesc,
|
||||
- struct rx_fwinfo_92d *p_drvinfo,
|
||||
- bool packet_match_bssid,
|
||||
- bool packet_toself,
|
||||
- bool packet_beacon)
|
||||
+static void _rtl92d_query_rxphystatus(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *pstats,
|
||||
+ __le32 *pdesc,
|
||||
+ struct rx_fwinfo_92d *p_drvinfo,
|
||||
+ bool packet_match_bssid,
|
||||
+ bool packet_toself,
|
||||
+ bool packet_beacon)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_phy *rtlphy = &rtlpriv->phy;
|
||||
@@ -203,8 +203,8 @@ static void rtl92d_loop_over_paths(struct ieee80211_hw *hw,
|
||||
}
|
||||
}
|
||||
|
||||
-static void _rtl92de_process_ui_rssi(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *pstats)
|
||||
+static void _rtl92d_process_ui_rssi(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *pstats)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rt_smooth_data *ui_rssi;
|
||||
@@ -226,15 +226,15 @@ static void _rtl92de_process_ui_rssi(struct ieee80211_hw *hw,
|
||||
if (ui_rssi->index >= PHY_RSSI_SLID_WIN_MAX)
|
||||
ui_rssi->index = 0;
|
||||
tmpval = ui_rssi->total_val / ui_rssi->total_num;
|
||||
- rtlpriv->stats.signal_strength = _rtl92de_translate_todbm(hw, (u8)tmpval);
|
||||
+ rtlpriv->stats.signal_strength = _rtl92d_translate_todbm(hw, (u8)tmpval);
|
||||
pstats->rssi = rtlpriv->stats.signal_strength;
|
||||
|
||||
if (!pstats->is_cck && pstats->packet_toself)
|
||||
rtl92d_loop_over_paths(hw, pstats);
|
||||
}
|
||||
|
||||
-static void _rtl92de_update_rxsignalstatistics(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *pstats)
|
||||
+static void _rtl92d_update_rxsignalstatistics(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *pstats)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
int weighting = 0;
|
||||
@@ -249,8 +249,8 @@ static void _rtl92de_update_rxsignalstatistics(struct ieee80211_hw *hw,
|
||||
5 + pstats->recvsignalpower + weighting) / 6;
|
||||
}
|
||||
|
||||
-static void _rtl92de_process_pwdb(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *pstats)
|
||||
+static void _rtl92d_process_pwdb(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *pstats)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -276,7 +276,7 @@ static void _rtl92de_process_pwdb(struct ieee80211_hw *hw,
|
||||
(pstats->rx_pwdb_all)) / (RX_SMOOTH_FACTOR);
|
||||
}
|
||||
rtlpriv->dm.undec_sm_pwdb = undec_sm_pwdb;
|
||||
- _rtl92de_update_rxsignalstatistics(hw, pstats);
|
||||
+ _rtl92d_update_rxsignalstatistics(hw, pstats);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -301,8 +301,8 @@ static void rtl92d_loop_over_streams(struct ieee80211_hw *hw,
|
||||
}
|
||||
}
|
||||
|
||||
-static void _rtl92de_process_ui_link_quality(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *pstats)
|
||||
+static void _rtl92d_process_ui_link_quality(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *pstats)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rt_smooth_data *ui_link_quality;
|
||||
@@ -330,24 +330,24 @@ static void _rtl92de_process_ui_link_quality(struct ieee80211_hw *hw,
|
||||
rtl92d_loop_over_streams(hw, pstats);
|
||||
}
|
||||
|
||||
-static void _rtl92de_process_phyinfo(struct ieee80211_hw *hw,
|
||||
- u8 *buffer,
|
||||
- struct rtl_stats *pcurrent_stats)
|
||||
+static void _rtl92d_process_phyinfo(struct ieee80211_hw *hw,
|
||||
+ u8 *buffer,
|
||||
+ struct rtl_stats *pcurrent_stats)
|
||||
{
|
||||
if (!pcurrent_stats->packet_matchbssid &&
|
||||
!pcurrent_stats->packet_beacon)
|
||||
return;
|
||||
|
||||
- _rtl92de_process_ui_rssi(hw, pcurrent_stats);
|
||||
- _rtl92de_process_pwdb(hw, pcurrent_stats);
|
||||
- _rtl92de_process_ui_link_quality(hw, pcurrent_stats);
|
||||
+ _rtl92d_process_ui_rssi(hw, pcurrent_stats);
|
||||
+ _rtl92d_process_pwdb(hw, pcurrent_stats);
|
||||
+ _rtl92d_process_ui_link_quality(hw, pcurrent_stats);
|
||||
}
|
||||
|
||||
-static void _rtl92de_translate_rx_signal_stuff(struct ieee80211_hw *hw,
|
||||
- struct sk_buff *skb,
|
||||
- struct rtl_stats *pstats,
|
||||
- __le32 *pdesc,
|
||||
- struct rx_fwinfo_92d *p_drvinfo)
|
||||
+static void _rtl92d_translate_rx_signal_stuff(struct ieee80211_hw *hw,
|
||||
+ struct sk_buff *skb,
|
||||
+ struct rtl_stats *pstats,
|
||||
+ __le32 *pdesc,
|
||||
+ struct rx_fwinfo_92d *p_drvinfo)
|
||||
{
|
||||
struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
@@ -375,15 +375,15 @@ static void _rtl92de_translate_rx_signal_stuff(struct ieee80211_hw *hw,
|
||||
packet_toself = packet_matchbssid &&
|
||||
ether_addr_equal(praddr, rtlefuse->dev_addr);
|
||||
packet_beacon = ieee80211_is_beacon(fc);
|
||||
- _rtl92de_query_rxphystatus(hw, pstats, pdesc, p_drvinfo,
|
||||
- packet_matchbssid, packet_toself,
|
||||
- packet_beacon);
|
||||
- _rtl92de_process_phyinfo(hw, tmp_buf, pstats);
|
||||
+ _rtl92d_query_rxphystatus(hw, pstats, pdesc, p_drvinfo,
|
||||
+ packet_matchbssid, packet_toself,
|
||||
+ packet_beacon);
|
||||
+ _rtl92d_process_phyinfo(hw, tmp_buf, pstats);
|
||||
}
|
||||
|
||||
-bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
|
||||
- struct ieee80211_rx_status *rx_status,
|
||||
- u8 *pdesc8, struct sk_buff *skb)
|
||||
+bool rtl92d_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
|
||||
+ struct ieee80211_rx_status *rx_status,
|
||||
+ u8 *pdesc8, struct sk_buff *skb)
|
||||
{
|
||||
__le32 *pdesc = (__le32 *)pdesc8;
|
||||
struct rx_fwinfo_92d *p_drvinfo;
|
||||
@@ -423,17 +423,17 @@ bool rtl92de_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
|
||||
if (phystatus) {
|
||||
p_drvinfo = (struct rx_fwinfo_92d *)(skb->data +
|
||||
stats->rx_bufshift);
|
||||
- _rtl92de_translate_rx_signal_stuff(hw, skb, stats, pdesc,
|
||||
- p_drvinfo);
|
||||
+ _rtl92d_translate_rx_signal_stuff(hw, skb, stats, pdesc,
|
||||
+ p_drvinfo);
|
||||
}
|
||||
/*rx_status->qual = stats->signal; */
|
||||
rx_status->signal = stats->recvsignalpower + 10;
|
||||
return true;
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_rx_query_desc);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_rx_query_desc);
|
||||
|
||||
-void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc8, bool istx,
|
||||
- u8 desc_name, u8 *val)
|
||||
+void rtl92d_set_desc(struct ieee80211_hw *hw, u8 *pdesc8, bool istx,
|
||||
+ u8 desc_name, u8 *val)
|
||||
{
|
||||
__le32 *pdesc = (__le32 *)pdesc8;
|
||||
|
||||
@@ -473,10 +473,10 @@ void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc8, bool istx,
|
||||
}
|
||||
}
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_set_desc);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_set_desc);
|
||||
|
||||
-u64 rtl92de_get_desc(struct ieee80211_hw *hw,
|
||||
- u8 *p_desc8, bool istx, u8 desc_name)
|
||||
+u64 rtl92d_get_desc(struct ieee80211_hw *hw,
|
||||
+ u8 *p_desc8, bool istx, u8 desc_name)
|
||||
{
|
||||
__le32 *p_desc = (__le32 *)p_desc8;
|
||||
u32 ret = 0;
|
||||
@@ -513,4 +513,4 @@ u64 rtl92de_get_desc(struct ieee80211_hw *hw,
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
-EXPORT_SYMBOL_GPL(rtl92de_get_desc);
|
||||
+EXPORT_SYMBOL_GPL(rtl92d_get_desc);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h
|
||||
index 87d956d771eb..528182b1eba6 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192d/trx_common.h
|
||||
@@ -393,13 +393,13 @@ struct rx_fwinfo_92d {
|
||||
#endif
|
||||
} __packed;
|
||||
|
||||
-bool rtl92de_rx_query_desc(struct ieee80211_hw *hw,
|
||||
- struct rtl_stats *stats,
|
||||
- struct ieee80211_rx_status *rx_status,
|
||||
- u8 *pdesc, struct sk_buff *skb);
|
||||
-void rtl92de_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
|
||||
- u8 desc_name, u8 *val);
|
||||
-u64 rtl92de_get_desc(struct ieee80211_hw *hw,
|
||||
- u8 *p_desc, bool istx, u8 desc_name);
|
||||
+bool rtl92d_rx_query_desc(struct ieee80211_hw *hw,
|
||||
+ struct rtl_stats *stats,
|
||||
+ struct ieee80211_rx_status *rx_status,
|
||||
+ u8 *pdesc, struct sk_buff *skb);
|
||||
+void rtl92d_set_desc(struct ieee80211_hw *hw, u8 *pdesc, bool istx,
|
||||
+ u8 desc_name, u8 *val);
|
||||
+u64 rtl92d_get_desc(struct ieee80211_hw *hw,
|
||||
+ u8 *p_desc, bool istx, u8 desc_name);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
index 73b81e60cfa9..03f4314bdb2e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
@@ -181,7 +181,7 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
u8 btype_ibss = val[0];
|
||||
|
||||
if (btype_ibss)
|
||||
- rtl92de_stop_tx_beacon(hw);
|
||||
+ rtl92d_stop_tx_beacon(hw);
|
||||
_rtl92de_set_bcn_ctrl_reg(hw, 0, BIT(3));
|
||||
rtl_write_dword(rtlpriv, REG_TSFTR,
|
||||
(u32) (mac->tsf & 0xffffffff));
|
||||
@@ -189,7 +189,7 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
(u32) ((mac->tsf >> 32) & 0xffffffff));
|
||||
_rtl92de_set_bcn_ctrl_reg(hw, BIT(3), 0);
|
||||
if (btype_ibss)
|
||||
- rtl92de_resume_tx_beacon(hw);
|
||||
+ rtl92d_resume_tx_beacon(hw);
|
||||
|
||||
break;
|
||||
}
|
||||
@@ -295,13 +295,13 @@ static bool _rtl92de_llt_table_init(struct ieee80211_hw *hw)
|
||||
|
||||
/* 18. LLT_table_init(Adapter); */
|
||||
for (i = 0; i < (txpktbuf_bndy - 1); i++) {
|
||||
- status = rtl92de_llt_write(hw, i, i + 1);
|
||||
+ status = rtl92d_llt_write(hw, i, i + 1);
|
||||
if (!status)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* end of list */
|
||||
- status = rtl92de_llt_write(hw, (txpktbuf_bndy - 1), 0xFF);
|
||||
+ status = rtl92d_llt_write(hw, (txpktbuf_bndy - 1), 0xFF);
|
||||
if (!status)
|
||||
return status;
|
||||
|
||||
@@ -310,13 +310,13 @@ static bool _rtl92de_llt_table_init(struct ieee80211_hw *hw)
|
||||
/* config this MAC as two MAC transfer. */
|
||||
/* Otherwise used as local loopback buffer. */
|
||||
for (i = txpktbuf_bndy; i < maxpage; i++) {
|
||||
- status = rtl92de_llt_write(hw, i, (i + 1));
|
||||
+ status = rtl92d_llt_write(hw, i, (i + 1));
|
||||
if (!status)
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Let last entry point to the start entry of ring buffer */
|
||||
- status = rtl92de_llt_write(hw, maxpage, txpktbuf_bndy);
|
||||
+ status = rtl92d_llt_write(hw, maxpage, txpktbuf_bndy);
|
||||
if (!status)
|
||||
return status;
|
||||
|
||||
@@ -688,7 +688,7 @@ int rtl92de_hw_init(struct ieee80211_hw *hw)
|
||||
|
||||
/* reset hw sec */
|
||||
rtl_cam_reset_all_entry(hw);
|
||||
- rtl92de_enable_hw_security_config(hw);
|
||||
+ rtl92d_enable_hw_security_config(hw);
|
||||
|
||||
/* Read EEPROM TX power index and PHY_REG_PG.txt to capture correct */
|
||||
/* TX power index for different rate set. */
|
||||
@@ -742,11 +742,11 @@ static int _rtl92de_set_media_status(struct ieee80211_hw *hw,
|
||||
|
||||
if (type == NL80211_IFTYPE_UNSPECIFIED ||
|
||||
type == NL80211_IFTYPE_STATION) {
|
||||
- rtl92de_stop_tx_beacon(hw);
|
||||
+ rtl92d_stop_tx_beacon(hw);
|
||||
_rtl92de_enable_bcn_sub_func(hw);
|
||||
} else if (type == NL80211_IFTYPE_ADHOC ||
|
||||
type == NL80211_IFTYPE_AP) {
|
||||
- rtl92de_resume_tx_beacon(hw);
|
||||
+ rtl92d_resume_tx_beacon(hw);
|
||||
_rtl92de_disable_bcn_sub_func(hw);
|
||||
} else {
|
||||
rtl_dbg(rtlpriv, COMP_ERR, DBG_WARNING,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
index 5f6311c2aac4..f5ce4889523e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
@@ -187,7 +187,7 @@ static void rtl92d_deinit_sw_vars(struct ieee80211_hw *hw)
|
||||
static struct rtl_hal_ops rtl8192de_hal_ops = {
|
||||
.init_sw_vars = rtl92d_init_sw_vars,
|
||||
.deinit_sw_vars = rtl92d_deinit_sw_vars,
|
||||
- .read_eeprom_info = rtl92de_read_eeprom_info,
|
||||
+ .read_eeprom_info = rtl92d_read_eeprom_info,
|
||||
.interrupt_recognized = rtl92de_interrupt_recognized,
|
||||
.hw_init = rtl92de_hw_init,
|
||||
.hw_disable = rtl92de_card_disable,
|
||||
@@ -197,30 +197,30 @@ static struct rtl_hal_ops rtl8192de_hal_ops = {
|
||||
.disable_interrupt = rtl92de_disable_interrupt,
|
||||
.set_network_type = rtl92de_set_network_type,
|
||||
.set_chk_bssid = rtl92de_set_check_bssid,
|
||||
- .set_qos = rtl92de_set_qos,
|
||||
+ .set_qos = rtl92d_set_qos,
|
||||
.set_bcn_reg = rtl92de_set_beacon_related_registers,
|
||||
.set_bcn_intv = rtl92de_set_beacon_interval,
|
||||
.update_interrupt_mask = rtl92de_update_interrupt_mask,
|
||||
.get_hw_reg = rtl92de_get_hw_reg,
|
||||
.set_hw_reg = rtl92de_set_hw_reg,
|
||||
- .update_rate_tbl = rtl92de_update_hal_rate_tbl,
|
||||
+ .update_rate_tbl = rtl92d_update_hal_rate_tbl,
|
||||
.fill_tx_desc = rtl92de_tx_fill_desc,
|
||||
.fill_tx_cmddesc = rtl92de_tx_fill_cmddesc,
|
||||
- .query_rx_desc = rtl92de_rx_query_desc,
|
||||
- .set_channel_access = rtl92de_update_channel_access_setting,
|
||||
- .radio_onoff_checking = rtl92de_gpio_radio_on_off_checking,
|
||||
+ .query_rx_desc = rtl92d_rx_query_desc,
|
||||
+ .set_channel_access = rtl92d_update_channel_access_setting,
|
||||
+ .radio_onoff_checking = rtl92d_gpio_radio_on_off_checking,
|
||||
.set_bw_mode = rtl92d_phy_set_bw_mode,
|
||||
.switch_channel = rtl92d_phy_sw_chnl,
|
||||
.dm_watchdog = rtl92de_dm_watchdog,
|
||||
.scan_operation_backup = rtl_phy_scan_operation_backup,
|
||||
.set_rf_power_state = rtl92d_phy_set_rf_power_state,
|
||||
.led_control = rtl92de_led_control,
|
||||
- .set_desc = rtl92de_set_desc,
|
||||
- .get_desc = rtl92de_get_desc,
|
||||
+ .set_desc = rtl92d_set_desc,
|
||||
+ .get_desc = rtl92d_get_desc,
|
||||
.is_tx_desc_closed = rtl92de_is_tx_desc_closed,
|
||||
.tx_polling = rtl92de_tx_polling,
|
||||
- .enable_hw_sec = rtl92de_enable_hw_security_config,
|
||||
- .set_key = rtl92de_set_key,
|
||||
+ .enable_hw_sec = rtl92d_enable_hw_security_config,
|
||||
+ .set_key = rtl92d_set_key,
|
||||
.get_bbreg = rtl92d_phy_query_bb_reg,
|
||||
.set_bbreg = rtl92d_phy_set_bb_reg,
|
||||
.get_rfreg = rtl92d_phy_query_rf_reg,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
index 2b9b352f7783..91bf399c9ef1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
@@ -292,7 +292,7 @@ bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
struct rtl8192_tx_ring *ring = &rtlpci->tx_ring[hw_queue];
|
||||
u8 *entry = (u8 *)(&ring->desc[ring->idx]);
|
||||
- u8 own = (u8)rtl92de_get_desc(hw, entry, true, HW_DESC_OWN);
|
||||
+ u8 own = (u8)rtl92d_get_desc(hw, entry, true, HW_DESC_OWN);
|
||||
|
||||
/* a beacon packet will only use the first
|
||||
* descriptor by defaut, and the own bit may not
|
||||
--
|
||||
2.34.1
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,39 +0,0 @@
|
||||
From 34ddbe7398b1e23d78192999dcc88a7f57bcaae5 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:44:39 +0300
|
||||
Subject: [PATCH 03/12] 6.11: wifi: rtlwifi: Add new members to struct
|
||||
rtl_priv for RTL8192DU
|
||||
|
||||
These are needed for the dual MAC version of RTL8192DU.
|
||||
|
||||
The two mutexes are used to avoid concurrent access to the hardware
|
||||
from the two USB interfaces.
|
||||
|
||||
The two arrays are filled by one interface during LC calibration and
|
||||
accessed by the other interface during channel switching.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 4f1c21c130f4..2e88359ba917 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2773,6 +2773,12 @@ struct rtl_priv {
|
||||
*/
|
||||
bool use_new_trx_flow;
|
||||
|
||||
+ /* For dual MAC RTL8192DU, things shared by the 2 USB interfaces */
|
||||
+ u32 *curveindex_2g;
|
||||
+ u32 *curveindex_5g;
|
||||
+ struct mutex *mutex_for_power_on_off; /* for power on/off */
|
||||
+ struct mutex *mutex_for_hw_init; /* for hardware init */
|
||||
+
|
||||
#ifdef CONFIG_PM
|
||||
struct wiphy_wowlan_support wowlan;
|
||||
#endif
|
||||
--
|
||||
2.34.1
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,462 +0,0 @@
|
||||
From 8125d619567b9a3620244251b8eab25074cafcfa Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:46:26 +0300
|
||||
Subject: [PATCH 06/12] 6.11: wifi: rtlwifi: Add rtl8192du/trx.{c,h}
|
||||
|
||||
These contain routines related to sending frames to the chip.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/trx.c | 372 ++++++++++++++++++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/trx.h | 60 +++
|
||||
2 files changed, 432 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.h
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c
|
||||
new file mode 100644
|
||||
index 000000000000..743ce0cfffe6
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.c
|
||||
@@ -0,0 +1,372 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "../base.h"
|
||||
+#include "../usb.h"
|
||||
+#include "../rtl8192d/reg.h"
|
||||
+#include "../rtl8192d/def.h"
|
||||
+#include "../rtl8192d/trx_common.h"
|
||||
+#include "trx.h"
|
||||
+
|
||||
+void rtl92du_tx_cleanup(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
+{
|
||||
+}
|
||||
+
|
||||
+int rtl92du_tx_post_hdl(struct ieee80211_hw *hw, struct urb *urb,
|
||||
+ struct sk_buff *skb)
|
||||
+{
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+struct sk_buff *rtl92du_tx_aggregate_hdl(struct ieee80211_hw *hw,
|
||||
+ struct sk_buff_head *list)
|
||||
+{
|
||||
+ return skb_dequeue(list);
|
||||
+}
|
||||
+
|
||||
+static enum rtl_desc_qsel _rtl92du_hwq_to_descq(u16 queue_index)
|
||||
+{
|
||||
+ switch (queue_index) {
|
||||
+ case RTL_TXQ_BCN:
|
||||
+ return QSLT_BEACON;
|
||||
+ case RTL_TXQ_MGT:
|
||||
+ return QSLT_MGNT;
|
||||
+ case RTL_TXQ_VO:
|
||||
+ return QSLT_VO;
|
||||
+ case RTL_TXQ_VI:
|
||||
+ return QSLT_VI;
|
||||
+ case RTL_TXQ_BK:
|
||||
+ return QSLT_BK;
|
||||
+ default:
|
||||
+ case RTL_TXQ_BE:
|
||||
+ return QSLT_BE;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+/* For HW recovery information */
|
||||
+static void _rtl92du_tx_desc_checksum(__le32 *txdesc)
|
||||
+{
|
||||
+ __le16 *ptr = (__le16 *)txdesc;
|
||||
+ u16 checksum = 0;
|
||||
+ u32 index;
|
||||
+
|
||||
+ /* Clear first */
|
||||
+ set_tx_desc_tx_desc_checksum(txdesc, 0);
|
||||
+ for (index = 0; index < 16; index++)
|
||||
+ checksum = checksum ^ le16_to_cpu(*(ptr + index));
|
||||
+ set_tx_desc_tx_desc_checksum(txdesc, checksum);
|
||||
+}
|
||||
+
|
||||
+void rtl92du_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_hdr *hdr, u8 *pdesc_tx,
|
||||
+ u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
|
||||
+ struct ieee80211_sta *sta,
|
||||
+ struct sk_buff *skb,
|
||||
+ u8 queue_index,
|
||||
+ struct rtl_tcb_desc *tcb_desc)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
+ struct rtl_mac *mac = rtl_mac(rtlpriv);
|
||||
+ struct rtl_sta_info *sta_entry;
|
||||
+ __le16 fc = hdr->frame_control;
|
||||
+ u8 agg_state = RTL_AGG_STOP;
|
||||
+ u16 pktlen = skb->len;
|
||||
+ u32 rts_en, hw_rts_en;
|
||||
+ u8 ampdu_density = 0;
|
||||
+ u16 seq_number;
|
||||
+ __le32 *txdesc;
|
||||
+ u8 rate_flag;
|
||||
+ u8 tid;
|
||||
+
|
||||
+ rtl_get_tcb_desc(hw, info, sta, skb, tcb_desc);
|
||||
+
|
||||
+ txdesc = (__le32 *)skb_push(skb, RTL_TX_HEADER_SIZE);
|
||||
+ memset(txdesc, 0, RTL_TX_HEADER_SIZE);
|
||||
+
|
||||
+ set_tx_desc_pkt_size(txdesc, pktlen);
|
||||
+ set_tx_desc_linip(txdesc, 0);
|
||||
+ set_tx_desc_pkt_offset(txdesc, RTL_DUMMY_OFFSET);
|
||||
+ set_tx_desc_offset(txdesc, RTL_TX_HEADER_SIZE);
|
||||
+ /* 5G have no CCK rate */
|
||||
+ if (rtlhal->current_bandtype == BAND_ON_5G)
|
||||
+ if (tcb_desc->hw_rate < DESC_RATE6M)
|
||||
+ tcb_desc->hw_rate = DESC_RATE6M;
|
||||
+
|
||||
+ set_tx_desc_tx_rate(txdesc, tcb_desc->hw_rate);
|
||||
+ if (tcb_desc->use_shortgi || tcb_desc->use_shortpreamble)
|
||||
+ set_tx_desc_data_shortgi(txdesc, 1);
|
||||
+
|
||||
+ if (rtlhal->macphymode == DUALMAC_DUALPHY &&
|
||||
+ tcb_desc->hw_rate == DESC_RATEMCS7)
|
||||
+ set_tx_desc_data_shortgi(txdesc, 1);
|
||||
+
|
||||
+ if (sta) {
|
||||
+ sta_entry = (struct rtl_sta_info *)sta->drv_priv;
|
||||
+ tid = ieee80211_get_tid(hdr);
|
||||
+ agg_state = sta_entry->tids[tid].agg.agg_state;
|
||||
+ ampdu_density = sta->deflink.ht_cap.ampdu_density;
|
||||
+ }
|
||||
+
|
||||
+ if (agg_state == RTL_AGG_OPERATIONAL &&
|
||||
+ info->flags & IEEE80211_TX_CTL_AMPDU) {
|
||||
+ set_tx_desc_agg_enable(txdesc, 1);
|
||||
+ set_tx_desc_max_agg_num(txdesc, 0x14);
|
||||
+ set_tx_desc_ampdu_density(txdesc, ampdu_density);
|
||||
+ tcb_desc->rts_enable = 1;
|
||||
+ tcb_desc->rts_rate = DESC_RATE24M;
|
||||
+ } else {
|
||||
+ set_tx_desc_agg_break(txdesc, 1);
|
||||
+ }
|
||||
+ seq_number = (le16_to_cpu(hdr->seq_ctrl) & IEEE80211_SCTL_SEQ) >> 4;
|
||||
+ set_tx_desc_seq(txdesc, seq_number);
|
||||
+
|
||||
+ rts_en = tcb_desc->rts_enable && !tcb_desc->cts_enable;
|
||||
+ hw_rts_en = tcb_desc->rts_enable || tcb_desc->cts_enable;
|
||||
+ set_tx_desc_rts_enable(txdesc, rts_en);
|
||||
+ set_tx_desc_hw_rts_enable(txdesc, hw_rts_en);
|
||||
+ set_tx_desc_cts2self(txdesc, tcb_desc->cts_enable);
|
||||
+ set_tx_desc_rts_stbc(txdesc, tcb_desc->rts_stbc);
|
||||
+ /* 5G have no CCK rate */
|
||||
+ if (rtlhal->current_bandtype == BAND_ON_5G)
|
||||
+ if (tcb_desc->rts_rate < DESC_RATE6M)
|
||||
+ tcb_desc->rts_rate = DESC_RATE6M;
|
||||
+ set_tx_desc_rts_rate(txdesc, tcb_desc->rts_rate);
|
||||
+ set_tx_desc_rts_bw(txdesc, 0);
|
||||
+ set_tx_desc_rts_sc(txdesc, tcb_desc->rts_sc);
|
||||
+ set_tx_desc_rts_short(txdesc, tcb_desc->rts_use_shortpreamble);
|
||||
+
|
||||
+ rate_flag = info->control.rates[0].flags;
|
||||
+ if (mac->bw_40) {
|
||||
+ if (rate_flag & IEEE80211_TX_RC_DUP_DATA) {
|
||||
+ set_tx_desc_data_bw(txdesc, 1);
|
||||
+ set_tx_desc_tx_sub_carrier(txdesc, 3);
|
||||
+ } else if (rate_flag & IEEE80211_TX_RC_40_MHZ_WIDTH) {
|
||||
+ set_tx_desc_data_bw(txdesc, 1);
|
||||
+ set_tx_desc_tx_sub_carrier(txdesc, mac->cur_40_prime_sc);
|
||||
+ } else {
|
||||
+ set_tx_desc_data_bw(txdesc, 0);
|
||||
+ set_tx_desc_tx_sub_carrier(txdesc, 0);
|
||||
+ }
|
||||
+ } else {
|
||||
+ set_tx_desc_data_bw(txdesc, 0);
|
||||
+ set_tx_desc_tx_sub_carrier(txdesc, 0);
|
||||
+ }
|
||||
+
|
||||
+ if (info->control.hw_key) {
|
||||
+ struct ieee80211_key_conf *keyconf = info->control.hw_key;
|
||||
+
|
||||
+ switch (keyconf->cipher) {
|
||||
+ case WLAN_CIPHER_SUITE_WEP40:
|
||||
+ case WLAN_CIPHER_SUITE_WEP104:
|
||||
+ case WLAN_CIPHER_SUITE_TKIP:
|
||||
+ set_tx_desc_sec_type(txdesc, 0x1);
|
||||
+ break;
|
||||
+ case WLAN_CIPHER_SUITE_CCMP:
|
||||
+ set_tx_desc_sec_type(txdesc, 0x3);
|
||||
+ break;
|
||||
+ default:
|
||||
+ set_tx_desc_sec_type(txdesc, 0x0);
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ set_tx_desc_pkt_id(txdesc, 0);
|
||||
+ set_tx_desc_queue_sel(txdesc, _rtl92du_hwq_to_descq(queue_index));
|
||||
+ set_tx_desc_data_rate_fb_limit(txdesc, 0x1F);
|
||||
+ set_tx_desc_rts_rate_fb_limit(txdesc, 0xF);
|
||||
+ set_tx_desc_disable_fb(txdesc, 0);
|
||||
+ set_tx_desc_use_rate(txdesc, tcb_desc->use_driver_rate);
|
||||
+
|
||||
+ if (ieee80211_is_data_qos(fc)) {
|
||||
+ if (mac->rdg_en) {
|
||||
+ rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE,
|
||||
+ "Enable RDG function\n");
|
||||
+ set_tx_desc_rdg_enable(txdesc, 1);
|
||||
+ set_tx_desc_htc(txdesc, 1);
|
||||
+ }
|
||||
+ set_tx_desc_qos(txdesc, 1);
|
||||
+ }
|
||||
+
|
||||
+ if (rtlpriv->dm.useramask) {
|
||||
+ set_tx_desc_rate_id(txdesc, tcb_desc->ratr_index);
|
||||
+ set_tx_desc_macid(txdesc, tcb_desc->mac_id);
|
||||
+ } else {
|
||||
+ set_tx_desc_rate_id(txdesc, 0xC + tcb_desc->ratr_index);
|
||||
+ set_tx_desc_macid(txdesc, tcb_desc->ratr_index);
|
||||
+ }
|
||||
+
|
||||
+ if (!ieee80211_is_data_qos(fc) && ppsc->leisure_ps &&
|
||||
+ ppsc->fwctrl_lps) {
|
||||
+ set_tx_desc_hwseq_en(txdesc, 1);
|
||||
+ set_tx_desc_pkt_id(txdesc, 8);
|
||||
+ }
|
||||
+
|
||||
+ if (ieee80211_has_morefrags(fc))
|
||||
+ set_tx_desc_more_frag(txdesc, 1);
|
||||
+ if (is_multicast_ether_addr(ieee80211_get_DA(hdr)) ||
|
||||
+ is_broadcast_ether_addr(ieee80211_get_DA(hdr)))
|
||||
+ set_tx_desc_bmc(txdesc, 1);
|
||||
+
|
||||
+ set_tx_desc_own(txdesc, 1);
|
||||
+ set_tx_desc_last_seg(txdesc, 1);
|
||||
+ set_tx_desc_first_seg(txdesc, 1);
|
||||
+ _rtl92du_tx_desc_checksum(txdesc);
|
||||
+
|
||||
+ rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "==>\n");
|
||||
+}
|
||||
+
|
||||
+static void _rtl92du_config_out_ep(struct ieee80211_hw *hw, u8 num_out_pipe)
|
||||
+{
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
+ u16 ep_cfg;
|
||||
+
|
||||
+ rtlusb->out_queue_sel = 0;
|
||||
+ rtlusb->out_ep_nums = 0;
|
||||
+
|
||||
+ if (rtlhal->interfaceindex == 0)
|
||||
+ ep_cfg = rtl_read_word(rtlpriv, REG_USB_Queue_Select_MAC0);
|
||||
+ else
|
||||
+ ep_cfg = rtl_read_word(rtlpriv, REG_USB_Queue_Select_MAC1);
|
||||
+
|
||||
+ if (ep_cfg & 0x00f) {
|
||||
+ rtlusb->out_queue_sel |= TX_SELE_HQ;
|
||||
+ rtlusb->out_ep_nums++;
|
||||
+ }
|
||||
+ if (ep_cfg & 0x0f0) {
|
||||
+ rtlusb->out_queue_sel |= TX_SELE_NQ;
|
||||
+ rtlusb->out_ep_nums++;
|
||||
+ }
|
||||
+ if (ep_cfg & 0xf00) {
|
||||
+ rtlusb->out_queue_sel |= TX_SELE_LQ;
|
||||
+ rtlusb->out_ep_nums++;
|
||||
+ }
|
||||
+
|
||||
+ switch (num_out_pipe) {
|
||||
+ case 3:
|
||||
+ rtlusb->out_queue_sel = TX_SELE_HQ | TX_SELE_NQ | TX_SELE_LQ;
|
||||
+ rtlusb->out_ep_nums = 3;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ rtlusb->out_queue_sel = TX_SELE_HQ | TX_SELE_NQ;
|
||||
+ rtlusb->out_ep_nums = 2;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ rtlusb->out_queue_sel = TX_SELE_HQ;
|
||||
+ rtlusb->out_ep_nums = 1;
|
||||
+ break;
|
||||
+ default:
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void _rtl92du_one_out_ep_mapping(struct rtl_usb *rtlusb,
|
||||
+ struct rtl_ep_map *ep_map)
|
||||
+{
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
+}
|
||||
+
|
||||
+static void _rtl92du_two_out_ep_mapping(struct rtl_usb *rtlusb,
|
||||
+ struct rtl_ep_map *ep_map)
|
||||
+{
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
+}
|
||||
+
|
||||
+static void _rtl92du_three_out_ep_mapping(struct rtl_usb *rtlusb,
|
||||
+ struct rtl_ep_map *ep_map)
|
||||
+{
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[2];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[2];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
+}
|
||||
+
|
||||
+static int _rtl92du_out_ep_mapping(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));
|
||||
+ struct rtl_ep_map *ep_map = &rtlusb->ep_map;
|
||||
+
|
||||
+ switch (rtlusb->out_ep_nums) {
|
||||
+ case 1:
|
||||
+ _rtl92du_one_out_ep_mapping(rtlusb, ep_map);
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ _rtl92du_two_out_ep_mapping(rtlusb, ep_map);
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ _rtl92du_three_out_ep_mapping(rtlusb, ep_map);
|
||||
+ break;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+int rtl92du_endpoint_mapping(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(rtl_usbpriv(hw));
|
||||
+
|
||||
+ _rtl92du_config_out_ep(hw, rtlusb->out_ep_nums);
|
||||
+
|
||||
+ /* Normal chip with one IN and one OUT doesn't have interrupt IN EP. */
|
||||
+ if (rtlusb->out_ep_nums == 1 && rtlusb->in_ep_nums != 1)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return _rtl92du_out_ep_mapping(hw);
|
||||
+}
|
||||
+
|
||||
+u16 rtl92du_mq_to_hwq(__le16 fc, u16 mac80211_queue_index)
|
||||
+{
|
||||
+ u16 hw_queue_index;
|
||||
+
|
||||
+ if (unlikely(ieee80211_is_beacon(fc))) {
|
||||
+ hw_queue_index = RTL_TXQ_BCN;
|
||||
+ goto out;
|
||||
+ }
|
||||
+ if (ieee80211_is_mgmt(fc)) {
|
||||
+ hw_queue_index = RTL_TXQ_MGT;
|
||||
+ goto out;
|
||||
+ }
|
||||
+
|
||||
+ switch (mac80211_queue_index) {
|
||||
+ case 0:
|
||||
+ hw_queue_index = RTL_TXQ_VO;
|
||||
+ break;
|
||||
+ case 1:
|
||||
+ hw_queue_index = RTL_TXQ_VI;
|
||||
+ break;
|
||||
+ case 2:
|
||||
+ hw_queue_index = RTL_TXQ_BE;
|
||||
+ break;
|
||||
+ case 3:
|
||||
+ hw_queue_index = RTL_TXQ_BK;
|
||||
+ break;
|
||||
+ default:
|
||||
+ hw_queue_index = RTL_TXQ_BE;
|
||||
+ WARN_ONCE(true, "rtl8192du: QSLT_BE queue, skb_queue:%d\n",
|
||||
+ mac80211_queue_index);
|
||||
+ break;
|
||||
+ }
|
||||
+out:
|
||||
+ return hw_queue_index;
|
||||
+}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.h
|
||||
new file mode 100644
|
||||
index 000000000000..8c3d24622fa7
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/trx.h
|
||||
@@ -0,0 +1,60 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#ifndef __RTL92DU_TRX_H__
|
||||
+#define __RTL92DU_TRX_H__
|
||||
+
|
||||
+#define TX_SELE_HQ BIT(0) /* High Queue */
|
||||
+#define TX_SELE_LQ BIT(1) /* Low Queue */
|
||||
+#define TX_SELE_NQ BIT(2) /* Normal Queue */
|
||||
+
|
||||
+#define TX_TOTAL_PAGE_NUMBER_92DU 0xF8
|
||||
+#define TEST_PAGE_NUM_PUBQ_92DU 0x89
|
||||
+#define TX_TOTAL_PAGE_NUMBER_92D_DUAL_MAC 0x7A
|
||||
+#define NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0x5A
|
||||
+#define NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0x10
|
||||
+#define NORMAL_PAGE_NUM_LPQ_92D_DUAL_MAC 0x10
|
||||
+#define NORMAL_PAGE_NUM_NORMALQ_92D_DUAL_MAC 0
|
||||
+
|
||||
+#define WMM_NORMAL_TX_TOTAL_PAGE_NUMBER 0xF5
|
||||
+
|
||||
+#define WMM_NORMAL_PAGE_NUM_PUBQ_92D 0x65
|
||||
+#define WMM_NORMAL_PAGE_NUM_HPQ_92D 0x30
|
||||
+#define WMM_NORMAL_PAGE_NUM_LPQ_92D 0x30
|
||||
+#define WMM_NORMAL_PAGE_NUM_NPQ_92D 0x30
|
||||
+
|
||||
+#define WMM_NORMAL_PAGE_NUM_PUBQ_92D_DUAL_MAC 0x32
|
||||
+#define WMM_NORMAL_PAGE_NUM_HPQ_92D_DUAL_MAC 0x18
|
||||
+#define WMM_NORMAL_PAGE_NUM_LPQ_92D_DUAL_MAC 0x18
|
||||
+#define WMM_NORMAL_PAGE_NUM_NPQ_92D_DUAL_MAC 0x18
|
||||
+
|
||||
+static inline void set_tx_desc_bmc(__le32 *__txdesc, u32 __value)
|
||||
+{
|
||||
+ le32p_replace_bits(__txdesc, __value, BIT(24));
|
||||
+}
|
||||
+
|
||||
+static inline void set_tx_desc_agg_break(__le32 *__txdesc, u32 __value)
|
||||
+{
|
||||
+ le32p_replace_bits((__txdesc + 1), __value, BIT(6));
|
||||
+}
|
||||
+
|
||||
+static inline void set_tx_desc_tx_desc_checksum(__le32 *__txdesc, u32 __value)
|
||||
+{
|
||||
+ le32p_replace_bits((__txdesc + 7), __value, GENMASK(15, 0));
|
||||
+}
|
||||
+
|
||||
+void rtl92du_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
+ struct ieee80211_hdr *hdr, u8 *pdesc,
|
||||
+ u8 *pbd_desc_tx, struct ieee80211_tx_info *info,
|
||||
+ struct ieee80211_sta *sta,
|
||||
+ struct sk_buff *skb, u8 hw_queue,
|
||||
+ struct rtl_tcb_desc *ptcb_desc);
|
||||
+int rtl92du_endpoint_mapping(struct ieee80211_hw *hw);
|
||||
+u16 rtl92du_mq_to_hwq(__le16 fc, u16 mac80211_queue_index);
|
||||
+struct sk_buff *rtl92du_tx_aggregate_hdl(struct ieee80211_hw *hw,
|
||||
+ struct sk_buff_head *list);
|
||||
+void rtl92du_tx_cleanup(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
+int rtl92du_tx_post_hdl(struct ieee80211_hw *hw, struct urb *urb,
|
||||
+ struct sk_buff *skb);
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,282 +0,0 @@
|
||||
From f42c4cb0031563e684a66ea2e21072387d9fcc7f Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:46:51 +0300
|
||||
Subject: [PATCH 07/12] 6.11: wifi: rtlwifi: Add rtl8192du/rf.{c,h}
|
||||
|
||||
These contain one RF configuration function and some functions related
|
||||
to dual MAC operation.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/rf.c | 240 ++++++++++++++++++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/rf.h | 11 +
|
||||
2 files changed, 251 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.h
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.c
|
||||
new file mode 100644
|
||||
index 000000000000..044dd65eafd0
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.c
|
||||
@@ -0,0 +1,240 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "../rtl8192d/reg.h"
|
||||
+#include "../rtl8192d/phy_common.h"
|
||||
+#include "phy.h"
|
||||
+#include "rf.h"
|
||||
+
|
||||
+bool rtl92du_phy_enable_anotherphy(struct ieee80211_hw *hw, bool bmac0)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
|
||||
+ u8 mac_on_bit = bmac0 ? MAC1_ON : MAC0_ON;
|
||||
+ u8 mac_reg = bmac0 ? REG_MAC1 : REG_MAC0;
|
||||
+ bool bresult = true; /* true: need to enable BB/RF power */
|
||||
+ u32 maskforphyset = 0;
|
||||
+ u16 val16;
|
||||
+ u8 u1btmp;
|
||||
+
|
||||
+ rtlhal->during_mac0init_radiob = false;
|
||||
+ rtlhal->during_mac1init_radioa = false;
|
||||
+ rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "===>\n");
|
||||
+
|
||||
+ /* MAC0 Need PHY1 load radio_b.txt . Driver use DBI to write. */
|
||||
+ u1btmp = rtl_read_byte(rtlpriv, mac_reg);
|
||||
+ if (!(u1btmp & mac_on_bit)) {
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "enable BB & RF\n");
|
||||
+ /* Enable BB and RF power */
|
||||
+
|
||||
+ maskforphyset = bmac0 ? MAC0_ACCESS_PHY1 : MAC1_ACCESS_PHY0;
|
||||
+
|
||||
+ val16 = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN | maskforphyset);
|
||||
+ val16 &= 0xfffc;
|
||||
+ rtl_write_word(rtlpriv, REG_SYS_FUNC_EN | maskforphyset, val16);
|
||||
+
|
||||
+ val16 = rtl_read_word(rtlpriv, REG_SYS_FUNC_EN | maskforphyset);
|
||||
+ val16 |= BIT(13) | BIT(0) | BIT(1);
|
||||
+ rtl_write_word(rtlpriv, REG_SYS_FUNC_EN | maskforphyset, val16);
|
||||
+ } else {
|
||||
+ /* We think if MAC1 is ON,then radio_a.txt
|
||||
+ * and radio_b.txt has been load.
|
||||
+ */
|
||||
+ bresult = false;
|
||||
+ }
|
||||
+ rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<===\n");
|
||||
+ return bresult;
|
||||
+}
|
||||
+
|
||||
+void rtl92du_phy_powerdown_anotherphy(struct ieee80211_hw *hw, bool bmac0)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
|
||||
+ u8 mac_on_bit = bmac0 ? MAC1_ON : MAC0_ON;
|
||||
+ u8 mac_reg = bmac0 ? REG_MAC1 : REG_MAC0;
|
||||
+ u32 maskforphyset = 0;
|
||||
+ u8 u1btmp;
|
||||
+
|
||||
+ rtlhal->during_mac0init_radiob = false;
|
||||
+ rtlhal->during_mac1init_radioa = false;
|
||||
+ rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "====>\n");
|
||||
+
|
||||
+ /* check MAC0 enable or not again now, if
|
||||
+ * enabled, not power down radio A.
|
||||
+ */
|
||||
+ u1btmp = rtl_read_byte(rtlpriv, mac_reg);
|
||||
+ if (!(u1btmp & mac_on_bit)) {
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD, "power down\n");
|
||||
+ /* power down RF radio A according to YuNan's advice. */
|
||||
+ maskforphyset = bmac0 ? MAC0_ACCESS_PHY1 : MAC1_ACCESS_PHY0;
|
||||
+ rtl_write_dword(rtlpriv, RFPGA0_XA_LSSIPARAMETER | maskforphyset,
|
||||
+ 0x00000000);
|
||||
+ }
|
||||
+ rtl_dbg(rtlpriv, COMP_RF, DBG_LOUD, "<====\n");
|
||||
+}
|
||||
+
|
||||
+bool rtl92du_phy_rf6052_config(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ bool mac1_initradioa_first = false, mac0_initradiob_first = false;
|
||||
+ bool need_pwrdown_radioa = false, need_pwrdown_radiob = false;
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = &rtlpriv->rtlhal;
|
||||
+ struct rtl_phy *rtlphy = &rtlpriv->phy;
|
||||
+ struct bb_reg_def *pphyreg;
|
||||
+ bool true_bpath = false;
|
||||
+ bool rtstatus = true;
|
||||
+ u32 u4_regvalue = 0;
|
||||
+ u8 rfpath;
|
||||
+
|
||||
+ if (rtlphy->rf_type == RF_1T1R)
|
||||
+ rtlphy->num_total_rfpath = 1;
|
||||
+ else
|
||||
+ rtlphy->num_total_rfpath = 2;
|
||||
+
|
||||
+ /* Single phy mode: use radio_a radio_b config path_A path_B
|
||||
+ * separately by MAC0, and MAC1 needn't configure RF;
|
||||
+ * Dual PHY mode: MAC0 use radio_a config 1st phy path_A,
|
||||
+ * MAC1 use radio_b config 2nd PHY path_A.
|
||||
+ * DMDP, MAC0 on G band, MAC1 on A band.
|
||||
+ */
|
||||
+ if (rtlhal->macphymode == DUALMAC_DUALPHY) {
|
||||
+ if (rtlhal->current_bandtype == BAND_ON_2_4G &&
|
||||
+ rtlhal->interfaceindex == 0) {
|
||||
+ /* MAC0 needs PHY1 load radio_b.txt. */
|
||||
+ if (rtl92du_phy_enable_anotherphy(hw, true)) {
|
||||
+ rtlphy->num_total_rfpath = 2;
|
||||
+ mac0_initradiob_first = true;
|
||||
+ } else {
|
||||
+ /* We think if MAC1 is ON,then radio_a.txt and
|
||||
+ * radio_b.txt has been load.
|
||||
+ */
|
||||
+ return rtstatus;
|
||||
+ }
|
||||
+ } else if (rtlhal->current_bandtype == BAND_ON_5G &&
|
||||
+ rtlhal->interfaceindex == 1) {
|
||||
+ /* MAC1 needs PHY0 load radio_a.txt. */
|
||||
+ if (rtl92du_phy_enable_anotherphy(hw, false)) {
|
||||
+ rtlphy->num_total_rfpath = 2;
|
||||
+ mac1_initradioa_first = true;
|
||||
+ } else {
|
||||
+ /* We think if MAC0 is ON, then radio_a.txt and
|
||||
+ * radio_b.txt has been load.
|
||||
+ */
|
||||
+ return rtstatus;
|
||||
+ }
|
||||
+ } else if (rtlhal->interfaceindex == 1) {
|
||||
+ /* MAC0 enabled, only init radia B. */
|
||||
+ true_bpath = true;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
|
||||
+ /* Mac1 use PHY0 write */
|
||||
+ if (mac1_initradioa_first) {
|
||||
+ if (rfpath == RF90_PATH_A) {
|
||||
+ rtlhal->during_mac1init_radioa = true;
|
||||
+ need_pwrdown_radioa = true;
|
||||
+ } else if (rfpath == RF90_PATH_B) {
|
||||
+ rtlhal->during_mac1init_radioa = false;
|
||||
+ mac1_initradioa_first = false;
|
||||
+ rfpath = RF90_PATH_A;
|
||||
+ true_bpath = true;
|
||||
+ rtlphy->num_total_rfpath = 1;
|
||||
+ }
|
||||
+ } else if (mac0_initradiob_first) {
|
||||
+ /* Mac0 use PHY1 write */
|
||||
+ if (rfpath == RF90_PATH_A)
|
||||
+ rtlhal->during_mac0init_radiob = false;
|
||||
+ if (rfpath == RF90_PATH_B) {
|
||||
+ rtlhal->during_mac0init_radiob = true;
|
||||
+ mac0_initradiob_first = false;
|
||||
+ need_pwrdown_radiob = true;
|
||||
+ rfpath = RF90_PATH_A;
|
||||
+ true_bpath = true;
|
||||
+ rtlphy->num_total_rfpath = 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ pphyreg = &rtlphy->phyreg_def[rfpath];
|
||||
+
|
||||
+ switch (rfpath) {
|
||||
+ case RF90_PATH_A:
|
||||
+ case RF90_PATH_C:
|
||||
+ u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
|
||||
+ BRFSI_RFENV);
|
||||
+ break;
|
||||
+ case RF90_PATH_B:
|
||||
+ case RF90_PATH_D:
|
||||
+ u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
|
||||
+ BRFSI_RFENV << 16);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfintfe, BRFSI_RFENV << 16, 0x1);
|
||||
+ udelay(1);
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfintfo, BRFSI_RFENV, 0x1);
|
||||
+ udelay(1);
|
||||
+
|
||||
+ /* Set bit number of Address and Data for RF register */
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfhssi_para2,
|
||||
+ B3WIREADDRESSLENGTH, 0x0);
|
||||
+ udelay(1);
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREDATALENGTH, 0x0);
|
||||
+ udelay(1);
|
||||
+
|
||||
+ switch (rfpath) {
|
||||
+ case RF90_PATH_A:
|
||||
+ if (true_bpath)
|
||||
+ rtstatus = rtl92du_phy_config_rf_with_headerfile(
|
||||
+ hw, radiob_txt,
|
||||
+ (enum radio_path)rfpath);
|
||||
+ else
|
||||
+ rtstatus = rtl92du_phy_config_rf_with_headerfile(
|
||||
+ hw, radioa_txt,
|
||||
+ (enum radio_path)rfpath);
|
||||
+ break;
|
||||
+ case RF90_PATH_B:
|
||||
+ rtstatus =
|
||||
+ rtl92du_phy_config_rf_with_headerfile(hw, radiob_txt,
|
||||
+ (enum radio_path)rfpath);
|
||||
+ break;
|
||||
+ case RF90_PATH_C:
|
||||
+ break;
|
||||
+ case RF90_PATH_D:
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ switch (rfpath) {
|
||||
+ case RF90_PATH_A:
|
||||
+ case RF90_PATH_C:
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV,
|
||||
+ u4_regvalue);
|
||||
+ break;
|
||||
+ case RF90_PATH_B:
|
||||
+ case RF90_PATH_D:
|
||||
+ rtl_set_bbreg(hw, pphyreg->rfintfs, BRFSI_RFENV << 16,
|
||||
+ u4_regvalue);
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ if (!rtstatus) {
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
|
||||
+ "Radio[%d] Fail!!\n", rfpath);
|
||||
+ return rtstatus;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* check MAC0 enable or not again, if enabled,
|
||||
+ * not power down radio A.
|
||||
+ * check MAC1 enable or not again, if enabled,
|
||||
+ * not power down radio B.
|
||||
+ */
|
||||
+ if (need_pwrdown_radioa)
|
||||
+ rtl92du_phy_powerdown_anotherphy(hw, false);
|
||||
+ else if (need_pwrdown_radiob)
|
||||
+ rtl92du_phy_powerdown_anotherphy(hw, true);
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, "<---\n");
|
||||
+
|
||||
+ return rtstatus;
|
||||
+}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.h
|
||||
new file mode 100644
|
||||
index 000000000000..4a92cbdd00c0
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/rf.h
|
||||
@@ -0,0 +1,11 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#ifndef __RTL92DU_RF_H__
|
||||
+#define __RTL92DU_RF_H__
|
||||
+
|
||||
+bool rtl92du_phy_rf6052_config(struct ieee80211_hw *hw);
|
||||
+bool rtl92du_phy_enable_anotherphy(struct ieee80211_hw *hw, bool bmac0);
|
||||
+void rtl92du_phy_powerdown_anotherphy(struct ieee80211_hw *hw, bool bmac0);
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,139 +0,0 @@
|
||||
From 07d8e12d4523008675013f91d46a8a8d133a41c2 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:47:19 +0300
|
||||
Subject: [PATCH 08/12] 6.11: wifi: rtlwifi: Add rtl8192du/fw.{c,h}
|
||||
and rtl8192du/led.{c,h}
|
||||
|
||||
fw.c contains a function for loading the firmware.
|
||||
led.c contains a function for controlling the LED.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/fw.c | 63 +++++++++++++++++++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/fw.h | 9 +++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/led.c | 10 +++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/led.h | 9 +++
|
||||
4 files changed, 91 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.h
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.h
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.c
|
||||
new file mode 100644
|
||||
index 000000000000..f74e4e84fe39
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.c
|
||||
@@ -0,0 +1,63 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "../rtl8192d/reg.h"
|
||||
+#include "../rtl8192d/def.h"
|
||||
+#include "../rtl8192d/fw_common.h"
|
||||
+#include "fw.h"
|
||||
+
|
||||
+int rtl92du_download_fw(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
+ enum version_8192d version = rtlhal->version;
|
||||
+ u8 *pfwheader;
|
||||
+ u8 *pfwdata;
|
||||
+ u32 fwsize;
|
||||
+ int err;
|
||||
+
|
||||
+ if (rtlpriv->max_fw_size == 0 || !rtlhal->pfirmware)
|
||||
+ return 1;
|
||||
+
|
||||
+ fwsize = rtlhal->fwsize;
|
||||
+ pfwheader = rtlhal->pfirmware;
|
||||
+ pfwdata = rtlhal->pfirmware;
|
||||
+ rtlhal->fw_version = (u16)GET_FIRMWARE_HDR_VERSION(pfwheader);
|
||||
+ rtlhal->fw_subversion = (u16)GET_FIRMWARE_HDR_SUB_VER(pfwheader);
|
||||
+
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
+ "FirmwareVersion(%d), FirmwareSubVersion(%d), Signature(%#x)\n",
|
||||
+ rtlhal->fw_version, rtlhal->fw_subversion,
|
||||
+ GET_FIRMWARE_HDR_SIGNATURE(pfwheader));
|
||||
+
|
||||
+ if (IS_FW_HEADER_EXIST(pfwheader)) {
|
||||
+ rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
|
||||
+ "Shift 32 bytes for FW header!!\n");
|
||||
+ pfwdata = pfwdata + 32;
|
||||
+ fwsize = fwsize - 32;
|
||||
+ }
|
||||
+
|
||||
+ if (rtl92d_is_fw_downloaded(rtlpriv))
|
||||
+ goto exit;
|
||||
+
|
||||
+ /* If 8051 is running in RAM code, driver should
|
||||
+ * inform Fw to reset by itself, or it will cause
|
||||
+ * download Fw fail.
|
||||
+ */
|
||||
+ if (rtl_read_byte(rtlpriv, REG_MCUFWDL) & BIT(7)) {
|
||||
+ rtl92d_firmware_selfreset(hw);
|
||||
+ rtl_write_byte(rtlpriv, REG_MCUFWDL, 0x00);
|
||||
+ }
|
||||
+
|
||||
+ rtl92d_enable_fw_download(hw, true);
|
||||
+ rtl92d_write_fw(hw, version, pfwdata, fwsize);
|
||||
+ rtl92d_enable_fw_download(hw, false);
|
||||
+
|
||||
+ err = rtl92d_fw_free_to_go(hw);
|
||||
+ if (err)
|
||||
+ pr_err("fw is not ready to run!\n");
|
||||
+exit:
|
||||
+ err = rtl92d_fw_init(hw);
|
||||
+ return err;
|
||||
+}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.h
|
||||
new file mode 100644
|
||||
index 000000000000..7904bfbda4ba
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/fw.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#ifndef __RTL92DU_FW_H__
|
||||
+#define __RTL92DU_FW_H__
|
||||
+
|
||||
+int rtl92du_download_fw(struct ieee80211_hw *hw);
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.c
|
||||
new file mode 100644
|
||||
index 000000000000..6c12dfbd6367
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.c
|
||||
@@ -0,0 +1,10 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "led.h"
|
||||
+
|
||||
+void rtl92du_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction)
|
||||
+{
|
||||
+ /* The hardware has control. */
|
||||
+}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.h
|
||||
new file mode 100644
|
||||
index 000000000000..d7ebc8afcc7b
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/led.h
|
||||
@@ -0,0 +1,9 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#ifndef __RTL92DU_LED_H__
|
||||
+#define __RTL92DU_LED_H__
|
||||
+
|
||||
+void rtl92du_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,161 +0,0 @@
|
||||
From e4592b803eb8ff3eda15c030906cc33226cc794e Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:47:40 +0300
|
||||
Subject: [PATCH 09/12] 6.11: wifi: rtlwifi: Add rtl8192du/dm.{c,h}
|
||||
|
||||
These contain functions related to the dynamic mechanism, which runs
|
||||
every two seconds to adjust to changes in the environment.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/dm.c | 120 ++++++++++++++++++
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/dm.h | 10 ++
|
||||
2 files changed, 130 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.h
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.c
|
||||
new file mode 100644
|
||||
index 000000000000..dd57707a9184
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.c
|
||||
@@ -0,0 +1,120 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "../core.h"
|
||||
+#include "../rtl8192d/reg.h"
|
||||
+#include "../rtl8192d/def.h"
|
||||
+#include "../rtl8192d/dm_common.h"
|
||||
+#include "../rtl8192d/fw_common.h"
|
||||
+#include "dm.h"
|
||||
+
|
||||
+static void rtl92du_dm_init_1r_cca(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct ps_t *dm_pstable = &rtlpriv->dm_pstable;
|
||||
+
|
||||
+ dm_pstable->pre_ccastate = CCA_MAX;
|
||||
+ dm_pstable->cur_ccasate = CCA_MAX;
|
||||
+}
|
||||
+
|
||||
+static void rtl92du_dm_1r_cca(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct ps_t *dm_pstable = &rtlpriv->dm_pstable;
|
||||
+ struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
|
||||
+ int pwdb = rtlpriv->dm_digtable.min_undec_pwdb_for_dm;
|
||||
+
|
||||
+ if (rtlhal->macphymode != SINGLEMAC_SINGLEPHY ||
|
||||
+ rtlhal->current_bandtype != BAND_ON_5G)
|
||||
+ return;
|
||||
+
|
||||
+ if (pwdb != 0) {
|
||||
+ if (dm_pstable->pre_ccastate == CCA_2R ||
|
||||
+ dm_pstable->pre_ccastate == CCA_MAX)
|
||||
+ dm_pstable->cur_ccasate = (pwdb >= 35) ? CCA_1R : CCA_2R;
|
||||
+ else
|
||||
+ dm_pstable->cur_ccasate = (pwdb <= 30) ? CCA_2R : CCA_1R;
|
||||
+ } else {
|
||||
+ dm_pstable->cur_ccasate = CCA_MAX;
|
||||
+ }
|
||||
+
|
||||
+ if (dm_pstable->pre_ccastate == dm_pstable->cur_ccasate)
|
||||
+ return;
|
||||
+
|
||||
+ rtl_dbg(rtlpriv, COMP_BB_POWERSAVING, DBG_TRACE,
|
||||
+ "Old CCA state: %d new CCA state: %d\n",
|
||||
+ dm_pstable->pre_ccastate, dm_pstable->cur_ccasate);
|
||||
+
|
||||
+ if (dm_pstable->cur_ccasate == CCA_1R) {
|
||||
+ if (rtlpriv->phy.rf_type == RF_2T2R)
|
||||
+ rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x13);
|
||||
+ else /* Is this branch reachable? */
|
||||
+ rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x23);
|
||||
+ } else { /* CCA_2R or CCA_MAX */
|
||||
+ rtl_set_bbreg(hw, ROFDM0_TRXPATHENABLE, MASKBYTE0, 0x33);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static void rtl92du_dm_pwdb_monitor(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ const u32 max_macid = 32;
|
||||
+ u32 temp;
|
||||
+
|
||||
+ /* AP & ADHOC & MESH will return tmp */
|
||||
+ if (rtlpriv->mac80211.opmode != NL80211_IFTYPE_STATION)
|
||||
+ return;
|
||||
+
|
||||
+ /* Indicate Rx signal strength to FW. */
|
||||
+ if (rtlpriv->dm.useramask) {
|
||||
+ temp = rtlpriv->dm.undec_sm_pwdb << 16;
|
||||
+ temp |= max_macid << 8;
|
||||
+
|
||||
+ rtl92d_fill_h2c_cmd(hw, H2C_RSSI_REPORT, 3, (u8 *)(&temp));
|
||||
+ } else {
|
||||
+ rtl_write_byte(rtlpriv, 0x4fe, (u8)rtlpriv->dm.undec_sm_pwdb);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void rtl92du_dm_init(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+
|
||||
+ rtlpriv->dm.dm_type = DM_TYPE_BYDRIVER;
|
||||
+ rtl_dm_diginit(hw, 0x20);
|
||||
+ rtlpriv->dm_digtable.rx_gain_max = DM_DIG_FA_UPPER;
|
||||
+ rtlpriv->dm_digtable.rx_gain_min = DM_DIG_FA_LOWER;
|
||||
+ rtl92d_dm_init_edca_turbo(hw);
|
||||
+ rtl92du_dm_init_1r_cca(hw);
|
||||
+ rtl92d_dm_init_rate_adaptive_mask(hw);
|
||||
+ rtl92d_dm_initialize_txpower_tracking(hw);
|
||||
+}
|
||||
+
|
||||
+void rtl92du_dm_watchdog(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
|
||||
+ bool fw_current_inpsmode = false;
|
||||
+ bool fwps_awake = true;
|
||||
+
|
||||
+ /* 1. RF is OFF. (No need to do DM.)
|
||||
+ * 2. Fw is under power saving mode for FwLPS.
|
||||
+ * (Prevent from SW/FW I/O racing.)
|
||||
+ * 3. IPS workitem is scheduled. (Prevent from IPS sequence
|
||||
+ * to be swapped with DM.
|
||||
+ * 4. RFChangeInProgress is TRUE.
|
||||
+ * (Prevent from broken by IPS/HW/SW Rf off.)
|
||||
+ */
|
||||
+
|
||||
+ if (ppsc->rfpwr_state != ERFON || fw_current_inpsmode ||
|
||||
+ !fwps_awake || ppsc->rfchange_inprogress)
|
||||
+ return;
|
||||
+
|
||||
+ rtl92du_dm_pwdb_monitor(hw);
|
||||
+ rtl92d_dm_false_alarm_counter_statistics(hw);
|
||||
+ rtl92d_dm_find_minimum_rssi(hw);
|
||||
+ rtl92d_dm_dig(hw);
|
||||
+ rtl92d_dm_check_txpower_tracking_thermal_meter(hw);
|
||||
+ rtl92d_dm_check_edca_turbo(hw);
|
||||
+ rtl92du_dm_1r_cca(hw);
|
||||
+}
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.h
|
||||
new file mode 100644
|
||||
index 000000000000..2f283bf1e4d8
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/dm.h
|
||||
@@ -0,0 +1,10 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#ifndef __RTL92DU_DM_H__
|
||||
+#define __RTL92DU_DM_H__
|
||||
+
|
||||
+void rtl92du_dm_init(struct ieee80211_hw *hw);
|
||||
+void rtl92du_dm_watchdog(struct ieee80211_hw *hw);
|
||||
+
|
||||
+#endif
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,106 +0,0 @@
|
||||
From c791ad6e48ba58f4473b899ba7bf2de1d1536d17 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:48:02 +0300
|
||||
Subject: [PATCH 10/12] 6.11: wifi: rtlwifi: Constify
|
||||
rtl_hal_cfg.{ops,usb_interface_cfg} and rtl_priv.cfg
|
||||
|
||||
This allows the drivers to declare the structs rtl_hal_cfg, rtl_hal_ops,
|
||||
and rtl_hal_usbint_cfg as const.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/base.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c | 3 +--
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.h | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 6 +++---
|
||||
5 files changed, 7 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/base.c b/drivers/net/wireless/realtek/rtlwifi/base.c
|
||||
index 1a8d715b7c07..aab4605de9c4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/base.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/base.c
|
||||
@@ -2272,7 +2272,7 @@ static void rtl_c2h_content_parsing(struct ieee80211_hw *hw,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
- struct rtl_hal_ops *hal_ops = rtlpriv->cfg->ops;
|
||||
+ const struct rtl_hal_ops *hal_ops = rtlpriv->cfg->ops;
|
||||
const struct rtl_btc_ops *btc_ops = rtlpriv->btcoexist.btc_ops;
|
||||
u8 cmd_id, cmd_len;
|
||||
u8 *cmd_buf = NULL;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
index 48be7e346efc..c9b9e2bc90cc 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
@@ -53,8 +53,6 @@ static int rtl92cu_init_sw_vars(struct ieee80211_hw *hw)
|
||||
} else {
|
||||
fw_name = "rtlwifi/rtl8192cufw_TMSC.bin";
|
||||
}
|
||||
- /* provide name of alternative file */
|
||||
- rtlpriv->cfg->alt_fw_name = "rtlwifi/rtl8192cufw.bin";
|
||||
pr_info("Loading firmware %s\n", fw_name);
|
||||
rtlpriv->max_fw_size = 0x4000;
|
||||
err = request_firmware_nowait(THIS_MODULE, 1,
|
||||
@@ -160,6 +158,7 @@ static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
|
||||
|
||||
static struct rtl_hal_cfg rtl92cu_hal_cfg = {
|
||||
.name = "rtl92c_usb",
|
||||
+ .alt_fw_name = "rtlwifi/rtl8192cufw.bin",
|
||||
.ops = &rtl8192cu_hal_ops,
|
||||
.mod_params = &rtl92cu_mod_params,
|
||||
.usb_interface_cfg = &rtl92cu_interface_cfg,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
index 2ea72d9e3957..b6d300bec1e9 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
@@ -937,7 +937,7 @@ static const struct rtl_intf_ops rtl_usb_ops = {
|
||||
|
||||
int rtl_usb_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id,
|
||||
- struct rtl_hal_cfg *rtl_hal_cfg)
|
||||
+ const struct rtl_hal_cfg *rtl_hal_cfg)
|
||||
{
|
||||
int err;
|
||||
struct ieee80211_hw *hw = NULL;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.h b/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
index 12529afc0510..b66d6f9ae564 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
@@ -136,7 +136,7 @@ struct rtl_usb_priv {
|
||||
|
||||
int rtl_usb_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id,
|
||||
- struct rtl_hal_cfg *rtl92cu_hal_cfg);
|
||||
+ const struct rtl_hal_cfg *rtl92cu_hal_cfg);
|
||||
void rtl_usb_disconnect(struct usb_interface *intf);
|
||||
int rtl_usb_suspend(struct usb_interface *pusb_intf, pm_message_t message);
|
||||
int rtl_usb_resume(struct usb_interface *pusb_intf);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 2e88359ba917..940df771a764 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2383,9 +2383,9 @@ struct rtl_hal_cfg {
|
||||
bool write_readback;
|
||||
char *name;
|
||||
char *alt_fw_name;
|
||||
- struct rtl_hal_ops *ops;
|
||||
+ const struct rtl_hal_ops *ops;
|
||||
struct rtl_mod_params *mod_params;
|
||||
- struct rtl_hal_usbint_cfg *usb_interface_cfg;
|
||||
+ const struct rtl_hal_usbint_cfg *usb_interface_cfg;
|
||||
enum rtl_spec_ver spec_ver;
|
||||
|
||||
/*this map used for some registers or vars
|
||||
@@ -2734,7 +2734,7 @@ struct rtl_priv {
|
||||
/* hal_cfg : for diff cards
|
||||
* intf_ops : for diff interrface usb/pcie
|
||||
*/
|
||||
- struct rtl_hal_cfg *cfg;
|
||||
+ const struct rtl_hal_cfg *cfg;
|
||||
const struct rtl_intf_ops *intf_ops;
|
||||
|
||||
/* this var will be set by set_bit,
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,417 +0,0 @@
|
||||
From 11fc9ecc1d73fd506a3bd359bf3f8b9a94ca59df Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:48:32 +0300
|
||||
Subject: [PATCH 11/12] 6.11: wifi: rtlwifi: Add rtl8192du/sw.c
|
||||
|
||||
This contains the new module's entry point.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192du/sw.c | 395 ++++++++++++++++++
|
||||
1 file changed, 395 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
|
||||
new file mode 100644
|
||||
index 000000000000..d069a81ac617
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/sw.c
|
||||
@@ -0,0 +1,395 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/* Copyright(c) 2024 Realtek Corporation.*/
|
||||
+
|
||||
+#include "../wifi.h"
|
||||
+#include "../core.h"
|
||||
+#include "../usb.h"
|
||||
+#include "../base.h"
|
||||
+#include "../rtl8192d/reg.h"
|
||||
+#include "../rtl8192d/def.h"
|
||||
+#include "../rtl8192d/fw_common.h"
|
||||
+#include "../rtl8192d/hw_common.h"
|
||||
+#include "../rtl8192d/phy_common.h"
|
||||
+#include "../rtl8192d/trx_common.h"
|
||||
+#include "phy.h"
|
||||
+#include "dm.h"
|
||||
+#include "hw.h"
|
||||
+#include "trx.h"
|
||||
+#include "led.h"
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+
|
||||
+static struct usb_interface *rtl92du_get_other_intf(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct usb_interface *intf;
|
||||
+ struct usb_device *udev;
|
||||
+ u8 other_interfaceindex;
|
||||
+
|
||||
+ /* See SET_IEEE80211_DEV(hw, &intf->dev); in usb.c */
|
||||
+ intf = container_of_const(wiphy_dev(hw->wiphy), struct usb_interface, dev);
|
||||
+
|
||||
+ if (intf->altsetting[0].desc.bInterfaceNumber == 0)
|
||||
+ other_interfaceindex = 1;
|
||||
+ else
|
||||
+ other_interfaceindex = 0;
|
||||
+
|
||||
+ udev = interface_to_usbdev(intf);
|
||||
+
|
||||
+ return usb_ifnum_to_if(udev, other_interfaceindex);
|
||||
+}
|
||||
+
|
||||
+static int rtl92du_init_shared_data(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct usb_interface *other_intf = rtl92du_get_other_intf(hw);
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_priv *other_rtlpriv = NULL;
|
||||
+ struct ieee80211_hw *other_hw = NULL;
|
||||
+
|
||||
+ if (other_intf)
|
||||
+ other_hw = usb_get_intfdata(other_intf);
|
||||
+
|
||||
+ if (other_hw) {
|
||||
+ /* The other interface was already probed. */
|
||||
+ other_rtlpriv = rtl_priv(other_hw);
|
||||
+ rtlpriv->curveindex_2g = other_rtlpriv->curveindex_2g;
|
||||
+ rtlpriv->curveindex_5g = other_rtlpriv->curveindex_5g;
|
||||
+ rtlpriv->mutex_for_power_on_off = other_rtlpriv->mutex_for_power_on_off;
|
||||
+ rtlpriv->mutex_for_hw_init = other_rtlpriv->mutex_for_hw_init;
|
||||
+
|
||||
+ if (!rtlpriv->curveindex_2g || !rtlpriv->curveindex_5g ||
|
||||
+ !rtlpriv->mutex_for_power_on_off || !rtlpriv->mutex_for_hw_init)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* The other interface doesn't exist or was not probed yet. */
|
||||
+ rtlpriv->curveindex_2g = kcalloc(TARGET_CHNL_NUM_2G,
|
||||
+ sizeof(*rtlpriv->curveindex_2g),
|
||||
+ GFP_KERNEL);
|
||||
+ rtlpriv->curveindex_5g = kcalloc(TARGET_CHNL_NUM_5G,
|
||||
+ sizeof(*rtlpriv->curveindex_5g),
|
||||
+ GFP_KERNEL);
|
||||
+ rtlpriv->mutex_for_power_on_off =
|
||||
+ kzalloc(sizeof(*rtlpriv->mutex_for_power_on_off), GFP_KERNEL);
|
||||
+ rtlpriv->mutex_for_hw_init =
|
||||
+ kzalloc(sizeof(*rtlpriv->mutex_for_hw_init), GFP_KERNEL);
|
||||
+
|
||||
+ if (!rtlpriv->curveindex_2g || !rtlpriv->curveindex_5g ||
|
||||
+ !rtlpriv->mutex_for_power_on_off || !rtlpriv->mutex_for_hw_init) {
|
||||
+ kfree(rtlpriv->curveindex_2g);
|
||||
+ kfree(rtlpriv->curveindex_5g);
|
||||
+ kfree(rtlpriv->mutex_for_power_on_off);
|
||||
+ kfree(rtlpriv->mutex_for_hw_init);
|
||||
+ rtlpriv->curveindex_2g = NULL;
|
||||
+ rtlpriv->curveindex_5g = NULL;
|
||||
+ rtlpriv->mutex_for_power_on_off = NULL;
|
||||
+ rtlpriv->mutex_for_hw_init = NULL;
|
||||
+ return -ENOMEM;
|
||||
+ }
|
||||
+
|
||||
+ mutex_init(rtlpriv->mutex_for_power_on_off);
|
||||
+ mutex_init(rtlpriv->mutex_for_hw_init);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void rtl92du_deinit_shared_data(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct usb_interface *other_intf = rtl92du_get_other_intf(hw);
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+
|
||||
+ if (!other_intf || !usb_get_intfdata(other_intf)) {
|
||||
+ /* The other interface doesn't exist or was already disconnected. */
|
||||
+ kfree(rtlpriv->curveindex_2g);
|
||||
+ kfree(rtlpriv->curveindex_5g);
|
||||
+ if (rtlpriv->mutex_for_power_on_off)
|
||||
+ mutex_destroy(rtlpriv->mutex_for_power_on_off);
|
||||
+ if (rtlpriv->mutex_for_hw_init)
|
||||
+ mutex_destroy(rtlpriv->mutex_for_hw_init);
|
||||
+ kfree(rtlpriv->mutex_for_power_on_off);
|
||||
+ kfree(rtlpriv->mutex_for_hw_init);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int rtl92du_init_sw_vars(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ const char *fw_name = "rtlwifi/rtl8192dufw.bin";
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ int err;
|
||||
+
|
||||
+ err = rtl92du_init_shared_data(hw);
|
||||
+ if (err)
|
||||
+ return err;
|
||||
+
|
||||
+ rtlpriv->dm.dm_initialgain_enable = true;
|
||||
+ rtlpriv->dm.dm_flag = 0;
|
||||
+ rtlpriv->dm.disable_framebursting = false;
|
||||
+ rtlpriv->dm.thermalvalue = 0;
|
||||
+ rtlpriv->dm.useramask = true;
|
||||
+
|
||||
+ /* dual mac */
|
||||
+ if (rtlpriv->rtlhal.current_bandtype == BAND_ON_5G)
|
||||
+ rtlpriv->phy.current_channel = 36;
|
||||
+ else
|
||||
+ rtlpriv->phy.current_channel = 1;
|
||||
+
|
||||
+ if (rtlpriv->rtlhal.macphymode != SINGLEMAC_SINGLEPHY)
|
||||
+ rtlpriv->rtlhal.disable_amsdu_8k = true;
|
||||
+
|
||||
+ /* for LPS & IPS */
|
||||
+ rtlpriv->psc.inactiveps = rtlpriv->cfg->mod_params->inactiveps;
|
||||
+ rtlpriv->psc.swctrl_lps = rtlpriv->cfg->mod_params->swctrl_lps;
|
||||
+ rtlpriv->psc.fwctrl_lps = rtlpriv->cfg->mod_params->fwctrl_lps;
|
||||
+
|
||||
+ /* for early mode */
|
||||
+ rtlpriv->rtlhal.earlymode_enable = false;
|
||||
+
|
||||
+ /* for firmware buf */
|
||||
+ rtlpriv->rtlhal.pfirmware = kmalloc(0x8000, GFP_KERNEL);
|
||||
+ if (!rtlpriv->rtlhal.pfirmware)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ rtlpriv->max_fw_size = 0x8000;
|
||||
+ pr_info("Driver for Realtek RTL8192DU WLAN interface\n");
|
||||
+ pr_info("Loading firmware file %s\n", fw_name);
|
||||
+
|
||||
+ /* request fw */
|
||||
+ err = request_firmware_nowait(THIS_MODULE, 1, fw_name,
|
||||
+ rtlpriv->io.dev, GFP_KERNEL, hw,
|
||||
+ rtl_fw_cb);
|
||||
+ if (err) {
|
||||
+ pr_err("Failed to request firmware!\n");
|
||||
+ kfree(rtlpriv->rtlhal.pfirmware);
|
||||
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||||
+ return err;
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static void rtl92du_deinit_sw_vars(struct ieee80211_hw *hw)
|
||||
+{
|
||||
+ struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+
|
||||
+ kfree(rtlpriv->rtlhal.pfirmware);
|
||||
+ rtlpriv->rtlhal.pfirmware = NULL;
|
||||
+
|
||||
+ rtl92du_deinit_shared_data(hw);
|
||||
+}
|
||||
+
|
||||
+static const struct rtl_hal_ops rtl8192du_hal_ops = {
|
||||
+ .init_sw_vars = rtl92du_init_sw_vars,
|
||||
+ .deinit_sw_vars = rtl92du_deinit_sw_vars,
|
||||
+ .read_chip_version = rtl92du_read_chip_version,
|
||||
+ .read_eeprom_info = rtl92d_read_eeprom_info,
|
||||
+ .hw_init = rtl92du_hw_init,
|
||||
+ .hw_disable = rtl92du_card_disable,
|
||||
+ .enable_interrupt = rtl92du_enable_interrupt,
|
||||
+ .disable_interrupt = rtl92du_disable_interrupt,
|
||||
+ .set_network_type = rtl92du_set_network_type,
|
||||
+ .set_chk_bssid = rtl92du_set_check_bssid,
|
||||
+ .set_qos = rtl92d_set_qos,
|
||||
+ .set_bcn_reg = rtl92du_set_beacon_related_registers,
|
||||
+ .set_bcn_intv = rtl92du_set_beacon_interval,
|
||||
+ .update_interrupt_mask = rtl92du_update_interrupt_mask,
|
||||
+ .get_hw_reg = rtl92du_get_hw_reg,
|
||||
+ .set_hw_reg = rtl92du_set_hw_reg,
|
||||
+ .update_rate_tbl = rtl92d_update_hal_rate_tbl,
|
||||
+ .fill_tx_desc = rtl92du_tx_fill_desc,
|
||||
+ .query_rx_desc = rtl92d_rx_query_desc,
|
||||
+ .set_channel_access = rtl92d_update_channel_access_setting,
|
||||
+ .radio_onoff_checking = rtl92d_gpio_radio_on_off_checking,
|
||||
+ .set_bw_mode = rtl92du_phy_set_bw_mode,
|
||||
+ .switch_channel = rtl92du_phy_sw_chnl,
|
||||
+ .dm_watchdog = rtl92du_dm_watchdog,
|
||||
+ .scan_operation_backup = rtl_phy_scan_operation_backup,
|
||||
+ .set_rf_power_state = rtl92du_phy_set_rf_power_state,
|
||||
+ .led_control = rtl92du_led_control,
|
||||
+ .set_desc = rtl92d_set_desc,
|
||||
+ .get_desc = rtl92d_get_desc,
|
||||
+ .enable_hw_sec = rtl92d_enable_hw_security_config,
|
||||
+ .set_key = rtl92d_set_key,
|
||||
+ .get_bbreg = rtl92du_phy_query_bb_reg,
|
||||
+ .set_bbreg = rtl92du_phy_set_bb_reg,
|
||||
+ .get_rfreg = rtl92d_phy_query_rf_reg,
|
||||
+ .set_rfreg = rtl92d_phy_set_rf_reg,
|
||||
+ .linked_set_reg = rtl92du_linked_set_reg,
|
||||
+ .fill_h2c_cmd = rtl92d_fill_h2c_cmd,
|
||||
+ .get_btc_status = rtl_btc_status_false,
|
||||
+ .phy_iq_calibrate = rtl92du_phy_iq_calibrate,
|
||||
+ .phy_lc_calibrate = rtl92du_phy_lc_calibrate,
|
||||
+};
|
||||
+
|
||||
+static struct rtl_mod_params rtl92du_mod_params = {
|
||||
+ .sw_crypto = false,
|
||||
+ .inactiveps = false,
|
||||
+ .swctrl_lps = false,
|
||||
+ .debug_level = 0,
|
||||
+ .debug_mask = 0,
|
||||
+};
|
||||
+
|
||||
+static const struct rtl_hal_usbint_cfg rtl92du_interface_cfg = {
|
||||
+ /* rx */
|
||||
+ .rx_urb_num = 8,
|
||||
+ .rx_max_size = 15360,
|
||||
+ .usb_rx_hdl = NULL,
|
||||
+ .usb_rx_segregate_hdl = NULL,
|
||||
+ /* tx */
|
||||
+ .usb_tx_cleanup = rtl92du_tx_cleanup,
|
||||
+ .usb_tx_post_hdl = rtl92du_tx_post_hdl,
|
||||
+ .usb_tx_aggregate_hdl = rtl92du_tx_aggregate_hdl,
|
||||
+ .usb_endpoint_mapping = rtl92du_endpoint_mapping,
|
||||
+ .usb_mq_to_hwq = rtl92du_mq_to_hwq,
|
||||
+};
|
||||
+
|
||||
+static const struct rtl_hal_cfg rtl92du_hal_cfg = {
|
||||
+ .name = "rtl8192du",
|
||||
+ .ops = &rtl8192du_hal_ops,
|
||||
+ .mod_params = &rtl92du_mod_params,
|
||||
+ .usb_interface_cfg = &rtl92du_interface_cfg,
|
||||
+
|
||||
+ .maps[SYS_ISO_CTRL] = REG_SYS_ISO_CTRL,
|
||||
+ .maps[SYS_FUNC_EN] = REG_SYS_FUNC_EN,
|
||||
+ .maps[SYS_CLK] = REG_SYS_CLKR,
|
||||
+ .maps[MAC_RCR_AM] = RCR_AM,
|
||||
+ .maps[MAC_RCR_AB] = RCR_AB,
|
||||
+ .maps[MAC_RCR_ACRC32] = RCR_ACRC32,
|
||||
+ .maps[MAC_RCR_ACF] = RCR_ACF,
|
||||
+ .maps[MAC_RCR_AAP] = RCR_AAP,
|
||||
+
|
||||
+ .maps[EFUSE_TEST] = REG_EFUSE_TEST,
|
||||
+ .maps[EFUSE_ACCESS] = REG_EFUSE_ACCESS,
|
||||
+ .maps[EFUSE_CTRL] = REG_EFUSE_CTRL,
|
||||
+ .maps[EFUSE_CLK] = 0, /* just for 92se */
|
||||
+ .maps[EFUSE_CLK_CTRL] = REG_EFUSE_CTRL,
|
||||
+ .maps[EFUSE_PWC_EV12V] = PWC_EV12V,
|
||||
+ .maps[EFUSE_FEN_ELDR] = FEN_ELDR,
|
||||
+ .maps[EFUSE_LOADER_CLK_EN] = 0,
|
||||
+ .maps[EFUSE_ANA8M] = 0, /* just for 92se */
|
||||
+ .maps[EFUSE_HWSET_MAX_SIZE] = HWSET_MAX_SIZE,
|
||||
+ .maps[EFUSE_MAX_SECTION_MAP] = EFUSE_MAX_SECTION,
|
||||
+ .maps[EFUSE_REAL_CONTENT_SIZE] = EFUSE_REAL_CONTENT_LEN,
|
||||
+
|
||||
+ .maps[RWCAM] = REG_CAMCMD,
|
||||
+ .maps[WCAMI] = REG_CAMWRITE,
|
||||
+ .maps[RCAMO] = REG_CAMREAD,
|
||||
+ .maps[CAMDBG] = REG_CAMDBG,
|
||||
+ .maps[SECR] = REG_SECCFG,
|
||||
+ .maps[SEC_CAM_NONE] = CAM_NONE,
|
||||
+ .maps[SEC_CAM_WEP40] = CAM_WEP40,
|
||||
+ .maps[SEC_CAM_TKIP] = CAM_TKIP,
|
||||
+ .maps[SEC_CAM_AES] = CAM_AES,
|
||||
+ .maps[SEC_CAM_WEP104] = CAM_WEP104,
|
||||
+
|
||||
+ .maps[RTL_IMR_BCNDMAINT6] = IMR_BCNDMAINT6,
|
||||
+ .maps[RTL_IMR_BCNDMAINT5] = IMR_BCNDMAINT5,
|
||||
+ .maps[RTL_IMR_BCNDMAINT4] = IMR_BCNDMAINT4,
|
||||
+ .maps[RTL_IMR_BCNDMAINT3] = IMR_BCNDMAINT3,
|
||||
+ .maps[RTL_IMR_BCNDMAINT2] = IMR_BCNDMAINT2,
|
||||
+ .maps[RTL_IMR_BCNDMAINT1] = IMR_BCNDMAINT1,
|
||||
+ .maps[RTL_IMR_BCNDOK8] = IMR_BCNDOK8,
|
||||
+ .maps[RTL_IMR_BCNDOK7] = IMR_BCNDOK7,
|
||||
+ .maps[RTL_IMR_BCNDOK6] = IMR_BCNDOK6,
|
||||
+ .maps[RTL_IMR_BCNDOK5] = IMR_BCNDOK5,
|
||||
+ .maps[RTL_IMR_BCNDOK4] = IMR_BCNDOK4,
|
||||
+ .maps[RTL_IMR_BCNDOK3] = IMR_BCNDOK3,
|
||||
+ .maps[RTL_IMR_BCNDOK2] = IMR_BCNDOK2,
|
||||
+ .maps[RTL_IMR_BCNDOK1] = IMR_BCNDOK1,
|
||||
+ .maps[RTL_IMR_TIMEOUT2] = IMR_TIMEOUT2,
|
||||
+ .maps[RTL_IMR_TIMEOUT1] = IMR_TIMEOUT1,
|
||||
+
|
||||
+ .maps[RTL_IMR_TXFOVW] = IMR_TXFOVW,
|
||||
+ .maps[RTL_IMR_PSTIMEOUT] = IMR_PSTIMEOUT,
|
||||
+ .maps[RTL_IMR_BCNINT] = IMR_BCNINT,
|
||||
+ .maps[RTL_IMR_RXFOVW] = IMR_RXFOVW,
|
||||
+ .maps[RTL_IMR_RDU] = IMR_RDU,
|
||||
+ .maps[RTL_IMR_ATIMEND] = IMR_ATIMEND,
|
||||
+ .maps[RTL_IMR_BDOK] = IMR_BDOK,
|
||||
+ .maps[RTL_IMR_MGNTDOK] = IMR_MGNTDOK,
|
||||
+ .maps[RTL_IMR_TBDER] = IMR_TBDER,
|
||||
+ .maps[RTL_IMR_HIGHDOK] = IMR_HIGHDOK,
|
||||
+ .maps[RTL_IMR_TBDOK] = IMR_TBDOK,
|
||||
+ .maps[RTL_IMR_BKDOK] = IMR_BKDOK,
|
||||
+ .maps[RTL_IMR_BEDOK] = IMR_BEDOK,
|
||||
+ .maps[RTL_IMR_VIDOK] = IMR_VIDOK,
|
||||
+ .maps[RTL_IMR_VODOK] = IMR_VODOK,
|
||||
+ .maps[RTL_IMR_ROK] = IMR_ROK,
|
||||
+ .maps[RTL_IBSS_INT_MASKS] = (IMR_BCNINT | IMR_TBDOK | IMR_TBDER),
|
||||
+
|
||||
+ .maps[RTL_RC_CCK_RATE1M] = DESC_RATE1M,
|
||||
+ .maps[RTL_RC_CCK_RATE2M] = DESC_RATE2M,
|
||||
+ .maps[RTL_RC_CCK_RATE5_5M] = DESC_RATE5_5M,
|
||||
+ .maps[RTL_RC_CCK_RATE11M] = DESC_RATE11M,
|
||||
+ .maps[RTL_RC_OFDM_RATE6M] = DESC_RATE6M,
|
||||
+ .maps[RTL_RC_OFDM_RATE9M] = DESC_RATE9M,
|
||||
+ .maps[RTL_RC_OFDM_RATE12M] = DESC_RATE12M,
|
||||
+ .maps[RTL_RC_OFDM_RATE18M] = DESC_RATE18M,
|
||||
+ .maps[RTL_RC_OFDM_RATE24M] = DESC_RATE24M,
|
||||
+ .maps[RTL_RC_OFDM_RATE36M] = DESC_RATE36M,
|
||||
+ .maps[RTL_RC_OFDM_RATE48M] = DESC_RATE48M,
|
||||
+ .maps[RTL_RC_OFDM_RATE54M] = DESC_RATE54M,
|
||||
+
|
||||
+ .maps[RTL_RC_HT_RATEMCS7] = DESC_RATEMCS7,
|
||||
+ .maps[RTL_RC_HT_RATEMCS15] = DESC_RATEMCS15,
|
||||
+};
|
||||
+
|
||||
+module_param_named(swenc, rtl92du_mod_params.sw_crypto, bool, 0444);
|
||||
+module_param_named(debug_level, rtl92du_mod_params.debug_level, int, 0644);
|
||||
+module_param_named(ips, rtl92du_mod_params.inactiveps, bool, 0444);
|
||||
+module_param_named(swlps, rtl92du_mod_params.swctrl_lps, bool, 0444);
|
||||
+module_param_named(debug_mask, rtl92du_mod_params.debug_mask, ullong, 0644);
|
||||
+MODULE_PARM_DESC(swenc, "Set to 1 for software crypto (default 0)\n");
|
||||
+MODULE_PARM_DESC(ips, "Set to 0 to not use link power save (default 0)\n");
|
||||
+MODULE_PARM_DESC(swlps, "Set to 1 to use SW control power save (default 0)\n");
|
||||
+MODULE_PARM_DESC(debug_level, "Set debug level (0-5) (default 0)");
|
||||
+MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
|
||||
+
|
||||
+#define USB_VENDOR_ID_REALTEK 0x0bda
|
||||
+
|
||||
+static const struct usb_device_id rtl8192d_usb_ids[] = {
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0x8193, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0x8194, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0x8111, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0x0193, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0x8171, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(USB_VENDOR_ID_REALTEK, 0xe194, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x2019, 0xab2c, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x2019, 0xab2d, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x2019, 0x4903, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x2019, 0x4904, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x07b8, 0x8193, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x20f4, 0x664b, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x04dd, 0x954f, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x04dd, 0x96a6, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x050d, 0x110a, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x050d, 0x1105, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x050d, 0x120a, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x1668, 0x8102, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x0930, 0x0a0a, rtl92du_hal_cfg)},
|
||||
+ {RTL_USB_DEVICE(0x2001, 0x330c, rtl92du_hal_cfg)},
|
||||
+ {}
|
||||
+};
|
||||
+
|
||||
+MODULE_DEVICE_TABLE(usb, rtl8192d_usb_ids);
|
||||
+
|
||||
+static int rtl8192du_probe(struct usb_interface *intf,
|
||||
+ const struct usb_device_id *id)
|
||||
+{
|
||||
+ return rtl_usb_probe(intf, id, &rtl92du_hal_cfg);
|
||||
+}
|
||||
+
|
||||
+static struct usb_driver rtl8192du_driver = {
|
||||
+ .name = "rtl8192du",
|
||||
+ .probe = rtl8192du_probe,
|
||||
+ .disconnect = rtl_usb_disconnect,
|
||||
+ .id_table = rtl8192d_usb_ids,
|
||||
+ .disable_hub_initiated_lpm = 1,
|
||||
+};
|
||||
+
|
||||
+module_usb_driver(rtl8192du_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
|
||||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DESCRIPTION("Realtek 8192DU 802.11n Dual Mac USB wireless");
|
||||
+MODULE_FIRMWARE("rtlwifi/rtl8192dufw.bin");
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,92 +0,0 @@
|
||||
From da2287b41888e02866f1416caa36c148c5723f8b Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 23 May 2024 17:49:00 +0300
|
||||
Subject: [PATCH 12/12] 6.11: wifi: rtlwifi: Enable the new rtl8192du
|
||||
driver
|
||||
|
||||
The RTL8192DU is an older Wifi 4 dual band chip. It comes in two
|
||||
flavours: single MAC single PHY (like most Realtek Wifi 4 USB devices),
|
||||
and dual MAC dual PHY.
|
||||
|
||||
The single MAC single PHY version is 2T2R and can work either in the
|
||||
2.4 GHz band or the 5 GHz band.
|
||||
|
||||
The dual MAC dual PHY version has two USB interfaces and appears to the
|
||||
system as two separate 1T1R Wifi devices, one working in the 2.4 GHz
|
||||
band, the other in the 5 GHz band.
|
||||
|
||||
This was tested only with a single MAC single PHY device, mostly in
|
||||
station mode. The speeds in the 2.4 GHz band with 20 MHz channel width
|
||||
are similar to the out-of-tree driver: 85/51 megabits/second.
|
||||
|
||||
Stefan Lippers-Hollmann tested the speed in the 5 GHz band with 40 MHz
|
||||
channel width: 173/99 megabits/second.
|
||||
|
||||
It was also tested briefly in AP mode. It's emitting beacons and my
|
||||
phone can connect to it.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/Kconfig | 12 ++++++++++++
|
||||
drivers/net/wireless/realtek/rtlwifi/Makefile | 1 +
|
||||
.../net/wireless/realtek/rtlwifi/rtl8192du/Makefile | 13 +++++++++++++
|
||||
3 files changed, 26 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtlwifi/rtl8192du/Makefile
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/Kconfig b/drivers/net/wireless/realtek/rtlwifi/Kconfig
|
||||
index cfe63f7b28d9..1e66c1bf7c8b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/Kconfig
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/Kconfig
|
||||
@@ -119,6 +119,18 @@ config RTL8192CU
|
||||
|
||||
If you choose to build it as a module, it will be called rtl8192cu
|
||||
|
||||
+config RTL8192DU
|
||||
+ tristate "Realtek RTL8192DU USB Wireless Network Adapter"
|
||||
+ depends on USB
|
||||
+ select RTLWIFI
|
||||
+ select RTLWIFI_USB
|
||||
+ select RTL8192D_COMMON
|
||||
+ help
|
||||
+ This is the driver for Realtek RTL8192DU 802.11n USB
|
||||
+ wireless network adapters.
|
||||
+
|
||||
+ If you choose to build it as a module, it will be called rtl8192du
|
||||
+
|
||||
config RTLWIFI
|
||||
tristate
|
||||
select FW_LOADER
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/Makefile b/drivers/net/wireless/realtek/rtlwifi/Makefile
|
||||
index 423981b148df..9cf32277c7f1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/Makefile
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/Makefile
|
||||
@@ -25,6 +25,7 @@ obj-$(CONFIG_RTL8192CU) += rtl8192cu/
|
||||
obj-$(CONFIG_RTL8192SE) += rtl8192se/
|
||||
obj-$(CONFIG_RTL8192D_COMMON) += rtl8192d/
|
||||
obj-$(CONFIG_RTL8192DE) += rtl8192de/
|
||||
+obj-$(CONFIG_RTL8192DU) += rtl8192du/
|
||||
obj-$(CONFIG_RTL8723AE) += rtl8723ae/
|
||||
obj-$(CONFIG_RTL8723BE) += rtl8723be/
|
||||
obj-$(CONFIG_RTL8188EE) += rtl8188ee/
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192du/Makefile b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..569bfd3d5030
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192du/Makefile
|
||||
@@ -0,0 +1,13 @@
|
||||
+# SPDX-License-Identifier: GPL-2.0
|
||||
+rtl8192du-objs := \
|
||||
+ dm.o \
|
||||
+ fw.o \
|
||||
+ hw.o \
|
||||
+ led.o \
|
||||
+ phy.o \
|
||||
+ rf.o \
|
||||
+ sw.o \
|
||||
+ table.o \
|
||||
+ trx.o
|
||||
+
|
||||
+obj-$(CONFIG_RTL8192DU) += rtl8192du.o
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,164 +0,0 @@
|
||||
From d7dd13ea54af8496aca2762a758d817d6813e81c Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Sun, 16 Jun 2024 22:27:34 +0300
|
||||
Subject: [PATCH] wifi: rtw88: usb: Further limit the TX aggregation
|
||||
|
||||
Currently the number of frames sent to the chip in a single USB Request
|
||||
Block is limited only by the size of the TX buffer, which is 20 KiB.
|
||||
Testing reveals that as many as 13 frames get aggregated. This is more
|
||||
than what any of the chips would like to receive. RTL8822CU, RTL8822BU,
|
||||
and RTL8821CU want at most 3 frames, and RTL8723DU wants only 1 frame
|
||||
per URB.
|
||||
|
||||
RTL8723DU in particular reliably malfunctions during a speed test if it
|
||||
receives more than 1 frame per URB. All traffic seems to stop. Pinging
|
||||
the AP no longer works.
|
||||
|
||||
Fix this problem by limiting the number of frames sent to the chip in a
|
||||
single URB according to what each chip likes.
|
||||
|
||||
Also configure RTL8822CU, RTL8822BU, and RTL8821CU to expect 3 frames
|
||||
per URB.
|
||||
|
||||
RTL8703B may or may not be found in USB devices. Declare that it wants
|
||||
only 1 frame per URB, just in case.
|
||||
|
||||
Tested with RTL8723DU and RTL8811CU.
|
||||
|
||||
Cc: stable@vger.kernel.org
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/cb46ea35-7e59-4742-9c1f-01ceeaad36fb@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 9 +++++++++
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 4 +++-
|
||||
9 files changed, 20 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
index 0dba8aae771603..564f5988ee82a7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -1201,6 +1201,15 @@ static int __priority_queue_cfg(struct rtw_dev *rtwdev,
|
||||
rtw_write16(rtwdev, REG_FIFOPAGE_CTRL_2 + 2, fifo->rsvd_boundary);
|
||||
rtw_write16(rtwdev, REG_BCNQ1_BDNY_V1, fifo->rsvd_boundary);
|
||||
rtw_write32(rtwdev, REG_RXFF_BNDY, chip->rxff_size - C2H_PKT_BUF - 1);
|
||||
+
|
||||
+ if (rtwdev->hci.type == RTW_HCI_TYPE_USB) {
|
||||
+ rtw_write8_mask(rtwdev, REG_AUTO_LLT_V1, BIT_MASK_BLK_DESC_NUM,
|
||||
+ chip->usb_tx_agg_desc_num);
|
||||
+
|
||||
+ rtw_write8(rtwdev, REG_AUTO_LLT_V1 + 3, chip->usb_tx_agg_desc_num);
|
||||
+ rtw_write8_set(rtwdev, REG_TXDMA_OFFSET_CHK + 1, BIT(1));
|
||||
+ }
|
||||
+
|
||||
rtw_write8_set(rtwdev, REG_AUTO_LLT_V1, BIT_AUTO_INIT_LLT_V1);
|
||||
|
||||
if (!check_hw_ready(rtwdev, REG_AUTO_LLT_V1, BIT_AUTO_INIT_LLT_V1, 0))
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 49894331f7b495..49a3fd4fb7dcdc 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1197,6 +1197,8 @@ struct rtw_chip_info {
|
||||
u16 fw_fifo_addr[RTW_FW_FIFO_MAX];
|
||||
const struct rtw_fwcd_segs *fwcd_segs;
|
||||
|
||||
+ u8 usb_tx_agg_desc_num;
|
||||
+
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
bool path_div_supported;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index b122f226924be5..02ef9a77316b48 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -270,6 +270,7 @@
|
||||
#define BIT_MASK_BCN_HEAD_1_V1 0xfff
|
||||
#define REG_AUTO_LLT_V1 0x0208
|
||||
#define BIT_AUTO_INIT_LLT_V1 BIT(0)
|
||||
+#define BIT_MASK_BLK_DESC_NUM GENMASK(7, 4)
|
||||
#define REG_DWBCN0_CTRL 0x0208
|
||||
#define BIT_BCN_VALID BIT(16)
|
||||
#define REG_TXDMA_OFFSET_CHK 0x020C
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index 8919f9e11f0378..222608de33cdec 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -2013,6 +2013,7 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
||||
.tx_stbc = false,
|
||||
.max_power_index = 0x3f,
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
+ .usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
|
||||
.path_div_supported = false,
|
||||
.ht_supported = true,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.c b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
index f8df4c84d39f73..3fba4054d45f49 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2171,6 +2171,7 @@ const struct rtw_chip_info rtw8723d_hw_spec = {
|
||||
.band = RTW_BAND_2G,
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
+ .usb_tx_agg_desc_num = 1,
|
||||
.ht_supported = true,
|
||||
.vht_supported = false,
|
||||
.lps_deep_mode_supported = 0,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
index fe5d8e18835093..526e8de77b3e82 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -2008,6 +2008,7 @@ const struct rtw_chip_info rtw8821c_hw_spec = {
|
||||
.band = RTW_BAND_2G | RTW_BAND_5G,
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
+ .usb_tx_agg_desc_num = 3,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
index 3017a9760da8dc..2456ff24281801 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2548,6 +2548,7 @@ const struct rtw_chip_info rtw8822b_hw_spec = {
|
||||
.band = RTW_BAND_2G | RTW_BAND_5G,
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
+ .usb_tx_agg_desc_num = 3,
|
||||
.ht_supported = true,
|
||||
.vht_supported = true,
|
||||
.lps_deep_mode_supported = BIT(LPS_DEEP_MODE_LCLK),
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
index cd965edc29cea3..62376d1cca22fc 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5366,6 +5366,7 @@ const struct rtw_chip_info rtw8822c_hw_spec = {
|
||||
.band = RTW_BAND_2G | RTW_BAND_5G,
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
+ .usb_tx_agg_desc_num = 3,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index d204d138afe298..057c0ffbe94472 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -379,7 +379,9 @@ static bool rtw_usb_tx_agg_skb(struct rtw_usb *rtwusb, struct sk_buff_head *list
|
||||
|
||||
skb_iter = skb_peek(list);
|
||||
|
||||
- if (skb_iter && skb_iter->len + skb_head->len <= RTW_USB_MAX_XMITBUF_SZ)
|
||||
+ if (skb_iter &&
|
||||
+ skb_iter->len + skb_head->len <= RTW_USB_MAX_XMITBUF_SZ &&
|
||||
+ agg_num < rtwdev->chip->usb_tx_agg_desc_num)
|
||||
__skb_unlink(skb_iter, list);
|
||||
else
|
||||
skb_iter = NULL;
|
@ -1,51 +0,0 @@
|
||||
From a892f6ffbec7a1a25c639534bee62200418242f9 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Fri, 3 May 2024 13:53:28 +0300
|
||||
Subject: [PATCH] wifi: rtw88: usb: Simplify rtw_usb_write_data
|
||||
|
||||
The skb created in this function always has the same headroom,
|
||||
the chip's TX descriptor size. (pkt_info->offset is set by
|
||||
rtw_usb_write_data_rsvd_page() to chip->tx_pkt_desc_sz.) Use
|
||||
chip->tx_pkt_desc_sz directly.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://msgid.link/2479507e-3946-492f-857e-83e54969aad2@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index a0188511099a1b..90afeefe002f37 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -433,23 +433,21 @@ static int rtw_usb_write_data(struct rtw_dev *rtwdev,
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct sk_buff *skb;
|
||||
- unsigned int desclen, headsize, size;
|
||||
+ unsigned int size;
|
||||
u8 qsel;
|
||||
int ret = 0;
|
||||
|
||||
size = pkt_info->tx_pkt_size;
|
||||
qsel = pkt_info->qsel;
|
||||
- desclen = chip->tx_pkt_desc_sz;
|
||||
- headsize = pkt_info->offset ? pkt_info->offset : desclen;
|
||||
|
||||
- skb = dev_alloc_skb(headsize + size);
|
||||
+ skb = dev_alloc_skb(chip->tx_pkt_desc_sz + size);
|
||||
if (unlikely(!skb))
|
||||
return -ENOMEM;
|
||||
|
||||
- skb_reserve(skb, headsize);
|
||||
+ skb_reserve(skb, chip->tx_pkt_desc_sz);
|
||||
skb_put_data(skb, buf, size);
|
||||
- skb_push(skb, headsize);
|
||||
- memset(skb->data, 0, headsize);
|
||||
+ skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
+ memset(skb->data, 0, chip->tx_pkt_desc_sz);
|
||||
rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
|
@ -1,303 +0,0 @@
|
||||
From 3c64d161a450d62330ad79d2b5f92c115b11622d Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 11 Jul 2024 01:11:33 +0300
|
||||
Subject: [PATCH 1/7] wifi: rtw88: usb: Support USB 3 with RTL8822CU/RTL8822BU
|
||||
|
||||
The Realtek wifi 5 devices which support USB 3 are weird: when first
|
||||
plugged in, they pretend to be USB 2. The driver needs to send some
|
||||
commands to the device, which make it disappear and come back as a
|
||||
USB 3 device.
|
||||
|
||||
Implement the required commands in rtw88.
|
||||
|
||||
When a USB 3 device is plugged into a USB 2 port, rtw88 will try to
|
||||
switch it to USB 3 mode only once. The device will disappear and come
|
||||
back still in USB 2 mode, of course.
|
||||
|
||||
Some people experience heavy interference in the 2.4 GHz band in
|
||||
USB 3 mode, so add a module parameter switch_usb_mode with the
|
||||
default value 1 to let people disable the switching.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/77906c62-5674-426f-bde1-1b2a12a0339d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/debug.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 +
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 11 +++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 4 +-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.h | 24 +++---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 84 +++++++++++++++++++
|
||||
8 files changed, 116 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/debug.h b/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
index eb69006c463e..9a1e0e85a13c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
@@ -25,6 +25,7 @@ enum rtw_debug_mask {
|
||||
RTW_DBG_HW_SCAN = 0x00010000,
|
||||
RTW_DBG_STATE = 0x00020000,
|
||||
RTW_DBG_SDIO = 0x00040000,
|
||||
+ RTW_DBG_USB = 0x00080000,
|
||||
|
||||
RTW_DBG_UNEXP = 0x80000000,
|
||||
RTW_DBG_ALL = 0xffffffff
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 49a3fd4fb7dc..9d21637cf5d5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1785,6 +1785,8 @@ struct rtw_efuse {
|
||||
bool share_ant;
|
||||
u8 bt_setting;
|
||||
|
||||
+ u8 usb_mode_switch;
|
||||
+
|
||||
struct {
|
||||
u8 hci;
|
||||
u8 bw;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index 02ef9a77316b..e7b24465f549 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -15,6 +15,7 @@
|
||||
#define BIT_WLOCK_1C_B6 BIT(5)
|
||||
#define REG_SYS_PW_CTRL 0x0004
|
||||
#define BIT_PFM_WOWL BIT(3)
|
||||
+#define BIT_APFM_OFFMAC BIT(9)
|
||||
#define REG_SYS_CLK_CTRL 0x0008
|
||||
#define BIT_CPU_CLK_EN BIT(14)
|
||||
|
||||
@@ -133,6 +134,14 @@
|
||||
#define REG_PMC_DBG_CTRL1 0xa8
|
||||
#define BITS_PMC_BT_IQK_STS GENMASK(22, 21)
|
||||
|
||||
+#define REG_PAD_CTRL2 0x00C4
|
||||
+#define BIT_RSM_EN_V1 BIT(16)
|
||||
+#define BIT_NO_PDN_CHIPOFF_V1 BIT(17)
|
||||
+#define BIT_MASK_USB23_SW_MODE_V1 GENMASK(19, 18)
|
||||
+#define BIT_USB3_USB2_TRANSITION BIT(20)
|
||||
+#define BIT_USB_MODE_U2 1
|
||||
+#define BIT_USB_MODE_U3 2
|
||||
+
|
||||
#define REG_EFUSE_ACCESS 0x00CF
|
||||
#define EFUSE_ACCESS_ON 0x69
|
||||
#define EFUSE_ACCESS_OFF 0x00
|
||||
@@ -568,6 +577,8 @@
|
||||
#define BIT_WL_SECURITY_CLK BIT(15)
|
||||
#define BIT_DDMA_EN BIT(8)
|
||||
|
||||
+#define REG_SW_MDIO 0x10C0
|
||||
+
|
||||
#define REG_H2C_PKT_READADDR 0x10D0
|
||||
#define REG_H2C_PKT_WRITEADDR 0x10D4
|
||||
#define REG_FW_DBG6 0x10F8
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
index 2456ff242818..6edb17aea90e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -46,6 +46,7 @@ static int rtw8822b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)
|
||||
|
||||
map = (struct rtw8822b_efuse *)log_map;
|
||||
|
||||
+ efuse->usb_mode_switch = u8_get_bits(map->usb_mode, BIT(7));
|
||||
efuse->rfe_option = map->rfe_option;
|
||||
efuse->rf_board_option = map->rf_board_option;
|
||||
efuse->crystal_cap = map->xtal_k;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
index 2dc3a6660f06..cf85e63966a1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
@@ -72,7 +72,9 @@ struct rtw8822bs_efuse {
|
||||
|
||||
struct rtw8822b_efuse {
|
||||
__le16 rtl_id;
|
||||
- u8 res0[0x0e];
|
||||
+ u8 res0[4];
|
||||
+ u8 usb_mode;
|
||||
+ u8 res1[0x09];
|
||||
|
||||
/* power index for four RF paths */
|
||||
struct rtw_txpwr_idx txpwr_idx_table[4];
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
index 62376d1cca22..bc807b13e9ce 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -49,6 +49,7 @@ static int rtw8822c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)
|
||||
|
||||
map = (struct rtw8822c_efuse *)log_map;
|
||||
|
||||
+ efuse->usb_mode_switch = u8_get_bits(map->usb_mode, BIT(7));
|
||||
efuse->rfe_option = map->rfe_option;
|
||||
efuse->rf_board_option = map->rf_board_option;
|
||||
efuse->crystal_cap = map->xtal_k & XCAP_MASK;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
|
||||
index 1bc0e7f5d6bb..e2b383d633cd 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
|
||||
@@ -59,16 +59,18 @@ struct rtw8822ce_efuse {
|
||||
|
||||
struct rtw8822c_efuse {
|
||||
__le16 rtl_id;
|
||||
- u8 res0[0x0e];
|
||||
+ u8 res0[4];
|
||||
+ u8 usb_mode;
|
||||
+ u8 res1[0x09];
|
||||
|
||||
/* power index for four RF paths */
|
||||
struct rtw_txpwr_idx txpwr_idx_table[4];
|
||||
|
||||
u8 channel_plan; /* 0xb8 */
|
||||
u8 xtal_k;
|
||||
- u8 res1;
|
||||
+ u8 res2;
|
||||
u8 iqk_lck;
|
||||
- u8 res2[5]; /* 0xbc */
|
||||
+ u8 res3[5]; /* 0xbc */
|
||||
u8 rf_board_option;
|
||||
u8 rf_feature_option;
|
||||
u8 rf_bt_setting;
|
||||
@@ -80,21 +82,21 @@ struct rtw8822c_efuse {
|
||||
u8 rf_antenna_option; /* 0xc9 */
|
||||
u8 rfe_option;
|
||||
u8 country_code[2];
|
||||
- u8 res3[3];
|
||||
+ u8 res4[3];
|
||||
u8 path_a_thermal; /* 0xd0 */
|
||||
u8 path_b_thermal;
|
||||
- u8 res4[2];
|
||||
+ u8 res5[2];
|
||||
u8 rx_gain_gap_2g_ofdm;
|
||||
- u8 res5;
|
||||
- u8 rx_gain_gap_2g_cck;
|
||||
u8 res6;
|
||||
- u8 rx_gain_gap_5gl;
|
||||
+ u8 rx_gain_gap_2g_cck;
|
||||
u8 res7;
|
||||
- u8 rx_gain_gap_5gm;
|
||||
+ u8 rx_gain_gap_5gl;
|
||||
u8 res8;
|
||||
- u8 rx_gain_gap_5gh;
|
||||
+ u8 rx_gain_gap_5gm;
|
||||
u8 res9;
|
||||
- u8 res10[0x42];
|
||||
+ u8 rx_gain_gap_5gh;
|
||||
+ u8 res10;
|
||||
+ u8 res11[0x42];
|
||||
union {
|
||||
struct rtw8822ce_efuse e;
|
||||
struct rtw8822cu_efuse u;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index a55ca5a24227..251a5726f3ee 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -14,6 +14,11 @@
|
||||
#include "ps.h"
|
||||
#include "usb.h"
|
||||
|
||||
+static bool rtw_switch_usb_mode = true;
|
||||
+module_param_named(switch_usb_mode, rtw_switch_usb_mode, bool, 0644);
|
||||
+MODULE_PARM_DESC(switch_usb_mode,
|
||||
+ "Set to N to disable switching to USB 3 mode to avoid potential interference in the 2.4 GHz band (default: Y)");
|
||||
+
|
||||
#define RTW_USB_MAX_RXQ_LEN 512
|
||||
|
||||
struct rtw_usb_txcb {
|
||||
@@ -841,6 +846,77 @@ static void rtw_usb_intf_deinit(struct rtw_dev *rtwdev,
|
||||
usb_set_intfdata(intf, NULL);
|
||||
}
|
||||
|
||||
+static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ enum usb_device_speed cur_speed;
|
||||
+ u8 id = rtwdev->chip->id;
|
||||
+ bool can_switch;
|
||||
+ u32 pad_ctrl2;
|
||||
+
|
||||
+ if (rtw_read8(rtwdev, REG_SYS_CFG2 + 3) == 0x20)
|
||||
+ cur_speed = USB_SPEED_SUPER;
|
||||
+ else
|
||||
+ cur_speed = USB_SPEED_HIGH;
|
||||
+
|
||||
+ if (cur_speed == USB_SPEED_SUPER)
|
||||
+ return 0;
|
||||
+
|
||||
+ pad_ctrl2 = rtw_read32(rtwdev, REG_PAD_CTRL2);
|
||||
+
|
||||
+ can_switch = !!(pad_ctrl2 & (BIT_MASK_USB23_SW_MODE_V1 |
|
||||
+ BIT_USB3_USB2_TRANSITION));
|
||||
+
|
||||
+ if (!can_switch) {
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_USB,
|
||||
+ "Switching to USB 3 mode unsupported by the chip\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ /* At this point cur_speed is USB_SPEED_HIGH. If we already tried
|
||||
+ * to switch don't try again - it's a USB 2 port.
|
||||
+ */
|
||||
+ if (u32_get_bits(pad_ctrl2, BIT_MASK_USB23_SW_MODE_V1) == BIT_USB_MODE_U3)
|
||||
+ return 0;
|
||||
+
|
||||
+ /* Enable IO wrapper timeout */
|
||||
+ if (id == RTW_CHIP_TYPE_8822B || id == RTW_CHIP_TYPE_8821C)
|
||||
+ rtw_write8_clr(rtwdev, REG_SW_MDIO + 3, BIT(0));
|
||||
+
|
||||
+ u32p_replace_bits(&pad_ctrl2, BIT_USB_MODE_U3, BIT_MASK_USB23_SW_MODE_V1);
|
||||
+ pad_ctrl2 |= BIT_RSM_EN_V1;
|
||||
+
|
||||
+ rtw_write32(rtwdev, REG_PAD_CTRL2, pad_ctrl2);
|
||||
+ rtw_write8(rtwdev, REG_PAD_CTRL2 + 1, 4);
|
||||
+
|
||||
+ rtw_write16_set(rtwdev, REG_SYS_PW_CTRL, BIT_APFM_OFFMAC);
|
||||
+ usleep_range(1000, 1001);
|
||||
+ rtw_write32_set(rtwdev, REG_PAD_CTRL2, BIT_NO_PDN_CHIPOFF_V1);
|
||||
+
|
||||
+ return 1;
|
||||
+}
|
||||
+
|
||||
+static int rtw_usb_switch_mode(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ u8 id = rtwdev->chip->id;
|
||||
+
|
||||
+ if (id != RTW_CHIP_TYPE_8822C && id != RTW_CHIP_TYPE_8822B)
|
||||
+ return 0;
|
||||
+
|
||||
+ if (!rtwdev->efuse.usb_mode_switch) {
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_USB,
|
||||
+ "Switching to USB 3 mode disabled by chip's efuse\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ if (!rtw_switch_usb_mode) {
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_USB,
|
||||
+ "Switching to USB 3 mode disabled by module parameter\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ return rtw_usb_switch_mode_new(rtwdev);
|
||||
+}
|
||||
+
|
||||
int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
{
|
||||
struct rtw_dev *rtwdev;
|
||||
@@ -896,6 +972,14 @@ int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
goto err_destroy_rxwq;
|
||||
}
|
||||
|
||||
+ ret = rtw_usb_switch_mode(rtwdev);
|
||||
+ if (ret) {
|
||||
+ /* Not a fail, but we do need to skip rtw_register_hw. */
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_USB, "switching to USB 3 mode\n");
|
||||
+ ret = 0;
|
||||
+ goto err_destroy_rxwq;
|
||||
+ }
|
||||
+
|
||||
ret = rtw_register_hw(rtwdev, rtwdev->hw);
|
||||
if (ret) {
|
||||
rtw_err(rtwdev, "failed to register hw\n");
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,168 +0,0 @@
|
||||
From c1ca6ece1a989240c04f9a77230592cc92ff823c Mon Sep 17 00:00:00 2001
|
||||
From: Po-Hao Huang <phhuang@realtek.com>
|
||||
Date: Wed, 24 Jul 2024 13:05:01 +0800
|
||||
Subject: [PATCH 3/7] wifi: rtw88: 8822c: Parse channel from IE to correct
|
||||
invalid hardware reports
|
||||
|
||||
For CCK packets we could get incorrect reports from hardware.
|
||||
And this causes wrong frequencies being reported. Parse the channel
|
||||
information from IE if provided by AP to fix this.
|
||||
|
||||
Signed-off-by: Po-Hao Huang <phhuang@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/20240724050501.7550-1-pkshih@realtek.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 7 ++--
|
||||
drivers/net/wireless/realtek/rtw88/rx.c | 41 +++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rx.h | 13 ++++++
|
||||
drivers/net/wireless/realtek/rtw88/sdio.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 2 +
|
||||
7 files changed, 63 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 9d21637cf5d5..37912dded128 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -622,6 +622,7 @@ struct rtw_rx_pkt_stat {
|
||||
bool crc_err;
|
||||
bool decrypted;
|
||||
bool is_c2h;
|
||||
+ bool channel_invalid;
|
||||
|
||||
s32 signal_power;
|
||||
u16 pkt_len;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
index a5b9d6c7be37..5d0580da13fb 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -1088,6 +1088,7 @@ static u32 rtw_pci_rx_napi(struct rtw_dev *rtwdev, struct rtw_pci *rtwpci,
|
||||
/* remove rx_desc */
|
||||
skb_pull(new, pkt_offset);
|
||||
|
||||
+ rtw_update_rx_freq_for_invalid(rtwdev, new, &rx_status, &pkt_stat);
|
||||
rtw_rx_stats(rtwdev, pkt_stat.vif, new);
|
||||
memcpy(new->cb, &rx_status, sizeof(rx_status));
|
||||
ieee80211_rx_napi(rtwdev->hw, NULL, new, napi);
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
index bc807b13e9ce..96a233079e02 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -2576,9 +2576,10 @@ static void query_phy_status_page0(struct rtw_dev *rtwdev, u8 *phy_status,
|
||||
rx_power[RF_PATH_B] -= 110;
|
||||
|
||||
channel = GET_PHY_STAT_P0_CHANNEL(phy_status);
|
||||
- if (channel == 0)
|
||||
- channel = rtwdev->hal.current_channel;
|
||||
- rtw_set_rx_freq_band(pkt_stat, channel);
|
||||
+ if (channel != 0)
|
||||
+ rtw_set_rx_freq_band(pkt_stat, channel);
|
||||
+ else
|
||||
+ pkt_stat->channel_invalid = true;
|
||||
|
||||
pkt_stat->rx_power[RF_PATH_A] = rx_power[RF_PATH_A];
|
||||
pkt_stat->rx_power[RF_PATH_B] = rx_power[RF_PATH_B];
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rx.c b/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
index 84aedabdf285..66f9419588cf 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.c
|
||||
@@ -146,6 +146,47 @@ static void rtw_set_rx_freq_by_pktstat(struct rtw_rx_pkt_stat *pkt_stat,
|
||||
rx_status->band = pkt_stat->band;
|
||||
}
|
||||
|
||||
+void rtw_update_rx_freq_from_ie(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
+ struct ieee80211_rx_status *rx_status,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat)
|
||||
+{
|
||||
+ struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
|
||||
+ int channel = rtwdev->hal.current_channel;
|
||||
+ size_t hdr_len, ielen;
|
||||
+ int channel_number;
|
||||
+ u8 *variable;
|
||||
+
|
||||
+ if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
|
||||
+ goto fill_rx_status;
|
||||
+
|
||||
+ if (ieee80211_is_beacon(mgmt->frame_control)) {
|
||||
+ variable = mgmt->u.beacon.variable;
|
||||
+ hdr_len = offsetof(struct ieee80211_mgmt,
|
||||
+ u.beacon.variable);
|
||||
+ } else if (ieee80211_is_probe_resp(mgmt->frame_control)) {
|
||||
+ variable = mgmt->u.probe_resp.variable;
|
||||
+ hdr_len = offsetof(struct ieee80211_mgmt,
|
||||
+ u.probe_resp.variable);
|
||||
+ } else {
|
||||
+ goto fill_rx_status;
|
||||
+ }
|
||||
+
|
||||
+ if (skb->len > hdr_len)
|
||||
+ ielen = skb->len - hdr_len;
|
||||
+ else
|
||||
+ goto fill_rx_status;
|
||||
+
|
||||
+ channel_number = cfg80211_get_ies_channel_number(variable, ielen,
|
||||
+ NL80211_BAND_2GHZ);
|
||||
+ if (channel_number != -1)
|
||||
+ channel = channel_number;
|
||||
+
|
||||
+fill_rx_status:
|
||||
+ rtw_set_rx_freq_band(pkt_stat, channel);
|
||||
+ rtw_set_rx_freq_by_pktstat(pkt_stat, rx_status);
|
||||
+}
|
||||
+EXPORT_SYMBOL(rtw_update_rx_freq_from_ie);
|
||||
+
|
||||
void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
|
||||
struct rtw_rx_pkt_stat *pkt_stat,
|
||||
struct ieee80211_hdr *hdr,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rx.h b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
index 8a072dd3d73c..9f0019112987 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rx.h
|
||||
@@ -50,5 +50,18 @@ void rtw_rx_fill_rx_status(struct rtw_dev *rtwdev,
|
||||
struct ieee80211_hdr *hdr,
|
||||
struct ieee80211_rx_status *rx_status,
|
||||
u8 *phy_status);
|
||||
+void rtw_update_rx_freq_from_ie(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
+ struct ieee80211_rx_status *rx_status,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat);
|
||||
+
|
||||
+static inline
|
||||
+void rtw_update_rx_freq_for_invalid(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
+ struct ieee80211_rx_status *rx_status,
|
||||
+ struct rtw_rx_pkt_stat *pkt_stat)
|
||||
+{
|
||||
+ if (pkt_stat->channel_invalid)
|
||||
+ rtw_update_rx_freq_from_ie(rtwdev, skb, rx_status, pkt_stat);
|
||||
+}
|
||||
+
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
index 0cae5746f540..763aa8212a4b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -948,6 +948,7 @@ static void rtw_sdio_rx_skb(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
skb_put(skb, pkt_stat->pkt_len);
|
||||
skb_reserve(skb, pkt_offset);
|
||||
|
||||
+ rtw_update_rx_freq_for_invalid(rtwdev, skb, rx_status, pkt_stat);
|
||||
rtw_rx_stats(rtwdev, pkt_stat->vif, skb);
|
||||
|
||||
ieee80211_rx_irqsafe(rtwdev->hw, skb);
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 251a5726f3ee..9145c11a063e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -579,6 +579,8 @@ static void rtw_usb_rx_handler(struct work_struct *work)
|
||||
|
||||
skb_put(skb, pkt_stat.pkt_len);
|
||||
skb_reserve(skb, pkt_offset);
|
||||
+
|
||||
+ rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
|
||||
memcpy(skb->cb, &rx_status, sizeof(rx_status));
|
||||
ieee80211_rx_irqsafe(rtwdev->hw, skb);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,81 +0,0 @@
|
||||
From 93523589d4dae8567b471743e8c6a88bf80750c4 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 01:19:36 +0300
|
||||
Subject: [PATCH 4/7] wifi: rtw88: usb: Init RX burst length according to USB
|
||||
speed
|
||||
|
||||
This is needed in order to make USB RX aggregation work with RTL8811CU
|
||||
(and presumably RTL8822BU and RTL8822CU also).
|
||||
|
||||
I don't know what BIT_DMA_BURST_CNT, BIT_DMA_MODE, and BIT_DROP_DATA_EN
|
||||
are doing.
|
||||
|
||||
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
|
||||
|
||||
The RX speed is unchanged in my tests.
|
||||
|
||||
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/ac569c6f-7129-4341-b523-901fe10cabff@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 6 ++++++
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 23 ++++++++++++++++++++++-
|
||||
2 files changed, 28 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index e7b24465f549..4d9b8668e8b0 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -322,6 +322,12 @@
|
||||
#define REG_RXDMA_DPR 0x028C
|
||||
#define REG_RXDMA_MODE 0x0290
|
||||
#define BIT_DMA_MODE BIT(1)
|
||||
+#define BIT_DMA_BURST_CNT GENMASK(3, 2)
|
||||
+#define BIT_DMA_BURST_SIZE GENMASK(5, 4)
|
||||
+#define BIT_DMA_BURST_SIZE_64 2
|
||||
+#define BIT_DMA_BURST_SIZE_512 1
|
||||
+#define BIT_DMA_BURST_SIZE_1024 0
|
||||
+
|
||||
#define REG_RXPKTNUM 0x02B0
|
||||
|
||||
#define REG_INT_MIG 0x0304
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 9145c11a063e..1c40d46a7eb4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -720,9 +720,30 @@ static void rtw_usb_link_ps(struct rtw_dev *rtwdev, bool enter)
|
||||
/* empty function for rtw_hci_ops */
|
||||
}
|
||||
|
||||
+static void rtw_usb_init_burst_pkt_len(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
||||
+ enum usb_device_speed speed = rtwusb->udev->speed;
|
||||
+ u8 rxdma, burst_size;
|
||||
+
|
||||
+ rxdma = BIT_DMA_BURST_CNT | BIT_DMA_MODE;
|
||||
+
|
||||
+ if (speed == USB_SPEED_SUPER)
|
||||
+ burst_size = BIT_DMA_BURST_SIZE_1024;
|
||||
+ else if (speed == USB_SPEED_HIGH)
|
||||
+ burst_size = BIT_DMA_BURST_SIZE_512;
|
||||
+ else
|
||||
+ burst_size = BIT_DMA_BURST_SIZE_64;
|
||||
+
|
||||
+ u8p_replace_bits(&rxdma, burst_size, BIT_DMA_BURST_SIZE);
|
||||
+
|
||||
+ rtw_write8(rtwdev, REG_RXDMA_MODE, rxdma);
|
||||
+ rtw_write16_set(rtwdev, REG_TXDMA_OFFSET_CHK, BIT_DROP_DATA_EN);
|
||||
+}
|
||||
+
|
||||
static void rtw_usb_interface_cfg(struct rtw_dev *rtwdev)
|
||||
{
|
||||
- /* empty function for rtw_hci_ops */
|
||||
+ rtw_usb_init_burst_pkt_len(rtwdev);
|
||||
}
|
||||
|
||||
static struct rtw_hci_ops rtw_usb_ops = {
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,36 +0,0 @@
|
||||
From 7198cca8f07045773f92befd8861bb5b3f8bd83d Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 01:20:36 +0300
|
||||
Subject: [PATCH 5/7] wifi: rtw88: usb: Update the RX stats after every frame
|
||||
|
||||
Update the number of received unicast data frames and bytes every time
|
||||
a frame is received. This is what the PCI and SDIO drivers do.
|
||||
|
||||
This has an influence on the power saving, bluetooth coexistence, and
|
||||
(in a future patch) the use of RX aggregation.
|
||||
|
||||
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
|
||||
|
||||
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/75a2ca52-8f01-45c5-926f-d3a68ae3b284@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 1c40d46a7eb4..10f1d724370e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -581,6 +581,7 @@ static void rtw_usb_rx_handler(struct work_struct *work)
|
||||
skb_reserve(skb, pkt_offset);
|
||||
|
||||
rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
|
||||
+ rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
|
||||
memcpy(skb->cb, &rx_status, sizeof(rx_status));
|
||||
ieee80211_rx_irqsafe(rtwdev->hw, skb);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,123 +0,0 @@
|
||||
From 8e07253c6c1c00d2dc5fc8937f3ab15c23be5367 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 01:21:36 +0300
|
||||
Subject: [PATCH 6/7] wifi: rtw88: usb: Support RX aggregation
|
||||
|
||||
The chips can be configured to aggregate several frames into a single
|
||||
USB transfer. Modify rtw_usb_rx_handler() to support this case.
|
||||
|
||||
RX aggregation improves the RX speed of RTL8811CU on certain ARM
|
||||
systems, like the NanoPi NEO Core2. It also improves the RX speed of
|
||||
RTL8822CU on some x86_64 systems.
|
||||
|
||||
Currently none of the chips are configured to aggregate frames.
|
||||
|
||||
Tested with RTL8822CU, RTL8811CU, and RTL8723DU.
|
||||
|
||||
Reviewed-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/f845826d-de71-492d-9a22-e48c07989a1f@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 61 ++++++++++++++++--------
|
||||
1 file changed, 40 insertions(+), 21 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 10f1d724370e..64d68366812c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -546,11 +546,12 @@ static void rtw_usb_rx_handler(struct work_struct *work)
|
||||
struct rtw_usb *rtwusb = container_of(work, struct rtw_usb, rx_work);
|
||||
struct rtw_dev *rtwdev = rtwusb->rtwdev;
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
- struct rtw_rx_pkt_stat pkt_stat;
|
||||
+ u32 pkt_desc_sz = chip->rx_pkt_desc_sz;
|
||||
struct ieee80211_rx_status rx_status;
|
||||
+ u32 pkt_offset, next_pkt, urb_len;
|
||||
+ struct rtw_rx_pkt_stat pkt_stat;
|
||||
+ struct sk_buff *next_skb;
|
||||
struct sk_buff *skb;
|
||||
- u32 pkt_desc_sz = chip->rx_pkt_desc_sz;
|
||||
- u32 pkt_offset;
|
||||
u8 *rx_desc;
|
||||
int limit;
|
||||
|
||||
@@ -559,31 +560,48 @@ static void rtw_usb_rx_handler(struct work_struct *work)
|
||||
if (!skb)
|
||||
break;
|
||||
|
||||
- rx_desc = skb->data;
|
||||
- chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
|
||||
- &rx_status);
|
||||
- pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
|
||||
- pkt_stat.shift;
|
||||
-
|
||||
- if (pkt_stat.is_c2h) {
|
||||
- skb_put(skb, pkt_stat.pkt_len + pkt_offset);
|
||||
- rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
|
||||
- continue;
|
||||
- }
|
||||
-
|
||||
if (skb_queue_len(&rtwusb->rx_queue) >= RTW_USB_MAX_RXQ_LEN) {
|
||||
dev_dbg_ratelimited(rtwdev->dev, "failed to get rx_queue, overflow\n");
|
||||
dev_kfree_skb_any(skb);
|
||||
continue;
|
||||
}
|
||||
|
||||
- skb_put(skb, pkt_stat.pkt_len);
|
||||
- skb_reserve(skb, pkt_offset);
|
||||
+ urb_len = skb->len;
|
||||
+
|
||||
+ do {
|
||||
+ rx_desc = skb->data;
|
||||
+ chip->ops->query_rx_desc(rtwdev, rx_desc, &pkt_stat,
|
||||
+ &rx_status);
|
||||
+ pkt_offset = pkt_desc_sz + pkt_stat.drv_info_sz +
|
||||
+ pkt_stat.shift;
|
||||
+
|
||||
+ next_pkt = round_up(pkt_stat.pkt_len + pkt_offset, 8);
|
||||
+
|
||||
+ if (urb_len >= next_pkt + pkt_desc_sz)
|
||||
+ next_skb = skb_clone(skb, GFP_KERNEL);
|
||||
+ else
|
||||
+ next_skb = NULL;
|
||||
+
|
||||
+ if (pkt_stat.is_c2h) {
|
||||
+ skb_trim(skb, pkt_stat.pkt_len + pkt_offset);
|
||||
+ rtw_fw_c2h_cmd_rx_irqsafe(rtwdev, pkt_offset, skb);
|
||||
+ } else {
|
||||
+ skb_pull(skb, pkt_offset);
|
||||
+ skb_trim(skb, pkt_stat.pkt_len);
|
||||
+ rtw_update_rx_freq_for_invalid(rtwdev, skb,
|
||||
+ &rx_status,
|
||||
+ &pkt_stat);
|
||||
+ rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
|
||||
+ memcpy(skb->cb, &rx_status, sizeof(rx_status));
|
||||
+ ieee80211_rx_irqsafe(rtwdev->hw, skb);
|
||||
+ }
|
||||
+
|
||||
+ skb = next_skb;
|
||||
+ if (skb)
|
||||
+ skb_pull(skb, next_pkt);
|
||||
|
||||
- rtw_update_rx_freq_for_invalid(rtwdev, skb, &rx_status, &pkt_stat);
|
||||
- rtw_rx_stats(rtwdev, pkt_stat.vif, skb);
|
||||
- memcpy(skb->cb, &rx_status, sizeof(rx_status));
|
||||
- ieee80211_rx_irqsafe(rtwdev->hw, skb);
|
||||
+ urb_len -= next_pkt;
|
||||
+ } while (skb);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -627,6 +645,7 @@ static void rtw_usb_read_port_complete(struct urb *urb)
|
||||
if (skb)
|
||||
dev_kfree_skb_any(skb);
|
||||
} else {
|
||||
+ skb_put(skb, urb->actual_length);
|
||||
skb_queue_tail(&rtwusb->rx_queue, skb);
|
||||
queue_work(rtwusb->rxwq, &rtwusb->rx_work);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,182 +0,0 @@
|
||||
From 3e36db62ff52667d63497da45b6cae4cd8382721 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 8 Aug 2024 01:23:06 +0300
|
||||
Subject: [PATCH 7/7] wifi: rtw88: Enable USB RX aggregation for
|
||||
8822c/8822b/8821c
|
||||
|
||||
Enable USB RX aggregation when there is at least 1 Mbps RX or TX
|
||||
traffic, otherwise disable it.
|
||||
|
||||
USB RX aggregation improves the RX speed of RTL8811CU on certain ARM
|
||||
systems, like the NanoPi NEO Core2. Before: 28 Mbps, after: 231 Mbps.
|
||||
|
||||
It also improves the RX speed of RTL8822CU on some x86_64 systems.
|
||||
Before: ~200 Mbps, after: ~300 Mbps.
|
||||
|
||||
The official drivers for these chips use the same logic for SDIO, but
|
||||
for some reason the SDIO driver in rtw88 always enables RX aggregation,
|
||||
so this patch only toggles aggregation for USB devices.
|
||||
|
||||
RTL8703B is likely not found in USB devices, and RTL8723DU doesn't like
|
||||
aggregation.
|
||||
|
||||
Tested-by: Sascha Hauer <s.hauer@pengutronix.de>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/b4c0d54c-6755-4b0f-9dd7-f9196fd74b68@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/hci.h | 7 ++++
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 13 +++++---
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/sdio.c | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 40 +++++++++++++++++++++++
|
||||
5 files changed, 58 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/hci.h b/drivers/net/wireless/realtek/rtw88/hci.h
|
||||
index 830d7532f2a3..96aeda26014e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/hci.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/hci.h
|
||||
@@ -18,6 +18,7 @@ struct rtw_hci_ops {
|
||||
void (*deep_ps)(struct rtw_dev *rtwdev, bool enter);
|
||||
void (*link_ps)(struct rtw_dev *rtwdev, bool enter);
|
||||
void (*interface_cfg)(struct rtw_dev *rtwdev);
|
||||
+ void (*dynamic_rx_agg)(struct rtw_dev *rtwdev, bool enable);
|
||||
|
||||
int (*write_data_rsvd_page)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
|
||||
int (*write_data_h2c)(struct rtw_dev *rtwdev, u8 *buf, u32 size);
|
||||
@@ -72,6 +73,12 @@ static inline void rtw_hci_interface_cfg(struct rtw_dev *rtwdev)
|
||||
rtwdev->hci.ops->interface_cfg(rtwdev);
|
||||
}
|
||||
|
||||
+static inline void rtw_hci_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
+{
|
||||
+ if (rtwdev->hci.ops->dynamic_rx_agg)
|
||||
+ rtwdev->hci.ops->dynamic_rx_agg(rtwdev, enable);
|
||||
+}
|
||||
+
|
||||
static inline int
|
||||
rtw_hci_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf, u32 size)
|
||||
{
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
index 7ab7a988b123..22b39b3acc6c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -212,6 +212,7 @@ static void rtw_watch_dog_work(struct work_struct *work)
|
||||
struct rtw_traffic_stats *stats = &rtwdev->stats;
|
||||
struct rtw_watch_dog_iter_data data = {};
|
||||
bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
|
||||
+ u32 tx_unicast_mbps, rx_unicast_mbps;
|
||||
bool ps_active;
|
||||
|
||||
mutex_lock(&rtwdev->mutex);
|
||||
@@ -236,10 +237,11 @@ static void rtw_watch_dog_work(struct work_struct *work)
|
||||
else
|
||||
ps_active = false;
|
||||
|
||||
- ewma_tp_add(&stats->tx_ewma_tp,
|
||||
- (u32)(stats->tx_unicast >> RTW_TP_SHIFT));
|
||||
- ewma_tp_add(&stats->rx_ewma_tp,
|
||||
- (u32)(stats->rx_unicast >> RTW_TP_SHIFT));
|
||||
+ tx_unicast_mbps = stats->tx_unicast >> RTW_TP_SHIFT;
|
||||
+ rx_unicast_mbps = stats->rx_unicast >> RTW_TP_SHIFT;
|
||||
+
|
||||
+ ewma_tp_add(&stats->tx_ewma_tp, tx_unicast_mbps);
|
||||
+ ewma_tp_add(&stats->rx_ewma_tp, rx_unicast_mbps);
|
||||
stats->tx_throughput = ewma_tp_read(&stats->tx_ewma_tp);
|
||||
stats->rx_throughput = ewma_tp_read(&stats->rx_ewma_tp);
|
||||
|
||||
@@ -259,6 +261,9 @@ static void rtw_watch_dog_work(struct work_struct *work)
|
||||
|
||||
rtw_phy_dynamic_mechanism(rtwdev);
|
||||
|
||||
+ rtw_hci_dynamic_rx_agg(rtwdev,
|
||||
+ tx_unicast_mbps >= 1 || rx_unicast_mbps >= 1);
|
||||
+
|
||||
data.rtwdev = rtwdev;
|
||||
/* rtw_iterate_vifs internally uses an atomic iterator which is needed
|
||||
* to avoid taking local->iflist_mtx mutex
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
index 5d0580da13fb..0b9b8807af2c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -1601,6 +1601,7 @@ static struct rtw_hci_ops rtw_pci_ops = {
|
||||
.deep_ps = rtw_pci_deep_ps,
|
||||
.link_ps = rtw_pci_link_ps,
|
||||
.interface_cfg = rtw_pci_interface_cfg,
|
||||
+ .dynamic_rx_agg = NULL,
|
||||
|
||||
.read8 = rtw_pci_read8,
|
||||
.read16 = rtw_pci_read16,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
index 763aa8212a4b..21d0754dd7f6 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -1157,6 +1157,7 @@ static struct rtw_hci_ops rtw_sdio_ops = {
|
||||
.deep_ps = rtw_sdio_deep_ps,
|
||||
.link_ps = rtw_sdio_link_ps,
|
||||
.interface_cfg = rtw_sdio_interface_cfg,
|
||||
+ .dynamic_rx_agg = NULL,
|
||||
|
||||
.read8 = rtw_sdio_read8,
|
||||
.read16 = rtw_sdio_read16,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 64d68366812c..e83ab6fb83f5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -766,6 +766,45 @@ static void rtw_usb_interface_cfg(struct rtw_dev *rtwdev)
|
||||
rtw_usb_init_burst_pkt_len(rtwdev);
|
||||
}
|
||||
|
||||
+static void rtw_usb_dynamic_rx_agg_v1(struct rtw_dev *rtwdev, bool enable)
|
||||
+{
|
||||
+ u8 size, timeout;
|
||||
+ u16 val16;
|
||||
+
|
||||
+ rtw_write32_set(rtwdev, REG_RXDMA_AGG_PG_TH, BIT_EN_PRE_CALC);
|
||||
+ rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
|
||||
+ rtw_write8_clr(rtwdev, REG_RXDMA_AGG_PG_TH + 3, BIT(7));
|
||||
+
|
||||
+ if (enable) {
|
||||
+ size = 0x5;
|
||||
+ timeout = 0x20;
|
||||
+ } else {
|
||||
+ size = 0x0;
|
||||
+ timeout = 0x1;
|
||||
+ }
|
||||
+ val16 = u16_encode_bits(size, BIT_RXDMA_AGG_PG_TH) |
|
||||
+ u16_encode_bits(timeout, BIT_DMA_AGG_TO_V1);
|
||||
+
|
||||
+ rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
|
||||
+}
|
||||
+
|
||||
+static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
+{
|
||||
+ switch (rtwdev->chip->id) {
|
||||
+ case RTW_CHIP_TYPE_8822C:
|
||||
+ case RTW_CHIP_TYPE_8822B:
|
||||
+ case RTW_CHIP_TYPE_8821C:
|
||||
+ rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
|
||||
+ break;
|
||||
+ case RTW_CHIP_TYPE_8723D:
|
||||
+ /* Doesn't like aggregation. */
|
||||
+ break;
|
||||
+ case RTW_CHIP_TYPE_8703B:
|
||||
+ /* Likely not found in USB devices. */
|
||||
+ break;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static struct rtw_hci_ops rtw_usb_ops = {
|
||||
.tx_write = rtw_usb_tx_write,
|
||||
.tx_kick_off = rtw_usb_tx_kick_off,
|
||||
@@ -775,6 +814,7 @@ static struct rtw_hci_ops rtw_usb_ops = {
|
||||
.deep_ps = rtw_usb_deep_ps,
|
||||
.link_ps = rtw_usb_link_ps,
|
||||
.interface_cfg = rtw_usb_interface_cfg,
|
||||
+ .dynamic_rx_agg = rtw_usb_dynamic_rx_agg,
|
||||
|
||||
.write8 = rtw_usb_write8,
|
||||
.write16 = rtw_usb_write16,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,142 +0,0 @@
|
||||
From 624934a7cfabca7dea2b2c1d10b029c1ff4c1f3f Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Mon, 25 Sep 2023 12:04:48 +0300
|
||||
Subject: [PATCH 1/7] wifi: rtlwifi: cleanup few rtlxxxx_set_hw_reg() routines
|
||||
|
||||
Since 'u8' comparison against zero is always false, drop the
|
||||
corresponding branches of AMPDU_MIN_SPACE adjustment within
|
||||
'rtlxxxx_set_hw_reg()' for rtl8188ee, rtl8192ce, rtl8192de,
|
||||
rtl8723ae, rtl8723be, and rtl8821ae. Compile tested only.
|
||||
|
||||
Found by Linux Verification Center (linuxtesting.org) with SVACE.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20230925090452.25633-1-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c | 5 -----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c | 5 -----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c | 4 ----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c | 5 -----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 6 ------
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c | 5 -----
|
||||
6 files changed, 30 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
|
||||
index 58b1a46066b5..27f6c35ba0f9 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/hw.c
|
||||
@@ -433,14 +433,9 @@ void rtl88ee_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
break;
|
||||
case HW_VAR_AMPDU_MIN_SPACE:{
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *val;
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
-
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
|
||||
mac->min_space_cfg = ((mac->min_space_cfg &
|
||||
0xf8) |
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
|
||||
index 049c4fe9eeed..0bc915723b93 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/hw.c
|
||||
@@ -208,14 +208,9 @@ void rtl92ce_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
}
|
||||
case HW_VAR_AMPDU_MIN_SPACE:{
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *val;
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
-
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
|
||||
mac->min_space_cfg = ((mac->min_space_cfg &
|
||||
0xf8) |
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
index 31a18bbface9..743ac6871bf4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
@@ -225,13 +225,9 @@ void rtl92de_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
}
|
||||
case HW_VAR_AMPDU_MIN_SPACE: {
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *val;
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) |
|
||||
min_spacing_to_set);
|
||||
*val = min_spacing_to_set;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c
|
||||
index d26d4c4314a3..6991713a66d0 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/hw.c
|
||||
@@ -212,14 +212,9 @@ void rtl8723e_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
}
|
||||
case HW_VAR_AMPDU_MIN_SPACE:{
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *((u8 *)val);
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
-
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
|
||||
mac->min_space_cfg = ((mac->min_space_cfg &
|
||||
0xf8) |
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
|
||||
index 15575644551f..0e77de1baaf8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
|
||||
@@ -468,15 +468,9 @@ void rtl8723be_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
break;
|
||||
case HW_VAR_AMPDU_MIN_SPACE:{
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *((u8 *)val);
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
-
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
-
|
||||
mac->min_space_cfg = ((mac->min_space_cfg & 0xf8) |
|
||||
min_spacing_to_set);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
index 3f8f6da33b12..1633328bc3d1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/hw.c
|
||||
@@ -546,14 +546,9 @@ void rtl8821ae_set_hw_reg(struct ieee80211_hw *hw, u8 variable, u8 *val)
|
||||
break;
|
||||
case HW_VAR_AMPDU_MIN_SPACE:{
|
||||
u8 min_spacing_to_set;
|
||||
- u8 sec_min_space;
|
||||
|
||||
min_spacing_to_set = *((u8 *)val);
|
||||
if (min_spacing_to_set <= 7) {
|
||||
- sec_min_space = 0;
|
||||
-
|
||||
- if (min_spacing_to_set < sec_min_space)
|
||||
- min_spacing_to_set = sec_min_space;
|
||||
|
||||
mac->min_space_cfg = ((mac->min_space_cfg &
|
||||
0xf8) |
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,62 +0,0 @@
|
||||
From 583494febbdd6a76b6c2a3fad704082f4f9f4d75 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Tue, 3 Oct 2023 07:33:16 +0300
|
||||
Subject: [PATCH 2/7] wifi: rtlwifi: remove unreachable code in
|
||||
rtl92d_dm_check_edca_turbo()
|
||||
|
||||
Since '!(0x5ea42b & 0xffff0000)' is always false, remove unreachable
|
||||
block in 'rtl92d_dm_check_edca_turbo()' and convert EDCA limits to
|
||||
constant variables. Compile tested only.
|
||||
|
||||
Found by Linux Verification Center (linuxtesting.org) with SVACE.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231003043318.11370-1-dmantipov@yandex.ru
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192de/dm.c | 18 ++----------------
|
||||
1 file changed, 2 insertions(+), 16 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c
|
||||
index 6cc9c7649eda..cf4aca83bd05 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/dm.c
|
||||
@@ -592,32 +592,18 @@ static void rtl92d_dm_check_edca_turbo(struct ieee80211_hw *hw)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
|
||||
+ const u32 edca_be_ul = 0x5ea42b;
|
||||
+ const u32 edca_be_dl = 0x5ea42b;
|
||||
static u64 last_txok_cnt;
|
||||
static u64 last_rxok_cnt;
|
||||
u64 cur_txok_cnt;
|
||||
u64 cur_rxok_cnt;
|
||||
- u32 edca_be_ul = 0x5ea42b;
|
||||
- u32 edca_be_dl = 0x5ea42b;
|
||||
|
||||
if (mac->link_state != MAC80211_LINKED) {
|
||||
rtlpriv->dm.current_turbo_edca = false;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
- /* Enable BEQ TxOP limit configuration in wireless G-mode. */
|
||||
- /* To check whether we shall force turn on TXOP configuration. */
|
||||
- if ((!rtlpriv->dm.disable_framebursting) &&
|
||||
- (rtlpriv->sec.pairwise_enc_algorithm == WEP40_ENCRYPTION ||
|
||||
- rtlpriv->sec.pairwise_enc_algorithm == WEP104_ENCRYPTION ||
|
||||
- rtlpriv->sec.pairwise_enc_algorithm == TKIP_ENCRYPTION)) {
|
||||
- /* Force TxOP limit to 0x005e for UL. */
|
||||
- if (!(edca_be_ul & 0xffff0000))
|
||||
- edca_be_ul |= 0x005e0000;
|
||||
- /* Force TxOP limit to 0x005e for DL. */
|
||||
- if (!(edca_be_dl & 0xffff0000))
|
||||
- edca_be_dl |= 0x005e0000;
|
||||
- }
|
||||
-
|
||||
if ((!rtlpriv->dm.is_any_nonbepkts) &&
|
||||
(!rtlpriv->dm.disable_framebursting)) {
|
||||
cur_txok_cnt = rtlpriv->stats.txbytesunicast - last_txok_cnt;
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,413 +0,0 @@
|
||||
From bc77b0b9adf81b9d4b7a33de3246f75fe756fd32 Mon Sep 17 00:00:00 2001
|
||||
From: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Date: Wed, 11 Oct 2023 18:44:37 +0300
|
||||
Subject: [PATCH 3/7] wifi: rtlwifi: simplify TX command fill callbacks
|
||||
|
||||
Since 'rtlpriv->cfg->ops->fill_tx_cmddesc()' is always called
|
||||
with 'firstseg' and 'lastseg' set to 1 (and the latter is
|
||||
never actually used), all of the relevant chip-specific
|
||||
routines may be simplified. Compile tested only.
|
||||
|
||||
Signed-off-by: Dmitry Antipov <dmantipov@yandex.ru>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231011154442.52457-2-dmantipov@yandex.ru
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/core.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c | 8 +++-----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c | 9 +++------
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c | 8 +++-----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h | 5 ++---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c | 8 +++-----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c | 8 +++-----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h | 4 ++--
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c | 8 +++-----
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c | 5 ++---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 -
|
||||
23 files changed, 29 insertions(+), 53 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
index 3835b639d453..cc9b2a459386 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
|
||||
@@ -1897,7 +1897,7 @@ bool rtl_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
/*this is wrong, fill_tx_cmddesc needs update*/
|
||||
pdesc = &ring->desc[0];
|
||||
|
||||
- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb);
|
||||
+ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb);
|
||||
|
||||
__skb_queue_tail(&ring->queue, skb);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c
|
||||
index 65ebe52883d3..d094163a9a71 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.c
|
||||
@@ -665,9 +665,8 @@ void rtl88ee_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
@@ -687,8 +686,7 @@ void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
}
|
||||
clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
|
||||
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
+ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
|
||||
set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h
|
||||
index e17f70b4d199..aae654b0e3ba 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/trx.h
|
||||
@@ -797,6 +797,5 @@ bool rtl88ee_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl88ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl88ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
|
||||
index 5376bb34251f..50e139186a93 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.c
|
||||
@@ -518,9 +518,8 @@ void rtl92ce_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
@@ -540,9 +539,7 @@ void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
}
|
||||
clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
|
||||
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
-
|
||||
+ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
set_tx_desc_tx_rate(pdesc, DESC_RATE1M);
|
||||
|
||||
set_tx_desc_seq(pdesc, 0);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h
|
||||
index b45b05a6a523..f3ffe3d9883c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/trx.h
|
||||
@@ -527,6 +527,5 @@ bool rtl92ce_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl92ce_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl92ce_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool b_firstseg, bool b_lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
|
||||
index a040c07791d1..5ec0eb8773a5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/hw.c
|
||||
@@ -1539,7 +1539,7 @@ static bool usb_cmd_send_packet(struct ieee80211_hw *hw, struct sk_buff *skb)
|
||||
* if its "here".
|
||||
*
|
||||
* This is maybe necessary:
|
||||
- * rtlpriv->cfg->ops->fill_tx_cmddesc(hw, buffer, 1, 1, skb);
|
||||
+ * rtlpriv->cfg->ops->fill_tx_cmddesc(hw, buffer, skb);
|
||||
*/
|
||||
dev_kfree_skb(skb);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
index b70767e72f3d..9969e9d1fc4b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
@@ -626,9 +626,8 @@ void rtl92cu_fill_fake_txdesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
_rtl_tx_desc_checksum(pdesc);
|
||||
}
|
||||
|
||||
-void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
u8 fw_queue = QSLT_BEACON;
|
||||
@@ -637,8 +636,7 @@ void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
__le32 *pdesc = (__le32 *)pdesc8;
|
||||
|
||||
memset((void *)pdesc, 0, RTL_TX_HEADER_SIZE);
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, RTL_TX_HEADER_SIZE);
|
||||
+ set_tx_desc_offset(pdesc, RTL_TX_HEADER_SIZE);
|
||||
set_tx_desc_tx_rate(pdesc, DESC_RATE1M);
|
||||
set_tx_desc_seq(pdesc, 0);
|
||||
set_tx_desc_linip(pdesc, 0);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
index 171fe39dfb0c..cc4ef2bfd2e7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
@@ -396,8 +396,7 @@ void rtl92cu_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
struct rtl_tcb_desc *tcb_desc);
|
||||
void rtl92cu_fill_fake_txdesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
u32 buffer_len, bool ispspoll);
|
||||
-void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc, bool b_firstseg,
|
||||
- bool b_lastseg, struct sk_buff *skb);
|
||||
+void rtl92cu_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
+ struct sk_buff *skb);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c
|
||||
index 9ddb8478784b..e1fb29962801 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/fw.c
|
||||
@@ -469,7 +469,7 @@ static bool _rtl92d_cmd_send_packet(struct ieee80211_hw *hw,
|
||||
pdesc = &ring->desc[idx];
|
||||
/* discard output from call below */
|
||||
rtlpriv->cfg->ops->get_desc(hw, (u8 *)pdesc, true, HW_DESC_OWN);
|
||||
- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *) pdesc, 1, 1, skb);
|
||||
+ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb);
|
||||
__skb_queue_tail(&ring->queue, skb);
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
|
||||
rtlpriv->cfg->ops->tx_polling(hw, BEACON_QUEUE);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
index c09c0c312665..02ac69c08ed3 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
@@ -655,9 +655,8 @@ void rtl92de_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
@@ -678,8 +677,7 @@ void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
return;
|
||||
}
|
||||
clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
+ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
/* 5G have no CCK rate
|
||||
* Caution: The macros below are multi-line expansions.
|
||||
* The braces are needed no matter what checkpatch says
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
|
||||
index d01578875cd5..2992668c156c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.h
|
||||
@@ -564,7 +564,6 @@ bool rtl92de_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl92de_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl92de_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool b_firstseg, bool b_lastseg,
|
||||
struct sk_buff *skb);
|
||||
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c
|
||||
index a182cdeb58e2..67388e0b3fa0 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.c
|
||||
@@ -827,9 +827,8 @@ void rtl92ee_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
@@ -846,8 +845,7 @@ void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
}
|
||||
clear_pci_tx_desc_content(pdesc, txdesc_len);
|
||||
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, txdesc_len);
|
||||
+ set_tx_desc_offset(pdesc, txdesc_len);
|
||||
|
||||
set_tx_desc_tx_rate(pdesc, DESC_RATE1M);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h
|
||||
index 967cef3a9cbf..3852a50a688b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/trx.h
|
||||
@@ -743,6 +743,5 @@ u64 rtl92ee_get_desc(struct ieee80211_hw *hw,
|
||||
bool rtl92ee_is_tx_desc_closed(struct ieee80211_hw *hw, u8 hw_queue, u16 index);
|
||||
void rtl92ee_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl92ee_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c
|
||||
index f570495af044..579b1789d6d1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/fw.c
|
||||
@@ -122,7 +122,7 @@ static bool _rtl92s_cmd_send_packet(struct ieee80211_hw *hw,
|
||||
|
||||
idx = (ring->idx + skb_queue_len(&ring->queue)) % ring->entries;
|
||||
pdesc = &ring->desc[idx];
|
||||
- rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, 1, 1, skb);
|
||||
+ rtlpriv->cfg->ops->fill_tx_cmddesc(hw, (u8 *)pdesc, skb);
|
||||
__skb_queue_tail(&ring->queue, skb);
|
||||
|
||||
spin_unlock_irqrestore(&rtlpriv->locks.irq_th_lock, flags);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c
|
||||
index a5853a170b58..f104cdb649f8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.c
|
||||
@@ -492,7 +492,7 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
}
|
||||
|
||||
void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
- bool firstseg, bool lastseg, struct sk_buff *skb)
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h
|
||||
index 90aa12fc6a7f..40291a6a15d0 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/trx.h
|
||||
@@ -10,8 +10,8 @@ void rtl92se_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
struct ieee80211_sta *sta,
|
||||
struct sk_buff *skb, u8 hw_queue,
|
||||
struct rtl_tcb_desc *ptcb_desc);
|
||||
-void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb);
|
||||
+void rtl92se_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
+ struct sk_buff *skb);
|
||||
bool rtl92se_rx_query_desc(struct ieee80211_hw *hw, struct rtl_stats *stats,
|
||||
struct ieee80211_rx_status *rx_status, u8 *pdesc,
|
||||
struct sk_buff *skb);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
|
||||
index 7f294e698994..d9823ddab7be 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.c
|
||||
@@ -519,9 +519,8 @@ void rtl8723e_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
@@ -541,8 +540,7 @@ void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
}
|
||||
clear_pci_tx_desc_content(pdesc, TX_DESC_SIZE);
|
||||
|
||||
- if (firstseg)
|
||||
- set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
+ set_tx_desc_offset(pdesc, USB_HWDESC_HEADER_LEN);
|
||||
|
||||
set_tx_desc_tx_rate(pdesc, DESC92C_RATE1M);
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
|
||||
index 2d25f62a4d52..f352fddfff32 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/trx.h
|
||||
@@ -530,6 +530,5 @@ bool rtl8723e_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl8723e_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl8723e_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
|
||||
index 24ef7cc52e99..8b6352f7f93b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.c
|
||||
@@ -585,7 +585,6 @@ void rtl8723be_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
}
|
||||
|
||||
void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
|
||||
index 174aca20c7e1..da027f915cf4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/trx.h
|
||||
@@ -642,6 +642,5 @@ bool rtl8723be_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl8723be_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl8723be_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c
|
||||
index d7cb3319d885..bd71592fe26a 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.c
|
||||
@@ -828,9 +828,8 @@ void rtl8821ae_tx_fill_desc(struct ieee80211_hw *hw,
|
||||
rtl_dbg(rtlpriv, COMP_SEND, DBG_TRACE, "\n");
|
||||
}
|
||||
|
||||
-void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw,
|
||||
- u8 *pdesc8, bool firstseg,
|
||||
- bool lastseg, struct sk_buff *skb)
|
||||
+void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc8,
|
||||
+ struct sk_buff *skb)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h
|
||||
index a9ed6fd41089..1155365348f3 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/trx.h
|
||||
@@ -648,6 +648,5 @@ bool rtl8821ae_is_tx_desc_closed(struct ieee80211_hw *hw,
|
||||
u8 hw_queue, u16 index);
|
||||
void rtl8821ae_tx_polling(struct ieee80211_hw *hw, u8 hw_queue);
|
||||
void rtl8821ae_tx_fill_cmddesc(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 2e7e04f91279..600b33905cab 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2249,7 +2249,6 @@ struct rtl_hal_ops {
|
||||
void (*fill_fake_txdesc)(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
u32 buffer_len, bool bsspspoll);
|
||||
void (*fill_tx_cmddesc)(struct ieee80211_hw *hw, u8 *pdesc,
|
||||
- bool firstseg, bool lastseg,
|
||||
struct sk_buff *skb);
|
||||
void (*fill_tx_special_desc)(struct ieee80211_hw *hw,
|
||||
u8 *pdesc, u8 *pbd_desc,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,182 +0,0 @@
|
||||
From 1705e79a096e605b9f9da5442024f05c5e240694 Mon Sep 17 00:00:00 2001
|
||||
From: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Date: Thu, 16 Nov 2023 12:05:29 -0600
|
||||
Subject: [PATCH 4/7] wifi: rtlwifi: drop unused const_amdpci_aspm
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
Remove the unused "const_amdpci_aspm" member of struct rtl_pci and
|
||||
struct rtl_ps_ctl.
|
||||
|
||||
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231116180529.52752-1-helgaas@kernel.org
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.c | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c | 3 ---
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 2 --
|
||||
11 files changed, 28 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
index 9886e719739b..b163a069660b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
@@ -70,7 +70,6 @@ static void _rtl_pci_update_default_setting(struct ieee80211_hw *hw)
|
||||
ppsc->support_aspm = false;
|
||||
|
||||
/*Update PCI ASPM setting */
|
||||
- ppsc->const_amdpci_aspm = rtlpci->const_amdpci_aspm;
|
||||
switch (rtlpci->const_pci_aspm) {
|
||||
case 0:
|
||||
/*No ASPM */
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.h b/drivers/net/wireless/realtek/rtlwifi/pci.h
|
||||
index 866861626a0a..4725d43609fd 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/pci.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.h
|
||||
@@ -195,7 +195,6 @@ struct rtl_pci {
|
||||
u32 reg_bcn_ctrl_val;
|
||||
|
||||
/*ASPM*/ u8 const_pci_aspm;
|
||||
- u8 const_amdpci_aspm;
|
||||
u8 const_hwsw_rfoff_d3;
|
||||
u8 const_support_pciaspm;
|
||||
/*pci-e bridge */
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
index b77937fe2448..37bb59fa8bfa 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8188ee/sw.c
|
||||
@@ -21,9 +21,6 @@ static void rtl88e_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
* 1 - Enable ASPM without Clock Req,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
index e452275d8789..e20f2bec45c4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ce/sw.c
|
||||
@@ -24,9 +24,6 @@ static void rtl92c_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/*
|
||||
* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
index 11f319c97124..afd685ed460a 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/sw.c
|
||||
@@ -21,9 +21,6 @@ static void rtl92d_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/*
|
||||
* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
index 616a47d8d97a..a5ea2b44a97c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/sw.c
|
||||
@@ -24,9 +24,6 @@ static void rtl92ee_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/**
|
||||
* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
index 30bce381c3bb..675bdd32feb1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192se/sw.c
|
||||
@@ -21,9 +21,6 @@ static void rtl92s_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
* 1 - Enable ASPM without Clock Req,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
index c821436a1991..dd7505e2f22c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/sw.c
|
||||
@@ -26,9 +26,6 @@ static void rtl8723e_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/**
|
||||
* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
index 43b611d5288d..162c34f0e9b7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/sw.c
|
||||
@@ -26,9 +26,6 @@ static void rtl8723be_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
* 1 - Enable ASPM without Clock Req,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
index 0bca542e103f..7b911695db33 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8821ae/sw.c
|
||||
@@ -23,9 +23,6 @@ static void rtl8821ae_init_aspm_vars(struct ieee80211_hw *hw)
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
|
||||
|
||||
- /*close ASPM for AMD defaultly */
|
||||
- rtlpci->const_amdpci_aspm = 0;
|
||||
-
|
||||
/**
|
||||
* ASPM PS mode.
|
||||
* 0 - Disable ASPM,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 600b33905cab..b105c713e35f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2023,8 +2023,6 @@ struct rtl_ps_ctl {
|
||||
u32 cur_ps_level;
|
||||
u32 reg_rfps_level;
|
||||
|
||||
- /*just for PCIE ASPM */
|
||||
- u8 const_amdpci_aspm;
|
||||
bool pwrdown_mode;
|
||||
|
||||
enum rf_pwrstate inactive_pwrstate;
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,50 +0,0 @@
|
||||
From 366e361d988e0d62cc2b27e1e6255651b0353f3c Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Sat, 13 Jan 2024 01:42:29 +0200
|
||||
Subject: [PATCH 5/7] wifi: rtlwifi: rtl8192de: Don't read register in
|
||||
_rtl92de_query_rxphystatus
|
||||
|
||||
Instead of reading bit 9 of RFPGA0_XA_HSSIPARAMETER2 every time a frame
|
||||
is received, just use rtlphy->cck_high_power, which is initialised in
|
||||
_rtl92d_phy_bb_config(). That bit never changes anyway.
|
||||
|
||||
With this change _rtl92de_query_rxphystatus() can be shared with the
|
||||
upcoming USB driver. The USB driver can't read registers in this
|
||||
function because register reading can sleep.
|
||||
|
||||
Compile tested only.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/19a3e023-0eaa-4096-9f78-a2c8e909cb54@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c | 5 ++---
|
||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
index 02ac69c08ed3..192982ec8152 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/trx.c
|
||||
@@ -42,6 +42,7 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
|
||||
bool packet_beacon)
|
||||
{
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
+ struct rtl_phy *rtlphy = &(rtlpriv->phy);
|
||||
struct rtl_ps_ctl *ppsc = rtl_psc(rtlpriv);
|
||||
struct phy_sts_cck_8192d *cck_buf;
|
||||
s8 rx_pwr_all, rx_pwr[4];
|
||||
@@ -62,9 +63,7 @@ static void _rtl92de_query_rxphystatus(struct ieee80211_hw *hw,
|
||||
u8 report, cck_highpwr;
|
||||
cck_buf = (struct phy_sts_cck_8192d *)p_drvinfo;
|
||||
if (ppsc->rfpwr_state == ERFON)
|
||||
- cck_highpwr = (u8) rtl_get_bbreg(hw,
|
||||
- RFPGA0_XA_HSSIPARAMETER2,
|
||||
- BIT(9));
|
||||
+ cck_highpwr = rtlphy->cck_high_power;
|
||||
else
|
||||
cck_highpwr = false;
|
||||
if (!cck_highpwr) {
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 5c051c716329a26d66f893e9415f22f65381a77a Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Tue, 27 Feb 2024 14:15:52 +0200
|
||||
Subject: [PATCH 6/7] wifi: rtlwifi: Remove rtl_intf_ops.read_efuse_byte
|
||||
|
||||
PCI drivers and USB drivers can both use the same function,
|
||||
read_efuse_byte(), and they can call it directly.
|
||||
|
||||
rtl8192de was the only user.
|
||||
|
||||
Tested only with the upcoming rtl8192du driver.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/4e2c968d-f25c-4a40-be97-4fdcbdde69cf@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtlwifi/pci.c | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c | 6 ++----
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 -
|
||||
3 files changed, 2 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/pci.c b/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
index b163a069660b..6f57bf8f404e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/pci.c
|
||||
@@ -2422,7 +2422,6 @@ EXPORT_SYMBOL(rtl_pci_resume);
|
||||
#endif /* CONFIG_PM_SLEEP */
|
||||
|
||||
const struct rtl_intf_ops rtl_pci_ops = {
|
||||
- .read_efuse_byte = read_efuse_byte,
|
||||
.adapter_start = rtl_pci_start,
|
||||
.adapter_stop = rtl_pci_stop,
|
||||
.check_buddy_priv = rtl_pci_check_buddy_priv,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
index 743ac6871bf4..4ba42f6be3f2 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192de/hw.c
|
||||
@@ -1669,10 +1669,8 @@ static void _rtl92de_efuse_update_chip_version(struct ieee80211_hw *hw)
|
||||
u8 cutvalue[2];
|
||||
u16 chipvalue;
|
||||
|
||||
- rtlpriv->intf_ops->read_efuse_byte(hw, EEPROME_CHIP_VERSION_H,
|
||||
- &cutvalue[1]);
|
||||
- rtlpriv->intf_ops->read_efuse_byte(hw, EEPROME_CHIP_VERSION_L,
|
||||
- &cutvalue[0]);
|
||||
+ read_efuse_byte(hw, EEPROME_CHIP_VERSION_H, &cutvalue[1]);
|
||||
+ read_efuse_byte(hw, EEPROME_CHIP_VERSION_L, &cutvalue[0]);
|
||||
chipvalue = (cutvalue[1] << 8) | cutvalue[0];
|
||||
switch (chipvalue) {
|
||||
case 0xAA55:
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index b105c713e35f..3cd95dd4e711 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2315,7 +2315,6 @@ struct rtl_hal_ops {
|
||||
|
||||
struct rtl_intf_ops {
|
||||
/*com */
|
||||
- void (*read_efuse_byte)(struct ieee80211_hw *hw, u16 _offset, u8 *pbuf);
|
||||
int (*adapter_start)(struct ieee80211_hw *hw);
|
||||
void (*adapter_stop)(struct ieee80211_hw *hw);
|
||||
bool (*check_buddy_priv)(struct ieee80211_hw *hw,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,259 +0,0 @@
|
||||
From 548fc9fe36544db208afb45c4ce6e85c7a548fad Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Tue, 13 Feb 2024 16:33:11 +0200
|
||||
Subject: [PATCH 7/7] wifi: rtlwifi: rtl_usb: Store the endpoint addresses
|
||||
|
||||
And use the stored addresses in rtl8192cu instead of hardcoding them.
|
||||
|
||||
This is what the vendor drivers do.
|
||||
|
||||
Perhaps this is not strictly necessary for RTL8192CU devices. However,
|
||||
the dual mac version of RTL8192DU has two USB interfaces, each with its
|
||||
own set of endpoints. Hardcoding their addresses in the upcoming
|
||||
rtl8192du driver would require making some assumptions which I'm not
|
||||
qualified to make.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/7b6a602a-6101-4bab-958d-bcff4d565b40@gmail.com
|
||||
---
|
||||
.../wireless/realtek/rtlwifi/rtl8192cu/sw.c | 1 -
|
||||
.../wireless/realtek/rtlwifi/rtl8192cu/trx.c | 77 ++++++++++---------
|
||||
.../wireless/realtek/rtlwifi/rtl8192cu/trx.h | 1 -
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.c | 31 ++++++--
|
||||
drivers/net/wireless/realtek/rtlwifi/usb.h | 2 +
|
||||
drivers/net/wireless/realtek/rtlwifi/wifi.h | 1 -
|
||||
6 files changed, 68 insertions(+), 45 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
index e6403d4c937c..bf63c060c985 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/sw.c
|
||||
@@ -146,7 +146,6 @@ MODULE_PARM_DESC(debug_mask, "Set debug mask (default 0)");
|
||||
|
||||
static struct rtl_hal_usbint_cfg rtl92cu_interface_cfg = {
|
||||
/* rx */
|
||||
- .in_ep_num = RTL92C_USB_BULK_IN_NUM,
|
||||
.rx_urb_num = RTL92C_NUM_RX_URBS,
|
||||
.rx_max_size = RTL92C_SIZE_MAX_RX_BUFFER,
|
||||
.usb_rx_hdl = rtl8192cu_rx_hdl,
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
index 9969e9d1fc4b..e051295ea596 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.c
|
||||
@@ -79,68 +79,75 @@ static int configvernoutep(struct ieee80211_hw *hw)
|
||||
static void twooutepmapping(struct ieee80211_hw *hw, bool is_chip8,
|
||||
bool bwificfg, struct rtl_ep_map *ep_map)
|
||||
{
|
||||
+ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw);
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv);
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
if (bwificfg) { /* for WMM */
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"USB Chip-B & WMM Setting.....\n");
|
||||
- ep_map->ep_mapping[RTL_TXQ_BE] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BK] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VI] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VO] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_MGT] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BCN] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_HI] = 2;
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
} else { /* typical setting */
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"USB typical Setting.....\n");
|
||||
- ep_map->ep_mapping[RTL_TXQ_BE] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BK] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VI] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VO] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_MGT] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BCN] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_HI] = 2;
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
}
|
||||
}
|
||||
|
||||
static void threeoutepmapping(struct ieee80211_hw *hw, bool bwificfg,
|
||||
struct rtl_ep_map *ep_map)
|
||||
{
|
||||
+ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw);
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv);
|
||||
struct rtl_priv *rtlpriv = rtl_priv(hw);
|
||||
|
||||
if (bwificfg) { /* for WMM */
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"USB 3EP Setting for WMM.....\n");
|
||||
- ep_map->ep_mapping[RTL_TXQ_BE] = 5;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BK] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VI] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VO] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_MGT] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BCN] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_HI] = 2;
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[2];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
} else { /* typical setting */
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"USB 3EP Setting for typical.....\n");
|
||||
- ep_map->ep_mapping[RTL_TXQ_BE] = 5;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BK] = 5;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VI] = 3;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VO] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_MGT] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BCN] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_HI] = 2;
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[2];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[2];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[1];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
}
|
||||
}
|
||||
|
||||
static void oneoutepmapping(struct ieee80211_hw *hw, struct rtl_ep_map *ep_map)
|
||||
{
|
||||
- ep_map->ep_mapping[RTL_TXQ_BE] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BK] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VI] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_VO] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_MGT] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_BCN] = 2;
|
||||
- ep_map->ep_mapping[RTL_TXQ_HI] = 2;
|
||||
+ struct rtl_usb_priv *usb_priv = rtl_usbpriv(hw);
|
||||
+ struct rtl_usb *rtlusb = rtl_usbdev(usb_priv);
|
||||
+
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BE] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BK] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VI] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_VO] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_MGT] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_BCN] = rtlusb->out_eps[0];
|
||||
+ ep_map->ep_mapping[RTL_TXQ_HI] = rtlusb->out_eps[0];
|
||||
}
|
||||
|
||||
static int _out_ep_mapping(struct ieee80211_hw *hw)
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
index cc4ef2bfd2e7..31ec9deae7fb 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8192cu/trx.h
|
||||
@@ -4,7 +4,6 @@
|
||||
#ifndef __RTL92CU_TRX_H__
|
||||
#define __RTL92CU_TRX_H__
|
||||
|
||||
-#define RTL92C_USB_BULK_IN_NUM 1
|
||||
#define RTL92C_NUM_RX_URBS 8
|
||||
#define RTL92C_NUM_TX_URBS 32
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.c b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
index 30bf2775a335..706909a50790 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.c
|
||||
@@ -280,7 +280,6 @@ static int _rtl_usb_init_rx(struct ieee80211_hw *hw)
|
||||
|
||||
rtlusb->rx_max_size = rtlpriv->cfg->usb_interface_cfg->rx_max_size;
|
||||
rtlusb->rx_urb_num = rtlpriv->cfg->usb_interface_cfg->rx_urb_num;
|
||||
- rtlusb->in_ep = rtlpriv->cfg->usb_interface_cfg->in_ep_num;
|
||||
rtlusb->usb_rx_hdl = rtlpriv->cfg->usb_interface_cfg->usb_rx_hdl;
|
||||
rtlusb->usb_rx_segregate_hdl =
|
||||
rtlpriv->cfg->usb_interface_cfg->usb_rx_segregate_hdl;
|
||||
@@ -312,20 +311,38 @@ static int _rtl_usb_init(struct ieee80211_hw *hw)
|
||||
|
||||
pep_desc = &usb_intf->cur_altsetting->endpoint[epidx].desc;
|
||||
|
||||
- if (usb_endpoint_dir_in(pep_desc))
|
||||
+ if (usb_endpoint_dir_in(pep_desc)) {
|
||||
+ if (usb_endpoint_xfer_bulk(pep_desc)) {
|
||||
+ /* The vendor drivers assume there is only one
|
||||
+ * bulk in ep and that it's the first in ep.
|
||||
+ */
|
||||
+ if (rtlusb->in_ep_nums == 0)
|
||||
+ rtlusb->in_ep = usb_endpoint_num(pep_desc);
|
||||
+ else
|
||||
+ pr_warn("%s: bulk in endpoint is not the first in endpoint\n",
|
||||
+ __func__);
|
||||
+ }
|
||||
+
|
||||
rtlusb->in_ep_nums++;
|
||||
- else if (usb_endpoint_dir_out(pep_desc))
|
||||
+ } else if (usb_endpoint_dir_out(pep_desc)) {
|
||||
+ if (rtlusb->out_ep_nums < RTL_USB_MAX_BULKOUT_NUM) {
|
||||
+ if (usb_endpoint_xfer_bulk(pep_desc))
|
||||
+ rtlusb->out_eps[rtlusb->out_ep_nums] =
|
||||
+ usb_endpoint_num(pep_desc);
|
||||
+ } else {
|
||||
+ pr_warn("%s: found more bulk out endpoints than the expected %d\n",
|
||||
+ __func__, RTL_USB_MAX_BULKOUT_NUM);
|
||||
+ }
|
||||
+
|
||||
rtlusb->out_ep_nums++;
|
||||
+ }
|
||||
|
||||
rtl_dbg(rtlpriv, COMP_INIT, DBG_DMESG,
|
||||
"USB EP(0x%02x), MaxPacketSize=%d, Interval=%d\n",
|
||||
pep_desc->bEndpointAddress, pep_desc->wMaxPacketSize,
|
||||
pep_desc->bInterval);
|
||||
}
|
||||
- if (rtlusb->in_ep_nums < rtlpriv->cfg->usb_interface_cfg->in_ep_num) {
|
||||
- pr_err("Too few input end points found\n");
|
||||
- return -EINVAL;
|
||||
- }
|
||||
+
|
||||
if (rtlusb->out_ep_nums == 0) {
|
||||
pr_err("No output end points found\n");
|
||||
return -EINVAL;
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/usb.h b/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
index 3bf85b23eec1..12529afc0510 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/usb.h
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
#define RTL_USB_MAX_TXQ_NUM 4 /* max tx queue */
|
||||
#define RTL_USB_MAX_EP_NUM 6 /* max ep number */
|
||||
+#define RTL_USB_MAX_BULKOUT_NUM 4
|
||||
#define RTL_USB_MAX_TX_URBS_NUM 8
|
||||
|
||||
enum rtl_txq {
|
||||
@@ -94,6 +95,7 @@ struct rtl_usb {
|
||||
|
||||
/* Tx */
|
||||
u8 out_ep_nums ;
|
||||
+ u8 out_eps[RTL_USB_MAX_BULKOUT_NUM];
|
||||
u8 out_queue_sel;
|
||||
struct rtl_ep_map ep_map;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtlwifi/wifi.h b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
index 3cd95dd4e711..b2179fd1d709 100644
|
||||
--- a/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
+++ b/drivers/net/wireless/realtek/rtlwifi/wifi.h
|
||||
@@ -2378,7 +2378,6 @@ struct rtl_mod_params {
|
||||
|
||||
struct rtl_hal_usbint_cfg {
|
||||
/* data - rx */
|
||||
- u32 in_ep_num;
|
||||
u32 rx_urb_num;
|
||||
u32 rx_max_size;
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
@ -1,156 +0,0 @@
|
||||
From 14a5b11532e850e7a748cbb4c74ac5c5abf18211 Mon Sep 17 00:00:00 2001
|
||||
From: Zong-Zhe Yang <kevin_yang@realtek.com>
|
||||
Date: Wed, 4 Oct 2023 16:50:51 +0800
|
||||
Subject: [PATCH] wifi: rtw88: 8821c: tweak CCK TX filter setting for SRRC
|
||||
regulation
|
||||
|
||||
Since new criterion released by SRRC (State Radio Regulatory Commission,
|
||||
China) is stricter, we have adjusted TX power limit tables for it. But,
|
||||
due to RTL8821C HW characteristic, we still need to use specific parameter
|
||||
in CCK TX filter when set channel to avoid violations in some corner cases.
|
||||
|
||||
Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231004085051.205683-6-pkshih@realtek.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/regd.c | 8 +++
|
||||
drivers/net/wireless/realtek/rtw88/regd.h | 2 +
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 67 +++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 1 +
|
||||
4 files changed, 78 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/regd.c b/drivers/net/wireless/realtek/rtw88/regd.c
|
||||
index 124fc7ae6a1476..7f3b2ea3f2a560 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/regd.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/regd.c
|
||||
@@ -502,6 +502,14 @@ u8 rtw_regd_get(struct rtw_dev *rtwdev)
|
||||
}
|
||||
EXPORT_SYMBOL(rtw_regd_get);
|
||||
|
||||
+bool rtw_regd_srrc(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ struct rtw_regd *regd = &rtwdev->regd;
|
||||
+
|
||||
+ return rtw_reg_match(regd->regulatory, "CN");
|
||||
+}
|
||||
+EXPORT_SYMBOL(rtw_regd_srrc);
|
||||
+
|
||||
struct rtw_regd_alternative_t {
|
||||
bool set;
|
||||
u8 alt;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/regd.h b/drivers/net/wireless/realtek/rtw88/regd.h
|
||||
index 34cb13d0cd9ebc..3c5a6fd8e6ddd8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/regd.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/regd.h
|
||||
@@ -68,4 +68,6 @@ int rtw_regd_init(struct rtw_dev *rtwdev);
|
||||
int rtw_regd_hint(struct rtw_dev *rtwdev);
|
||||
u8 rtw_regd_get(struct rtw_dev *rtwdev);
|
||||
bool rtw_regd_has_alt(u8 regd, u8 *regd_alt);
|
||||
+bool rtw_regd_srrc(struct rtw_dev *rtwdev);
|
||||
+
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
index adf224618a2a6f..429bb420b0563e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -381,6 +381,65 @@ static void rtw8821c_set_channel_rxdfir(struct rtw_dev *rtwdev, u8 bw)
|
||||
}
|
||||
}
|
||||
|
||||
+static void rtw8821c_cck_tx_filter_srrc(struct rtw_dev *rtwdev, u8 channel, u8 bw)
|
||||
+{
|
||||
+ struct rtw_hal *hal = &rtwdev->hal;
|
||||
+
|
||||
+ if (channel == 14) {
|
||||
+ rtw_write32_mask(rtwdev, REG_CCA_FLTR, MASKHWORD, 0xe82c);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x0000b81c);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x0000);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, 0x00003667);
|
||||
+
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00002);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00000);
|
||||
+ } else if (channel == 13 ||
|
||||
+ (channel == 11 && bw == RTW_CHANNEL_WIDTH_40)) {
|
||||
+ rtw_write32_mask(rtwdev, REG_CCA_FLTR, MASKHWORD, 0xf8fe);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x64b80c1c);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x8810);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD, 0x01235667);
|
||||
+
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00002);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00027);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00027);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00029);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00026);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00000);
|
||||
+ } else {
|
||||
+ rtw_write32_mask(rtwdev, REG_CCA_FLTR, MASKHWORD, 0xe82c);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD,
|
||||
+ hal->ch_param[0]);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD,
|
||||
+ hal->ch_param[1] & MASKLWORD);
|
||||
+ rtw_write32_mask(rtwdev, REG_TXFILTER, MASKDWORD,
|
||||
+ hal->ch_param[2]);
|
||||
+
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00002);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0001c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000e);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWA, RFREG_MASK, 0x0000c);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWD0, RFREG_MASK, 0x00000);
|
||||
+ rtw_write_rf(rtwdev, RF_PATH_A, RF_LUTWE2, RFREG_MASK, 0x00000);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
u8 primary_ch_idx)
|
||||
{
|
||||
@@ -395,6 +454,13 @@ static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
|
||||
rtw_write32_mask(rtwdev, REG_TXSCALE_A, 0xf00, 0x0);
|
||||
rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x96a);
|
||||
+
|
||||
+ if (rtw_regd_srrc(rtwdev)) {
|
||||
+ rtw8821c_cck_tx_filter_srrc(rtwdev, channel, bw);
|
||||
+ goto set_bw;
|
||||
+ }
|
||||
+
|
||||
+ /* CCK TX filter parameters for default case */
|
||||
if (channel == 14) {
|
||||
rtw_write32_mask(rtwdev, REG_TXSF2, MASKDWORD, 0x0000b81c);
|
||||
rtw_write32_mask(rtwdev, REG_TXSF6, MASKLWORD, 0x0000);
|
||||
@@ -430,6 +496,7 @@ static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
rtw_write32_mask(rtwdev, REG_CLKTRK, 0x1ffe0000, 0x412);
|
||||
}
|
||||
|
||||
+set_bw:
|
||||
switch (bw) {
|
||||
case RTW_CHANNEL_WIDTH_20:
|
||||
default:
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.h b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
index fcff31688c453a..91ed921407bbe7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
@@ -238,6 +238,7 @@ extern const struct rtw_chip_info rtw8821c_hw_spec;
|
||||
#define REG_RXSB 0xa00
|
||||
#define REG_ADCINI 0xa04
|
||||
#define REG_PWRTH 0xa08
|
||||
+#define REG_CCA_FLTR 0xa20
|
||||
#define REG_TXSF2 0xa24
|
||||
#define REG_TXSF6 0xa28
|
||||
#define REG_FA_CCK 0xa5c
|
@ -1,52 +0,0 @@
|
||||
From 8d101b15f86dae41fcf1afe448d5a52c1956c465 Mon Sep 17 00:00:00 2001
|
||||
From: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Date: Wed, 3 Jan 2024 15:01:55 +0800
|
||||
Subject: [PATCH] wifi: rtw88: 8822ce: refine power parameters for RFE type 5
|
||||
|
||||
Refine the power parameters for better step response especially at high
|
||||
current ramp case that is caused by power inductor variation.
|
||||
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://msgid.link/20240103070155.119488-1-pkshih@realtek.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 4 ++++
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 3 +++
|
||||
2 files changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
index 2bfc0e822b8d0b..9986a4cb37eb2b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -1450,6 +1450,7 @@ static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev)
|
||||
{
|
||||
struct rtw_pci *rtwpci = (struct rtw_pci *)rtwdev->priv;
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
+ struct rtw_efuse *efuse = &rtwdev->efuse;
|
||||
struct pci_dev *pdev = rtwpci->pdev;
|
||||
const struct rtw_intf_phy_para *para;
|
||||
u16 cut;
|
||||
@@ -1498,6 +1499,9 @@ static void rtw_pci_phy_cfg(struct rtw_dev *rtwdev)
|
||||
rtw_err(rtwdev, "failed to set PCI cap, ret = %d\n",
|
||||
ret);
|
||||
}
|
||||
+
|
||||
+ if (chip->id == RTW_CHIP_TYPE_8822C && efuse->rfe_option == 5)
|
||||
+ rtw_write32_mask(rtwdev, REG_ANAPARSW_MAC_0, BIT_CF_L_V2, 0x1);
|
||||
}
|
||||
|
||||
static int __maybe_unused rtw_pci_suspend(struct device *dev)
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index 1634f03784f171..b122f226924be5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -557,6 +557,9 @@
|
||||
#define REG_RFE_INV16 0x0cbe
|
||||
#define BIT_RFE_BUF_EN BIT(3)
|
||||
|
||||
+#define REG_ANAPARSW_MAC_0 0x1010
|
||||
+#define BIT_CF_L_V2 GENMASK(29, 28)
|
||||
+
|
||||
#define REG_ANAPAR_XTAL_0 0x1040
|
||||
#define BIT_XCAP_0 GENMASK(23, 10)
|
||||
#define REG_CPU_DMEM_CON 0x1080
|
@ -1,46 +0,0 @@
|
||||
From 1926a27299db00239d6bdc4c3f2bd3f842277d0d Mon Sep 17 00:00:00 2001
|
||||
From: Chin-Yen Lee <timlee@realtek.com>
|
||||
Date: Mon, 16 Oct 2023 13:35:53 +0800
|
||||
Subject: [PATCH] wifi: rtw88: debug: add to check if debug mask is enabled
|
||||
|
||||
The coming dump function for FW malfunction will add a function to
|
||||
dump registers to reflect status. However, if we are not debugging
|
||||
the mechanism, we don't print anything, so avoid reading registers by
|
||||
checking debug mask to reduce IO.
|
||||
|
||||
Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231016053554.744180-2-pkshih@realtek.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/debug.h | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/debug.h b/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
index a9149c6c2b48c5..a03ced11bbe042 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/debug.h
|
||||
@@ -48,11 +48,23 @@ void __rtw_dbg(struct rtw_dev *rtwdev, enum rtw_debug_mask mask,
|
||||
|
||||
#define rtw_dbg(rtwdev, a...) __rtw_dbg(rtwdev, ##a)
|
||||
|
||||
+static inline bool rtw_dbg_is_enabled(struct rtw_dev *rtwdev,
|
||||
+ enum rtw_debug_mask mask)
|
||||
+{
|
||||
+ return !!(rtw_debug_mask & mask);
|
||||
+}
|
||||
+
|
||||
#else
|
||||
|
||||
static inline void rtw_dbg(struct rtw_dev *rtwdev, enum rtw_debug_mask mask,
|
||||
const char *fmt, ...) {}
|
||||
|
||||
+static inline bool rtw_dbg_is_enabled(struct rtw_dev *rtwdev,
|
||||
+ enum rtw_debug_mask mask)
|
||||
+{
|
||||
+ return false;
|
||||
+}
|
||||
+
|
||||
#endif /* CONFIG_RTW88_DEBUG */
|
||||
|
||||
#define rtw_info(rtwdev, a...) dev_info(rtwdev->dev, ##a)
|
@ -1,234 +0,0 @@
|
||||
From 20907fc069976fcf972239b7b253cf7c59c08a14 Mon Sep 17 00:00:00 2001
|
||||
From: Chin-Yen Lee <timlee@realtek.com>
|
||||
Date: Mon, 16 Oct 2023 13:35:54 +0800
|
||||
Subject: [PATCH] wifi: rtw88: dump firmware debug information in abnormal
|
||||
state
|
||||
|
||||
Sometimes firmware may enter strange state or infinite
|
||||
loop due to unknown bug, and then it will lead critical
|
||||
function fail, such as sending H2C command or changing
|
||||
power mode. In these abnormal states, we add more debug
|
||||
information, including hardware register status, to help
|
||||
further investigation.
|
||||
|
||||
Signed-off-by: Chin-Yen Lee <timlee@realtek.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Signed-off-by: Kalle Valo <kvalo@kernel.org>
|
||||
Link: https://lore.kernel.org/r/20231016053554.744180-3-pkshih@realtek.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 74 +++++++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/fw.h | 3 +
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 6 ++
|
||||
drivers/net/wireless/realtek/rtw88/ps.c | 2 +
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 23 +++++++
|
||||
5 files changed, 108 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
index a1b674e3caaa3c..acd78311c8c4a1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -17,6 +17,79 @@
|
||||
#include "phy.h"
|
||||
#include "mac.h"
|
||||
|
||||
+static const struct rtw_hw_reg_desc fw_h2c_regs[] = {
|
||||
+ {REG_FWIMR, MASKDWORD, "FWIMR"},
|
||||
+ {REG_FWIMR, BIT_FS_H2CCMD_INT_EN, "FWIMR enable"},
|
||||
+ {REG_FWISR, MASKDWORD, "FWISR"},
|
||||
+ {REG_FWISR, BIT_FS_H2CCMD_INT, "FWISR enable"},
|
||||
+ {REG_HMETFR, BIT_INT_BOX_ALL, "BoxBitMap"},
|
||||
+ {REG_HMEBOX0, MASKDWORD, "MSG 0"},
|
||||
+ {REG_HMEBOX0_EX, MASKDWORD, "MSG_EX 0"},
|
||||
+ {REG_HMEBOX1, MASKDWORD, "MSG 1"},
|
||||
+ {REG_HMEBOX1_EX, MASKDWORD, "MSG_EX 1"},
|
||||
+ {REG_HMEBOX2, MASKDWORD, "MSG 2"},
|
||||
+ {REG_HMEBOX2_EX, MASKDWORD, "MSG_EX 2"},
|
||||
+ {REG_HMEBOX3, MASKDWORD, "MSG 3"},
|
||||
+ {REG_HMEBOX3_EX, MASKDWORD, "MSG_EX 3"},
|
||||
+ {REG_FT1IMR, MASKDWORD, "FT1IMR"},
|
||||
+ {REG_FT1IMR, BIT_FS_H2C_CMD_OK_INT_EN, "FT1IMR enable"},
|
||||
+ {REG_FT1ISR, MASKDWORD, "FT1ISR"},
|
||||
+ {REG_FT1ISR, BIT_FS_H2C_CMD_OK_INT, "FT1ISR enable "},
|
||||
+};
|
||||
+
|
||||
+static const struct rtw_hw_reg_desc fw_c2h_regs[] = {
|
||||
+ {REG_FWIMR, MASKDWORD, "FWIMR"},
|
||||
+ {REG_FWIMR, BIT_FS_H2CCMD_INT_EN, "CPWM"},
|
||||
+ {REG_FWIMR, BIT_FS_HRCV_INT_EN, "HRECV"},
|
||||
+ {REG_FWISR, MASKDWORD, "FWISR"},
|
||||
+ {REG_FWISR, BIT_FS_H2CCMD_INT, "CPWM"},
|
||||
+ {REG_FWISR, BIT_FS_HRCV_INT, "HRECV"},
|
||||
+ {REG_CPWM, MASKDWORD, "REG_CPWM"},
|
||||
+};
|
||||
+
|
||||
+static const struct rtw_hw_reg_desc fw_core_regs[] = {
|
||||
+ {REG_ARFR2_V1, MASKDWORD, "EPC"},
|
||||
+ {REG_ARFRH2_V1, MASKDWORD, "BADADDR"},
|
||||
+ {REG_ARFR3_V1, MASKDWORD, "CAUSE"},
|
||||
+ {REG_ARFR3_V1, BIT_EXC_CODE, "ExcCode"},
|
||||
+ {REG_ARFRH3_V1, MASKDWORD, "Status"},
|
||||
+ {REG_ARFR4, MASKDWORD, "SP"},
|
||||
+ {REG_ARFRH4, MASKDWORD, "RA"},
|
||||
+ {REG_FW_DBG6, MASKDWORD, "DBG 6"},
|
||||
+ {REG_FW_DBG7, MASKDWORD, "DBG 7"},
|
||||
+};
|
||||
+
|
||||
+static void _rtw_fw_dump_dbg_info(struct rtw_dev *rtwdev,
|
||||
+ const struct rtw_hw_reg_desc regs[], u32 size)
|
||||
+{
|
||||
+ const struct rtw_hw_reg_desc *reg;
|
||||
+ u32 val;
|
||||
+ int i;
|
||||
+
|
||||
+ for (i = 0; i < size; i++) {
|
||||
+ reg = ®s[i];
|
||||
+ val = rtw_read32_mask(rtwdev, reg->addr, reg->mask);
|
||||
+
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_FW, "[%s]addr:0x%x mask:0x%x value:0x%x\n",
|
||||
+ reg->desc, reg->addr, reg->mask, val);
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+void rtw_fw_dump_dbg_info(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ int i;
|
||||
+
|
||||
+ if (!rtw_dbg_is_enabled(rtwdev, RTW_DBG_FW))
|
||||
+ return;
|
||||
+
|
||||
+ _rtw_fw_dump_dbg_info(rtwdev, fw_h2c_regs, ARRAY_SIZE(fw_h2c_regs));
|
||||
+ _rtw_fw_dump_dbg_info(rtwdev, fw_c2h_regs, ARRAY_SIZE(fw_c2h_regs));
|
||||
+ for (i = 0 ; i < RTW_DEBUG_DUMP_TIMES; i++) {
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_FW, "Firmware Coredump %dth\n", i + 1);
|
||||
+ _rtw_fw_dump_dbg_info(rtwdev, fw_core_regs, ARRAY_SIZE(fw_core_regs));
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
static void rtw_fw_c2h_cmd_handle_ext(struct rtw_dev *rtwdev,
|
||||
struct sk_buff *skb)
|
||||
{
|
||||
@@ -349,6 +422,7 @@ static void rtw_fw_send_h2c_command_register(struct rtw_dev *rtwdev,
|
||||
|
||||
if (ret) {
|
||||
rtw_err(rtwdev, "failed to send h2c command\n");
|
||||
+ rtw_fw_dump_dbg_info(rtwdev);
|
||||
return;
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
index 43ccdf9965ac46..84e47c71ea1255 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
@@ -44,6 +44,8 @@
|
||||
#define RTW_OLD_PROBE_PG_CNT 2
|
||||
#define RTW_PROBE_PG_CNT 4
|
||||
|
||||
+#define RTW_DEBUG_DUMP_TIMES 10
|
||||
+
|
||||
enum rtw_c2h_cmd_id {
|
||||
C2H_CCX_TX_RPT = 0x03,
|
||||
C2H_BT_INFO = 0x09,
|
||||
@@ -808,6 +810,7 @@ static inline bool rtw_fw_feature_ext_check(struct rtw_fw_state *fw,
|
||||
return !!(fw->feature_ext & feature);
|
||||
}
|
||||
|
||||
+void rtw_fw_dump_dbg_info(struct rtw_dev *rtwdev);
|
||||
void rtw_fw_c2h_cmd_rx_irqsafe(struct rtw_dev *rtwdev, u32 pkt_offset,
|
||||
struct sk_buff *skb);
|
||||
void rtw_fw_c2h_cmd_handle(struct rtw_dev *rtwdev, struct sk_buff *skb);
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 86dc1516effade..b6bfd4c02e2db3 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -524,6 +524,12 @@ struct rtw_hw_reg {
|
||||
u32 mask;
|
||||
};
|
||||
|
||||
+struct rtw_hw_reg_desc {
|
||||
+ u32 addr;
|
||||
+ u32 mask;
|
||||
+ const char *desc;
|
||||
+};
|
||||
+
|
||||
struct rtw_ltecoex_addr {
|
||||
u32 ctrl;
|
||||
u32 wdata;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/ps.c b/drivers/net/wireless/realtek/rtw88/ps.c
|
||||
index 07e8cbd436cd81..add5a20b84320f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/ps.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/ps.c
|
||||
@@ -104,6 +104,7 @@ void rtw_power_mode_change(struct rtw_dev *rtwdev, bool enter)
|
||||
*/
|
||||
WARN(1, "firmware failed to ack driver for %s Deep Power mode\n",
|
||||
enter ? "entering" : "leaving");
|
||||
+ rtw_fw_dump_dbg_info(rtwdev);
|
||||
}
|
||||
}
|
||||
EXPORT_SYMBOL(rtw_power_mode_change);
|
||||
@@ -164,6 +165,7 @@ static void rtw_fw_leave_lps_check(struct rtw_dev *rtwdev)
|
||||
if (ret) {
|
||||
rtw_write32_clr(rtwdev, REG_TCR, BIT_PWRMGT_HWDATA_EN);
|
||||
rtw_warn(rtwdev, "firmware failed to leave lps state\n");
|
||||
+ rtw_fw_dump_dbg_info(rtwdev);
|
||||
}
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index 7c6c11d50ff30f..1634f03784f171 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -224,12 +224,25 @@
|
||||
#define REG_RXFF_BNDY 0x011C
|
||||
#define REG_FE1IMR 0x0120
|
||||
#define BIT_FS_RXDONE BIT(16)
|
||||
+#define REG_CPWM 0x012C
|
||||
+#define REG_FWIMR 0x0130
|
||||
+#define BIT_FS_H2CCMD_INT_EN BIT(4)
|
||||
+#define BIT_FS_HRCV_INT_EN BIT(5)
|
||||
+#define REG_FWISR 0x0134
|
||||
+#define BIT_FS_H2CCMD_INT BIT(4)
|
||||
+#define BIT_FS_HRCV_INT BIT(5)
|
||||
#define REG_PKTBUF_DBG_CTRL 0x0140
|
||||
#define REG_C2HEVT 0x01A0
|
||||
#define REG_MCUTST_1 0x01C0
|
||||
#define REG_MCUTST_II 0x01C4
|
||||
#define REG_WOWLAN_WAKE_REASON 0x01C7
|
||||
#define REG_HMETFR 0x01CC
|
||||
+#define BIT_INT_BOX0 BIT(0)
|
||||
+#define BIT_INT_BOX1 BIT(1)
|
||||
+#define BIT_INT_BOX2 BIT(2)
|
||||
+#define BIT_INT_BOX3 BIT(3)
|
||||
+#define BIT_INT_BOX_ALL (BIT_INT_BOX0 | BIT_INT_BOX1 | BIT_INT_BOX2 | \
|
||||
+ BIT_INT_BOX3)
|
||||
#define REG_HMEBOX0 0x01D0
|
||||
#define REG_HMEBOX1 0x01D4
|
||||
#define REG_HMEBOX2 0x01D8
|
||||
@@ -338,6 +351,11 @@
|
||||
#define BIT_EN_GNT_BT_AWAKE BIT(3)
|
||||
#define BIT_EN_EOF_V1 BIT(2)
|
||||
#define REG_DATA_SC 0x0483
|
||||
+#define REG_ARFR2_V1 0x048C
|
||||
+#define REG_ARFRH2_V1 0x0490
|
||||
+#define REG_ARFR3_V1 0x0494
|
||||
+#define BIT_EXC_CODE GENMASK(6, 2)
|
||||
+#define REG_ARFRH3_V1 0x0498
|
||||
#define REG_ARFR4 0x049C
|
||||
#define BIT_WL_RFK BIT(0)
|
||||
#define REG_ARFRH4 0x04A0
|
||||
@@ -548,11 +566,16 @@
|
||||
|
||||
#define REG_H2C_PKT_READADDR 0x10D0
|
||||
#define REG_H2C_PKT_WRITEADDR 0x10D4
|
||||
+#define REG_FW_DBG6 0x10F8
|
||||
#define REG_FW_DBG7 0x10FC
|
||||
#define FW_KEY_MASK 0xffffff00
|
||||
|
||||
#define REG_CR_EXT 0x1100
|
||||
|
||||
+#define REG_FT1IMR 0x1138
|
||||
+#define BIT_FS_H2C_CMD_OK_INT_EN BIT(25)
|
||||
+#define REG_FT1ISR 0x113c
|
||||
+#define BIT_FS_H2C_CMD_OK_INT BIT(25)
|
||||
#define REG_DDMA_CH0SA 0x1200
|
||||
#define REG_DDMA_CH0DA 0x1204
|
||||
#define REG_DDMA_CH0CTRL 0x1208
|
@ -2,8 +2,8 @@
|
||||
# Copyright (C) 2019-present Team LibreELEC (https://libreelec.tv)
|
||||
|
||||
PKG_NAME="rpi-eeprom"
|
||||
PKG_VERSION="cc0ad4698ee2c1b415285270a4e91229c63e19b5"
|
||||
PKG_SHA256="fb9ba96ad8d80e164dd75ea51e7b2d98da033d708ce4e97ebe684badbb843208"
|
||||
PKG_VERSION="eefb7b83bc9b602455d9eaf34a51149a6e9cca96"
|
||||
PKG_SHA256="962a5403277705a96df2dcaee1a3cdde80f10b06cdd556453fe92f82e6a07485"
|
||||
PKG_LICENSE="BSD-3/custom"
|
||||
PKG_SITE="https://github.com/raspberrypi/rpi-eeprom"
|
||||
PKG_URL="https://github.com/raspberrypi/rpi-eeprom/archive/${PKG_VERSION}.tar.gz"
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user