mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: drop old rtlwifi patches
RPi was the last project using those Signed-off-by: Matthias Reichl <hias@horus.com>
This commit is contained in:
parent
21a079f70b
commit
2fea27fd89
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
|
Loading…
x
Reference in New Issue
Block a user