Commit 982d7287 authored by Pali Rohár's avatar Pali Rohár Committed by Kalle Valo
Browse files

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: default avatarPali Rohár <pali@kernel.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200521123559.29028-1-pali@kernel.org
parent 86cffb2c
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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);
+12 −0
Original line number Diff line number Diff line
@@ -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",
+8 −0
Original line number Diff line number Diff line
@@ -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_ */
+1 −0
Original line number Diff line number Diff line
@@ -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;