Commit bc5db734 authored by Igor Mitsyanko's avatar Igor Mitsyanko Committed by Kalle Valo

qtnfmac: drop QTN_TLV_ID_NUM_IFACE_COMB TLV type

Information about interface combinations is now available in a fixed
portion of struct qlink_resp_get_mac_info. Use that information to
get interface combinations. TLV type QTN_TLV_ID_NUM_IFACE_COMB is
not needed anymore and can be dropped.
Signed-off-by: default avatarIgor Mitsyanko <igor.mitsyanko.os@quantenna.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent e70cf22b
...@@ -1023,10 +1023,9 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac, ...@@ -1023,10 +1023,9 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac,
size_t tlv_buf_size) size_t tlv_buf_size)
{ {
const u8 *tlv_buf = resp->var_info; const u8 *tlv_buf = resp->var_info;
struct ieee80211_iface_combination *comb = NULL; struct ieee80211_iface_combination *comb = mac->macinfo.if_comb;
size_t n_comb = 0; size_t n_comb = 0;
struct ieee80211_iface_limit *limits; struct ieee80211_iface_limit *limits;
const struct qlink_iface_comb_num *comb_num;
const struct qlink_iface_limit_record *rec; const struct qlink_iface_limit_record *rec;
const struct qlink_iface_limit *lim; const struct qlink_iface_limit *lim;
const struct qlink_wowlan_capab_data *wowlan; const struct qlink_wowlan_capab_data *wowlan;
...@@ -1084,32 +1083,6 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac, ...@@ -1084,32 +1083,6 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac,
} }
switch (tlv_type) { switch (tlv_type) {
case QTN_TLV_ID_NUM_IFACE_COMB:
if (tlv_value_len != sizeof(*comb_num))
return -EINVAL;
comb_num = (void *)tlv->val;
/* free earlier iface comb memory */
qtnf_mac_iface_comb_free(mac);
mac->macinfo.n_if_comb =
le32_to_cpu(comb_num->iface_comb_num);
mac->macinfo.if_comb =
kcalloc(mac->macinfo.n_if_comb,
sizeof(*mac->macinfo.if_comb),
GFP_KERNEL);
if (!mac->macinfo.if_comb)
return -ENOMEM;
comb = mac->macinfo.if_comb;
pr_debug("MAC%u: %zu iface combinations\n",
mac->macid, mac->macinfo.n_if_comb);
break;
case QTN_TLV_ID_IFACE_LIMIT: case QTN_TLV_ID_IFACE_LIMIT:
if (unlikely(!comb)) { if (unlikely(!comb)) {
pr_warn("MAC%u: no combinations advertised\n", pr_warn("MAC%u: no combinations advertised\n",
...@@ -1266,13 +1239,15 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac, ...@@ -1266,13 +1239,15 @@ qtnf_parse_variable_mac_info(struct qtnf_wmac *mac,
return 0; return 0;
} }
static void static int
qtnf_cmd_resp_proc_mac_info(struct qtnf_wmac *mac, qtnf_cmd_resp_proc_mac_info(struct qtnf_wmac *mac,
const struct qlink_resp_get_mac_info *resp_info) const struct qlink_resp_get_mac_info *resp_info)
{ {
struct qtnf_mac_info *mac_info; struct qtnf_mac_info *mac_info;
struct qtnf_vif *vif; struct qtnf_vif *vif;
qtnf_mac_iface_comb_free(mac);
mac_info = &mac->macinfo; mac_info = &mac->macinfo;
mac_info->bands_cap = resp_info->bands_cap; mac_info->bands_cap = resp_info->bands_cap;
...@@ -1302,6 +1277,16 @@ qtnf_cmd_resp_proc_mac_info(struct qtnf_wmac *mac, ...@@ -1302,6 +1277,16 @@ qtnf_cmd_resp_proc_mac_info(struct qtnf_wmac *mac,
sizeof(mac_info->ht_cap_mod_mask)); sizeof(mac_info->ht_cap_mod_mask));
memcpy(&mac_info->vht_cap_mod_mask, &resp_info->vht_cap_mod_mask, memcpy(&mac_info->vht_cap_mod_mask, &resp_info->vht_cap_mod_mask,
sizeof(mac_info->vht_cap_mod_mask)); sizeof(mac_info->vht_cap_mod_mask));
mac_info->n_if_comb = resp_info->n_iface_combinations;
mac_info->if_comb = kcalloc(mac->macinfo.n_if_comb,
sizeof(*mac->macinfo.if_comb),
GFP_KERNEL);
if (!mac->macinfo.if_comb)
return -ENOMEM;
return 0;
} }
static void qtnf_cmd_resp_band_fill_htcap(const u8 *info, static void qtnf_cmd_resp_band_fill_htcap(const u8 *info,
...@@ -1657,7 +1642,10 @@ int qtnf_cmd_get_mac_info(struct qtnf_wmac *mac) ...@@ -1657,7 +1642,10 @@ int qtnf_cmd_get_mac_info(struct qtnf_wmac *mac)
goto out; goto out;
resp = (const struct qlink_resp_get_mac_info *)resp_skb->data; resp = (const struct qlink_resp_get_mac_info *)resp_skb->data;
qtnf_cmd_resp_proc_mac_info(mac, resp); ret = qtnf_cmd_resp_proc_mac_info(mac, resp);
if (ret)
goto out;
ret = qtnf_parse_variable_mac_info(mac, resp, var_data_len); ret = qtnf_parse_variable_mac_info(mac, resp, var_data_len);
out: out:
......
...@@ -1399,7 +1399,6 @@ enum qlink_tlv_id { ...@@ -1399,7 +1399,6 @@ enum qlink_tlv_id {
QTN_TLV_ID_STA_STATS = 0x0212, QTN_TLV_ID_STA_STATS = 0x0212,
QTN_TLV_ID_COVERAGE_CLASS = 0x0213, QTN_TLV_ID_COVERAGE_CLASS = 0x0213,
QTN_TLV_ID_IFACE_LIMIT = 0x0214, QTN_TLV_ID_IFACE_LIMIT = 0x0214,
QTN_TLV_ID_NUM_IFACE_COMB = 0x0215,
QTN_TLV_ID_CHANNEL_STATS = 0x0216, QTN_TLV_ID_CHANNEL_STATS = 0x0216,
QTN_TLV_ID_KEY = 0x0302, QTN_TLV_ID_KEY = 0x0302,
QTN_TLV_ID_SEQ = 0x0303, QTN_TLV_ID_SEQ = 0x0303,
...@@ -1430,10 +1429,6 @@ struct qlink_tlv_hdr { ...@@ -1430,10 +1429,6 @@ struct qlink_tlv_hdr {
u8 val[0]; u8 val[0];
} __packed; } __packed;
struct qlink_iface_comb_num {
__le32 iface_comb_num;
} __packed;
struct qlink_iface_limit { struct qlink_iface_limit {
__le16 max_num; __le16 max_num;
__le16 type; __le16 type;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment