From patchwork Sat Feb 28 10:18:09 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: SenthilKumar Jegadeesan X-Patchwork-Id: 5905361 Return-Path: X-Original-To: patchwork-ath10k@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 31F0DBF440 for ; Sat, 28 Feb 2015 10:21:01 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id CAD86203AD for ; Sat, 28 Feb 2015 10:20:59 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.9]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5E38B20373 for ; Sat, 28 Feb 2015 10:20:58 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.80.1 #2 (Red Hat Linux)) id 1YReVr-0004U3-2p; Sat, 28 Feb 2015 10:20:47 +0000 Received: from wolverine02.qualcomm.com ([199.106.114.251]) by bombadil.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1YReVo-0004Nq-Ax for ath10k@lists.infradead.org; Sat, 28 Feb 2015 10:20:45 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=qti.qualcomm.com; i=@qti.qualcomm.com; q=dns/txt; s=qcdkim; t=1425118844; x=1456654844; h=from:to:cc:subject:date:message-id:mime-version; bh=WMnGvL29nyhybA4Mw/v6YGQ5U2L6uZB808HxdtqRGQM=; b=jPc1xuAnJWonw/S+Z4Ha1bld/M7yi9RmbAvLKU8WnBbeeRZMsotlpSJf YN2305b3PD6vRHrcQe0sDWmOrOzH3raIKAv7KZ7bNxqM//l5mZcD2Fbj9 h1OAK8JAKrUCqQhK70jUMe2D+1U6FngvB2kO4nNHQC3VCR2Vm9/UGKAFn I=; X-IronPort-AV: E=McAfee;i="5600,1067,7725"; a="197646606" Received: from ironmsg02-lv.qualcomm.com ([10.47.202.183]) by wolverine02.qualcomm.com with ESMTP; 28 Feb 2015 02:18:30 -0800 X-IronPort-AV: E=Sophos;i="5.09,667,1418112000"; d="scan'208";a="31873700" Received: from nasanexm01c.na.qualcomm.com ([10.85.0.83]) by ironmsg02-lv.qualcomm.com with ESMTP/TLS/RC4-SHA; 28 Feb 2015 02:18:29 -0800 Received: from aphydexm01a.ap.qualcomm.com (10.252.127.10) by NASANEXM01C.na.qualcomm.com (10.85.0.83) with Microsoft SMTP Server (TLS) id 15.0.995.29; Sat, 28 Feb 2015 02:18:28 -0800 Received: from localhost (10.80.80.8) by aphydexm01a.ap.qualcomm.com (10.252.127.10) with Microsoft SMTP Server (TLS) id 15.0.995.29; Sat, 28 Feb 2015 15:48:21 +0530 From: SenthilKumar Jegadeesan To: Subject: [PATCH] ath10k: Enable encrytion of ADDBA request in PMF configuration Date: Sat, 28 Feb 2015 15:48:09 +0530 Message-ID: <1425118689-32553-1-git-send-email-sjegadee@qti.qualcomm.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: NASANEXM01E.na.qualcomm.com (10.85.0.31) To aphydexm01a.ap.qualcomm.com (10.252.127.10) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20150228_022044_437583_4741EF07 X-CRM114-Status: GOOD ( 10.56 ) X-Spam-Score: -5.1 (-----) Cc: linux-wireless@vger.kernel.org, SenthilKumar Jegadeesan X-BeenThere: ath10k@lists.infradead.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "ath10k" Errors-To: ath10k-bounces+patchwork-ath10k=patchwork.kernel.org@lists.infradead.org X-Spam-Status: No, score=-4.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In HT mode, firmware is not encrypting ADDBA request as PMF configuration is not set in peer flags during association. Set peer flags for MFP enabled station in ath10k driver. Implemented abstraction layer for peer flags. This change depends on mac80211 patch "[PATCH] mac80211: send station PMF configuration to driver". Signed-off-by: SenthilKumar Jegadeesan --- 1.9.1 diff --git a/drivers/net/wireless/ath/ath10k/core.h b/drivers/net/wireless/ath/ath10k/core.h index 7cba781..22c4c43 100644 --- a/drivers/net/wireless/ath/ath10k/core.h +++ b/drivers/net/wireless/ath/ath10k/core.h @@ -145,6 +145,7 @@ struct ath10k_wmi { struct wmi_vdev_param_map *vdev_param; struct wmi_pdev_param_map *pdev_param; const struct wmi_ops *ops; + struct wmi_peer_flags_map *peer_flags; u32 num_mem_chunks; struct ath10k_mem_chunk mem_chunks[WMI_MAX_MEM_REQS]; diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c index 0f39af7..996ef64 100644 --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c @@ -1369,7 +1369,7 @@ static void ath10k_peer_assoc_h_basic(struct ath10k *ar, ether_addr_copy(arg->addr, sta->addr); arg->vdev_id = arvif->vdev_id; arg->peer_aid = sta->aid; - arg->peer_flags |= WMI_PEER_AUTH; + arg->peer_flags |= arvif->ar->wmi.peer_flags->wmi_peer_auth; arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif); arg->peer_num_spatial_streams = 1; arg->peer_caps = vif->bss_conf.assoc_capability; @@ -1407,12 +1407,14 @@ static void ath10k_peer_assoc_h_crypto(struct ath10k *ar, /* FIXME: base on RSN IE/WPA IE is a correct idea? */ if (rsnie || wpaie) { ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__); - arg->peer_flags |= WMI_PEER_NEED_PTK_4_WAY; + arg->peer_flags |= + ar->wmi.peer_flags->wmi_peer_need_ptk_4_way; } if (wpaie) { ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__); - arg->peer_flags |= WMI_PEER_NEED_GTK_2_WAY; + arg->peer_flags |= + ar->wmi.peer_flags->wmi_peer_need_gtk_2_way; } } @@ -1456,7 +1458,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar, if (!ht_cap->ht_supported) return; - arg->peer_flags |= WMI_PEER_HT; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_ht; arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR + ht_cap->ampdu_factor)) - 1; @@ -1467,10 +1469,10 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar, arg->peer_rate_caps |= WMI_RC_HT_FLAG; if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING) - arg->peer_flags |= WMI_PEER_LDPC; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_ldbc; if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) { - arg->peer_flags |= WMI_PEER_40MHZ; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_40MHZ; arg->peer_rate_caps |= WMI_RC_CW40_FLAG; } @@ -1482,7 +1484,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar, if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) { arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG; - arg->peer_flags |= WMI_PEER_STBC; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_stbc; } if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) { @@ -1490,7 +1492,7 @@ static void ath10k_peer_assoc_h_ht(struct ath10k *ar, stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT; stbc = stbc << WMI_RC_RX_STBC_FLAG_S; arg->peer_rate_caps |= stbc; - arg->peer_flags |= WMI_PEER_STBC; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_stbc; } if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2]) @@ -1603,10 +1605,10 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar, if (!vht_cap->vht_supported) return; - arg->peer_flags |= WMI_PEER_VHT; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_vht; if (ar->hw->conf.chandef.chan->band == IEEE80211_BAND_2GHZ) - arg->peer_flags |= WMI_PEER_VHT_2G; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_vht_2g; arg->peer_vht_caps = vht_cap->cap; @@ -1623,7 +1625,7 @@ static void ath10k_peer_assoc_h_vht(struct ath10k *ar, ampdu_factor)) - 1); if (sta->bandwidth == IEEE80211_STA_RX_BW_80) - arg->peer_flags |= WMI_PEER_80MHZ; + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_80MHZ; arg->peer_vht_rates.rx_max_rate = __le16_to_cpu(vht_cap->vht_mcs.rx_highest); @@ -1648,27 +1650,32 @@ static void ath10k_peer_assoc_h_qos(struct ath10k *ar, switch (arvif->vdev_type) { case WMI_VDEV_TYPE_AP: if (sta->wme) - arg->peer_flags |= WMI_PEER_QOS; + arg->peer_flags |= + arvif->ar->wmi.peer_flags->wmi_peer_qos; if (sta->wme && sta->uapsd_queues) { - arg->peer_flags |= WMI_PEER_APSD; + arg->peer_flags |= + arvif->ar->wmi.peer_flags->wmi_peer_apsd; arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG; } break; case WMI_VDEV_TYPE_STA: if (vif->bss_conf.qos) - arg->peer_flags |= WMI_PEER_QOS; + arg->peer_flags |= + arvif->ar->wmi.peer_flags->wmi_peer_qos; break; case WMI_VDEV_TYPE_IBSS: if (sta->wme) - arg->peer_flags |= WMI_PEER_QOS; + arg->peer_flags |= + arvif->ar->wmi.peer_flags->wmi_peer_qos; break; default: break; } ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n", - sta->addr, !!(arg->peer_flags & WMI_PEER_QOS)); + sta->addr, !!(arg->peer_flags & + arvif->ar->wmi.peer_flags->wmi_peer_qos)); } static bool ath10k_mac_sta_has_11g_rates(struct ieee80211_sta *sta) @@ -1752,6 +1759,11 @@ static int ath10k_peer_assoc_prepare(struct ath10k *ar, ath10k_peer_assoc_h_qos(ar, vif, sta, arg); ath10k_peer_assoc_h_phymode(ar, vif, sta, arg); + if (sta->mfp) { + if (ar->wmi.op_version == ATH10K_FW_WMI_OP_VERSION_10_2_4) + arg->peer_flags |= ar->wmi.peer_flags->wmi_peer_pmf; + } + return 0; } diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c index f34baa0..2dfc13b 100644 --- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c +++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c @@ -2788,6 +2788,25 @@ static const struct wmi_ops wmi_tlv_ops = { .gen_sta_keepalive = ath10k_wmi_tlv_op_gen_sta_keepalive, }; +static struct wmi_peer_flags_map wmi_tlv_peer_flags_map = { + .wmi_peer_auth = WMI_TLV_PEER_AUTH, + .wmi_peer_qos = WMI_TLV_PEER_QOS, + .wmi_peer_need_ptk_4_way = WMI_TLV_PEER_NEED_PTK_4_WAY, + .wmi_peer_need_gtk_2_way = WMI_TLV_PEER_NEED_GTK_2_WAY, + .wmi_peer_apsd = WMI_TLV_PEER_APSD, + .wmi_peer_ht = WMI_TLV_PEER_HT, + .wmi_peer_40MHZ = WMI_TLV_PEER_40MHZ, + .wmi_peer_stbc = WMI_TLV_PEER_STBC, + .wmi_peer_ldbc = WMI_TLV_PEER_LDPC, + .wmi_peer_dyn_mimops = WMI_TLV_PEER_DYN_MIMOPS, + .wmi_peer_static_mimops = WMI_TLV_PEER_STATIC_MIMOPS, + .wmi_peer_spatial_mux = WMI_TLV_PEER_SPATIAL_MUX, + .wmi_peer_vht = WMI_TLV_PEER_VHT, + .wmi_peer_80MHZ = WMI_TLV_PEER_80MHZ, + .wmi_peer_pmf = WMI_TLV_PEER_PMF, +}; + + /************/ /* TLV init */ /************/ @@ -2798,4 +2817,5 @@ void ath10k_wmi_tlv_attach(struct ath10k *ar) ar->wmi.vdev_param = &wmi_tlv_vdev_param_map; ar->wmi.pdev_param = &wmi_tlv_pdev_param_map; ar->wmi.ops = &wmi_tlv_ops; + ar->wmi.peer_flags = &wmi_tlv_peer_flags_map; } diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.h b/drivers/net/wireless/ath/ath10k/wmi-tlv.h index d7a31e1..7159b69 100644 --- a/drivers/net/wireless/ath/ath10k/wmi-tlv.h +++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.h @@ -527,6 +527,25 @@ enum wmi_tlv_vdev_param { WMI_TLV_VDEV_PARAM_IBSS_PS_1RX_CHAIN_IN_ATIM_WINDOW_ENABLE, }; +enum wmi_tlv_peer_flags { + + WMI_TLV_PEER_AUTH = 0x00000001, + WMI_TLV_PEER_QOS = 0x00000002, + WMI_TLV_PEER_NEED_PTK_4_WAY = 0x00000004, + WMI_TLV_PEER_NEED_GTK_2_WAY = 0x00000010, + WMI_TLV_PEER_APSD = 0x00000800, + WMI_TLV_PEER_HT = 0x00001000, + WMI_TLV_PEER_40MHZ = 0x00002000, + WMI_TLV_PEER_STBC = 0x00008000, + WMI_TLV_PEER_LDPC = 0x00010000, + WMI_TLV_PEER_DYN_MIMOPS = 0x00020000, + WMI_TLV_PEER_STATIC_MIMOPS = 0x00040000, + WMI_TLV_PEER_SPATIAL_MUX = 0x00200000, + WMI_TLV_PEER_VHT = 0x02000000, + WMI_TLV_PEER_80MHZ = 0x04000000, + WMI_TLV_PEER_PMF = 0x08000000, +}; + enum wmi_tlv_tag { WMI_TLV_TAG_LAST_RESERVED = 15, diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c index c7ea77e..ad4dc82 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.c +++ b/drivers/net/wireless/ath/ath10k/wmi.c @@ -849,6 +849,62 @@ static struct wmi_cmd_map wmi_10_2_cmd_map = { .pdev_get_temperature_cmdid = WMI_CMD_UNSUPPORTED, }; +static struct wmi_peer_flags_map wmi_peer_flags_map = { + .wmi_peer_auth = WMI_PEER_AUTH, + .wmi_peer_qos = WMI_PEER_QOS, + .wmi_peer_need_ptk_4_way = WMI_PEER_NEED_PTK_4_WAY, + .wmi_peer_need_gtk_2_way = WMI_PEER_NEED_GTK_2_WAY, + .wmi_peer_apsd = WMI_PEER_APSD, + .wmi_peer_ht = WMI_PEER_HT, + .wmi_peer_40MHZ = WMI_PEER_40MHZ, + .wmi_peer_stbc = WMI_PEER_STBC, + .wmi_peer_ldbc = WMI_PEER_LDPC, + .wmi_peer_dyn_mimops = WMI_PEER_DYN_MIMOPS, + .wmi_peer_static_mimops = WMI_PEER_STATIC_MIMOPS, + .wmi_peer_spatial_mux = WMI_PEER_SPATIAL_MUX, + .wmi_peer_vht = WMI_PEER_VHT, + .wmi_peer_80MHZ = WMI_PEER_80MHZ, + .wmi_peer_vht_2g = WMI_PEER_VHT_2G, + .wmi_peer_pmf = WMI_PEER_PMF, +}; + +static struct wmi_peer_flags_map wmi_10x_peer_flags_map = { + .wmi_peer_auth = WMI_10X_PEER_AUTH, + .wmi_peer_qos = WMI_10X_PEER_QOS, + .wmi_peer_need_ptk_4_way = WMI_10X_PEER_NEED_PTK_4_WAY, + .wmi_peer_need_gtk_2_way = WMI_10X_PEER_NEED_GTK_2_WAY, + .wmi_peer_apsd = WMI_10X_PEER_APSD, + .wmi_peer_ht = WMI_10X_PEER_HT, + .wmi_peer_40MHZ = WMI_10X_PEER_40MHZ, + .wmi_peer_stbc = WMI_10X_PEER_STBC, + .wmi_peer_ldbc = WMI_10X_PEER_LDPC, + .wmi_peer_dyn_mimops = WMI_10X_PEER_DYN_MIMOPS, + .wmi_peer_static_mimops = WMI_10X_PEER_STATIC_MIMOPS, + .wmi_peer_spatial_mux = WMI_10X_PEER_SPATIAL_MUX, + .wmi_peer_vht = WMI_10X_PEER_VHT, + .wmi_peer_80MHZ = WMI_10X_PEER_80MHZ, +}; + +static struct wmi_peer_flags_map wmi_10_2_peer_flags_map = { + .wmi_peer_auth = WMI_10_2_PEER_AUTH, + .wmi_peer_qos = WMI_10_2_PEER_QOS, + .wmi_peer_need_ptk_4_way = WMI_10_2_PEER_NEED_PTK_4_WAY, + .wmi_peer_need_gtk_2_way = WMI_10_2_PEER_NEED_GTK_2_WAY, + .wmi_peer_apsd = WMI_10_2_PEER_APSD, + .wmi_peer_ht = WMI_10_2_PEER_HT, + .wmi_peer_40MHZ = WMI_10_2_PEER_40MHZ, + .wmi_peer_stbc = WMI_10_2_PEER_STBC, + .wmi_peer_ldbc = WMI_10_2_PEER_LDPC, + .wmi_peer_dyn_mimops = WMI_10_2_PEER_DYN_MIMOPS, + .wmi_peer_static_mimops = WMI_10_2_PEER_STATIC_MIMOPS, + .wmi_peer_spatial_mux = WMI_10_2_PEER_SPATIAL_MUX, + .wmi_peer_vht = WMI_10_2_PEER_VHT, + .wmi_peer_80MHZ = WMI_10_2_PEER_80MHZ, + .wmi_peer_vht_2g = WMI_10_2_PEER_VHT_2G, + .wmi_peer_pmf = WMI_10_2_PEER_PMF, +}; + + void ath10k_wmi_put_wmi_channel(struct wmi_channel *ch, const struct wmi_channel_arg *arg) { @@ -5462,24 +5518,28 @@ int ath10k_wmi_attach(struct ath10k *ar) ar->wmi.ops = &wmi_10_2_4_ops; ar->wmi.vdev_param = &wmi_10_2_4_vdev_param_map; ar->wmi.pdev_param = &wmi_10_2_4_pdev_param_map; + ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; break; case ATH10K_FW_WMI_OP_VERSION_10_2: ar->wmi.cmd = &wmi_10_2_cmd_map; ar->wmi.ops = &wmi_10_2_ops; ar->wmi.vdev_param = &wmi_10x_vdev_param_map; ar->wmi.pdev_param = &wmi_10x_pdev_param_map; + ar->wmi.peer_flags = &wmi_10_2_peer_flags_map; break; case ATH10K_FW_WMI_OP_VERSION_10_1: ar->wmi.cmd = &wmi_10x_cmd_map; ar->wmi.ops = &wmi_10_1_ops; ar->wmi.vdev_param = &wmi_10x_vdev_param_map; ar->wmi.pdev_param = &wmi_10x_pdev_param_map; + ar->wmi.peer_flags = &wmi_10x_peer_flags_map; break; case ATH10K_FW_WMI_OP_VERSION_MAIN: ar->wmi.cmd = &wmi_cmd_map; ar->wmi.ops = &wmi_ops; ar->wmi.vdev_param = &wmi_vdev_param_map; ar->wmi.pdev_param = &wmi_pdev_param_map; + ar->wmi.peer_flags = &wmi_peer_flags_map; break; case ATH10K_FW_WMI_OP_VERSION_TLV: ath10k_wmi_tlv_attach(ar); diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h index 28c1822..d464be2 100644 --- a/drivers/net/wireless/ath/ath10k/wmi.h +++ b/drivers/net/wireless/ath/ath10k/wmi.h @@ -4509,21 +4509,82 @@ struct wmi_peer_set_q_empty_callback_cmd { __le32 callback_enable; } __packed; -#define WMI_PEER_AUTH 0x00000001 -#define WMI_PEER_QOS 0x00000002 -#define WMI_PEER_NEED_PTK_4_WAY 0x00000004 -#define WMI_PEER_NEED_GTK_2_WAY 0x00000010 -#define WMI_PEER_APSD 0x00000800 -#define WMI_PEER_HT 0x00001000 -#define WMI_PEER_40MHZ 0x00002000 -#define WMI_PEER_STBC 0x00008000 -#define WMI_PEER_LDPC 0x00010000 -#define WMI_PEER_DYN_MIMOPS 0x00020000 -#define WMI_PEER_STATIC_MIMOPS 0x00040000 -#define WMI_PEER_SPATIAL_MUX 0x00200000 -#define WMI_PEER_VHT 0x02000000 -#define WMI_PEER_80MHZ 0x04000000 -#define WMI_PEER_VHT_2G 0x08000000 +struct wmi_peer_flags_map { + u32 wmi_peer_auth; + u32 wmi_peer_qos; + u32 wmi_peer_need_ptk_4_way; + u32 wmi_peer_need_gtk_2_way; + u32 wmi_peer_apsd; + u32 wmi_peer_ht; + u32 wmi_peer_40MHZ; + u32 wmi_peer_stbc; + u32 wmi_peer_ldbc; + u32 wmi_peer_dyn_mimops; + u32 wmi_peer_static_mimops; + u32 wmi_peer_spatial_mux; + u32 wmi_peer_vht; + u32 wmi_peer_80MHZ; + u32 wmi_peer_vht_2g; + u32 wmi_peer_pmf; +}; + +enum wmi_peer_flags { + + WMI_PEER_AUTH = 0x00000001, + WMI_PEER_QOS = 0x00000002, + WMI_PEER_NEED_PTK_4_WAY = 0x00000004, + WMI_PEER_NEED_GTK_2_WAY = 0x00000010, + WMI_PEER_APSD = 0x00000800, + WMI_PEER_HT = 0x00001000, + WMI_PEER_40MHZ = 0x00002000, + WMI_PEER_STBC = 0x00008000, + WMI_PEER_LDPC = 0x00010000, + WMI_PEER_DYN_MIMOPS = 0x00020000, + WMI_PEER_STATIC_MIMOPS = 0x00040000, + WMI_PEER_SPATIAL_MUX = 0x00200000, + WMI_PEER_VHT = 0x02000000, + WMI_PEER_80MHZ = 0x04000000, + WMI_PEER_VHT_2G = 0x08000000, + WMI_PEER_PMF = 0x10000000, +}; + +enum wmi_10x_peer_flags { + + WMI_10X_PEER_AUTH = 0x00000001, + WMI_10X_PEER_QOS = 0x00000002, + WMI_10X_PEER_NEED_PTK_4_WAY = 0x00000004, + WMI_10X_PEER_NEED_GTK_2_WAY = 0x00000010, + WMI_10X_PEER_APSD = 0x00000800, + WMI_10X_PEER_HT = 0x00001000, + WMI_10X_PEER_40MHZ = 0x00002000, + WMI_10X_PEER_STBC = 0x00008000, + WMI_10X_PEER_LDPC = 0x00010000, + WMI_10X_PEER_DYN_MIMOPS = 0x00020000, + WMI_10X_PEER_STATIC_MIMOPS = 0x00040000, + WMI_10X_PEER_SPATIAL_MUX = 0x00200000, + WMI_10X_PEER_VHT = 0x02000000, + WMI_10X_PEER_80MHZ = 0x04000000, +}; + +enum wmi_10_2_peer_flags { + + WMI_10_2_PEER_AUTH = 0x00000001, + WMI_10_2_PEER_QOS = 0x00000002, + WMI_10_2_PEER_NEED_PTK_4_WAY = 0x00000004, + WMI_10_2_PEER_NEED_GTK_2_WAY = 0x00000010, + WMI_10_2_PEER_APSD = 0x00000800, + WMI_10_2_PEER_HT = 0x00001000, + WMI_10_2_PEER_40MHZ = 0x00002000, + WMI_10_2_PEER_STBC = 0x00008000, + WMI_10_2_PEER_LDPC = 0x00010000, + WMI_10_2_PEER_DYN_MIMOPS = 0x00020000, + WMI_10_2_PEER_STATIC_MIMOPS = 0x00040000, + WMI_10_2_PEER_SPATIAL_MUX = 0x00200000, + WMI_10_2_PEER_VHT = 0x02000000, + WMI_10_2_PEER_80MHZ = 0x04000000, + WMI_10_2_PEER_VHT_2G = 0x08000000, + WMI_10_2_PEER_PMF = 0x10000000, +}; /* * Peer rate capabilities.