@@ -1087,6 +1087,8 @@ int qtnf_wiphy_register(struct qtnf_hw_info *hw_info, struct qtnf_wmac *mac)
wiphy->retry_short = macinfo->sretry_limit;
wiphy->retry_long = macinfo->lretry_limit;
wiphy->coverage_class = macinfo->coverage_class;
+ wiphy->ampdu_enabled = macinfo->ampdu_enabled;
+ wiphy->amsdu_enabled = macinfo->amsdu_enabled;
wiphy->max_scan_ssids =
(hw_info->max_scan_ssids) ? hw_info->max_scan_ssids : 1;
@@ -1531,6 +1531,7 @@ static int qtnf_cmd_resp_proc_phy_params(struct qtnf_wmac *mac,
struct qlink_tlv_frag_rts_thr *phy_thr;
struct qlink_tlv_rlimit *limit;
struct qlink_tlv_cclass *class;
+ struct qlink_tlv_aggr *aggr;
u16 tlv_type;
u16 tlv_value_len;
size_t tlv_full_len;
@@ -1571,6 +1572,14 @@ static int qtnf_cmd_resp_proc_phy_params(struct qtnf_wmac *mac,
class = (void *)tlv;
mac_info->coverage_class = class->cclass;
break;
+ case QTN_TLV_ID_AMPDU_ENABLED:
+ aggr = (void *)tlv;
+ mac_info->ampdu_enabled = aggr->aggr;
+ break;
+ case QTN_TLV_ID_AMSDU_ENABLED:
+ aggr = (void *)tlv;
+ mac_info->amsdu_enabled = aggr->aggr;
+ break;
default:
pr_err("MAC%u: Unknown TLV type: %#x\n", mac->macid,
le16_to_cpu(tlv->type));
@@ -1814,6 +1823,14 @@ int qtnf_cmd_send_update_phy_params(struct qtnf_wmac *mac, u32 changed)
qtnf_cmd_skb_put_tlv_u8(cmd_skb, QTN_TLV_ID_COVERAGE_CLASS,
wiphy->coverage_class);
+ if (changed & WIPHY_PARAM_AMPDU_ENABLED)
+ qtnf_cmd_skb_put_tlv_u8(cmd_skb, QTN_TLV_ID_AMPDU_ENABLED,
+ wiphy->ampdu_enabled);
+
+ if (changed & WIPHY_PARAM_AMSDU_ENABLED)
+ qtnf_cmd_skb_put_tlv_u8(cmd_skb, QTN_TLV_ID_AMSDU_ENABLED,
+ wiphy->amsdu_enabled);
+
ret = qtnf_cmd_send(mac->bus, cmd_skb);
if (ret)
goto out;
@@ -94,6 +94,8 @@ struct qtnf_mac_info {
u8 lretry_limit;
u8 sretry_limit;
u8 coverage_class;
+ u8 amsdu_enabled;
+ u8 ampdu_enabled;
u8 radar_detect_widths;
u32 max_acl_mac_addrs;
struct ieee80211_ht_cap ht_cap_mod_mask;
@@ -1154,6 +1154,8 @@ enum qlink_tlv_id {
QTN_TLV_ID_WOWLAN_PATTERN = 0x0411,
QTN_TLV_ID_SCAN_FLUSH = 0x0412,
QTN_TLV_ID_SCAN_DWELL = 0x0413,
+ QTN_TLV_ID_AMPDU_ENABLED = 0x0414,
+ QTN_TLV_ID_AMSDU_ENABLED = 0x0415,
};
struct qlink_tlv_hdr {
@@ -1195,6 +1197,11 @@ struct qlink_tlv_cclass {
u8 cclass;
} __packed;
+struct qlink_tlv_aggr {
+ struct qlink_tlv_hdr hdr;
+ u8 aggr;
+} __packed;
+
/**
* enum qlink_reg_rule_flags - regulatory rule flags
*
Add support for basic AMPDU/AMSDU aggregation control: - report initial aggregation configuration to cfg80211 core - pass AMPDU/AMSDU aggregation changes to wireless card using set_wiphy_params cfg80211 callback Signed-off-by: Sergey Matyukevich <sergey.matyukevich.os@quantenna.com> --- drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 2 ++ drivers/net/wireless/quantenna/qtnfmac/commands.c | 17 +++++++++++++++++ drivers/net/wireless/quantenna/qtnfmac/core.h | 2 ++ drivers/net/wireless/quantenna/qtnfmac/qlink.h | 7 +++++++ 4 files changed, 28 insertions(+)