]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: rtw89: mac: define registers of agg_limit and txcnt_limit to share common flow
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 17 Feb 2025 06:30:52 +0000 (14:30 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 21 Feb 2025 01:40:13 +0000 (09:40 +0800)
The agg_limit and txcnt_limit are used by BT-coexistence to reduce
WiFi TX time at once to share time with Bluetooth devices. Since
these registers address are different from WiFi 6 and 7 chips, define
them accordingly.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20250217063053.38936-2-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/mac.c
drivers/net/wireless/realtek/rtw89/mac.h
drivers/net/wireless/realtek/rtw89/mac_be.c
drivers/net/wireless/realtek/rtw89/reg.h

index 3f38f8ed68760ae19e2dec18a5eb0c525ccb6b9e..0b2e4ad52774621b31ce009f76f3efdd65e7ea5f 100644 (file)
@@ -6433,6 +6433,7 @@ __rtw89_mac_set_tx_time(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_
                        u32 tx_time)
 {
 #define MAC_AX_DFLT_TX_TIME 5280
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx;
        u32 max_tx_time = tx_time == 0 ? MAC_AX_DFLT_TX_TIME : tx_time;
        u32 reg;
@@ -6448,8 +6449,8 @@ __rtw89_mac_set_tx_time(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_
                        return ret;
                }
 
-               reg = rtw89_mac_reg_by_idx(rtwdev, R_AX_AMPDU_AGG_LIMIT, mac_idx);
-               rtw89_write32_mask(rtwdev, reg, B_AX_AMPDU_MAX_TIME_MASK,
+               reg = rtw89_mac_reg_by_idx(rtwdev, mac->agg_limit.addr, mac_idx);
+               rtw89_write32_mask(rtwdev, reg, mac->agg_limit.mask,
                                   max_tx_time >> 5);
        }
 
@@ -6475,6 +6476,7 @@ int rtw89_mac_set_tx_time(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwst
 int rtw89_mac_get_tx_time(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwsta_link,
                          u32 *tx_time)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx;
        u32 reg;
        int ret = 0;
@@ -6488,8 +6490,8 @@ int rtw89_mac_get_tx_time(struct rtw89_dev *rtwdev, struct rtw89_sta_link *rtwst
                        return ret;
                }
 
-               reg = rtw89_mac_reg_by_idx(rtwdev, R_AX_AMPDU_AGG_LIMIT, mac_idx);
-               *tx_time = rtw89_read32_mask(rtwdev, reg, B_AX_AMPDU_MAX_TIME_MASK) << 5;
+               reg = rtw89_mac_reg_by_idx(rtwdev, mac->agg_limit.addr, mac_idx);
+               *tx_time = rtw89_read32_mask(rtwdev, reg, mac->agg_limit.mask) << 5;
        }
 
        return ret;
@@ -6517,6 +6519,7 @@ int rtw89_mac_set_tx_retry_limit(struct rtw89_dev *rtwdev,
 int rtw89_mac_get_tx_retry_limit(struct rtw89_dev *rtwdev,
                                 struct rtw89_sta_link *rtwsta_link, u8 *tx_retry)
 {
+       const struct rtw89_mac_gen_def *mac = rtwdev->chip->mac_def;
        u8 mac_idx = rtwsta_link->rtwvif_link->mac_idx;
        u32 reg;
        int ret = 0;
@@ -6530,8 +6533,8 @@ int rtw89_mac_get_tx_retry_limit(struct rtw89_dev *rtwdev,
                        return ret;
                }
 
-               reg = rtw89_mac_reg_by_idx(rtwdev, R_AX_TXCNT, mac_idx);
-               *tx_retry = rtw89_read32_mask(rtwdev, reg, B_AX_L_TXCNT_LMT_MASK);
+               reg = rtw89_mac_reg_by_idx(rtwdev, mac->txcnt_limit.addr, mac_idx);
+               *tx_retry = rtw89_read32_mask(rtwdev, reg, mac->txcnt_limit.mask);
        }
 
        return ret;
@@ -6809,6 +6812,8 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_ax = {
                .mask = B_AX_RXTRIG_RU26_DIS,
        },
        .wow_ctrl = {.addr = R_AX_WOW_CTRL, .mask = B_AX_WOW_WOWEN,},
+       .agg_limit = {.addr = R_AX_AMPDU_AGG_LIMIT, .mask = B_AX_AMPDU_MAX_TIME_MASK,},
+       .txcnt_limit = {.addr = R_AX_TXCNT, .mask = B_AX_L_TXCNT_LMT_MASK,},
 
        .check_mac_en = rtw89_mac_check_mac_en_ax,
        .sys_init = sys_init_ax,
index 6389f54264e5a063c73b04539037ec11015155b2..4d5a06a2fe9b7504bfdcf74ef93928eaf71c9c29 100644 (file)
@@ -964,6 +964,8 @@ struct rtw89_mac_gen_def {
        struct rtw89_reg_def bfee_ctrl;
        struct rtw89_reg_def narrow_bw_ru_dis;
        struct rtw89_reg_def wow_ctrl;
+       struct rtw89_reg_def agg_limit;
+       struct rtw89_reg_def txcnt_limit;
 
        int (*check_mac_en)(struct rtw89_dev *rtwdev, u8 band,
                            enum rtw89_mac_hwmod_sel sel);
index 16ee378c54187ed01c7b9e30f2a0b41b53930c1e..dce0a4b01440ea2564b521a5d2d0387ce992214b 100644 (file)
@@ -2585,6 +2585,8 @@ const struct rtw89_mac_gen_def rtw89_mac_gen_be = {
                .mask = B_BE_RXTRIG_RU26_DIS,
        },
        .wow_ctrl = {.addr = R_BE_WOW_CTRL, .mask = B_BE_WOW_WOWEN,},
+       .agg_limit = {.addr = R_BE_AMPDU_AGG_LIMIT, .mask = B_BE_AMPDU_MAX_TIME_MASK,},
+       .txcnt_limit = {.addr = R_BE_TXCNT, .mask = B_BE_L_TXCNT_LMT_MASK,},
 
        .check_mac_en = rtw89_mac_check_mac_en_be,
        .sys_init = sys_init_be,
index c992835d4b63cc8b00bb7e53e2291363b5dc0b43..ec06f5bd0fab24da3586f48de5c41aa41f38f95c 100644 (file)
 #define B_BE_RTS_LIMIT_IN_OFDM6 BIT(1)
 #define B_BE_CHECK_CCK_EN BIT(0)
 
+#define R_BE_TXCNT 0x1082C
+#define R_BE_TXCNT_C1 0x1482C
+#define B_BE_ADD_TXCNT_BY BIT(31)
+#define B_BE_TOTAL_TC_OPT BIT(30)
+#define B_BE_S_TXCNT_LMT_MASK GENMASK(29, 24)
+#define B_BE_L_TXCNT_LMT_MASK GENMASK(21, 16)
+
 #define R_BE_MBSSID_DROP_0 0x1083C
 #define R_BE_MBSSID_DROP_0_C1 0x1483C
 #define B_BE_GI_LTF_FB_SEL BIT(30)