From cde9070d9970eef1f7ec2360586c802a16230ad8 Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Fri, 10 May 2024 07:43:50 +0000 Subject: [PATCH] rtl88x2CE_WiFi_linux driver --- kernel/drivers/net/wireless/rockchip_wlan/rtl8723cs/hal/hal_btcoex.c | 86 ++++++++++++++++++++++++++++++++++-------- 1 files changed, 69 insertions(+), 17 deletions(-) diff --git a/kernel/drivers/net/wireless/rockchip_wlan/rtl8723cs/hal/hal_btcoex.c b/kernel/drivers/net/wireless/rockchip_wlan/rtl8723cs/hal/hal_btcoex.c index 3625288..1a5c88a 100644 --- a/kernel/drivers/net/wireless/rockchip_wlan/rtl8723cs/hal/hal_btcoex.c +++ b/kernel/drivers/net/wireless/rockchip_wlan/rtl8723cs/hal/hal_btcoex.c @@ -2329,7 +2329,23 @@ } } -u32 halbtcoutsrc_Read_scbd(void *pBtcContext, u32* score_board_val) +u16 halbtcoutsrc_Read_scbd(void *pBtcContext, u16* score_board_val) +{ + PBTC_COEXIST btc = (PBTC_COEXIST)pBtcContext; + struct btc_coex_sta *coex_sta = &btc->coex_sta; + const struct btc_chip_para *chip_para = btc->chip_para; + + if (!chip_para->scbd_support) + return 0; + + *score_board_val = (btc->btc_read_2byte(btc, chip_para->scbd_reg)) + & 0x7fff; + coex_sta->score_board_BW = *score_board_val; + + return coex_sta->score_board_BW; +} + +u32 halbtcoutsrc_Read_scbd_32bit(void *pBtcContext, u32* score_board_val) { PBTC_COEXIST btc = (PBTC_COEXIST)pBtcContext; struct btc_coex_sta *coex_sta = &btc->coex_sta; @@ -2340,18 +2356,17 @@ *score_board_val = (btc->btc_read_4byte(btc, chip_para->scbd_reg)) & 0x7fffffff; - coex_sta->score_board_BW = *score_board_val; + coex_sta->score_board_BW_32bit = *score_board_val; - return coex_sta->score_board_BW; + return coex_sta->score_board_BW_32bit; } -void halbtcoutsrc_Write_scbd(void *pBtcContext, u32 bitpos, u8 state) +void halbtcoutsrc_Write_scbd(void *pBtcContext, u16 bitpos, u8 state) { PBTC_COEXIST btc = (PBTC_COEXIST)pBtcContext; struct btc_coex_sta *coex_sta = &btc->coex_sta; const struct btc_chip_para *chip_para = btc->chip_para; - u32 val = 0x2; - u8* btc_dbg_buf = &gl_btc_trace_buf[0]; + u16 val = 0x2; if (!chip_para->scbd_support) return; @@ -2375,19 +2390,52 @@ if (val != coex_sta->score_board_WB) { coex_sta->score_board_WB = val; + val = val | 0x8000; - if(chip_para->scbd_bit_num == BTC_SCBD_32_BIT) - val = val | 0x80000000; - else - val = val | 0x8000; - - btc->btc_write_4byte(btc, chip_para->scbd_reg, val); - - BTC_SPRINTF(btc_dbg_buf, BT_TMP_BUF_SIZE, - "[BTCoex], write scoreboard 0x%x\n", val); + btc->btc_write_2byte(btc, chip_para->scbd_reg, val); + + RTW_DBG("[BTC], write scoreboard 0x%x\n", val); } else { - BTC_SPRINTF(btc_dbg_buf, BT_TMP_BUF_SIZE, - "[BTCoex], %s: return for nochange\n", __func__); + RTW_DBG("[BTC], return for nochange\n"); + } +} + +void halbtcoutsrc_Write_scbd_32bit(void *pBtcContext, u32 bitpos, u8 state) +{ + PBTC_COEXIST btc = (PBTC_COEXIST)pBtcContext; + struct btc_coex_sta *coex_sta = &btc->coex_sta; + const struct btc_chip_para *chip_para = btc->chip_para; + u32 val = 0x2; + + if (!chip_para->scbd_support) + return; + + val = val | coex_sta->score_board_WB; + + /* for 8822b, Scoreboard[10]: 0: CQDDR off, 1: CQDDR on + * for 8822c, Scoreboard[10]: 0: CQDDR on, 1:CQDDR fix 2M + */ + if (!btc->chip_para->new_scbd10_def && (bitpos & BTC_SCBD_FIX2M)) { + if (state) + val = val & (~BTC_SCBD_FIX2M); + else + val = val | BTC_SCBD_FIX2M; + } else { + if (state) + val = val | bitpos; + else + val = val & (~bitpos); + } + + if (val != coex_sta->score_board_WB_32bit) { + coex_sta->score_board_WB_32bit = val; + val = val | 0x80000000; + + btc->btc_write_4byte(btc, chip_para->scbd_reg, val); + + RTW_DBG("[BTC], write scoreboard 0x%x\n", val); + } else { + RTW_DBG("[BTC], return for nochange\n"); } } @@ -3211,11 +3259,13 @@ pBtCoexist->chip_para = &btc_chip_para_8192f; } #endif +#ifdef PLATFORM_LINUX #ifdef CONFIG_RTL8723F else if (IS_HARDWARE_TYPE_8723F(padapter)) { pBtCoexist->chip_type = BTC_CHIP_RTL8723F; pBtCoexist->chip_para = &btc_chip_para_8723f; } +#endif #endif else { pBtCoexist->chip_type = BTC_CHIP_UNDEF; @@ -3291,7 +3341,9 @@ pBtCoexist->btc_write_linderct = halbtcoutsrc_WriteLIndirectReg; pBtCoexist->btc_read_scbd = halbtcoutsrc_Read_scbd; + pBtCoexist->btc_read_scbd_32bit = halbtcoutsrc_Read_scbd_32bit; pBtCoexist->btc_write_scbd = halbtcoutsrc_Write_scbd; + pBtCoexist->btc_write_scbd_32bit = halbtcoutsrc_Write_scbd_32bit; pBtCoexist->btc_set_bb_reg = halbtcoutsrc_SetBbReg; pBtCoexist->btc_get_bb_reg = halbtcoutsrc_GetBbReg; -- Gitblit v1.6.2