mirror of https://gitee.com/openkylin/linux.git
mwifiex: Add support for NL80211_ATTR_MAX_AP_ASSOC_STA
SD8997 firmware sends TLV_TYPE_MAX_CONN with struct hw_spec_max_conn to inform kernel about maximum number of p2p connections and stations in AP mode. During initialization of SD8997 wifi chip kernel prints warning: mwifiex_sdio mmc0:0001:1: Unknown GET_HW_SPEC TLV type: 0x217 This patch adds support for parsing TLV_TYPE_MAX_CONN (0x217) and sets appropriate cfg80211 member 'max_ap_assoc_sta' from retrieved structure. It allows userspace to retrieve NL80211_ATTR_MAX_AP_ASSOC_STA attribute. Signed-off-by: Pali Rohár <pali@kernel.org> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200521123559.29028-1-pali@kernel.org
This commit is contained in:
parent
86cffb2c0a
commit
982d7287f8
|
@ -4335,6 +4335,11 @@ int mwifiex_register_cfg80211(struct mwifiex_adapter *adapter)
|
|||
wiphy->iface_combinations = &mwifiex_iface_comb_ap_sta;
|
||||
wiphy->n_iface_combinations = 1;
|
||||
|
||||
if (adapter->max_sta_conn > adapter->max_p2p_conn)
|
||||
wiphy->max_ap_assoc_sta = adapter->max_sta_conn;
|
||||
else
|
||||
wiphy->max_ap_assoc_sta = adapter->max_p2p_conn;
|
||||
|
||||
/* Initialize cipher suits */
|
||||
wiphy->cipher_suites = mwifiex_cipher_suites;
|
||||
wiphy->n_cipher_suites = ARRAY_SIZE(mwifiex_cipher_suites);
|
||||
|
|
|
@ -1495,6 +1495,7 @@ int mwifiex_ret_get_hw_spec(struct mwifiex_private *priv,
|
|||
struct mwifiex_adapter *adapter = priv->adapter;
|
||||
struct mwifiex_ie_types_header *tlv;
|
||||
struct hw_spec_api_rev *api_rev;
|
||||
struct hw_spec_max_conn *max_conn;
|
||||
u16 resp_size, api_id;
|
||||
int i, left_len, parsed_len = 0;
|
||||
|
||||
|
@ -1604,6 +1605,17 @@ int mwifiex_ret_get_hw_spec(struct mwifiex_private *priv,
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case TLV_TYPE_MAX_CONN:
|
||||
max_conn = (struct hw_spec_max_conn *)tlv;
|
||||
adapter->max_p2p_conn = max_conn->max_p2p_conn;
|
||||
adapter->max_sta_conn = max_conn->max_sta_conn;
|
||||
mwifiex_dbg(adapter, INFO,
|
||||
"max p2p connections: %u\n",
|
||||
adapter->max_p2p_conn);
|
||||
mwifiex_dbg(adapter, INFO,
|
||||
"max sta connections: %u\n",
|
||||
adapter->max_sta_conn);
|
||||
break;
|
||||
default:
|
||||
mwifiex_dbg(adapter, FATAL,
|
||||
"Unknown GET_HW_SPEC TLV type: %#x\n",
|
||||
|
|
|
@ -220,6 +220,7 @@ enum MWIFIEX_802_11_PRIVACY_FILTER {
|
|||
#define TLV_TYPE_BSS_MODE (PROPRIETARY_TLV_BASE_ID + 206)
|
||||
#define TLV_TYPE_RANDOM_MAC (PROPRIETARY_TLV_BASE_ID + 236)
|
||||
#define TLV_TYPE_CHAN_ATTR_CFG (PROPRIETARY_TLV_BASE_ID + 237)
|
||||
#define TLV_TYPE_MAX_CONN (PROPRIETARY_TLV_BASE_ID + 279)
|
||||
|
||||
#define MWIFIEX_TX_DATA_BUF_SIZE_2K 2048
|
||||
|
||||
|
@ -2388,4 +2389,11 @@ struct mwifiex_opt_sleep_confirm {
|
|||
__le16 action;
|
||||
__le16 resp_ctrl;
|
||||
} __packed;
|
||||
|
||||
struct hw_spec_max_conn {
|
||||
struct mwifiex_ie_types_header header;
|
||||
u8 max_p2p_conn;
|
||||
u8 max_sta_conn;
|
||||
} __packed;
|
||||
|
||||
#endif /* !_MWIFIEX_FW_H_ */
|
||||
|
|
|
@ -1022,6 +1022,7 @@ struct mwifiex_adapter {
|
|||
bool ext_scan;
|
||||
u8 fw_api_ver;
|
||||
u8 key_api_major_ver, key_api_minor_ver;
|
||||
u8 max_p2p_conn, max_sta_conn;
|
||||
struct memory_type_mapping *mem_type_mapping_tbl;
|
||||
u8 num_mem_types;
|
||||
bool scan_chan_gap_enabled;
|
||||
|
|
Loading…
Reference in New Issue