mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-07-24 11:16:51 +00:00
linux: wifi: rtw88: update patches as they have now been accepted into rtw-next
As the patches have now been added to rtw-next - update the LE patches from upstream at https://github.com/pkshih/rtw https://patchwork.kernel.org/project/linux-wireless/list/?series=&submitter=206810&state=*&q=&archive=both&delegate= https://patchwork.kernel.org/project/linux-wireless/cover/ee6d97b3-0c82-4225-a07f-b0d4043a901a@gmail.com/ https://patchwork.kernel.org/project/linux-wireless/cover/435af284-0794-48e0-81a5-5a88b3c454bf@gmail.com/ https://patchwork.kernel.org/project/linux-wireless/patch/da05b866-a9ff-428c-a008-35e8cf200a98@gmail.com/ https://patchwork.kernel.org/project/linux-wireless/patch/19cda72b-f1f1-4b69-8369-0e4376b646bf@gmail.com/
This commit is contained in:
parent
edd6ecc6ef
commit
9e12294cd2
@ -0,0 +1,501 @@
|
||||
From d12722830ea4f562e91586927ec21b64d0369544 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:00:59 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Add some definitions for RTL8821AU/RTL8812AU
|
||||
|
||||
Add 8821A and 8812A chip type enums.
|
||||
|
||||
Add cck_high_power member to struct rtw_hal. This will be used to
|
||||
calculate the RX signal strength of RTL8812AU.
|
||||
|
||||
Add various register definitions which will be used by the new drivers.
|
||||
|
||||
Move some existing register definitions from rtw8821c.h and rtw8822b.h.
|
||||
They were duplicated in those headers and will also be used by the new
|
||||
drivers.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/9279a9cd-6f86-4dc3-a095-7c36cb9b9d06@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 3 +
|
||||
drivers/net/wireless/realtek/rtw88/reg.h | 174 ++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.h | 24 ---
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.h | 12 --
|
||||
4 files changed, 177 insertions(+), 36 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 05cfb235f272..a2bef559cfb8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -189,6 +189,8 @@ enum rtw_chip_type {
|
||||
RTW_CHIP_TYPE_8723D,
|
||||
RTW_CHIP_TYPE_8821C,
|
||||
RTW_CHIP_TYPE_8703B,
|
||||
+ RTW_CHIP_TYPE_8821A,
|
||||
+ RTW_CHIP_TYPE_8812A,
|
||||
};
|
||||
|
||||
enum rtw_tx_queue_type {
|
||||
@@ -1934,6 +1936,7 @@ struct rtw_hal {
|
||||
u32 antenna_rx;
|
||||
u8 bfee_sts_cap;
|
||||
bool txrx_1ss;
|
||||
+ bool cck_high_power;
|
||||
|
||||
/* protect tx power section */
|
||||
struct mutex tx_power_mutex;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/reg.h b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
index 4d9b8668e8b0..e4d506cf9c33 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/reg.h
|
||||
@@ -9,6 +9,7 @@
|
||||
#define BIT_FEN_EN_25_1 BIT(13)
|
||||
#define BIT_FEN_ELDR BIT(12)
|
||||
#define BIT_FEN_CPUEN BIT(2)
|
||||
+#define BIT_FEN_USBA BIT(2)
|
||||
#define BIT_FEN_BB_GLB_RST BIT(1)
|
||||
#define BIT_FEN_BB_RSTB BIT(0)
|
||||
#define BIT_R_DIS_PRST BIT(6)
|
||||
@@ -16,6 +17,10 @@
|
||||
#define REG_SYS_PW_CTRL 0x0004
|
||||
#define BIT_PFM_WOWL BIT(3)
|
||||
#define BIT_APFM_OFFMAC BIT(9)
|
||||
+#define REG_APS_FSMCO 0x0004
|
||||
+#define APS_FSMCO_MAC_ENABLE BIT(8)
|
||||
+#define APS_FSMCO_MAC_OFF BIT(9)
|
||||
+#define APS_FSMCO_HW_POWERDOWN BIT(15)
|
||||
#define REG_SYS_CLK_CTRL 0x0008
|
||||
#define BIT_CPU_CLK_EN BIT(14)
|
||||
|
||||
@@ -58,6 +63,8 @@
|
||||
#define BIT_SHIFT_LDO25_VOLTAGE 4
|
||||
#define BIT_LDO25_EN BIT(7)
|
||||
|
||||
+#define REG_ACLK_MON 0x3e
|
||||
+
|
||||
#define REG_GPIO_MUXCFG 0x0040
|
||||
#define BIT_FSPI_EN BIT(19)
|
||||
#define BIT_EN_SIC BIT(12)
|
||||
@@ -90,6 +97,8 @@
|
||||
#define BIT_USB_SUS_DIS BIT(8)
|
||||
#define BIT_SDIO_PAD_E5 BIT(18)
|
||||
|
||||
+#define REG_RF_B_CTRL 0x76
|
||||
+
|
||||
#define REG_AFE_CTRL_4 0x0078
|
||||
#define BIT_CK320M_AFE_EN BIT(4)
|
||||
#define BIT_EN_SYN BIT(15)
|
||||
@@ -134,6 +143,11 @@
|
||||
#define REG_PMC_DBG_CTRL1 0xa8
|
||||
#define BITS_PMC_BT_IQK_STS GENMASK(22, 21)
|
||||
|
||||
+#define REG_HIMR0 0xb0
|
||||
+#define REG_HISR0 0xb4
|
||||
+#define REG_HIMR1 0xb8
|
||||
+#define REG_HISR1 0xbc
|
||||
+
|
||||
#define REG_PAD_CTRL2 0x00C4
|
||||
#define BIT_RSM_EN_V1 BIT(16)
|
||||
#define BIT_NO_PDN_CHIPOFF_V1 BIT(17)
|
||||
@@ -185,6 +199,15 @@
|
||||
#define MAC_TRX_ENABLE (BIT_HCI_TXDMA_EN | BIT_HCI_RXDMA_EN | BIT_TXDMA_EN | \
|
||||
BIT_RXDMA_EN | BIT_PROTOCOL_EN | BIT_SCHEDULE_EN | \
|
||||
BIT_MACTXEN | BIT_MACRXEN)
|
||||
+#define REG_PBP 0x104
|
||||
+#define PBP_RX_MASK 0x0f
|
||||
+#define PBP_TX_MASK 0xf0
|
||||
+#define PBP_64 0x0
|
||||
+#define PBP_128 0x1
|
||||
+#define PBP_256 0x2
|
||||
+#define PBP_512 0x3
|
||||
+#define PBP_1024 0x4
|
||||
+
|
||||
#define BIT_SHIFT_TXDMA_VOQ_MAP 4
|
||||
#define BIT_MASK_TXDMA_VOQ_MAP 0x3
|
||||
#define BIT_TXDMA_VOQ_MAP(x) \
|
||||
@@ -256,6 +279,8 @@
|
||||
#define REG_HMEBOX1 0x01D4
|
||||
#define REG_HMEBOX2 0x01D8
|
||||
#define REG_HMEBOX3 0x01DC
|
||||
+#define REG_LLT_INIT 0x01E0
|
||||
+#define BIT_LLT_WRITE_ACCESS BIT(30)
|
||||
#define REG_HMEBOX0_EX 0x01F0
|
||||
#define REG_HMEBOX1_EX 0x01F4
|
||||
#define REG_HMEBOX2_EX 0x01F8
|
||||
@@ -298,6 +323,7 @@
|
||||
|
||||
#define REG_AUTO_LLT 0x0224
|
||||
#define BIT_AUTO_INIT_LLT BIT(16)
|
||||
+#define REG_DWBCN1_CTRL 0x0228
|
||||
#define REG_RQPN_CTRL_1 0x0228
|
||||
#define REG_RQPN_CTRL_2 0x022C
|
||||
#define BIT_LD_RQPN BIT(31)
|
||||
@@ -329,6 +355,7 @@
|
||||
#define BIT_DMA_BURST_SIZE_1024 0
|
||||
|
||||
#define REG_RXPKTNUM 0x02B0
|
||||
+#define REG_EARLY_MODE_CONTROL 0x02BC
|
||||
|
||||
#define REG_INT_MIG 0x0304
|
||||
#define REG_HCI_MIX_CFG 0x03FC
|
||||
@@ -336,6 +363,7 @@
|
||||
|
||||
#define REG_BCNQ_INFO 0x0418
|
||||
#define BIT_MGQ_CPU_EMPTY BIT(24)
|
||||
+#define REG_TXPKT_EMPTY 0x041A
|
||||
#define REG_FWHW_TXQ_CTRL 0x0420
|
||||
#define BIT_EN_BCNQ_DL BIT(22)
|
||||
#define BIT_EN_WR_FREE_TAIL BIT(20)
|
||||
@@ -362,10 +390,12 @@
|
||||
#define REG_AMPDU_MAX_TIME_V1 0x0455
|
||||
#define REG_BCNQ1_BDNY_V1 0x0456
|
||||
#define REG_AMPDU_MAX_TIME 0x0456
|
||||
+#define REG_AMPDU_MAX_LENGTH 0x0458
|
||||
#define REG_WMAC_LBK_BF_HD 0x045D
|
||||
#define REG_TX_HANG_CTRL 0x045E
|
||||
#define BIT_EN_GNT_BT_AWAKE BIT(3)
|
||||
#define BIT_EN_EOF_V1 BIT(2)
|
||||
+#define REG_FAST_EDCA_CTRL 0x0460
|
||||
#define REG_DATA_SC 0x0483
|
||||
#define REG_ARFR2_V1 0x048C
|
||||
#define REG_ARFRH2_V1 0x0490
|
||||
@@ -390,6 +420,8 @@
|
||||
#define REG_PRECNT_CTRL 0x04E5
|
||||
#define BIT_BTCCA_CTRL (BIT(0) | BIT(1))
|
||||
#define BIT_EN_PRECNT BIT(11)
|
||||
+#define REG_TX_RPT_CTRL 0x04EC
|
||||
+#define REG_TX_RPT_TIME 0x04F0
|
||||
#define REG_DUMMY_PAGE4_V1 0x04FC
|
||||
|
||||
#define REG_EDCA_VO_PARAM 0x0500
|
||||
@@ -400,6 +432,7 @@
|
||||
#define BIT_MASK_CWMAX GENMASK(15, 12)
|
||||
#define BIT_MASK_CWMIN GENMASK(11, 8)
|
||||
#define BIT_MASK_AIFS GENMASK(7, 0)
|
||||
+#define REG_BCNTCFG 0x0510
|
||||
#define REG_PIFS 0x0512
|
||||
#define REG_SIFS 0x0514
|
||||
#define BIT_SHIFT_SIFS_OFDM_CTX 8
|
||||
@@ -526,6 +559,8 @@
|
||||
#define REG_BT_COEX_V2 0x0762
|
||||
#define BIT_GNT_BT_POLARITY BIT(12)
|
||||
#define BIT_LTE_COEX_EN BIT(7)
|
||||
+#define REG_GNT_BT 0x0765
|
||||
+#define BIT_PTA_SW_CTL GENMASK(4, 3)
|
||||
#define REG_BT_COEX_ENH_INTR_CTRL 0x76E
|
||||
#define BIT_R_GRANTALL_WLMASK BIT(3)
|
||||
#define BIT_STATIS_BT_EN BIT(2)
|
||||
@@ -543,14 +578,43 @@
|
||||
#define REG_FPGA0_RFMOD 0x0800
|
||||
#define BIT_CCKEN BIT(24)
|
||||
#define BIT_OFDMEN BIT(25)
|
||||
+#define REG_CCK_RPT_FORMAT 0x0804
|
||||
+#define BIT_CCK_RPT_FORMAT BIT(16)
|
||||
+#define REG_RXPSEL 0x0808
|
||||
+#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
+#define REG_TXPSEL 0x080C
|
||||
#define REG_RX_GAIN_EN 0x081c
|
||||
+#define REG_CCASEL 0x082C
|
||||
+#define REG_PDMFTH 0x0830
|
||||
+#define REG_BWINDICATION 0x0834
|
||||
+#define REG_CCA2ND 0x0838
|
||||
+#define REG_L1PKTH 0x0848
|
||||
+#define REG_CLKTRK 0x0860
|
||||
+#define REG_ADCCLK 0x08AC
|
||||
+#define REG_HSSI_READ 0x08B0
|
||||
+#define REG_FPGA0_XCD_RF_PARA 0x08B4
|
||||
+#define REG_RX_MCS_LIMIT 0x08BC
|
||||
+#define REG_ADC160 0x08C4
|
||||
+#define REG_ANTSEL_SW 0x0900
|
||||
+#define REG_DAC_RSTB 0x090c
|
||||
+#define REG_SINGLE_TONE_CONT_TX 0x0914
|
||||
|
||||
#define REG_RFE_CTRL_E 0x0974
|
||||
#define REG_2ND_CCA_CTRL 0x0976
|
||||
+#define REG_IQK_COM00 0x0978
|
||||
+#define REG_IQK_COM32 0x097c
|
||||
+#define REG_IQK_COM64 0x0980
|
||||
+#define REG_IQK_COM96 0x0984
|
||||
+
|
||||
+#define REG_FAS 0x09a4
|
||||
+#define REG_RXSB 0x0a00
|
||||
+#define REG_CCK_RX 0x0a04
|
||||
+#define REG_CCK_PD_TH 0x0a0a
|
||||
|
||||
#define REG_CCK0_FAREPORT 0xa2c
|
||||
#define BIT_CCK0_2RX BIT(18)
|
||||
#define BIT_CCK0_MRC BIT(22)
|
||||
+#define REG_FA_CCK 0x0a5c
|
||||
|
||||
#define REG_DIS_DPD 0x0a70
|
||||
#define DIS_DPD_MASK GENMASK(9, 0)
|
||||
@@ -566,13 +630,109 @@
|
||||
#define DIS_DPD_RATEVHT2SS_MCS1 BIT(9)
|
||||
#define DIS_DPD_RATEALL GENMASK(9, 0)
|
||||
|
||||
+#define REG_CNTRST 0x0b58
|
||||
+
|
||||
+#define REG_3WIRE_SWA 0x0c00
|
||||
+#define REG_RX_IQC_AB_A 0x0c10
|
||||
+#define REG_TXSCALE_A 0x0c1c
|
||||
+#define BB_SWING_MASK GENMASK(31, 21)
|
||||
+#define REG_TX_AGC_A_CCK_11_CCK_1 0xc20
|
||||
+#define REG_TX_AGC_A_OFDM18_OFDM6 0xc24
|
||||
+#define REG_TX_AGC_A_OFDM54_OFDM24 0xc28
|
||||
+#define REG_TX_AGC_A_MCS3_MCS0 0xc2c
|
||||
+#define REG_TX_AGC_A_MCS7_MCS4 0xc30
|
||||
+#define REG_TX_AGC_A_MCS11_MCS8 0xc34
|
||||
+#define REG_TX_AGC_A_MCS15_MCS12 0xc38
|
||||
+#define REG_TX_AGC_A_NSS1_INDEX3_NSS1_INDEX0 0xc3c
|
||||
+#define REG_TX_AGC_A_NSS1_INDEX7_NSS1_INDEX4 0xc40
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX1_NSS1_INDEX8 0xc44
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX5_NSS2_INDEX2 0xc48
|
||||
+#define REG_TX_AGC_A_NSS2_INDEX9_NSS2_INDEX6 0xc4c
|
||||
+#define REG_RXIGI_A 0x0c50
|
||||
+#define REG_TX_PWR_TRAINING_A 0x0c54
|
||||
+#define REG_CK_MONHA 0x0c5c
|
||||
+#define REG_AFE_PWR1_A 0x0c60
|
||||
+#define REG_AFE_PWR2_A 0x0c64
|
||||
+#define REG_RX_WAIT_CCA_TX_CCK_RFON_A 0x0c68
|
||||
+#define REG_OFDM0_XA_TX_IQ_IMBALANCE 0x0c80
|
||||
+#define REG_OFDM0_A_TX_AFE 0x0c84
|
||||
+#define REG_OFDM0_XB_TX_IQ_IMBALANCE 0x0c88
|
||||
+#define REG_TSSI_TRK_SW 0x0c8c
|
||||
+#define REG_LSSI_WRITE_A 0x0c90
|
||||
+#define REG_PREDISTA 0x0c90
|
||||
+#define REG_TXAGCIDX 0x0c94
|
||||
+
|
||||
+#define REG_RFE_PINMUX_A 0x0cb0
|
||||
+#define REG_RFE_INV_A 0x0cb4
|
||||
#define REG_RFE_CTRL8 0x0cb4
|
||||
#define BIT_MASK_RFE_SEL89 GENMASK(7, 0)
|
||||
+#define PTA_CTRL_PIN 0x66
|
||||
+#define DPDT_CTRL_PIN 0x77
|
||||
+#define RFE_INV_MASK 0x3ff00000
|
||||
+#define REG_RFECTL_A 0x0cb8
|
||||
#define REG_RFE_INV8 0x0cbd
|
||||
#define BIT_MASK_RFE_INV89 GENMASK(1, 0)
|
||||
#define REG_RFE_INV16 0x0cbe
|
||||
#define BIT_RFE_BUF_EN BIT(3)
|
||||
|
||||
+#define REG_IQK_DPD_CFG 0x0cc4
|
||||
+#define REG_CFG_PMPD 0x0cc8
|
||||
+#define REG_IQC_Y 0x0ccc
|
||||
+#define REG_IQC_X 0x0cd4
|
||||
+#define REG_INTPO_SETA 0x0ce8
|
||||
+
|
||||
+#define REG_IQKA_END 0x0d00
|
||||
+#define REG_PI_READ_A 0x0d04
|
||||
+#define REG_SI_READ_A 0x0d08
|
||||
+#define REG_IQKB_END 0x0d40
|
||||
+#define REG_PI_READ_B 0x0d44
|
||||
+#define REG_SI_READ_B 0x0d48
|
||||
+
|
||||
+#define REG_3WIRE_SWB 0x0e00
|
||||
+#define REG_RX_IQC_AB_B 0x0e10
|
||||
+#define REG_TXSCALE_B 0x0e1c
|
||||
+#define REG_TX_AGC_B_CCK_11_CCK_1 0xe20
|
||||
+#define REG_TX_AGC_B_OFDM18_OFDM6 0xe24
|
||||
+#define REG_TX_AGC_B_OFDM54_OFDM24 0xe28
|
||||
+#define REG_TX_AGC_B_MCS3_MCS0 0xe2c
|
||||
+#define REG_TX_AGC_B_MCS7_MCS4 0xe30
|
||||
+#define REG_TX_AGC_B_MCS11_MCS8 0xe34
|
||||
+#define REG_TX_AGC_B_MCS15_MCS12 0xe38
|
||||
+#define REG_TX_AGC_B_NSS1_INDEX3_NSS1_INDEX0 0xe3c
|
||||
+#define REG_TX_AGC_B_NSS1_INDEX7_NSS1_INDEX4 0xe40
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX1_NSS1_INDEX8 0xe44
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX5_NSS2_INDEX2 0xe48
|
||||
+#define REG_TX_AGC_B_NSS2_INDEX9_NSS2_INDEX6 0xe4c
|
||||
+#define REG_RXIGI_B 0x0e50
|
||||
+#define REG_TX_PWR_TRAINING_B 0x0e54
|
||||
+#define REG_CK_MONHB 0x0e5c
|
||||
+#define REG_AFE_PWR1_B 0x0e60
|
||||
+#define REG_AFE_PWR2_B 0x0e64
|
||||
+#define REG_RX_WAIT_CCA_TX_CCK_RFON_B 0x0e68
|
||||
+#define REG_TXTONEB 0x0e80
|
||||
+#define REG_RXTONEB 0x0e84
|
||||
+#define REG_TXPITMB 0x0e88
|
||||
+#define REG_RXPITMB 0x0e8c
|
||||
+#define REG_LSSI_WRITE_B 0x0e90
|
||||
+#define REG_PREDISTB 0x0e90
|
||||
+#define REG_INIDLYB 0x0e94
|
||||
+#define REG_RFE_PINMUX_B 0x0eb0
|
||||
+#define REG_RFE_INV_B 0x0eb4
|
||||
+#define REG_RFECTL_B 0x0eb8
|
||||
+#define REG_BPBDB 0x0ec4
|
||||
+#define REG_PHYTXONB 0x0ec8
|
||||
+#define REG_IQKYB 0x0ecc
|
||||
+#define REG_IQKXB 0x0ed4
|
||||
+#define REG_INTPO_SETB 0x0ee8
|
||||
+
|
||||
+#define REG_CRC_CCK 0x0f04
|
||||
+#define REG_CCA_OFDM 0x0f08
|
||||
+#define REG_CRC_VHT 0x0f0c
|
||||
+#define REG_CRC_HT 0x0f10
|
||||
+#define REG_CRC_OFDM 0x0f14
|
||||
+#define REG_FA_OFDM 0x0f48
|
||||
+#define REG_CCA_CCK 0x0fcc
|
||||
+
|
||||
#define REG_ANAPARSW_MAC_0 0x1010
|
||||
#define BIT_CF_L_V2 GENMASK(29, 28)
|
||||
|
||||
@@ -709,6 +869,10 @@
|
||||
|
||||
#define REG_IGN_GNTBT4 0x4160
|
||||
|
||||
+#define REG_USB_MOD 0xf008
|
||||
+#define REG_USB3_RXITV 0xf050
|
||||
+#define REG_USB_HRPWM 0xfe58
|
||||
+
|
||||
#define RF_MODE 0x00
|
||||
#define RF_MODOPT 0x01
|
||||
#define RF_WLINT 0x01
|
||||
@@ -716,7 +880,13 @@
|
||||
#define RF_DTXLOK 0x08
|
||||
#define RF_CFGCH 0x18
|
||||
#define BIT_BAND GENMASK(18, 16)
|
||||
+#define RF18_BAND_MASK (BIT(16) | BIT(9) | BIT(8))
|
||||
+#define RF18_CHANNEL_MASK (MASKBYTE0)
|
||||
+#define RF18_RFSI_MASK (BIT(18) | BIT(17))
|
||||
#define RF_RCK 0x1d
|
||||
+#define RF_MODE_TABLE_ADDR 0x30
|
||||
+#define RF_MODE_TABLE_DATA0 0x31
|
||||
+#define RF_MODE_TABLE_DATA1 0x32
|
||||
#define RF_LUTWA 0x33
|
||||
#define RF_LUTWD1 0x3e
|
||||
#define RF_LUTWD0 0x3f
|
||||
@@ -725,10 +895,14 @@
|
||||
#define RF_T_METER 0x42
|
||||
#define RF_BSPAD 0x54
|
||||
#define RF_GAINTX 0x56
|
||||
+#define RF_TXMOD 0x58
|
||||
#define RF_TXATANK 0x64
|
||||
+#define RF_TXA_PREPAD 0x65
|
||||
#define RF_TRXIQ 0x66
|
||||
#define RF_RXIQGEN 0x8d
|
||||
+#define RF_RXBB2 0x8f
|
||||
#define RF_SYN_PFD 0xb0
|
||||
+#define RF_LCK 0xb4
|
||||
#define RF_XTALX2 0xb8
|
||||
#define RF_SYN_CTRL 0xbb
|
||||
#define RF_MALSEL 0xbe
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.h b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
index 91ed921407bb..7a33ebd612ed 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.h
|
||||
@@ -214,19 +214,10 @@ extern const struct rtw_chip_info rtw8821c_hw_spec;
|
||||
#define BIT_FEN_EN BIT(26)
|
||||
#define REG_INIRTS_RATE_SEL 0x0480
|
||||
#define REG_HTSTFWT 0x800
|
||||
-#define REG_RXPSEL 0x808
|
||||
-#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
-#define REG_TXPSEL 0x80c
|
||||
#define REG_RXCCAMSK 0x814
|
||||
-#define REG_CCASEL 0x82c
|
||||
-#define REG_PDMFTH 0x830
|
||||
-#define REG_CCA2ND 0x838
|
||||
#define REG_L1WT 0x83c
|
||||
#define REG_L1PKWT 0x840
|
||||
#define REG_MRC 0x850
|
||||
-#define REG_CLKTRK 0x860
|
||||
-#define REG_ADCCLK 0x8ac
|
||||
-#define REG_ADC160 0x8c4
|
||||
#define REG_ADC40 0x8c8
|
||||
#define REG_CHFIR 0x8f0
|
||||
#define REG_CDDTXP 0x93c
|
||||
@@ -234,14 +225,11 @@ extern const struct rtw_chip_info rtw8821c_hw_spec;
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
-#define REG_FAS 0x9a4
|
||||
-#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
|
||||
#define REG_RXDESC 0xa2c
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define BTG_LNA 0xfc84
|
||||
@@ -252,12 +240,8 @@ extern const struct rtw_chip_info rtw8821c_hw_spec;
|
||||
#define REG_PWRTH2 0xaa8
|
||||
#define REG_CSRATIO 0xaaa
|
||||
#define REG_TXFILTER 0xaac
|
||||
-#define REG_CNTRST 0xb58
|
||||
#define REG_AGCTR_A 0xc08
|
||||
-#define REG_TXSCALE_A 0xc1c
|
||||
#define REG_TXDFIR 0xc20
|
||||
-#define REG_RXIGI_A 0xc50
|
||||
-#define REG_TXAGCIDX 0xc94
|
||||
#define REG_TRSW 0xca0
|
||||
#define REG_RFESEL0 0xcb0
|
||||
#define REG_RFESEL8 0xcb4
|
||||
@@ -269,14 +253,6 @@ extern const struct rtw_chip_info rtw8821c_hw_spec;
|
||||
#define B_WLA_SWITCH BIT(23)
|
||||
#define REG_RFEINV 0xcbc
|
||||
#define REG_AGCTR_B 0xe08
|
||||
-#define REG_RXIGI_B 0xe50
|
||||
-#define REG_CRC_CCK 0xf04
|
||||
-#define REG_CRC_OFDM 0xf14
|
||||
-#define REG_CRC_HT 0xf10
|
||||
-#define REG_CRC_VHT 0xf0c
|
||||
-#define REG_CCA_OFDM 0xf08
|
||||
-#define REG_FA_OFDM 0xf48
|
||||
-#define REG_CCA_CCK 0xfcc
|
||||
#define REG_DMEM_CTRL 0x1080
|
||||
#define BIT_WL_RST BIT(16)
|
||||
#define REG_ANTWT 0x1904
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.h b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
index cf85e63966a1..0514958fb57c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.h
|
||||
@@ -151,21 +151,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
|
||||
#define RTW8822B_EDCCA_MAX 0x7f
|
||||
#define RTW8822B_EDCCA_SRC_DEF 1
|
||||
#define REG_HTSTFWT 0x800
|
||||
-#define REG_RXPSEL 0x808
|
||||
-#define BIT_RX_PSEL_RST (BIT(28) | BIT(29))
|
||||
-#define REG_TXPSEL 0x80c
|
||||
#define REG_RXCCAMSK 0x814
|
||||
-#define REG_CCASEL 0x82c
|
||||
-#define REG_PDMFTH 0x830
|
||||
-#define REG_CCA2ND 0x838
|
||||
#define REG_L1WT 0x83c
|
||||
#define REG_L1PKWT 0x840
|
||||
#define REG_MRC 0x850
|
||||
-#define REG_CLKTRK 0x860
|
||||
#define REG_EDCCA_POW_MA 0x8a0
|
||||
#define BIT_MA_LEVEL GENMASK(1, 0)
|
||||
-#define REG_ADCCLK 0x8ac
|
||||
-#define REG_ADC160 0x8c4
|
||||
#define REG_ADC40 0x8c8
|
||||
#define REG_EDCCA_DECISION 0x8dc
|
||||
#define BIT_EDCCA_OPTION BIT(5)
|
||||
@@ -176,7 +167,6 @@ _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
|
||||
#define REG_ACBB0 0x948
|
||||
#define REG_ACBBRXFIR 0x94c
|
||||
#define REG_ACGG2TBL 0x958
|
||||
-#define REG_RXSB 0xa00
|
||||
#define REG_ADCINI 0xa04
|
||||
#define REG_TXSF2 0xa24
|
||||
#define REG_TXSF6 0xa28
|
||||
@@ -184,14 +174,12 @@ _rtw_write32s_mask(struct rtw_dev *rtwdev, u32 addr, u32 mask, u32 data)
|
||||
#define REG_ENTXCCK 0xa80
|
||||
#define REG_AGCTR_A 0xc08
|
||||
#define REG_TXDFIR 0xc20
|
||||
-#define REG_RXIGI_A 0xc50
|
||||
#define REG_TRSW 0xca0
|
||||
#define REG_RFESEL0 0xcb0
|
||||
#define REG_RFESEL8 0xcb4
|
||||
#define REG_RFECTL 0xcb8
|
||||
#define REG_RFEINV 0xcbc
|
||||
#define REG_AGCTR_B 0xe08
|
||||
-#define REG_RXIGI_B 0xe50
|
||||
#define REG_ANTWT 0x1904
|
||||
#define REG_IQKFAILMSK 0x1bf0
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,110 @@
|
||||
From 87341ca1eac9a3bac23bd41f6e24f3c93b77452f Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:02:05 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Dump the HW features only for some chips
|
||||
|
||||
RTL8821AU and RTL8812AU don't support this. They hit the "failed to read
|
||||
hw feature report" error.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/8becd851-8760-4480-8e8c-c4869ce72507@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/main.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 +
|
||||
7 files changed, 9 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
index bbdef38c7e34..942266324ca4 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -1917,6 +1917,9 @@ static int rtw_dump_hw_feature(struct rtw_dev *rtwdev)
|
||||
u8 bw;
|
||||
int i;
|
||||
|
||||
+ if (!rtwdev->chip->hw_feature_report)
|
||||
+ return 0;
|
||||
+
|
||||
id = rtw_read8(rtwdev, REG_C2HEVT);
|
||||
if (id != C2H_HW_FEATURE_REPORT) {
|
||||
rtw_err(rtwdev, "failed to read hw feature report\n");
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index a2bef559cfb8..58c7c6a178a8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1200,6 +1200,7 @@ struct rtw_chip_info {
|
||||
const struct rtw_fwcd_segs *fwcd_segs;
|
||||
|
||||
u8 usb_tx_agg_desc_num;
|
||||
+ bool hw_feature_report;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index 77399b8dd8cd..01ac07ac68c8 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1960,6 +1960,7 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
||||
.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 */
|
||||
+ .hw_feature_report = true,
|
||||
|
||||
.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 86a5e2497641..bf87c92087da 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2131,6 +2131,7 @@ const struct rtw_chip_info rtw8723d_hw_spec = {
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
+ .hw_feature_report = true,
|
||||
.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 66c79956e8e5..44ef2e246724 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1968,6 +1968,7 @@ const struct rtw_chip_info rtw8821c_hw_spec = {
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.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 24f76a36f23e..9b7c383f37fe 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2509,6 +2509,7 @@ const struct rtw_chip_info rtw8822b_hw_spec = {
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.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 da74e66bda84..063c65c269fe 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5329,6 +5329,7 @@ const struct rtw_chip_info rtw8822c_hw_spec = {
|
||||
.page_size = TX_PAGE_SIZE,
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
+ .hw_feature_report = true,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
--
|
||||
2.43.0
|
||||
|
194
packages/linux/patches/rtlwifi/after-6.12/0005-wifi-rtw88-Allow-different-C2H-RA-report-sizes.patch
vendored
Normal file
194
packages/linux/patches/rtlwifi/after-6.12/0005-wifi-rtw88-Allow-different-C2H-RA-report-sizes.patch
vendored
Normal file
@ -0,0 +1,194 @@
|
||||
From d9018f4373517d4560ce2ebf12684f77f5fbdad6 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:06:14 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Allow different C2H RA report sizes
|
||||
|
||||
The RTL8821AU and RTL8812AU have smaller RA report size, only 4 bytes.
|
||||
Avoid the "invalid ra report c2h length" error.
|
||||
|
||||
Also, use a struct and u8_get_bits() to access the RA report C2H.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/c3e73c3a-fb2f-4013-9f06-d5274211e282@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 21 +++++++++++++------
|
||||
drivers/net/wireless/realtek/rtw88/fw.h | 17 +++++++++++----
|
||||
drivers/net/wireless/realtek/rtw88/main.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 +
|
||||
8 files changed, 34 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
index 813c12148819..168e19187ba7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -139,25 +139,30 @@ static u16 get_max_amsdu_len(u32 bit_rate)
|
||||
struct rtw_fw_iter_ra_data {
|
||||
struct rtw_dev *rtwdev;
|
||||
u8 *payload;
|
||||
+ u8 length;
|
||||
};
|
||||
|
||||
static void rtw_fw_ra_report_iter(void *data, struct ieee80211_sta *sta)
|
||||
{
|
||||
struct rtw_fw_iter_ra_data *ra_data = data;
|
||||
+ struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)ra_data->payload;
|
||||
struct rtw_sta_info *si = (struct rtw_sta_info *)sta->drv_priv;
|
||||
u8 mac_id, rate, sgi, bw;
|
||||
u8 mcs, nss;
|
||||
u32 bit_rate;
|
||||
|
||||
- mac_id = GET_RA_REPORT_MACID(ra_data->payload);
|
||||
+ mac_id = ra_rpt->mac_id;
|
||||
if (si->mac_id != mac_id)
|
||||
return;
|
||||
|
||||
si->ra_report.txrate.flags = 0;
|
||||
|
||||
- rate = GET_RA_REPORT_RATE(ra_data->payload);
|
||||
- sgi = GET_RA_REPORT_SGI(ra_data->payload);
|
||||
- bw = GET_RA_REPORT_BW(ra_data->payload);
|
||||
+ rate = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_RATE);
|
||||
+ sgi = u8_get_bits(ra_rpt->rate_sgi, RTW_C2H_RA_RPT_SGI);
|
||||
+ if (ra_data->length >= offsetofend(typeof(*ra_rpt), bw))
|
||||
+ bw = ra_rpt->bw;
|
||||
+ else
|
||||
+ bw = si->bw_mode;
|
||||
|
||||
if (rate < DESC_RATEMCS0) {
|
||||
si->ra_report.txrate.legacy = rtw_desc_to_bitrate(rate);
|
||||
@@ -197,14 +202,18 @@ static void rtw_fw_ra_report_iter(void *data, struct ieee80211_sta *sta)
|
||||
static void rtw_fw_ra_report_handle(struct rtw_dev *rtwdev, u8 *payload,
|
||||
u8 length)
|
||||
{
|
||||
+ struct rtw_c2h_ra_rpt *ra_rpt = (struct rtw_c2h_ra_rpt *)payload;
|
||||
struct rtw_fw_iter_ra_data ra_data;
|
||||
|
||||
- if (WARN(length < 7, "invalid ra report c2h length\n"))
|
||||
+ if (WARN(length < rtwdev->chip->c2h_ra_report_size,
|
||||
+ "invalid ra report c2h length %d\n", length))
|
||||
return;
|
||||
|
||||
- rtwdev->dm_info.tx_rate = GET_RA_REPORT_RATE(payload);
|
||||
+ rtwdev->dm_info.tx_rate = u8_get_bits(ra_rpt->rate_sgi,
|
||||
+ RTW_C2H_RA_RPT_RATE);
|
||||
ra_data.rtwdev = rtwdev;
|
||||
ra_data.payload = payload;
|
||||
+ ra_data.length = length;
|
||||
rtw_iterate_stas_atomic(rtwdev, rtw_fw_ra_report_iter, &ra_data);
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.h b/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
index e999c24e4634..404de1b0c407 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.h
|
||||
@@ -85,6 +85,19 @@ struct rtw_c2h_adaptivity {
|
||||
u8 option;
|
||||
} __packed;
|
||||
|
||||
+struct rtw_c2h_ra_rpt {
|
||||
+ u8 rate_sgi;
|
||||
+ u8 mac_id;
|
||||
+ u8 byte2;
|
||||
+ u8 status;
|
||||
+ u8 byte4;
|
||||
+ u8 ra_ratio;
|
||||
+ u8 bw;
|
||||
+} __packed;
|
||||
+
|
||||
+#define RTW_C2H_RA_RPT_RATE GENMASK(6, 0)
|
||||
+#define RTW_C2H_RA_RPT_SGI BIT(7)
|
||||
+
|
||||
struct rtw_h2c_register {
|
||||
u32 w0;
|
||||
u32 w1;
|
||||
@@ -364,10 +377,6 @@ struct rtw_fw_hdr_legacy {
|
||||
#define GET_CHAN_SWITCH_CENTRAL_CH(c2h_payload) (c2h_payload[2])
|
||||
#define GET_CHAN_SWITCH_ID(c2h_payload) (c2h_payload[3])
|
||||
#define GET_CHAN_SWITCH_STATUS(c2h_payload) (c2h_payload[4])
|
||||
-#define GET_RA_REPORT_RATE(c2h_payload) (c2h_payload[0] & 0x7f)
|
||||
-#define GET_RA_REPORT_SGI(c2h_payload) ((c2h_payload[0] & 0x80) >> 7)
|
||||
-#define GET_RA_REPORT_BW(c2h_payload) (c2h_payload[6])
|
||||
-#define GET_RA_REPORT_MACID(c2h_payload) (c2h_payload[1])
|
||||
|
||||
#define GET_BCN_FILTER_NOTIFY_TYPE(c2h_payload) (c2h_payload[1] & 0xf)
|
||||
#define GET_BCN_FILTER_NOTIFY_EVENT(c2h_payload) (c2h_payload[1] & 0x10)
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 58c7c6a178a8..6161db5fcba6 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1201,6 +1201,7 @@ struct rtw_chip_info {
|
||||
|
||||
u8 usb_tx_agg_desc_num;
|
||||
bool hw_feature_report;
|
||||
+ u8 c2h_ra_report_size;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index 01ac07ac68c8..23125a62e74f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1961,6 +1961,7 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
|
||||
.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 bf87c92087da..6a9115775faf 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2132,6 +2132,7 @@ const struct rtw_chip_info rtw8723d_hw_spec = {
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.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 44ef2e246724..6cb7e9aaa437 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1969,6 +1969,7 @@ const struct rtw_chip_info rtw8821c_hw_spec = {
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.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 9b7c383f37fe..48aefe3722ec 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2510,6 +2510,7 @@ const struct rtw_chip_info rtw8822b_hw_spec = {
|
||||
.dig_min = 0x1c,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.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 063c65c269fe..25933a54e863 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5330,6 +5330,7 @@ const struct rtw_chip_info rtw8822c_hw_spec = {
|
||||
.dig_min = 0x20,
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
+ .c2h_ra_report_size = 7,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,172 @@
|
||||
From 95a772e30b60e7954d03f3372268722475aa303f Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:08:24 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Extend the init table parsing for RTL8812AU
|
||||
|
||||
The chips supported so far only use the first condition, and so the
|
||||
parsing code ignores the second condition. RTL8812AU's init tables use
|
||||
the second condition also. Make the parsing code check it.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/1bee6b74-6eab-44a3-9f40-794ca006c72d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 15 ++++++
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 62 ++++++++++++++++++++---
|
||||
2 files changed, 69 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 6161db5fcba6..297da821704b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1835,6 +1835,20 @@ struct rtw_phy_cond {
|
||||
#define BRANCH_ENDIF 3
|
||||
};
|
||||
|
||||
+struct rtw_phy_cond2 {
|
||||
+#ifdef __LITTLE_ENDIAN
|
||||
+ u8 type_glna;
|
||||
+ u8 type_gpa;
|
||||
+ u8 type_alna;
|
||||
+ u8 type_apa;
|
||||
+#else
|
||||
+ u8 type_apa;
|
||||
+ u8 type_alna;
|
||||
+ u8 type_gpa;
|
||||
+ u8 type_glna;
|
||||
+#endif
|
||||
+};
|
||||
+
|
||||
struct rtw_fifo_conf {
|
||||
/* tx fifo information */
|
||||
u16 rsvd_boundary;
|
||||
@@ -1916,6 +1930,7 @@ struct rtw_hal {
|
||||
u8 oem_id;
|
||||
u8 pkg_type;
|
||||
struct rtw_phy_cond phy_cond;
|
||||
+ struct rtw_phy_cond2 phy_cond2;
|
||||
bool rfe_btg;
|
||||
|
||||
u8 ps_mode;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
index 0020ff6a50f8..db36276ccabc 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -18,7 +18,10 @@ struct phy_cfg_pair {
|
||||
};
|
||||
|
||||
union phy_table_tile {
|
||||
- struct rtw_phy_cond cond;
|
||||
+ struct {
|
||||
+ struct rtw_phy_cond cond;
|
||||
+ struct rtw_phy_cond2 cond2;
|
||||
+ } __packed;
|
||||
struct phy_cfg_pair cfg;
|
||||
};
|
||||
|
||||
@@ -1041,7 +1044,8 @@ void rtw_phy_setup_phy_cond(struct rtw_dev *rtwdev, u32 pkg)
|
||||
{
|
||||
struct rtw_hal *hal = &rtwdev->hal;
|
||||
struct rtw_efuse *efuse = &rtwdev->efuse;
|
||||
- struct rtw_phy_cond cond = {0};
|
||||
+ struct rtw_phy_cond cond = {};
|
||||
+ struct rtw_phy_cond2 cond2 = {};
|
||||
|
||||
cond.cut = hal->cut_version ? hal->cut_version : 15;
|
||||
cond.pkg = pkg ? pkg : 15;
|
||||
@@ -1061,15 +1065,34 @@ void rtw_phy_setup_phy_cond(struct rtw_dev *rtwdev, u32 pkg)
|
||||
break;
|
||||
}
|
||||
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
|
||||
+ rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
|
||||
+ cond.rfe = 0;
|
||||
+ cond.rfe |= efuse->ext_lna_2g;
|
||||
+ cond.rfe |= efuse->ext_pa_2g << 1;
|
||||
+ cond.rfe |= efuse->ext_lna_5g << 2;
|
||||
+ cond.rfe |= efuse->ext_pa_5g << 3;
|
||||
+ cond.rfe |= efuse->btcoex << 4;
|
||||
+
|
||||
+ cond2.type_alna = efuse->alna_type;
|
||||
+ cond2.type_glna = efuse->glna_type;
|
||||
+ cond2.type_apa = efuse->apa_type;
|
||||
+ cond2.type_gpa = efuse->gpa_type;
|
||||
+ }
|
||||
+
|
||||
hal->phy_cond = cond;
|
||||
+ hal->phy_cond2 = cond2;
|
||||
|
||||
- rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x\n", *((u32 *)&hal->phy_cond));
|
||||
+ rtw_dbg(rtwdev, RTW_DBG_PHY, "phy cond=0x%08x cond2=0x%08x\n",
|
||||
+ *((u32 *)&hal->phy_cond), *((u32 *)&hal->phy_cond2));
|
||||
}
|
||||
|
||||
-static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond)
|
||||
+static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond,
|
||||
+ struct rtw_phy_cond2 cond2)
|
||||
{
|
||||
struct rtw_hal *hal = &rtwdev->hal;
|
||||
struct rtw_phy_cond drv_cond = hal->phy_cond;
|
||||
+ struct rtw_phy_cond2 drv_cond2 = hal->phy_cond2;
|
||||
|
||||
if (cond.cut && cond.cut != drv_cond.cut)
|
||||
return false;
|
||||
@@ -1080,8 +1103,29 @@ static bool check_positive(struct rtw_dev *rtwdev, struct rtw_phy_cond cond)
|
||||
if (cond.intf && cond.intf != drv_cond.intf)
|
||||
return false;
|
||||
|
||||
- if (cond.rfe != drv_cond.rfe)
|
||||
- return false;
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A ||
|
||||
+ rtwdev->chip->id == RTW_CHIP_TYPE_8821A) {
|
||||
+ if (!(cond.rfe & 0x0f))
|
||||
+ return true;
|
||||
+
|
||||
+ if ((cond.rfe & drv_cond.rfe) != cond.rfe)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(0)) && cond2.type_glna != drv_cond2.type_glna)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(1)) && cond2.type_gpa != drv_cond2.type_gpa)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(2)) && cond2.type_alna != drv_cond2.type_alna)
|
||||
+ return false;
|
||||
+
|
||||
+ if ((cond.rfe & BIT(3)) && cond2.type_apa != drv_cond2.type_apa)
|
||||
+ return false;
|
||||
+ } else {
|
||||
+ if (cond.rfe != drv_cond.rfe)
|
||||
+ return false;
|
||||
+ }
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1090,7 +1134,8 @@ void rtw_parse_tbl_phy_cond(struct rtw_dev *rtwdev, const struct rtw_table *tbl)
|
||||
{
|
||||
const union phy_table_tile *p = tbl->data;
|
||||
const union phy_table_tile *end = p + tbl->size / 2;
|
||||
- struct rtw_phy_cond pos_cond = {0};
|
||||
+ struct rtw_phy_cond pos_cond = {};
|
||||
+ struct rtw_phy_cond2 pos_cond2 = {};
|
||||
bool is_matched = true, is_skipped = false;
|
||||
|
||||
BUILD_BUG_ON(sizeof(union phy_table_tile) != sizeof(struct phy_cfg_pair));
|
||||
@@ -1109,11 +1154,12 @@ void rtw_parse_tbl_phy_cond(struct rtw_dev *rtwdev, const struct rtw_table *tbl)
|
||||
case BRANCH_ELIF:
|
||||
default:
|
||||
pos_cond = p->cond;
|
||||
+ pos_cond2 = p->cond2;
|
||||
break;
|
||||
}
|
||||
} else if (p->cond.neg) {
|
||||
if (!is_skipped) {
|
||||
- if (check_positive(rtwdev, pos_cond)) {
|
||||
+ if (check_positive(rtwdev, pos_cond, pos_cond2)) {
|
||||
is_matched = true;
|
||||
is_skipped = true;
|
||||
} else {
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,63 @@
|
||||
From 7c5bbeba7c36575a3a57ef4be775b2f3fb68c3f9 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:09:04 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Allow rtw_chip_info.ltecoex_addr to be NULL
|
||||
|
||||
RTL8821A doesn't have this. Trying to use it results in error messages,
|
||||
so don't try if ltecoex_addr is NULL.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/d1004817-1760-41d1-9136-3d799757c444@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 14 +++++++++++---
|
||||
1 file changed, 11 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
index a99776af56c2..13096fa7025c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -950,12 +950,18 @@ static void rtw_coex_coex_ctrl_owner(struct rtw_dev *rtwdev, bool wifi_control)
|
||||
|
||||
static void rtw_coex_set_gnt_bt(struct rtw_dev *rtwdev, u8 state)
|
||||
{
|
||||
+ if (!rtwdev->chip->ltecoex_addr)
|
||||
+ return;
|
||||
+
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0xc000, state);
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0c00, state);
|
||||
}
|
||||
|
||||
static void rtw_coex_set_gnt_wl(struct rtw_dev *rtwdev, u8 state)
|
||||
{
|
||||
+ if (!rtwdev->chip->ltecoex_addr)
|
||||
+ return;
|
||||
+
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x3000, state);
|
||||
rtw_coex_write_indirect_reg(rtwdev, LTE_COEX_CTRL, 0x0300, state);
|
||||
}
|
||||
@@ -3904,7 +3910,7 @@ void rtw_coex_display_coex_info(struct rtw_dev *rtwdev, struct seq_file *m)
|
||||
u8 sys_lte;
|
||||
u16 score_board_WB, score_board_BW;
|
||||
u32 wl_reg_6c0, wl_reg_6c4, wl_reg_6c8, wl_reg_778, wl_reg_6cc;
|
||||
- u32 lte_coex, bt_coex;
|
||||
+ u32 lte_coex = 0, bt_coex = 0;
|
||||
int i;
|
||||
|
||||
score_board_BW = rtw_coex_read_scbd(rtwdev);
|
||||
@@ -3916,8 +3922,10 @@ void rtw_coex_display_coex_info(struct rtw_dev *rtwdev, struct seq_file *m)
|
||||
wl_reg_778 = rtw_read8(rtwdev, REG_BT_STAT_CTRL);
|
||||
|
||||
sys_lte = rtw_read8(rtwdev, 0x73);
|
||||
- lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
|
||||
- bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
|
||||
+ if (rtwdev->chip->ltecoex_addr) {
|
||||
+ lte_coex = rtw_coex_read_indirect_reg(rtwdev, 0x38);
|
||||
+ bt_coex = rtw_coex_read_indirect_reg(rtwdev, 0x54);
|
||||
+ }
|
||||
|
||||
if (!coex_stat->wl_under_ips &&
|
||||
(!coex_stat->wl_under_lps || coex_stat->wl_force_lps_ctrl) &&
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,295 @@
|
||||
From fbb5e1b3637a720c83c91a7b1476ab0429bfc747 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:09:47 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Let each driver control the power on/off process
|
||||
|
||||
RTL8821AU and RTL8812AU have to do some things differently, so let
|
||||
them have full control.
|
||||
|
||||
The other chips use the same functions as before.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/98ab839f-9100-44ae-9551-9af743a4aa3a@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 11 +++++++----
|
||||
drivers/net/wireless/realtek/rtw88/mac.h | 3 +++
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 13 ++++++++-----
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 5 +++++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 2 ++
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 2 ++
|
||||
10 files changed, 36 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
index 13096fa7025c..8c5aec744f3c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -2753,16 +2753,19 @@ void rtw_coex_power_on_setting(struct rtw_dev *rtwdev)
|
||||
rtw_write8(rtwdev, 0xff1a, 0x0);
|
||||
rtw_coex_set_gnt_debug(rtwdev);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_power_on_setting);
|
||||
|
||||
void rtw_coex_power_off_setting(struct rtw_dev *rtwdev)
|
||||
{
|
||||
rtw_write16(rtwdev, REG_WIFI_BT_INFO, BIT_BT_INT_EN);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_power_off_setting);
|
||||
|
||||
void rtw_coex_init_hw_config(struct rtw_dev *rtwdev, bool wifi_only)
|
||||
{
|
||||
__rtw_coex_init_hw_config(rtwdev, wifi_only);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_coex_init_hw_config);
|
||||
|
||||
void rtw_coex_ips_notify(struct rtw_dev *rtwdev, u8 type)
|
||||
{
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
index e5abcc20b63c..daf23ccf6378 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -227,8 +227,8 @@ static int rtw_sub_pwr_seq_parser(struct rtw_dev *rtwdev, u8 intf_mask,
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
- const struct rtw_pwr_seq_cmd * const *cmd_seq)
|
||||
+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq)
|
||||
{
|
||||
u8 cut_mask;
|
||||
u8 intf_mask;
|
||||
@@ -267,6 +267,7 @@ static int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_pwr_seq_parser);
|
||||
|
||||
static int rtw_mac_power_switch(struct rtw_dev *rtwdev, bool pwr_on)
|
||||
{
|
||||
@@ -994,6 +995,7 @@ int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_download_firmware);
|
||||
|
||||
static u32 get_priority_queues(struct rtw_dev *rtwdev, u32 queues)
|
||||
{
|
||||
@@ -1127,7 +1129,7 @@ static int txdma_queue_mapping(struct rtw_dev *rtwdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fifo_conf *fifo = &rtwdev->fifo;
|
||||
@@ -1179,6 +1181,7 @@ static int set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
|
||||
return 0;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_set_trx_fifo_info);
|
||||
|
||||
static int __priority_queue_cfg(struct rtw_dev *rtwdev,
|
||||
const struct rtw_page_table *pg_tbl,
|
||||
@@ -1256,7 +1259,7 @@ static int priority_queue_cfg(struct rtw_dev *rtwdev)
|
||||
u16 pubq_num;
|
||||
int ret;
|
||||
|
||||
- ret = set_trx_fifo_info(rtwdev);
|
||||
+ ret = rtw_set_trx_fifo_info(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/mac.h b/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
index 58c3dccc14bb..6905e2747372 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.h
|
||||
@@ -30,11 +30,14 @@
|
||||
|
||||
void rtw_set_channel_mac(struct rtw_dev *rtwdev, u8 channel, u8 bw,
|
||||
u8 primary_ch_idx);
|
||||
+int rtw_pwr_seq_parser(struct rtw_dev *rtwdev,
|
||||
+ const struct rtw_pwr_seq_cmd * const *cmd_seq);
|
||||
int rtw_mac_power_on(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_power_off(struct rtw_dev *rtwdev);
|
||||
int rtw_download_firmware(struct rtw_dev *rtwdev, struct rtw_fw_state *fw);
|
||||
int rtw_mac_init(struct rtw_dev *rtwdev);
|
||||
void rtw_mac_flush_queues(struct rtw_dev *rtwdev, u32 queues, bool drop);
|
||||
+int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev);
|
||||
int rtw_ddma_to_fw_fifo(struct rtw_dev *rtwdev, u32 ocp_src, u32 size);
|
||||
|
||||
static inline void rtw_mac_flush_all_queues(struct rtw_dev *rtwdev, bool drop)
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
index 942266324ca4..e6f985a92019 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -1309,7 +1309,7 @@ void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
|
||||
rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask);
|
||||
}
|
||||
|
||||
-static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
|
||||
+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fw_state *fw;
|
||||
@@ -1329,6 +1329,7 @@ static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
|
||||
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_wait_firmware_completion);
|
||||
|
||||
static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
|
||||
struct rtw_fw_state *fw)
|
||||
@@ -1350,7 +1351,7 @@ static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
|
||||
return LPS_DEEP_MODE_NONE;
|
||||
}
|
||||
|
||||
-static int rtw_power_on(struct rtw_dev *rtwdev)
|
||||
+int rtw_power_on(struct rtw_dev *rtwdev)
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct rtw_fw_state *fw = &rtwdev->fw;
|
||||
@@ -1413,6 +1414,7 @@ static int rtw_power_on(struct rtw_dev *rtwdev)
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_power_on);
|
||||
|
||||
void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start)
|
||||
{
|
||||
@@ -1485,7 +1487,7 @@ int rtw_core_start(struct rtw_dev *rtwdev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
- ret = rtw_power_on(rtwdev);
|
||||
+ ret = rtwdev->chip->ops->power_on(rtwdev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -1505,12 +1507,13 @@ int rtw_core_start(struct rtw_dev *rtwdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static void rtw_power_off(struct rtw_dev *rtwdev)
|
||||
+void rtw_power_off(struct rtw_dev *rtwdev)
|
||||
{
|
||||
rtw_hci_stop(rtwdev);
|
||||
rtw_coex_power_off_setting(rtwdev);
|
||||
rtw_mac_power_off(rtwdev);
|
||||
}
|
||||
+EXPORT_SYMBOL(rtw_power_off);
|
||||
|
||||
void rtw_core_stop(struct rtw_dev *rtwdev)
|
||||
{
|
||||
@@ -1535,7 +1538,7 @@ void rtw_core_stop(struct rtw_dev *rtwdev)
|
||||
|
||||
mutex_lock(&rtwdev->mutex);
|
||||
|
||||
- rtw_power_off(rtwdev);
|
||||
+ rtwdev->chip->ops->power_off(rtwdev);
|
||||
}
|
||||
|
||||
static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 297da821704b..af4876327837 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -843,6 +843,8 @@ struct rtw_regd {
|
||||
};
|
||||
|
||||
struct rtw_chip_ops {
|
||||
+ int (*power_on)(struct rtw_dev *rtwdev);
|
||||
+ void (*power_off)(struct rtw_dev *rtwdev);
|
||||
int (*mac_init)(struct rtw_dev *rtwdev);
|
||||
int (*dump_fw_crash)(struct rtw_dev *rtwdev);
|
||||
void (*shutdown)(struct rtw_dev *rtwdev);
|
||||
@@ -2209,6 +2211,7 @@ void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
|
||||
void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
bool hw_scan);
|
||||
int rtw_core_start(struct rtw_dev *rtwdev);
|
||||
+void rtw_power_off(struct rtw_dev *rtwdev);
|
||||
void rtw_core_stop(struct rtw_dev *rtwdev);
|
||||
int rtw_chip_info_setup(struct rtw_dev *rtwdev);
|
||||
int rtw_core_init(struct rtw_dev *rtwdev);
|
||||
@@ -2223,6 +2226,8 @@ int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
|
||||
void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
|
||||
bool fw_exist);
|
||||
void rtw_fw_recovery(struct rtw_dev *rtwdev);
|
||||
+int rtw_wait_firmware_completion(struct rtw_dev *rtwdev);
|
||||
+int rtw_power_on(struct rtw_dev *rtwdev);
|
||||
void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start);
|
||||
int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
|
||||
u32 fwcd_item);
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index 23125a62e74f..97dbc77f037a 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1888,6 +1888,8 @@ static const struct coex_tdma_para tdma_sant_8703b[] = {
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8703b_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.mac_init = rtw8723x_mac_init,
|
||||
.dump_fw_crash = NULL,
|
||||
.shutdown = NULL,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.c b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
index 6a9115775faf..f6a08b06f853 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -1390,6 +1390,8 @@ static void rtw8723d_pwr_track(struct rtw_dev *rtwdev)
|
||||
}
|
||||
|
||||
static const struct rtw_chip_ops rtw8723d_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8723d_phy_set_param,
|
||||
.read_efuse = rtw8723x_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
index 6cb7e9aaa437..e17d0193ca6f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1643,6 +1643,8 @@ static const struct rtw_prioq_addrs prioq_addrs_8821c = {
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8821c_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8821c_phy_set_param,
|
||||
.read_efuse = rtw8821c_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
index 48aefe3722ec..7360ce0a193e 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2132,6 +2132,8 @@ static const struct rtw_prioq_addrs prioq_addrs_8822b = {
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822b_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8822b_phy_set_param,
|
||||
.read_efuse = rtw8822b_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
index 25933a54e863..17d4d9bddd83 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4947,6 +4947,8 @@ static const struct rtw_prioq_addrs prioq_addrs_8822c = {
|
||||
};
|
||||
|
||||
static const struct rtw_chip_ops rtw8822c_ops = {
|
||||
+ .power_on = rtw_power_on,
|
||||
+ .power_off = rtw_power_off,
|
||||
.phy_set_param = rtw8822c_phy_set_param,
|
||||
.read_efuse = rtw8822c_read_efuse,
|
||||
.query_phy_status = query_phy_status,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,221 @@
|
||||
From c7706b1173c77185a2ef40c7d1811021566563f3 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:10:32 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Enable data rate fallback for older chips
|
||||
|
||||
RTL8811AU fails to perform the 4-way handshake when the AP is too far
|
||||
because it transmits the EAPOL frames at MCS9 and when that doesn't
|
||||
work it retries 48 times with the same rate, to no avail.
|
||||
|
||||
Retrying 48 times with the same rate seems pointless. Set the
|
||||
appropriate field in the TX descriptor to allow it to use lower rates
|
||||
when retrying.
|
||||
|
||||
Set it for RTL8723D and RTL8703B because they interpret this field the
|
||||
same way as RTL8811A.
|
||||
|
||||
The newer RTL8822C, RTL8822B, RTL8821C seem to interpret this field in
|
||||
the TX descriptor differently, so leave it alone for those chips.
|
||||
|
||||
Tested with RTL8811AU and RTL8723DU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/2b3e3e6f-541b-4a3b-8ca3-65b267e6a95a@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
drivers/net/wireless/realtek/rtw88/pci.c | 2 +-
|
||||
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/sdio.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/tx.c | 6 +++++-
|
||||
drivers/net/wireless/realtek/rtw88/tx.h | 4 +++-
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 4 ++--
|
||||
12 files changed, 19 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
index 168e19187ba7..19de5ba555a9 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -1290,7 +1290,7 @@ static void rtw_fill_rsvd_page_desc(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
rtw_tx_rsvd_page_pkt_info_update(rtwdev, &pkt_info, skb, type);
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
|
||||
- rtw_tx_fill_tx_desc(&pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
|
||||
}
|
||||
|
||||
static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index af4876327837..64bc43cdd209 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1204,6 +1204,7 @@ struct rtw_chip_info {
|
||||
u8 usb_tx_agg_desc_num;
|
||||
bool hw_feature_report;
|
||||
u8 c2h_ra_report_size;
|
||||
+ bool old_datarate_fb_limit;
|
||||
|
||||
u8 default_1ss_tx_path;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/pci.c b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
index f71e41d6f97c..0ecaefc4c83d 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/pci.c
|
||||
@@ -824,7 +824,7 @@ static int rtw_pci_tx_write_data(struct rtw_dev *rtwdev,
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, tx_pkt_desc_sz);
|
||||
pkt_info->qsel = rtw_pci_get_tx_qsel(skb, queue);
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
dma = dma_map_single(&rtwpci->pdev->dev, skb->data, skb->len,
|
||||
DMA_TO_DEVICE);
|
||||
if (dma_mapping_error(&rtwpci->pdev->dev, dma))
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index 97dbc77f037a..f6f6635b46e1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -1964,6 +1964,7 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
||||
.usb_tx_agg_desc_num = 1, /* Not sure if this chip has USB interface */
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = true,
|
||||
|
||||
.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 f6a08b06f853..a0bf37a58632 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2135,6 +2135,7 @@ const struct rtw_chip_info rtw8723d_hw_spec = {
|
||||
.usb_tx_agg_desc_num = 1,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = true,
|
||||
.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 e17d0193ca6f..39dc8244f744 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1972,6 +1972,7 @@ const struct rtw_chip_info rtw8821c_hw_spec = {
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.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 7360ce0a193e..419eb14c5467 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2513,6 +2513,7 @@ const struct rtw_chip_info rtw8822b_hw_spec = {
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.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 17d4d9bddd83..56085f220fcd 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -5333,6 +5333,7 @@ const struct rtw_chip_info rtw8822c_hw_spec = {
|
||||
.usb_tx_agg_desc_num = 3,
|
||||
.hw_feature_report = true,
|
||||
.c2h_ra_report_size = 7,
|
||||
+ .old_datarate_fb_limit = false,
|
||||
.default_1ss_tx_path = BB_PATH_A,
|
||||
.path_div_supported = true,
|
||||
.ht_supported = true,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/sdio.c b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
index f0b06ed8f76d..799230eb5f16 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/sdio.c
|
||||
@@ -864,7 +864,7 @@ static void rtw_sdio_tx_skb_prepare(struct rtw_dev *rtwdev,
|
||||
|
||||
pkt_info->qsel = rtw_sdio_get_tx_qsel(rtwdev, skb, queue);
|
||||
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, pkt_desc);
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/tx.c b/drivers/net/wireless/realtek/rtw88/tx.c
|
||||
index dae7ca148865..6ed470dd6f22 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/tx.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/tx.c
|
||||
@@ -32,7 +32,8 @@ void rtw_tx_stats(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
|
||||
}
|
||||
}
|
||||
|
||||
-void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
|
||||
+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
|
||||
{
|
||||
struct rtw_tx_desc *tx_desc = (struct rtw_tx_desc *)skb->data;
|
||||
bool more_data = false;
|
||||
@@ -67,6 +68,9 @@ void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb)
|
||||
|
||||
tx_desc->w4 = le32_encode_bits(pkt_info->rate, RTW_TX_DESC_W4_DATARATE);
|
||||
|
||||
+ if (rtwdev->chip->old_datarate_fb_limit)
|
||||
+ tx_desc->w4 |= le32_encode_bits(0x1f, RTW_TX_DESC_W4_DATARATE_FB_LIMIT);
|
||||
+
|
||||
tx_desc->w5 = le32_encode_bits(pkt_info->short_gi, RTW_TX_DESC_W5_DATA_SHORT) |
|
||||
le32_encode_bits(pkt_info->bw, RTW_TX_DESC_W5_DATA_BW) |
|
||||
le32_encode_bits(pkt_info->ldpc, RTW_TX_DESC_W5_DATA_LDPC) |
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/tx.h b/drivers/net/wireless/realtek/rtw88/tx.h
|
||||
index 3d544fd7f60f..d34cdeca16f1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/tx.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/tx.h
|
||||
@@ -44,6 +44,7 @@ struct rtw_tx_desc {
|
||||
#define RTW_TX_DESC_W3_NAVUSEHDR BIT(15)
|
||||
#define RTW_TX_DESC_W3_MAX_AGG_NUM GENMASK(21, 17)
|
||||
#define RTW_TX_DESC_W4_DATARATE GENMASK(6, 0)
|
||||
+#define RTW_TX_DESC_W4_DATARATE_FB_LIMIT GENMASK(12, 8)
|
||||
#define RTW_TX_DESC_W4_RTSRATE GENMASK(28, 24)
|
||||
#define RTW_TX_DESC_W5_DATA_SHORT BIT(4)
|
||||
#define RTW_TX_DESC_W5_DATA_BW GENMASK(6, 5)
|
||||
@@ -94,7 +95,8 @@ void rtw_tx_pkt_info_update(struct rtw_dev *rtwdev,
|
||||
struct rtw_tx_pkt_info *pkt_info,
|
||||
struct ieee80211_sta *sta,
|
||||
struct sk_buff *skb);
|
||||
-void rtw_tx_fill_tx_desc(struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
|
||||
+void rtw_tx_fill_tx_desc(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_tx_pkt_info *pkt_info, struct sk_buff *skb);
|
||||
void rtw_tx_report_enqueue(struct rtw_dev *rtwdev, struct sk_buff *skb, u8 sn);
|
||||
void rtw_tx_report_handle(struct rtw_dev *rtwdev, struct sk_buff *skb, int src);
|
||||
void rtw_tx_rsvd_page_pkt_info_update(struct rtw_dev *rtwdev,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index ba314d90ab3f..a3d2b40ec67b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -458,7 +458,7 @@ static int rtw_usb_write_data(struct rtw_dev *rtwdev,
|
||||
skb_put_data(skb, buf, size);
|
||||
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_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
|
||||
ret = rtw_usb_write_port(rtwdev, qsel, skb,
|
||||
@@ -525,7 +525,7 @@ static int rtw_usb_tx_write(struct rtw_dev *rtwdev,
|
||||
pkt_desc = skb_push(skb, chip->tx_pkt_desc_sz);
|
||||
memset(pkt_desc, 0, chip->tx_pkt_desc_sz);
|
||||
ep = qsel_to_ep(rtwusb, pkt_info->qsel);
|
||||
- rtw_tx_fill_tx_desc(pkt_info, skb);
|
||||
+ rtw_tx_fill_tx_desc(rtwdev, pkt_info, skb);
|
||||
rtw_tx_fill_txdesc_checksum(rtwdev, pkt_info, skb->data);
|
||||
tx_data = rtw_usb_get_tx_data(skb);
|
||||
tx_data->sn = pkt_info->sn;
|
||||
--
|
||||
2.43.0
|
||||
|
96
packages/linux/patches/rtlwifi/after-6.12/0010-wifi-rtw88-Make-txagc_remnant_ofdm-an-array.patch
vendored
Normal file
96
packages/linux/patches/rtlwifi/after-6.12/0010-wifi-rtw88-Make-txagc_remnant_ofdm-an-array.patch
vendored
Normal file
@ -0,0 +1,96 @@
|
||||
From abb0f19492ba6289ffba6ec1057c0426240958af Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:10:54 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Make txagc_remnant_ofdm an array
|
||||
|
||||
txagc_remnant_ofdm member of struct rtw_dm_info should be different for
|
||||
each RF path, so make it an array of size RTW_RF_PATH_MAX (4).
|
||||
|
||||
Until now all the chips using this had only one RF path, but RTL8812AU
|
||||
has two, and RTL8814AU has four.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/68571ba9-e504-4b2d-bfa1-62f468753649@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 4 ++--
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 4 ++--
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 4 ++--
|
||||
4 files changed, 7 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 64bc43cdd209..45f0e8fff453 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1715,7 +1715,7 @@ struct rtw_dm_info {
|
||||
bool pwr_trk_init_trigger;
|
||||
struct ewma_thermal avg_thermal[RTW_RF_PATH_MAX];
|
||||
s8 txagc_remnant_cck;
|
||||
- s8 txagc_remnant_ofdm;
|
||||
+ s8 txagc_remnant_ofdm[RTW_RF_PATH_MAX];
|
||||
u8 rx_cck_agc_report_type;
|
||||
|
||||
/* backup dack results for each path and I/Q */
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
index db36276ccabc..d7b8efbd0d3c 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -2169,8 +2169,8 @@ void rtw_get_tx_power_params(struct rtw_dev *rtwdev, u8 path, u8 rate, u8 bw,
|
||||
|
||||
*limit = rtw_phy_get_tx_power_limit(rtwdev, band, bw, path,
|
||||
rate, ch, regd);
|
||||
- *remnant = (rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
|
||||
- dm_info->txagc_remnant_ofdm);
|
||||
+ *remnant = rate <= DESC_RATE11M ? dm_info->txagc_remnant_cck :
|
||||
+ dm_info->txagc_remnant_ofdm[path];
|
||||
*sar = rtw_phy_get_tx_power_sar(rtwdev, hal->sar_band, path, rate);
|
||||
}
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index f6f6635b46e1..dec0cec4ca22 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -637,7 +637,7 @@ static void rtw8703b_pwrtrack_init(struct rtw_dev *rtwdev)
|
||||
dm_info->pwr_trk_init_trigger = true;
|
||||
dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
|
||||
dm_info->txagc_remnant_cck = 0;
|
||||
- dm_info->txagc_remnant_ofdm = 0;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
|
||||
}
|
||||
|
||||
static void rtw8703b_phy_set_param(struct rtw_dev *rtwdev)
|
||||
@@ -1589,7 +1589,7 @@ static void rtw8703b_pwrtrack_set_ofdm_pwr(struct rtw_dev *rtwdev, s8 swing_idx,
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
|
||||
- dm_info->txagc_remnant_ofdm = txagc_idx;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
|
||||
|
||||
/* Only path A is calibrated for rtl8703b */
|
||||
rtw8703b_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.c b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
index a0bf37a58632..1d99bb89ef1d 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -79,7 +79,7 @@ static void rtw8723d_pwrtrack_init(struct rtw_dev *rtwdev)
|
||||
dm_info->pwr_trk_init_trigger = true;
|
||||
dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
|
||||
dm_info->txagc_remnant_cck = 0;
|
||||
- dm_info->txagc_remnant_ofdm = 0;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = 0;
|
||||
}
|
||||
|
||||
static void rtw8723d_phy_set_param(struct rtw_dev *rtwdev)
|
||||
@@ -1265,7 +1265,7 @@ static void rtw8723d_pwrtrack_set_ofdm_pwr(struct rtw_dev *rtwdev, s8 swing_idx,
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
|
||||
- dm_info->txagc_remnant_ofdm = txagc_idx;
|
||||
+ dm_info->txagc_remnant_ofdm[RF_PATH_A] = txagc_idx;
|
||||
|
||||
rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_A);
|
||||
rtw8723d_set_iqk_matrix(rtwdev, swing_idx, RF_PATH_B);
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,126 @@
|
||||
From 82a617413e8545775ec03a1970809ac5f549ef32 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:12:06 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Support TX page sizes bigger than 128
|
||||
|
||||
All the chips supported so far have a TX page size of 128 bytes.
|
||||
|
||||
Change the type of the page_size member of struct rtw_chip_info from u8
|
||||
to u16 in order to support RTL8821AU (page size of 256 bytes) and
|
||||
RTL8812AU (page size of 512 bytes). Also change the types of several
|
||||
related variables and function parameters from u8 to u16.
|
||||
|
||||
The TX page size is used, among other things, to construct the beacon,
|
||||
null data, QOS null data, and PS poll templates which are uploaded to
|
||||
the chip's reserved page. Each template needs to be aligned on a
|
||||
multiple of the TX page size. Power saving can't work if the TX page
|
||||
size is wrong.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/acdefbb1-3daf-4349-9e03-9472754d5f1e@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/debug.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/fw.c | 21 +++++++++++----------
|
||||
drivers/net/wireless/realtek/rtw88/mac.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 2 +-
|
||||
4 files changed, 14 insertions(+), 13 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/debug.c b/drivers/net/wireless/realtek/rtw88/debug.c
|
||||
index c26a6905fd15..364ec0436d0f 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/debug.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/debug.c
|
||||
@@ -308,7 +308,7 @@ static int rtw_debugfs_get_rsvd_page(struct seq_file *m, void *v)
|
||||
{
|
||||
struct rtw_debugfs_priv *debugfs_priv = m->private;
|
||||
struct rtw_dev *rtwdev = debugfs_priv->rtwdev;
|
||||
- u8 page_size = rtwdev->chip->page_size;
|
||||
+ u16 page_size = rtwdev->chip->page_size;
|
||||
u32 buf_size = debugfs_priv->rsvd_page.page_num * page_size;
|
||||
u32 offset = debugfs_priv->rsvd_page.page_offset * page_size;
|
||||
u8 *buf;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/fw.c b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
index 19de5ba555a9..e6e9946fbf44 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/fw.c
|
||||
@@ -1293,13 +1293,13 @@ static void rtw_fill_rsvd_page_desc(struct rtw_dev *rtwdev, struct sk_buff *skb,
|
||||
rtw_tx_fill_tx_desc(rtwdev, &pkt_info, skb);
|
||||
}
|
||||
|
||||
-static inline u8 rtw_len_to_page(unsigned int len, u8 page_size)
|
||||
+static inline u8 rtw_len_to_page(unsigned int len, u16 page_size)
|
||||
{
|
||||
return DIV_ROUND_UP(len, page_size);
|
||||
}
|
||||
|
||||
-static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u8 page_size,
|
||||
- u8 page_margin, u32 page, u8 *buf,
|
||||
+static void rtw_rsvd_page_list_to_buf(struct rtw_dev *rtwdev, u16 page_size,
|
||||
+ u16 page_margin, u32 page, u8 *buf,
|
||||
struct rtw_rsvd_page *rsvd_pkt)
|
||||
{
|
||||
struct sk_buff *skb = rsvd_pkt->skb;
|
||||
@@ -1601,13 +1601,13 @@ static int __rtw_build_rsvd_page_from_vifs(struct rtw_dev *rtwdev)
|
||||
|
||||
static u8 *rtw_build_rsvd_page(struct rtw_dev *rtwdev, u32 *size)
|
||||
{
|
||||
- struct ieee80211_hw *hw = rtwdev->hw;
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
- struct sk_buff *iter;
|
||||
+ struct ieee80211_hw *hw = rtwdev->hw;
|
||||
struct rtw_rsvd_page *rsvd_pkt;
|
||||
- u32 page = 0;
|
||||
+ struct sk_buff *iter;
|
||||
+ u16 page_size, page_margin, tx_desc_sz;
|
||||
u8 total_page = 0;
|
||||
- u8 page_size, page_margin, tx_desc_sz;
|
||||
+ u32 page = 0;
|
||||
u8 *buf;
|
||||
int ret;
|
||||
|
||||
@@ -2013,12 +2013,13 @@ static int _rtw_hw_scan_update_probe_req(struct rtw_dev *rtwdev, u8 num_probes,
|
||||
{
|
||||
const struct rtw_chip_info *chip = rtwdev->chip;
|
||||
struct sk_buff *skb, *tmp;
|
||||
- u8 page_offset = 1, *buf, page_size = chip->page_size;
|
||||
u16 pg_addr = rtwdev->fifo.rsvd_h2c_info_addr, loc;
|
||||
- u16 buf_offset = page_size * page_offset;
|
||||
u8 tx_desc_sz = chip->tx_pkt_desc_sz;
|
||||
- u8 page_cnt, pages;
|
||||
+ u16 page_size = chip->page_size;
|
||||
+ u8 page_offset = 1, *buf;
|
||||
+ u16 buf_offset = page_size * page_offset;
|
||||
unsigned int pkt_len;
|
||||
+ u8 page_cnt, pages;
|
||||
int ret;
|
||||
|
||||
if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/mac.c b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
index daf23ccf6378..cae9cca6dca3 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/mac.c
|
||||
@@ -1138,7 +1138,7 @@ int rtw_set_trx_fifo_info(struct rtw_dev *rtwdev)
|
||||
|
||||
/* config rsvd page num */
|
||||
fifo->rsvd_drv_pg_num = chip->rsvd_drv_pg_num;
|
||||
- fifo->txff_pg_num = chip->txff_size >> 7;
|
||||
+ fifo->txff_pg_num = chip->txff_size / chip->page_size;
|
||||
if (rtw_chip_wcpu_11n(rtwdev))
|
||||
fifo->rsvd_pg_num = fifo->rsvd_drv_pg_num;
|
||||
else
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index 45f0e8fff453..ef82e60d5c19 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1187,7 +1187,7 @@ struct rtw_chip_info {
|
||||
u32 fw_rxff_size;
|
||||
u16 rsvd_drv_pg_num;
|
||||
u8 band;
|
||||
- u8 page_size;
|
||||
+ u16 page_size;
|
||||
u8 csi_buf_pg_num;
|
||||
u8 dig_max;
|
||||
u8 dig_min;
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,316 @@
|
||||
From 67d915604e6993ff627ac001983a2de63ff71b13 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:12:39 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Move pwr_track_tbl to struct rtw_rfe_def
|
||||
|
||||
RTL8812AU uses one set of TX power tracking tables for RFE 3, and
|
||||
another set for everything else.
|
||||
|
||||
Move pwr_track_tbl from struct rtw_chip_info to struct rtw_rfe_def in
|
||||
order to load the right set of tables for each RFE (RF front end) type.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/904d0ab1-c046-40cd-a3a3-d4fdcf663c9d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 8 ++++---
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 3 ++-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8703b.c | 12 +++++-----
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723d.c | 12 +++++-----
|
||||
drivers/net/wireless/realtek/rtw88/rtw8723x.c | 3 ++-
|
||||
drivers/net/wireless/realtek/rtw88/rtw8821c.c | 17 +++++++-------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822b.c | 15 ++++++------
|
||||
drivers/net/wireless/realtek/rtw88/rtw8822c.c | 23 +++++++++----------
|
||||
8 files changed, 47 insertions(+), 46 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index ef82e60d5c19..b5aa46a44cdb 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1099,17 +1099,20 @@ enum rtw_rfe_fem {
|
||||
struct rtw_rfe_def {
|
||||
const struct rtw_table *phy_pg_tbl;
|
||||
const struct rtw_table *txpwr_lmt_tbl;
|
||||
+ const struct rtw_pwr_track_tbl *pwr_track_tbl;
|
||||
const struct rtw_table *agc_btg_tbl;
|
||||
};
|
||||
|
||||
-#define RTW_DEF_RFE(chip, bb_pg, pwrlmt) { \
|
||||
+#define RTW_DEF_RFE(chip, bb_pg, pwrlmt, track) { \
|
||||
.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \
|
||||
.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
|
||||
+ .pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
|
||||
}
|
||||
|
||||
-#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, btg) { \
|
||||
+#define RTW_DEF_RFE_EXT(chip, bb_pg, pwrlmt, track, btg) { \
|
||||
.phy_pg_tbl = &rtw ## chip ## _bb_pg_type ## bb_pg ## _tbl, \
|
||||
.txpwr_lmt_tbl = &rtw ## chip ## _txpwr_lmt_type ## pwrlmt ## _tbl, \
|
||||
+ .pwr_track_tbl = &rtw ## chip ## _pwr_track_type ## track ## _tbl, \
|
||||
.agc_btg_tbl = &rtw ## chip ## _agc_btg_type ## btg ## _tbl, \
|
||||
}
|
||||
|
||||
@@ -1243,7 +1246,6 @@ struct rtw_chip_info {
|
||||
u16 dpd_ratemask;
|
||||
u8 iqk_threshold;
|
||||
u8 lck_threshold;
|
||||
- const struct rtw_pwr_track_tbl *pwr_track_tbl;
|
||||
|
||||
u8 bfer_su_max_num;
|
||||
u8 bfer_mu_max_num;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
index d7b8efbd0d3c..de491fb9caad 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -2384,7 +2384,8 @@ void rtw_phy_init_tx_power(struct rtw_dev *rtwdev)
|
||||
void rtw_phy_config_swing_table(struct rtw_dev *rtwdev,
|
||||
struct rtw_swing_table *swing_table)
|
||||
{
|
||||
- const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
|
||||
+ const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
|
||||
+ const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
|
||||
u8 channel = rtwdev->hal.current_channel;
|
||||
|
||||
if (IS_CH_2G_BAND(channel)) {
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8703b.c b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
index dec0cec4ca22..a19b94d022ee 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8703b.c
|
||||
@@ -493,11 +493,6 @@ static const struct rtw_pwr_seq_cmd * const card_disable_flow_8703b[] = {
|
||||
NULL
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
|
||||
- [0] = { .phy_pg_tbl = &rtw8703b_bb_pg_tbl,
|
||||
- .txpwr_lmt_tbl = &rtw8703b_txpwr_lmt_tbl,},
|
||||
-};
|
||||
-
|
||||
static const struct rtw_page_table page_table_8703b[] = {
|
||||
{12, 2, 2, 0, 1},
|
||||
{12, 2, 2, 0, 1},
|
||||
@@ -1818,6 +1813,12 @@ static const struct rtw_pwr_track_tbl rtw8703b_rtw_pwr_track_tbl = {
|
||||
.pwrtrk_xtal_p = rtw8703b_pwrtrk_xtal_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8703b_rfe_defs[] = {
|
||||
+ [0] = { .phy_pg_tbl = &rtw8703b_bb_pg_tbl,
|
||||
+ .txpwr_lmt_tbl = &rtw8703b_txpwr_lmt_tbl,
|
||||
+ .pwr_track_tbl = &rtw8703b_rtw_pwr_track_tbl, },
|
||||
+};
|
||||
+
|
||||
/* Shared-Antenna Coex Table */
|
||||
static const struct coex_table_para table_sant_8703b[] = {
|
||||
{0xffffffff, 0xffffffff}, /* case-0 */
|
||||
@@ -1997,7 +1998,6 @@ const struct rtw_chip_info rtw8703b_hw_spec = {
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8703b_rfe_defs),
|
||||
|
||||
.iqk_threshold = 8,
|
||||
- .pwr_track_tbl = &rtw8703b_rtw_pwr_track_tbl,
|
||||
|
||||
/* WOWLAN firmware exists, but not implemented yet */
|
||||
.wow_fw_name = "rtw88/rtw8703b_wow_fw.bin",
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723d.c b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
index 1d99bb89ef1d..eeca31bf71f1 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723d.c
|
||||
@@ -2020,11 +2020,6 @@ static const struct rtw_intf_phy_para_table phy_para_table_8723d = {
|
||||
.n_gen1_para = ARRAY_SIZE(pcie_gen1_param_8723d),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
|
||||
- [0] = { .phy_pg_tbl = &rtw8723d_bb_pg_tbl,
|
||||
- .txpwr_lmt_tbl = &rtw8723d_txpwr_lmt_tbl,},
|
||||
-};
|
||||
-
|
||||
static const u8 rtw8723d_pwrtrk_2gb_n[] = {
|
||||
0, 0, 1, 1, 1, 2, 2, 3, 4, 4, 4, 4, 5, 5, 5,
|
||||
6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 10
|
||||
@@ -2088,6 +2083,12 @@ static const struct rtw_pwr_track_tbl rtw8723d_rtw_pwr_track_tbl = {
|
||||
.pwrtrk_xtal_n = rtw8723d_pwrtrk_xtal_n,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8723d_rfe_defs[] = {
|
||||
+ [0] = { .phy_pg_tbl = &rtw8723d_bb_pg_tbl,
|
||||
+ .txpwr_lmt_tbl = &rtw8723d_txpwr_lmt_tbl,
|
||||
+ .pwr_track_tbl = &rtw8723d_rtw_pwr_track_tbl, },
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8723d[] = {
|
||||
{0x948, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0x67, BIT(7), RTW_REG_DOMAIN_MAC8},
|
||||
@@ -2159,7 +2160,6 @@ const struct rtw_chip_info rtw8723d_hw_spec = {
|
||||
.rfe_defs = rtw8723d_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8723d_rfe_defs),
|
||||
.rx_ldpc = false,
|
||||
- .pwr_track_tbl = &rtw8723d_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.ampdu_density = IEEE80211_HT_MPDU_DENSITY_16,
|
||||
.max_scan_ie_len = IEEE80211_MAX_DATA_LEN,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723x.c b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
index 0d0b6c2cb9aa..69f73cb5b4cd 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8723x.c
|
||||
@@ -595,7 +595,8 @@ void __rtw8723x_pwrtrack_set_xtal(struct rtw_dev *rtwdev, u8 therm_path,
|
||||
u8 delta)
|
||||
{
|
||||
struct rtw_dm_info *dm_info = &rtwdev->dm_info;
|
||||
- const struct rtw_pwr_track_tbl *tbl = rtwdev->chip->pwr_track_tbl;
|
||||
+ const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
|
||||
+ const struct rtw_pwr_track_tbl *tbl = rfe_def->pwr_track_tbl;
|
||||
const s8 *pwrtrk_xtal;
|
||||
s8 xtal_cap;
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821c.c b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
index 39dc8244f744..0270225b9c20 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821c.c
|
||||
@@ -1581,13 +1581,6 @@ static const struct rtw_intf_phy_para_table phy_para_table_8821c = {
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8821c),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
|
||||
- [0] = RTW_DEF_RFE(8821c, 0, 0),
|
||||
- [2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
|
||||
- [4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 2),
|
||||
- [6] = RTW_DEF_RFE(8821c, 0, 0),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8821c_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
};
|
||||
@@ -1899,7 +1892,7 @@ static const u8 rtw8821c_pwrtrk_2g_cck_a_p[] = {
|
||||
5, 6, 6, 7, 7, 7, 8, 8, 9, 9, 9, 9, 9, 9
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8821c_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8821c_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[0] = rtw8821c_pwrtrk_5gb_n[0],
|
||||
.pwrtrk_5gb_n[1] = rtw8821c_pwrtrk_5gb_n[1],
|
||||
.pwrtrk_5gb_n[2] = rtw8821c_pwrtrk_5gb_n[2],
|
||||
@@ -1922,6 +1915,13 @@ static const struct rtw_pwr_track_tbl rtw8821c_rtw_pwr_track_tbl = {
|
||||
.pwrtrk_2g_ccka_p = rtw8821c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8821c_rfe_defs[] = {
|
||||
+ [0] = RTW_DEF_RFE(8821c, 0, 0, 0),
|
||||
+ [2] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
|
||||
+ [4] = RTW_DEF_RFE_EXT(8821c, 0, 0, 0, 2),
|
||||
+ [6] = RTW_DEF_RFE(8821c, 0, 0, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8821c[] = {
|
||||
{0xCB0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0xCB4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
@@ -1994,7 +1994,6 @@ const struct rtw_chip_info rtw8821c_hw_spec = {
|
||||
.rfe_defs = rtw8821c_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8821c_rfe_defs),
|
||||
.rx_ldpc = false,
|
||||
- .pwr_track_tbl = &rtw8821c_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
.bfer_mu_max_num = 1,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822b.c b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
index 419eb14c5467..739809f4cab5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822b.c
|
||||
@@ -2072,12 +2072,6 @@ static const struct rtw_intf_phy_para_table phy_para_table_8822b = {
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822b),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
|
||||
- [2] = RTW_DEF_RFE(8822b, 2, 2),
|
||||
- [3] = RTW_DEF_RFE(8822b, 3, 0),
|
||||
- [5] = RTW_DEF_RFE(8822b, 5, 5),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8822b_dig[] = {
|
||||
[0] = { .addr = 0xc50, .mask = 0x7f },
|
||||
[1] = { .addr = 0xe50, .mask = 0x7f },
|
||||
@@ -2432,7 +2426,7 @@ static const u8 rtw8822b_pwrtrk_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = {
|
||||
10, 11, 11, 12, 12, 13, 13, 14, 14, 15
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8822b_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8822b_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822b_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -2455,6 +2449,12 @@ static const struct rtw_pwr_track_tbl rtw8822b_rtw_pwr_track_tbl = {
|
||||
.pwrtrk_2g_ccka_p = rtw8822b_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8822b_rfe_defs[] = {
|
||||
+ [2] = RTW_DEF_RFE(8822b, 2, 2, 0),
|
||||
+ [3] = RTW_DEF_RFE(8822b, 3, 0, 0),
|
||||
+ [5] = RTW_DEF_RFE(8822b, 5, 5, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_reg_domain coex_info_hw_regs_8822b[] = {
|
||||
{0xcb0, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
{0xcb4, MASKDWORD, RTW_REG_DOMAIN_MAC32},
|
||||
@@ -2535,7 +2535,6 @@ const struct rtw_chip_info rtw8822b_hw_spec = {
|
||||
.rf_tbl = {&rtw8822b_rf_a_tbl, &rtw8822b_rf_b_tbl},
|
||||
.rfe_defs = rtw8822b_rfe_defs,
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822b_rfe_defs),
|
||||
- .pwr_track_tbl = &rtw8822b_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
.bfer_mu_max_num = 1,
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
index 56085f220fcd..af6b76937f1d 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
|
||||
@@ -4883,16 +4883,6 @@ static const struct rtw_intf_phy_para_table phy_para_table_8822c = {
|
||||
.n_gen2_para = ARRAY_SIZE(pcie_gen2_param_8822c),
|
||||
};
|
||||
|
||||
-static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
|
||||
- [0] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [1] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [2] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [3] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [4] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
- [5] = RTW_DEF_RFE(8822c, 0, 5),
|
||||
- [6] = RTW_DEF_RFE(8822c, 0, 0),
|
||||
-};
|
||||
-
|
||||
static const struct rtw_hw_reg rtw8822c_dig[] = {
|
||||
[0] = { .addr = 0x1d70, .mask = 0x7f },
|
||||
[1] = { .addr = 0x1d70, .mask = 0x7f00 },
|
||||
@@ -5238,7 +5228,7 @@ static const u8 rtw8822c_pwrtrk_2g_cck_a_p[RTW_PWR_TRK_TBL_SZ] = {
|
||||
18, 18, 19, 20, 21, 22, 23, 24, 24, 25
|
||||
};
|
||||
|
||||
-static const struct rtw_pwr_track_tbl rtw8822c_rtw_pwr_track_tbl = {
|
||||
+static const struct rtw_pwr_track_tbl rtw8822c_pwr_track_type0_tbl = {
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_1] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_1],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_2] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_2],
|
||||
.pwrtrk_5gb_n[RTW_PWR_TRK_5G_3] = rtw8822c_pwrtrk_5gb_n[RTW_PWR_TRK_5G_3],
|
||||
@@ -5261,6 +5251,16 @@ static const struct rtw_pwr_track_tbl rtw8822c_rtw_pwr_track_tbl = {
|
||||
.pwrtrk_2g_ccka_p = rtw8822c_pwrtrk_2g_cck_a_p,
|
||||
};
|
||||
|
||||
+static const struct rtw_rfe_def rtw8822c_rfe_defs[] = {
|
||||
+ [0] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [1] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [2] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [3] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [4] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+ [5] = RTW_DEF_RFE(8822c, 0, 5, 0),
|
||||
+ [6] = RTW_DEF_RFE(8822c, 0, 0, 0),
|
||||
+};
|
||||
+
|
||||
static const struct rtw_hw_reg_offset rtw8822c_edcca_th[] = {
|
||||
[EDCCA_TH_L2H_IDX] = {
|
||||
{.addr = 0x84c, .mask = MASKBYTE2}, .offset = 0x80
|
||||
@@ -5360,7 +5360,6 @@ const struct rtw_chip_info rtw8822c_hw_spec = {
|
||||
.rfe_defs_size = ARRAY_SIZE(rtw8822c_rfe_defs),
|
||||
.en_dis_dpd = true,
|
||||
.dpd_ratemask = DIS_DPD_RATEALL,
|
||||
- .pwr_track_tbl = &rtw8822c_rtw_pwr_track_tbl,
|
||||
.iqk_threshold = 8,
|
||||
.lck_threshold = 8,
|
||||
.bfer_su_max_num = 2,
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,32 @@
|
||||
From 85bf3041a0ea40a60b5295749268e179f056546a Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:13:10 +0300
|
||||
Subject: [PATCH] wifi: rtw88: usb: Set pkt_info.ls for the reserved page
|
||||
|
||||
"ls" meaning "last segment". Without this RTL8812AU can't upload the
|
||||
reserved page in USB 2 mode. (Somehow it's fine in USB 3 mode.)
|
||||
|
||||
Also tested with RTL8822CU, RTL8812BU, RTL8811CU, RTL8723DU, RTL8811AU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/e443f5d9-4b53-4f64-985c-64313ec80bef@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 a3d2b40ec67b..6fa3c37205f5 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -478,6 +478,7 @@ static int rtw_usb_write_data_rsvd_page(struct rtw_dev *rtwdev, u8 *buf,
|
||||
pkt_info.tx_pkt_size = size;
|
||||
pkt_info.qsel = TX_DESC_QSEL_BEACON;
|
||||
pkt_info.offset = chip->tx_pkt_desc_sz;
|
||||
+ pkt_info.ls = true;
|
||||
|
||||
return rtw_usb_write_data(rtwdev, &pkt_info, buf);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,68 @@
|
||||
From 57289d30cd2ae315ab9b28213d63d1dbf8570cf3 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:13:45 +0300
|
||||
Subject: [PATCH] wifi: rtw88: Detect beacon loss with chips other than 8822c
|
||||
|
||||
The driver is supposed to avoid entering LPS (power saving) when there
|
||||
is beacon loss, but only RTL8822C detects the beacon loss (because it
|
||||
has beacon filtering in the firmware).
|
||||
|
||||
Detect beacon loss with the other chips by checking if we received less
|
||||
than half the expected number of beacons in the last 2-second interval.
|
||||
|
||||
This gets rid of the occasional "failed to get tx report from firmware"
|
||||
warnings with RTL8821AU. It may also avoid some disconnections.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/f52b2fcf-bf94-48bc-89bd-e55ebc3a2f2d@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
index e6f985a92019..65d20ad02667 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -202,6 +202,21 @@ static void rtw_vif_watch_dog_iter(void *data, struct ieee80211_vif *vif)
|
||||
rtwvif->stats.rx_cnt = 0;
|
||||
}
|
||||
|
||||
+static void rtw_sw_beacon_loss_check(struct rtw_dev *rtwdev,
|
||||
+ struct rtw_vif *rtwvif, int received_beacons)
|
||||
+{
|
||||
+ int watchdog_delay = 2000000 / 1024; /* TU */
|
||||
+ int beacon_int, expected_beacons;
|
||||
+
|
||||
+ if (rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_BCN_FILTER) || !rtwvif)
|
||||
+ return;
|
||||
+
|
||||
+ beacon_int = rtwvif_to_vif(rtwvif)->bss_conf.beacon_int;
|
||||
+ expected_beacons = DIV_ROUND_UP(watchdog_delay, beacon_int);
|
||||
+
|
||||
+ rtwdev->beacon_loss = received_beacons < expected_beacons / 2;
|
||||
+}
|
||||
+
|
||||
/* process TX/RX statistics periodically for hardware,
|
||||
* the information helps hardware to enhance performance
|
||||
*/
|
||||
@@ -212,6 +227,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);
|
||||
+ int received_beacons = rtwdev->dm_info.cur_pkt_count.num_bcn_pkt;
|
||||
u32 tx_unicast_mbps, rx_unicast_mbps;
|
||||
bool ps_active;
|
||||
|
||||
@@ -270,6 +286,8 @@ static void rtw_watch_dog_work(struct work_struct *work)
|
||||
*/
|
||||
rtw_iterate_vifs(rtwdev, rtw_vif_watch_dog_iter, &data);
|
||||
|
||||
+ rtw_sw_beacon_loss_check(rtwdev, data.rtwvif, received_beacons);
|
||||
+
|
||||
/* fw supports only one station associated to enter lps, if there are
|
||||
* more than two stations associated to the AP, then we can not enter
|
||||
* lps, because fw does not handle the overlapped beacon interval
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,73 @@
|
||||
From b19840afc05121293ae59f017cb9924814eb5d77 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:14:12 +0300
|
||||
Subject: [PATCH] wifi: rtw88: coex: Support chips without a scoreboard
|
||||
|
||||
All the chips currently supported have a "scoreboard": the chip keeps
|
||||
track of certain things related to bluetooth, for example, whether
|
||||
bluetooth is active. The information can be read from register 0xaa.
|
||||
|
||||
RTL8821AU doesn't have this. Implement bluetooth activity detection in
|
||||
rtw_coex_monitor_bt_enable() based on the bluetooth TX/RX counters.
|
||||
|
||||
This is mostly important for RTL8811AU, the version of RTL8821AU without
|
||||
bluetooth. Without this change, the driver thinks bluetooth is active
|
||||
and the wifi speeds are low.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/5058f23d-2086-42cd-82ad-eef31a348467@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 18 ++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/main.h | 1 +
|
||||
2 files changed, 19 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
index 8c5aec744f3c..8f2b472589db 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -494,11 +494,29 @@ static void rtw_coex_monitor_bt_enable(struct rtw_dev *rtwdev)
|
||||
struct rtw_coex_stat *coex_stat = &coex->stat;
|
||||
struct rtw_coex_dm *coex_dm = &coex->dm;
|
||||
bool bt_disabled = false;
|
||||
+ bool bt_active = true;
|
||||
u16 score_board;
|
||||
|
||||
if (chip->scbd_support) {
|
||||
score_board = rtw_coex_read_scbd(rtwdev);
|
||||
bt_disabled = !(score_board & COEX_SCBD_ONOFF);
|
||||
+ } else {
|
||||
+ if (coex_stat->hi_pri_tx == 0 && coex_stat->hi_pri_rx == 0 &&
|
||||
+ coex_stat->lo_pri_tx == 0 && coex_stat->lo_pri_rx == 0)
|
||||
+ bt_active = false;
|
||||
+
|
||||
+ if (coex_stat->hi_pri_tx == 0xffff && coex_stat->hi_pri_rx == 0xffff &&
|
||||
+ coex_stat->lo_pri_tx == 0xffff && coex_stat->lo_pri_rx == 0xffff)
|
||||
+ bt_active = false;
|
||||
+
|
||||
+ if (bt_active) {
|
||||
+ coex_stat->bt_disable_cnt = 0;
|
||||
+ bt_disabled = false;
|
||||
+ } else {
|
||||
+ coex_stat->bt_disable_cnt++;
|
||||
+ if (coex_stat->bt_disable_cnt >= 10)
|
||||
+ bt_disabled = true;
|
||||
+ }
|
||||
}
|
||||
|
||||
if (coex_stat->bt_disabled != bt_disabled) {
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.h b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
index b5aa46a44cdb..cd09fb6f7b8b 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.h
|
||||
@@ -1494,6 +1494,7 @@ struct rtw_coex_stat {
|
||||
u8 bt_hid_slot;
|
||||
u8 bt_a2dp_bitpool;
|
||||
u8 bt_iqk_state;
|
||||
+ u8 bt_disable_cnt;
|
||||
|
||||
u16 wl_beacon_interval;
|
||||
u8 wl_noisy_level;
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,76 @@
|
||||
From bfcee5ee924fc5f706d20f5dc31586ca47912304 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:14:45 +0300
|
||||
Subject: [PATCH] wifi: rtw88: 8821a: Regularly ask for BT info updates
|
||||
|
||||
The RTL8821AU firmware sends C2H_BT_INFO by itself when bluetooth
|
||||
headphones are connected, but not when they are disconnected. This leads
|
||||
to the coexistence code still using the A2DP algorithm long after the
|
||||
headphones are disconnected, which means the wifi speeds are much lower
|
||||
than they should be. Work around this by asking for updates every two
|
||||
seconds if the chip is RTL8821AU.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/358acdd2-6aae-46c1-9c66-fcce4e700b96@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/coex.c | 2 +-
|
||||
drivers/net/wireless/realtek/rtw88/coex.h | 11 +++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/main.c | 1 +
|
||||
3 files changed, 13 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/coex.c b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
index 8f2b472589db..c929db1e53ca 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.c
|
||||
@@ -446,7 +446,7 @@ static void rtw_coex_check_rfk(struct rtw_dev *rtwdev)
|
||||
}
|
||||
}
|
||||
|
||||
-static void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
||||
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev)
|
||||
{
|
||||
struct rtw_coex *coex = &rtwdev->coex;
|
||||
struct rtw_coex_stat *coex_stat = &coex->stat;
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/coex.h b/drivers/net/wireless/realtek/rtw88/coex.h
|
||||
index 57cf29da9ea4..c398be8391f7 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/coex.h
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/coex.h
|
||||
@@ -384,6 +384,7 @@ u32 rtw_coex_read_indirect_reg(struct rtw_dev *rtwdev, u16 addr);
|
||||
void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr,
|
||||
u32 mask, u32 val);
|
||||
void rtw_coex_write_scbd(struct rtw_dev *rtwdev, u16 bitpos, bool set);
|
||||
+void rtw_coex_query_bt_info(struct rtw_dev *rtwdev);
|
||||
|
||||
void rtw_coex_bt_relink_work(struct work_struct *work);
|
||||
void rtw_coex_bt_reenable_work(struct work_struct *work);
|
||||
@@ -419,4 +420,14 @@ static inline bool rtw_coex_disabled(struct rtw_dev *rtwdev)
|
||||
return coex_stat->bt_disabled;
|
||||
}
|
||||
|
||||
+static inline void rtw_coex_active_query_bt_info(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ /* The RTL8821AU firmware doesn't send C2H_BT_INFO by itself
|
||||
+ * when bluetooth headphones are disconnected, so we have to
|
||||
+ * ask for it regularly.
|
||||
+ */
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8821A && rtwdev->efuse.btcoex)
|
||||
+ rtw_coex_query_bt_info(rtwdev);
|
||||
+}
|
||||
+
|
||||
#endif
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/main.c b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
index 65d20ad02667..e91530ed05a0 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/main.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/main.c
|
||||
@@ -274,6 +274,7 @@ static void rtw_watch_dog_work(struct work_struct *work)
|
||||
rtw_leave_lps(rtwdev);
|
||||
rtw_coex_wl_status_check(rtwdev);
|
||||
rtw_coex_query_bt_hid_list(rtwdev);
|
||||
+ rtw_coex_active_query_bt_info(rtwdev);
|
||||
|
||||
rtw_phy_dynamic_mechanism(rtwdev);
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
42
packages/linux/patches/rtlwifi/after-6.12/0017-wifi-rtw88-8812a-Mitigate-beacon-loss.patch
vendored
Normal file
42
packages/linux/patches/rtlwifi/after-6.12/0017-wifi-rtw88-8812a-Mitigate-beacon-loss.patch
vendored
Normal file
@ -0,0 +1,42 @@
|
||||
From f9e0189cbc2d6447dde392944c769546cdf48140 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 23 Oct 2024 17:15:13 +0300
|
||||
Subject: [PATCH] wifi: rtw88: 8812a: Mitigate beacon loss
|
||||
|
||||
The RTL8812AU has a reception problem, maybe only in the 5 GHz band.
|
||||
Sometimes, in some positions, it stops receiving anything even though
|
||||
the distance to the AP is only ~3 meters and there are no obstacles.
|
||||
Moving it a few centimeters fixes it.
|
||||
|
||||
Switch the initial gain to maximum coverage when there is beacon loss.
|
||||
This only helps sometimes. This is similar to what the official driver
|
||||
does.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/203f5043-4fe1-4f35-8b8f-d3b6f44e1fd9@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/phy.c | 7 +++++++
|
||||
1 file changed, 7 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/phy.c b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
index de491fb9caad..8ed20c89d216 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/phy.c
|
||||
@@ -530,6 +530,13 @@ static void rtw_phy_dig(struct rtw_dev *rtwdev)
|
||||
*/
|
||||
rtw_phy_dig_recorder(dm_info, cur_igi, fa_cnt);
|
||||
|
||||
+ /* Mitigate beacon loss and connectivity issues, mainly (only?)
|
||||
+ * in the 5 GHz band
|
||||
+ */
|
||||
+ if (rtwdev->chip->id == RTW_CHIP_TYPE_8812A && rtwdev->beacon_loss &&
|
||||
+ linked && dm_info->total_fa_cnt < DIG_PERF_FA_TH_EXTRA_HIGH)
|
||||
+ cur_igi = DIG_CVRG_MIN;
|
||||
+
|
||||
if (cur_igi != pre_igi)
|
||||
rtw_phy_dig_write(rtwdev, cur_igi);
|
||||
}
|
||||
--
|
||||
2.43.0
|
||||
|
2871
packages/linux/patches/rtlwifi/after-6.12/0018-wifi-rtw88-Add-rtw8812a_table.-c-h.patch
vendored
Normal file
2871
packages/linux/patches/rtlwifi/after-6.12/0018-wifi-rtw88-Add-rtw8812a_table.-c-h.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2404
packages/linux/patches/rtlwifi/after-6.12/0019-wifi-rtw88-Add-rtw8821a_table.-c-h.patch
vendored
Normal file
2404
packages/linux/patches/rtlwifi/after-6.12/0019-wifi-rtw88-Add-rtw8821a_table.-c-h.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
2196
packages/linux/patches/rtlwifi/after-6.12/0020-wifi-rtw88-Add-rtw88xxa.-c-h.patch
vendored
Normal file
2196
packages/linux/patches/rtlwifi/after-6.12/0020-wifi-rtw88-Add-rtw88xxa.-c-h.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1239
packages/linux/patches/rtlwifi/after-6.12/0021-wifi-rtw88-Add-rtw8821a.-c-h.patch
vendored
Normal file
1239
packages/linux/patches/rtlwifi/after-6.12/0021-wifi-rtw88-Add-rtw8821a.-c-h.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1144
packages/linux/patches/rtlwifi/after-6.12/0022-wifi-rtw88-Add-rtw8812a.-c-h.patch
vendored
Normal file
1144
packages/linux/patches/rtlwifi/after-6.12/0022-wifi-rtw88-Add-rtw8812a.-c-h.patch
vendored
Normal file
File diff suppressed because it is too large
Load Diff
89
packages/linux/patches/rtlwifi/after-6.12/0023-wifi-rtw88-Add-rtw8821au.c-and-rtw8812au.c.patch
vendored
Normal file
89
packages/linux/patches/rtlwifi/after-6.12/0023-wifi-rtw88-Add-rtw8821au.c-and-rtw8812au.c.patch
vendored
Normal file
@ -0,0 +1,89 @@
|
||||
From 8f82bb2cfaf7b8992e0e8493cb765138254f87c9 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 30 Oct 2024 20:29:28 +0200
|
||||
Subject: [PATCH] wifi: rtw88: Add rtw8821au.c and rtw8812au.c
|
||||
|
||||
These are the entry points for the new modules rtw88_8821au
|
||||
(RTL8821AU/RTL8811AU) and rtw88_8812au (RTL8812AU).
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/91c495f8-a607-429b-8bc0-5a45d3c1393e@gmail.com
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8812au.c | 28 +++++++++++++++++++
|
||||
.../net/wireless/realtek/rtw88/rtw8821au.c | 28 +++++++++++++++++++
|
||||
2 files changed, 56 insertions(+)
|
||||
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
create mode 100644 drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8812au.c b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
new file mode 100644
|
||||
index 000000000000..4da69590a423
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
@@ -0,0 +1,28 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
+/* Copyright(c) 2024 Realtek Corporation
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include "main.h"
|
||||
+#include "rtw8812a.h"
|
||||
+#include "usb.h"
|
||||
+
|
||||
+static const struct usb_device_id rtw_8812au_id_table[] = {
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, rtw_8812au_id_table);
|
||||
+
|
||||
+static struct usb_driver rtw_8812au_driver = {
|
||||
+ .name = "rtw_8812au",
|
||||
+ .id_table = rtw_8812au_id_table,
|
||||
+ .probe = rtw_usb_probe,
|
||||
+ .disconnect = rtw_usb_disconnect,
|
||||
+};
|
||||
+module_usb_driver(rtw_8812au_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
|
||||
+MODULE_DESCRIPTION("Realtek 802.11ac wireless 8812au driver");
|
||||
+MODULE_LICENSE("Dual BSD/GPL");
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821au.c b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
new file mode 100644
|
||||
index 000000000000..730018773e1c
|
||||
--- /dev/null
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
@@ -0,0 +1,28 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
||||
+/* Copyright(c) 2024 Realtek Corporation
|
||||
+ */
|
||||
+
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/usb.h>
|
||||
+#include "main.h"
|
||||
+#include "rtw8821a.h"
|
||||
+#include "usb.h"
|
||||
+
|
||||
+static const struct usb_device_id rtw_8821au_id_table[] = {
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ {},
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(usb, rtw_8821au_id_table);
|
||||
+
|
||||
+static struct usb_driver rtw_8821au_driver = {
|
||||
+ .name = "rtw_8821au",
|
||||
+ .id_table = rtw_8821au_id_table,
|
||||
+ .probe = rtw_usb_probe,
|
||||
+ .disconnect = rtw_usb_disconnect,
|
||||
+};
|
||||
+module_usb_driver(rtw_8821au_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Bitterblue Smith <rtl8821cerfe2@gmail.com>");
|
||||
+MODULE_DESCRIPTION("Realtek 802.11ac wireless 8821au/8811au driver");
|
||||
+MODULE_LICENSE("Dual BSD/GPL");
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,123 @@
|
||||
From 0e3e8284f8e1bf2fc0f7bf247194efe5cfc568c1 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Wed, 30 Oct 2024 20:31:28 +0200
|
||||
Subject: [PATCH] wifi: rtw88: Enable the new RTL8821AU/RTL8812AU drivers
|
||||
|
||||
These are older Wifi 5 chips. RTL8821AU is 1x1, with or without
|
||||
Bluetooth. RTL8812AU is 2x2, without Bluetooth.
|
||||
|
||||
Beamforming is not implemented. It looks like these chips need a
|
||||
different implementation than what is in bf.c.
|
||||
|
||||
Speed tests with RTL8821AU: 137 Mbps download, 144 Mbps upload.
|
||||
Speed tests with RTL8812AU: 344 Mbps download, 387 Mbps upload.
|
||||
|
||||
Station mode and AP mode were tested.
|
||||
|
||||
Bluetooth coexistence works. I used my Bluetooth headphones for
|
||||
several days, listening to music and watching videos. There is only
|
||||
a problem with the wifi speeds with one router:
|
||||
|
||||
With ISP's HG6544C router:
|
||||
Official driver: 3/5 Mbps.
|
||||
rtw88: a bit more, but not steady at all. Not enough to watch a 1080p
|
||||
Youtube video.
|
||||
|
||||
With my D-Link Eagle R32 router running Openwrt, on the same channel:
|
||||
Official driver: 6/10 Mbps.
|
||||
rtw88: download starts around 30, climbs to 50 / upload is 10 Mbps.
|
||||
I can watch a 1080p Youtube video.
|
||||
|
||||
The music doesn't cut out during any speed tests.
|
||||
|
||||
I also tested transferring files to and from my phone. I don't have
|
||||
other types of Bluetooth devices to test.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/0b8e8093-8103-4999-86bf-0055ec52ea64@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/Kconfig | 33 +++++++++++++++++++++
|
||||
drivers/net/wireless/realtek/rtw88/Makefile | 15 ++++++++++
|
||||
2 files changed, 48 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/Kconfig b/drivers/net/wireless/realtek/rtw88/Kconfig
|
||||
index 02b0d698413b..733b3e58da51 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/Kconfig
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/Kconfig
|
||||
@@ -43,6 +43,17 @@ config RTW88_8723D
|
||||
config RTW88_8821C
|
||||
tristate
|
||||
|
||||
+config RTW88_88XXA
|
||||
+ tristate
|
||||
+
|
||||
+config RTW88_8821A
|
||||
+ tristate
|
||||
+ select RTW88_88XXA
|
||||
+
|
||||
+config RTW88_8812A
|
||||
+ tristate
|
||||
+ select RTW88_88XXA
|
||||
+
|
||||
config RTW88_8822BE
|
||||
tristate "Realtek 8822BE PCI wireless network adapter"
|
||||
depends on PCI
|
||||
@@ -189,6 +200,28 @@ config RTW88_8821CU
|
||||
|
||||
802.11ac USB wireless network adapter
|
||||
|
||||
+config RTW88_8821AU
|
||||
+ tristate "Realtek 8821AU/8811AU USB wireless network adapter"
|
||||
+ depends on USB
|
||||
+ select RTW88_CORE
|
||||
+ select RTW88_USB
|
||||
+ select RTW88_8821A
|
||||
+ help
|
||||
+ Select this option will enable support for 8821AU and 8811AU chipset
|
||||
+
|
||||
+ 802.11ac USB wireless network adapter
|
||||
+
|
||||
+config RTW88_8812AU
|
||||
+ tristate "Realtek 8812AU USB wireless network adapter"
|
||||
+ depends on USB
|
||||
+ select RTW88_CORE
|
||||
+ select RTW88_USB
|
||||
+ select RTW88_8812A
|
||||
+ help
|
||||
+ Select this option will enable support for 8812AU chipset
|
||||
+
|
||||
+ 802.11ac USB wireless network adapter
|
||||
+
|
||||
config RTW88_DEBUG
|
||||
bool "Realtek rtw88 debug support"
|
||||
depends on RTW88_CORE
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/Makefile b/drivers/net/wireless/realtek/rtw88/Makefile
|
||||
index 8f47359b4380..f0b49f5a8a5a 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/Makefile
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/Makefile
|
||||
@@ -77,6 +77,21 @@ rtw88_8821cs-objs := rtw8821cs.o
|
||||
obj-$(CONFIG_RTW88_8821CU) += rtw88_8821cu.o
|
||||
rtw88_8821cu-objs := rtw8821cu.o
|
||||
|
||||
+obj-$(CONFIG_RTW88_88XXA) += rtw88_88xxa.o
|
||||
+rtw88_88xxa-objs := rtw88xxa.o
|
||||
+
|
||||
+obj-$(CONFIG_RTW88_8821A) += rtw88_8821a.o
|
||||
+rtw88_8821a-objs := rtw8821a.o rtw8821a_table.o
|
||||
+
|
||||
+obj-$(CONFIG_RTW88_8812A) += rtw88_8812a.o
|
||||
+rtw88_8812a-objs := rtw8812a.o rtw8812a_table.o
|
||||
+
|
||||
+obj-$(CONFIG_RTW88_8821AU) += rtw88_8821au.o
|
||||
+rtw88_8821au-objs := rtw8821au.o
|
||||
+
|
||||
+obj-$(CONFIG_RTW88_8812AU) += rtw88_8812au.o
|
||||
+rtw88_8812au-objs := rtw8812au.o
|
||||
+
|
||||
obj-$(CONFIG_RTW88_PCI) += rtw88_pci.o
|
||||
rtw88_pci-objs := pci.o
|
||||
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,84 @@
|
||||
From 7b5ce65d90187f0944e70dc5741aa0edfac926f4 Mon Sep 17 00:00:00 2001
|
||||
From: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Date: Wed, 6 Nov 2024 15:55:31 +0200
|
||||
Subject: [PATCH] wifi: rtw88: 8821au: Add additional devices to the USB_DEVICE
|
||||
list
|
||||
|
||||
These are the entries that Nick Morrow provided. From
|
||||
https://github.com/morrownr/8821au-20210708
|
||||
|
||||
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/da05b866-a9ff-428c-a008-35e8cf200a98@gmail.com
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8821au.c | 52 ++++++++++++++++++-
|
||||
1 file changed, 51 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8821au.c b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
index 730018773e1c..a01744b64e8d 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8821au.c
|
||||
@@ -9,8 +9,58 @@
|
||||
#include "usb.h"
|
||||
|
||||
static const struct usb_device_id rtw_8821au_id_table[] = {
|
||||
- { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0820, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0821, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x8822, 0xff, 0xff, 0xff),
|
||||
.driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x0823, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0xa811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x0242, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x029b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x04bb, 0x0953, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* I-O DATA */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x4007, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x056e, 0x400f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* ELECOM */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9052, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Netgear */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0e66, 0x0023, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* HAWKING */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3314, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3318, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0xab32, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Planex */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x804b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TRENDnet */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x011f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0120, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* TP Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x3823, 0x6249, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Obihai */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa811, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa813, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xb611, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8821a_hw_spec) }, /* Edimax */
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtw_8821au_id_table);
|
||||
--
|
||||
2.43.0
|
||||
|
98
packages/linux/patches/rtlwifi/after-6.12/0026-wifi-rtw88-8812au-Add-more-device-IDs.patch
vendored
Normal file
98
packages/linux/patches/rtlwifi/after-6.12/0026-wifi-rtw88-8812au-Add-more-device-IDs.patch
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
From 1ee6ff9ae3c1a9eda9081f9db04f85d3a7352d38 Mon Sep 17 00:00:00 2001
|
||||
From: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Date: Wed, 6 Nov 2024 15:57:10 +0200
|
||||
Subject: [PATCH] wifi: rtw88: 8812au: Add more device IDs
|
||||
|
||||
From https://github.com/morrownr/8812au-20210820.
|
||||
|
||||
Signed-off-by: Nick Morrow <usbwifi2024@gmail.com>
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/31b7ee6b-f96d-43e0-a32f-a9eb1174a0c1@gmail.com
|
||||
---
|
||||
.../net/wireless/realtek/rtw88/rtw8812au.c | 68 ++++++++++++++++++-
|
||||
1 file changed, 67 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8812au.c b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
index 4da69590a423..e18995f4cc78 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/rtw8812au.c
|
||||
@@ -9,8 +9,74 @@
|
||||
#include "usb.h"
|
||||
|
||||
static const struct usb_device_id rtw_8812au_id_table[] = {
|
||||
- { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x8812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881a, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881b, 0xff, 0xff, 0xff),
|
||||
.driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(RTW_USB_VENDOR_ID_REALTEK, 0x881c, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) },
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0409, 0x0408, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* NEC */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0411, 0x025d, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Buffalo */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x04bb, 0x0952, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* I-O DATA */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1106, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Belkin */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x050d, 0x1109, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Belkin */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0586, 0x3426, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* ZyXEL */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0789, 0x016e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Logitec */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x07b8, 0x8812, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Abocom */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0846, 0x9051, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Netgear */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0b05, 0x17d2, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* ASUS */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0df6, 0x0074, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Sitecom */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x0e66, 0x0022, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Hawking */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1058, 0x0632, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* WD */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x13b1, 0x003f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Linksys */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x148f, 0x9097, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Amped Wireless */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x1740, 0x0100, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* EnGenius */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x330e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3313, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3315, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2001, 0x3316, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* D-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2019, 0xab30, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Planex */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x20f4, 0x805b, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TRENDnet */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0101, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0103, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010d, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010e, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x010f, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2357, 0x0122, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* TP-Link */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x2604, 0x0012, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Tenda */
|
||||
+ { USB_DEVICE_AND_INTERFACE_INFO(0x7392, 0xa822, 0xff, 0xff, 0xff),
|
||||
+ .driver_info = (kernel_ulong_t)&(rtw8812a_hw_spec) }, /* Edimax */
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(usb, rtw_8812au_id_table);
|
||||
--
|
||||
2.43.0
|
||||
|
90
packages/linux/patches/rtlwifi/after-6.12/0027-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch
vendored
Normal file
90
packages/linux/patches/rtlwifi/after-6.12/0027-wifi-rtw88-usb-Support-USB-3-with-RTL8812AU.patch
vendored
Normal file
@ -0,0 +1,90 @@
|
||||
From 82a35723a67c29f685d7b518962154a73b7163a2 Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 14 Nov 2024 17:46:08 +0200
|
||||
Subject: [PATCH] wifi: rtw88: usb: Support USB 3 with RTL8812AU
|
||||
|
||||
Add the function to automatically switch the RTL8812AU into USB 3 mode.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/19cda72b-f1f1-4b69-8369-0e4376b646bf@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 44 ++++++++++++++++++++++--
|
||||
1 file changed, 42 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index 8d6db68246f1..db1769a4b617 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -930,6 +930,32 @@ static void rtw_usb_intf_deinit(struct rtw_dev *rtwdev,
|
||||
usb_set_intfdata(intf, NULL);
|
||||
}
|
||||
|
||||
+static int rtw_usb_switch_mode_old(struct rtw_dev *rtwdev)
|
||||
+{
|
||||
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
||||
+ enum usb_device_speed cur_speed = rtwusb->udev->speed;
|
||||
+ u8 hci_opt;
|
||||
+
|
||||
+ if (cur_speed == USB_SPEED_HIGH) {
|
||||
+ hci_opt = rtw_read8(rtwdev, REG_HCI_OPT_CTRL);
|
||||
+
|
||||
+ if ((hci_opt & (BIT(2) | BIT(3))) != BIT(3)) {
|
||||
+ rtw_write8(rtwdev, REG_HCI_OPT_CTRL, 0x8);
|
||||
+ rtw_write8(rtwdev, REG_SYS_SDIO_CTRL, 0x2);
|
||||
+ rtw_write8(rtwdev, REG_ACLK_MON, 0x1);
|
||||
+ rtw_write8(rtwdev, 0x3d, 0x3);
|
||||
+ /* usb disconnect */
|
||||
+ rtw_write8(rtwdev, REG_SYS_PW_CTRL + 1, 0x80);
|
||||
+ return 1;
|
||||
+ }
|
||||
+ } else if (cur_speed == USB_SPEED_SUPER) {
|
||||
+ rtw_write8_clr(rtwdev, REG_SYS_SDIO_CTRL, BIT(1));
|
||||
+ rtw_write8_clr(rtwdev, REG_ACLK_MON, BIT(0));
|
||||
+ }
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
|
||||
{
|
||||
enum usb_device_speed cur_speed;
|
||||
@@ -979,11 +1005,22 @@ static int rtw_usb_switch_mode_new(struct rtw_dev *rtwdev)
|
||||
return 1;
|
||||
}
|
||||
|
||||
+static bool rtw_usb3_chip_old(u8 chip_id)
|
||||
+{
|
||||
+ return chip_id == RTW_CHIP_TYPE_8812A;
|
||||
+}
|
||||
+
|
||||
+static bool rtw_usb3_chip_new(u8 chip_id)
|
||||
+{
|
||||
+ return chip_id == RTW_CHIP_TYPE_8822C ||
|
||||
+ chip_id == RTW_CHIP_TYPE_8822B;
|
||||
+}
|
||||
+
|
||||
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)
|
||||
+ if (!rtw_usb3_chip_new(id) && !rtw_usb3_chip_old(id))
|
||||
return 0;
|
||||
|
||||
if (!rtwdev->efuse.usb_mode_switch) {
|
||||
@@ -998,7 +1035,10 @@ static int rtw_usb_switch_mode(struct rtw_dev *rtwdev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
- return rtw_usb_switch_mode_new(rtwdev);
|
||||
+ if (rtw_usb3_chip_old(id))
|
||||
+ return rtw_usb_switch_mode_old(rtwdev);
|
||||
+ else
|
||||
+ return rtw_usb_switch_mode_new(rtwdev);
|
||||
}
|
||||
|
||||
int rtw_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
--
|
||||
2.43.0
|
||||
|
@ -0,0 +1,70 @@
|
||||
From ce5dea83ee8f945203144fb891fdcb978216e45a Mon Sep 17 00:00:00 2001
|
||||
From: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Date: Thu, 14 Nov 2024 17:48:09 +0200
|
||||
Subject: [PATCH] wifi: rtw88: usb: Enable RX aggregation for 8821au/8812au
|
||||
|
||||
USB RX aggregation improves the RX speed on certain ARM systems, like
|
||||
the NanoPi NEO Core2. With RTL8811AU, before: 30 Mbps, after: 224 Mbps.
|
||||
|
||||
The out-of-tree driver uses aggregation size of 7 in USB 3 mode, but
|
||||
that doesn't work here. rtw88 advertises support for receiving AMSDU
|
||||
in AMPDU, so the AP sends larger frames, up to ~5100 bytes. With a size
|
||||
of 7 RTL8812AU frequently tries to aggregate more frames than will fit
|
||||
in 32768 bytes. Use a size of 6 instead.
|
||||
|
||||
Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
|
||||
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
|
||||
Link: https://patch.msgid.link/63012163-a425-4b15-b830-43f279c06b73@gmail.com
|
||||
---
|
||||
drivers/net/wireless/realtek/rtw88/usb.c | 28 ++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/realtek/rtw88/usb.c b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
index db1769a4b617..be193c7add77 100644
|
||||
--- a/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
+++ b/drivers/net/wireless/realtek/rtw88/usb.c
|
||||
@@ -789,6 +789,30 @@ static void rtw_usb_dynamic_rx_agg_v1(struct rtw_dev *rtwdev, bool enable)
|
||||
rtw_write16(rtwdev, REG_RXDMA_AGG_PG_TH, val16);
|
||||
}
|
||||
|
||||
+static void rtw_usb_dynamic_rx_agg_v2(struct rtw_dev *rtwdev, bool enable)
|
||||
+{
|
||||
+ struct rtw_usb *rtwusb = rtw_get_usb_priv(rtwdev);
|
||||
+ u8 size, timeout;
|
||||
+ u16 val16;
|
||||
+
|
||||
+ if (!enable) {
|
||||
+ size = 0x0;
|
||||
+ timeout = 0x1;
|
||||
+ } else if (rtwusb->udev->speed == USB_SPEED_SUPER) {
|
||||
+ size = 0x6;
|
||||
+ timeout = 0x1a;
|
||||
+ } else {
|
||||
+ size = 0x5;
|
||||
+ timeout = 0x20;
|
||||
+ }
|
||||
+
|
||||
+ 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);
|
||||
+ rtw_write8_set(rtwdev, REG_TXDMA_PQ_MAP, BIT_RXDMA_AGG_EN);
|
||||
+}
|
||||
+
|
||||
static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
{
|
||||
switch (rtwdev->chip->id) {
|
||||
@@ -797,6 +821,10 @@ static void rtw_usb_dynamic_rx_agg(struct rtw_dev *rtwdev, bool enable)
|
||||
case RTW_CHIP_TYPE_8821C:
|
||||
rtw_usb_dynamic_rx_agg_v1(rtwdev, enable);
|
||||
break;
|
||||
+ case RTW_CHIP_TYPE_8821A:
|
||||
+ case RTW_CHIP_TYPE_8812A:
|
||||
+ rtw_usb_dynamic_rx_agg_v2(rtwdev, enable);
|
||||
+ break;
|
||||
case RTW_CHIP_TYPE_8723D:
|
||||
/* Doesn't like aggregation. */
|
||||
break;
|
||||
--
|
||||
2.43.0
|
||||
|
Loading…
x
Reference in New Issue
Block a user