wifi: rtw89: fw: extend JOIN H2C command to support WiFi 7 chips
WiFi 7 chips will support MLD, so there are more fields about that. But currently we don't support MLD yet, just define fields and bits by this patch ahead, and fill STA_TYPE only. Signed-off-by: Ping-Ke Shih <pkshih@realtek.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://msgid.link/20240115033742.16372-9-pkshih@realtek.com
This commit is contained in:
@@ -2904,17 +2904,51 @@ fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static enum rtw89_fw_sta_type
|
||||
rtw89_fw_get_sta_type(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
|
||||
struct rtw89_sta *rtwsta)
|
||||
{
|
||||
struct ieee80211_sta *sta = rtwsta_to_sta_safe(rtwsta);
|
||||
struct ieee80211_vif *vif = rtwvif_to_vif(rtwvif);
|
||||
|
||||
if (!sta)
|
||||
goto by_vif;
|
||||
|
||||
if (sta->deflink.eht_cap.has_eht)
|
||||
return RTW89_FW_BE_STA;
|
||||
else if (sta->deflink.he_cap.has_he)
|
||||
return RTW89_FW_AX_STA;
|
||||
else
|
||||
return RTW89_FW_N_AC_STA;
|
||||
|
||||
by_vif:
|
||||
if (vif->bss_conf.eht_support)
|
||||
return RTW89_FW_BE_STA;
|
||||
else if (vif->bss_conf.he_support)
|
||||
return RTW89_FW_AX_STA;
|
||||
else
|
||||
return RTW89_FW_N_AC_STA;
|
||||
}
|
||||
|
||||
int rtw89_fw_h2c_join_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
|
||||
struct rtw89_sta *rtwsta, bool dis_conn)
|
||||
{
|
||||
struct sk_buff *skb;
|
||||
u8 mac_id = rtwsta ? rtwsta->mac_id : rtwvif->mac_id;
|
||||
u8 self_role = rtwvif->self_role;
|
||||
enum rtw89_fw_sta_type sta_type;
|
||||
u8 net_type = rtwvif->net_type;
|
||||
struct rtw89_h2c_join_v1 *h2c_v1;
|
||||
struct rtw89_h2c_join *h2c;
|
||||
u32 len = sizeof(*h2c);
|
||||
bool format_v1 = false;
|
||||
int ret;
|
||||
|
||||
if (rtwdev->chip->chip_gen == RTW89_CHIP_BE) {
|
||||
len = sizeof(*h2c_v1);
|
||||
format_v1 = true;
|
||||
}
|
||||
|
||||
if (net_type == RTW89_NET_TYPE_AP_MODE && rtwsta) {
|
||||
self_role = RTW89_SELF_ROLE_AP_CLIENT;
|
||||
net_type = dis_conn ? RTW89_NET_TYPE_NO_LINK : net_type;
|
||||
@@ -2942,6 +2976,17 @@ int rtw89_fw_h2c_join_info(struct rtw89_dev *rtwdev, struct rtw89_vif *rtwvif,
|
||||
le32_encode_bits(rtwvif->wifi_role, RTW89_H2C_JOININFO_W0_WIFI_ROLE) |
|
||||
le32_encode_bits(self_role, RTW89_H2C_JOININFO_W0_SELF_ROLE);
|
||||
|
||||
if (!format_v1)
|
||||
goto done;
|
||||
|
||||
h2c_v1 = (struct rtw89_h2c_join_v1 *)skb->data;
|
||||
|
||||
sta_type = rtw89_fw_get_sta_type(rtwdev, rtwvif, rtwsta);
|
||||
|
||||
h2c_v1->w1 = le32_encode_bits(sta_type, RTW89_H2C_JOININFO_W1_STA_TYPE);
|
||||
h2c_v1->w2 = 0;
|
||||
|
||||
done:
|
||||
rtw89_h2c_pkt_set_hdr(rtwdev, skb, FWCMD_TYPE_H2C,
|
||||
H2C_CAT_MAC, H2C_CL_MAC_MEDIA_RPT,
|
||||
H2C_FUNC_MAC_JOININFO, 0, 1,
|
||||
|
||||
@@ -1747,10 +1747,22 @@ static inline void SET_FWROLE_MAINTAIN_WIFI_ROLE(void *h2c, u32 val)
|
||||
le32p_replace_bits((__le32 *)h2c, val, GENMASK(16, 13));
|
||||
}
|
||||
|
||||
enum rtw89_fw_sta_type { /* value of RTW89_H2C_JOININFO_W1_STA_TYPE */
|
||||
RTW89_FW_N_AC_STA = 0,
|
||||
RTW89_FW_AX_STA = 1,
|
||||
RTW89_FW_BE_STA = 2,
|
||||
};
|
||||
|
||||
struct rtw89_h2c_join {
|
||||
__le32 w0;
|
||||
} __packed;
|
||||
|
||||
struct rtw89_h2c_join_v1 {
|
||||
__le32 w0;
|
||||
__le32 w1;
|
||||
__le32 w2;
|
||||
} __packed;
|
||||
|
||||
#define RTW89_H2C_JOININFO_W0_MACID GENMASK(7, 0)
|
||||
#define RTW89_H2C_JOININFO_W0_OP BIT(8)
|
||||
#define RTW89_H2C_JOININFO_W0_BAND BIT(9)
|
||||
@@ -1764,6 +1776,17 @@ struct rtw89_h2c_join {
|
||||
#define RTW89_H2C_JOININFO_W0_NET_TYPE GENMASK(25, 24)
|
||||
#define RTW89_H2C_JOININFO_W0_WIFI_ROLE GENMASK(29, 26)
|
||||
#define RTW89_H2C_JOININFO_W0_SELF_ROLE GENMASK(31, 30)
|
||||
#define RTW89_H2C_JOININFO_W1_STA_TYPE GENMASK(2, 0)
|
||||
#define RTW89_H2C_JOININFO_W1_IS_MLD BIT(3)
|
||||
#define RTW89_H2C_JOININFO_W1_MAIN_MACID GENMASK(11, 4)
|
||||
#define RTW89_H2C_JOININFO_W1_MLO_MODE BIT(12)
|
||||
#define RTW89_H2C_JOININFO_W1_EMLSR_CAB BIT(13)
|
||||
#define RTW89_H2C_JOININFO_W1_NSTR_EN BIT(14)
|
||||
#define RTW89_H2C_JOININFO_W1_INIT_PWR_STATE BIT(15)
|
||||
#define RTW89_H2C_JOININFO_W1_EMLSR_PADDING GENMASK(18, 16)
|
||||
#define RTW89_H2C_JOININFO_W1_EMLSR_TRANS_DELAY GENMASK(21, 19)
|
||||
#define RTW89_H2C_JOININFO_W2_MACID_EXT GENMASK(7, 0)
|
||||
#define RTW89_H2C_JOININFO_W2_MAIN_MACID_EXT GENMASK(15, 8)
|
||||
|
||||
struct rtw89_h2c_notify_dbcc {
|
||||
__le32 w0;
|
||||
|
||||
Reference in New Issue
Block a user