From 297b60346df8beafee954a0fd7c2d64f33f3b9bc Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Sat, 11 May 2024 01:44:05 +0000
Subject: [PATCH] rtl8211F_led_control
---
kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/wlioctl.h | 17233 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 13,838 insertions(+), 3,395 deletions(-)
diff --git a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/wlioctl.h b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/wlioctl.h
index 7bf4b38..b1cfe0e 100644
--- a/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/wlioctl.h
+++ b/kernel/drivers/net/wireless/rockchip_wlan/cywdhd/bcmdhd/include/wlioctl.h
@@ -1,4 +1,3 @@
-/* SPDX-License-Identifier: GPL-2.0 */
/*
* Custom OID/ioctl definitions for
*
@@ -7,14 +6,16 @@
*
* Definitions subject to change without notice.
*
- * Copyright (C) 1999-2019, Broadcom Corporation
- *
+ * Portions of this code are copyright (c) 2022 Cypress Semiconductor Corporation
+ *
+ * Copyright (C) 1999-2017, Broadcom Corporation
+ *
* Unless you and Broadcom execute a separate written software license
* agreement governing use of this software, this software is licensed to you
* under the terms of the GNU General Public License version 2 (the "GPL"),
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
* following added to such license:
- *
+ *
* As a special exception, the copyright holders of this software give you
* permission to link this software with independent modules, and to copy and
* distribute the resulting executable under terms of your choice, provided that
@@ -22,37 +23,57 @@
* the license of that module. An independent module is a module which is not
* derived from this software. The special exception does not apply to any
* modifications of the software.
- *
+ *
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a license
* other than the GPL, without Broadcom's express prior written consent.
+ *
+ *
* <<Broadcom-WL-IPTag/Open:>>
*
- * $Id: wlioctl.h 712434 2019-03-22 05:15:30Z $
+ * $Id$
*/
#ifndef _wlioctl_h_
#define _wlioctl_h_
#include <typedefs.h>
-#include <proto/ethernet.h>
-#include <proto/bcmip.h>
-#include <proto/bcmeth.h>
-#include <proto/bcmip.h>
-#include <proto/bcmevent.h>
-#include <proto/802.11.h>
-#include <proto/802.1d.h>
+#include <ethernet.h>
+#include <bcmip.h>
+#include <bcmeth.h>
+#include <bcmip.h>
+#include <bcmipv6.h>
+#include <bcmevent.h>
+#include <802.11.h>
+#include <802.11s.h>
+#include <802.1d.h>
#include <bcmwifi_channels.h>
+#include <802.11ax.h>
#include <bcmwifi_rates.h>
-#include <devctrl_if/wlioctl_defs.h>
-#include <proto/bcmipv6.h>
+#include <wlioctl_defs.h>
+#include <bcmipv6.h>
#include <bcm_mpool_pub.h>
#include <bcmcdc.h>
+/* NOTE re: Module specific error codes.
+ *
+ * BCME_.. error codes are extended by various features - e.g. FTM, NAN, SAE etc.
+ * The current process is to allocate a range of 1024 negative 32 bit integers to
+ * each module that extends the error codes to indicate a module specific status.
+ *
+ * The next range to use is below. If that range is used for a new feature, please
+ * update the range to be used by the next feature.
+ *
+ * The error codes -4096 ... -5119 are reserved for firmware signing.
+ *
+ * Next available (inclusive) range: [-6*1024 + 1, -5*1024]
+ *
+ * End Note
+ */
-
-
+/* 11ax trigger frame format - versioning info */
+#define TRIG_FRAME_FORMAT_11AX_DRAFT_1P1 0
typedef struct {
uint32 num;
@@ -61,13 +82,21 @@
#define RSN_KCK_LENGTH 16
#define RSN_KEK_LENGTH 16
-
-
+#define TPK_FTM_LEN 16
#ifndef INTF_NAME_SIZ
#define INTF_NAME_SIZ 16
-#endif
+#endif // endif
-/* Used to send ioctls over the transport pipe */
+#define WL_ASSOC_START_EVT_DATA_VERSION 1
+#define WSEC_MAX_SAE_PASSWORD_LEN 128
+
+typedef struct assoc_event_data {
+ uint32 version;
+ uint32 flags;
+ chanspec_t join_chspec;
+} assoc_event_data_t;
+
+/**Used to send ioctls over the transport pipe */
typedef struct remote_ioctl {
cdc_ioctl_t msg;
uint32 data_len;
@@ -75,8 +104,11 @@
} rem_ioctl_t;
#define REMOTE_SIZE sizeof(rem_ioctl_t)
+#define BCM_IOV_XTLV_VERSION 0
-/* DFS Forced param */
+#define MAX_NUM_D11CORES 2
+
+/**DFS Forced param */
typedef struct wl_dfs_forced_params {
chanspec_t chspec;
uint16 version;
@@ -85,16 +117,21 @@
#define DFS_PREFCHANLIST_VER 0x01
#define WL_CHSPEC_LIST_FIXED_SIZE OFFSETOF(chanspec_list_t, list)
+/* size of dfs forced param size given n channels are in the list */
+#define WL_DFS_FORCED_PARAMS_SIZE(n) \
+ (sizeof(wl_dfs_forced_t) + (((n) < 1) ? (0) : (((n) - 1)* sizeof(chanspec_t))))
#define WL_DFS_FORCED_PARAMS_FIXED_SIZE \
(WL_CHSPEC_LIST_FIXED_SIZE + OFFSETOF(wl_dfs_forced_t, chspec_list))
#define WL_DFS_FORCED_PARAMS_MAX_SIZE \
WL_DFS_FORCED_PARAMS_FIXED_SIZE + (WL_NUMCHANNELS * sizeof(chanspec_t))
-/* association decision information */
+/**association decision information */
typedef struct {
- bool assoc_approved; /**< (re)association approved */
+ uint8 assoc_approved; /**< (re)association approved */
+ uint8 pad;
uint16 reject_reason; /**< reason code for rejecting association */
struct ether_addr da;
+ uint8 pad1[6];
int64 sys_time; /**< current system time */
} assoc_decision_t;
@@ -105,7 +142,6 @@
#define DFS_SCAN_S_SCAN_ABORTED 3
#define DFS_SCAN_S_SCAN_MODESW_INPROGRESS 4
#define DFS_SCAN_S_MAX 5
-
#define ACTION_FRAME_SIZE 1800
@@ -125,27 +161,73 @@
} ssid_info_t;
typedef struct wl_af_params {
- uint32 channel;
- int32 dwell_time;
- struct ether_addr BSSID;
+ uint32 channel;
+ int32 dwell_time;
+ struct ether_addr BSSID;
+ uint8 PAD[2];
wl_action_frame_t action_frame;
} wl_af_params_t;
#define WL_WIFI_AF_PARAMS_SIZE sizeof(struct wl_af_params)
+#define WL_EXTAUTH_START 1
+#define WL_EXTAUTH_ABORT 2
+#define WL_EXTAUTH_FAIL 3
+#define WL_EXTAUTH_SUCCESS 4
+
+/**
+ * Used by both dongle and host
+ * dongle asks host to start auth(SAE)
+ * host updates auth status to dongle
+ */
+typedef struct wl_auth_req_status {
+ uint16 flags;
+ struct ether_addr peer_mac; /**< peer mac address */
+ uint32 ssid_len;
+ uint8 ssid[DOT11_MAX_SSID_LEN];
+ uint8 pmkid[WPA2_PMKID_LEN];
+} wl_auth_req_status_t;
+
+typedef struct wl_mf_params {
+ uint32 version;
+ uint32 dwell_time;
+ uint16 len;
+ uint16 fc;
+ uint16 channel;
+ struct ether_addr da;
+ struct ether_addr bssid;
+ uint32 packetId;
+ uint8 data[1];
+} wl_mf_params_t;
+
#define MFP_TEST_FLAG_NORMAL 0
#define MFP_TEST_FLAG_ANY_KEY 1
typedef struct wl_sa_query {
- uint32 flag;
- uint8 action;
- uint16 id;
- struct ether_addr da;
+ uint32 flag;
+ uint8 action;
+ uint8 PAD;
+ uint16 id;
+ struct ether_addr da;
+ uint16 PAD;
} wl_sa_query_t;
-/* require default structure packing */
-#define BWL_DEFAULT_PACKING
-#include <packed_section_start.h>
-
+/* EXT_STA */
+/**association information */
+typedef struct {
+ uint32 assoc_req; /**< offset to association request frame */
+ uint32 assoc_req_len; /**< association request frame length */
+ uint32 assoc_rsp; /**< offset to association response frame */
+ uint32 assoc_rsp_len; /**< association response frame length */
+ uint32 bcn; /**< offset to AP beacon */
+ uint32 bcn_len; /**< AP beacon length */
+ uint32 wsec; /**< ucast security algo */
+ uint32 wpaie; /**< offset to WPA ie */
+ uint8 auth_alg; /**< 802.11 authentication mode */
+ uint8 WPA_auth; /**< WPA: authenticated key management */
+ uint8 ewc_cap; /**< EWC (MIMO) capable */
+ uint8 ofdm; /**< OFDM */
+} assoc_info_t;
+/* defined(EXT_STA) */
/* Flags for OBSS IOVAR Parameters */
#define WL_OBSS_DYN_BWSW_FLAG_ACTIVITY_PERIOD (0x01)
@@ -158,12 +240,14 @@
/* OBSS IOVAR Version information */
#define WL_PROT_OBSS_CONFIG_PARAMS_VERSION 1
+
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint8 obss_bwsw_activity_cfm_count_cfg; /* configurable count in
+ uint8 obss_bwsw_activity_cfm_count_cfg; /**< configurable count in
* seconds before we confirm that OBSS is present and
* dynamically activate dynamic bwswitch.
*/
- uint8 obss_bwsw_no_activity_cfm_count_cfg; /* configurable count in
+ uint8 obss_bwsw_no_activity_cfm_count_cfg; /**< configurable count in
* seconds before we confirm that OBSS is GONE and
* dynamically start pseudo upgrade. If in pseudo sense time, we
* will see OBSS, [means that, we false detected that OBSS-is-gone
@@ -174,49 +258,65 @@
*/
uint8 obss_bwsw_no_activity_cfm_count_incr_cfg; /* see above
*/
- uint16 obss_bwsw_pseudo_sense_count_cfg; /* number of msecs/cnt to be in
+ uint16 obss_bwsw_pseudo_sense_count_cfg; /**< number of msecs/cnt to be in
* pseudo state. This is used to sense/measure the stats from lq.
*/
- uint8 obss_bwsw_rx_crs_threshold_cfg; /* RX CRS default threshold */
- uint8 obss_bwsw_dur_thres; /* OBSS dyn bwsw trigger/RX CRS Sec */
- uint8 obss_bwsw_txop_threshold_cfg; /* TXOP default threshold */
-} BWL_POST_PACKED_STRUCT wlc_prot_dynbwsw_config_t;
+ uint8 obss_bwsw_rx_crs_threshold_cfg; /**< RX CRS default threshold */
+ uint8 obss_bwsw_dur_thres; /**< OBSS dyn bwsw trigger/RX CRS Sec */
+ uint8 obss_bwsw_txop_threshold_cfg; /**< TXOP default threshold */
+} BWL_POST_PACKED_STRUCT wlc_obss_dynbwsw_config_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint32 version; /**< version field */
uint32 config_mask;
uint32 reset_mask;
- wlc_prot_dynbwsw_config_t config_params;
+ wlc_obss_dynbwsw_config_t config_params;
} BWL_POST_PACKED_STRUCT obss_config_params_t;
+#include <packed_section_end.h>
-
-/* bsscfg type */
-typedef enum bsscfg_type_t {
- BSSCFG_TYPE_GENERIC = 0, /**< default */
- BSSCFG_TYPE_P2P = 1, /**< The BSS is for p2p link */
- BSSCFG_TYPE_BTA = 2,
+/**bsscfg type */
+typedef enum bsscfg_type {
+ BSSCFG_TYPE_GENERIC = 0, /**< Generic AP/STA/IBSS BSS */
+ BSSCFG_TYPE_P2P = 1, /**< P2P BSS */
+ /* index 2 earlier used for BTAMP */
+ BSSCFG_TYPE_PSTA = 3,
BSSCFG_TYPE_TDLS = 4,
- BSSCFG_TYPE_AWDL = 5,
+ BSSCFG_TYPE_SLOTTED_BSS = 5,
BSSCFG_TYPE_PROXD = 6,
BSSCFG_TYPE_NAN = 7,
- BSSCFG_TYPE_MAX
+ BSSCFG_TYPE_MESH = 8,
+ BSSCFG_TYPE_AIBSS = 9
} bsscfg_type_t;
/* bsscfg subtype */
-enum {
- BSSCFG_GENERIC_STA = 1, /* GENERIC */
- BSSCFG_GENERIC_AP = 2, /* GENERIC */
- BSSCFG_P2P_GC = 3, /* P2P */
- BSSCFG_P2P_GO = 4, /* P2P */
- BSSCFG_P2P_DISC = 5, /* P2P */
-};
+typedef enum bsscfg_subtype {
+ BSSCFG_SUBTYPE_NONE = 0,
+ BSSCFG_GENERIC_STA = 1, /* GENERIC */
+ BSSCFG_GENERIC_AP = 2,
+ BSSCFG_GENERIC_IBSS = 6,
+ BSSCFG_P2P_GC = 3, /* P2P */
+ BSSCFG_P2P_GO = 4,
+ BSSCFG_P2P_DISC = 5,
+ /* Index 7 & 8 earlier used for BTAMP */
+ BSSCFG_SUBTYPE_AWDL = 9, /* SLOTTED_BSS_TYPE */
+ BSSCFG_SUBTYPE_NAN_MGMT = 10,
+ BSSCFG_SUBTYPE_NAN_DATA = 11,
+ BSSCFG_SUBTYPE_NAN_MGMT_DATA = 12
+} bsscfg_subtype_t;
typedef struct wlc_bsscfg_info {
uint32 type;
uint32 subtype;
} wlc_bsscfg_info_t;
-
+/* ULP SHM Offsets info */
+typedef struct ulp_shm_info {
+ uint32 m_ulp_ctrl_sdio;
+ uint32 m_ulp_wakeevt_ind;
+ uint32 m_ulp_wakeind;
+} ulp_shm_info_t;
/* Legacy structure to help keep backward compatible wl tool and tray app */
@@ -232,15 +332,19 @@
uint16 capability; /**< Capability information */
uint8 SSID_len;
uint8 SSID[32];
+ uint8 PAD;
struct {
- uint count; /**< # rates in this set */
+ uint32 count; /**< # rates in this set */
uint8 rates[16]; /**< rates in 500kbps units w/hi bit set if basic */
} rateset; /**< supported rates */
uint8 channel; /**< Channel no. */
+ uint8 PAD;
uint16 atim_window; /**< units are Kusec */
uint8 dtim_period; /**< DTIM period */
+ uint8 PAD;
int16 RSSI; /**< receive signal strength (in dBm) */
int8 phy_noise; /**< noise (in dBm) */
+ uint8 PAD[3];
uint32 ie_length; /**< byte length of Information Elements */
/* variable length Information Elements */
} wl_bss_info_107_t;
@@ -251,7 +355,8 @@
#define LEGACY2_WL_BSS_INFO_VERSION 108 /**< old version of wl_bss_info struct */
-/* BSS info structure
+/**
+ * BSS info structure
* Applications MUST CHECK ie_offset field and length field to access IEs and
* next bss_info structure in a vector (in wl_scan_results_t)
*/
@@ -265,25 +370,30 @@
uint16 capability; /**< Capability information */
uint8 SSID_len;
uint8 SSID[32];
+ uint8 PAD[1];
struct {
- uint count; /**< # rates in this set */
+ uint32 count; /**< # rates in this set */
uint8 rates[16]; /**< rates in 500kbps units w/hi bit set if basic */
} rateset; /**< supported rates */
chanspec_t chanspec; /**< chanspec for bss */
uint16 atim_window; /**< units are Kusec */
uint8 dtim_period; /**< DTIM period */
+ uint8 PAD;
int16 RSSI; /**< receive signal strength (in dBm) */
int8 phy_noise; /**< noise (in dBm) */
uint8 n_cap; /**< BSS is 802.11N Capable */
+ uint8 PAD[2];
uint32 nbss_cap; /**< 802.11N BSS Capabilities (based on HT_CAP_*) */
uint8 ctl_ch; /**< 802.11N BSS control channel number */
+ uint8 PAD[3];
uint32 reserved32[1]; /**< Reserved for expansion of BSS properties */
uint8 flags; /**< flags */
uint8 reserved[3]; /**< Reserved for expansion of BSS properties */
uint8 basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */
uint16 ie_offset; /**< offset at which IEs start, from beginning */
+ uint8 PAD[2];
uint32 ie_length; /**< byte length of Information Elements */
/* Add new fields here */
/* variable length Information Elements */
@@ -291,7 +401,8 @@
#define WL_BSS_INFO_VERSION 109 /**< current version of wl_bss_info struct */
-/* BSS info structure
+/**
+ * BSS info structure
* Applications MUST CHECK ie_offset field and length field to access IEs and
* next bss_info structure in a vector (in wl_scan_results_t)
*/
@@ -305,17 +416,19 @@
uint16 capability; /**< Capability information */
uint8 SSID_len;
uint8 SSID[32];
+ uint8 bcnflags; /* additional flags w.r.t. beacon */
struct {
- uint count; /**< # rates in this set */
+ uint32 count; /**< # rates in this set */
uint8 rates[16]; /**< rates in 500kbps units w/hi bit set if basic */
} rateset; /**< supported rates */
chanspec_t chanspec; /**< chanspec for bss */
uint16 atim_window; /**< units are Kusec */
uint8 dtim_period; /**< DTIM period */
+ uint8 accessnet; /* from beacon interwork IE (if bcnflags) */
int16 RSSI; /**< receive signal strength (in dBm) */
int8 phy_noise; /**< noise (in dBm) */
-
uint8 n_cap; /**< BSS is 802.11N Capable */
+ uint16 freespace1; /* make implicit padding explicit */
uint32 nbss_cap; /**< 802.11N+AC BSS Capabilities */
uint8 ctl_ch; /**< 802.11N BSS control channel number */
uint8 padding1[3]; /**< explicit struct alignment padding */
@@ -327,25 +440,141 @@
uint8 basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */
uint16 ie_offset; /**< offset at which IEs start, from beginning */
+ uint16 freespace2; /* making implicit padding explicit */
uint32 ie_length; /**< byte length of Information Elements */
int16 SNR; /**< average SNR of during frame reception */
uint16 vht_mcsmap; /**< STA's Associated vhtmcsmap */
uint16 vht_mcsmap_prop; /**< STA's Associated prop vhtmcsmap */
uint16 vht_txmcsmap_prop; /**< prop VHT tx mcs prop */
- /* Add new fields here */
- /* variable length Information Elements */
-} wl_bss_info_t;
+} wl_bss_info_v109_t;
-#define WL_GSCAN_BSS_INFO_VERSION 1 /* current version of wl_gscan_bss_info struct */
-#define WL_GSCAN_INFO_FIXED_FIELD_SIZE (sizeof(wl_gscan_bss_info_t) - sizeof(wl_bss_info_t))
+/**
+ * BSS info structure
+ * Applications MUST CHECK ie_offset field and length field to access IEs and
+ * next bss_info structure in a vector (in wl_scan_results_t)
+ */
+typedef struct wl_bss_info_v109_1 {
+ uint32 version; /**< version field */
+ uint32 length; /**< byte length of data in this record,
+ * starting at version and including IEs
+ */
+ struct ether_addr BSSID;
+ uint16 beacon_period; /**< units are Kusec */
+ uint16 capability; /**< Capability information */
+ uint8 SSID_len;
+ uint8 SSID[32];
+ uint8 bcnflags; /* additional flags w.r.t. beacon */
+ struct {
+ uint32 count; /**< # rates in this set */
+ uint8 rates[16]; /**< rates in 500kbps units w/hi bit set if basic */
+ } rateset; /**< supported rates */
+ chanspec_t chanspec; /**< chanspec for bss */
+ uint16 atim_window; /**< units are Kusec */
+ uint8 dtim_period; /**< DTIM period */
+ uint8 accessnet; /* from beacon interwork IE (if bcnflags) */
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ int8 phy_noise; /**< noise (in dBm) */
+ uint8 n_cap; /**< BSS is 802.11N Capable */
+ uint8 he_cap; /**< BSS is he capable */
+ uint8 freespace1; /* make implicit padding explicit */
+ uint32 nbss_cap; /**< 802.11N+AC BSS Capabilities */
+ uint8 ctl_ch; /**< 802.11N BSS control channel number */
+ uint8 padding1[3]; /**< explicit struct alignment padding */
+ uint16 vht_rxmcsmap; /**< VHT rx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+ uint16 vht_txmcsmap; /**< VHT tx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+ uint8 flags; /**< flags */
+ uint8 vht_cap; /**< BSS is vht capable */
+ uint8 reserved[2]; /**< Reserved for expansion of BSS properties */
+ uint8 basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */
+
+ uint16 ie_offset; /**< offset at which IEs start, from beginning */
+ uint16 freespace2; /* making implicit padding explicit */
+ uint32 ie_length; /**< byte length of Information Elements */
+ int16 SNR; /**< average SNR of during frame reception */
+ uint16 vht_mcsmap; /**< STA's Associated vhtmcsmap */
+ uint16 vht_mcsmap_prop; /**< STA's Associated prop vhtmcsmap */
+ uint16 vht_txmcsmap_prop; /**< prop VHT tx mcs prop */
+ uint32 he_mcsmap; /**< STA's Associated hemcsmap */
+ uint32 he_rxmcsmap; /**< HE rx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+ uint32 he_txmcsmap; /**< HE tx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+} wl_bss_info_v109_1_t;
+
+/**
+ * BSS info structure
+ * Applications MUST CHECK ie_offset field and length field to access IEs and
+ * next bss_info structure in a vector (in wl_scan_results_t)
+ */
+typedef struct wl_bss_info_v109_2 {
+ uint32 version; /**< version field */
+ uint32 length; /**< byte length of data in this record,
+ * starting at version and including IEs
+ */
+ struct ether_addr BSSID;
+ uint16 beacon_period; /**< units are Kusec */
+ uint16 capability; /**< Capability information */
+ uint8 SSID_len;
+ uint8 SSID[32];
+ uint8 bcnflags; /* additional flags w.r.t. beacon */
+ struct {
+ uint32 count; /**< # rates in this set */
+ uint8 rates[16]; /**< rates in 500kbps units w/hi bit set if basic */
+ } rateset; /**< supported rates */
+ chanspec_t chanspec; /**< chanspec for bss */
+ uint16 atim_window; /**< units are Kusec */
+ uint8 dtim_period; /**< DTIM period */
+ uint8 accessnet; /* from beacon interwork IE (if bcnflags) */
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ int8 phy_noise; /**< noise (in dBm) */
+ uint8 n_cap; /**< BSS is 802.11N Capable */
+ uint8 he_cap; /**< BSS is he capable */
+ uint8 freespace1; /* make implicit padding explicit */
+ uint32 nbss_cap; /**< 802.11N+AC BSS Capabilities */
+ uint8 ctl_ch; /**< 802.11N BSS control channel number */
+ uint8 padding1[3]; /**< explicit struct alignment padding */
+ uint16 vht_rxmcsmap; /**< VHT rx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+ uint16 vht_txmcsmap; /**< VHT tx mcs map (802.11ac IE, VHT_CAP_MCS_MAP_*) */
+ uint8 flags; /**< flags */
+ uint8 vht_cap; /**< BSS is vht capable */
+ uint8 reserved[2]; /**< Reserved for expansion of BSS properties */
+ uint8 basic_mcs[MCSSET_LEN]; /**< 802.11N BSS required MCS set */
+
+ uint16 ie_offset; /**< offset at which IEs start, from beginning */
+ uint16 freespace2; /* making implicit padding explicit */
+ uint32 ie_length; /**< byte length of Information Elements */
+ int16 SNR; /**< average SNR of during frame reception */
+ uint16 vht_mcsmap; /**< STA's Associated vhtmcsmap */
+ uint16 vht_mcsmap_prop; /**< STA's Associated prop vhtmcsmap */
+ uint16 vht_txmcsmap_prop; /**< prop VHT tx mcs prop */
+ uint32 he_mcsmap; /**< STA's Associated hemcsmap */
+ uint32 he_rxmcsmap; /**< HE rx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+ uint32 he_txmcsmap; /**< HE tx mcs map (802.11ax IE, HE_CAP_MCS_MAP_*) */
+ uint32 timestamp[2]; /* Beacon Timestamp for FAKEAP req */
+} wl_bss_info_v109_2_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_bss_info_v109_t wl_bss_info_t;
+#endif // endif
+
+#define WL_GSCAN_FULL_RESULT_VERSION 2 /* current version of wl_gscan_result_t struct */
typedef struct wl_gscan_bss_info {
uint32 timestamp[2];
- wl_bss_info_t info;
+ wl_bss_info_v109_t info;
/* Do not add any more members below, fixed */
/* and variable length Information Elements to follow */
-} wl_gscan_bss_info_t;
+} wl_gscan_bss_info_v2_t;
+typedef struct wl_gscan_bss_info_v3 {
+ uint32 timestamp[2];
+ uint8 info[]; /* var length wl_bss_info_X structures */
+ /* Do not add any more members below, fixed */
+ /* and variable length Information Elements to follow */
+} wl_gscan_bss_info_v3_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_gscan_bss_info_v2_t wl_gscan_bss_info_t;
+#define WL_GSCAN_INFO_FIXED_FIELD_SIZE (sizeof(wl_gscan_bss_info_t) - sizeof(wl_bss_info_t))
+#endif // endif
typedef struct wl_bsscfg {
uint32 bsscfg_idx;
@@ -367,6 +596,7 @@
uint32 if_flags;
uint32 ap;
struct ether_addr mac_addr;
+ uint16 PAD;
uint32 wlc_index;
} wl_if_add_t;
@@ -376,29 +606,111 @@
uint32 chanspec;
} wl_bss_config_t;
+#define INVALID_HE_OMI_ARG 255
+
+#define WL_HE_OMI_V1 1
+typedef struct wl_he_omi_v1 {
+ uint8 version;
+ uint8 length;
+ uint8 rx_nss;
+ uint8 chnl_wdth;
+ uint8 ul_mu_dis;
+ uint8 tx_nsts;
+ uint8 er_su_dis;
+ uint8 dl_mu_resound;
+ uint8 ul_mu_data_dis;
+} wl_he_omi_v1_t;
+
+#ifndef HE_OMI_VER_ENABLED
+#define WL_HE_OMI_VER (WL_HE_OMI_V1)
+typedef wl_he_omi_v1_t wl_he_omi_t;
+#endif // endif
+
+/* HE PPE Thresholds field description (variable length) support */
+typedef struct wl_he_ppe_ths_params {
+ uint8 ppe_ths_len; /* data length (starting after this field) */
+ uint8 ppe_ths_field[1]; /* field data with variable length */
+} wl_he_ppe_ths_params_t;
+
+/* MU EDCA override support for testbed STA configuration */
+struct he_muedca_params {
+ bool override_enabled;
+ uint8 muedca_upd_cnt;
+ he_mu_ac_param_record_t param_ac[AC_COUNT];
+};
+
+typedef struct he_muedca_params he_muedca_params_t;
+
+/* MUEDCA Timer range */
+#define HE_MUEDCA_TIMER_MIN 1u
+#define HE_MUEDCA_TIMER_MAX 255u
+
+/* AIFSN=0 indicates that EDCA is disabled for the duration
+ * specified by the MUEDCATimer for the corresponding AC
+ */
+#define HE_MUEDCA_AIFSN_MIN 0
+
+/* HE OFDMA TX DEMO support */
+typedef struct he_ofdmatx_demo_params {
+ bool demo_mode_enabled;
+ uint32 twt_wake_dur; /* target wake duration in unit of microseconds */
+ uint32 twt_wake_int; /* target wake interval in unit of microseconds */
+} he_ofdmatx_demo_params_t;
+
+/* Number of Bsscolor supported per core */
+#ifndef HE_MAX_BSSCOLOR_RES
+#define HE_MAX_BSSCOLOR_RES 2
+#endif // endif
+
+#ifndef HE_MAX_STAID_PER_BSSCOLOR
+#define HE_MAX_STAID_PER_BSSCOLOR 4
+#endif // endif
+
+/* BSSColor indices */
+#define BSSCOLOR0_IDX 0
+#define BSSCOLOR1_IDX 1
+#define HE_BSSCOLOR0 0
+#define HE_BSSCOLOR_MAX_VAL 63
+
+/* STAID indices */
+#define STAID0_IDX 0
+#define STAID1_IDX 1
+#define STAID2_IDX 2
+#define STAID3_IDX 3
+#define HE_STAID_MAX_VAL 0x07FF
+
+typedef struct wl_bsscolor_info {
+ uint16 version; /**< structure version */
+ uint16 length; /**< length of the bsscolor info */
+ uint8 bsscolor_index; /**< bsscolor index 0-1 */
+ uint8 bsscolor; /**<bsscolor value from 0 to 63 */
+ uint8 partial_bsscolor_ind;
+ uint8 disable_bsscolor_ind; /**< To disable particular bsscolor */
+ uint16 staid_info[HE_MAX_STAID_PER_BSSCOLOR]; /**< 0-3 staid info of each bsscolor */
+} wl_bsscolor_info_t;
+
#define WL_BSS_USER_RADAR_CHAN_SELECT 0x1 /**< User application will randomly select
* radar channel.
*/
-#define DLOAD_HANDLER_VER 1 /**< Downloader version */
+#define DLOAD_HANDLER_VER 1 /**< Downloader version */
#define DLOAD_FLAG_VER_MASK 0xf000 /**< Downloader version mask */
-#define DLOAD_FLAG_VER_SHIFT 12 /**< Downloader version shift */
+#define DLOAD_FLAG_VER_SHIFT 12 /**< Downloader version shift */
#define DL_CRC_NOT_INUSE 0x0001
#define DL_BEGIN 0x0002
#define DL_END 0x0004
-/* Flags for Major number shift and mask */
-#define EPI_MAJOR_NUM_SHIFT 16
-#define EPI_MAJOR_NUM_MASK 0xFFFF
-
-/* generic download types & flags */
+/* Flags for Major/Minor/Date number shift and mask */
+#define EPI_VER_SHIFT 16
+#define EPI_VER_MASK 0xFFFF
+/** generic download types & flags */
enum {
DL_TYPE_UCODE = 1,
DL_TYPE_CLM = 2
};
-/* ucode type values */
+/** ucode type values */
enum {
UCODE_FW,
INIT_VALS,
@@ -435,149 +747,33 @@
typedef struct wlc_ssid {
uint32 SSID_len;
- uchar SSID[DOT11_MAX_SSID_LEN];
+ uint8 SSID[DOT11_MAX_SSID_LEN];
} wlc_ssid_t;
typedef struct wlc_ssid_ext {
- bool hidden;
+ uint8 hidden;
+ uint8 PAD;
uint16 flags;
- uint8 SSID_len;
- int8 rssi_thresh;
- uchar SSID[DOT11_MAX_SSID_LEN];
+ uint8 SSID_len;
+ int8 rssi_thresh;
+ uint8 SSID[DOT11_MAX_SSID_LEN];
} wlc_ssid_ext_t;
-
#define MAX_PREFERRED_AP_NUM 5
typedef struct wlc_fastssidinfo {
- uint32 SSID_channel[MAX_PREFERRED_AP_NUM];
+ uint32 SSID_channel[MAX_PREFERRED_AP_NUM];
wlc_ssid_t SSID_info[MAX_PREFERRED_AP_NUM];
} wlc_fastssidinfo_t;
-#ifdef CUSTOMER_HW_31_1
-
-#define AP_NORM 0
-#define AP_STEALTH 1
-#define STREET_PASS_AP 2
-
-#define NSC_MAX_TGT_SSID 20
-typedef struct nsc_ssid_entry_list {
- wlc_ssid_t ssid_info;
- int ssid_type;
-} nsc_ssid_entry_list_t;
-
-typedef struct nsc_ssid_list {
- uint32 num_entries; /* N wants 150 */
- nsc_ssid_entry_list_t ssid_entry[1];
-} nsc_ssid_list_t;
-
-#define NSC_TGT_SSID_BUFSZ (sizeof(nsc_ssid_entry_list_t) * \
- (NSC_MAX_TGT_SSID - 1) + sizeof(nsc_ssid_list_t))
-
-/* Default values from N */
-#define NSC_SCPATT_ARRSZ 32
-
-/* scan types */
-#define UNI_SCAN 0
-#define SP_SCAN_ACTIVE 1
-#define SP_SCAN_PASSIVE 2
-#define DOZE 3
-
-/* what we found */
-typedef struct nsc_scan_results {
- wlc_ssid_t ssid;
- struct ether_addr mac;
- int scantype;
- uint16 channel;
-} nsc_scan_results_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct nsc_af_body {
- uint8 type; /* should be 0x7f */
- uint8 oui[DOT11_OUI_LEN]; /* just like it says */
- uint8 subtype;
- uint8 ielen; /* */
- uint8 data[1]; /* variable */
-} BWL_POST_PACKED_STRUCT nsc_af_body_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct nsc_sdlist {
- uint8 scantype;
- uint16 duration;
- uint16 channel; /* SP only */
- uint8 ssid_index; /* SP only */
- uint16 rate; /* SP only */
-} BWL_POST_PACKED_STRUCT nsc_sdlist_t;
-
-typedef struct nsc_scandes {
- uint32 num_entries; /* number of list entries */
- nsc_sdlist_t sdlist[1]; /* variable */
-} nsc_scandes_t;
-
-#define NSC_SUBTYPES_MAX 8
-#define NSC_SUBTYPES_EOL 0xff
-
-#define NSC_MAX_SDLIST_ENTRIES 8
-#define NSC_SDDESC_BUFSZ (sizeof(nsc_sdlist_t) * \
- (NSC_MAX_SDLIST_ENTRIES - 1) + sizeof(nsc_scandes_t))
-
-#define SCAN_ARR_END (0xFF)
-
-/* action frame endless loop value */
-#define NSC_AFSEND_FOREVER (~0)
-
-#endif /* CUSTOMER_HW_31_1 */
-
-typedef BWL_PRE_PACKED_STRUCT struct wnm_url {
+typedef struct wnm_url {
uint8 len;
uint8 data[1];
-} BWL_POST_PACKED_STRUCT wnm_url_t;
-
-#define WNM_BSS_SELECT_TYPE_RSSI 0
-#define WNM_BSS_SELECT_TYPE_CU 1
-
-#define WNM_BSSLOAD_MONITOR_VERSION 1
-typedef struct wnm_bssload_monitor_cfg {
- uint8 version;
- uint8 band;
- uint8 duration; /* duration between 1 to 20sec */
-} wnm_bssload_monitor_cfg_t;
-
-#define BSS_MAXTABLE_SIZE 10
-#define WNM_BSS_SELECT_FACTOR_VERSION 1
-typedef struct wnm_bss_select_factor_params {
- uint8 low;
- uint8 high;
- uint8 factor;
- uint8 pad;
-} wnm_bss_select_factor_params_t;
-
-typedef struct wnm_bss_select_factor_cfg {
- uint8 version;
- uint8 band;
- uint16 type;
- uint16 pad;
- uint16 count;
- wnm_bss_select_factor_params_t params[1];
-} wnm_bss_select_factor_cfg_t;
-
-#define WNM_BSS_SELECT_WEIGHT_VERSION 1
-typedef struct wnm_bss_select_weight_cfg {
- uint8 version;
- uint8 band;
- uint16 type;
- uint16 weight; /* weightage for each type between 0 to 100 */
-} wnm_bss_select_weight_cfg_t;
-
-#define WNM_ROAM_TRIGGER_VERSION 1
-typedef struct wnm_roam_trigger_cfg {
- uint8 version;
- uint8 band;
- uint16 type;
- int16 trigger; /* trigger for each type in new roam algorithm */
-} wnm_roam_trigger_cfg_t;
+} wnm_url_t;
typedef struct chan_scandata {
uint8 txpower;
uint8 pad;
- chanspec_t channel; /**< Channel num, bw, ctrl_sb and band */
+ chanspec_t channel; /**< Channel num, bw, ctrl_sb and band */
uint32 channel_mintime;
uint32 channel_maxtime;
} chan_scandata_t;
@@ -595,7 +791,7 @@
int8 split_scan; /**< split scan */
int8 band; /**< band */
int8 pad;
- wlc_ssid_t ssid[WLC_EXTDSCAN_MAX_SSID]; /* ssid list */
+ wlc_ssid_t ssid[WLC_EXTDSCAN_MAX_SSID]; /**< ssid list */
uint32 tx_rate; /**< in 500ksec units */
wl_scan_type_t scan_type; /**< enum */
int32 channel_num;
@@ -640,13 +836,64 @@
uint16 channel_list[1]; /**< list of chanspecs */
} wl_scan_params_t;
-/* size of wl_scan_params not including variable length array */
+/* changes in wl_scan_params_v2 as comapred to wl_scan_params (v1)
+ * * unit8 scantype to uint32
+ */
+typedef struct wl_scan_params_v2 {
+ uint16 version; /* Version of wl_scan_params, change value of
+ * WL_SCAN_PARAM_VERSION on version update
+ */
+ uint16 length; /* length of structure wl_scan_params_v1_t
+ * without implicit pad
+ */
+ wlc_ssid_t ssid; /**< default: {0, ""} */
+ struct ether_addr bssid; /**< default: bcast */
+ int8 bss_type; /**< default: any,
+ * DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT
+ */
+ uint8 PAD;
+ uint32 scan_type; /**< flags, 0 use default, and flags specified in
+ * WL_SCANFLAGS_XXX
+ */
+ int32 nprobes; /**< -1 use default, number of probes per channel */
+ int32 active_time; /**< -1 use default, dwell time per channel for
+ * active scanning
+ */
+ int32 passive_time; /**< -1 use default, dwell time per channel
+ * for passive scanning
+ */
+ int32 home_time; /**< -1 use default, dwell time for the home channel
+ * between channel scans
+ */
+ int32 channel_num; /**< count of channels and ssids that follow
+ *
+ * low half is count of channels in channel_list, 0
+ * means default (use all available channels)
+ *
+ * high half is entries in wlc_ssid_t array that
+ * follows channel_list, aligned for int32 (4 bytes)
+ * meaning an odd channel count implies a 2-byte pad
+ * between end of channel_list and first ssid
+ *
+ * if ssid count is zero, single ssid in the fixed
+ * parameter portion is assumed, otherwise ssid in
+ * the fixed portion is ignored
+ */
+ uint16 channel_list[1]; /**< list of chanspecs */
+} wl_scan_params_v2_t;
+
+#define WL_SCAN_PARAMS_VERSION_V2 2
+
+/** size of wl_scan_params not including variable length array */
#define WL_SCAN_PARAMS_FIXED_SIZE 64
#define WL_MAX_ROAMSCAN_DATSZ (WL_SCAN_PARAMS_FIXED_SIZE + (WL_NUMCHANNELS * sizeof(uint16)))
+#define WL_SCAN_PARAMS_V2_FIXED_SIZE (OFFSETOF(wl_scan_params_v2_t, channel_list))
+#define WL_MAX_ROAMSCAN_V2_DATSZ \
+ (WL_SCAN_PARAMS_V2_FIXED_SIZE + (WL_NUMCHANNELS * sizeof(uint16)))
#define ISCAN_REQ_VERSION 1
-/* incremental scan struct */
+/** incremental scan struct */
typedef struct wl_iscan_params {
uint32 version;
uint16 action;
@@ -654,21 +901,39 @@
wl_scan_params_t params;
} wl_iscan_params_t;
-/* 3 fields + size of wl_scan_params, not including variable length array */
+/** 3 fields + size of wl_scan_params, not including variable length array */
#define WL_ISCAN_PARAMS_FIXED_SIZE (OFFSETOF(wl_iscan_params_t, params) + sizeof(wlc_ssid_t))
typedef struct wl_scan_results {
uint32 buflen;
uint32 version;
uint32 count;
- wl_bss_info_t bss_info[1];
-} wl_scan_results_t;
+ wl_bss_info_v109_t bss_info[1];
+} wl_scan_results_v109_t;
-/* size of wl_scan_results not including variable length array */
+typedef struct wl_scan_results_v2 {
+ uint32 buflen;
+ uint32 version;
+ uint32 count;
+ uint8 bss_info[]; /* var length wl_bss_info_X structures */
+} wl_scan_results_v2_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_scan_results_v109_t wl_scan_results_t;
+/** size of wl_scan_results not including variable length array */
#define WL_SCAN_RESULTS_FIXED_SIZE (sizeof(wl_scan_results_t) - sizeof(wl_bss_info_t))
+#endif // endif
-
+#if defined(SIMPLE_ISCAN)
+/** the buf lengh can be WLC_IOCTL_MAXLEN (8K) to reduce iteration */
+#define WLC_IW_ISCAN_MAXLEN 2048
+typedef struct iscan_buf {
+ struct iscan_buf * next;
+ int8 iscan_buf[WLC_IW_ISCAN_MAXLEN];
+} iscan_buf_t;
+#endif /* SIMPLE_ISCAN */
#define ESCAN_REQ_VERSION 1
+#define ESCAN_REQ_VERSION_V2 2
/** event scan reduces amount of SOC memory needed to store scan results */
typedef struct wl_escan_params {
@@ -678,7 +943,15 @@
wl_scan_params_t params;
} wl_escan_params_t;
+typedef struct wl_escan_params_v2 {
+ uint32 version;
+ uint16 action;
+ uint16 sync_id;
+ wl_scan_params_v2_t params;
+} wl_escan_params_v2_t;
+
#define WL_ESCAN_PARAMS_FIXED_SIZE (OFFSETOF(wl_escan_params_t, params) + sizeof(wlc_ssid_t))
+#define WL_ESCAN_PARAMS_V2_FIXED_SIZE (OFFSETOF(wl_escan_params_v2_t, params) + sizeof(wlc_ssid_t))
/** event scan reduces amount of SOC memory needed to store scan results */
typedef struct wl_escan_result {
@@ -686,52 +959,60 @@
uint32 version;
uint16 sync_id;
uint16 bss_count;
- wl_bss_info_t bss_info[1];
-} wl_escan_result_t;
+ wl_bss_info_v109_t bss_info[1];
+} wl_escan_result_v109_t;
+/** event scan reduces amount of SOC memory needed to store scan results */
+typedef struct wl_escan_result_v2 {
+ uint32 buflen;
+ uint32 version;
+ uint16 sync_id;
+ uint16 bss_count;
+ uint8 bss_info[]; /* var length wl_bss_info_X structures */
+} wl_escan_result_v2_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_escan_result_v109_t wl_escan_result_t;
#define WL_ESCAN_RESULTS_FIXED_SIZE (sizeof(wl_escan_result_t) - sizeof(wl_bss_info_t))
+#endif // endif
typedef struct wl_gscan_result {
uint32 buflen;
uint32 version;
- wl_gscan_bss_info_t bss_info[1];
-} wl_gscan_result_t;
+ uint32 scan_ch_bucket;
+ wl_gscan_bss_info_v2_t bss_info[1];
+} wl_gscan_result_v2_t;
+typedef struct wl_gscan_result_v2_1 {
+ uint32 buflen;
+ uint32 version;
+ uint32 scan_ch_bucket;
+ uint8 bss_info[]; /* var length wl_bss_info_X structures */
+} wl_gscan_result_v2_1_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_gscan_result_v2_t wl_gscan_result_t;
#define WL_GSCAN_RESULTS_FIXED_SIZE (sizeof(wl_gscan_result_t) - sizeof(wl_gscan_bss_info_t))
+#endif // endif
-/* incremental scan results struct */
+/** incremental scan results struct */
typedef struct wl_iscan_results {
uint32 status;
- wl_scan_results_t results;
-} wl_iscan_results_t;
+ wl_scan_results_v109_t results;
+} wl_iscan_results_v109_t;
-/* size of wl_iscan_results not including variable length array */
+/** incremental scan results struct */
+typedef struct wl_iscan_results_v2 {
+ uint32 status;
+ wl_scan_results_v2_t results;
+} wl_iscan_results_v2_t;
+
+#ifndef WL_BSS_INFO_TYPEDEF_HAS_ALIAS
+typedef wl_iscan_results_v109_t wl_iscan_results_t;
+/** size of wl_iscan_results not including variable length array */
#define WL_ISCAN_RESULTS_FIXED_SIZE \
(WL_SCAN_RESULTS_FIXED_SIZE + OFFSETOF(wl_iscan_results_t, results))
-
-#define SCANOL_PARAMS_VERSION 1
-
-typedef struct scanol_params {
- uint32 version;
- uint32 flags; /**< offload scanning flags */
- int32 active_time; /**< -1 use default, dwell time per channel for active scanning */
- int32 passive_time; /**< -1 use default, dwell time per channel for passive scanning */
- int32 idle_rest_time; /**< -1 use default, time idle between scan cycle */
- int32 idle_rest_time_multiplier;
- int32 active_rest_time;
- int32 active_rest_time_multiplier;
- int32 scan_cycle_idle_rest_time;
- int32 scan_cycle_idle_rest_multiplier;
- int32 scan_cycle_active_rest_time;
- int32 scan_cycle_active_rest_multiplier;
- int32 max_rest_time;
- int32 max_scan_cycles;
- int32 nprobes; /**< -1 use default, number of probes per channel */
- int32 scan_start_delay;
- uint32 nchannels;
- uint32 ssid_count;
- wlc_ssid_t ssidlist[1];
-} scanol_params_t;
+#endif // endif
typedef struct wl_probe_params {
wlc_ssid_t ssid;
@@ -740,17 +1021,51 @@
} wl_probe_params_t;
#define WL_MAXRATES_IN_SET 16 /**< max # of rates in a rateset */
+
typedef struct wl_rateset {
- uint32 count; /**< # rates in this set */
+ uint32 count; /**< # rates in this set */
uint8 rates[WL_MAXRATES_IN_SET]; /**< rates in 500kbps units w/hi bit set if basic */
} wl_rateset_t;
-typedef struct wl_rateset_args {
- uint32 count; /**< # rates in this set */
+#define WL_VHT_CAP_MCS_MAP_NSS_MAX 8
+
+typedef struct wl_rateset_args_v1 {
+ uint32 count; /**< # rates in this set */
uint8 rates[WL_MAXRATES_IN_SET]; /**< rates in 500kbps units w/hi bit set if basic */
- uint8 mcs[MCSSET_LEN]; /* supported mcs index bit map */
- uint16 vht_mcs[VHT_CAP_MCS_MAP_NSS_MAX]; /* supported mcs index bit map per nss */
-} wl_rateset_args_t;
+ uint8 mcs[MCSSET_LEN]; /**< supported mcs index bit map */
+ uint16 vht_mcs[WL_VHT_CAP_MCS_MAP_NSS_MAX]; /**< supported mcs index bit map per nss */
+} wl_rateset_args_v1_t;
+
+#define RATESET_ARGS_V1 (1)
+#define RATESET_ARGS_V2 (2)
+
+#ifndef RATESET_VERSION_ENABLED
+/* rateset structure before versioning. legacy. DONOT update anymore here */
+#define RATESET_ARGS_VERSION (RATESET_ARGS_V1)
+typedef wl_rateset_args_v1_t wl_rateset_args_t;
+#endif /* RATESET_VERSION_ENABLED */
+
+/* Note: dependent structures: sta_info_vX_t. When any update to this structure happens,
+ * update sta_info_vX_t also.
+ */
+#define WL_HE_CAP_MCS_MAP_NSS_MAX 8
+
+typedef struct wl_rateset_args_v2 {
+ uint16 version; /**< version. */
+ uint16 len; /**< length */
+ uint32 count; /**< # rates in this set */
+ uint8 rates[WL_MAXRATES_IN_SET]; /**< rates in 500kbps units w/hi bit set if basic */
+ uint8 mcs[MCSSET_LEN]; /**< supported mcs index bit map */
+ uint16 vht_mcs[WL_VHT_CAP_MCS_MAP_NSS_MAX]; /**< supported mcs index bit map per nss */
+ uint16 he_mcs[WL_HE_CAP_MCS_MAP_NSS_MAX]; /**< supported he mcs index bit map per nss */
+} wl_rateset_args_v2_t;
+
+/* HE Rates BITMAP */
+#define WL_HE_CAP_MCS_0_7_MAP 0x00ff
+#define WL_HE_CAP_MCS_0_8_MAP 0x01ff
+#define WL_HE_CAP_MCS_0_9_MAP 0x03ff
+#define WL_HE_CAP_MCS_0_10_MAP 0x07ff
+#define WL_HE_CAP_MCS_0_11_MAP 0x0fff
#define TXBF_RATE_MCS_ALL 4
#define TXBF_RATE_VHT_ALL 4
@@ -767,6 +1082,26 @@
uint8 txbf_rate_ofdm_cnt_bcm;
} wl_txbf_rateset_t;
+#define NUM_BFGAIN_ARRAY_1RX 2
+#define NUM_BFGAIN_ARRAY_2RX 3
+#define NUM_BFGAIN_ARRAY_3RX 4
+#define NUM_BFGAIN_ARRAY_4RX 5
+
+typedef struct wl_txbf_expgainset {
+ /* bitmap for each element: B[4:0]=>c0, B[9:5]=>c1, B[14:10]=>c2, B[19:15]=>c[3-7]
+ * B[24:20]=>c[8-9], B[29:25]=>c[10-11]
+ */
+ uint32 bfgain_2x1[NUM_BFGAIN_ARRAY_1RX]; /* exp 1ss, imp 1ss */
+ uint32 bfgain_2x2[NUM_BFGAIN_ARRAY_2RX]; /* exp [1-2]ss, imp 1ss */
+ uint32 bfgain_3x1[NUM_BFGAIN_ARRAY_1RX];
+ uint32 bfgain_3x2[NUM_BFGAIN_ARRAY_2RX];
+ uint32 bfgain_3x3[NUM_BFGAIN_ARRAY_3RX]; /* exp [1-3]ss, imp 1ss */
+ uint32 bfgain_4x1[NUM_BFGAIN_ARRAY_1RX];
+ uint32 bfgain_4x2[NUM_BFGAIN_ARRAY_2RX];
+ uint32 bfgain_4x3[NUM_BFGAIN_ARRAY_3RX];
+ uint32 bfgain_4x4[NUM_BFGAIN_ARRAY_4RX]; /* exp [1-4]ss, imp 1ss */
+} wl_txbf_expgainset_t;
+
#define OFDM_RATE_MASK 0x0000007f
typedef uint8 ofdm_rates_t;
@@ -779,17 +1114,23 @@
uint8 mcsallow;
uint8 bw;
uint8 txstreams;
+ uint8 PAD[3];
} wl_rates_info_t;
-/* uint32 list */
+/**uint32 list */
typedef struct wl_uint32_list {
- /* in - # of elements, out - # of entries */
+ /** in - # of elements, out - # of entries */
uint32 count;
- /* variable length uint32 list */
+ /** variable length uint32 list */
uint32 element[1];
} wl_uint32_list_t;
-/* used for association with a specific BSSID and chanspec list */
+/* WLC_SET_ALLOW_MODE values */
+#define ALLOW_MODE_ANY_BSSID 0
+#define ALLOW_MODE_ONLY_DESIRED_BSSID 1
+#define ALLOW_MODE_NO_BSSID 2
+
+/** used for association with a specific BSSID and chanspec list */
typedef struct wl_assoc_params {
struct ether_addr bssid; /**< 00:00:00:00:00:00: broadcast scan */
uint16 bssid_cnt; /**< 0: use chanspec_num, and the single bssid,
@@ -806,21 +1147,24 @@
#define WL_ASSOC_PARAMS_FIXED_SIZE OFFSETOF(wl_assoc_params_t, chanspec_list)
-/* used for reassociation/roam to a specific BSSID and channel */
+/** used for reassociation/roam to a specific BSSID and channel */
typedef wl_assoc_params_t wl_reassoc_params_t;
#define WL_REASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE
-/* used for association to a specific BSSID and channel */
+/** used for association to a specific BSSID and channel */
typedef wl_assoc_params_t wl_join_assoc_params_t;
#define WL_JOIN_ASSOC_PARAMS_FIXED_SIZE WL_ASSOC_PARAMS_FIXED_SIZE
-/* used for join with or without a specific bssid and channel list */
+/** used for join with or without a specific bssid and channel list */
typedef struct wl_join_params {
wlc_ssid_t ssid;
wl_assoc_params_t params; /**< optional field, but it must include the fixed portion
* of the wl_assoc_params_t struct when it does present.
*/
} wl_join_params_t;
+
+#define WL_JOIN_PARAMS_FIXED_SIZE (OFFSETOF(wl_join_params_t, params) + \
+ WL_ASSOC_PARAMS_FIXED_SIZE)
typedef struct wlc_roam_exp_params {
int8 a_band_boost_threshold;
@@ -839,9 +1183,8 @@
#define ROAM_EXP_CFG_PRESENT (1 << 1)
typedef struct wl_roam_exp_cfg {
- uint8 version;
- uint8 flags;
- uint16 reserved;
+ uint16 version;
+ uint16 flags;
wlc_roam_exp_params_t params;
} wl_roam_exp_cfg_t;
@@ -856,10 +1199,11 @@
#define ROAM_EXP_CLEAR_BSSID_PREF (1 << 0)
typedef struct wl_bssid_pref_cfg {
- uint8 version;
- uint8 flags;
+ uint16 version;
+ uint16 flags;
uint16 count;
- wl_bssid_pref_list_t bssids[1];
+ uint16 reserved;
+ wl_bssid_pref_list_t bssids[];
} wl_bssid_pref_cfg_t;
#define SSID_WHITELIST_VERSION 1
@@ -871,29 +1215,27 @@
typedef struct wl_ssid_whitelist {
- uint8 version;
- uint8 flags;
+ uint16 version;
+ uint16 flags;
uint8 ssid_count;
- uint8 reserved;
- wlc_ssid_t ssids[1];
+ uint8 reserved[3];
+ wlc_ssid_t ssids[];
} wl_ssid_whitelist_t;
#define ROAM_EXP_EVENT_VERSION 1
typedef struct wl_roam_exp_event {
- uint8 version;
- uint8 flags;
- uint16 reserved;
+ uint16 version;
+ uint16 flags;
wlc_ssid_t cur_ssid;
} wl_roam_exp_event_t;
-#define WL_JOIN_PARAMS_FIXED_SIZE (OFFSETOF(wl_join_params_t, params) + \
- WL_ASSOC_PARAMS_FIXED_SIZE)
-/* scan params for extended join */
+/** scan params for extended join */
typedef struct wl_join_scan_params {
uint8 scan_type; /**< 0 use default, active or passive scan */
+ uint8 PAD[3];
int32 nprobes; /**< -1 use default, number of probes per channel */
int32 active_time; /**< -1 use default, dwell time per channel for
* active scanning
@@ -906,7 +1248,7 @@
*/
} wl_join_scan_params_t;
-/* extended join params */
+/** extended join params */
typedef struct wl_extjoin_params {
wlc_ssid_t ssid; /**< {0, ""}: wildcard scan */
wl_join_scan_params_t scan;
@@ -922,7 +1264,7 @@
#define MAX_STREAMS_SUPPORTED 4 /**< max number of streams supported */
typedef struct {
uint8 ant_config[ANT_SELCFG_MAX]; /**< antenna configuration */
- uint8 num_antcfg; /**< number of available antenna configurations */
+ uint8 num_antcfg; /**< number of available antenna configurations */
} wlc_antselcfg_t;
typedef struct {
@@ -939,7 +1281,6 @@
uint16 num_secs; /**< How many secs worth of data */
cca_congest_t secs[1]; /**< Data */
} cca_congest_channel_req_t;
-
typedef struct {
uint32 duration; /**< millisecs spent sampling this channel */
uint32 congest; /**< millisecs detecting busy CCA */
@@ -949,38 +1290,65 @@
typedef struct {
uint16 status;
uint16 id;
- chanspec_t chanspec; /**< Which channel? */
+ chanspec_t chanspec; /**< Which channel? */
uint16 len;
union {
cca_congest_simple_t cca_busy; /**< CCA busy */
- int noise; /**< noise floor */
+ cca_congest_t cca_busy_ext; /**< Extended CCA report */
+ int32 noise; /**< noise floor */
};
} cca_chan_qual_event_t;
+typedef struct {
+ uint16 status;
+ uint16 id;
+ chanspec_t chanspec; /**< Which channel? */
+ uint16 len;
+ union {
+ cca_congest_simple_t cca_busy; /**< CCA busy */
+ struct {
+ cca_congest_t cca_busy_ext; /**< Extended CCA report */
+ cca_congest_t cca_busy_nopm; /**< Extedned CCA report (PM awake time) */
+ cca_congest_t cca_busy_pm; /**< Extedned CCA report (PM sleep time) */
+ };
+ };
+} cca_only_chan_qual_event_t;
+
+typedef struct {
+ uint32 msrmnt_time; /**< Time for Measurement (msec) */
+ uint32 msrmnt_done; /**< flag set when measurement complete */
+ char buf[];
+} cca_stats_n_flags;
+
+typedef struct {
+ uint32 msrmnt_query; /* host to driver query for measurement done */
+ uint32 time_req; /* time required for measurement */
+ uint8 report_opt; /* option to print different stats in report */
+ uint8 PAD[3];
+} cca_msrmnt_query;
/* interference sources */
enum interference_source {
- ITFR_NONE = 0, /**< interference */
- ITFR_PHONE, /**< wireless phone */
- ITFR_VIDEO_CAMERA, /**< wireless video camera */
- ITFR_MICROWAVE_OVEN, /**< microwave oven */
- ITFR_BABY_MONITOR, /**< wireless baby monitor */
- ITFR_BLUETOOTH, /**< bluetooth */
+ ITFR_NONE = 0, /**< interference */
+ ITFR_PHONE, /**< wireless phone */
+ ITFR_VIDEO_CAMERA, /**< wireless video camera */
+ ITFR_MICROWAVE_OVEN, /**< microwave oven */
+ ITFR_BABY_MONITOR, /**< wireless baby monitor */
+ ITFR_BLUETOOTH, /**< bluetooth */
ITFR_VIDEO_CAMERA_OR_BABY_MONITOR, /**< wireless camera or baby monitor */
ITFR_BLUETOOTH_OR_BABY_MONITOR, /**< bluetooth or baby monitor */
ITFR_VIDEO_CAMERA_OR_PHONE, /**< video camera or phone */
- ITFR_UNIDENTIFIED /**< interference from unidentified source */
+ ITFR_UNIDENTIFIED /**< interference from unidentified source */
};
-/* structure for interference source report */
+/** structure for interference source report */
typedef struct {
- uint32 flags; /**< flags. bit definitions below */
- uint32 source; /**< last detected interference source */
+ uint32 flags; /**< flags. bit definitions below */
+ uint32 source; /**< last detected interference source */
uint32 timestamp; /**< second timestamp on interferenced flag change */
} interference_source_rep_t;
#define WLC_CNTRY_BUF_SZ 4 /**< Country string is 3 bytes + NUL */
-
typedef struct wl_country {
char country_abbrev[WLC_CNTRY_BUF_SZ]; /**< nul-terminated country code used in
@@ -1005,6 +1373,7 @@
WLC_CCODE_ROLE_80211D_ASSOC,
WLC_CCODE_ROLE_80211D_SCAN,
WLC_CCODE_ROLE_DEFAULT,
+ WLC_CCODE_ROLE_DEFAULT_SROM_BKUP,
WLC_CCODE_LAST
} wl_ccode_role_t;
#define WLC_NUM_CCODE_INFO WLC_CCODE_LAST
@@ -1018,11 +1387,10 @@
typedef struct wl_ccode_info {
uint16 version;
- uint16 count; /* Number of ccodes entries in the set */
+ uint16 count; /**< Number of ccodes entries in the set */
wl_ccode_entry_t ccodelist[1];
} wl_ccode_info_t;
#define WL_CCODE_INFO_FIXED_LEN OFFSETOF(wl_ccode_info_t, ccodelist)
-
typedef struct wl_channels_in_country {
uint32 buflen;
uint32 band;
@@ -1083,8 +1451,30 @@
wl_rm_rep_elt_t rep[1]; /**< variable length block of reports */
} wl_rm_rep_t;
#define WL_RM_REP_FIXED_LEN 8
+#ifdef BCMCCX
+#define LEAP_USER_MAX 32
+#define LEAP_DOMAIN_MAX 32
+#define LEAP_PASSWORD_MAX 32
+typedef struct wl_leap_info {
+ wlc_ssid_t ssid;
+ uint8 user_len;
+ uint8 user[LEAP_USER_MAX];
+ uint8 password_len;
+ uint8 password[LEAP_PASSWORD_MAX];
+ uint8 domain_len;
+ uint8 domain[LEAP_DOMAIN_MAX];
+ uint8 PAD;
+} wl_leap_info_t;
+
+typedef struct wl_leap_list {
+ uint32 buflen;
+ uint32 version;
+ uint32 count;
+ wl_leap_info_t leap_info[1];
+} wl_leap_list_t;
+#endif /* BCMCCX */
typedef enum sup_auth_status {
/* Basic supplicant authentication states */
WLC_SUP_DISCONNECTED = 0,
@@ -1098,9 +1488,9 @@
WLC_SUP_LAST_BASIC_STATE,
/* Extended supplicant authentication states */
- /* Waiting to receive handshake msg M1 */
+ /** Waiting to receive handshake msg M1 */
WLC_SUP_KEYXCHANGE_WAIT_M1 = WLC_SUP_AUTHENTICATED,
- /* Preparing to send handshake msg M2 */
+ /** Preparing to send handshake msg M2 */
WLC_SUP_KEYXCHANGE_PREP_M2 = WLC_SUP_KEYXCHANGE,
/* Waiting to receive handshake msg M3 */
WLC_SUP_KEYXCHANGE_WAIT_M3 = WLC_SUP_LAST_BASIC_STATE,
@@ -1117,40 +1507,113 @@
uint32 algo; /**< CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */
uint32 flags; /**< misc flags */
uint32 pad_2[2];
- int pad_3;
- int iv_initialized; /**< has IV been initialized already? */
- int pad_4;
+ int32 pad_3;
+ int32 iv_initialized; /**< has IV been initialized already? */
+ int32 pad_4;
/* Rx IV */
struct {
uint32 hi; /**< upper 32 bits of IV */
uint16 lo; /**< lower 16 bits of IV */
+ uint16 PAD;
} rxiv;
uint32 pad_5[2];
struct ether_addr ea; /**< per station */
+ uint16 PAD;
} wl_wsec_key_t;
#define WSEC_MIN_PSK_LEN 8
#define WSEC_MAX_PSK_LEN 64
-/* Flag for key material needing passhash'ing */
+/** Flag for key material needing passhash'ing */
#define WSEC_PASSPHRASE (1<<0)
-/* receptacle for WLC_SET_WSEC_PMK parameter */
-typedef struct {
+/**receptacle for WLC_SET_WSEC_PMK parameter */
+typedef struct wsec_pmk {
ushort key_len; /**< octets in key material */
ushort flags; /**< key handling qualification */
uint8 key[WSEC_MAX_PSK_LEN]; /**< PMK material */
} wsec_pmk_t;
-typedef struct _pmkid {
- struct ether_addr BSSID;
- uint8 PMKID[WPA2_PMKID_LEN];
-} pmkid_t;
+#define WL_AUTH_EVENT_DATA_V1 0x1
-typedef struct _pmkid_list {
+/* tlv ids for auth event */
+#define WL_AUTH_PMK_TLV_ID 1
+#define WL_AUTH_PMKID_TLV_ID 2
+/* AUTH event data
+* pmk and pmkid in case of SAE auth
+* xtlvs will be 32 bit alligned
+*/
+typedef struct wl_auth_event {
+ uint16 version;
+ uint16 length;
+ uint8 xtlvs[];
+} wl_auth_event_t;
+
+#define WL_AUTH_EVENT_FIXED_LEN_V1 OFFSETOF(wl_auth_event_t, xtlvs)
+
+#define FILS_CACHE_ID_LEN 2
+#define PMK_LEN_MAX 48
+
+typedef struct _pmkid_v1 {
+ struct ether_addr BSSID;
+ uint8 PMKID[WPA2_PMKID_LEN];
+} pmkid_v1_t;
+
+#define PMKID_ELEM_V2_LENGTH (sizeof(struct ether_addr) + WPA2_PMKID_LEN + PMK_LEN_MAX + \
+ sizeof(ssid_info_t) + FILS_CACHE_ID_LEN)
+
+typedef struct _pmkid_v2 {
+ uint16 length; /* Should match PMKID_ELEM_VX_LENGTH */
+ struct ether_addr BSSID;
+ uint8 PMKID[WPA2_PMKID_LEN];
+ uint8 pmk[PMK_LEN_MAX]; /* for FILS key deriviation */
+ uint16 pmk_len;
+ ssid_info_t ssid;
+ uint8 fils_cache_id[FILS_CACHE_ID_LEN];
+} pmkid_v2_t;
+
+typedef struct _pmkid_v3 {
+ struct ether_addr bssid;
+ uint8 pmkid[WPA2_PMKID_LEN];
+ uint8 pmkid_len;
+ uint8 pmk[PMK_LEN_MAX];
+ uint8 pmk_len;
+ uint16 fils_cache_id; /* 2-byte length */
+ uint8 pad;
+ uint8 ssid_len;
+ uint8 ssid[DOT11_MAX_SSID_LEN]; /* For FILS, to save ESSID */
+ /* one pmkid used in whole ESS */
+ uint32 time_left; /* remaining time until expirary in sec. */
+ /* 0 means expired, all 0xFF means never expire */
+} pmkid_v3_t;
+
+#define PMKID_LIST_VER_2 2
+#define PMKID_LIST_VER_3 3
+
+typedef struct _pmkid_list_v1 {
uint32 npmkid;
- pmkid_t pmkid[1];
-} pmkid_list_t;
+ pmkid_v1_t pmkid[1];
+} pmkid_list_v1_t;
+
+typedef struct _pmkid_list_v2 {
+ uint16 version;
+ uint16 length;
+ pmkid_v2_t pmkid[1];
+} pmkid_list_v2_t;
+
+typedef struct _pmkid_list_v3 {
+ uint16 version;
+ uint16 length;
+ uint16 count;
+ uint16 pad;
+ pmkid_v3_t pmkid[];
+} pmkid_list_v3_t;
+
+#ifndef PMKID_VERSION_ENABLED
+/* pmkid structure before versioning. legacy. DONOT update anymore here */
+typedef pmkid_v1_t pmkid_t;
+typedef pmkid_list_v1_t pmkid_list_t;
+#endif /* PMKID_VERSION_ENABLED */
typedef struct _pmkid_cand {
struct ether_addr BSSID;
@@ -1169,26 +1632,28 @@
uint32 resp_len;
uint32 flags;
struct dot11_assoc_req req;
- struct ether_addr reassoc_bssid; /* used in reassoc's */
+ struct ether_addr reassoc_bssid; /**< used in reassoc's */
struct dot11_assoc_resp resp;
+ uint32 state;
} wl_assoc_info_t;
typedef struct wl_led_info {
- uint32 index; /* led index */
+ uint32 index; /**< led index */
uint32 behavior;
uint8 activehi;
+ uint8 PAD[3];
} wl_led_info_t;
-
-/* srom read/write struct passed through ioctl */
+/** srom read/write struct passed through ioctl */
typedef struct {
- uint byteoff; /**< byte offset */
- uint nbytes; /**< number of bytes */
- uint16 buf[1];
+ uint32 byteoff; /**< byte offset */
+ uint32 nbytes; /**< number of bytes */
+ uint16 buf[];
} srom_rw_t;
-#define CISH_FLAG_PCIECIS (1 << 15) /* write CIS format bit for PCIe CIS */
-/* similar cis (srom or otp) struct [iovar: may not be aligned] */
+#define CISH_FLAG_PCIECIS (1 << 15) /**< write CIS format bit for PCIe CIS */
+
+/** similar cis (srom or otp) struct [iovar: may not be aligned] */
typedef struct {
uint16 source; /**< cis source */
uint16 flags; /**< flags */
@@ -1197,16 +1662,18 @@
/* data follows here */
} cis_rw_t;
-/* R_REG and W_REG struct passed through ioctl */
+/** R_REG and W_REG struct passed through ioctl */
typedef struct {
uint32 byteoff; /**< byte offset of the field in d11regs_t */
uint32 val; /**< read/write value of the field */
uint32 size; /**< sizeof the field */
- uint band; /**< band (optional) */
+ uint32 band; /**< band (optional) */
} rw_reg_t;
-/* Structure used by GET/SET_ATTEN ioctls - it controls power in b/g-band */
-/* PCL - Power Control Loop */
+/**
+ * Structure used by GET/SET_ATTEN ioctls - it controls power in b/g-band
+ * PCL - Power Control Loop
+ */
typedef struct {
uint16 auto_ctrl; /**< WL_ATTEN_XX */
uint16 bb; /**< Baseband attenuation */
@@ -1214,26 +1681,26 @@
uint16 txctl1; /**< Radio TX_CTL1 value */
} atten_t;
-/* Per-AC retry parameters */
+/** Per-AC retry parameters */
struct wme_tx_params_s {
uint8 short_retry;
uint8 short_fallback;
uint8 long_retry;
uint8 long_fallback;
- uint16 max_rate; /* In units of 512 Kbps */
+ uint16 max_rate; /**< In units of 512 Kbps */
};
typedef struct wme_tx_params_s wme_tx_params_t;
#define WL_WME_TX_PARAMS_IO_BYTES (sizeof(wme_tx_params_t) * AC_COUNT)
-/* Used to get specific link/ac parameters */
+/**Used to get specific link/ac parameters */
typedef struct {
int32 ac;
uint8 val;
struct ether_addr ea;
+ uint8 PAD;
} link_val_t;
-
#define WL_PM_MUTE_TX_VER 1
@@ -1242,19 +1709,22 @@
uint16 len; /**< length */
uint16 deadline; /**< deadline timer (in milliseconds) */
uint8 enable; /**< set to 1 to enable mode; set to 0 to disable it */
+ uint8 PAD;
} wl_pm_mute_tx_t;
-
+/* sta_info_t version 4 */
typedef struct {
uint16 ver; /**< version of this struct */
uint16 len; /**< length in bytes of this structure */
uint16 cap; /**< sta's advertised capabilities */
+ uint16 PAD;
uint32 flags; /**< flags defined below */
uint32 idle; /**< time since data pkt rx'd from sta */
struct ether_addr ea; /**< Station address */
- wl_rateset_t rateset; /**< rateset in use */
+ uint16 PAD;
+ wl_rateset_t rateset; /**< rateset in use */
uint32 in; /**< seconds elapsed since associated */
- uint32 listen_interval_inms; /* Min Listen interval in ms for this STA */
+ uint32 listen_interval_inms; /**< Min Listen interval in ms for this STA */
uint32 tx_pkts; /**< # of user packets transmitted (unicast) */
uint32 tx_failures; /**< # of user packets failed */
uint32 rx_ucast_pkts; /**< # of unicast packets received */
@@ -1272,20 +1742,21 @@
uint64 tx_mcast_bytes; /**< # data bytes txed (mcast) */
uint64 rx_ucast_bytes; /**< data bytes recvd (ucast) */
uint64 rx_mcast_bytes; /**< data bytes recvd (mcast) */
- int8 rssi[WL_STA_ANT_MAX]; /* average rssi per antenna
- * of data frames
- */
+ int8 rssi[WL_STA_ANT_MAX]; /**< average rssi per antenna
+ * of data frames
+ */
int8 nf[WL_STA_ANT_MAX]; /**< per antenna noise floor */
- uint16 aid; /**< association ID */
+ uint16 aid; /**< association ID */
uint16 ht_capabilities; /**< advertised ht caps */
uint16 vht_flags; /**< converted vht flags */
+ uint16 PAD;
uint32 tx_pkts_retried; /**< # of frames where a retry was
* necessary
*/
- uint32 tx_pkts_retry_exhausted; /* # of user frames where a retry
+ uint32 tx_pkts_retry_exhausted; /**< # of user frames where a retry
* was exhausted
*/
- int8 rx_lastpkt_rssi[WL_STA_ANT_MAX]; /* Per antenna RSSI of last
+ int8 rx_lastpkt_rssi[WL_STA_ANT_MAX]; /**< Per antenna RSSI of last
* received data frame.
*/
/* TX WLAN retry/failure statistics:
@@ -1301,13 +1772,167 @@
*/
uint32 rx_pkts_retried; /**< # rx with retry bit set */
uint32 tx_rate_fallback; /**< lowest fallback TX rate */
-} sta_info_t;
+ /* Fields above this line are common to sta_info_t versions 4 and 5 */
+
+ uint32 rx_dur_total; /* total user RX duration (estimated) */
+
+ chanspec_t chanspec; /** chanspec this sta is on */
+ uint16 PAD;
+ wl_rateset_args_v1_t rateset_adv; /* rateset along with mcs index bitmap */
+ uint32 PAD;
+} sta_info_v4_t;
+
+/* Note: Version 4 is the latest version of sta_info_t. Version 5 is abandoned.
+ * Please add new fields to version 4, not version 5.
+ */
+/* sta_info_t version 5 */
+typedef struct {
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length in bytes of this structure */
+ uint16 cap; /**< sta's advertised capabilities */
+ uint16 PAD;
+ uint32 flags; /**< flags defined below */
+ uint32 idle; /**< time since data pkt rx'd from sta */
+ struct ether_addr ea; /**< Station address */
+ uint16 PAD;
+ wl_rateset_t rateset; /**< rateset in use */
+ uint32 in; /**< seconds elapsed since associated */
+ uint32 listen_interval_inms; /**< Min Listen interval in ms for this STA */
+ uint32 tx_pkts; /**< # of user packets transmitted (unicast) */
+ uint32 tx_failures; /**< # of user packets failed */
+ uint32 rx_ucast_pkts; /**< # of unicast packets received */
+ uint32 rx_mcast_pkts; /**< # of multicast packets received */
+ uint32 tx_rate; /**< Rate used by last tx frame */
+ uint32 rx_rate; /**< Rate of last successful rx frame */
+ uint32 rx_decrypt_succeeds; /**< # of packet decrypted successfully */
+ uint32 rx_decrypt_failures; /**< # of packet decrypted unsuccessfully */
+ uint32 tx_tot_pkts; /**< # of user tx pkts (ucast + mcast) */
+ uint32 rx_tot_pkts; /**< # of data packets recvd (uni + mcast) */
+ uint32 tx_mcast_pkts; /**< # of mcast pkts txed */
+ uint64 tx_tot_bytes; /**< data bytes txed (ucast + mcast) */
+ uint64 rx_tot_bytes; /**< data bytes recvd (ucast + mcast) */
+ uint64 tx_ucast_bytes; /**< data bytes txed (ucast) */
+ uint64 tx_mcast_bytes; /**< # data bytes txed (mcast) */
+ uint64 rx_ucast_bytes; /**< data bytes recvd (ucast) */
+ uint64 rx_mcast_bytes; /**< data bytes recvd (mcast) */
+ int8 rssi[WL_STA_ANT_MAX]; /**< average rssi per antenna
+ * of data frames
+ */
+ int8 nf[WL_STA_ANT_MAX]; /**< per antenna noise floor */
+ uint16 aid; /**< association ID */
+ uint16 ht_capabilities; /**< advertised ht caps */
+ uint16 vht_flags; /**< converted vht flags */
+ uint16 PAD;
+ uint32 tx_pkts_retried; /**< # of frames where a retry was
+ * necessary
+ */
+ uint32 tx_pkts_retry_exhausted; /**< # of user frames where a retry
+ * was exhausted
+ */
+ int8 rx_lastpkt_rssi[WL_STA_ANT_MAX]; /**< Per antenna RSSI of last
+ * received data frame.
+ */
+ /* TX WLAN retry/failure statistics:
+ * Separated for host requested frames and WLAN locally generated frames.
+ * Include unicast frame only where the retries/failures can be counted.
+ */
+ uint32 tx_pkts_total; /**< # user frames sent successfully */
+ uint32 tx_pkts_retries; /**< # user frames retries */
+ uint32 tx_pkts_fw_total; /**< # FW generated sent successfully */
+ uint32 tx_pkts_fw_retries; /**< # retries for FW generated frames */
+ uint32 tx_pkts_fw_retry_exhausted; /**< # FW generated where a retry
+ * was exhausted
+ */
+ uint32 rx_pkts_retried; /**< # rx with retry bit set */
+ uint32 tx_rate_fallback; /**< lowest fallback TX rate */
+ /* Fields above this line are common to sta_info_t versions 4 and 5 */
+
+ chanspec_t chanspec; /** chanspec this sta is on */
+ uint16 PAD;
+ wl_rateset_args_v1_t rateset_adv; /* rateset along with mcs index bitmap */
+} sta_info_v5_t;
+
+/* sta_info_t version 6
+ changes to wl_rateset_args_t is leading to update this struct version as well.
+ */
+typedef struct {
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length in bytes of this structure */
+ uint16 cap; /**< sta's advertised capabilities */
+ uint16 PAD;
+ uint32 flags; /**< flags defined below */
+ uint32 idle; /**< time since data pkt rx'd from sta */
+ struct ether_addr ea; /**< Station address */
+ uint16 PAD;
+ wl_rateset_t rateset; /**< rateset in use */
+ uint32 in; /**< seconds elapsed since associated */
+ uint32 listen_interval_inms; /**< Min Listen interval in ms for this STA */
+ uint32 tx_pkts; /**< # of user packets transmitted (unicast) */
+ uint32 tx_failures; /**< # of user packets failed */
+ uint32 rx_ucast_pkts; /**< # of unicast packets received */
+ uint32 rx_mcast_pkts; /**< # of multicast packets received */
+ uint32 tx_rate; /**< Rate used by last tx frame */
+ uint32 rx_rate; /**< Rate of last successful rx frame */
+ uint32 rx_decrypt_succeeds; /**< # of packet decrypted successfully */
+ uint32 rx_decrypt_failures; /**< # of packet decrypted unsuccessfully */
+ uint32 tx_tot_pkts; /**< # of user tx pkts (ucast + mcast) */
+ uint32 rx_tot_pkts; /**< # of data packets recvd (uni + mcast) */
+ uint32 tx_mcast_pkts; /**< # of mcast pkts txed */
+ uint64 tx_tot_bytes; /**< data bytes txed (ucast + mcast) */
+ uint64 rx_tot_bytes; /**< data bytes recvd (ucast + mcast) */
+ uint64 tx_ucast_bytes; /**< data bytes txed (ucast) */
+ uint64 tx_mcast_bytes; /**< # data bytes txed (mcast) */
+ uint64 rx_ucast_bytes; /**< data bytes recvd (ucast) */
+ uint64 rx_mcast_bytes; /**< data bytes recvd (mcast) */
+ int8 rssi[WL_STA_ANT_MAX]; /**< average rssi per antenna
+ * of data frames
+ */
+ int8 nf[WL_STA_ANT_MAX]; /**< per antenna noise floor */
+ uint16 aid; /**< association ID */
+ uint16 ht_capabilities; /**< advertised ht caps */
+ uint16 vht_flags; /**< converted vht flags */
+ uint16 PAD;
+ uint32 tx_pkts_retried; /**< # of frames where a retry was
+ * necessary
+ */
+ uint32 tx_pkts_retry_exhausted; /**< # of user frames where a retry
+ * was exhausted
+ */
+ int8 rx_lastpkt_rssi[WL_STA_ANT_MAX]; /**< Per antenna RSSI of last
+ * received data frame.
+ */
+ /* TX WLAN retry/failure statistics:
+ * Separated for host requested frames and WLAN locally generated frames.
+ * Include unicast frame only where the retries/failures can be counted.
+ */
+ uint32 tx_pkts_total; /**< # user frames sent successfully */
+ uint32 tx_pkts_retries; /**< # user frames retries */
+ uint32 tx_pkts_fw_total; /**< # FW generated sent successfully */
+ uint32 tx_pkts_fw_retries; /**< # retries for FW generated frames */
+ uint32 tx_pkts_fw_retry_exhausted; /**< # FW generated where a retry
+ * was exhausted
+ */
+ uint32 rx_pkts_retried; /**< # rx with retry bit set */
+ uint32 tx_rate_fallback; /**< lowest fallback TX rate */
+ /* Fields above this line are common to sta_info_t versions 4 and 5 */
+
+ uint32 rx_dur_total; /* total user RX duration (estimated) */
+
+ chanspec_t chanspec; /** chanspec this sta is on */
+ uint16 PAD;
+ wl_rateset_args_v2_t rateset_adv; /* rateset along with mcs index bitmap */
+} sta_info_v6_t;
#define WL_OLD_STAINFO_SIZE OFFSETOF(sta_info_t, tx_tot_pkts)
-#define WL_STA_VER 4
+#define WL_STA_VER_4 4
+#define WL_STA_VER_5 5
+#define WL_STA_VER WL_STA_VER_4
-typedef struct {
+#define SWDIV_STATS_VERSION_2 2
+#define SWDIV_STATS_CURRENT_VERSION SWDIV_STATS_VERSION_2
+
+struct wlc_swdiv_stats_v1 {
uint32 auto_en;
uint32 active_ant;
uint32 rxcount;
@@ -1334,57 +1959,102 @@
uint32 rx_policy;
uint32 tx_policy;
uint32 cell_policy;
-} wlc_swdiv_stats_t;
+ uint32 swap_snrdrop0;
+ uint32 swap_snrdrop1;
+ uint32 mws_antsel_ovr_tx;
+ uint32 mws_antsel_ovr_rx;
+ uint8 swap_trig_event_id;
+};
+
+struct wlc_swdiv_stats_v2 {
+ uint16 version; /* version of the structure
+ * as defined by SWDIV_STATS_CURRENT_VERSION
+ */
+ uint16 length; /* length of the entire structure */
+ uint32 auto_en;
+ uint32 active_ant;
+ uint32 rxcount;
+ int32 avg_snr_per_ant0;
+ int32 avg_snr_per_ant1;
+ int32 avg_snr_per_ant2;
+ uint32 swap_ge_rxcount0;
+ uint32 swap_ge_rxcount1;
+ uint32 swap_ge_snrthresh0;
+ uint32 swap_ge_snrthresh1;
+ uint32 swap_txfail0;
+ uint32 swap_txfail1;
+ uint32 swap_timer0;
+ uint32 swap_timer1;
+ uint32 swap_alivecheck0;
+ uint32 swap_alivecheck1;
+ uint32 rxcount_per_ant0;
+ uint32 rxcount_per_ant1;
+ uint32 acc_rxcount;
+ uint32 acc_rxcount_per_ant0;
+ uint32 acc_rxcount_per_ant1;
+ uint32 tx_auto_en;
+ uint32 tx_active_ant;
+ uint32 rx_policy;
+ uint32 tx_policy;
+ uint32 cell_policy;
+ uint32 swap_snrdrop0;
+ uint32 swap_snrdrop1;
+ uint32 mws_antsel_ovr_tx;
+ uint32 mws_antsel_ovr_rx;
+ uint32 swap_trig_event_id;
+};
#define WLC_NUMRATES 16 /**< max # of rates in a rateset */
-typedef struct wlc_rateset {
- uint32 count; /**< number of rates in rates[] */
- uint8 rates[WLC_NUMRATES]; /**< rates in 500kbps units w/hi bit set if basic */
- uint8 htphy_membership; /**< HT PHY Membership */
- uint8 mcs[MCSSET_LEN]; /**< supported mcs index bit map */
- uint16 vht_mcsmap; /**< supported vht mcs nss bit map */
- uint16 vht_mcsmap_prop; /**< supported prop vht mcs nss bit map */
-} wlc_rateset_t;
-
-/* Used to get specific STA parameters */
+/**Used to get specific STA parameters */
typedef struct {
uint32 val;
struct ether_addr ea;
+ uint16 PAD;
} scb_val_t;
-/* Used by iovar versions of some ioctls, i.e. WLC_SCB_AUTHORIZE et al */
+/**Used by iovar versions of some ioctls, i.e. WLC_SCB_AUTHORIZE et al */
typedef struct {
uint32 code;
scb_val_t ioctl_args;
} authops_t;
-/* channel encoding */
+/** channel encoding */
typedef struct channel_info {
- int hw_channel;
- int target_channel;
- int scan_channel;
+ int32 hw_channel;
+ int32 target_channel;
+ int32 scan_channel;
} channel_info_t;
-/* For ioctls that take a list of MAC addresses */
+/** For ioctls that take a list of MAC addresses */
typedef struct maclist {
- uint count; /**< number of MAC addresses */
+ uint32 count; /**< number of MAC addresses */
struct ether_addr ea[1]; /**< variable length array of MAC addresses */
} maclist_t;
-struct peer_maclist {
- uint16 count; /* number of MAC addresses */
- uint16 flag; /* to check if peering or cancellation has to be triggered in iovar */
- struct ether_addr ea[1]; /* variable length array of MAC addresses */
-};
+typedef struct wds_client_info {
+ char ifname[INTF_NAME_SIZ]; /* WDS ifname */
+ struct ether_addr ea; /* WDS client MAC address */
+} wds_client_info_t;
-/* get pkt count struct passed through ioctl */
+#define WDS_MACLIST_MAGIC 0xFFFFFFFF
+#define WDS_MACLIST_VERSION 1
+
+/* For wds MAC list ioctls */
+typedef struct wds_maclist {
+ uint32 count; /* Number of WDS clients */
+ uint32 magic; /* Magic number */
+ uint32 version; /* Version number */
+ struct wds_client_info client_list[1]; /* Variable length array of WDS clients */
+} wds_maclist_t;
+
+/**get pkt count struct passed through ioctl */
typedef struct get_pktcnt {
- uint rx_good_pkt;
- uint rx_bad_pkt;
- uint tx_good_pkt;
- uint tx_bad_pkt;
- uint rx_ocast_good_pkt; /* unicast packets destined for others */
+ uint32 rx_good_pkt;
+ uint32 rx_bad_pkt;
+ uint32 tx_good_pkt;
+ uint32 tx_bad_pkt;
+ uint32 rx_ocast_good_pkt; /**< unicast packets destined for others */
} get_pktcnt_t;
/* NINTENDO2 */
@@ -1396,12 +2066,13 @@
#define LQ_STOP_MONITOR 0
#define LQ_START_MONITOR 1
-/* Get averages RSSI, Rx PHY rate and SNR values */
+/** Get averages RSSI, Rx PHY rate and SNR values */
+/* Link Quality */
typedef struct {
- int rssi[LQ_IDX_LAST]; /* Array to keep min, max, avg rssi */
- int snr[LQ_IDX_LAST]; /* Array to keep min, max, avg snr */
- int isvalid; /* Flag indicating whether above data is valid */
-} wl_lq_t; /* Link Quality */
+ int32 rssi[LQ_IDX_LAST]; /**< Array to keep min, max, avg rssi */
+ int32 snr[LQ_IDX_LAST]; /**< Array to keep min, max, avg snr */
+ int32 isvalid; /**< Flag indicating whether above data is valid */
+} wl_lq_t;
typedef enum wl_wakeup_reason_type {
LCD_ON = 1,
@@ -1412,91 +2083,104 @@
} wl_wr_type_t;
typedef struct {
-/* Unique filter id */
+ /** Unique filter id */
uint32 id;
-
-/* stores the reason for the last wake up */
+ /** stores the reason for the last wake up */
uint8 reason;
+ uint8 PAD[3];
} wl_wr_t;
-/* Get MAC specific rate histogram command */
+/** Get MAC specific rate histogram command */
typedef struct {
struct ether_addr ea; /**< MAC Address */
uint8 ac_cat; /**< Access Category */
uint8 num_pkts; /**< Number of packet entries to be averaged */
-} wl_mac_ratehisto_cmd_t; /**< MAC Specific Rate Histogram command */
-
-/* Get MAC rate histogram response */
+} wl_mac_ratehisto_cmd_t;
+/** Get MAC rate histogram response */
typedef struct {
uint32 rate[DOT11_RATE_MAX + 1]; /**< Rates */
uint32 mcs[WL_RATESET_SZ_HT_IOCTL * WL_TX_CHAINS_MAX]; /**< MCS counts */
uint32 vht[WL_RATESET_SZ_VHT_MCS][WL_TX_CHAINS_MAX]; /**< VHT counts */
uint32 tsf_timer[2][2]; /**< Start and End time for 8bytes value */
- uint32 prop11n_mcs[WLC_11N_LAST_PROP_MCS - WLC_11N_FIRST_PROP_MCS + 1]; /* MCS counts */
-} wl_mac_ratehisto_res_t; /**< MAC Specific Rate Histogram Response */
+ uint32 prop11n_mcs[WLC_11N_LAST_PROP_MCS - WLC_11N_FIRST_PROP_MCS + 1]; /** MCS counts */
+} wl_mac_ratehisto_res_t;
-/* Linux network driver ioctl encoding */
+/* sta_info ecounters */
+typedef struct {
+ struct ether_addr ea; /* Station MAC addr */
+ struct ether_addr BSSID; /* BSSID of the BSS */
+ uint32 tx_pkts_fw_total; /* # FW generated sent successfully */
+ uint32 tx_pkts_fw_retries; /* # retries for FW generated frames */
+ uint32 tx_pkts_fw_retry_exhausted; /* # FW generated which
+ * failed after retry
+ */
+} sta_info_ecounters_t;
+
+#define STAMON_MODULE_VER 1
+
+/**Linux network driver ioctl encoding */
typedef struct wl_ioctl {
- uint cmd; /**< common ioctl definition */
+ uint32 cmd; /**< common ioctl definition */
void *buf; /**< pointer to user buffer */
- uint len; /**< length of user buffer */
+ uint32 len; /**< length of user buffer */
uint8 set; /**< 1=set IOCTL; 0=query IOCTL */
- uint used; /**< bytes read or written (optional) */
- uint needed; /**< bytes needed (optional) */
+ uint32 used; /**< bytes read or written (optional) */
+ uint32 needed; /**< bytes needed (optional) */
} wl_ioctl_t;
-#ifdef CONFIG_COMPAT
-typedef struct compat_wl_ioctl {
- uint cmd; /**< common ioctl definition */
- uint32 buf; /**< pointer to user buffer */
- uint len; /**< length of user buffer */
- uint8 set; /**< 1=set IOCTL; 0=query IOCTL */
- uint used; /**< bytes read or written (optional) */
- uint needed; /**< bytes needed (optional) */
-} compat_wl_ioctl_t;
-#endif /* CONFIG_COMPAT */
-
-#define WL_NUM_RATES_CCK 4 /* 1, 2, 5.5, 11 Mbps */
-#define WL_NUM_RATES_OFDM 8 /* 6, 9, 12, 18, 24, 36, 48, 54 Mbps SISO/CDD */
-#define WL_NUM_RATES_MCS_1STREAM 8 /* MCS 0-7 1-stream rates - SISO/CDD/STBC/MCS */
-#define WL_NUM_RATES_EXTRA_VHT 2 /* Additional VHT 11AC rates */
-#define WL_NUM_RATES_VHT 10
-#define WL_NUM_RATES_MCS32 1
-
+#define WL_NUM_RATES_CCK 4 /**< 1, 2, 5.5, 11 Mbps */
+#define WL_NUM_RATES_OFDM 8 /**< 6, 9, 12, 18, 24, 36, 48, 54 Mbps SISO/CDD */
+#define WL_NUM_RATES_MCS_1STREAM 8 /**< MCS 0-7 1-stream rates - SISO/CDD/STBC/MCS */
+#define WL_NUM_RATES_EXTRA_VHT 2 /**< Additional VHT 11AC rates */
+#define WL_NUM_RATES_VHT 10
+#define WL_NUM_RATES_VHT_ALL (WL_NUM_RATES_VHT + WL_NUM_RATES_EXTRA_VHT)
+#define WL_NUM_RATES_HE 12
+#define WL_NUM_RATES_MCS32 1
+#define UC_URL_LEN 128u /**< uCode URL length */
/*
* Structure for passing hardware and software
* revision info up from the driver.
*/
typedef struct wlc_rev_info {
- uint vendorid; /**< PCI vendor id */
- uint deviceid; /**< device id of chip */
- uint radiorev; /**< radio revision */
- uint chiprev; /**< chip revision */
- uint corerev; /**< core revision */
- uint boardid; /**< board identifier (usu. PCI sub-device id) */
- uint boardvendor; /**< board vendor (usu. PCI sub-vendor id) */
- uint boardrev; /**< board revision */
- uint driverrev; /**< driver version */
- uint ucoderev; /**< microcode version */
- uint bus; /**< bus type */
- uint chipnum; /**< chip number */
- uint phytype; /**< phy type */
- uint phyrev; /**< phy revision */
- uint anarev; /**< anacore rev */
- uint chippkg; /**< chip package info */
- uint nvramrev; /**< nvram revision number */
+ uint32 vendorid; /**< PCI vendor id */
+ uint32 deviceid; /**< device id of chip */
+ uint32 radiorev; /**< radio revision */
+ uint32 chiprev; /**< chip revision */
+ uint32 corerev; /**< core revision */
+ uint32 boardid; /**< board identifier (usu. PCI sub-device id) */
+ uint32 boardvendor; /**< board vendor (usu. PCI sub-vendor id) */
+ uint32 boardrev; /**< board revision */
+ uint32 driverrev; /**< driver version */
+ uint32 ucoderev; /**< uCode version */
+ uint32 bus; /**< bus type */
+ uint32 chipnum; /**< chip number */
+ uint32 phytype; /**< phy type */
+ uint32 phyrev; /**< phy revision */
+ uint32 anarev; /**< anacore rev */
+ uint32 chippkg; /**< chip package info */
+ uint32 nvramrev; /**< nvram revision number */
+ uint32 phyminorrev; /**< phy minor rev */
+ uint32 coreminorrev; /**< core minor rev */
+ uint32 drvrev_major; /**< driver version: major */
+ uint32 drvrev_minor; /**< driver version: minor */
+ uint32 drvrev_rc; /**< driver version: rc */
+ uint32 drvrev_rc_inc; /**< driver version: rc incremental */
+ uint16 ucodeprebuilt; /**< uCode prebuilt flag */
+ uint16 ucodediffct; /**< uCode diff count */
+ uchar ucodeurl[UC_URL_LEN]; /**< uCode repo URL@cmt_id */
} wlc_rev_info_t;
#define WL_REV_INFO_LEGACY_LENGTH 48
#define WL_BRAND_MAX 10
typedef struct wl_instance_info {
- uint instance;
- char brand[WL_BRAND_MAX];
+ uint32 instance;
+ int8 brand[WL_BRAND_MAX];
+ int8 PAD[4-(WL_BRAND_MAX%4)];
} wl_instance_info_t;
-/* structure to change size of tx fifo */
+/** structure to change size of tx fifo */
typedef struct wl_txfifo_sz {
uint16 magic;
uint16 fifo;
@@ -1504,30 +2188,27 @@
} wl_txfifo_sz_t;
/* Transfer info about an IOVar from the driver */
-/* Max supported IOV name size in bytes, + 1 for nul termination */
-#define WLC_IOV_NAME_LEN 30
+/**Max supported IOV name size in bytes, + 1 for nul termination */
+#define WLC_IOV_NAME_LEN (32 + 1)
+
typedef struct wlc_iov_trx_s {
uint8 module;
uint8 type;
char name[WLC_IOV_NAME_LEN];
} wlc_iov_trx_t;
-/* bump this number if you change the ioctl interface */
+/** bump this number if you change the ioctl interface */
#define WLC_IOCTL_VERSION 2
#define WLC_IOCTL_VERSION_LEGACY_IOTYPES 1
-
-#ifdef CONFIG_USBRNDIS_RETAIL
-/* struct passed in for WLC_NDCONFIG_ITEM */
-typedef struct {
- char *name;
- void *param;
-} ndconfig_item_t;
-#endif
-
-
+/* ifdef EXT_STA */
+typedef struct _wl_assoc_result {
+ ulong associated;
+ ulong NDIS_auth;
+ ulong NDIS_infra;
+} wl_assoc_result_t;
+/* EXT_STA */
#define WL_PHY_PAVARS_LEN 32 /**< Phytype, Bandrange, chain, a[0], b[0], c[0], d[0] .. */
-
#define WL_PHY_PAVAR_VER 1 /**< pavars version */
#define WL_PHY_PAVARS2_NUM 3 /**< a1, b0, b1 */
@@ -1545,6 +2226,7 @@
uint16 phy_type; /**< Phy type */
uint16 band;
uint16 cckpo;
+ uint16 PAD;
uint32 ofdmpo;
uint16 mcspo[8];
} wl_po_t;
@@ -1556,11 +2238,18 @@
uint16 update;
} wl_rpcal_t;
+#define WL_NUM_RPCALPHASEVARS 5 /* number of rpcal phase vars */
+
+typedef struct wl_rpcal_phase {
+ uint16 value;
+ uint16 update;
+} wl_rpcal_phase_t;
+
typedef struct wl_aci_args {
- int enter_aci_thresh; /* Trigger level to start detecting ACI */
- int exit_aci_thresh; /* Trigger level to exit ACI mode */
- int usec_spin; /* microsecs to delay between rssi samples */
- int glitch_delay; /* interval between ACI scans when glitch count is consistently high */
+ int32 enter_aci_thresh; /* Trigger level to start detecting ACI */
+ int32 exit_aci_thresh; /* Trigger level to exit ACI mode */
+ int32 usec_spin; /* microsecs to delay between rssi samples */
+ int32 glitch_delay; /* interval between ACI scans when glitch count is consistently high */
uint16 nphy_adcpwr_enter_thresh; /**< ADC power to enter ACI mitigation mode */
uint16 nphy_adcpwr_exit_thresh; /**< ADC power to exit ACI mitigation mode */
uint16 nphy_repeat_ctr; /**< Number of tries per channel to compute power */
@@ -1569,7 +2258,7 @@
uint16 nphy_b_energy_lo_aci; /**< low ACI power energy threshold for bphy */
uint16 nphy_b_energy_md_aci; /**< mid ACI power energy threshold for bphy */
uint16 nphy_b_energy_hi_aci; /**< high ACI power energy threshold for bphy */
- uint16 nphy_noise_noassoc_glitch_th_up; /* wl interference 4 */
+ uint16 nphy_noise_noassoc_glitch_th_up; /**< wl interference 4 */
uint16 nphy_noise_noassoc_glitch_th_dn;
uint16 nphy_noise_assoc_glitch_th_up;
uint16 nphy_noise_assoc_glitch_th_dn;
@@ -1588,13 +2277,16 @@
typedef struct wl_samplecollect_args {
/* version 0 fields */
uint8 coll_us;
- int cores;
+ uint8 PAD[3];
+ int32 cores;
/* add'l version 1 fields */
- uint16 version; /* see definition of WL_SAMPLECOLLECT_T_VERSION */
- uint16 length; /* length of entire structure */
+ uint16 version; /**< see definition of WL_SAMPLECOLLECT_T_VERSION */
+ uint16 length; /**< length of entire structure */
int8 trigger;
+ uint8 PAD;
uint16 timeout;
uint16 mode;
+ uint16 PAD;
uint32 pre_dur;
uint32 post_dur;
uint8 gpio_sel;
@@ -1607,8 +2299,11 @@
uint8 module_sel1;
uint8 module_sel2;
uint16 nsamps;
- int bitStart;
+ uint16 PAD;
+ int32 bitStart;
uint32 gpioCapMask;
+ uint8 gpio_collection;
+ uint8 PAD[3];
} wl_samplecollect_args_t;
#define WL_SAMPLEDATA_T_VERSION 1 /**< version of wl_samplecollect_args_t struct */
@@ -1623,15 +2318,15 @@
uint32 flag; /**< bit def */
} wl_sampledata_t;
-
/* WL_OTA START */
/* OTA Test Status */
enum {
- WL_OTA_TEST_IDLE = 0, /**< Default Idle state */
- WL_OTA_TEST_ACTIVE = 1, /**< Test Running */
+ WL_OTA_TEST_IDLE = 0, /**< Default Idle state */
+ WL_OTA_TEST_ACTIVE = 1, /**< Test Running */
WL_OTA_TEST_SUCCESS = 2, /**< Successfully Finished Test */
- WL_OTA_TEST_FAIL = 3 /**< Test Failed in the Middle */
+ WL_OTA_TEST_FAIL = 3 /**< Test Failed in the Middle */
};
+
/* OTA SYNC Status */
enum {
WL_OTA_SYNC_IDLE = 0, /**< Idle state */
@@ -1642,7 +2337,7 @@
/* Various error states dut can get stuck during test */
enum {
WL_OTA_SKIP_TEST_CAL_FAIL = 1, /**< Phy calibration failed */
- WL_OTA_SKIP_TEST_SYNCH_FAIL = 2, /**< Sync Packet not recieved */
+ WL_OTA_SKIP_TEST_SYNCH_FAIL = 2, /**< Sync Packet not recieved */
WL_OTA_SKIP_TEST_FILE_DWNLD_FAIL = 3, /**< Cmd flow file download failed */
WL_OTA_SKIP_TEST_NO_TEST_FOUND = 4, /**< No test found in Flow file */
WL_OTA_SKIP_TEST_WL_NOT_UP = 5, /**< WL UP failed */
@@ -1662,7 +2357,6 @@
WL_OTA_TEST_BW_40MHZ = 2, /**< full 40Mhz operation */
WL_OTA_TEST_BW_80MHZ = 3 /* full 80Mhz operation */
};
-
#define HT_MCS_INUSE 0x00000080 /* HT MCS in use,indicates b0-6 holds an mcs */
#define VHT_MCS_INUSE 0x00000100 /* VHT MCS in use,indicates b0-6 holds an mcs */
#define OTA_RATE_MASK 0x0000007f /* rate/mcs value */
@@ -1673,6 +2367,7 @@
typedef struct ota_rate_info {
uint8 rate_cnt; /**< Total number of rates */
+ uint8 PAD;
uint16 rate_val_mbps[WL_OTA_TEST_MAX_NUM_RATE]; /**< array of rates from 1mbps to 130mbps */
/**< for legacy rates : ratein mbps * 2 */
/**< for HT rates : mcs index */
@@ -1686,20 +2381,40 @@
} ota_power_info_t;
typedef struct ota_packetengine {
- uint16 delay; /* Inter-packet delay */
+ uint16 delay; /**< Inter-packet delay */
/**< for ota_tx, delay is tx ifs in micro seconds */
/* for ota_rx, delay is wait time in milliseconds */
- uint16 nframes; /* Number of frames */
- uint16 length; /* Packet length */
+ uint16 nframes; /**< Number of frames */
+ uint16 length; /**< Packet length */
} ota_packetengine_t;
-/* Test info vector */
+/*
+ * OTA txant/rxant parameter
+ * bit7-4: 4 bits swdiv_tx/rx_policy bitmask, specify antenna-policy for SW diversity
+ * bit3-0: 4 bits TxCore bitmask, specify cores used for transmit frames
+ * (maximum spatial expansion)
+ */
+#define WL_OTA_TEST_ANT_MASK 0xF0
+#define WL_OTA_TEST_CORE_MASK 0x0F
+
+/* OTA txant/rxant 'ant_mask' field; map to Tx/Rx antenna policy for SW diversity */
+enum {
+ WL_OTA_TEST_FORCE_ANT0 = 0x10, /* force antenna to Ant 0 */
+ WL_OTA_TEST_FORCE_ANT1 = 0x20, /* force antenna to Ant 1 */
+};
+
+/* antenna/core fields access */
+#define WL_OTA_TEST_GET_ANT(_txant) ((_txant) & WL_OTA_TEST_ANT_MASK)
+#define WL_OTA_TEST_GET_CORE(_txant) ((_txant) & WL_OTA_TEST_CORE_MASK)
+
+/** Test info vector */
typedef struct wl_ota_test_args {
uint8 cur_test; /**< test phase */
uint8 chan; /**< channel */
uint8 bw; /**< bandwidth */
uint8 control_band; /**< control band */
uint8 stf_mode; /**< stf mode */
+ uint8 PAD;
ota_rate_info_t rt_info; /**< Rate info */
ota_packetengine_t pkteng; /**< packeteng info */
uint8 txant; /**< tx antenna */
@@ -1708,6 +2423,7 @@
uint8 wait_for_sync; /**< wait for sync or not */
uint8 ldpc;
uint8 sgi;
+ uint8 PAD;
/* Update WL_OTA_TESTVEC_T_VERSION for adding new members to this structure */
} wl_ota_test_args_t;
@@ -1727,11 +2443,11 @@
/* Update WL_OTA_TESTVEC_T_VERSION for adding new members to this structure */
} wl_ota_test_vector_t;
-
-/* struct copied back form dongle to host to query the status */
+/** struct copied back form dongle to host to query the status */
typedef struct wl_ota_test_status {
int16 cur_test_cnt; /**< test phase */
int8 skip_test_reason; /**< skip test reasoin */
+ uint8 PAD;
wl_ota_test_args_t test_arg; /**< cur test arg details */
uint16 test_cnt; /**< total no of test downloaded */
uint8 file_dwnld_valid; /**< file successfully downloaded ? */
@@ -1741,9 +2457,23 @@
struct ether_addr tx_mac; /**< tx mac address */
struct ether_addr rx_mac; /**< rx mac address */
uint8 test_stage; /**< check the test status */
- int8 loop_test; /**< Debug feature to puts test enfine in a loop */
+ int8 loop_test; /**< Debug feature to puts test enfine in a loop */
uint8 sync_status; /**< sync status */
} wl_ota_test_status_t;
+
+/* FOR ioctl that take the sta monitor information */
+typedef struct stamon_data {
+ struct ether_addr ea;
+ uint8 PAD[2];
+ int32 rssi;
+} stamon_data_t;
+
+typedef struct stamon_info {
+ int32 version;
+ uint32 count;
+ stamon_data_t sta_data[1];
+} stamon_info_t;
+
typedef struct wl_ota_rx_rssi {
uint16 pktcnt; /* Pkt count used for this rx test */
chanspec_t chanspec; /* Channel info on which the packets are received */
@@ -1761,88 +2491,136 @@
/* WL_OTA END */
-/* wl_radar_args_t */
+/**wl_radar_args_t */
typedef struct {
- int npulses; /**< required number of pulses at n * t_int */
- int ncontig; /**< required number of pulses at t_int */
- int min_pw; /**< minimum pulse width (20 MHz clocks) */
- int max_pw; /**< maximum pulse width (20 MHz clocks) */
+ int32 npulses; /**< required number of pulses at n * t_int */
+ int32 ncontig; /**< required number of pulses at t_int */
+ int32 min_pw; /**< minimum pulse width (20 MHz clocks) */
+ int32 max_pw; /**< maximum pulse width (20 MHz clocks) */
uint16 thresh0; /**< Radar detection, thresh 0 */
uint16 thresh1; /**< Radar detection, thresh 1 */
uint16 blank; /**< Radar detection, blank control */
uint16 fmdemodcfg; /**< Radar detection, fmdemod config */
- int npulses_lp; /* Radar detection, minimum long pulses */
- int min_pw_lp; /* Minimum pulsewidth for long pulses */
- int max_pw_lp; /* Maximum pulsewidth for long pulses */
- int min_fm_lp; /* Minimum fm for long pulses */
- int max_span_lp; /* Maximum deltat for long pulses */
- int min_deltat; /* Minimum spacing between pulses */
- int max_deltat; /* Maximum spacing between pulses */
+ int32 npulses_lp; /**< Radar detection, minimum long pulses */
+ int32 min_pw_lp; /**< Minimum pulsewidth for long pulses */
+ int32 max_pw_lp; /**< Maximum pulsewidth for long pulses */
+ int32 min_fm_lp; /**< Minimum fm for long pulses */
+ int32 max_span_lp; /**< Maximum deltat for long pulses */
+ int32 min_deltat; /**< Minimum spacing between pulses */
+ int32 max_deltat; /**< Maximum spacing between pulses */
uint16 autocorr; /**< Radar detection, autocorr on or off */
uint16 st_level_time; /**< Radar detection, start_timing level */
- uint16 t2_min; /* minimum clocks needed to remain in state 2 */
- uint32 version; /* version */
+ uint16 t2_min; /**< minimum clocks needed to remain in state 2 */
+ uint8 PAD[2];
+ uint32 version; /**< version */
uint32 fra_pulse_err; /**< sample error margin for detecting French radar pulsed */
- int npulses_fra; /* Radar detection, minimum French pulses set */
- int npulses_stg2; /* Radar detection, minimum staggered-2 pulses set */
- int npulses_stg3; /* Radar detection, minimum staggered-3 pulses set */
+ int32 npulses_fra; /**< Radar detection, minimum French pulses set */
+ int32 npulses_stg2; /**< Radar detection, minimum staggered-2 pulses set */
+ int32 npulses_stg3; /**< Radar detection, minimum staggered-3 pulses set */
uint16 percal_mask; /**< defines which period cal is masked from radar detection */
- int quant; /**< quantization resolution to pulse positions */
+ uint8 PAD[2];
+ int32 quant; /**< quantization resolution to pulse positions */
uint32 min_burst_intv_lp; /**< minimum burst to burst interval for bin3 radar */
uint32 max_burst_intv_lp; /**< maximum burst to burst interval for bin3 radar */
- int nskip_rst_lp; /**< number of skipped pulses before resetting lp buffer */
- int max_pw_tol; /**< maximum tolerance allowd in detected pulse width for radar detection */
- uint16 feature_mask; /* 16-bit mask to specify enabled features */
+ int32 nskip_rst_lp; /**< number of skipped pulses before resetting lp buffer */
+ int32 max_pw_tol; /* maximum tolerance allowd in detected pulse width for radar detection */
+ uint16 feature_mask; /**< 16-bit mask to specify enabled features */
+ uint16 thresh0_sc; /**< Radar detection, thresh 0 */
+ uint16 thresh1_sc; /**< Radar detection, thresh 1 */
+ uint8 PAD[2];
} wl_radar_args_t;
#define WL_RADAR_ARGS_VERSION 2
typedef struct {
- uint32 version; /* version */
- uint16 thresh0_20_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 20MHz */
- uint16 thresh1_20_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 20MHz */
- uint16 thresh0_40_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 40MHz */
- uint16 thresh1_40_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 40MHz */
- uint16 thresh0_80_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 80MHz */
- uint16 thresh1_80_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 80MHz */
- uint16 thresh0_20_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 20MHz */
- uint16 thresh1_20_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 20MHz */
- uint16 thresh0_40_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 40MHz */
- uint16 thresh1_40_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 40MHz */
- uint16 thresh0_80_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 80MHz */
- uint16 thresh1_80_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 80MHz */
-#ifdef WL11AC160
- uint16 thresh0_160_lo; /* Radar detection, thresh 0 (range 5250-5350MHz) for BW 160MHz */
- uint16 thresh1_160_lo; /* Radar detection, thresh 1 (range 5250-5350MHz) for BW 160MHz */
- uint16 thresh0_160_hi; /* Radar detection, thresh 0 (range 5470-5725MHz) for BW 160MHz */
- uint16 thresh1_160_hi; /* Radar detection, thresh 1 (range 5470-5725MHz) for BW 160MHz */
-#endif /* WL11AC160 */
+ uint32 version; /**< version */
+ uint16 thresh0_20_lo; /**< Radar detection, thresh 0 (range 5250-5350MHz) for BW 20MHz */
+ uint16 thresh1_20_lo; /**< Radar detection, thresh 1 (range 5250-5350MHz) for BW 20MHz */
+ uint16 thresh0_40_lo; /**< Radar detection, thresh 0 (range 5250-5350MHz) for BW 40MHz */
+ uint16 thresh1_40_lo; /**< Radar detection, thresh 1 (range 5250-5350MHz) for BW 40MHz */
+ uint16 thresh0_80_lo; /**< Radar detection, thresh 0 (range 5250-5350MHz) for BW 80MHz */
+ uint16 thresh1_80_lo; /**< Radar detection, thresh 1 (range 5250-5350MHz) for BW 80MHz */
+ uint16 thresh0_20_hi; /**< Radar detection, thresh 0 (range 5470-5725MHz) for BW 20MHz */
+ uint16 thresh1_20_hi; /**< Radar detection, thresh 1 (range 5470-5725MHz) for BW 20MHz */
+ uint16 thresh0_40_hi; /**< Radar detection, thresh 0 (range 5470-5725MHz) for BW 40MHz */
+ uint16 thresh1_40_hi; /**< Radar detection, thresh 1 (range 5470-5725MHz) for BW 40MHz */
+ uint16 thresh0_80_hi; /**< Radar detection, thresh 0 (range 5470-5725MHz) for BW 80MHz */
+ uint16 thresh1_80_hi; /**< Radar detection, thresh 1 (range 5470-5725MHz) for BW 80MHz */
+ uint16 thresh0_160_lo; /**< Radar detection, thresh 0 (range 5250-5350MHz) for BW 160MHz */
+ uint16 thresh1_160_lo; /**< Radar detection, thresh 1 (range 5250-5350MHz) for BW 160MHz */
+ uint16 thresh0_160_hi; /**< Radar detection, thresh 0 (range 5470-5725MHz) for BW 160MHz */
+ uint16 thresh1_160_hi; /**< Radar detection, thresh 1 (range 5470-5725MHz) for BW 160MHz */
} wl_radar_thr_t;
+
+typedef struct {
+ uint32 version; /* version */
+ uint16 thresh0_sc_20_lo;
+ uint16 thresh1_sc_20_lo;
+ uint16 thresh0_sc_40_lo;
+ uint16 thresh1_sc_40_lo;
+ uint16 thresh0_sc_80_lo;
+ uint16 thresh1_sc_80_lo;
+ uint16 thresh0_sc_20_hi;
+ uint16 thresh1_sc_20_hi;
+ uint16 thresh0_sc_40_hi;
+ uint16 thresh1_sc_40_hi;
+ uint16 thresh0_sc_80_hi;
+ uint16 thresh1_sc_80_hi;
+ uint16 fc_varth_sb;
+ uint16 fc_varth_bin5_sb;
+ uint16 notradar_enb;
+ uint16 max_notradar_lp;
+ uint16 max_notradar;
+ uint16 max_notradar_lp_sc;
+ uint16 max_notradar_sc;
+ uint16 highpow_war_enb;
+ uint16 highpow_sp_ratio; //unit is 0.5
+} wl_radar_thr2_t;
#define WL_RADAR_THR_VERSION 2
-/* RSSI per antenna */
+typedef struct {
+ uint32 ver;
+ uint32 len;
+ int32 rssi_th[3];
+ uint8 rssi_gain_80[4];
+ uint8 rssi_gain_160[4];
+} wl_dyn_switch_th_t;
+
+#define WL_PHY_DYN_SWITCH_TH_VERSION 1
+
+/** RSSI per antenna */
typedef struct {
uint32 version; /**< version field */
uint32 count; /**< number of valid antenna rssi */
int8 rssi_ant[WL_RSSI_ANT_MAX]; /**< rssi per antenna */
+ int8 rssi_sum; /**< summed rssi across all antennas */
+ int8 PAD[3];
} wl_rssi_ant_t;
-/* data structure used in 'dfs_status' wl interface, which is used to query dfs status */
+/* SNR per antenna */
typedef struct {
- uint state; /**< noted by WL_DFS_CACSTATE_XX. */
- uint duration; /**< time spent in ms in state. */
- /* as dfs enters ISM state, it removes the operational channel from quiet channel
+ uint32 version; /* version field */
+ uint32 count; /* number of valid antenna snr */
+ int8 snr_ant[WL_RSSI_ANT_MAX]; /* snr per antenna */
+} wl_snr_ant_t;
+
+/** data structure used in 'dfs_status' wl interface, which is used to query dfs status */
+typedef struct {
+ uint32 state; /**< noted by WL_DFS_CACSTATE_XX. */
+ uint32 duration; /**< time spent in ms in state. */
+ /**
+ * as dfs enters ISM state, it removes the operational channel from quiet channel
* list and notes the channel in channel_cleared. set to 0 if no channel is cleared
*/
chanspec_t chanspec_cleared;
- /* chanspec cleared used to be a uint, add another to uint16 to maintain size */
+ /** chanspec cleared used to be a uint32, add another to uint16 to maintain size */
uint16 pad;
} wl_dfs_status_t;
typedef struct {
- uint state; /* noted by WL_DFS_CACSTATE_XX */
- uint duration; /* time spent in ms in state */
+ uint32 state; /* noted by WL_DFS_CACSTATE_XX */
+ uint32 duration; /* time spent in ms in state */
chanspec_t chanspec; /* chanspec of this core */
chanspec_t chanspec_last_cleared; /* chanspec last cleared for operation by scanning */
uint16 sub_type; /* currently just the index of the core or the respective PLL */
@@ -1857,29 +2635,41 @@
} wl_dfs_status_all_t;
#define WL_DFS_AP_MOVE_VERSION (1)
-typedef struct wl_dfs_ap_move_status {
+
+struct wl_dfs_ap_move_status_v1 {
+ int16 dfs_status; /* DFS scan status */
+ chanspec_t chanspec; /* New AP Chanspec */
+ wl_dfs_status_t cac_status; /* CAC status */
+};
+
+typedef struct wl_dfs_ap_move_status_v2 {
int8 version; /* version field; current max version 1 */
int8 move_status; /* DFS move status */
chanspec_t chanspec; /* New AP Chanspec */
wl_dfs_status_all_t scan_status; /* status; see dfs_status_all for wl_dfs_status_all_t */
-} wl_dfs_ap_move_status_t;
+} wl_dfs_ap_move_status_v2_t;
+#define WL_DFS_AP_MOVE_ABORT -1 /* Abort any dfs_ap_move in progress immediately */
+#define WL_DFS_AP_MOVE_STUNT -2 /* Stunt move but continue background CSA if in progress */
-/* data structure used in 'radar_status' wl interface, which is use to query radar det status */
+/** data structure used in 'radar_status' wl interface, which is use to query radar det status */
typedef struct {
- bool detected;
- int count;
- bool pretended;
+ uint8 detected;
+ uint8 PAD[3];
+ int32 count;
+ uint8 pretended;
+ uint8 PAD[3];
uint32 radartype;
uint32 timenow;
uint32 timefromL;
- int lp_csect_single;
- int detected_pulse_index;
- int nconsecq_pulses;
+ int32 lp_csect_single;
+ int32 detected_pulse_index;
+ int32 nconsecq_pulses;
chanspec_t ch;
- int pw[10];
- int intv[10];
- int fm[10];
+ uint8 PAD[2];
+ int32 pw[10];
+ int32 intv[10];
+ int32 fm[10];
} wl_radar_status_t;
#define NUM_PWRCTRL_RATES 12
@@ -1908,20 +2698,21 @@
typedef struct {
uint32 flags;
- chanspec_t chanspec; /* txpwr report for this channel */
- chanspec_t local_chanspec; /* channel on which we are associated */
- uint8 local_max; /* local max according to the AP */
- uint8 local_constraint; /* local constraint according to the AP */
- int8 antgain[2]; /* Ant gain for each band - from SROM */
- uint8 rf_cores; /* count of RF Cores being reported */
- uint8 est_Pout[4]; /* Latest tx power out estimate per RF
+ chanspec_t chanspec; /**< txpwr report for this channel */
+ chanspec_t local_chanspec; /**< channel on which we are associated */
+ uint8 local_max; /**< local max according to the AP */
+ uint8 local_constraint; /**< local constraint according to the AP */
+ int8 antgain[2]; /**< Ant gain for each band - from SROM */
+ uint8 rf_cores; /**< count of RF Cores being reported */
+ uint8 est_Pout[4]; /**< Latest tx power out estimate per RF
* chain without adjustment
*/
- uint8 est_Pout_cck; /* Latest CCK tx power out estimate */
- uint8 user_limit[WL_TX_POWER_RATES_LEGACY]; /* User limit */
- uint8 reg_limit[WL_TX_POWER_RATES_LEGACY]; /* Regulatory power limit */
- uint8 board_limit[WL_TX_POWER_RATES_LEGACY]; /* Max power board can support (SROM) */
- uint8 target[WL_TX_POWER_RATES_LEGACY]; /* Latest target power */
+ uint8 est_Pout_cck; /**< Latest CCK tx power out estimate */
+ uint8 user_limit[WL_TX_POWER_RATES_LEGACY]; /**< User limit */
+ uint8 reg_limit[WL_TX_POWER_RATES_LEGACY]; /**< Regulatory power limit */
+ uint8 board_limit[WL_TX_POWER_RATES_LEGACY]; /**< Max power board can support (SROM) */
+ uint8 target[WL_TX_POWER_RATES_LEGACY]; /**< Latest target power */
+ uint8 PAD[2];
} tx_power_legacy2_t;
#define WL_NUM_2x2_ELEMENTS 4
@@ -1941,12 +2732,18 @@
#define WL_TXPPR_VERSION 1
#define WL_TXPPR_LENGTH (sizeof(wl_txppr_t))
#define TX_POWER_T_VERSION 45
-/* number of ppr serialization buffers, it should be reg, board and target */
+/** number of ppr serialization buffers, it should be reg, board and target */
#define WL_TXPPR_SER_BUF_NUM (3)
+/* curpower ppr types */
+enum {
+ PPRTYPE_TARGETPOWER = 1,
+ PPRTYPE_BOARDLIMITS = 2,
+ PPRTYPE_REGLIMITS = 3
+};
typedef struct chanspec_txpwr_max {
- chanspec_t chanspec; /* chanspec */
- uint8 txpwr_max; /* max txpwr in all the rates */
+ chanspec_t chanspec; /**< chanspec */
+ uint8 txpwr_max; /**< max txpwr in all the rates */
uint8 padding;
} chanspec_txpwr_max_t;
@@ -1969,8 +2766,397 @@
typedef struct wl_txchain_pwr_offsets {
int8 offset[WL_NUM_TXCHAIN_MAX]; /**< quarter dBm signed offset for each chain */
} wl_txchain_pwr_offsets_t;
-/* maximum channels returned by the get valid channels iovar */
+
+/** maximum channels returned by the get valid channels iovar */
#define WL_NUMCHANNELS 64
+#define WL_NUMCHANNELS_MANY_CHAN 10
+#define WL_ITER_LIMIT_MANY_CHAN 5
+
+#define WL_MIMO_PS_CFG_VERSION_1 1
+
+typedef struct wl_mimops_cfg {
+ uint8 version;
+ /* active_chains: 0 for all, 1 for 1 chain. */
+ uint8 active_chains;
+ /* static (0) or dynamic (1).or disabled (3) Mode applies only when active_chains = 0. */
+ uint8 mode;
+ /* bandwidth = Full (0), 20M (1), 40M (2), 80M (3). */
+ uint8 bandwidth;
+ uint8 applychangesafterlearning;
+ uint8 pad[3];
+} wl_mimops_cfg_t;
+
+/* This event is for tracing MIMO PS metrics snapshot calls.
+ * It is helpful to debug out-of-sync issue between
+ * ucode SHM values and FW snapshot calculation.
+ * It is part of the EVENT_LOG_TAG_MIMO_PS_TRACE.
+ */
+#define WL_MIMO_PS_METRICS_SNAPSHOT_TRACE_TYPE 0
+typedef struct wl_mimo_ps_metrics_snapshot_trace {
+ /* type field for this TLV: */
+ uint16 type;
+ /* length field for this TLV */
+ uint16 len;
+ uint32 idle_slotcnt_mimo; /* MIMO idle slotcnt raw SHM value */
+ uint32 last_idle_slotcnt_mimo; /* stored value snapshot */
+ uint32 idle_slotcnt_siso; /* SISO idle slotcnt raw SHM value */
+ uint32 last_idle_slotcnt_siso; /* stored value snapshot */
+ uint32 rx_time_mimo; /* Rx MIMO raw SHM value */
+ uint32 last_rx_time_mimo; /* stored value snapshot */
+ uint32 rx_time_siso; /* RX SISO raw SHM value */
+ uint32 last_rx_time_siso; /* stored value snapshot */
+ uint32 tx_time_1chain; /* Tx 1-chain raw SHM value */
+ uint32 last_tx_time_1chain; /* stored value snapshot */
+ uint32 tx_time_2chain; /* Tx 2-chain raw SHM value */
+ uint32 last_tx_time_2chain; /* stored value snapshot */
+ uint32 tx_time_3chain; /* Tx 3-chain raw SHM value */
+ uint32 last_tx_time_3chain; /* stored value snapshot */
+ uint16 reason; /* reason for snapshot call, see below */
+ /* Does the call reset last values after delta calculation */
+ uint16 reset_last;
+} wl_mimo_ps_metrics_snapshot_trace_t;
+/* reason codes for mimo ps metrics snapshot function calls */
+#define WL_MIMOPS_METRICS_SNAPSHOT_REPORT 1
+#define WL_MIMOPS_METRICS_SNAPSHOT_RXCHAIN_SET 2
+#define WL_MIMOPS_METRICS_SNAPSHOT_ARBI 3
+#define WL_MIMOPS_METRICS_SNAPSHOT_SLOTUPD 4
+#define WL_MIMOPS_METRICS_SNAPSHOT_PMBCNRX 5
+#define WL_MIMOPS_METRICS_SNAPSHOT_BMACINIT 6
+#define WL_MIMOPS_METRICS_SNAPSHOT_HT_COMPLETE 7
+#define WL_MIMOPS_METRICS_SNAPSHOT_OCL 8
+
+#define WL_MIMO_PS_STATUS_VERSION_2 2
+typedef struct wl_mimo_ps_status {
+ uint8 version;
+ uint8 ap_cap; /* The associated AP's capability (BW, MIMO/SISO). */
+ uint8 association_status; /* How we are associated to the AP (MIMO/SISO). */
+ uint8 mimo_ps_state; /* mimo_ps_cfg states: [0-5]. See below for values */
+ uint8 mrc_state; /* MRC state: NONE (0), ACTIVE(1) */
+ uint8 bss_rxchain; /* bss rxchain bitmask */
+ uint8 bss_txchain; /* bss txchain bitmask */
+ uint8 bss_bw; /* bandwidth: Full (0), 20M (1), 40M (2), 80M (3), etc */
+ uint16 hw_state; /* bitmask of hw state. See below for values */
+ uint8 hw_rxchain; /* actual HW rxchain bitmask */
+ uint8 hw_txchain; /* actual HW txchain bitmask */
+ uint8 hw_bw; /* bandwidth: Full (0), 20M (1), 40M (2), 80M (3), etc */
+ uint8 pm_bcnrx_state; /* actual state of ucode flag */
+ uint8 basic_rates_present; /* internal flag to trigger siso bcmc rx */
+ uint8 siso_bcmc_rx_state; /* actual state of ucode flag */
+} wl_mimo_ps_status_t;
+
+#define WL_MIMO_PS_STATUS_VERSION_1 1
+typedef struct wl_mimo_ps_status_v1 {
+ uint8 version;
+ uint8 ap_cap; /* The associated AP's capability (BW, MIMO/SISO). */
+ uint8 association_status; /* How we are associated to the AP (MIMO/SISO). */
+ uint8 mimo_ps_state; /* mimo_ps_cfg states: [0-5]. See below for values */
+ uint8 mrc_state; /* MRC state: NONE (0), ACTIVE(1) */
+ uint8 bss_rxchain; /* bss rxchain bitmask */
+ uint8 bss_txchain; /* bss txchain bitmask */
+ uint8 bss_bw; /* bandwidth: Full (0), 20M (1), 40M (2), 80M (3), etc */
+ uint16 hw_state; /* bitmask of hw state. See below for values */
+ uint8 hw_rxchain; /* actual HW rxchain bitmask */
+ uint8 hw_txchain; /* actual HW txchain bitmask */
+ uint8 hw_bw; /* bandwidth: Full (0), 20M (1), 40M (2), 80M (3), etc */
+ uint8 pad[3];
+} wl_mimo_ps_status_v1_t;
+
+#define WL_MIMO_PS_STATUS_AP_CAP(ap_cap) (ap_cap & 0x0F)
+#define WL_MIMO_PS_STATUS_AP_CAP_BW(ap_cap) (ap_cap >> 4)
+#define WL_MIMO_PS_STATUS_ASSOC_BW_SHIFT 4
+
+/* version 3: assoc status: low nibble is status enum, high other flags */
+#define WL_MIMO_PS_STATUS_VERSION_3 3
+#define WL_MIMO_PS_STATUS_ASSOC_STATUS_MASK 0x0F
+#define WL_MIMO_PS_STATUS_ASSOC_STATUS_VHT_WITHOUT_OMN 0x80
+
+/* mimo_ps_status: ap_cap/association status */
+enum {
+ WL_MIMO_PS_STATUS_ASSOC_NONE = 0,
+ WL_MIMO_PS_STATUS_ASSOC_SISO = 1,
+ WL_MIMO_PS_STATUS_ASSOC_MIMO = 2,
+ WL_MIMO_PS_STATUS_ASSOC_LEGACY = 3
+};
+
+/* mimo_ps_status: mimo_ps_cfg states */
+enum {
+ WL_MIMO_PS_CFG_STATE_NONE = 0,
+ WL_MIMO_PS_CFG_STATE_INFORM_AP_INPROGRESS = 1,
+ WL_MIMO_PS_CFG_STATE_INFORM_AP_DONE = 2,
+ WL_MIMO_PS_CFG_STATE_LEARNING = 3,
+ WL_MIMO_PS_CFG_STATE_HW_CONFIGURE = 4,
+ WL_MIMO_PS_CFG_STATE_INFORM_AP_PENDING = 5
+};
+
+/* mimo_ps_status: hw_state values */
+#define WL_MIMO_PS_STATUS_HW_STATE_NONE 0
+#define WL_MIMO_PS_STATUS_HW_STATE_LTECOEX (0x1 << 0)
+#define WL_MIMO_PS_STATUS_HW_STATE_MIMOPS_BSS (0x1 << 1)
+#define WL_MIMO_PS_STATUS_HW_STATE_AWDL_BSS (0x1 << 2)
+#define WL_MIMO_PS_STATUS_HW_STATE_SCAN (0x1 << 3)
+#define WL_MIMO_PS_STATUS_HW_STATE_TXPPR (0x1 << 4)
+#define WL_MIMO_PS_STATUS_HW_STATE_PWRTHOTTLE (0x1 << 5)
+#define WL_MIMO_PS_STATUS_HW_STATE_TMPSENSE (0x1 << 6)
+#define WL_MIMO_PS_STATUS_HW_STATE_IOVAR (0x1 << 7)
+#define WL_MIMO_PS_STATUS_HW_STATE_AP_BSS (0x1 << 8)
+
+/* mimo_ps_status: mrc states */
+#define WL_MIMO_PS_STATUS_MRC_NONE 0
+#define WL_MIMO_PS_STATUS_MRC_ACTIVE 1
+
+/* mimo_ps_status: core flag states for single-core beacon and siso-bcmc rx */
+#define WL_MIMO_PS_STATUS_MHF_FLAG_NONE 0
+#define WL_MIMO_PS_STATUS_MHF_FLAG_ACTIVE 1
+#define WL_MIMO_PS_STATUS_MHF_FLAG_COREDOWN 2
+#define WL_MIMO_PS_STATUS_MHF_FLAG_INVALID 3
+
+/* Type values for the REASON */
+#define WL_MIMO_PS_PS_LEARNING_ABORTED (1 << 0)
+#define WL_MIMO_PS_PS_LEARNING_COMPLETED (1 << 1)
+#define WL_MIMO_PS_PS_LEARNING_ONGOING (1 << 2)
+
+typedef struct wl_mimo_ps_learning_event_data {
+ uint32 startTimeStamp;
+ uint32 endTimeStamp;
+ uint16 reason;
+ struct ether_addr BSSID;
+ uint32 totalSISO_below_rssi_threshold;
+ uint32 totalMIMO_below_rssi_threshold;
+ uint32 totalSISO_above_rssi_threshold;
+ uint32 totalMIMO_above_rssi_threshold;
+} wl_mimo_ps_learning_event_data_t;
+
+#define WL_MIMO_PS_PS_LEARNING_CFG_ABORT (1 << 0)
+#define WL_MIMO_PS_PS_LEARNING_CFG_STATUS (1 << 1)
+#define WL_MIMO_PS_PS_LEARNING_CFG_CONFIG (1 << 2)
+#define WL_MIMO_PS_PS_LEARNING_CFG_MASK (0x7)
+
+#define WL_MIMO_PS_PS_LEARNING_CFG_V1 1
+
+typedef struct wl_mimops_learning_cfg {
+ /* flag: bit 0 for abort */
+ /* flag: bit 1 for status */
+ /* flag: bit 2 for configuring no of packets and rssi */
+ uint8 flag;
+ /* mimo ps learning version, compatible version is 0 */
+ uint8 version;
+ /* if version is 0 or rssi is 0, ignored */
+ int8 learning_rssi_threshold;
+ uint8 reserved;
+ uint32 no_of_packets_for_learning;
+ wl_mimo_ps_learning_event_data_t mimops_learning_data;
+} wl_mimops_learning_cfg_t;
+
+#define WL_OCL_STATUS_VERSION 1
+typedef struct ocl_status_info {
+ uint8 version;
+ uint8 len;
+ uint16 fw_status; /* Bits representing FW disable reasons */
+ uint8 hw_status; /* Bits for actual HW config and SISO/MIMO coremask */
+ uint8 coremask; /* The ocl core mask (indicating listening core) */
+} ocl_status_info_t;
+
+/* MWS OCL map */
+#define WL_MWS_OCL_OVERRIDE_VERSION 1
+typedef struct wl_mws_ocl_override {
+ uint16 version; /* Structure version */
+ uint16 bitmap_2g; /* bitmap for 2.4G channels bits 1-13 */
+ uint16 bitmap_5g_lo; /* bitmap for 5G low channels by 2:
+ *34-48, 52-56, 60-64, 100-102
+ */
+ uint16 bitmap_5g_mid; /* bitmap for 5G mid channels by 2:
+ * 104, 108-112, 116-120, 124-128,
+ * 132-136, 140, 149-151
+ */
+ uint16 bitmap_5g_high; /* bitmap for 5G high channels by 2
+ * 153, 157-161, 165
+ */
+} wl_mws_ocl_override_t;
+
+/* Bits for fw_status */
+#define OCL_DISABLED_HOST 0x01 /* Host has disabled through ocl_enable */
+#define OCL_DISABLED_RSSI 0x02 /* Disabled because of ocl_rssi_threshold */
+#define OCL_DISABLED_LTEC 0x04 /* Disabled due to LTE Coex activity */
+#define OCL_DISABLED_SISO 0x08 /* Disabled while in SISO mode */
+#define OCL_DISABLED_CAL 0x10 /* Disabled during active calibration */
+#define OCL_DISABLED_CHANSWITCH 0x20 /* Disabled during active channel switch */
+#define OCL_DISABLED_ASPEND 0x40 /* Disabled due to assoc pending */
+
+/* Bits for hw_status */
+#define OCL_HWCFG 0x01 /* State of OCL config bit in phy HW */
+#define OCL_HWMIMO 0x02 /* Set if current coremask is > 1 bit */
+#define OCL_COREDOWN 0x80 /* Set if core is currently down */
+
+#define WL_OPS_CFG_VERSION_1 1
+/* Common IOVAR struct */
+typedef struct wl_ops_cfg_v1 {
+ uint16 version;
+ uint16 len; /* total length includes fixed fields and variable data[] */
+ uint16 subcmd_id; /* subcommand id */
+ uint16 padding; /* reserved / padding for 4 byte align */
+ uint8 data[]; /* subcommand data; could be empty */
+} wl_ops_cfg_v1_t;
+
+/* subcommands ids */
+enum {
+ WL_OPS_CFG_SUBCMD_ENABLE = 0, /* OPS enable/disable mybss and obss
+ * for nav and plcp options
+ */
+ WL_OPS_CFG_SUBCMD_MAX_SLEEP_DUR = 1, /* Max sleep duration used for OPS */
+ WL_OPS_CFG_SUBCMD_RESET_STATS = 2 /* Reset stats part of ops_status
+ * on both slices
+ */
+};
+
+#define WL_OPS_CFG_MASK 0xffff
+#define WL_OPS_CFG_CAP_MASK 0xffff0000
+#define WL_OPS_CFG_CAP_SHIFT 16 /* Shift bits to locate the OPS CAP */
+#define WL_OPS_MAX_SLEEP_DUR 12500 /* max ops duration in us */
+#define WL_OPS_MINOF_MAX_SLEEP_DUR 512 /* minof max ops duration in us */
+#define WL_OPS_SUPPORTED_CFG (WL_OPS_MYBSS_PLCP_DUR | WL_OPS_MYBSS_NAV_DUR \
+ | WL_OPS_OBSS_PLCP_DUR | WL_OPS_OBSS_NAV_DUR)
+#define WL_OPS_DEFAULT_CFG WL_OPS_SUPPORTED_CFG
+
+/* WL_OPS_CFG_SUBCMD_ENABLE */
+typedef struct wl_ops_cfg_enable {
+ uint32 bits; /* selectively enable ops for mybss and obss */
+} wl_ops_cfg_enable_t;
+/* Bits for WL_OPS_CFG_SUBCMD_ENABLE Parameter */
+#define WL_OPS_MYBSS_PLCP_DUR 0x1 /* OPS based on mybss 11b & 11n mixed HT frames
+ * PLCP header duration
+ */
+#define WL_OPS_MYBSS_NAV_DUR 0x2 /* OPS based on mybss RTS-CTS duration */
+#define WL_OPS_OBSS_PLCP_DUR 0x4 /* OPS based on obss 11b & 11n mixed HT frames
+ * PLCP header duration
+ */
+#define WL_OPS_OBSS_NAV_DUR 0x8 /* OPS based on obss RTS-CTS duration */
+
+/* WL_OPS_CFG_SUBCMD_MAX_SLEEP_DUR */
+typedef struct wl_ops_cfg_max_sleep_dur {
+ uint32 val; /* maximum sleep duration (us) used for OPS */
+} wl_ops_cfg_max_sleep_dur_t;
+
+/* WL_OPS_CFG_SUBCMD_RESET_STATS */
+typedef struct wl_ops_cfg_reset_stats {
+ uint32 val; /* bitmap of slices, 0 means all slices */
+} wl_ops_cfg_reset_stats_t;
+
+#define WL_OPS_STATUS_VERSION_1 1
+#define OPS_DUR_HIST_BINS 5 /* number of bins used, 0-1, 1-2, 2-4, 4-8, >8 msec */
+typedef struct wl_ops_status_v1 {
+ uint16 version;
+ uint16 len; /* Total length including all fixed fields */
+ uint8 slice_index; /* Slice for which status is reported */
+ uint8 disable_obss; /* indicate if obss cfg is disabled */
+ uint8 pad[2]; /* 4-byte alignment */
+ uint32 disable_reasons; /* FW disable reasons */
+ uint32 disable_duration; /* ops disable time(ms) due to disable reasons */
+ uint32 applied_ops_config; /* currently applied ops config */
+ uint32 partial_ops_dur; /* Total time (in usec) of partial ops duration */
+ uint32 full_ops_dur; /* Total time (in usec) of full ops duration */
+ uint32 count_dur_hist[OPS_DUR_HIST_BINS]; /* ops occurrence histogram */
+ uint32 nav_cnt; /* number of times ops triggered based NAV duration */
+ uint32 plcp_cnt; /* number of times ops triggered based PLCP duration */
+ uint32 mybss_cnt; /* number of times mybss ops trigger */
+ uint32 obss_cnt; /* number of times obss ops trigger */
+ uint32 miss_dur_cnt; /* number of times ops couldn't happen
+ * due to insufficient duration
+ */
+ uint32 miss_premt_cnt; /* number of times ops couldn't happen due
+ * to not meeting Phy preemption thresh
+ */
+ uint32 max_dur_cnt; /* number of times ops did not trigger due to
+ * frames exceeding max sleep duration
+ */
+ uint32 wake_cnt; /* number of ops miss due to wake reason */
+ uint32 bcn_wait_cnt; /* number of ops miss due to waiting for bcn */
+} wl_ops_status_v1_t;
+/* Bits for disable_reasons */
+#define OPS_DISABLED_HOST 0x01 /* Host has disabled through ops_cfg */
+#define OPS_DISABLED_UNASSOC 0x02 /* Disabled because the slice is in unassociated state */
+#define OPS_DISABLED_SCAN 0x04 /* Disabled because the slice is in scan state */
+#define OPS_DISABLED_BCN_MISS 0x08 /* Disabled because beacon missed for a duration */
+
+#define WL_PSBW_CFG_VERSION_1 1
+/* Common IOVAR struct */
+typedef struct wl_psbw_cfg_v1 {
+ uint16 version;
+ uint16 len; /* total length includes fixed fields and variable data[] */
+ uint16 subcmd_id; /* subcommand id */
+ uint16 pad; /* reserved / padding for 4 byte align */
+ uint8 data[]; /* subcommand data */
+} wl_psbw_cfg_v1_t;
+
+/* subcommands ids */
+enum {
+ /* PSBW enable/disable */
+ WL_PSBW_CFG_SUBCMD_ENABLE = 0,
+ /* override psbw disable requests */
+ WL_PSBW_CFG_SUBCMD_OVERRIDE_DISABLE_MASK = 1,
+ /* Reset stats part of psbw status */
+ WL_PSBW_CFG_SUBCMD_RESET_STATS = 2
+};
+
+#define WL_PSBW_OVERRIDE_DISA_CFG_MASK 0x0000ffff
+#define WL_PSBW_OVERRIDE_DISA_CAP_MASK 0xffff0000
+#define WL_PSBW_OVERRIDE_DISA_CAP_SHIFT 16 /* shift bits for cap */
+
+/* WL_PSBW_CFG_SUBCMD_ENABLE */
+typedef struct wl_psbw_cfg_enable {
+ bool enable; /* enable or disable */
+} wl_psbw_cfg_enable_t;
+
+/* WL_PSBW_CFG_SUBCMD_OVERRIDE_DISABLE_MASK */
+typedef struct wl_psbw_cfg_override_disable_mask {
+ uint32 mask; /* disable requests to override, cap and current cfg */
+} wl_psbw_cfg_override_disable_mask_t;
+
+/* WL_PSBW_CFG_SUBCMD_RESET_STATS */
+typedef struct wl_psbw_cfg_reset_stats {
+ uint32 val; /* infra interface index, 0 */
+} wl_psbw_cfg_reset_stats_t;
+
+#define WL_PSBW_STATUS_VERSION_1 1
+typedef struct wl_psbw_status_v1 {
+ uint16 version;
+ uint16 len; /* total length including all fixed fields */
+ uint8 curr_slice_index; /* current slice index of the interface */
+ uint8 associated; /* interface associatd */
+ chanspec_t chspec; /* radio chspec */
+ uint32 state; /* psbw state */
+ uint32 disable_reasons; /* FW disable reasons */
+ uint32 slice_enable_dur; /* time(ms) psbw remains enabled on this slice */
+ uint32 total_enable_dur; /* time(ms) psbw remains enabled total */
+ uint32 enter_cnt; /* total cnt entering PSBW active */
+ uint32 exit_cnt; /* total cnt exiting PSBW active */
+ uint32 exit_imd_cnt; /* total cnt imd exit when waited N tbtts */
+ uint32 enter_skip_cnt; /* total cnt entering PSBW active skipped */
+} wl_psbw_status_v1_t;
+
+/* Bit for state */
+#define PSBW_ACTIVE 0x1 /* active 20MHz */
+#define PSBW_TTTT_PEND 0x2 /* waiting for TTTT intr */
+#define PSBW_WAIT_ENTER 0x4 /* in wait period before entering */
+#define PSBW_CAL_DONE 0x8 /* 20M channel cal done */
+
+/* Bits for disable_reasons */
+#define WL_PSBW_DISA_HOST 0x00000001 /* Host has disabled through psbw_cfg */
+#define WL_PSBW_DISA_AP20M 0x00000002 /* AP is operating on 20 MHz */
+#define WL_PSBW_DISA_SLOTTED_BSS 0x00000004 /* AWDL or NAN active */
+#define WL_PSBW_DISA_NOT_PMFAST 0x00000008 /* Not PM_FAST */
+#define WL_PSBW_DISA_BASICRATESET 0x00000010 /* BasicRateSet is empty */
+#define WL_PSBW_DISA_NOT_D3 0x00000020 /* PCIe not in D3 */
+#define WL_PSBW_DISA_CSA 0x00000040 /* CSA IE is present */
+#define WL_PSBW_DISA_ASSOC 0x00000080 /* assoc state is active/or unassoc */
+#define WL_PSBW_DISA_SCAN 0x00000100 /* scan state is active */
+#define WL_PSBW_DISA_CAL 0x00000200 /* cal pending or active */
+/* following are not part of disable reasons */
+#define WL_PSBW_EXIT_PM 0x00001000 /* Out of PM */
+#define WL_PSBW_EXIT_TIM 0x00002000 /* unicast TIM bit present */
+#define WL_PSBW_EXIT_DATA 0x00004000 /* Data for transmission */
+#define WL_PSBW_EXIT_MGMTDATA 0x00008000 /* management frame for transmission */
+#define WL_PSBW_EXIT_BW_UPD 0x00010000 /* BW being updated */
+#define WL_PSBW_DISA_NONE 0x80000000 /* reserved for internal use only */
/*
* Join preference iovar value is an array of tuples. Each tuple has a one-byte type,
@@ -2032,6 +3218,8 @@
#define RATE_LEGACY_OFDM_54MBPS 7
#define WL_BSSTRANS_RSSI_RATE_MAP_VERSION 1
+#define WL_BSSTRANS_RSSI_RATE_MAP_VERSION_V1 1
+#define WL_BSSTRANS_RSSI_RATE_MAP_VERSION_V2 2
typedef struct wl_bsstrans_rssi {
int8 rssi_2g; /**< RSSI in dbm for 2.4 G */
@@ -2040,19 +3228,40 @@
#define RSSI_RATE_MAP_MAX_STREAMS 4 /**< max streams supported */
-/* RSSI to rate mapping, all 20Mhz, no SGI */
+/** RSSI to rate mapping, all 20Mhz, no SGI */
+typedef struct wl_bsstrans_rssi_rate_map_v2 {
+ uint16 ver;
+ uint16 len; /**< length of entire structure */
+ wl_bsstrans_rssi_t cck[WL_NUM_RATES_CCK]; /**< 2.4G only */
+ wl_bsstrans_rssi_t ofdm[WL_NUM_RATES_OFDM]; /**< 6 to 54mbps */
+ wl_bsstrans_rssi_t phy_n[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_MCS_1STREAM]; /* MCS0-7 */
+ wl_bsstrans_rssi_t phy_ac[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_VHT_ALL]; /**< MCS0-11 */
+ wl_bsstrans_rssi_t phy_ax[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_HE]; /**< MCS0-11 */
+} wl_bsstrans_rssi_rate_map_v2_t;
+
+/** RSSI to rate mapping, all 20Mhz, no SGI */
+typedef struct wl_bsstrans_rssi_rate_map_v1 {
+ uint16 ver;
+ uint16 len; /**< length of entire structure */
+ wl_bsstrans_rssi_t cck[WL_NUM_RATES_CCK]; /**< 2.4G only */
+ wl_bsstrans_rssi_t ofdm[WL_NUM_RATES_OFDM]; /**< 6 to 54mbps */
+ wl_bsstrans_rssi_t phy_n[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_MCS_1STREAM]; /* MCS0-7 */
+ wl_bsstrans_rssi_t phy_ac[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_VHT]; /**< MCS0-9 */
+} wl_bsstrans_rssi_rate_map_v1_t;
+
+/** RSSI to rate mapping, all 20Mhz, no SGI */
typedef struct wl_bsstrans_rssi_rate_map {
uint16 ver;
- uint16 len; /* length of entire structure */
- wl_bsstrans_rssi_t cck[WL_NUM_RATES_CCK]; /* 2.4G only */
- wl_bsstrans_rssi_t ofdm[WL_NUM_RATES_OFDM]; /* 6 to 54mbps */
+ uint16 len; /**< length of entire structure */
+ wl_bsstrans_rssi_t cck[WL_NUM_RATES_CCK]; /**< 2.4G only */
+ wl_bsstrans_rssi_t ofdm[WL_NUM_RATES_OFDM]; /**< 6 to 54mbps */
wl_bsstrans_rssi_t phy_n[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_MCS_1STREAM]; /* MCS0-7 */
- wl_bsstrans_rssi_t phy_ac[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_VHT]; /* MCS0-9 */
+ wl_bsstrans_rssi_t phy_ac[RSSI_RATE_MAP_MAX_STREAMS][WL_NUM_RATES_VHT]; /**< MCS0-9 */
} wl_bsstrans_rssi_rate_map_t;
#define WL_BSSTRANS_ROAMTHROTTLE_VERSION 1
-/* Configure number of scans allowed per throttle period */
+/** Configure number of scans allowed per throttle period */
typedef struct wl_bsstrans_roamthrottle {
uint16 ver;
uint16 period;
@@ -2060,57 +3269,349 @@
} wl_bsstrans_roamthrottle_t;
#define NFIFO 6 /**< # tx/rx fifopairs */
+
+#if defined(BCM_AQM_DMA_DESC) && !defined(BCM_AQM_DMA_DESC_DISABLED)
+#if defined(WL_MU_TX) && !defined(WL_MU_TX_DISABLED)
+#define NFIFO_EXT 32 /* 6 traditional FIFOs + 2 rsvd + 24 MU FIFOs */
+#else
+#define NFIFO_EXT 10 /* 4EDCA + 4 TWT + 1 Mcast/Bcast + 1 Spare */
+#endif // endif
+#elif defined(WL11AX_TRIGGERQ) && !defined(WL11AX_TRIGGERQ_DISABLED)
+#define NFIFO_EXT 10
+#else
+#define NFIFO_EXT NFIFO
+#endif /* BCM_AQM_DMA_DESC && !BCM_AQM_DMA_DESC_DISABLED */
+
+/* Reinit reason codes */
+enum {
+ WL_REINIT_RC_NONE = 0,
+ WL_REINIT_RC_PS_SYNC = 1,
+ WL_REINIT_RC_PSM_WD = 2,
+ WL_REINIT_RC_MAC_WAKE = 3,
+ WL_REINIT_RC_MAC_SUSPEND = 4,
+ WL_REINIT_RC_MAC_SPIN_WAIT = 5,
+ WL_REINIT_RC_AXI_BUS_ERROR = 6,
+ WL_REINIT_RC_DEVICE_REMOVED = 7,
+ WL_REINIT_RC_PCIE_FATAL_ERROR = 8,
+ WL_REINIT_RC_OL_FW_TRAP = 9,
+ WL_REINIT_RC_FIFO_ERR = 10,
+ WL_REINIT_RC_INV_TX_STATUS = 11,
+ WL_REINIT_RC_MQ_ERROR = 12,
+ WL_REINIT_RC_PHYTXERR_THRESH = 13,
+ WL_REINIT_RC_USER_FORCED = 14,
+ WL_REINIT_RC_FULL_RESET = 15,
+ WL_REINIT_RC_AP_BEACON = 16,
+ WL_REINIT_RC_PM_EXCESSED = 17,
+ WL_REINIT_RC_NO_CLK = 18,
+ WL_REINIT_RC_SW_ASSERT = 19,
+ WL_REINIT_RC_PSM_JMP0 = 20,
+ WL_REINIT_RC_PSM_RUN = 21,
+ WL_REINIT_RC_ENABLE_MAC = 22,
+ WL_REINIT_RC_SCAN_TIMEOUT = 23,
+ WL_REINIT_RC_JOIN_TIMEOUT = 24,
+ /* Below error codes are generated during D3 exit validation */
+ WL_REINIT_RC_LINK_NOT_ACTIVE = 25,
+ WL_REINIT_RC_PCI_CFG_RD_FAIL = 26,
+ WL_REINIT_RC_INV_VEN_ID = 27,
+ WL_REINIT_RC_INV_DEV_ID = 28,
+ WL_REINIT_RC_INV_BAR0 = 29,
+ WL_REINIT_RC_INV_BAR2 = 30,
+ WL_REINIT_RC_AER_UC_FATAL = 31,
+ WL_REINIT_RC_AER_UC_NON_FATAL = 32,
+ WL_REINIT_RC_AER_CORR = 33,
+ WL_REINIT_RC_AER_DEV_STS = 34,
+ WL_REINIT_RC_PCIe_STS = 35,
+ WL_REINIT_RC_MMIO_RD_FAIL = 36,
+ WL_REINIT_RC_MMIO_RD_INVAL = 37,
+ WL_REINIT_RC_MMIO_ARM_MEM_RD_FAIL = 38,
+ WL_REINIT_RC_MMIO_ARM_MEM_INVAL = 39,
+ WL_REINIT_RC_SROM_LOAD_FAILED = 40,
+ WL_REINIT_RC_PHY_CRASH = 41,
+ WL_REINIT_TX_STALL = 42,
+ WL_REINIT_RC_TX_FLOW_CONTROL_BLOCKED = 43,
+ WL_REINIT_RC_RX_HC_FAIL = 44,
+ WL_REINIT_RC_RX_DMA_STALL = 45,
+ WL_REINIT_UTRACE_BUF_OVERLAP_SR = 46,
+ WL_REINIT_UTRACE_TPL_OUT_BOUNDS = 47,
+ WL_REINIT_UTRACE_TPL_OSET_STRT0 = 48,
+ WL_REINIT_RC_PHYTXERR = 49,
+ WL_REINIT_RC_PSM_FATAL_SUSP = 50,
+ WL_REINIT_RC_TX_FIFO_SUSP = 51,
+ WL_REINIT_RC_MAC_ENABLE = 52,
+ WL_REINIT_RC_SCAN_STALLED = 53,
+ WL_REINIT_RC_PHY_HC = 54,
+ WL_REINIT_RC_LAST /* This must be the last entry */
+};
+
#define NREINITREASONCOUNT 8
-#define REINITREASONIDX(_x) (((_x) < NREINITREASONCOUNT) ? (_x) : 0)
+
+#define REINITRSNIDX(_x) (((_x) < WL_REINIT_RC_LAST) ? (_x) : 0)
#define WL_CNT_T_VERSION 30 /**< current version of wl_cnt_t struct */
#define WL_CNT_VERSION_6 6
+#define WL_CNT_VERSION_7 7
#define WL_CNT_VERSION_11 11
#define WL_CNT_VERSION_XTLV 30
+#define WL_COUNTERS_IOV_VERSION_1 1
+#define WL_SUBCNTR_IOV_VER WL_COUNTERS_IOV_VERSION_1
+/* First two uint16 are version and lenght fields. So offset of the first counter will be 4 */
+#define FIRST_COUNTER_OFFSET 0x04
+
#define WLC_WITH_XTLV_CNT
-/*
+/* Number of xtlv info as required to calculate subcounter offsets */
+#define WL_CNT_XTLV_ID_NUM 10
+#define WL_TLV_IOV_VER 1
+
+/**
* tlv IDs uniquely identifies counter component
* packed into wl_cmd_t container
*/
enum wl_cnt_xtlv_id {
+ WL_CNT_XTLV_SLICE_IDX = 0x1, /**< Slice index */
WL_CNT_XTLV_WLC = 0x100, /**< WLC layer counters */
+ WL_CNT_XTLV_WLC_RINIT_RSN = 0x101, /**< WLC layer reinitreason extension */
+ WL_CNT_XTLV_WLC_HE = 0x102, /* he counters */
+ WL_CNT_XTLV_WLC_SECVLN = 0x103, /* security vulnerabilities counters */
WL_CNT_XTLV_CNTV_LE10_UCODE = 0x200, /**< wl counter ver < 11 UCODE MACSTAT */
WL_CNT_XTLV_LT40_UCODE_V1 = 0x300, /**< corerev < 40 UCODE MACSTAT */
WL_CNT_XTLV_GE40_UCODE_V1 = 0x400, /**< corerev >= 40 UCODE MACSTAT */
- WL_CNT_XTLV_GE64_UCODEX_V1 = 0x800 /* corerev >= 64 UCODEX MACSTAT */
+ WL_CNT_XTLV_GE64_UCODEX_V1 = 0x800, /* corerev >= 64 UCODEX MACSTAT */
+ WL_CNT_XTLV_GE80_UCODE_V1 = 0x900, /* corerev >= 80 UCODEX MACSTAT */
+ WL_CNT_XTLV_GE80_TXFUNFL_UCODE_V1 = 0x1000 /* corerev >= 80 UCODEX MACSTAT */
};
-/* The number of variables in wl macstat cnt struct.
+/* tlv IDs uniquely identifies periodic state component */
+enum wl_periodic_slice_state_xtlv_id {
+ WL_STATE_COMPACT_COUNTERS = 0x1,
+ WL_STATE_TXBF_COUNTERS = 0x2,
+ WL_STATE_COMPACT_HE_COUNTERS = 0x3
+};
+
+/* tlv IDs uniquely identifies periodic state component */
+enum wl_periodic_if_state_xtlv_id {
+ WL_STATE_IF_COMPACT_STATE = 0x1,
+ WL_STATE_IF_ADPS_STATE = 0x02
+};
+
+#define TDMTX_CNT_VERSION_V1 1
+#define TDMTX_CNT_VERSION_V2 2
+
+/* structure holding tdm counters that interface to iovar */
+typedef struct tdmtx_cnt_v1 {
+ uint16 ver;
+ uint16 length; /* length of this structure */
+ uint16 wlc_idx; /* index for wlc */
+ uint16 enabled; /* tdmtx is enabled on slice */
+ uint32 tdmtx_txa_on; /* TXA on requests */
+ uint32 tdmtx_txa_tmcnt; /* Total number of TXA timeout */
+ uint32 tdmtx_por_on; /* TXA POR requests */
+ uint32 tdmtx_txpuen; /* Path enable requests */
+ uint32 tdmtx_txpudis; /* Total number of times Tx path is muted on the slice */
+ uint32 tdmtx_txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint32 tdmtx_txdefer; /* Total number of times Tx was deferred on the slice */
+ uint32 tdmtx_txmute; /* Total number of times active Tx muted on the slice */
+ uint32 tdmtx_actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint32 tdmtx_txa_dur; /* Total time txa on */
+ uint32 tdmtx_txpri_dur; /* Total time TXPri */
+ uint32 tdmtx_txdefer_dur; /* Total time txdefer */
+ /* TDMTX input fields */
+ uint32 tdmtx_txpri;
+ uint32 tdmtx_defer;
+ uint32 tdmtx_threshold;
+ uint32 tdmtx_rssi_threshold;
+ uint32 tdmtx_txpwrboff;
+ uint32 tdmtx_txpwrboff_dt;
+} tdmtx_cnt_v1_t;
+
+typedef struct {
+ uint16 ver;
+ uint16 length; /* length of the data portion */
+ uint16 cnt;
+ uint16 pad; /* pad to align to 32 bit */
+ uint8 data[]; /* array of tdmtx_cnt_v1_t */
+} tdmtx_status_t;
+
+/* structure holding counters that match exactly shm field sizes */
+typedef struct tdmtx_cnt_shm_v1 {
+ uint16 tdmtx_txa_on; /* TXA on requests */
+ uint16 tdmtx_tmcnt; /* TXA on requests */
+ uint16 tdmtx_por_on; /* TXA POR requests */
+ uint16 tdmtx_txpuen; /* Path enable requests */
+ uint16 tdmtx_txpudis; /* Total number of times Tx path is muted on the slice */
+ uint16 tdmtx_txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint16 tdmtx_txdefer; /* Total number of times Tx was defered by the slice */
+ uint16 tdmtx_txmute; /* Total number of times active Tx muted on the slice */
+ uint16 tdmtx_actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint16 tdmtx_txa_dur_l; /* Total time (low 16 bits) txa on */
+ uint16 tdmtx_txa_dur_h; /* Total time (low 16 bits) txa on */
+ uint16 tdmtx_txpri_dur_l; /* Total time (low 16 bits) TXPri */
+ uint16 tdmtx_txpri_dur_h; /* Total time (high 16 bits) TXPri */
+ uint16 tdmtx_txdefer_dur_l; /* Total time (low 16 bits) txdefer */
+ uint16 tdmtx_txdefer_dur_h; /* Total time (high 16 bits) txdefer */
+} tdmtx_cnt_shm_v1_t;
+
+/* structure holding tdm counters that interface to iovar for version 2 */
+typedef struct tdmtx_cnt_v2 {
+ uint16 ver;
+ uint16 length; /* length of this structure */
+ uint16 wlc_idx; /* index for wlc */
+ uint16 enabled; /* tdmtx is enabled on slice */
+ uint32 tdmtx_txa_on; /* TXA on requests */
+ uint32 tdmtx_txa_tmcnt; /* Total number of TXA timeout */
+ uint32 tdmtx_porhi_on; /* TXA PORHI requests */
+ uint32 tdmtx_porlo_on; /* TXA PORLO requests */
+ uint32 tdmtx_txpuen; /* Path enable requests */
+ uint32 tdmtx_txpudis; /* Total number of times Tx path is muted on the slice */
+ uint32 tdmtx_txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint32 tdmtx_txdefer; /* Total number of times Tx was deferred on the slice */
+ uint32 tdmtx_txmute; /* Total number of times active Tx muted on the slice */
+ uint32 tdmtx_actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint32 tdmtx_txa_dur; /* Total time txa on */
+ uint32 tdmtx_txpri_dur; /* Total time TXPri */
+ uint32 tdmtx_txdefer_dur; /* Total time txdefer */
+ /* TDMTX input fields */
+ uint32 tdmtx_txpri;
+ uint32 tdmtx_defer;
+ uint32 tdmtx_threshold;
+ uint32 tdmtx_rssi_threshold;
+ uint32 tdmtx_txpwrboff;
+ uint32 tdmtx_txpwrboff_dt;
+} tdmtx_cnt_v2_t;
+
+/* structure holding counters that match exactly shm field sizes */
+typedef struct tdmtx_cnt_shm_v2 {
+ uint16 tdmtx_txa_on; /* TXA on requests */
+ uint16 tdmtx_tmcnt; /* TXA on requests */
+ uint16 tdmtx_porhi_on; /* TXA PORHI requests */
+ uint16 tdmtx_porlo_on; /* TXA PORLO requests */
+ uint16 tdmtx_txpuen; /* Path enable requests */
+ uint16 tdmtx_txpudis; /* Total number of times Tx path is muted on the slice */
+ uint16 tdmtx_txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint16 tdmtx_txdefer; /* Total number of times Tx was defered by the slice */
+ uint16 tdmtx_txmute; /* Total number of times active Tx muted on the slice */
+ uint16 tdmtx_actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint16 tdmtx_txa_dur_l; /* Total time (low 16 bits) txa on */
+ uint16 tdmtx_txa_dur_h; /* Total time (low 16 bits) txa on */
+ uint16 tdmtx_txpri_dur_l; /* Total time (low 16 bits) TXPri */
+ uint16 tdmtx_txpri_dur_h; /* Total time (high 16 bits) TXPri */
+ uint16 tdmtx_txdefer_dur_l; /* Total time (low 16 bits) txdefer */
+ uint16 tdmtx_txdefer_dur_h; /* Total time (high 16 bits) txdefer */
+} tdmtx_cnt_shm_v2_t;
+
+typedef struct wl_tdmtx_ioc {
+ uint16 id; /* ID of the sub-command */
+ uint16 len; /* total length of all data[] */
+ uint8 data[]; /* var len payload */
+} wl_tdmtx_ioc_t;
+
+/*
+ * iovar subcommand ids
+ */
+enum {
+ IOV_TDMTX_ENB = 1,
+ IOV_TDMTX_STATUS = 2,
+ IOV_TDMTX_TXPRI = 3,
+ IOV_TDMTX_DEFER = 4,
+ IOV_TDMTX_TXA = 5,
+ IOV_TDMTX_CFG = 6,
+ IOV_TDMTX_LAST
+};
+
+/**
+ * The number of variables in wl macstat cnt struct.
* (wl_cnt_ge40mcst_v1_t, wl_cnt_lt40mcst_v1_t, wl_cnt_v_le10_mcst_t)
*/
#define WL_CNT_MCST_VAR_NUM 64
/* sizeof(wl_cnt_ge40mcst_v1_t), sizeof(wl_cnt_lt40mcst_v1_t), and sizeof(wl_cnt_v_le10_mcst_t) */
-#define WL_CNT_MCST_STRUCT_SZ ((uint)sizeof(uint32) * WL_CNT_MCST_VAR_NUM)
+#define WL_CNT_MCST_STRUCT_SZ ((uint32)sizeof(uint32) * WL_CNT_MCST_VAR_NUM)
+#define WL_CNT_REV80_MCST_STRUCT_SZ ((uint32)sizeof(wl_cnt_ge80mcst_v1_t))
+#define WL_CNT_REV80_MCST_TXFUNFlW_STRUCT_FIXED_SZ \
+ ((uint32)OFFSETOF(wl_cnt_ge80_txfunfl_v1_t, txfunfl))
+#define WL_CNT_REV80_MCST_TXFUNFl_STRUCT_SZ(fcnt) \
+ (WL_CNT_REV80_MCST_TXFUNFlW_STRUCT_FIXED_SZ + (fcnt * sizeof(uint32)))
+#define WL_CNT_REV80_MCST_TXFUNFlW_STRUCT_SZ (WL_CNT_REV80_MCST_TXFUNFl_STRUCT_SZ(NFIFO_EXT))
+
+#define WL_CNT_MCXST_STRUCT_SZ ((uint32)sizeof(wl_cnt_ge64mcxst_v1_t))
+
+#define WL_CNT_HE_STRUCT_SZ ((uint32)sizeof(wl_he_cnt_wlc_t))
+
+#define WL_CNT_SECVLN_STRUCT_SZ ((uint32)sizeof(wl_secvln_cnt_t))
#define INVALID_CNT_VAL (uint32)(-1)
-#define WL_CNT_MCXST_STRUCT_SZ ((uint)sizeof(wl_cnt_ge64mcxst_v1_t))
-#define WL_XTLV_CNTBUF_MAX_SIZE ((uint)(OFFSETOF(wl_cnt_info_t, data)) + \
- (uint)BCM_XTLV_HDR_SIZE + (uint)sizeof(wl_cnt_wlc_t) + \
- (uint)BCM_XTLV_HDR_SIZE + WL_CNT_MCST_STRUCT_SZ + \
- (uint)BCM_XTLV_HDR_SIZE + WL_CNT_MCXST_STRUCT_SZ)
+#define WL_XTLV_CNTBUF_MAX_SIZE ((uint32)(OFFSETOF(wl_cnt_info_t, data)) + \
+ (uint32)BCM_XTLV_HDR_SIZE + (uint32)sizeof(wl_cnt_wlc_t) + \
+ (uint32)BCM_XTLV_HDR_SIZE + WL_CNT_MCST_STRUCT_SZ + \
+ (uint32)BCM_XTLV_HDR_SIZE + WL_CNT_MCXST_STRUCT_SZ)
-#define WL_CNTBUF_MAX_SIZE MAX(WL_XTLV_CNTBUF_MAX_SIZE, (uint)sizeof(wl_cnt_ver_11_t))
+#define WL_CNTBUF_MAX_SIZE MAX(WL_XTLV_CNTBUF_MAX_SIZE, (uint32)sizeof(wl_cnt_ver_11_t))
-/* Top structure of counters IOVar buffer */
+/** Top structure of counters IOVar buffer */
typedef struct {
uint16 version; /**< see definition of WL_CNT_T_VERSION */
uint16 datalen; /**< length of data including all paddings. */
- uint8 data [1]; /**< variable length payload:
+ uint8 data []; /**< variable length payload:
* 1 or more bcm_xtlv_t type of tuples.
* each tuple is padded to multiple of 4 bytes.
* 'datalen' field of this structure includes all paddings.
*/
} wl_cnt_info_t;
-/* wlc layer counters */
+/* Top structure of subcounters IOVar buffer
+ * Whenever we make any change in this structure
+ * WL_SUBCNTR_IOV_VER should be updated accordingly
+ * The structure definition should remain consistant b/w
+ * FW and wl/WLM app.
+ */
+typedef struct {
+ uint16 version; /* Version of IOVAR structure. Used for backward
+ * compatibility in future. Whenever we make any
+ * changes to this structure then value of WL_SUBCNTR_IOV_VER
+ * needs to be updated properly.
+ */
+ uint16 length; /* length in bytes of this structure */
+ uint16 counters_version; /* see definition of WL_CNT_T_VERSION
+ * wl app will send the version of counters
+ * which is used to calculate the offset of counters.
+ * It must match the version of counters FW is using
+ * else FW will return error with his version of counters
+ * set in this field.
+ */
+ uint16 num_subcounters; /* Number of counter offset passed by wl app to FW. */
+ uint32 data[1]; /* variable length payload:
+ * Offsets to the counters will be passed to FW
+ * throught this data field. FW will return the value of counters
+ * at the offsets passed by wl app in this fiels itself.
+ */
+} wl_subcnt_info_t;
+
+/* Top structure of counters TLV version IOVar buffer
+ * The structure definition should remain consistant b/w
+ * FW and wl/WLM app.
+ */
+typedef struct {
+ uint16 version; /* Version of IOVAR structure. Added for backward
+ * compatibility feature. If any changes are done,
+ * WL_TLV_IOV_VER need to be updated.
+ */
+ uint16 length; /* total len in bytes of this structure + payload */
+ uint16 counters_version; /* See definition of WL_CNT_VERSION_XTLV
+ * wl app will update counter tlv version to be used
+ * so to calculate offset of supported TLVs.
+ * If there is a mismatch in the version, FW will update an error
+ */
+ uint16 num_tlv; /* Max number of TLV info passed by FW to WL app.
+ * and vice-versa
+ */
+ uint32 data[]; /* variable length payload:
+ * This stores the tlv as supported by F/W to the wl app.
+ * This table is required to compute subcounter offsets at WLapp end.
+ */
+} wl_cntr_tlv_info_t;
+
+/** wlc layer counters */
typedef struct {
/* transmit stat counters */
uint32 txframe; /**< tx data frames */
@@ -2206,31 +3707,31 @@
uint32 prq_bad_entries; /**< which could not be translated to info */
uint32 atim_suppress_count; /**< TX suppressions on ATIM fifo */
uint32 bcn_template_not_ready; /**< Template marked in use on send bcn ... */
- uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */
+ uint32 bcn_template_not_ready_done; /**< ...but "DMA done" interrupt rcvd */
uint32 late_tbtt_dpc; /**< TBTT DPC did not happen in time */
/* per-rate receive stat counters */
- uint32 rx1mbps; /* packets rx at 1Mbps */
- uint32 rx2mbps; /* packets rx at 2Mbps */
- uint32 rx5mbps5; /* packets rx at 5.5Mbps */
- uint32 rx6mbps; /* packets rx at 6Mbps */
- uint32 rx9mbps; /* packets rx at 9Mbps */
- uint32 rx11mbps; /* packets rx at 11Mbps */
- uint32 rx12mbps; /* packets rx at 12Mbps */
- uint32 rx18mbps; /* packets rx at 18Mbps */
- uint32 rx24mbps; /* packets rx at 24Mbps */
- uint32 rx36mbps; /* packets rx at 36Mbps */
- uint32 rx48mbps; /* packets rx at 48Mbps */
- uint32 rx54mbps; /* packets rx at 54Mbps */
- uint32 rx108mbps; /* packets rx at 108mbps */
- uint32 rx162mbps; /* packets rx at 162mbps */
- uint32 rx216mbps; /* packets rx at 216 mbps */
- uint32 rx270mbps; /* packets rx at 270 mbps */
- uint32 rx324mbps; /* packets rx at 324 mbps */
- uint32 rx378mbps; /* packets rx at 378 mbps */
- uint32 rx432mbps; /* packets rx at 432 mbps */
- uint32 rx486mbps; /* packets rx at 486 mbps */
- uint32 rx540mbps; /* packets rx at 540 mbps */
+ uint32 rx1mbps; /**< packets rx at 1Mbps */
+ uint32 rx2mbps; /**< packets rx at 2Mbps */
+ uint32 rx5mbps5; /**< packets rx at 5.5Mbps */
+ uint32 rx6mbps; /**< packets rx at 6Mbps */
+ uint32 rx9mbps; /**< packets rx at 9Mbps */
+ uint32 rx11mbps; /**< packets rx at 11Mbps */
+ uint32 rx12mbps; /**< packets rx at 12Mbps */
+ uint32 rx18mbps; /**< packets rx at 18Mbps */
+ uint32 rx24mbps; /**< packets rx at 24Mbps */
+ uint32 rx36mbps; /**< packets rx at 36Mbps */
+ uint32 rx48mbps; /**< packets rx at 48Mbps */
+ uint32 rx54mbps; /**< packets rx at 54Mbps */
+ uint32 rx108mbps; /**< packets rx at 108mbps */
+ uint32 rx162mbps; /**< packets rx at 162mbps */
+ uint32 rx216mbps; /**< packets rx at 216 mbps */
+ uint32 rx270mbps; /**< packets rx at 270 mbps */
+ uint32 rx324mbps; /**< packets rx at 324 mbps */
+ uint32 rx378mbps; /**< packets rx at 378 mbps */
+ uint32 rx432mbps; /**< packets rx at 432 mbps */
+ uint32 rx486mbps; /**< packets rx at 486 mbps */
+ uint32 rx540mbps; /**< packets rx at 540 mbps */
uint32 rfdisable; /**< count of radio disables */
@@ -2266,7 +3767,7 @@
uint32 pstarxbcmc; /**< count of bcmc frames received on all psta */
uint32 pstatxbcmc; /**< count of bcmc frames transmitted on all psta */
- uint32 cso_passthrough; /* hw cso required but passthrough */
+ uint32 cso_passthrough; /**< hw cso required but passthrough */
uint32 cso_normal; /**< hw cso hdr for normal process */
uint32 chained; /**< number of frames chained */
uint32 chainedsz1; /**< number of chain size 1 frames */
@@ -2275,46 +3776,129 @@
uint32 currchainsz; /**< current chain size */
uint32 pciereset; /**< Secondary Bus Reset issued by driver */
uint32 cfgrestore; /**< configspace restore by driver */
- uint32 reinitreason[NREINITREASONCOUNT]; /* reinitreason counters; 0: Unknown reason */
+ uint32 reinitreason[NREINITREASONCOUNT]; /**< reinitreason counters; 0: Unknown reason */
uint32 rxrtry;
-
- uint32 rxmpdu_mu; /* Number of MU MPDUs received */
+ uint32 rxmpdu_mu; /**< Number of MU MPDUs received */
/* detailed control/management frames */
- uint32 txbar; /**< Number of TX BAR */
- uint32 rxbar; /**< Number of RX BAR */
- uint32 txpspoll; /**< Number of TX PS-poll */
- uint32 rxpspoll; /**< Number of RX PS-poll */
- uint32 txnull; /**< Number of TX NULL_DATA */
- uint32 rxnull; /**< Number of RX NULL_DATA */
- uint32 txqosnull; /**< Number of TX NULL_QoSDATA */
- uint32 rxqosnull; /**< Number of RX NULL_QoSDATA */
- uint32 txassocreq; /**< Number of TX ASSOC request */
- uint32 rxassocreq; /**< Number of RX ASSOC request */
- uint32 txreassocreq; /**< Number of TX REASSOC request */
- uint32 rxreassocreq; /**< Number of RX REASSOC request */
- uint32 txdisassoc; /**< Number of TX DISASSOC */
- uint32 rxdisassoc; /**< Number of RX DISASSOC */
- uint32 txassocrsp; /**< Number of TX ASSOC response */
- uint32 rxassocrsp; /**< Number of RX ASSOC response */
- uint32 txreassocrsp; /**< Number of TX REASSOC response */
- uint32 rxreassocrsp; /**< Number of RX REASSOC response */
- uint32 txauth; /**< Number of TX AUTH */
- uint32 rxauth; /**< Number of RX AUTH */
- uint32 txdeauth; /**< Number of TX DEAUTH */
- uint32 rxdeauth; /**< Number of RX DEAUTH */
- uint32 txprobereq; /**< Number of TX probe request */
- uint32 rxprobereq; /**< Number of RX probe request */
- uint32 txprobersp; /**< Number of TX probe response */
- uint32 rxprobersp; /**< Number of RX probe response */
- uint32 txaction; /**< Number of TX action frame */
- uint32 rxaction; /**< Number of RX action frame */
- uint32 ampdu_wds; /**< Number of AMPDU watchdogs */
- uint32 txlost; /**< Number of lost packets reported in txs */
+ uint32 txbar; /**< Number of TX BAR */
+ uint32 rxbar; /**< Number of RX BAR */
+ uint32 txpspoll; /**< Number of TX PS-poll */
+ uint32 rxpspoll; /**< Number of RX PS-poll */
+ uint32 txnull; /**< Number of TX NULL_DATA */
+ uint32 rxnull; /**< Number of RX NULL_DATA */
+ uint32 txqosnull; /**< Number of TX NULL_QoSDATA */
+ uint32 rxqosnull; /**< Number of RX NULL_QoSDATA */
+ uint32 txassocreq; /**< Number of TX ASSOC request */
+ uint32 rxassocreq; /**< Number of RX ASSOC request */
+ uint32 txreassocreq; /**< Number of TX REASSOC request */
+ uint32 rxreassocreq; /**< Number of RX REASSOC request */
+ uint32 txdisassoc; /**< Number of TX DISASSOC */
+ uint32 rxdisassoc; /**< Number of RX DISASSOC */
+ uint32 txassocrsp; /**< Number of TX ASSOC response */
+ uint32 rxassocrsp; /**< Number of RX ASSOC response */
+ uint32 txreassocrsp; /**< Number of TX REASSOC response */
+ uint32 rxreassocrsp; /**< Number of RX REASSOC response */
+ uint32 txauth; /**< Number of TX AUTH */
+ uint32 rxauth; /**< Number of RX AUTH */
+ uint32 txdeauth; /**< Number of TX DEAUTH */
+ uint32 rxdeauth; /**< Number of RX DEAUTH */
+ uint32 txprobereq; /**< Number of TX probe request */
+ uint32 rxprobereq; /**< Number of RX probe request */
+ uint32 txprobersp; /**< Number of TX probe response */
+ uint32 rxprobersp; /**< Number of RX probe response */
+ uint32 txaction; /**< Number of TX action frame */
+ uint32 rxaction; /**< Number of RX action frame */
+ uint32 ampdu_wds; /**< Number of AMPDU watchdogs */
+ uint32 txlost; /**< Number of lost packets reported in txs */
uint32 txdatamcast; /**< Number of TX multicast data packets */
uint32 txdatabcast; /**< Number of TX broadcast data packets */
- uint32 psmxwds; /**< Number of PSMx watchdogs */
+ uint32 psmxwds; /**< Number of PSMx watchdogs */
+ uint32 rxback;
+ uint32 txback;
+ uint32 p2p_tbtt; /**< Number of P2P TBTT Events */
+ uint32 p2p_tbtt_miss; /**< Number of P2P TBTT Events Miss */
+ uint32 txqueue_start;
+ uint32 txqueue_end;
+ uint32 txbcast; /* Broadcast TransmittedFrameCount */
+ uint32 txdropped; /* tx dropped pkts */
+ uint32 rxbcast; /* BroadcastReceivedFrameCount */
+ uint32 rxdropped; /* rx dropped pkts (derived: sum of others) */
+ uint32 txq_end_assoccb; /* forced txqueue_end callback fired in assoc */
+ uint32 tx_toss_cnt; /* number of tx packets tossed */
+ uint32 rx_toss_cnt; /* number of rx packets tossed */
+ uint32 last_tx_toss_rsn; /* reason because of which last tx pkt tossed */
+ uint32 last_rx_toss_rsn; /* reason because of which last rx pkt tossed */
+ uint32 pmk_badlen_cnt; /* number of invalid pmk len */
+
} wl_cnt_wlc_t;
+
+/* he counters Version 1 */
+#define HE_COUNTERS_V1 (1)
+typedef struct wl_he_cnt_wlc_v1 {
+ uint32 he_rxtrig_myaid;
+ uint32 he_rxtrig_rand;
+ uint32 he_colormiss_cnt;
+ uint32 he_txmampdu;
+ uint32 he_txmtid_back;
+ uint32 he_rxmtid_back;
+ uint32 he_rxmsta_back;
+ uint32 he_txfrag;
+ uint32 he_rxdefrag;
+ uint32 he_txtrig;
+ uint32 he_rxtrig_basic;
+ uint32 he_rxtrig_murts;
+ uint32 he_rxtrig_bsrp;
+ uint32 he_rxdlmu;
+ uint32 he_physu_rx;
+ uint32 he_phyru_rx;
+ uint32 he_txtbppdu;
+} wl_he_cnt_wlc_v1_t;
+
+/* he counters Version 2 */
+#define HE_COUNTERS_V2 (2)
+typedef struct wl_he_cnt_wlc_v2 {
+ uint16 version;
+ uint16 len;
+ uint32 he_rxtrig_myaid; /**< rxed valid trigger frame with myaid */
+ uint32 he_rxtrig_rand; /**< rxed valid trigger frame with random aid */
+ uint32 he_colormiss_cnt; /**< for bss color mismatch cases */
+ uint32 he_txmampdu; /**< for multi-TID AMPDU transmission */
+ uint32 he_txmtid_back; /**< for multi-TID BACK transmission */
+ uint32 he_rxmtid_back; /**< reception of multi-TID BACK */
+ uint32 he_rxmsta_back; /**< reception of multi-STA BACK */
+ uint32 he_txfrag; /**< transmission of Dynamic fragmented packets */
+ uint32 he_rxdefrag; /**< reception of dynamic fragmented packets */
+ uint32 he_txtrig; /**< transmission of trigger frames */
+ uint32 he_rxtrig_basic; /**< reception of basic trigger frame */
+ uint32 he_rxtrig_murts; /**< reception of MU-RTS trigger frame */
+ uint32 he_rxtrig_bsrp; /**< reception of BSR poll trigger frame */
+ uint32 he_rxdlmu; /**< reception of DL MU PPDU */
+ uint32 he_physu_rx; /**< reception of SU frame */
+ uint32 he_phyru_rx; /**< reception of RU frame */
+ uint32 he_txtbppdu; /**< increments on transmission of every TB PPDU */
+ uint32 he_null_tbppdu; /**< null TB PPDU's sent as a response to basic trigger frame */
+ uint32 he_rxtrig_bfrp; /**< reception of BFRP frame */
+ uint32 he_rxtrig_mubar; /**< reception of MU BAR frame */
+} wl_he_cnt_wlc_v2_t;
+
+#ifndef HE_COUNTERS_VERSION_ENABLED
+#define HE_COUNTERS_VERSION (HE_COUNTERS_V1)
+typedef wl_he_cnt_wlc_v1_t wl_he_cnt_wlc_t;
+#endif /* HE_COUNTERS_VERSION_ENABLED */
+
+/* security vulnerabilities counters */
+typedef struct {
+ uint32 ie_unknown; /* number of unknown IEs */
+ uint32 ie_invalid_length; /* number of IEs with invalid length */
+ uint32 ie_invalid_data; /* number of IEs with invalid data */
+ uint32 ipv6_invalid_length; /* number of IPv6 packets with invalid payload length */
+} wl_secvln_cnt_t;
+
+/* Reinit reasons - do not put anything else other than reinit reasons here */
+typedef struct {
+ uint32 rsn[WL_REINIT_RC_LAST];
+} reinit_rsns_t;
/* MACXSTAT counters for ucodex (corerev >= 64) */
typedef struct {
@@ -2326,7 +3910,7 @@
uint32 sfb2v;
} wl_cnt_ge64mcxst_v1_t;
-/* MACSTAT counters for ucode (corerev >= 40) */
+/** MACSTAT counters for ucode (corerev >= 40) */
typedef struct {
/* MAC counters: 32-bit version of d11.h's macstat_t */
uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
@@ -2346,8 +3930,8 @@
uint32 txphyerror; /**< Transmit phy error, type of error is reported in tx-status for
* driver enqueued frames
*/
- uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */
- uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */
+ uint32 pktengrxducast; /**< unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /**< multicast frames rxed by the pkteng code */
uint32 rxfrmtoolong; /**< Received frame longer than legal limit (2346 bytes) */
uint32 rxfrmtooshrt; /**< Received frame did not contain enough bytes for its frame type */
uint32 rxanyerr; /**< Any RX error that is not counted by other counters. */
@@ -2374,7 +3958,7 @@
* (unlikely to see these)
*/
uint32 rxbeaconmbss; /**< beacons received from member of BSS */
- uint32 rxdtucastobss; /* number of unicast frames addressed to the MAC from
+ uint32 rxdtucastobss; /**< number of unicast frames addressed to the MAC from
* other BSS (WDS FRAME)
*/
uint32 rxbeaconobss; /**< beacons received from other BSS */
@@ -2411,7 +3995,7 @@
uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
} wl_cnt_ge40mcst_v1_t;
-/* MACSTAT counters for ucode (corerev < 40) */
+/** MACSTAT counters for ucode (corerev < 40) */
typedef struct {
/* MAC counters: 32-bit version of d11.h's macstat_t */
uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
@@ -2459,7 +4043,7 @@
* (unlikely to see these)
*/
uint32 rxbeaconmbss; /**< beacons received from member of BSS */
- uint32 rxdtucastobss; /* number of unicast frames addressed to the MAC from
+ uint32 rxdtucastobss; /**< number of unicast frames addressed to the MAC from
* other BSS (WDS FRAME)
*/
uint32 rxbeaconobss; /**< beacons received from other BSS */
@@ -2496,7 +4080,120 @@
uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
} wl_cnt_lt40mcst_v1_t;
-/* MACSTAT counters for "wl counter" version <= 10 */
+/** MACSTAT counters for ucode (corerev >= 80) */
+typedef struct {
+ /* MAC counters: 32-bit version of d11.h's macstat_t */
+ /* Start of PSM2HOST stats(72) block */
+ uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
+ * Control Management (includes retransmissions)
+ */
+ uint32 txrtsfrm; /**< number of RTS sent out by the MAC */
+ uint32 txctsfrm; /**< number of CTS sent out by the MAC */
+ uint32 txackfrm; /**< number of ACK frames sent out */
+ uint32 txdnlfrm; /**< number of Null-Data transmission generated from template */
+ uint32 txbcnfrm; /**< beacons transmitted */
+ uint32 txampdu; /**< number of AMPDUs transmitted */
+ uint32 txmpdu; /**< number of MPDUs transmitted */
+ uint32 txtplunfl; /**< Template underflows (mac was too slow to transmit ACK/CTS
+ * or BCN)
+ */
+ uint32 txphyerror; /**< Transmit phy error, type of error is reported in tx-status for
+ * driver enqueued frames
+ */
+ uint32 pktengrxducast; /**< unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /**< multicast frames rxed by the pkteng code */
+ uint32 rxfrmtoolong; /**< Received frame longer than legal limit (2346 bytes) */
+ uint32 rxfrmtooshrt; /**< Received frame did not contain enough bytes for its frame type */
+ uint32 rxanyerr; /**< Any RX error that is not counted by other counters. */
+ uint32 rxbadfcs; /**< number of frames for which the CRC check failed in the MAC */
+ uint32 rxbadplcp; /**< parity check of the PLCP header failed */
+ uint32 rxcrsglitch; /**< PHY was able to correlate the preamble but not the header */
+ uint32 rxstrt; /**< Number of received frames with a good PLCP
+ * (i.e. passing parity check)
+ */
+ uint32 rxdtucastmbss; /**< number of received DATA frames with good FCS and matching RA */
+ uint32 rxmgucastmbss; /**< number of received mgmt frames with good FCS and matching RA */
+ uint32 rxctlucast; /**< number of received CNTRL frames with good FCS and matching RA */
+ uint32 rxrtsucast; /**< number of unicast RTS addressed to the MAC (good FCS) */
+ uint32 rxctsucast; /**< number of unicast CTS addressed to the MAC (good FCS) */
+ uint32 rxackucast; /**< number of ucast ACKS received (good FCS) */
+ uint32 rxdtocast; /**< number of received DATA frames (good FCS and not matching RA) */
+ uint32 rxmgocast; /**< number of received MGMT frames (good FCS and not matching RA) */
+ uint32 rxctlocast; /**< number of received CNTRL frame (good FCS and not matching RA) */
+ uint32 rxrtsocast; /**< number of received RTS not addressed to the MAC */
+ uint32 rxctsocast; /**< number of received CTS not addressed to the MAC */
+ uint32 rxdtmcast; /**< number of RX Data multicast frames received by the MAC */
+ uint32 rxmgmcast; /**< number of RX Management multicast frames received by the MAC */
+ uint32 rxctlmcast; /**< number of RX Control multicast frames received by the MAC
+ * (unlikely to see these)
+ */
+ uint32 rxbeaconmbss; /**< beacons received from member of BSS */
+ uint32 rxdtucastobss; /**< number of unicast frames addressed to the MAC from
+ * other BSS (WDS FRAME)
+ */
+ uint32 rxbeaconobss; /**< beacons received from other BSS */
+ uint32 rxrsptmout; /**< number of response timeouts for transmitted frames
+ * expecting a response
+ */
+ uint32 bcntxcancl; /**< transmit beacons canceled due to receipt of beacon (IBSS) */
+ uint32 rxnodelim; /**< number of no valid delimiter detected by ampdu parser */
+ uint32 missbcn_dbg; /**< number of beacon missed to receive */
+ uint32 pmqovfl; /**< number of PMQ overflows */
+ uint32 rxcgprqfrm; /**< number of received Probe requests that made it into
+ * the PRQ fifo
+ */
+ uint32 rxcgprsqovfl; /**< Rx Probe Request Que overflow in the AP */
+ uint32 txcgprsfail; /**< Tx Probe Response Fail. AP sent probe response but did
+ * not get ACK
+ */
+ uint32 txcgprssuc; /**< Tx Probe Response Success (ACK was received) */
+ uint32 prs_timeout; /**< number of probe requests that were dropped from the PRQ
+ * fifo because a probe response could not be sent out within
+ * the time limit defined in M_PRS_MAXTIME
+ */
+ uint32 txrtsfail; /**< number of rts transmission failure that reach retry limit */
+ uint32 txucast; /**< number of unicast tx expecting response other than cts/cwcts */
+ uint32 txinrtstxop; /**< number of data frame transmissions during rts txop */
+ uint32 rxback; /**< blockack rxcnt */
+ uint32 txback; /**< blockack txcnt */
+ uint32 bphy_rxcrsglitch; /**< PHY count of bphy glitches */
+ uint32 rxdrop20s; /**< drop secondary cnt */
+ uint32 rxtoolate; /**< receive too late */
+ uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
+ uint32 rxtrig_myaid; /* New counters added in corerev 80 */
+ uint32 rxtrig_rand;
+ uint32 goodfcs;
+ uint32 colormiss;
+ uint32 txmampdu;
+ uint32 rxmtidback;
+ uint32 rxmstaback;
+ uint32 txfrag;
+ /* End of PSM2HOST stats block */
+ /* start of rxerror overflow counter(24) block which are modified/added in corerev 80 */
+ uint32 phyovfl;
+ uint32 rxf0ovfl; /**< number of receive fifo 0 overflows */
+ uint32 rxf1ovfl; /**< number of receive fifo 1 overflows */
+ uint32 lenfovfl;
+ uint32 weppeof;
+ uint32 badplcp;
+ uint32 msduthresh;
+ uint32 strmeof;
+ uint32 stsfifofull;
+ uint32 stsfifoerr;
+ uint32 PAD[6];
+ uint32 rxerr_stat;
+ uint32 ctx_fifo_full;
+ uint32 txdatamcast; /**< Number of TX multicast data packets */
+ uint32 txdatabcast; /**< Number of TX broadcast data packets */
+ uint32 PAD[36]; /* PAD added for counter elements to be added soon */
+} wl_cnt_ge80mcst_v1_t;
+
+typedef struct {
+ uint32 fifocount;
+ uint32 txfunfl[];
+} wl_cnt_ge80_txfunfl_v1_t;
+
+/** MACSTAT counters for "wl counter" version <= 10 */
typedef struct {
/* MAC counters: 32-bit version of d11.h's macstat_t */
uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
@@ -2516,8 +4213,8 @@
uint32 txphyerror; /**< Transmit phy error, type of error is reported in tx-status for
* driver enqueued frames
*/
- uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */
- uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */
+ uint32 pktengrxducast; /**< unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /**< multicast frames rxed by the pkteng code */
uint32 rxfrmtoolong; /**< Received frame longer than legal limit (2346 bytes) */
uint32 rxfrmtooshrt; /**< Received frame did not contain enough bytes for its frame type */
uint32 rxinvmachdr; /**< Either the protocol version != 0 or frame type not
@@ -2582,6 +4279,16 @@
uint32 rxtoolate; /**< receive too late */
uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
} wl_cnt_v_le10_mcst_t;
+
+#define MAX_RX_FIFO 3
+#define WL_RXFIFO_CNT_VERSION 1 /* current version of wl_rxfifo_cnt_t */
+typedef struct {
+ /* Counters for frames received from rx fifos */
+ uint16 version;
+ uint16 length; /* length of entire structure */
+ uint32 rxf_data[MAX_RX_FIFO]; /* data frames from rx fifo */
+ uint32 rxf_mgmtctl[MAX_RX_FIFO]; /* mgmt/ctl frames from rx fifo */
+} wl_rxfifo_cnt_t;
typedef struct {
uint16 version; /**< see definition of WL_CNT_T_VERSION */
@@ -2687,7 +4394,7 @@
* (unlikely to see these)
*/
uint32 rxbeaconmbss; /**< beacons received from member of BSS */
- uint32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from
+ uint32 rxdfrmucastobss; /**< number of unicast frames addressed to the MAC from
* other BSS (WDS FRAME)
*/
uint32 rxbeaconobss; /**< beacons received from other BSS */
@@ -2758,35 +4465,35 @@
uint32 prq_bad_entries; /**< which could not be translated to info */
uint32 atim_suppress_count; /**< TX suppressions on ATIM fifo */
uint32 bcn_template_not_ready; /**< Template marked in use on send bcn ... */
- uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */
+ uint32 bcn_template_not_ready_done; /**< ...but "DMA done" interrupt rcvd */
uint32 late_tbtt_dpc; /**< TBTT DPC did not happen in time */
/* per-rate receive stat counters */
- uint32 rx1mbps; /* packets rx at 1Mbps */
- uint32 rx2mbps; /* packets rx at 2Mbps */
- uint32 rx5mbps5; /* packets rx at 5.5Mbps */
- uint32 rx6mbps; /* packets rx at 6Mbps */
- uint32 rx9mbps; /* packets rx at 9Mbps */
- uint32 rx11mbps; /* packets rx at 11Mbps */
- uint32 rx12mbps; /* packets rx at 12Mbps */
- uint32 rx18mbps; /* packets rx at 18Mbps */
- uint32 rx24mbps; /* packets rx at 24Mbps */
- uint32 rx36mbps; /* packets rx at 36Mbps */
- uint32 rx48mbps; /* packets rx at 48Mbps */
- uint32 rx54mbps; /* packets rx at 54Mbps */
- uint32 rx108mbps; /* packets rx at 108mbps */
- uint32 rx162mbps; /* packets rx at 162mbps */
- uint32 rx216mbps; /* packets rx at 216 mbps */
- uint32 rx270mbps; /* packets rx at 270 mbps */
- uint32 rx324mbps; /* packets rx at 324 mbps */
- uint32 rx378mbps; /* packets rx at 378 mbps */
- uint32 rx432mbps; /* packets rx at 432 mbps */
- uint32 rx486mbps; /* packets rx at 486 mbps */
- uint32 rx540mbps; /* packets rx at 540 mbps */
+ uint32 rx1mbps; /**< packets rx at 1Mbps */
+ uint32 rx2mbps; /**< packets rx at 2Mbps */
+ uint32 rx5mbps5; /**< packets rx at 5.5Mbps */
+ uint32 rx6mbps; /**< packets rx at 6Mbps */
+ uint32 rx9mbps; /**< packets rx at 9Mbps */
+ uint32 rx11mbps; /**< packets rx at 11Mbps */
+ uint32 rx12mbps; /**< packets rx at 12Mbps */
+ uint32 rx18mbps; /**< packets rx at 18Mbps */
+ uint32 rx24mbps; /**< packets rx at 24Mbps */
+ uint32 rx36mbps; /**< packets rx at 36Mbps */
+ uint32 rx48mbps; /**< packets rx at 48Mbps */
+ uint32 rx54mbps; /**< packets rx at 54Mbps */
+ uint32 rx108mbps; /**< packets rx at 108mbps */
+ uint32 rx162mbps; /**< packets rx at 162mbps */
+ uint32 rx216mbps; /**< packets rx at 216 mbps */
+ uint32 rx270mbps; /**< packets rx at 270 mbps */
+ uint32 rx324mbps; /**< packets rx at 324 mbps */
+ uint32 rx378mbps; /**< packets rx at 378 mbps */
+ uint32 rx432mbps; /**< packets rx at 432 mbps */
+ uint32 rx486mbps; /**< packets rx at 486 mbps */
+ uint32 rx540mbps; /**< packets rx at 540 mbps */
/* pkteng rx frame stats */
- uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */
- uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */
+ uint32 pktengrxducast; /**< unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /**< multicast frames rxed by the pkteng code */
uint32 rfdisable; /**< count of radio disables */
uint32 bphy_rxcrsglitch; /**< PHY count of bphy glitches */
@@ -2824,7 +4531,7 @@
uint32 pstarxbcmc; /**< count of bcmc frames received on all psta */
uint32 pstatxbcmc; /**< count of bcmc frames transmitted on all psta */
- uint32 cso_passthrough; /* hw cso required but passthrough */
+ uint32 cso_passthrough; /**< hw cso required but passthrough */
uint32 cso_normal; /**< hw cso hdr for normal process */
uint32 chained; /**< number of frames chained */
uint32 chainedsz1; /**< number of chain size 1 frames */
@@ -2834,300 +4541,230 @@
uint32 rxdrop20s; /**< drop secondary cnt */
uint32 pciereset; /**< Secondary Bus Reset issued by driver */
uint32 cfgrestore; /**< configspace restore by driver */
- uint32 reinitreason[NREINITREASONCOUNT]; /* reinitreason counters; 0: Unknown reason */
+ uint32 reinitreason[NREINITREASONCOUNT]; /**< reinitreason counters; 0: Unknown reason */
uint32 rxrtry; /**< num of received packets with retry bit on */
uint32 txmpdu; /**< macstat cnt only valid in ver 11. number of MPDUs txed. */
uint32 rxnodelim; /**< macstat cnt only valid in ver 11.
* number of occasions that no valid delimiter is detected
* by ampdu parser.
*/
- uint32 rxmpdu_mu; /* Number of MU MPDUs received */
+ uint32 rxmpdu_mu; /**< Number of MU MPDUs received */
/* detailed control/management frames */
- uint32 txbar; /**< Number of TX BAR */
- uint32 rxbar; /**< Number of RX BAR */
- uint32 txpspoll; /**< Number of TX PS-poll */
- uint32 rxpspoll; /**< Number of RX PS-poll */
- uint32 txnull; /**< Number of TX NULL_DATA */
- uint32 rxnull; /**< Number of RX NULL_DATA */
- uint32 txqosnull; /**< Number of TX NULL_QoSDATA */
- uint32 rxqosnull; /**< Number of RX NULL_QoSDATA */
- uint32 txassocreq; /**< Number of TX ASSOC request */
- uint32 rxassocreq; /**< Number of RX ASSOC request */
- uint32 txreassocreq; /**< Number of TX REASSOC request */
- uint32 rxreassocreq; /**< Number of RX REASSOC request */
- uint32 txdisassoc; /**< Number of TX DISASSOC */
- uint32 rxdisassoc; /**< Number of RX DISASSOC */
- uint32 txassocrsp; /**< Number of TX ASSOC response */
- uint32 rxassocrsp; /**< Number of RX ASSOC response */
- uint32 txreassocrsp; /**< Number of TX REASSOC response */
- uint32 rxreassocrsp; /**< Number of RX REASSOC response */
- uint32 txauth; /**< Number of TX AUTH */
- uint32 rxauth; /**< Number of RX AUTH */
- uint32 txdeauth; /**< Number of TX DEAUTH */
- uint32 rxdeauth; /**< Number of RX DEAUTH */
- uint32 txprobereq; /**< Number of TX probe request */
- uint32 rxprobereq; /**< Number of RX probe request */
- uint32 txprobersp; /**< Number of TX probe response */
- uint32 rxprobersp; /**< Number of RX probe response */
- uint32 txaction; /**< Number of TX action frame */
- uint32 rxaction; /**< Number of RX action frame */
+ uint32 txbar; /**< Number of TX BAR */
+ uint32 rxbar; /**< Number of RX BAR */
+ uint32 txpspoll; /**< Number of TX PS-poll */
+ uint32 rxpspoll; /**< Number of RX PS-poll */
+ uint32 txnull; /**< Number of TX NULL_DATA */
+ uint32 rxnull; /**< Number of RX NULL_DATA */
+ uint32 txqosnull; /**< Number of TX NULL_QoSDATA */
+ uint32 rxqosnull; /**< Number of RX NULL_QoSDATA */
+ uint32 txassocreq; /**< Number of TX ASSOC request */
+ uint32 rxassocreq; /**< Number of RX ASSOC request */
+ uint32 txreassocreq; /**< Number of TX REASSOC request */
+ uint32 rxreassocreq; /**< Number of RX REASSOC request */
+ uint32 txdisassoc; /**< Number of TX DISASSOC */
+ uint32 rxdisassoc; /**< Number of RX DISASSOC */
+ uint32 txassocrsp; /**< Number of TX ASSOC response */
+ uint32 rxassocrsp; /**< Number of RX ASSOC response */
+ uint32 txreassocrsp; /**< Number of TX REASSOC response */
+ uint32 rxreassocrsp; /**< Number of RX REASSOC response */
+ uint32 txauth; /**< Number of TX AUTH */
+ uint32 rxauth; /**< Number of RX AUTH */
+ uint32 txdeauth; /**< Number of TX DEAUTH */
+ uint32 rxdeauth; /**< Number of RX DEAUTH */
+ uint32 txprobereq; /**< Number of TX probe request */
+ uint32 rxprobereq; /**< Number of RX probe request */
+ uint32 txprobersp; /**< Number of TX probe response */
+ uint32 rxprobersp; /**< Number of RX probe response */
+ uint32 txaction; /**< Number of TX action frame */
+ uint32 rxaction; /**< Number of RX action frame */
uint32 ampdu_wds; /**< Number of AMPDU watchdogs */
uint32 txlost; /**< Number of lost packets reported in txs */
uint32 txdatamcast; /**< Number of TX multicast data packets */
uint32 txdatabcast; /**< Number of TX broadcast data packets */
+ uint32 txbcast; /* Broadcast TransmittedFrameCount */
+ uint32 txdropped; /* tx dropped pkts */
+ uint32 rxbcast; /* BroadcastReceivedFrameCount */
+ uint32 rxdropped; /* rx dropped pkts (derived: sum of others) */
} wl_cnt_ver_11_t;
typedef struct {
- uint16 version; /* see definition of WL_CNT_T_VERSION */
- uint16 length; /* length of entire structure */
+ uint16 version; /* see definition of WL_CNT_T_VERSION */
+ uint16 length; /* length of entire structure */
/* transmit stat counters */
- uint32 txframe; /* tx data frames */
- uint32 txbyte; /* tx data bytes */
- uint32 txretrans; /* tx mac retransmits */
- uint32 txerror; /* tx data errors (derived: sum of others) */
- uint32 txctl; /* tx management frames */
- uint32 txprshort; /* tx short preamble frames */
- uint32 txserr; /* tx status errors */
- uint32 txnobuf; /* tx out of buffers errors */
- uint32 txnoassoc; /* tx discard because we're not associated */
- uint32 txrunt; /* tx runt frames */
- uint32 txchit; /* tx header cache hit (fastpath) */
- uint32 txcmiss; /* tx header cache miss (slowpath) */
+ uint32 txframe; /* tx data frames */
+ uint32 txbyte; /* tx data bytes */
+ uint32 txretrans; /* tx mac retransmits */
+ uint32 txerror; /* tx data errors (derived: sum of others) */
+ uint32 txctl; /* tx management frames */
+ uint32 txprshort; /* tx short preamble frames */
+ uint32 txserr; /* tx status errors */
+ uint32 txnobuf; /* tx out of buffers errors */
+ uint32 txnoassoc; /* tx discard because we're not associated */
+ uint32 txrunt; /* tx runt frames */
+ uint32 txchit; /* tx header cache hit (fastpath) */
+ uint32 txcmiss; /* tx header cache miss (slowpath) */
/* transmit chip error counters */
- uint32 txuflo; /* tx fifo underflows */
- uint32 txphyerr; /* tx phy errors (indicated in tx status) */
- uint32 txphycrs;
+ uint32 txuflo; /* tx fifo underflows */
+ uint32 txphyerr; /* tx phy errors (indicated in tx status) */
+ uint32 txphycrs;
/* receive stat counters */
- uint32 rxframe; /* rx data frames */
- uint32 rxbyte; /* rx data bytes */
- uint32 rxerror; /* rx data errors (derived: sum of others) */
- uint32 rxctl; /* rx management frames */
- uint32 rxnobuf; /* rx out of buffers errors */
- uint32 rxnondata; /* rx non data frames in the data channel errors */
- uint32 rxbadds; /* rx bad DS errors */
- uint32 rxbadcm; /* rx bad control or management frames */
- uint32 rxfragerr; /* rx fragmentation errors */
- uint32 rxrunt; /* rx runt frames */
- uint32 rxgiant; /* rx giant frames */
- uint32 rxnoscb; /* rx no scb error */
- uint32 rxbadproto; /* rx invalid frames */
- uint32 rxbadsrcmac; /* rx frames with Invalid Src Mac */
- uint32 rxbadda; /* rx frames tossed for invalid da */
- uint32 rxfilter; /* rx frames filtered out */
+ uint32 rxframe; /* rx data frames */
+ uint32 rxbyte; /* rx data bytes */
+ uint32 rxerror; /* rx data errors (derived: sum of others) */
+ uint32 rxctl; /* rx management frames */
+ uint32 rxnobuf; /* rx out of buffers errors */
+ uint32 rxnondata; /* rx non data frames in the data channel errors */
+ uint32 rxbadds; /* rx bad DS errors */
+ uint32 rxbadcm; /* rx bad control or management frames */
+ uint32 rxfragerr; /* rx fragmentation errors */
+ uint32 rxrunt; /* rx runt frames */
+ uint32 rxgiant; /* rx giant frames */
+ uint32 rxnoscb; /* rx no scb error */
+ uint32 rxbadproto; /* rx invalid frames */
+ uint32 rxbadsrcmac; /* rx frames with Invalid Src Mac */
+ uint32 rxbadda; /* rx frames tossed for invalid da */
+ uint32 rxfilter; /* rx frames filtered out */
/* receive chip error counters */
- uint32 rxoflo; /* rx fifo overflow errors */
- uint32 rxuflo[NFIFO]; /* rx dma descriptor underflow errors */
+ uint32 rxoflo; /* rx fifo overflow errors */
+ uint32 rxuflo[NFIFO]; /* rx dma descriptor underflow errors */
- uint32 d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */
- uint32 d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */
- uint32 d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */
+ uint32 d11cnt_txrts_off; /* d11cnt txrts value when reset d11cnt */
+ uint32 d11cnt_rxcrc_off; /* d11cnt rxcrc value when reset d11cnt */
+ uint32 d11cnt_txnocts_off; /* d11cnt txnocts value when reset d11cnt */
/* misc counters */
- uint32 dmade; /* tx/rx dma descriptor errors */
- uint32 dmada; /* tx/rx dma data errors */
- uint32 dmape; /* tx/rx dma descriptor protocol errors */
- uint32 reset; /* reset count */
- uint32 tbtt; /* cnts the TBTT int's */
- uint32 txdmawar;
- uint32 pkt_callback_reg_fail; /* callbacks register failure */
+ uint32 dmade; /* tx/rx dma descriptor errors */
+ uint32 dmada; /* tx/rx dma data errors */
+ uint32 dmape; /* tx/rx dma descriptor protocol errors */
+ uint32 reset; /* reset count */
+ uint32 tbtt; /* cnts the TBTT int's */
+ uint32 txdmawar;
+ uint32 pkt_callback_reg_fail; /* callbacks register failure */
/* MAC counters: 32-bit version of d11.h's macstat_t */
- uint32 txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS,
- * Control Management (includes retransmissions)
- */
- uint32 txrtsfrm; /* number of RTS sent out by the MAC */
- uint32 txctsfrm; /* number of CTS sent out by the MAC */
- uint32 txackfrm; /* number of ACK frames sent out */
- uint32 txdnlfrm; /* Not used */
- uint32 txbcnfrm; /* beacons transmitted */
- uint32 txfunfl[6]; /* per-fifo tx underflows */
- uint32 rxtoolate; /* receive too late */
- uint32 txfbw; /* transmit at fallback bw (dynamic bw) */
- uint32 txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS
- * or BCN)
- */
- uint32 txphyerror; /* Transmit phy error, type of error is reported in tx-status for
- * driver enqueued frames
- */
- uint32 rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */
- uint32 rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */
- uint32 rxinvmachdr; /* Either the protocol version != 0 or frame type not
+ uint32 txallfrm; /* total number of frames sent, incl. Data, ACK, RTS, CTS,
+ * Control Management (includes retransmissions)
+ */
+ uint32 txrtsfrm; /* number of RTS sent out by the MAC */
+ uint32 txctsfrm; /* number of CTS sent out by the MAC */
+ uint32 txackfrm; /* number of ACK frames sent out */
+ uint32 txdnlfrm; /* Not used */
+ uint32 txbcnfrm; /* beacons transmitted */
+ uint32 txfunfl[8]; /* per-fifo tx underflows */
+ uint32 txtplunfl; /* Template underflows (mac was too slow to transmit ACK/CTS
+ * or BCN)
+ */
+ uint32 txphyerror; /* Transmit phy error, type of error is reported in tx-status for
+ * driver enqueued frames
+ */
+ uint32 rxfrmtoolong; /* Received frame longer than legal limit (2346 bytes) */
+ uint32 rxfrmtooshrt; /* Received frame did not contain enough bytes for its frame type */
+ uint32 rxinvmachdr; /* Either the protocol version != 0 or frame type not
* data/control/management
- */
- uint32 rxbadfcs; /* number of frames for which the CRC check failed in the MAC */
- uint32 rxbadplcp; /* parity check of the PLCP header failed */
- uint32 rxcrsglitch; /* PHY was able to correlate the preamble but not the header */
- uint32 rxstrt; /* Number of received frames with a good PLCP
- * (i.e. passing parity check)
- */
- uint32 rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */
- uint32 rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */
- uint32 rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */
- uint32 rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */
- uint32 rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */
- uint32 rxackucast; /* number of ucast ACKS received (good FCS) */
- uint32 rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */
- uint32 rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */
- uint32 rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */
- uint32 rxrtsocast; /* number of received RTS not addressed to the MAC */
- uint32 rxctsocast; /* number of received CTS not addressed to the MAC */
- uint32 rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */
- uint32 rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */
- uint32 rxcfrmmcast; /* number of RX Control multicast frames received by the MAC
+ */
+ uint32 rxbadfcs; /* number of frames for which the CRC check failed in the MAC */
+ uint32 rxbadplcp; /* parity check of the PLCP header failed */
+ uint32 rxcrsglitch; /* PHY was able to correlate the preamble but not the header */
+ uint32 rxstrt; /* Number of received frames with a good PLCP
+ * (i.e. passing parity check)
+ */
+ uint32 rxdfrmucastmbss; /* Number of received DATA frames with good FCS and matching RA */
+ uint32 rxmfrmucastmbss; /* number of received mgmt frames with good FCS and matching RA */
+ uint32 rxcfrmucast; /* number of received CNTRL frames with good FCS and matching RA */
+ uint32 rxrtsucast; /* number of unicast RTS addressed to the MAC (good FCS) */
+ uint32 rxctsucast; /* number of unicast CTS addressed to the MAC (good FCS) */
+ uint32 rxackucast; /* number of ucast ACKS received (good FCS) */
+ uint32 rxdfrmocast; /* number of received DATA frames (good FCS and not matching RA) */
+ uint32 rxmfrmocast; /* number of received MGMT frames (good FCS and not matching RA) */
+ uint32 rxcfrmocast; /* number of received CNTRL frame (good FCS and not matching RA) */
+ uint32 rxrtsocast; /* number of received RTS not addressed to the MAC */
+ uint32 rxctsocast; /* number of received CTS not addressed to the MAC */
+ uint32 rxdfrmmcast; /* number of RX Data multicast frames received by the MAC */
+ uint32 rxmfrmmcast; /* number of RX Management multicast frames received by the MAC */
+ uint32 rxcfrmmcast; /* number of RX Control multicast frames received by the MAC
* (unlikely to see these)
*/
- uint32 rxbeaconmbss; /* beacons received from member of BSS */
- uint32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from
+ uint32 rxbeaconmbss; /* beacons received from member of BSS */
+ uint32 rxdfrmucastobss; /* number of unicast frames addressed to the MAC from
* other BSS (WDS FRAME)
*/
- uint32 rxbeaconobss; /* beacons received from other BSS */
- uint32 rxrsptmout; /* Number of response timeouts for transmitted frames
- * expecting a response
- */
- uint32 bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */
- uint32 rxf0ovfl; /* Number of receive fifo 0 overflows */
- uint32 rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */
- uint32 rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */
- uint32 txsfovfl; /* Number of transmit status fifo overflows (obsolete) */
- uint32 pmqovfl; /* Number of PMQ overflows */
- uint32 rxcgprqfrm; /* Number of received Probe requests that made it into
- * the PRQ fifo
- */
- uint32 rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */
- uint32 txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did
+ uint32 rxbeaconobss; /* beacons received from other BSS */
+ uint32 rxrsptmout; /* Number of response timeouts for transmitted frames
+ * expecting a response
+ */
+ uint32 bcntxcancl; /* transmit beacons canceled due to receipt of beacon (IBSS) */
+ uint32 rxf0ovfl; /* Number of receive fifo 0 overflows */
+ uint32 rxf1ovfl; /* Number of receive fifo 1 overflows (obsolete) */
+ uint32 rxf2ovfl; /* Number of receive fifo 2 overflows (obsolete) */
+ uint32 txsfovfl; /* Number of transmit status fifo overflows (obsolete) */
+ uint32 pmqovfl; /* Number of PMQ overflows */
+ uint32 rxcgprqfrm; /* Number of received Probe requests that made it into
+ * the PRQ fifo
+ */
+ uint32 rxcgprsqovfl; /* Rx Probe Request Que overflow in the AP */
+ uint32 txcgprsfail; /* Tx Probe Response Fail. AP sent probe response but did
* not get ACK
*/
- uint32 txcgprssuc; /* Tx Probe Response Success (ACK was received) */
- uint32 prs_timeout; /* Number of probe requests that were dropped from the PRQ
+ uint32 txcgprssuc; /* Tx Probe Response Success (ACK was received) */
+ uint32 prs_timeout; /* Number of probe requests that were dropped from the PRQ
* fifo because a probe response could not be sent out within
* the time limit defined in M_PRS_MAXTIME
*/
- uint32 rxnack;
- uint32 frmscons;
- uint32 txnack; /* obsolete */
- uint32 rxback; /* blockack rxcnt */
- uint32 txback; /* blockack txcnt */
+ uint32 rxnack; /* obsolete */
+ uint32 frmscons; /* obsolete */
+ uint32 txnack; /* obsolete */
+ uint32 txglitch_nack; /* obsolete */
+ uint32 txburst; /* obsolete */
/* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */
- uint32 txfrag; /* dot11TransmittedFragmentCount */
- uint32 txmulti; /* dot11MulticastTransmittedFrameCount */
- uint32 txfail; /* dot11FailedCount */
- uint32 txretry; /* dot11RetryCount */
- uint32 txretrie; /* dot11MultipleRetryCount */
- uint32 rxdup; /* dot11FrameduplicateCount */
- uint32 txrts; /* dot11RTSSuccessCount */
- uint32 txnocts; /* dot11RTSFailureCount */
- uint32 txnoack; /* dot11ACKFailureCount */
- uint32 rxfrag; /* dot11ReceivedFragmentCount */
- uint32 rxmulti; /* dot11MulticastReceivedFrameCount */
- uint32 rxcrc; /* dot11FCSErrorCount */
- uint32 txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */
- uint32 rxundec; /* dot11WEPUndecryptableCount */
+ uint32 txfrag; /* dot11TransmittedFragmentCount */
+ uint32 txmulti; /* dot11MulticastTransmittedFrameCount */
+ uint32 txfail; /* dot11FailedCount */
+ uint32 txretry; /* dot11RetryCount */
+ uint32 txretrie; /* dot11MultipleRetryCount */
+ uint32 rxdup; /* dot11FrameduplicateCount */
+ uint32 txrts; /* dot11RTSSuccessCount */
+ uint32 txnocts; /* dot11RTSFailureCount */
+ uint32 txnoack; /* dot11ACKFailureCount */
+ uint32 rxfrag; /* dot11ReceivedFragmentCount */
+ uint32 rxmulti; /* dot11MulticastReceivedFrameCount */
+ uint32 rxcrc; /* dot11FCSErrorCount */
+ uint32 txfrmsnt; /* dot11TransmittedFrameCount (bogus MIB?) */
+ uint32 rxundec; /* dot11WEPUndecryptableCount */
/* WPA2 counters (see rxundec for DecryptFailureCount) */
- uint32 tkipmicfaill; /* TKIPLocalMICFailures */
- uint32 tkipcntrmsr; /* TKIPCounterMeasuresInvoked */
- uint32 tkipreplay; /* TKIPReplays */
- uint32 ccmpfmterr; /* CCMPFormatErrors */
- uint32 ccmpreplay; /* CCMPReplays */
- uint32 ccmpundec; /* CCMPDecryptErrors */
- uint32 fourwayfail; /* FourWayHandshakeFailures */
- uint32 wepundec; /* dot11WEPUndecryptableCount */
- uint32 wepicverr; /* dot11WEPICVErrorCount */
- uint32 decsuccess; /* DecryptSuccessCount */
- uint32 tkipicverr; /* TKIPICVErrorCount */
- uint32 wepexcluded; /* dot11WEPExcludedCount */
+ uint32 tkipmicfaill; /* TKIPLocalMICFailures */
+ uint32 tkipcntrmsr; /* TKIPCounterMeasuresInvoked */
+ uint32 tkipreplay; /* TKIPReplays */
+ uint32 ccmpfmterr; /* CCMPFormatErrors */
+ uint32 ccmpreplay; /* CCMPReplays */
+ uint32 ccmpundec; /* CCMPDecryptErrors */
+ uint32 fourwayfail; /* FourWayHandshakeFailures */
+ uint32 wepundec; /* dot11WEPUndecryptableCount */
+ uint32 wepicverr; /* dot11WEPICVErrorCount */
+ uint32 decsuccess; /* DecryptSuccessCount */
+ uint32 tkipicverr; /* TKIPICVErrorCount */
+ uint32 wepexcluded; /* dot11WEPExcludedCount */
- uint32 rxundec_mcst; /* dot11WEPUndecryptableCount */
-
- /* WPA2 counters (see rxundec for DecryptFailureCount) */
- uint32 tkipmicfaill_mcst; /* TKIPLocalMICFailures */
- uint32 tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */
- uint32 tkipreplay_mcst; /* TKIPReplays */
- uint32 ccmpfmterr_mcst; /* CCMPFormatErrors */
- uint32 ccmpreplay_mcst; /* CCMPReplays */
- uint32 ccmpundec_mcst; /* CCMPDecryptErrors */
- uint32 fourwayfail_mcst; /* FourWayHandshakeFailures */
- uint32 wepundec_mcst; /* dot11WEPUndecryptableCount */
- uint32 wepicverr_mcst; /* dot11WEPICVErrorCount */
- uint32 decsuccess_mcst; /* DecryptSuccessCount */
- uint32 tkipicverr_mcst; /* TKIPICVErrorCount */
- uint32 wepexcluded_mcst; /* dot11WEPExcludedCount */
-
- uint32 txchanrej; /* Tx frames suppressed due to channel rejection */
- uint32 txexptime; /* Tx frames suppressed due to timer expiration */
- uint32 psmwds; /* Count PSM watchdogs */
- uint32 phywatchdog; /* Count Phy watchdogs (triggered by ucode) */
+ uint32 txchanrej; /* Tx frames suppressed due to channel rejection */
+ uint32 psmwds; /* Count PSM watchdogs */
+ uint32 phywatchdog; /* Count Phy watchdogs (triggered by ucode) */
/* MBSS counters, AP only */
- uint32 prq_entries_handled; /* PRQ entries read in */
- uint32 prq_undirected_entries; /* which were bcast bss & ssid */
- uint32 prq_bad_entries; /* which could not be translated to info */
- uint32 atim_suppress_count; /* TX suppressions on ATIM fifo */
- uint32 bcn_template_not_ready; /* Template marked in use on send bcn ... */
- uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */
- uint32 late_tbtt_dpc; /* TBTT DPC did not happen in time */
-
- /* per-rate receive stat counters */
- uint32 rx1mbps; /* packets rx at 1Mbps */
- uint32 rx2mbps; /* packets rx at 2Mbps */
- uint32 rx5mbps5; /* packets rx at 5.5Mbps */
- uint32 rx6mbps; /* packets rx at 6Mbps */
- uint32 rx9mbps; /* packets rx at 9Mbps */
- uint32 rx11mbps; /* packets rx at 11Mbps */
- uint32 rx12mbps; /* packets rx at 12Mbps */
- uint32 rx18mbps; /* packets rx at 18Mbps */
- uint32 rx24mbps; /* packets rx at 24Mbps */
- uint32 rx36mbps; /* packets rx at 36Mbps */
- uint32 rx48mbps; /* packets rx at 48Mbps */
- uint32 rx54mbps; /* packets rx at 54Mbps */
- uint32 rx108mbps; /* packets rx at 108mbps */
- uint32 rx162mbps; /* packets rx at 162mbps */
- uint32 rx216mbps; /* packets rx at 216 mbps */
- uint32 rx270mbps; /* packets rx at 270 mbps */
- uint32 rx324mbps; /* packets rx at 324 mbps */
- uint32 rx378mbps; /* packets rx at 378 mbps */
- uint32 rx432mbps; /* packets rx at 432 mbps */
- uint32 rx486mbps; /* packets rx at 486 mbps */
- uint32 rx540mbps; /* packets rx at 540 mbps */
-
- /* pkteng rx frame stats */
- uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */
- uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */
-
- uint32 rfdisable; /* count of radio disables */
- uint32 bphy_rxcrsglitch; /* PHY count of bphy glitches */
- uint32 bphy_badplcp;
-
- uint32 txmpdu_sgi; /* count for sgi transmit */
- uint32 rxmpdu_sgi; /* count for sgi received */
- uint32 txmpdu_stbc; /* count for stbc transmit */
- uint32 rxmpdu_stbc; /* count for stbc received */
-
- uint32 rxdrop20s; /* drop secondary cnt */
-} wl_cnt_ver_6_t;
-
-#define WL_DELTA_STATS_T_VERSION 2 /* current version of wl_delta_stats_t struct */
-
-typedef struct {
- uint16 version; /* see definition of WL_DELTA_STATS_T_VERSION */
- uint16 length; /* length of entire structure */
-
- /* transmit stat counters */
- uint32 txframe; /* tx data frames */
- uint32 txbyte; /* tx data bytes */
- uint32 txretrans; /* tx mac retransmits */
- uint32 txfail; /* tx failures */
-
- /* receive stat counters */
- uint32 rxframe; /* rx data frames */
- uint32 rxbyte; /* rx data bytes */
+ uint32 prq_entries_handled; /* PRQ entries read in */
+ uint32 prq_undirected_entries; /* which were bcast bss & ssid */
+ uint32 prq_bad_entries; /* which could not be translated to info */
+ uint32 atim_suppress_count; /* TX suppressions on ATIM fifo */
+ uint32 bcn_template_not_ready; /* Template marked in use on send bcn ... */
+ uint32 bcn_template_not_ready_done; /* ...but "DMA done" interrupt rcvd */
+ uint32 late_tbtt_dpc; /* TBTT DPC did not happen in time */
/* per-rate receive stat counters */
uint32 rx1mbps; /* packets rx at 1Mbps */
@@ -3152,13 +4789,368 @@
uint32 rx486mbps; /* packets rx at 486 mbps */
uint32 rx540mbps; /* packets rx at 540 mbps */
+ /* pkteng rx frame stats */
+ uint32 pktengrxducast; /* unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /* multicast frames rxed by the pkteng code */
+
+ uint32 rfdisable; /* count of radio disables */
+ uint32 bphy_rxcrsglitch; /* PHY count of bphy glitches */
+
+ uint32 txexptime; /* Tx frames suppressed due to timer expiration */
+
+ uint32 txmpdu_sgi; /* count for sgi transmit */
+ uint32 rxmpdu_sgi; /* count for sgi received */
+ uint32 txmpdu_stbc; /* count for stbc transmit */
+ uint32 rxmpdu_stbc; /* count for stbc received */
+
+ uint32 rxundec_mcst; /* dot11WEPUndecryptableCount */
+
+ /* WPA2 counters (see rxundec for DecryptFailureCount) */
+ uint32 tkipmicfaill_mcst; /* TKIPLocalMICFailures */
+ uint32 tkipcntrmsr_mcst; /* TKIPCounterMeasuresInvoked */
+ uint32 tkipreplay_mcst; /* TKIPReplays */
+ uint32 ccmpfmterr_mcst; /* CCMPFormatErrors */
+ uint32 ccmpreplay_mcst; /* CCMPReplays */
+ uint32 ccmpundec_mcst; /* CCMPDecryptErrors */
+ uint32 fourwayfail_mcst; /* FourWayHandshakeFailures */
+ uint32 wepundec_mcst; /* dot11WEPUndecryptableCount */
+ uint32 wepicverr_mcst; /* dot11WEPICVErrorCount */
+ uint32 decsuccess_mcst; /* DecryptSuccessCount */
+ uint32 tkipicverr_mcst; /* TKIPICVErrorCount */
+ uint32 wepexcluded_mcst; /* dot11WEPExcludedCount */
+
+ uint32 dma_hang; /* count for stbc received */
+ uint32 rxrtry; /* number of packets with retry bit set to 1 */
+} wl_cnt_ver_7_t;
+
+typedef struct {
+ uint16 version; /**< see definition of WL_CNT_T_VERSION */
+ uint16 length; /**< length of entire structure */
+
+ /* transmit stat counters */
+ uint32 txframe; /**< tx data frames */
+ uint32 txbyte; /**< tx data bytes */
+ uint32 txretrans; /**< tx mac retransmits */
+ uint32 txerror; /**< tx data errors (derived: sum of others) */
+ uint32 txctl; /**< tx management frames */
+ uint32 txprshort; /**< tx short preamble frames */
+ uint32 txserr; /**< tx status errors */
+ uint32 txnobuf; /**< tx out of buffers errors */
+ uint32 txnoassoc; /**< tx discard because we're not associated */
+ uint32 txrunt; /**< tx runt frames */
+ uint32 txchit; /**< tx header cache hit (fastpath) */
+ uint32 txcmiss; /**< tx header cache miss (slowpath) */
+
+ /* transmit chip error counters */
+ uint32 txuflo; /**< tx fifo underflows */
+ uint32 txphyerr; /**< tx phy errors (indicated in tx status) */
+ uint32 txphycrs;
+
+ /* receive stat counters */
+ uint32 rxframe; /**< rx data frames */
+ uint32 rxbyte; /**< rx data bytes */
+ uint32 rxerror; /**< rx data errors (derived: sum of others) */
+ uint32 rxctl; /**< rx management frames */
+ uint32 rxnobuf; /**< rx out of buffers errors */
+ uint32 rxnondata; /**< rx non data frames in the data channel errors */
+ uint32 rxbadds; /**< rx bad DS errors */
+ uint32 rxbadcm; /**< rx bad control or management frames */
+ uint32 rxfragerr; /**< rx fragmentation errors */
+ uint32 rxrunt; /**< rx runt frames */
+ uint32 rxgiant; /**< rx giant frames */
+ uint32 rxnoscb; /**< rx no scb error */
+ uint32 rxbadproto; /**< rx invalid frames */
+ uint32 rxbadsrcmac; /**< rx frames with Invalid Src Mac */
+ uint32 rxbadda; /**< rx frames tossed for invalid da */
+ uint32 rxfilter; /**< rx frames filtered out */
+
+ /* receive chip error counters */
+ uint32 rxoflo; /**< rx fifo overflow errors */
+ uint32 rxuflo[NFIFO]; /**< rx dma descriptor underflow errors */
+
+ uint32 d11cnt_txrts_off; /**< d11cnt txrts value when reset d11cnt */
+ uint32 d11cnt_rxcrc_off; /**< d11cnt rxcrc value when reset d11cnt */
+ uint32 d11cnt_txnocts_off; /**< d11cnt txnocts value when reset d11cnt */
+
+ /* misc counters */
+ uint32 dmade; /**< tx/rx dma descriptor errors */
+ uint32 dmada; /**< tx/rx dma data errors */
+ uint32 dmape; /**< tx/rx dma descriptor protocol errors */
+ uint32 reset; /**< reset count */
+ uint32 tbtt; /**< cnts the TBTT int's */
+ uint32 txdmawar;
+ uint32 pkt_callback_reg_fail; /**< callbacks register failure */
+
+ /* MAC counters: 32-bit version of d11.h's macstat_t */
+ uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
+ * Control Management (includes retransmissions)
+ */
+ uint32 txrtsfrm; /**< number of RTS sent out by the MAC */
+ uint32 txctsfrm; /**< number of CTS sent out by the MAC */
+ uint32 txackfrm; /**< number of ACK frames sent out */
+ uint32 txdnlfrm; /**< Not used */
+ uint32 txbcnfrm; /**< beacons transmitted */
+ uint32 txfunfl[6]; /**< per-fifo tx underflows */
+ uint32 rxtoolate; /**< receive too late */
+ uint32 txfbw; /**< transmit at fallback bw (dynamic bw) */
+ uint32 txtplunfl; /**< Template underflows (mac was too slow to transmit ACK/CTS
+ * or BCN)
+ */
+ uint32 txphyerror; /**< Transmit phy error, type of error is reported in tx-status for
+ * driver enqueued frames
+ */
+ uint32 rxfrmtoolong; /**< Received frame longer than legal limit (2346 bytes) */
+ uint32 rxfrmtooshrt; /**< Received frame did not contain enough bytes for its frame type */
+ uint32 rxinvmachdr; /**< Either the protocol version != 0 or frame type not
+ * data/control/management
+ */
+ uint32 rxbadfcs; /**< number of frames for which the CRC check failed in the MAC */
+ uint32 rxbadplcp; /**< parity check of the PLCP header failed */
+ uint32 rxcrsglitch; /**< PHY was able to correlate the preamble but not the header */
+ uint32 rxstrt; /**< Number of received frames with a good PLCP
+ * (i.e. passing parity check)
+ */
+ uint32 rxdfrmucastmbss; /**< # of received DATA frames with good FCS and matching RA */
+ uint32 rxmfrmucastmbss; /**< # of received mgmt frames with good FCS and matching RA */
+ uint32 rxcfrmucast; /**< # of received CNTRL frames with good FCS and matching RA */
+ uint32 rxrtsucast; /**< number of unicast RTS addressed to the MAC (good FCS) */
+ uint32 rxctsucast; /**< number of unicast CTS addressed to the MAC (good FCS) */
+ uint32 rxackucast; /**< number of ucast ACKS received (good FCS) */
+ uint32 rxdfrmocast; /**< # of received DATA frames (good FCS and not matching RA) */
+ uint32 rxmfrmocast; /**< # of received MGMT frames (good FCS and not matching RA) */
+ uint32 rxcfrmocast; /**< # of received CNTRL frame (good FCS and not matching RA) */
+ uint32 rxrtsocast; /**< number of received RTS not addressed to the MAC */
+ uint32 rxctsocast; /**< number of received CTS not addressed to the MAC */
+ uint32 rxdfrmmcast; /**< number of RX Data multicast frames received by the MAC */
+ uint32 rxmfrmmcast; /**< number of RX Management multicast frames received by the MAC */
+ uint32 rxcfrmmcast; /**< number of RX Control multicast frames received by the MAC
+ * (unlikely to see these)
+ */
+ uint32 rxbeaconmbss; /**< beacons received from member of BSS */
+ uint32 rxdfrmucastobss; /**< number of unicast frames addressed to the MAC from
+ * other BSS (WDS FRAME)
+ */
+ uint32 rxbeaconobss; /**< beacons received from other BSS */
+ uint32 rxrsptmout; /**< Number of response timeouts for transmitted frames
+ * expecting a response
+ */
+ uint32 bcntxcancl; /**< transmit beacons canceled due to receipt of beacon (IBSS) */
+ uint32 rxf0ovfl; /**< Number of receive fifo 0 overflows */
+ uint32 rxf1ovfl; /**< Number of receive fifo 1 overflows (obsolete) */
+ uint32 rxf2ovfl; /**< Number of receive fifo 2 overflows (obsolete) */
+ uint32 txsfovfl; /**< Number of transmit status fifo overflows (obsolete) */
+ uint32 pmqovfl; /**< Number of PMQ overflows */
+ uint32 rxcgprqfrm; /**< Number of received Probe requests that made it into
+ * the PRQ fifo
+ */
+ uint32 rxcgprsqovfl; /**< Rx Probe Request Que overflow in the AP */
+ uint32 txcgprsfail; /**< Tx Probe Response Fail. AP sent probe response but did
+ * not get ACK
+ */
+ uint32 txcgprssuc; /**< Tx Probe Response Success (ACK was received) */
+ uint32 prs_timeout; /**< Number of probe requests that were dropped from the PRQ
+ * fifo because a probe response could not be sent out within
+ * the time limit defined in M_PRS_MAXTIME
+ */
+ uint32 rxnack;
+ uint32 frmscons;
+ uint32 txnack; /**< obsolete */
+ uint32 rxback; /**< blockack rxcnt */
+ uint32 txback; /**< blockack txcnt */
+
+ /* 802.11 MIB counters, pp. 614 of 802.11 reaff doc. */
+ uint32 txfrag; /**< dot11TransmittedFragmentCount */
+ uint32 txmulti; /**< dot11MulticastTransmittedFrameCount */
+ uint32 txfail; /**< dot11FailedCount */
+ uint32 txretry; /**< dot11RetryCount */
+ uint32 txretrie; /**< dot11MultipleRetryCount */
+ uint32 rxdup; /**< dot11FrameduplicateCount */
+ uint32 txrts; /**< dot11RTSSuccessCount */
+ uint32 txnocts; /**< dot11RTSFailureCount */
+ uint32 txnoack; /**< dot11ACKFailureCount */
+ uint32 rxfrag; /**< dot11ReceivedFragmentCount */
+ uint32 rxmulti; /**< dot11MulticastReceivedFrameCount */
+ uint32 rxcrc; /**< dot11FCSErrorCount */
+ uint32 txfrmsnt; /**< dot11TransmittedFrameCount (bogus MIB?) */
+ uint32 rxundec; /**< dot11WEPUndecryptableCount */
+
+ /* WPA2 counters (see rxundec for DecryptFailureCount) */
+ uint32 tkipmicfaill; /**< TKIPLocalMICFailures */
+ uint32 tkipcntrmsr; /**< TKIPCounterMeasuresInvoked */
+ uint32 tkipreplay; /**< TKIPReplays */
+ uint32 ccmpfmterr; /**< CCMPFormatErrors */
+ uint32 ccmpreplay; /**< CCMPReplays */
+ uint32 ccmpundec; /**< CCMPDecryptErrors */
+ uint32 fourwayfail; /**< FourWayHandshakeFailures */
+ uint32 wepundec; /**< dot11WEPUndecryptableCount */
+ uint32 wepicverr; /**< dot11WEPICVErrorCount */
+ uint32 decsuccess; /**< DecryptSuccessCount */
+ uint32 tkipicverr; /**< TKIPICVErrorCount */
+ uint32 wepexcluded; /**< dot11WEPExcludedCount */
+
+ uint32 rxundec_mcst; /**< dot11WEPUndecryptableCount */
+
+ /* WPA2 counters (see rxundec for DecryptFailureCount) */
+ uint32 tkipmicfaill_mcst; /**< TKIPLocalMICFailures */
+ uint32 tkipcntrmsr_mcst; /**< TKIPCounterMeasuresInvoked */
+ uint32 tkipreplay_mcst; /**< TKIPReplays */
+ uint32 ccmpfmterr_mcst; /**< CCMPFormatErrors */
+ uint32 ccmpreplay_mcst; /**< CCMPReplays */
+ uint32 ccmpundec_mcst; /**< CCMPDecryptErrors */
+ uint32 fourwayfail_mcst; /**< FourWayHandshakeFailures */
+ uint32 wepundec_mcst; /**< dot11WEPUndecryptableCount */
+ uint32 wepicverr_mcst; /**< dot11WEPICVErrorCount */
+ uint32 decsuccess_mcst; /**< DecryptSuccessCount */
+ uint32 tkipicverr_mcst; /**< TKIPICVErrorCount */
+ uint32 wepexcluded_mcst; /**< dot11WEPExcludedCount */
+
+ uint32 txchanrej; /**< Tx frames suppressed due to channel rejection */
+ uint32 txexptime; /**< Tx frames suppressed due to timer expiration */
+ uint32 psmwds; /**< Count PSM watchdogs */
+ uint32 phywatchdog; /**< Count Phy watchdogs (triggered by ucode) */
+
+ /* MBSS counters, AP only */
+ uint32 prq_entries_handled; /**< PRQ entries read in */
+ uint32 prq_undirected_entries; /**< which were bcast bss & ssid */
+ uint32 prq_bad_entries; /**< which could not be translated to info */
+ uint32 atim_suppress_count; /**< TX suppressions on ATIM fifo */
+ uint32 bcn_template_not_ready; /**< Template marked in use on send bcn ... */
+ uint32 bcn_template_not_ready_done; /**< ...but "DMA done" interrupt rcvd */
+ uint32 late_tbtt_dpc; /**< TBTT DPC did not happen in time */
+
+ /* per-rate receive stat counters */
+ uint32 rx1mbps; /**< packets rx at 1Mbps */
+ uint32 rx2mbps; /**< packets rx at 2Mbps */
+ uint32 rx5mbps5; /**< packets rx at 5.5Mbps */
+ uint32 rx6mbps; /**< packets rx at 6Mbps */
+ uint32 rx9mbps; /**< packets rx at 9Mbps */
+ uint32 rx11mbps; /**< packets rx at 11Mbps */
+ uint32 rx12mbps; /**< packets rx at 12Mbps */
+ uint32 rx18mbps; /**< packets rx at 18Mbps */
+ uint32 rx24mbps; /**< packets rx at 24Mbps */
+ uint32 rx36mbps; /**< packets rx at 36Mbps */
+ uint32 rx48mbps; /**< packets rx at 48Mbps */
+ uint32 rx54mbps; /**< packets rx at 54Mbps */
+ uint32 rx108mbps; /**< packets rx at 108mbps */
+ uint32 rx162mbps; /**< packets rx at 162mbps */
+ uint32 rx216mbps; /**< packets rx at 216 mbps */
+ uint32 rx270mbps; /**< packets rx at 270 mbps */
+ uint32 rx324mbps; /**< packets rx at 324 mbps */
+ uint32 rx378mbps; /**< packets rx at 378 mbps */
+ uint32 rx432mbps; /**< packets rx at 432 mbps */
+ uint32 rx486mbps; /**< packets rx at 486 mbps */
+ uint32 rx540mbps; /**< packets rx at 540 mbps */
+
+ /* pkteng rx frame stats */
+ uint32 pktengrxducast; /**< unicast frames rxed by the pkteng code */
+ uint32 pktengrxdmcast; /**< multicast frames rxed by the pkteng code */
+
+ uint32 rfdisable; /**< count of radio disables */
+ uint32 bphy_rxcrsglitch; /**< PHY count of bphy glitches */
+ uint32 bphy_badplcp;
+
+ uint32 txmpdu_sgi; /**< count for sgi transmit */
+ uint32 rxmpdu_sgi; /**< count for sgi received */
+ uint32 txmpdu_stbc; /**< count for stbc transmit */
+ uint32 rxmpdu_stbc; /**< count for stbc received */
+
+ uint32 rxdrop20s; /**< drop secondary cnt */
+} wl_cnt_ver_6_t;
+
+#define WL_DELTA_STATS_T_VERSION 2 /**< current version of wl_delta_stats_t struct */
+
+typedef struct {
+ uint16 version; /**< see definition of WL_DELTA_STATS_T_VERSION */
+ uint16 length; /**< length of entire structure */
+
+ /* transmit stat counters */
+ uint32 txframe; /**< tx data frames */
+ uint32 txbyte; /**< tx data bytes */
+ uint32 txretrans; /**< tx mac retransmits */
+ uint32 txfail; /**< tx failures */
+
+ /* receive stat counters */
+ uint32 rxframe; /**< rx data frames */
+ uint32 rxbyte; /**< rx data bytes */
+
+ /* per-rate receive stat counters */
+ uint32 rx1mbps; /**< packets rx at 1Mbps */
+ uint32 rx2mbps; /**< packets rx at 2Mbps */
+ uint32 rx5mbps5; /**< packets rx at 5.5Mbps */
+ uint32 rx6mbps; /**< packets rx at 6Mbps */
+ uint32 rx9mbps; /**< packets rx at 9Mbps */
+ uint32 rx11mbps; /**< packets rx at 11Mbps */
+ uint32 rx12mbps; /**< packets rx at 12Mbps */
+ uint32 rx18mbps; /**< packets rx at 18Mbps */
+ uint32 rx24mbps; /**< packets rx at 24Mbps */
+ uint32 rx36mbps; /**< packets rx at 36Mbps */
+ uint32 rx48mbps; /**< packets rx at 48Mbps */
+ uint32 rx54mbps; /**< packets rx at 54Mbps */
+ uint32 rx108mbps; /**< packets rx at 108mbps */
+ uint32 rx162mbps; /**< packets rx at 162mbps */
+ uint32 rx216mbps; /**< packets rx at 216 mbps */
+ uint32 rx270mbps; /**< packets rx at 270 mbps */
+ uint32 rx324mbps; /**< packets rx at 324 mbps */
+ uint32 rx378mbps; /**< packets rx at 378 mbps */
+ uint32 rx432mbps; /**< packets rx at 432 mbps */
+ uint32 rx486mbps; /**< packets rx at 486 mbps */
+ uint32 rx540mbps; /**< packets rx at 540 mbps */
+
/* phy stats */
uint32 rxbadplcp;
uint32 rxcrsglitch;
uint32 bphy_rxcrsglitch;
uint32 bphy_badplcp;
+ uint32 slice_index; /**< Slice for which stats are reported */
+
} wl_delta_stats_t;
+
+/* Partial statistics counter report */
+#define WL_CNT_CTL_MGT_FRAMES 0
+
+typedef struct {
+ uint16 type;
+ uint16 len;
+
+ /* detailed control/management frames */
+ uint32 txnull;
+ uint32 rxnull;
+ uint32 txqosnull;
+ uint32 rxqosnull;
+ uint32 txassocreq;
+ uint32 rxassocreq;
+ uint32 txreassocreq;
+ uint32 rxreassocreq;
+ uint32 txdisassoc;
+ uint32 rxdisassoc;
+ uint32 txassocrsp;
+ uint32 rxassocrsp;
+ uint32 txreassocrsp;
+ uint32 rxreassocrsp;
+ uint32 txauth;
+ uint32 rxauth;
+ uint32 txdeauth;
+ uint32 rxdeauth;
+ uint32 txprobereq;
+ uint32 rxprobereq;
+ uint32 txprobersp;
+ uint32 rxprobersp;
+ uint32 txaction;
+ uint32 rxaction;
+ uint32 txrts;
+ uint32 rxrts;
+ uint32 txcts;
+ uint32 rxcts;
+ uint32 txack;
+ uint32 rxack;
+ uint32 txbar;
+ uint32 rxbar;
+ uint32 txback;
+ uint32 rxback;
+ uint32 txpspoll;
+ uint32 rxpspoll;
+} wl_ctl_mgt_cnt_t;
typedef struct {
uint32 packets;
@@ -3166,17 +5158,17 @@
} wl_traffic_stats_t;
typedef struct {
- uint16 version; /* see definition of WL_WME_CNT_VERSION */
- uint16 length; /* length of entire structure */
+ uint16 version; /**< see definition of WL_WME_CNT_VERSION */
+ uint16 length; /**< length of entire structure */
- wl_traffic_stats_t tx[AC_COUNT]; /* Packets transmitted */
- wl_traffic_stats_t tx_failed[AC_COUNT]; /* Packets dropped or failed to transmit */
- wl_traffic_stats_t rx[AC_COUNT]; /* Packets received */
- wl_traffic_stats_t rx_failed[AC_COUNT]; /* Packets failed to receive */
+ wl_traffic_stats_t tx[AC_COUNT]; /**< Packets transmitted */
+ wl_traffic_stats_t tx_failed[AC_COUNT]; /**< Packets dropped or failed to transmit */
+ wl_traffic_stats_t rx[AC_COUNT]; /**< Packets received */
+ wl_traffic_stats_t rx_failed[AC_COUNT]; /**< Packets failed to receive */
- wl_traffic_stats_t forward[AC_COUNT]; /* Packets forwarded by AP */
+ wl_traffic_stats_t forward[AC_COUNT]; /**< Packets forwarded by AP */
- wl_traffic_stats_t tx_expired[AC_COUNT]; /* packets dropped due to lifetime expiry */
+ wl_traffic_stats_t tx_expired[AC_COUNT]; /**< packets dropped due to lifetime expiry */
} wl_wme_cnt_t;
@@ -3185,10 +5177,39 @@
uint32 high;
};
+/* A versioned structure for setting and retrieving debug message levels. */
+#define WL_MSGLEVEL_STRUCT_VERSION_1 1
+
+typedef struct wl_msglevel_v1 {
+ uint16 version;
+ uint16 length;
+ uint32 msglevel1;
+ uint32 msglevel2;
+ uint32 msglevel3;
+ /* add another uint32 when full */
+} wl_msglevel_v1_t;
+
+#define WL_ICMP_IPV6_CFG_VERSION 1
+#define WL_ICMP_IPV6_CLEAR_ALL (1 << 0)
+
+typedef struct wl_icmp_ipv6_cfg {
+ uint16 version;
+ uint16 length;
+ uint16 fixed_length;
+ uint16 flags;
+ uint32 num_ipv6;
+ /* num_ipv6 to follow */
+ struct ipv6_addr host_ipv6[];
+} wl_icmp_ipv6_cfg_t;
+
+#define WL_ICMP_CFG_IPV6_FIXED_LEN OFFSETOF(wl_icmp_ipv6_cfg_t, host_ipv6)
+#define WL_ICMP_CFG_IPV6_LEN(count) (WL_ICMP_CFG_IPV6_FIXED_LEN + \
+ ((count) * sizeof(struct ipv6_addr)))
+
typedef struct wl_mkeep_alive_pkt {
uint16 version; /* Version for mkeep_alive */
uint16 length; /* length of fixed parameters in the structure */
- uint32 period_msec;
+ uint32 period_msec; /* high bit on means immediate send */
uint16 len_bytes;
uint8 keep_alive_id; /* 0 - 3 for N = 4 */
uint8 data[1];
@@ -3197,201 +5218,251 @@
#define WL_MKEEP_ALIVE_VERSION 1
#define WL_MKEEP_ALIVE_FIXED_LEN OFFSETOF(wl_mkeep_alive_pkt_t, data)
#define WL_MKEEP_ALIVE_PRECISION 500
+#define WL_MKEEP_ALIVE_PERIOD_MASK 0x7FFFFFFF
+#define WL_MKEEP_ALIVE_IMMEDIATE 0x80000000
-/* TCP Keep-Alive conn struct */
+/** TCP Keep-Alive conn struct */
typedef struct wl_mtcpkeep_alive_conn_pkt {
- struct ether_addr saddr; /* src mac address */
- struct ether_addr daddr; /* dst mac address */
- struct ipv4_addr sipaddr; /* source IP addr */
- struct ipv4_addr dipaddr; /* dest IP addr */
- uint16 sport; /* src port */
- uint16 dport; /* dest port */
- uint32 seq; /* seq number */
- uint32 ack; /* ACK number */
- uint16 tcpwin; /* TCP window */
+ struct ether_addr saddr; /**< src mac address */
+ struct ether_addr daddr; /**< dst mac address */
+ struct ipv4_addr sipaddr; /**< source IP addr */
+ struct ipv4_addr dipaddr; /**< dest IP addr */
+ uint16 sport; /**< src port */
+ uint16 dport; /**< dest port */
+ uint32 seq; /**< seq number */
+ uint32 ack; /**< ACK number */
+ uint16 tcpwin; /**< TCP window */
+ uint16 PAD;
} wl_mtcpkeep_alive_conn_pkt_t;
-/* TCP Keep-Alive interval struct */
+/** TCP Keep-Alive interval struct */
typedef struct wl_mtcpkeep_alive_timers_pkt {
- uint16 interval; /* interval timer */
- uint16 retry_interval; /* retry_interval timer */
- uint16 retry_count; /* retry_count */
+ uint16 interval; /**< interval timer */
+ uint16 retry_interval; /**< retry_interval timer */
+ uint16 retry_count; /**< retry_count */
} wl_mtcpkeep_alive_timers_pkt_t;
typedef struct wake_info {
uint32 wake_reason;
- uint32 wake_info_len; /* size of packet */
- uchar packet[1];
+ uint32 wake_info_len; /**< size of packet */
+ uint8 packet[];
} wake_info_t;
typedef struct wake_pkt {
- uint32 wake_pkt_len; /* size of packet */
- uchar packet[1];
+ uint32 wake_pkt_len; /**< size of packet */
+ uint8 packet[];
} wake_pkt_t;
-
#define WL_MTCPKEEP_ALIVE_VERSION 1
-#ifdef WLBA
+/* #ifdef WLBA */
-#define WLC_BA_CNT_VERSION 1 /* current version of wlc_ba_cnt_t */
+#define WLC_BA_CNT_VERSION 1 /**< current version of wlc_ba_cnt_t */
-/* block ack related stats */
+/** block ack related stats */
typedef struct wlc_ba_cnt {
- uint16 version; /* WLC_BA_CNT_VERSION */
- uint16 length; /* length of entire structure */
+ uint16 version; /**< WLC_BA_CNT_VERSION */
+ uint16 length; /**< length of entire structure */
/* transmit stat counters */
- uint32 txpdu; /* pdus sent */
- uint32 txsdu; /* sdus sent */
- uint32 txfc; /* tx side flow controlled packets */
- uint32 txfci; /* tx side flow control initiated */
- uint32 txretrans; /* retransmitted pdus */
- uint32 txbatimer; /* ba resend due to timer */
- uint32 txdrop; /* dropped packets */
- uint32 txaddbareq; /* addba req sent */
- uint32 txaddbaresp; /* addba resp sent */
- uint32 txdelba; /* delba sent */
- uint32 txba; /* ba sent */
- uint32 txbar; /* bar sent */
- uint32 txpad[4]; /* future */
+ uint32 txpdu; /**< pdus sent */
+ uint32 txsdu; /**< sdus sent */
+ uint32 txfc; /**< tx side flow controlled packets */
+ uint32 txfci; /**< tx side flow control initiated */
+ uint32 txretrans; /**< retransmitted pdus */
+ uint32 txbatimer; /**< ba resend due to timer */
+ uint32 txdrop; /**< dropped packets */
+ uint32 txaddbareq; /**< addba req sent */
+ uint32 txaddbaresp; /**< addba resp sent */
+ uint32 txdelba; /**< delba sent */
+ uint32 txba; /**< ba sent */
+ uint32 txbar; /**< bar sent */
+ uint32 txpad[4]; /**< future */
/* receive side counters */
- uint32 rxpdu; /* pdus recd */
- uint32 rxqed; /* pdus buffered before sending up */
- uint32 rxdup; /* duplicate pdus */
- uint32 rxnobuf; /* pdus discarded due to no buf */
- uint32 rxaddbareq; /* addba req recd */
- uint32 rxaddbaresp; /* addba resp recd */
- uint32 rxdelba; /* delba recd */
- uint32 rxba; /* ba recd */
- uint32 rxbar; /* bar recd */
- uint32 rxinvba; /* invalid ba recd */
- uint32 rxbaholes; /* ba recd with holes */
- uint32 rxunexp; /* unexpected packets */
- uint32 rxpad[4]; /* future */
+ uint32 rxpdu; /**< pdus recd */
+ uint32 rxqed; /**< pdus buffered before sending up */
+ uint32 rxdup; /**< duplicate pdus */
+ uint32 rxnobuf; /**< pdus discarded due to no buf */
+ uint32 rxaddbareq; /**< addba req recd */
+ uint32 rxaddbaresp; /**< addba resp recd */
+ uint32 rxdelba; /**< delba recd */
+ uint32 rxba; /**< ba recd */
+ uint32 rxbar; /**< bar recd */
+ uint32 rxinvba; /**< invalid ba recd */
+ uint32 rxbaholes; /**< ba recd with holes */
+ uint32 rxunexp; /**< unexpected packets */
+ uint32 rxpad[4]; /**< future */
} wlc_ba_cnt_t;
-#endif /* WLBA */
+/* #endif WLBA */
-/* structure for per-tid ampdu control */
+/** structure for per-tid ampdu control */
struct ampdu_tid_control {
uint8 tid; /* tid */
uint8 enable; /* enable/disable */
};
-/* struct for ampdu tx/rx aggregation control */
+/** struct for ampdu tx/rx aggregation control */
struct ampdu_aggr {
- int8 aggr_override; /* aggr overrided by dongle. Not to be set by host. */
- uint16 conf_TID_bmap; /* bitmap of TIDs to configure */
- uint16 enab_TID_bmap; /* enable/disable per TID */
+ int8 aggr_override; /**< aggr overrided by dongle. Not to be set by host. */
+ uint16 conf_TID_bmap; /**< bitmap of TIDs to configure */
+ uint16 enab_TID_bmap; /**< enable/disable per TID */
};
-/* structure for identifying ea/tid for sending addba/delba */
+/** structure for identifying ea/tid for sending addba/delba */
struct ampdu_ea_tid {
- struct ether_addr ea; /* Station address */
- uint8 tid; /* tid */
- uint8 initiator; /* 0 is recipient, 1 is originator */
-};
-/* structure for identifying retry/tid for retry_limit_tid/rr_retry_limit_tid */
-struct ampdu_retry_tid {
- uint8 tid; /* tid */
- uint8 retry; /* retry value */
+ struct ether_addr ea; /**< Station address */
+ uint8 tid; /**< tid */
+ uint8 initiator; /**< 0 is recipient, 1 is originator */
};
-#define BDD_FNAME_LEN 32 /* Max length of friendly name */
+/** structure for identifying retry/tid for retry_limit_tid/rr_retry_limit_tid */
+struct ampdu_retry_tid {
+ uint8 tid; /**< tid */
+ uint8 retry; /**< retry value */
+};
+
+#define BDD_FNAME_LEN 32 /**< Max length of friendly name */
typedef struct bdd_fname {
- uint8 len; /* length of friendly name */
- uchar name[BDD_FNAME_LEN]; /* friendly name */
+ uint8 len; /**< length of friendly name */
+ uchar name[BDD_FNAME_LEN]; /**< friendly name */
} bdd_fname_t;
/* structure for addts arguments */
-/* For ioctls that take a list of TSPEC */
+/** For ioctls that take a list of TSPEC */
struct tslist {
- int count; /* number of tspecs */
- struct tsinfo_arg tsinfo[1]; /* variable length array of tsinfo */
+ int32 count; /**< number of tspecs */
+ struct tsinfo_arg tsinfo[]; /**< variable length array of tsinfo */
};
-#ifdef WLTDLS
-/* structure for tdls iovars */
+/* WLTDLS */
+/**structure for tdls iovars */
typedef struct tdls_iovar {
- struct ether_addr ea; /* Station address */
- uint8 mode; /* mode: depends on iovar */
+ struct ether_addr ea; /**< Station address */
+ uint8 mode; /**< mode: depends on iovar */
+ uint8 PAD;
chanspec_t chanspec;
- uint32 pad; /* future */
+ uint8 PAD[6];
} tdls_iovar_t;
#define TDLS_WFD_IE_SIZE 512
-/* structure for tdls wfd ie */
+/**structure for tdls wfd ie */
typedef struct tdls_wfd_ie_iovar {
- struct ether_addr ea; /* Station address */
+ struct ether_addr ea; /**< Station address */
uint8 mode;
+ uint8 PAD;
uint16 length;
uint8 data[TDLS_WFD_IE_SIZE];
} tdls_wfd_ie_iovar_t;
-#endif /* WLTDLS */
+/* #endif WLTDLS */
-/* structure for addts/delts arguments */
+/** structure for addts/delts arguments */
typedef struct tspec_arg {
- uint16 version; /* see definition of TSPEC_ARG_VERSION */
- uint16 length; /* length of entire structure */
- uint flag; /* bit field */
+ uint16 version; /**< see definition of TSPEC_ARG_VERSION */
+ uint16 length; /**< length of entire structure */
+ uint32 flag; /**< bit field */
/* TSPEC Arguments */
- struct tsinfo_arg tsinfo; /* TS Info bit field */
- uint16 nom_msdu_size; /* (Nominal or fixed) MSDU Size (bytes) */
- uint16 max_msdu_size; /* Maximum MSDU Size (bytes) */
- uint min_srv_interval; /* Minimum Service Interval (us) */
- uint max_srv_interval; /* Maximum Service Interval (us) */
- uint inactivity_interval; /* Inactivity Interval (us) */
- uint suspension_interval; /* Suspension Interval (us) */
- uint srv_start_time; /* Service Start Time (us) */
- uint min_data_rate; /* Minimum Data Rate (bps) */
- uint mean_data_rate; /* Mean Data Rate (bps) */
- uint peak_data_rate; /* Peak Data Rate (bps) */
- uint max_burst_size; /* Maximum Burst Size (bytes) */
- uint delay_bound; /* Delay Bound (us) */
- uint min_phy_rate; /* Minimum PHY Rate (bps) */
- uint16 surplus_bw; /* Surplus Bandwidth Allowance (range 1.0 to 8.0) */
- uint16 medium_time; /* Medium Time (32 us/s periods) */
- uint8 dialog_token; /* dialog token */
+ struct tsinfo_arg tsinfo; /**< TS Info bit field */
+ uint8 PAD;
+ uint16 nom_msdu_size; /**< (Nominal or fixed) MSDU Size (bytes) */
+ uint16 max_msdu_size; /**< Maximum MSDU Size (bytes) */
+ uint32 min_srv_interval; /**< Minimum Service Interval (us) */
+ uint32 max_srv_interval; /**< Maximum Service Interval (us) */
+ uint32 inactivity_interval; /**< Inactivity Interval (us) */
+ uint32 suspension_interval; /**< Suspension Interval (us) */
+ uint32 srv_start_time; /**< Service Start Time (us) */
+ uint32 min_data_rate; /**< Minimum Data Rate (bps) */
+ uint32 mean_data_rate; /**< Mean Data Rate (bps) */
+ uint32 peak_data_rate; /**< Peak Data Rate (bps) */
+ uint32 max_burst_size; /**< Maximum Burst Size (bytes) */
+ uint32 delay_bound; /**< Delay Bound (us) */
+ uint32 min_phy_rate; /**< Minimum PHY Rate (bps) */
+ uint16 surplus_bw; /**< Surplus Bandwidth Allowance (range 1.0 to 8.0) */
+ uint16 medium_time; /**< Medium Time (32 us/s periods) */
+ uint8 dialog_token; /**< dialog token */
+ uint8 PAD[3];
} tspec_arg_t;
-/* tspec arg for desired station */
+/** tspec arg for desired station */
typedef struct tspec_per_sta_arg {
struct ether_addr ea;
+ uint8 PAD[2];
struct tspec_arg ts;
} tspec_per_sta_arg_t;
-/* structure for max bandwidth for each access category */
+/** structure for max bandwidth for each access category */
typedef struct wme_max_bandwidth {
- uint32 ac[AC_COUNT]; /* max bandwidth for each access category */
+ uint32 ac[AC_COUNT]; /**< max bandwidth for each access category */
} wme_max_bandwidth_t;
#define WL_WME_MBW_PARAMS_IO_BYTES (sizeof(wme_max_bandwidth_t))
/* current version of wl_tspec_arg_t struct */
-#define TSPEC_ARG_VERSION 2 /* current version of wl_tspec_arg_t struct */
-#define TSPEC_ARG_LENGTH 55 /* argument length from tsinfo to medium_time */
-#define TSPEC_DEFAULT_DIALOG_TOKEN 42 /* default dialog token */
-#define TSPEC_DEFAULT_SBW_FACTOR 0x3000 /* default surplus bw */
-
+#define TSPEC_ARG_VERSION 2 /**< current version of wl_tspec_arg_t struct */
+#define TSPEC_ARG_LENGTH 55 /**< argument length from tsinfo to medium_time */
+#define TSPEC_DEFAULT_DIALOG_TOKEN 42 /**< default dialog token */
+#define TSPEC_DEFAULT_SBW_FACTOR 0x3000 /**< default surplus bw */
#define WL_WOWL_KEEPALIVE_MAX_PACKET_SIZE 80
#define WLC_WOWL_MAX_KEEPALIVE 2
-/* Packet lifetime configuration per ac */
+/** Packet lifetime configuration per ac */
typedef struct wl_lifetime {
- uint32 ac; /* access class */
- uint32 lifetime; /* Packet lifetime value in ms */
+ uint32 ac; /**< access class */
+ uint32 lifetime; /**< Packet lifetime value in ms */
} wl_lifetime_t;
+/** Management time configuration */
+typedef struct wl_lifetime_mg {
+ uint32 mgmt_bitmap; /**< Mgmt subtype */
+ uint32 lifetime; /**< Packet lifetime value in us */
+} wl_lifetime_mg_t;
-/* Channel Switch Announcement param */
+/* MAC Sample Capture related */
+#define WL_MACCAPTR_DEFSTART_PTR 0xA00
+#define WL_MACCAPTR_DEFSTOP_PTR 0xA3F
+#define WL_MACCAPTR_DEFSZ 0x3F
+
+#define WL_MACCAPTR_DEF_MASK 0xFFFFFFFF
+
+typedef enum {
+ WL_MACCAPT_TRIG = 0,
+ WL_MACCAPT_STORE = 1,
+ WL_MACCAPT_TRANS = 2,
+ WL_MACCAPT_MATCH = 3
+} maccaptr_optn;
+
+typedef enum {
+ WL_MACCAPT_STRT = 1,
+ WL_MACCAPT_STOP = 2,
+ WL_MACCAPT_RST = 3
+} maccaptr_cmd_t;
+
+/* MAC Sample Capture Set-up Paramters */
+typedef struct wl_maccapture_params {
+ uint8 gpio_sel;
+ uint8 la_mode; /* TRUE: GPIO Out Enabled */
+ uint8 PAD[2];
+ uint32 start_ptr; /* Start address to store */
+ uint32 stop_ptr; /* Stop address to store */
+ uint8 optn_bmp; /* Options */
+ uint8 PAD[3];
+ uint32 tr_mask; /* Trigger Mask */
+ uint32 tr_val; /* Trigger Value */
+ uint32 s_mask; /* Store Mode Mask */
+ uint32 x_mask; /* Trans. Mode Mask */
+ uint32 m_mask; /* Match Mode Mask */
+ uint32 m_val; /* Match Value */
+ maccaptr_cmd_t cmd; /* Start / Stop */
+} wl_maccapture_params_t;
+
+/** Channel Switch Announcement param */
typedef struct wl_chan_switch {
- uint8 mode; /* value 0 or 1 */
- uint8 count; /* count # of beacons before switching */
- chanspec_t chspec; /* chanspec */
- uint8 reg; /* regulatory class */
- uint8 frame_type; /* csa frame type, unicast or broadcast */
+ uint8 mode; /**< value 0 or 1 */
+ uint8 count; /**< count # of beacons before switching */
+ chanspec_t chspec; /**< chanspec */
+ uint8 reg; /**< regulatory class */
+ uint8 frame_type; /**< csa frame type, unicast or broadcast */
} wl_chan_switch_t;
enum {
@@ -3421,7 +5492,7 @@
#define IMMEDIATE_EVENT_BIT 8
#define SUPPRESS_SSID_BIT 9
#define ENABLE_NET_OFFLOAD_BIT 10
-/* report found/lost events for SSID and BSSID networks seperately */
+/** report found/lost events for SSID and BSSID networks seperately */
#define REPORT_SEPERATELY_BIT 11
#define SORT_CRITERIA_MASK 0x0001
@@ -3435,12 +5506,10 @@
#define IMMEDIATE_EVENT_MASK 0x0100
#define SUPPRESS_SSID_MASK 0x0200
#define ENABLE_NET_OFFLOAD_MASK 0x0400
-/* report found/lost events for SSID and BSSID networks seperately */
+/** report found/lost events for SSID and BSSID networks seperately */
#define REPORT_SEPERATELY_MASK 0x0800
#define PFN_VERSION 2
-#define PFN_SCANRESULT_VERSION 1
-#define MAX_PFN_LIST_COUNT 16
#define PFN_COMPLETE 1
#define PFN_INCOMPLETE 0
@@ -3452,50 +5521,102 @@
#define PFN_PARTIAL_SCAN_BIT 0
#define PFN_PARTIAL_SCAN_MASK 1
+
#define PFN_SWC_RSSI_WINDOW_MAX 8
#define PFN_SWC_MAX_NUM_APS 16
#define PFN_HOTLIST_MAX_NUM_APS 64
-#define MAX_EPNO_HIDDEN_SSID 8
-#define MAX_WHITELIST_SSID 2
+#define MAX_EPNO_HIDDEN_SSID 8
+#define MAX_WHITELIST_SSID 2
-/* PFN network info structure */
-typedef struct wl_pfn_subnet_info {
+/* Version 1 and 2 for various scan results structures defined below */
+#define PFN_SCANRESULTS_VERSION_V1 1
+#define PFN_SCANRESULTS_VERSION_V2 2
+
+/** PFN network info structure */
+typedef struct wl_pfn_subnet_info_v1 {
struct ether_addr BSSID;
- uint8 channel; /* channel number only */
+ uint8 channel; /**< channel number only */
uint8 SSID_len;
uint8 SSID[32];
-} wl_pfn_subnet_info_t;
+} wl_pfn_subnet_info_v1_t;
-typedef struct wl_pfn_net_info {
- wl_pfn_subnet_info_t pfnsubnet;
- int16 RSSI; /* receive signal strength (in dBm) */
- uint16 timestamp; /* age in seconds */
-} wl_pfn_net_info_t;
+typedef struct wl_pfn_subnet_info_v2 {
+ struct ether_addr BSSID;
+ uint8 channel; /**< channel number only */
+ uint8 SSID_len;
+ union {
+ uint8 SSID[32];
+ uint16 index;
+ } u;
+} wl_pfn_subnet_info_v2_t;
-typedef struct wl_pfn_lnet_info {
- wl_pfn_subnet_info_t pfnsubnet; /* BSSID + channel + SSID len + SSID */
- uint16 flags; /* partial scan, etc */
- int16 RSSI; /* receive signal strength (in dBm) */
- uint32 timestamp; /* age in miliseconds */
- uint16 rtt0; /* estimated distance to this AP in centimeters */
- uint16 rtt1; /* standard deviation of the distance to this AP in centimeters */
-} wl_pfn_lnet_info_t;
+typedef struct wl_pfn_net_info_v1 {
+ wl_pfn_subnet_info_v1_t pfnsubnet;
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ uint16 timestamp; /**< age in seconds */
+} wl_pfn_net_info_v1_t;
-typedef struct wl_pfn_lscanresults {
+typedef struct wl_pfn_net_info_v2 {
+ wl_pfn_subnet_info_v2_t pfnsubnet;
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ uint16 timestamp; /**< age in seconds */
+} wl_pfn_net_info_v2_t;
+
+/* Version 1 and 2 for various lbest scan results structures below */
+#define PFN_LBEST_SCAN_RESULT_VERSION_V1 1
+#define PFN_LBEST_SCAN_RESULT_VERSION_V2 2
+
+#define MAX_CHBKT_PER_RESULT 4
+
+typedef struct wl_pfn_lnet_info_v1 {
+ wl_pfn_subnet_info_v1_t pfnsubnet; /**< BSSID + channel + SSID len + SSID */
+ uint16 flags; /**< partial scan, etc */
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ uint32 timestamp; /**< age in miliseconds */
+ uint16 rtt0; /**< estimated distance to this AP in centimeters */
+ uint16 rtt1; /**< standard deviation of the distance to this AP in centimeters */
+} wl_pfn_lnet_info_v1_t;
+
+typedef struct wl_pfn_lnet_info_v2 {
+ wl_pfn_subnet_info_v2_t pfnsubnet; /**< BSSID + channel + SSID len + SSID */
+ uint16 flags; /**< partial scan, etc */
+ int16 RSSI; /**< receive signal strength (in dBm) */
+ uint32 timestamp; /**< age in miliseconds */
+ uint16 rtt0; /**< estimated distance to this AP in centimeters */
+ uint16 rtt1; /**< standard deviation of the distance to this AP in centimeters */
+} wl_pfn_lnet_info_v2_t;
+
+typedef struct wl_pfn_lscanresults_v1 {
uint32 version;
uint32 status;
uint32 count;
- wl_pfn_lnet_info_t netinfo[1];
-} wl_pfn_lscanresults_t;
+ wl_pfn_lnet_info_v1_t netinfo[1];
+} wl_pfn_lscanresults_v1_t;
-/* this is used to report on 1-* pfn scan results */
-typedef struct wl_pfn_scanresults {
+typedef struct wl_pfn_lscanresults_v2 {
+ uint32 version;
+ uint16 status;
+ uint16 count;
+ uint32 scan_ch_buckets[MAX_CHBKT_PER_RESULT];
+ wl_pfn_lnet_info_v2_t netinfo[1];
+} wl_pfn_lscanresults_v2_t;
+
+/**this is used to report on 1-* pfn scan results */
+typedef struct wl_pfn_scanresults_v1 {
uint32 version;
uint32 status;
uint32 count;
- wl_pfn_net_info_t netinfo[1];
-} wl_pfn_scanresults_t;
+ wl_pfn_net_info_v1_t netinfo[1];
+} wl_pfn_scanresults_v1_t;
+
+typedef struct wl_pfn_scanresults_v2 {
+ uint32 version;
+ uint32 status;
+ uint32 count;
+ uint32 scan_ch_bucket;
+ wl_pfn_net_info_v2_t netinfo[1];
+} wl_pfn_scanresults_v2_t;
typedef struct wl_pfn_significant_net {
uint16 flags;
@@ -3504,45 +5625,80 @@
int8 rssi[PFN_SWC_RSSI_WINDOW_MAX];
} wl_pfn_significant_net_t;
+#define PFN_SWC_SCANRESULT_VERSION 1
typedef struct wl_pfn_swc_results {
uint32 version;
- uint32 pkt_count;
- uint32 total_count;
- wl_pfn_significant_net_t list[1];
+ uint32 pkt_count; /**< No. of results in current frame */
+ uint32 total_count; /**< Total expected results */
+ wl_pfn_significant_net_t list[];
} wl_pfn_swc_results_t;
+typedef struct wl_pfn_net_info_bssid {
+ struct ether_addr BSSID;
+ uint8 channel; /**< channel number only */
+ int8 RSSI; /**< receive signal strength (in dBm) */
+ uint16 flags; /**< (e.g. partial scan, off channel) */
+ uint16 timestamp; /**< age in seconds */
+} wl_pfn_net_info_bssid_t;
-/* used to report exactly one scan result */
-/* plus reports detailed scan info in bss_info */
-typedef struct wl_pfn_scanresult {
+typedef struct wl_pfn_scanhist_bssid {
uint32 version;
uint32 status;
uint32 count;
- wl_pfn_net_info_t netinfo;
- wl_bss_info_t bss_info;
-} wl_pfn_scanresult_t;
+ wl_pfn_net_info_bssid_t netinfo[1];
+} wl_pfn_scanhist_bssid_t;
-/* PFN data structure */
+/* Version 1 and 2 for various single scan result */
+#define PFN_SCANRESULT_VERSION_V1 1
+#define PFN_SCANRESULT_VERSION_V2 2
+
+/* used to report exactly one scan result */
+/* plus reports detailed scan info in bss_info */
+typedef struct wl_pfn_scanresult_v1 {
+ uint32 version;
+ uint32 status;
+ uint32 count;
+ wl_pfn_net_info_v1_t netinfo;
+ wl_bss_info_v109_t bss_info;
+} wl_pfn_scanresult_v1_t;
+
+typedef struct wl_pfn_scanresult_v2 {
+ uint32 version;
+ uint32 status;
+ uint32 count;
+ wl_pfn_net_info_v2_t netinfo;
+ wl_bss_info_v109_t bss_info;
+} wl_pfn_scanresult_v2_t;
+
+typedef struct wl_pfn_scanresult_v2_1 {
+ uint32 version;
+ uint32 status;
+ uint32 count;
+ wl_pfn_net_info_v2_t netinfo;
+ uint8 bss_info[]; /* var length wl_bss_info_X structures */
+} wl_pfn_scanresult_v2_1_t;
+
+/**PFN data structure */
typedef struct wl_pfn_param {
- int32 version; /* PNO parameters version */
- int32 scan_freq; /* Scan frequency */
- int32 lost_network_timeout; /* Timeout in sec. to declare
+ int32 version; /**< PNO parameters version */
+ int32 scan_freq; /**< Scan frequency */
+ int32 lost_network_timeout; /**< Timeout in sec. to declare
* discovered network as lost
*/
- int16 flags; /* Bit field to control features
+ int16 flags; /**< Bit field to control features
* of PFN such as sort criteria auto
* enable switch and background scan
*/
- int16 rssi_margin; /* Margin to avoid jitter for choosing a
+ int16 rssi_margin; /**< Margin to avoid jitter for choosing a
* PFN based on RSSI sort criteria
*/
- uint8 bestn; /* number of best networks in each scan */
- uint8 mscan; /* number of scans recorded */
- uint8 repeat; /* Minimum number of scan intervals
+ uint8 bestn; /**< number of best networks in each scan */
+ uint8 mscan; /**< number of scans recorded */
+ uint8 repeat; /**< Minimum number of scan intervals
*before scan frequency changes in adaptive scan
*/
- uint8 exp; /* Exponent of 2 for maximum scan interval */
- int32 slow_freq; /* slow scan period */
+ uint8 exp; /**< Exponent of 2 for maximum scan interval */
+ int32 slow_freq; /**< slow scan period */
} wl_pfn_param_t;
typedef struct wl_pfn_bssid {
@@ -3550,7 +5706,6 @@
/* Bit4: suppress_lost, Bit3: suppress_found */
uint16 flags;
} wl_pfn_bssid_t;
-
typedef struct wl_pfn_significant_bssid {
struct ether_addr macaddr;
int8 rssi_low_threshold;
@@ -3558,6 +5713,12 @@
} wl_pfn_significant_bssid_t;
#define WL_PFN_SUPPRESSFOUND_MASK 0x08
#define WL_PFN_SUPPRESSLOST_MASK 0x10
+#define WL_PFN_SSID_IMPRECISE_MATCH 0x80
+#define WL_PFN_SSID_SAME_NETWORK 0x10000
+#define WL_PFN_SUPPRESS_AGING_MASK 0x20000
+#define WL_PFN_FLUSH_ALL_SSIDS 0x40000
+
+#define WL_PFN_IOVAR_FLAG_MASK 0xFFFF00FF
#define WL_PFN_RSSI_MASK 0xff00
#define WL_PFN_RSSI_SHIFT 8
@@ -3568,10 +5729,43 @@
uint32 flags;
} wl_pfn_cfg_t;
-#define CH_BUCKET_REPORT_REGULAR 0
-#define CH_BUCKET_REPORT_FULL_RESULT 2
-#define CH_BUCKET_GSCAN 4
+#define WL_PFN_SSID_CFG_VERSION 1
+#define WL_PFN_SSID_CFG_CLEAR 0x1
+typedef struct wl_pfn_ssid_params {
+ int8 min5G_rssi; /* minimum 5GHz RSSI for a BSSID to be considered */
+ int8 min2G_rssi; /* minimum 2.4GHz RSSI for a BSSID to be considered */
+ int16 init_score_max; /* The maximum score that a network can have before bonuses */
+
+ int16 cur_bssid_bonus; /* Add to current bssid */
+ int16 same_ssid_bonus; /* score bonus for all networks with the same network flag */
+ int16 secure_bonus; /* score bonus for networks that are not open */
+ int16 band_5g_bonus;
+} wl_pfn_ssid_params_t;
+
+typedef struct wl_ssid_ext_params {
+ int8 min5G_rssi; /* minimum 5GHz RSSI for a BSSID to be considered */
+ int8 min2G_rssi; /* minimum 2.4GHz RSSI for a BSSID to be considered */
+ int16 init_score_max; /* The maximum score that a network can have before bonuses */
+ int16 cur_bssid_bonus; /* Add to current bssid */
+ int16 same_ssid_bonus; /* score bonus for all networks with the same network flag */
+ int16 secure_bonus; /* score bonus for networks that are not open */
+ int16 band_5g_bonus;
+} wl_ssid_ext_params_t;
+
+typedef struct wl_pfn_ssid_cfg {
+ uint16 version;
+ uint16 flags;
+ wl_ssid_ext_params_t params;
+} wl_pfn_ssid_cfg_t;
+
+#define CH_BUCKET_REPORT_NONE 0
+#define CH_BUCKET_REPORT_SCAN_COMPLETE_ONLY 1
+#define CH_BUCKET_REPORT_FULL_RESULT 2
+#define CH_BUCKET_REPORT_SCAN_COMPLETE (CH_BUCKET_REPORT_SCAN_COMPLETE_ONLY | \
+ CH_BUCKET_REPORT_FULL_RESULT)
+#define CH_BUCKET_REPORT_REGULAR 0
+#define CH_BUCKET_GSCAN 4
typedef struct wl_pfn_gscan_ch_bucket_cfg {
uint8 bucket_end_index;
@@ -3582,21 +5776,31 @@
uint16 max_freq_multiple;
} wl_pfn_gscan_ch_bucket_cfg_t;
-#define GSCAN_SEND_ALL_RESULTS_MASK (1 << 0)
-#define GSCAN_CFG_FLAGS_ONLY_MASK (1 << 7)
-#define WL_GSCAN_CFG_VERSION 2
+typedef struct wl_pfn_capabilities {
+ uint16 max_mscan;
+ uint16 max_bestn;
+ uint16 max_swc_bssid;
+ uint16 max_hotlist_bssid;
+} wl_pfn_capabilities_t;
+
+#define GSCAN_SEND_ALL_RESULTS_MASK (1 << 0)
+#define GSCAN_ALL_BUCKETS_IN_FIRST_SCAN_MASK (1 << 3)
+#define GSCAN_CFG_FLAGS_ONLY_MASK (1 << 7)
+#define WL_GSCAN_CFG_VERSION 1
typedef struct wl_pfn_gscan_cfg {
uint16 version;
- /* BIT0 1 = send probes/beacons to HOST
+ /**
+ * BIT0 1 = send probes/beacons to HOST
* BIT1 Reserved
* BIT2 Reserved
* Add any future flags here
* BIT7 1 = no other useful cfg sent
*/
- uint8 flags;
- /* Buffer filled threshold in % to generate an event */
+ uint8 flags;
+ /** Buffer filled threshold in % to generate an event */
uint8 buffer_threshold;
- /* No. of BSSIDs with "change" to generate an evt
+ /**
+ * No. of BSSIDs with "change" to generate an evt
* change - crosses rssi threshold/lost
*/
uint8 swc_nbssid_threshold;
@@ -3613,16 +5817,16 @@
#define WL_PFN_REPORT_BSSIDNET 2
#define WL_PFN_CFG_FLAGS_PROHIBITED 0x00000001 /* Accept and use prohibited channels */
-#define WL_PFN_CFG_FLAGS_RESERVED 0xfffffffe /* Remaining reserved for future use */
-#define WL_PFN_SSID_A_BAND_TRIG 0x20
-#define WL_PFN_SSID_BG_BAND_TRIG 0x40
+#define WL_PFN_CFG_FLAGS_RESERVED 0xfffffffe /**< Remaining reserved for future use */
+
typedef struct wl_pfn {
- wlc_ssid_t ssid; /* ssid name and its length */
- int32 flags; /* bit2: hidden */
- int32 infra; /* BSS Vs IBSS */
- int32 auth; /* Open Vs Closed */
- int32 wpa_auth; /* WPA type */
- int32 wsec; /* wsec value */
+ wlc_ssid_t ssid; /**< ssid name and its length */
+ int32 flags; /**< bit2: hidden */
+ int32 infra; /**< BSS Vs IBSS */
+ int32 auth; /**< Open Vs Closed */
+ int32 wpa_auth; /**< WPA type */
+ int32 wsec; /**< wsec value */
+ wsec_pmk_t psk; /**< Password */
} wl_pfn_t;
typedef struct wl_pfn_list {
@@ -3632,7 +5836,7 @@
wl_pfn_t pfn[1];
} wl_pfn_list_t;
-#define PFN_SSID_EXT_VERSION 2
+#define PFN_SSID_EXT_VERSION 1
typedef struct wl_pfn_ext {
uint8 flags;
@@ -3642,7 +5846,6 @@
uint8 ssid_len;
uint8 pad;
} wl_pfn_ext_t;
-
typedef struct wl_pfn_ext_list {
uint16 version;
uint16 count;
@@ -3657,8 +5860,7 @@
/* channel number */
uint16 channel;
/* Assume idx in order of cfg */
- uint16 index;
- struct ether_addr bssid;
+ uint32 index;
} wl_pfn_result_ssid_crc32_t;
typedef struct wl_pfn_ssid_ext_result {
@@ -3671,33 +5873,97 @@
#define PFN_EXT_AUTH_CODE_PSK 2 /* WPA_PSK or WPA2PSK */
#define PFN_EXT_AUTH_CODE_EAPOL 4 /* any EAPOL */
-#define WL_PFN_MAC_OUI_ONLY_MASK 1
-#define WL_PFN_SET_MAC_UNASSOC_MASK 2
-/* To configure pfn_macaddr */
-typedef struct wl_pfn_macaddr_cfg {
- uint8 version;
- uint8 flags;
- struct ether_addr macaddr;
-} wl_pfn_macaddr_cfg_t;
-#define WL_PFN_MACADDR_CFG_VER 1
-typedef BWL_PRE_PACKED_STRUCT struct pfn_olmsg_params_t {
- wlc_ssid_t ssid;
- uint32 cipher_type;
- uint32 auth_type;
- uint8 channels[4];
-} BWL_POST_PACKED_STRUCT pfn_olmsg_params;
-
#define WL_PFN_HIDDEN_BIT 2
#define WL_PFN_HIDDEN_MASK 0x4
#ifndef BESTN_MAX
-#define BESTN_MAX 3
-#endif
+#define BESTN_MAX 10
+#endif // endif
#ifndef MSCAN_MAX
#define MSCAN_MAX 90
-#endif
+#endif // endif
+/* Dynamic scan configuration for motion profiles */
+
+#define WL_PFN_MPF_VERSION 1
+
+/* Valid group IDs, may be expanded in the future */
+#define WL_PFN_MPF_GROUP_SSID 0
+#define WL_PFN_MPF_GROUP_BSSID 1
+#define WL_PFN_MPF_MAX_GROUPS 2
+
+/* Max number of MPF states supported in this time */
+#define WL_PFN_MPF_STATES_MAX 4
+
+/* Flags for the mpf-specific stuff */
+#define WL_PFN_MPF_ADAPT_ON_BIT 0
+#define WL_PFN_MPF_ADAPTSCAN_BIT 1
+
+#define WL_PFN_MPF_ADAPT_ON_MASK 0x0001
+#define WL_PFN_MPF_ADAPTSCAN_MASK 0x0006
+
+/* Per-state timing values */
+typedef struct wl_pfn_mpf_state_params {
+ int32 scan_freq; /* Scan frequency (secs) */
+ int32 lost_network_timeout; /* Timeout to declare net lost (secs) */
+ int16 flags; /* Space for flags: ADAPT etc */
+ uint8 exp; /* Exponent of 2 for max interval for SMART/STRICT_ADAPT */
+ uint8 repeat; /* Number of scans before changing adaptation level */
+ int32 slow_freq; /* Slow scan period for SLOW_ADAPT */
+} wl_pfn_mpf_state_params_t;
+
+typedef struct wl_pfn_mpf_param {
+ uint16 version; /* Structure version */
+ uint16 groupid; /* Group ID: 0 (SSID), 1 (BSSID), other: reserved */
+ wl_pfn_mpf_state_params_t state[WL_PFN_MPF_STATES_MAX];
+} wl_pfn_mpf_param_t;
+
+/* Structure for setting pfn_override iovar */
+typedef struct wl_pfn_override_param {
+ uint16 version; /* Structure version */
+ uint16 start_offset; /* Seconds from now to apply new params */
+ uint16 duration; /* Seconds to keep new params applied */
+ uint16 reserved;
+ wl_pfn_mpf_state_params_t override;
+} wl_pfn_override_param_t;
+#define WL_PFN_OVERRIDE_VERSION 1
+
+/*
+ * Definitions for base MPF configuration
+ */
+
+#define WL_MPF_VERSION 1
+#define WL_MPF_MAX_BITS 3
+#define WL_MPF_MAX_STATES (1 << WL_MPF_MAX_BITS)
+
+#define WL_MPF_STATE_NAME_MAX 12
+
+typedef struct wl_mpf_val {
+ uint16 val; /* Value of GPIO bits */
+ uint16 state; /* State identifier */
+ char name[WL_MPF_STATE_NAME_MAX]; /* Optional name */
+} wl_mpf_val_t;
+
+typedef struct wl_mpf_map {
+ uint16 version;
+ uint16 type;
+ uint16 mask; /* Which GPIO bits to use */
+ uint8 count; /* Count of state/value mappings */
+ uint8 PAD;
+ wl_mpf_val_t vals[WL_MPF_MAX_STATES];
+} wl_mpf_map_t;
+
+#define WL_MPF_STATE_AUTO (0xFFFF) /* (uint16)-1) */
+
+typedef struct wl_mpf_state {
+ uint16 version;
+ uint16 type;
+ uint16 state; /* Get/Set */
+ uint8 force; /* 0 - auto (HW) state, 1 - forced state */
+ char name[WL_MPF_STATE_NAME_MAX]; /* Get/Set: Optional/actual name */
+ uint8 PAD;
+} wl_mpf_state_t;
/*
* WLFCTS definition
*/
@@ -3711,106 +5977,108 @@
uint8 tx_cnt;
} wl_txstatus_additional_info_t;
-/* Service discovery */
+/** Service discovery */
typedef struct {
- uint8 transaction_id; /* Transaction id */
- uint8 protocol; /* Service protocol type */
- uint16 query_len; /* Length of query */
- uint16 response_len; /* Length of response */
- uint8 qrbuf[1];
+ uint8 transaction_id; /**< Transaction id */
+ uint8 protocol; /**< Service protocol type */
+ uint16 query_len; /**< Length of query */
+ uint16 response_len; /**< Length of response */
+ uint8 qrbuf[];
} wl_p2po_qr_t;
typedef struct {
- uint16 period; /* extended listen period */
- uint16 interval; /* extended listen interval */
+ uint16 period; /**< extended listen period */
+ uint16 interval; /**< extended listen interval */
+ uint16 count; /* count to repeat */
+ uint16 pad; /* pad for 32bit align */
} wl_p2po_listen_t;
-/* GAS state machine tunable parameters. Structure field values of 0 means use the default. */
+/** GAS state machine tunable parameters. Structure field values of 0 means use the default. */
typedef struct wl_gas_config {
- uint16 max_retransmit; /* Max # of firmware/driver retransmits on no Ack
+ uint16 max_retransmit; /**< Max # of firmware/driver retransmits on no Ack
* from peer (on top of the ucode retries).
*/
- uint16 response_timeout; /* Max time to wait for a GAS-level response
+ uint16 response_timeout; /**< Max time to wait for a GAS-level response
* after sending a packet.
*/
- uint16 max_comeback_delay; /* Max GAS response comeback delay.
+ uint16 max_comeback_delay; /**< Max GAS response comeback delay.
* Exceeding this fails the GAS exchange.
*/
- uint16 max_retries; /* Max # of GAS state machine retries on failure
+ uint16 max_retries; /**< Max # of GAS state machine retries on failure
* of a GAS frame exchange.
*/
} wl_gas_config_t;
-/* P2P Find Offload parameters */
-typedef BWL_PRE_PACKED_STRUCT struct wl_p2po_find_config {
- uint16 version; /* Version of this struct */
- uint16 length; /* sizeof(wl_p2po_find_config_t) */
- int32 search_home_time; /* P2P search state home time when concurrent
+/** P2P Find Offload parameters */
+typedef struct wl_p2po_find_config {
+ uint16 version; /**< Version of this struct */
+ uint16 length; /**< sizeof(wl_p2po_find_config_t) */
+ int32 search_home_time; /**< P2P search state home time when concurrent
* connection exists. -1 for default.
*/
uint8 num_social_channels;
- /* Number of social channels up to WL_P2P_SOCIAL_CHANNELS_MAX.
+ /**< Number of social channels up to WL_P2P_SOCIAL_CHANNELS_MAX.
* 0 means use default social channels.
*/
uint8 flags;
- uint16 social_channels[1]; /* Variable length array of social channels */
-} BWL_POST_PACKED_STRUCT wl_p2po_find_config_t;
-#define WL_P2PO_FIND_CONFIG_VERSION 2 /* value for version field */
+ uint16 social_channels[1]; /**< Variable length array of social channels */
+} wl_p2po_find_config_t;
+#define WL_P2PO_FIND_CONFIG_VERSION 2 /**< value for version field */
-/* wl_p2po_find_config_t flags */
-#define P2PO_FIND_FLAG_SCAN_ALL_APS 0x01 /* Whether to scan for all APs in the p2po_find
+/** wl_p2po_find_config_t flags */
+#define P2PO_FIND_FLAG_SCAN_ALL_APS 0x01 /**< Whether to scan for all APs in the p2po_find
* periodic scans of all channels.
* 0 means scan for only P2P devices.
* 1 means scan for P2P devices plus non-P2P APs.
*/
-
-/* For adding a WFDS service to seek */
-typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 seek_hdl; /* unique id chosen by host */
- uint8 addr[6]; /* Seek service from a specific device with this
+/** For adding a WFDS service to seek */
+typedef struct {
+ uint32 seek_hdl; /**< unique id chosen by host */
+ uint8 addr[6]; /**< Seek service from a specific device with this
* MAC address, all 1's for any device.
*/
uint8 service_hash[P2P_WFDS_HASH_LEN];
uint8 service_name_len;
uint8 service_name[MAX_WFDS_SEEK_SVC_NAME_LEN];
- /* Service name to seek, not null terminated */
+ /**< Service name to seek, not null terminated */
uint8 service_info_req_len;
- uint8 service_info_req[1]; /* Service info request, not null terminated.
+ uint8 service_info_req[1]; /**< Service info request, not null terminated.
* Variable length specified by service_info_req_len.
* Maximum length is MAX_WFDS_SEEK_SVC_INFO_LEN.
*/
-} BWL_POST_PACKED_STRUCT wl_p2po_wfds_seek_add_t;
+} wl_p2po_wfds_seek_add_t;
-/* For deleting a WFDS service to seek */
+/** For deleting a WFDS service to seek */
+typedef struct {
+ uint32 seek_hdl; /**< delete service specified by id */
+} wl_p2po_wfds_seek_del_t;
+
+/** For adding a WFDS service to advertise */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 seek_hdl; /* delete service specified by id */
-} BWL_POST_PACKED_STRUCT wl_p2po_wfds_seek_del_t;
-
-
-/* For adding a WFDS service to advertise */
-typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 advertise_hdl; /* unique id chosen by host */
+ uint32 advertise_hdl; /**< unique id chosen by host */
uint8 service_hash[P2P_WFDS_HASH_LEN];
uint32 advertisement_id;
uint16 service_config_method;
uint8 service_name_len;
uint8 service_name[MAX_WFDS_SVC_NAME_LEN];
- /* Service name , not null terminated */
+ /**< Service name , not null terminated */
uint8 service_status;
uint16 service_info_len;
- uint8 service_info[1]; /* Service info, not null terminated.
+ uint8 service_info[1]; /**< Service info, not null terminated.
* Variable length specified by service_info_len.
* Maximum length is MAX_WFDS_ADV_SVC_INFO_LEN.
*/
} BWL_POST_PACKED_STRUCT wl_p2po_wfds_advertise_add_t;
+#include <packed_section_end.h>
-/* For deleting a WFDS service to advertise */
-typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 advertise_hdl; /* delete service specified by hdl */
-} BWL_POST_PACKED_STRUCT wl_p2po_wfds_advertise_del_t;
+/** For deleting a WFDS service to advertise */
+typedef struct {
+ uint32 advertise_hdl; /**< delete service specified by hdl */
+} wl_p2po_wfds_advertise_del_t;
-/* P2P Offload discovery mode for the p2po_state iovar */
+/** P2P Offload discovery mode for the p2po_state iovar */
typedef enum {
WL_P2PO_DISC_STOP,
WL_P2PO_DISC_LISTEN,
@@ -3821,42 +6089,62 @@
#define ANQPO_MAX_QUERY_SIZE 256
typedef struct {
- uint16 max_retransmit; /* ~0 use default, max retransmit on no ACK from peer */
- uint16 response_timeout; /* ~0 use default, msec to wait for resp after tx packet */
- uint16 max_comeback_delay; /* ~0 use default, max comeback delay in resp else fail */
- uint16 max_retries; /* ~0 use default, max retries on failure */
- uint16 query_len; /* length of ANQP query */
- uint8 query_data[1]; /* ANQP encoded query (max ANQPO_MAX_QUERY_SIZE) */
+ uint16 max_retransmit; /**< ~0 use default, max retransmit on no ACK from peer */
+ uint16 response_timeout; /**< ~0 use default, msec to wait for resp after tx packet */
+ uint16 max_comeback_delay; /**< ~0 use default, max comeback delay in resp else fail */
+ uint16 max_retries; /**< ~0 use default, max retries on failure */
+ uint16 query_len; /**< length of ANQP query */
+ uint8 query_data[1]; /**< ANQP encoded query (max ANQPO_MAX_QUERY_SIZE) */
} wl_anqpo_set_t;
+#define WL_ANQPO_FLAGS_BSSID_WILDCARD 0x0001
+#define WL_ANQPO_PEER_LIST_VERSION_2 2
typedef struct {
- uint16 channel; /* channel of the peer */
- struct ether_addr addr; /* addr of the peer */
-} wl_anqpo_peer_t;
+ uint16 channel; /**< channel of the peer */
+ struct ether_addr addr; /**< addr of the peer */
+} wl_anqpo_peer_v1_t;
+typedef struct {
+ uint16 channel; /**< channel of the peer */
+ struct ether_addr addr; /**< addr of the peer */
+ uint32 flags; /**< 0x01-Peer is MBO Capable */
+} wl_anqpo_peer_v2_t;
#define ANQPO_MAX_PEER_LIST 64
typedef struct {
- uint16 count; /* number of peers in list */
- wl_anqpo_peer_t peer[1]; /* max ANQPO_MAX_PEER_LIST */
-} wl_anqpo_peer_list_t;
+ uint16 count; /**< number of peers in list */
+ wl_anqpo_peer_v1_t peer[1]; /**< max ANQPO_MAX_PEER_LIST */
+} wl_anqpo_peer_list_v1_t;
+
+typedef struct {
+ uint16 version; /**<VERSION */
+ uint16 length; /**< length of entire structure */
+ uint16 count; /**< number of peers in list */
+ wl_anqpo_peer_v2_t peer[1]; /**< max ANQPO_MAX_PEER_LIST */
+} wl_anqpo_peer_list_v2_t;
+
+#ifndef WL_ANQPO_PEER_LIST_TYPEDEF_HAS_ALIAS
+typedef wl_anqpo_peer_list_v1_t wl_anqpo_peer_list_t;
+typedef wl_anqpo_peer_v1_t wl_anqpo_peer_t;
+#endif /* WL_ANQPO_PEER_LIST_TYPEDEF_HAS_ALIAS */
#define ANQPO_MAX_IGNORE_SSID 64
typedef struct {
- bool is_clear; /* set to clear list (not used on GET) */
- uint16 count; /* number of SSID in list */
- wlc_ssid_t ssid[1]; /* max ANQPO_MAX_IGNORE_SSID */
+ uint8 is_clear; /**< set to clear list (not used on GET) */
+ uint8 PAD;
+ uint16 count; /**< number of SSID in list */
+ wlc_ssid_t ssid[1]; /**< max ANQPO_MAX_IGNORE_SSID */
} wl_anqpo_ignore_ssid_list_t;
#define ANQPO_MAX_IGNORE_BSSID 64
typedef struct {
- bool is_clear; /* set to clear list (not used on GET) */
- uint16 count; /* number of addr in list */
- struct ether_addr bssid[1]; /* max ANQPO_MAX_IGNORE_BSSID */
+ uint8 is_clear; /**< set to clear list (not used on GET) */
+ uint8 PAD;
+ uint16 count; /**< number of addr in list */
+ struct ether_addr bssid[]; /**< max ANQPO_MAX_IGNORE_BSSID */
} wl_anqpo_ignore_bssid_list_t;
-
struct toe_ol_stats_t {
- /* Num of tx packets that don't need to be checksummed */
+ /** Num of tx packets that don't need to be checksummed */
uint32 tx_summed;
/* Num of tx packets where checksum is filled by offload engine */
@@ -3886,46 +6174,92 @@
uint32 rx_icmp_errinj;
};
-/* Arp offload statistic counts */
+/** Arp offload statistic counts */
struct arp_ol_stats_t {
- uint32 host_ip_entries; /* Host IP table addresses (more than one if multihomed) */
- uint32 host_ip_overflow; /* Host IP table additions skipped due to overflow */
+ uint32 host_ip_entries; /**< Host IP table addresses (more than one if multihomed) */
+ uint32 host_ip_overflow; /**< Host IP table additions skipped due to overflow */
- uint32 arp_table_entries; /* ARP table entries */
- uint32 arp_table_overflow; /* ARP table additions skipped due to overflow */
+ uint32 arp_table_entries; /**< ARP table entries */
+ uint32 arp_table_overflow; /**< ARP table additions skipped due to overflow */
- uint32 host_request; /* ARP requests from host */
- uint32 host_reply; /* ARP replies from host */
- uint32 host_service; /* ARP requests from host serviced by ARP Agent */
+ uint32 host_request; /**< ARP requests from host */
+ uint32 host_reply; /**< ARP replies from host */
+ uint32 host_service; /**< ARP requests from host serviced by ARP Agent */
- uint32 peer_request; /* ARP requests received from network */
- uint32 peer_request_drop; /* ARP requests from network that were dropped */
- uint32 peer_reply; /* ARP replies received from network */
- uint32 peer_reply_drop; /* ARP replies from network that were dropped */
- uint32 peer_service; /* ARP request from host serviced by ARP Agent */
+ uint32 peer_request; /**< ARP requests received from network */
+ uint32 peer_request_drop; /**< ARP requests from network that were dropped */
+ uint32 peer_reply; /**< ARP replies received from network */
+ uint32 peer_reply_drop; /**< ARP replies from network that were dropped */
+ uint32 peer_service; /**< ARP request from host serviced by ARP Agent */
};
-/* NS offload statistic counts */
+/** NS offload statistic counts */
struct nd_ol_stats_t {
- uint32 host_ip_entries; /* Host IP table addresses (more than one if multihomed) */
- uint32 host_ip_overflow; /* Host IP table additions skipped due to overflow */
- uint32 peer_request; /* NS requests received from network */
- uint32 peer_request_drop; /* NS requests from network that were dropped */
- uint32 peer_reply_drop; /* NA replies from network that were dropped */
- uint32 peer_service; /* NS request from host serviced by firmware */
+ uint32 host_ip_entries; /**< Host IP table addresses (more than one if multihomed) */
+ uint32 host_ip_overflow; /**< Host IP table additions skipped due to overflow */
+ uint32 peer_request; /**< NS requests received from network */
+ uint32 peer_request_drop; /**< NS requests from network that were dropped */
+ uint32 peer_reply_drop; /**< NA replies from network that were dropped */
+ uint32 peer_service; /**< NS request from host serviced by firmware */
};
+
+/*
+ * Neighbor Discovery Offloading
+ */
+enum {
+ WL_ND_IPV6_ADDR_TYPE_UNICAST = 0,
+ WL_ND_IPV6_ADDR_TYPE_ANYCAST
+};
+
+typedef struct wl_nd_host_ip_addr {
+ struct ipv6_addr ip_addr; /* host ip address */
+ uint8 type; /* type of address */
+ uint8 pad[3];
+} wl_nd_host_ip_addr_t;
+
+typedef struct wl_nd_host_ip_list {
+ uint32 count;
+ wl_nd_host_ip_addr_t host_ip[1];
+} wl_nd_host_ip_list_t;
+
+#define WL_ND_HOSTIP_IOV_VER 1
+
+enum {
+ WL_ND_HOSTIP_OP_VER = 0, /* get version */
+ WL_ND_HOSTIP_OP_ADD, /* add address */
+ WL_ND_HOSTIP_OP_DEL, /* delete specified address */
+ WL_ND_HOSTIP_OP_DEL_UC, /* delete all unicast address */
+ WL_ND_HOSTIP_OP_DEL_AC, /* delete all anycast address */
+ WL_ND_HOSTIP_OP_DEL_ALL, /* delete all addresses */
+ WL_ND_HOSTIP_OP_LIST, /* get list of host ip address */
+ WL_ND_HOSTIP_OP_MAX
+};
+
+typedef struct wl_nd_hostip {
+ uint16 version; /* version of iovar buf */
+ uint16 op_type; /* operation type */
+ uint32 length; /* length of entire structure */
+ union {
+ wl_nd_host_ip_addr_t host_ip; /* set param for add */
+ uint16 version; /* get return for ver */
+ } u;
+} wl_nd_hostip_t;
+
+#define WL_ND_HOSTIP_FIXED_LEN OFFSETOF(wl_nd_hostip_t, u)
+#define WL_ND_HOSTIP_WITH_ADDR_LEN (WL_ND_HOSTIP_FIXED_LEN + sizeof(wl_nd_host_ip_addr_t))
/*
* Keep-alive packet offloading.
*/
-/* NAT keep-alive packets format: specifies the re-transmission period, the packet
+/**
+ * NAT keep-alive packets format: specifies the re-transmission period, the packet
* length, and packet contents.
*/
typedef struct wl_keep_alive_pkt {
- uint32 period_msec; /* Retransmission period (0 to disable packet re-transmits) */
+ uint32 period_msec; /** Retransmission period (0 to disable packet re-transmits) */
uint16 len_bytes; /* Size of packet to transmit (0 to disable packet re-transmits) */
- uint8 data[1]; /* Variable length packet to transmit. Contents should include
+ uint8 data[1]; /** Variable length packet to transmit. Contents should include
* entire ethernet packet (enet header, IP header, UDP header,
* and UDP payload) in network byte order.
*/
@@ -3933,12 +6267,134 @@
#define WL_KEEP_ALIVE_FIXED_LEN OFFSETOF(wl_keep_alive_pkt_t, data)
+#define MAX_RSSI_COUNT 8
+typedef struct rssi_struct {
+ int8 val[MAX_RSSI_COUNT]; /**< rssi values in AFs */
+ int16 sum; /**< total rssi sum */
+ uint8 cnt; /**< number rssi samples */
+ uint8 idx; /**< next rssi location */
+} rssi_struct_t;
+
+#ifdef WLDFSP
+#define DFSP_EVT_OFFSET OFFSETOF(dfsp_event_data_t, ie)
+#define DFSP_EVT_FLAGS_AP_ASSOC (1 << 0)
+#define DFSP_EVT_FLAGS_AP_BCNMON (1 << 1)
+#define DFSP_EVT_FLAGS_PROXY_BCSA (1 << 2)
+#define DFSP_EVT_FLAGS_PROXY_UCSA (1 << 3)
+#define DFSP_EVT_FLAGS_PROXY_PCSA (1 << 4)
+
+typedef struct dfsp_event_data {
+ uint16 flags; /* indicate what triggers the event */
+ uint16 ie_len;
+ uint8 ie[]; /* variable length */
+} dfsp_event_data_t;
+
+/* Proxy Channel Switch Announcement is a collection of IEs */
+typedef struct dfsp_pcsa {
+ dot11_ext_csa_ie_t ecsa;
+ dot11_mesh_csp_ie_t mcsp;
+ dot11_wide_bw_chan_switch_ie_t wbcs;
+} dfsp_pcsa_t;
+
+/* DFS Proxy */
+#define DFSP_CFG_VERSION 1
+#define DFSP_FLAGS_ENAB 0x1
+typedef struct dfsp_cfg {
+ uint16 version;
+ uint16 len;
+ uint16 flags; /**< bit 1 to enable/disable the feature */
+ uint16 max_bcn_miss_dur; /**< maximum beacon miss duration before ceasing data tx */
+ uint8 mcsp_ttl; /**< remaining number of hops allowed for pcsa message */
+ uint8 bcsa_cnt; /**< repeat numbers of broadcast CSA */
+ chanspec_t mon_chan; /**< passive monitoring channel spec */
+ struct ether_addr mon_bssid; /**< broadcast means monitoring all */
+ uint16 max_bcn_miss_dur_af; /**< maximum beacon miss duration before ceasing AF tx */
+} dfsp_cfg_t;
+
+#define DFSP_UCSA_VERSION 1
+typedef struct dfsp_ucsa {
+ uint16 version;
+ uint16 len;
+ struct ether_addr address;
+ uint8 enable;
+ uint8 retry_cnt; /**< just in case host needs to control the value */
+} dfsp_ucsa_t;
+
+typedef struct dfsp_ucsa_tbl {
+ uint8 tbl_num;
+ uint8 tbl[];
+} dfsp_ucsa_tbl_t;
+
+typedef struct dfsp_stats {
+ uint32 dfsp_csainfra;
+ uint32 dfsp_csabcnmon;
+ uint32 dfsp_bcsarx;
+ uint32 dfsp_ucsarx;
+ uint32 dfsp_pcsarx;
+ uint32 dfsp_bcsatx;
+ uint32 dfsp_ucsatx;
+ uint32 dfsp_pcsatx;
+ uint32 dfsp_ucsatxfail;
+ uint32 dfsp_evtnotif;
+ uint32 dfsp_evtsuspect;
+ uint32 dfsp_evtresume;
+} dfsp_stats_t;
+#endif /* WLDFSP */
+
+/*
+ * ptk_start: iovar to start 4-way handshake for secured ranging
+*/
+
+/* ptk negotiation security type - determines negotiation parameters */
+typedef enum {
+ WL_PTK_START_SEC_TYPE_PMK = 1
+} wl_ptk_start_sec_type_t;
+
+/* ptk negotiation role */
+typedef enum {
+ ROLE_NONE = 0x0,
+ ROLE_AUTH = 0x1,
+ ROLE_SUP = 0x2,
+ ROLE_STATIC = 0x3,
+ ROLE_INVALID = 0xff,
+ WL_PTK_START_ROLE_NONE = ROLE_NONE,
+ WL_PTK_START_ROLE_AUTH = ROLE_AUTH,
+ WL_PTK_START_ROLE_SUP = ROLE_SUP,
+ WL_PTK_START_ROLE_STATIC = ROLE_STATIC,
+ WL_PTK_START_ROLE_INVALID = ROLE_INVALID
+} wl_ptk_start_role_t;
+
+typedef struct wl_ptk_start_tlv {
+ uint16 id;
+ uint16 len;
+ uint8 data[1];
+} wl_ptk_start_tlv_t;
+
+typedef enum {
+ WL_PTK_START_TLV_PMK = 1 /* uint8[] */
+} wl_ptk_start_tlv_type;
+
+typedef enum {
+ WL_PTK_START_FLAG_NO_DATA_PROT = 1, /* data frame protection disabled */
+ WL_PTK_START_FLAG_GEN_FTM_TPK = 2 /* Generate FTM Toast/Seq Protection Key */
+} wl_ptk_start_flags_t;
+
+typedef struct wl_ptk_start_iov {
+ uint16 version;
+ uint16 len; /* length of entire iov from version */
+ wl_ptk_start_flags_t flags;
+ wl_ptk_start_sec_type_t sec_type;
+ wl_ptk_start_role_t role;
+ struct ether_addr peer_addr;
+ uint16 pad; /* reserved/32 bit alignment */
+ wl_ptk_start_tlv_t tlvs[1];
+} wl_ptk_start_iov_t;
/*
* Dongle pattern matching filter.
*/
-#define MAX_WAKE_PACKET_CACHE_BYTES 128 /* Maximum cached wake packet */
+#define MAX_WAKE_PACKET_CACHE_BYTES 128 /**< Maximum cached wake packet */
#define MAX_WAKE_PACKET_BYTES (DOT11_A3_HDR_LEN + \
DOT11_QOS_LEN + \
@@ -3946,79 +6402,109 @@
ETHER_MAX_DATA)
typedef struct pm_wake_packet {
- uint32 status; /* Is the wake reason a packet (if all the other field's valid) */
- uint32 pattern_id; /* Pattern ID that matched */
+ uint32 status; /**< Is the wake reason a packet (if all the other field's valid) */
+ uint32 pattern_id; /**< Pattern ID that matched */
uint32 original_packet_size;
uint32 saved_packet_size;
- uchar packet[MAX_WAKE_PACKET_CACHE_BYTES];
+ uint8 packet[MAX_WAKE_PACKET_CACHE_BYTES];
} pm_wake_packet_t;
/* Packet filter types. Currently, only pattern matching is supported. */
typedef enum wl_pkt_filter_type {
- WL_PKT_FILTER_TYPE_PATTERN_MATCH=0, /* Pattern matching filter */
- WL_PKT_FILTER_TYPE_MAGIC_PATTERN_MATCH=1, /* Magic packet match */
- WL_PKT_FILTER_TYPE_PATTERN_LIST_MATCH=2, /* A pattern list (match all to match filter) */
- WL_PKT_FILTER_TYPE_ENCRYPTED_PATTERN_MATCH=3, /* SECURE WOWL magic / net pattern match */
+ WL_PKT_FILTER_TYPE_PATTERN_MATCH=0, /**< Pattern matching filter */
+ WL_PKT_FILTER_TYPE_MAGIC_PATTERN_MATCH=1, /**< Magic packet match */
+ WL_PKT_FILTER_TYPE_PATTERN_LIST_MATCH=2, /**< A pattern list (match all to match filter) */
+ WL_PKT_FILTER_TYPE_ENCRYPTED_PATTERN_MATCH=3, /**< SECURE WOWL magic / net pattern match */
+ WL_PKT_FILTER_TYPE_APF_MATCH=4, /* Android packet filter match */
+ WL_PKT_FILTER_TYPE_PATTERN_MATCH_TIMEOUT=5, /* Pattern matching filter with timeout event */
+ WL_PKT_FILTER_TYPE_IMMEDIATE_PATTERN_MATCH=6, /* Immediately pattern matching filter */
+ WL_PKT_FILTYER_TYPE_MAX = 7, /* Pkt filter type MAX */
} wl_pkt_filter_type_t;
#define WL_PKT_FILTER_TYPE wl_pkt_filter_type_t
/* String mapping for types that may be used by applications or debug */
#define WL_PKT_FILTER_TYPE_NAMES \
- { "PATTERN", WL_PKT_FILTER_TYPE_PATTERN_MATCH }, \
- { "MAGIC", WL_PKT_FILTER_TYPE_MAGIC_PATTERN_MATCH }, \
- { "PATLIST", WL_PKT_FILTER_TYPE_PATTERN_LIST_MATCH }
+ { "PATTERN", WL_PKT_FILTER_TYPE_PATTERN_MATCH }, \
+ { "MAGIC", WL_PKT_FILTER_TYPE_MAGIC_PATTERN_MATCH }, \
+ { "PATLIST", WL_PKT_FILTER_TYPE_PATTERN_LIST_MATCH }, \
+ { "SECURE WOWL", WL_PKT_FILTER_TYPE_ENCRYPTED_PATTERN_MATCH }, \
+ { "APF", WL_PKT_FILTER_TYPE_APF_MATCH }, \
+ { "PATTERN TIMEOUT", WL_PKT_FILTER_TYPE_PATTERN_MATCH_TIMEOUT }, \
+ { "IMMEDIATE", WL_PKT_FILTER_TYPE_IMMEDIATE_PATTERN_MATCH }
-/* Secured WOWL packet was encrypted, need decrypted before check filter match */
+/** Secured WOWL packet was encrypted, need decrypted before check filter match */
typedef struct wl_pkt_decrypter {
uint8* (*dec_cb)(void* dec_ctx, const void *sdu, int sending);
void* dec_ctx;
} wl_pkt_decrypter_t;
-/* Pattern matching filter. Specifies an offset within received packets to
+/**
+ * Pattern matching filter. Specifies an offset within received packets to
* start matching, the pattern to match, the size of the pattern, and a bitmask
* that indicates which bits within the pattern should be matched.
*/
typedef struct wl_pkt_filter_pattern {
- uint32 offset; /* Offset within received packet to start pattern matching.
+ uint32 offset; /**< Offset within received packet to start pattern matching.
* Offset '0' is the first byte of the ethernet header.
*/
- uint32 size_bytes; /* Size of the pattern. Bitmask must be the same size. */
- uint8 mask_and_pattern[1]; /* Variable length mask and pattern data. mask starts
+ uint32 size_bytes; /**< Size of the pattern. Bitmask must be the same size. */
+ uint8 mask_and_pattern[]; /**< Variable length mask and pattern data. mask starts
* at offset 0. Pattern immediately follows mask. for
* secured pattern, put the descrypter pointer to the
* beginning, mask and pattern postponed correspondingly
*/
} wl_pkt_filter_pattern_t;
-/* A pattern list is a numerically specified list of modified pattern structures. */
+/** A pattern list is a numerically specified list of modified pattern structures. */
typedef struct wl_pkt_filter_pattern_listel {
- uint16 rel_offs; /* Offset to begin match (relative to 'base' below) */
- uint16 base_offs; /* Base for offset (defined below) */
- uint16 size_bytes; /* Size of mask/pattern */
- uint16 match_flags; /* Addition flags controlling the match */
- uint8 mask_and_data[1]; /* Variable length mask followed by data, each size_bytes */
+ uint16 rel_offs; /**< Offset to begin match (relative to 'base' below) */
+ uint16 base_offs; /**< Base for offset (defined below) */
+ uint16 size_bytes; /**< Size of mask/pattern */
+ uint16 match_flags; /**< Addition flags controlling the match */
+ uint8 mask_and_data[]; /**< Variable length mask followed by data, each size_bytes */
} wl_pkt_filter_pattern_listel_t;
typedef struct wl_pkt_filter_pattern_list {
- uint8 list_cnt; /* Number of elements in the list */
- uint8 PAD1[1]; /* Reserved (possible version: reserved) */
- uint16 totsize; /* Total size of this pattern list (includes this struct) */
- wl_pkt_filter_pattern_listel_t patterns[1]; /* Variable number of list elements */
+ uint8 list_cnt; /**< Number of elements in the list */
+ uint8 PAD1[1]; /**< Reserved (possible version: reserved) */
+ uint16 totsize; /**< Total size of this pattern list (includes this struct) */
+ uint8 patterns[]; /**< Variable number of wl_pkt_filter_pattern_listel_t elements */
} wl_pkt_filter_pattern_list_t;
-/* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */
+typedef struct wl_apf_program {
+ uint16 version;
+ uint16 instr_len; /* number of instruction blocks */
+ uint32 inst_ts; /* program installation timestamp */
+ uint8 instrs[]; /* variable length instructions */
+} wl_apf_program_t;
+
+typedef struct wl_pkt_filter_pattern_timeout {
+ uint32 offset; /* Offset within received packet to start pattern matching.
+ * Offset '0' is the first byte of the ethernet header.
+ */
+ uint32 size_bytes; /* Size of the pattern. Bitmask must be the same size. */
+ uint32 timeout; /* Timeout(seconds) */
+ uint8 mask_and_pattern[]; /* Variable length mask and pattern data.
+ * mask starts at offset 0. Pattern
+ * immediately follows mask.
+ */
+} wl_pkt_filter_pattern_timeout_t;
+
+/** IOVAR "pkt_filter_add" parameter. Used to install packet filters. */
typedef struct wl_pkt_filter {
- uint32 id; /* Unique filter id, specified by app. */
- uint32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */
- uint32 negate_match; /* Negate the result of filter matches */
+ uint32 id; /**< Unique filter id, specified by app. */
+ uint32 type; /**< Filter type (WL_PKT_FILTER_TYPE_xxx). */
+ uint32 negate_match; /**< Negate the result of filter matches */
union { /* Filter definitions */
- wl_pkt_filter_pattern_t pattern; /* Pattern matching filter */
- wl_pkt_filter_pattern_list_t patlist; /* List of patterns to match */
+ wl_pkt_filter_pattern_t pattern; /**< Pattern matching filter */
+ wl_pkt_filter_pattern_list_t patlist; /**< List of patterns to match */
+ wl_apf_program_t apf_program; /* apf program */
+ wl_pkt_filter_pattern_timeout_t pattern_timeout; /* Pattern timeout event filter */
} u;
} wl_pkt_filter_t;
-/* IOVAR "tcp_keep_set" parameter. Used to install tcp keep_alive stuff. */
+/** IOVAR "tcp_keep_set" parameter. Used to install tcp keep_alive stuff. */
typedef struct wl_tcp_keep_set {
uint32 val1;
uint32 val2;
@@ -4029,58 +6515,73 @@
#define WL_PKT_FILTER_PATTERN_LIST_FIXED_LEN OFFSETOF(wl_pkt_filter_pattern_list_t, patterns)
#define WL_PKT_FILTER_PATTERN_LISTEL_FIXED_LEN \
OFFSETOF(wl_pkt_filter_pattern_listel_t, mask_and_data)
+#define WL_PKT_FILTER_PATTERN_TIMEOUT_FIXED_LEN \
+ OFFSETOF(wl_pkt_filter_pattern_timeout_t, mask_and_pattern)
-/* IOVAR "pkt_filter_enable" parameter. */
+#define WL_APF_INTERNAL_VERSION 1
+#define WL_APF_PROGRAM_MAX_SIZE (2 * 1024)
+#define WL_APF_PROGRAM_FIXED_LEN OFFSETOF(wl_apf_program_t, instrs)
+#define WL_APF_PROGRAM_LEN(apf_program) \
+ ((apf_program)->instr_len * sizeof((apf_program)->instrs[0]))
+#define WL_APF_PROGRAM_TOTAL_LEN(apf_program) \
+ (WL_APF_PROGRAM_FIXED_LEN + WL_APF_PROGRAM_LEN(apf_program))
+
+/** IOVAR "pkt_filter_enable" parameter. */
typedef struct wl_pkt_filter_enable {
- uint32 id; /* Unique filter id */
- uint32 enable; /* Enable/disable bool */
+ uint32 id; /**< Unique filter id */
+ uint32 enable; /**< Enable/disable bool */
} wl_pkt_filter_enable_t;
-/* IOVAR "pkt_filter_list" parameter. Used to retrieve a list of installed filters. */
+/** IOVAR "pkt_filter_list" parameter. Used to retrieve a list of installed filters. */
typedef struct wl_pkt_filter_list {
- uint32 num; /* Number of installed packet filters */
- wl_pkt_filter_t filter[1]; /* Variable array of packet filters. */
+ uint32 num; /**< Number of installed packet filters */
+ uint8 filter[]; /**< Variable array of packet filters. */
} wl_pkt_filter_list_t;
#define WL_PKT_FILTER_LIST_FIXED_LEN OFFSETOF(wl_pkt_filter_list_t, filter)
-/* IOVAR "pkt_filter_stats" parameter. Used to retrieve debug statistics. */
+/** IOVAR "pkt_filter_stats" parameter. Used to retrieve debug statistics. */
typedef struct wl_pkt_filter_stats {
- uint32 num_pkts_matched; /* # filter matches for specified filter id */
- uint32 num_pkts_forwarded; /* # packets fwded from dongle to host for all filters */
- uint32 num_pkts_discarded; /* # packets discarded by dongle for all filters */
+ uint32 num_pkts_matched; /**< # filter matches for specified filter id */
+ uint32 num_pkts_forwarded; /**< # packets fwded from dongle to host for all filters */
+ uint32 num_pkts_discarded; /**< # packets discarded by dongle for all filters */
} wl_pkt_filter_stats_t;
-/* IOVAR "pkt_filter_ports" parameter. Configure TCP/UDP port filters. */
+/** IOVAR "pkt_filter_ports" parameter. Configure TCP/UDP port filters. */
typedef struct wl_pkt_filter_ports {
- uint8 version; /* Be proper */
- uint8 reserved; /* Be really proper */
- uint16 count; /* Number of ports following */
+ uint8 version; /**< Be proper */
+ uint8 reserved; /**< Be really proper */
+ uint16 count; /**< Number of ports following */
/* End of fixed data */
- uint16 ports[1]; /* Placeholder for ports[<count>] */
+ uint16 ports[1]; /**< Placeholder for ports[<count>] */
} wl_pkt_filter_ports_t;
#define WL_PKT_FILTER_PORTS_FIXED_LEN OFFSETOF(wl_pkt_filter_ports_t, ports)
#define WL_PKT_FILTER_PORTS_VERSION 0
-#define WL_PKT_FILTER_PORTS_MAX 128
+#if defined(WL_PKT_FLTR_EXT) && !defined(WL_PKT_FLTR_EXT_DISABLED)
+#define WL_PKT_FILTER_PORTS_MAX 256
+#else
+#define WL_PKT_FILTER_PORTS_MAX 128
+#endif /* WL_PKT_FLTR_EXT && !WL_PKT_FLTR_EXT_DISABLED */
#define RSN_REPLAY_LEN 8
typedef struct _gtkrefresh {
- uchar KCK[RSN_KCK_LENGTH];
- uchar KEK[RSN_KEK_LENGTH];
- uchar ReplayCounter[RSN_REPLAY_LEN];
+ uint8 KCK[RSN_KCK_LENGTH];
+ uint8 KEK[RSN_KEK_LENGTH];
+ uint8 ReplayCounter[RSN_REPLAY_LEN];
} gtk_keyinfo_t, *pgtk_keyinfo_t;
-/* Sequential Commands ioctl */
+/** Sequential Commands ioctl */
typedef struct wl_seq_cmd_ioctl {
- uint32 cmd; /* common ioctl definition */
- uint32 len; /* length of user buffer */
+ uint32 cmd; /**< common ioctl definition */
+ uint32 len; /**< length of user buffer */
} wl_seq_cmd_ioctl_t;
#define WL_SEQ_CMD_ALIGN_BYTES 4
-/* These are the set of get IOCTLs that should be allowed when using
+/**
+ * These are the set of get IOCTLs that should be allowed when using
* IOCTL sequence commands. These are issued implicitly by wl.exe each time
* it is invoked. We never want to buffer these, or else wl.exe will stop working.
*/
@@ -4090,31 +6591,201 @@
((cmd) == WLC_GET_AP) || \
((cmd) == WLC_GET_INSTANCE))
+#define MAX_PKTENG_SWEEP_STEPS 40
typedef struct wl_pkteng {
uint32 flags;
- uint32 delay; /* Inter-packet delay */
- uint32 nframes; /* Number of frames */
- uint32 length; /* Packet length */
- uint8 seqno; /* Enable/disable sequence no. */
- struct ether_addr dest; /* Destination address */
- struct ether_addr src; /* Source address */
+ uint32 delay; /**< Inter-packet delay */
+ uint32 nframes; /**< Number of frames */
+ uint32 length; /**< Packet length */
+ uint8 seqno; /**< Enable/disable sequence no. */
+ struct ether_addr dest; /**< Destination address */
+ struct ether_addr src; /**< Source address */
+ uint8 sweep_steps; /**< Number of sweep power */
+ uint8 PAD[2];
} wl_pkteng_t;
-typedef struct wl_pkteng_stats {
- uint32 lostfrmcnt; /* RX PER test: no of frames lost (skip seqno) */
- int32 rssi; /* RSSI */
- int32 snr; /* signal to noise ratio */
+/* IOVAR pkteng_sweep_counters response structure */
+#define WL_PKTENG_SWEEP_COUNTERS_VERSION 1
+typedef struct wl_pkteng_sweep_ctrs {
+ uint16 version; /**< Version - 1 */
+ uint16 size; /**< Complete Size including sweep_counters */
+ uint16 sweep_steps; /**< Number of steps */
+ uint16 PAD;
+ uint16 sweep_counter[]; /**< Array of frame counters */
+} wl_pkteng_sweep_ctrs_t;
+
+/* IOVAR pkteng_rx_pkt response structure */
+#define WL_PKTENG_RX_PKT_VERSION 1
+typedef struct wl_pkteng_rx_pkt {
+ uint16 version; /**< Version - 1 */
+ uint16 size; /**< Complete Size including the packet */
+ uint8 payload[]; /**< Packet payload */
+} wl_pkteng_rx_pkt_t;
+
+#define WL_PKTENG_RU_FILL_VER_1 1u
+// struct for ru packet engine
+typedef struct wl_pkteng_ru_v1 {
+ uint16 version; /* ver is 1 */
+ uint16 length; /* size of complete structure */
+ uint8 bw; /* bandwidth info */
+ uint8 ru_alloc_val; /* ru allocation index number */
+ uint8 mcs_val; /* mcs allocated value */
+ uint8 nss_val; /* num of spatial streams */
+ uint32 num_bytes; /* approx num of bytes to calculate other required params */
+ uint8 cp_ltf_val; /* GI and LTF symbol size */
+ uint8 he_ltf_symb; /* num of HE-LTF symbols */
+ uint8 stbc; /* STBC support */
+ uint8 coding_val; /* BCC/LDPC coding support */
+ uint8 pe_category; /* PE duration 0/8/16usecs */
+ uint8 dcm; /* dual carrier modulation */
+ uint8 mumimo_ltfmode; /* ltf mode */
+ uint8 trig_tx; /* form and transmit the trigger frame */
+ uint8 trig_type; /* type of trigger frame */
+ uint8 trig_period; /* trigger tx periodicity TBD */
+ uint8 nuserinfo; /* number of Userinfo fields */
+ struct ether_addr dest; /* destination address for un-associated mode */
+ uint8 ppdu_format; /* trigger frame format */
+} wl_pkteng_ru_v1_t;
+
+#ifndef WL_PKTENG_RU_VER
+/* This is for the App; source picks it up from wlc_types.h */
+typedef wl_pkteng_ru_v1_t wl_pkteng_ru_fill_t;
+#endif // endif
+
+typedef struct wl_trig_frame_info {
+ /* Structure versioning and structure length params */
+ uint16 version;
+ uint16 length;
+ /* Below params are the fields related to trigger frame contents */
+ /* Common Info Params Figure 9-52d - 11ax Draft 1.1 */
+ uint16 lsig_len;
+ uint16 trigger_type;
+ uint16 cascade_indication;
+ uint16 cs_req;
+ uint16 bw;
+ uint16 cp_ltf_type;
+ uint16 mu_mimo_ltf_mode;
+ uint16 num_he_ltf_syms;
+ uint16 stbc;
+ uint16 ldpc_extra_symb;
+ uint16 ap_tx_pwr;
+ uint16 afactor;
+ uint16 pe_disambiguity;
+ uint16 spatial_resuse;
+ uint16 doppler;
+ uint16 he_siga_rsvd;
+ uint16 cmn_info_rsvd;
+ /* User Info Params Figure 9-52e - 11ax Draft 1.1 */
+ uint16 aid12;
+ uint16 ru_alloc;
+ uint16 coding_type;
+ uint16 mcs;
+ uint16 dcm;
+ uint16 ss_alloc;
+ uint16 tgt_rssi;
+ uint16 usr_info_rsvd;
+} wl_trig_frame_info_t;
+
+/* wl pkteng_stats related definitions */
+#define WL_PKTENG_STATS_V1 (1)
+#define WL_PKTENG_STATS_V2 (2)
+
+typedef struct wl_pkteng_stats_v1 {
+ uint32 lostfrmcnt; /**< RX PER test: no of frames lost (skip seqno) */
+ int32 rssi; /**< RSSI */
+ int32 snr; /**< signal to noise ratio */
uint16 rxpktcnt[NUM_80211_RATES+1];
- uint8 rssi_qdb; /* qdB portion of the computed rssi */
-} wl_pkteng_stats_t;
+ uint8 rssi_qdb; /**< qdB portion of the computed rssi */
+ uint8 version;
+} wl_pkteng_stats_v1_t;
+
+typedef struct wl_pkteng_stats_v2 {
+ uint32 lostfrmcnt; /**< RX PER test: no of frames lost (skip seqno) */
+ int32 rssi; /**< RSSI */
+ int32 snr; /**< signal to noise ratio */
+ uint16 rxpktcnt[NUM_80211_RATES+1];
+ uint8 rssi_qdb; /**< qdB portion of the computed rssi */
+ uint8 version;
+ uint16 length;
+ uint16 pad;
+ int32 rssi_per_core[WL_RSSI_ANT_MAX];
+ int32 rssi_per_core_qdb[WL_RSSI_ANT_MAX];
+} wl_pkteng_stats_v2_t;
+
+#ifndef WL_PKTENG_STATS_TYPEDEF_HAS_ALIAS
+typedef wl_pkteng_stats_v1_t wl_pkteng_stats_t;
+#endif /* WL_PKTENG_STATS_TYPEDEF_HAS_ALIAS */
typedef struct wl_txcal_params {
wl_pkteng_t pkteng;
uint8 gidx_start;
int8 gidx_step;
uint8 gidx_stop;
+ uint8 PAD;
} wl_txcal_params_t;
+typedef struct wl_txcal_gainidx {
+ uint8 num_actv_cores;
+ uint8 gidx_start_percore[WL_STA_ANT_MAX];
+ uint8 gidx_stop_percore[WL_STA_ANT_MAX];
+ uint8 PAD[3];
+} wl_txcal_gainidx_t;
+
+typedef struct wl_txcal_params_v2 {
+ wl_pkteng_t pkteng;
+ int8 gidx_step;
+ uint8 pwr_start[WL_STA_ANT_MAX];
+ uint8 pwr_stop[WL_STA_ANT_MAX];
+ uint8 init_start_idx;
+ uint8 gidx_start_percore[WL_STA_ANT_MAX];
+ uint8 gidx_stop_percore[WL_STA_ANT_MAX];
+ uint16 version;
+} wl_txcal_params_v2_t;
+
+typedef wl_txcal_params_t wl_txcal_params_v1_t;
+
+typedef struct wl_rssilog_params {
+ uint8 enable;
+ uint8 rssi_threshold;
+ uint8 time_threshold;
+ uint8 pad;
+} wl_rssilog_params_t;
+
+typedef struct wl_sslpnphy_papd_debug_data {
+ uint8 psat_pwr;
+ uint8 psat_indx;
+ uint8 final_idx;
+ uint8 start_idx;
+ int32 min_phase;
+ int32 voltage;
+ int8 temperature;
+ uint8 PAD[3];
+} wl_sslpnphy_papd_debug_data_t;
+typedef struct wl_sslpnphy_debug_data {
+ int16 papdcompRe [64];
+ int16 papdcompIm [64];
+} wl_sslpnphy_debug_data_t;
+typedef struct wl_sslpnphy_spbdump_data {
+ uint16 tbl_length;
+ int16 spbreal[256];
+ int16 spbimg[256];
+} wl_sslpnphy_spbdump_data_t;
+typedef struct wl_sslpnphy_percal_debug_data {
+ uint32 cur_idx;
+ uint32 tx_drift;
+ uint8 prev_cal_idx;
+ uint8 PAD[3];
+ uint32 percal_ctr;
+ int32 nxt_cal_idx;
+ uint32 force_1idxcal;
+ uint32 onedxacl_req;
+ int32 last_cal_volt;
+ int8 last_cal_temp;
+ uint8 PAD[3];
+ uint32 vbat_ripple;
+ uint32 exit_route;
+ int32 volt_winner;
+} wl_sslpnphy_percal_debug_data_t;
typedef enum {
wowl_pattern_type_bitmap = 0,
@@ -4123,40 +6794,35 @@
} wowl_pattern_type_t;
typedef struct wl_wowl_pattern {
- uint32 masksize; /* Size of the mask in #of bytes */
- uint32 offset; /* Pattern byte offset in packet */
- uint32 patternoffset; /* Offset of start of pattern in the structure */
- uint32 patternsize; /* Size of the pattern itself in #of bytes */
- uint32 id; /* id */
- uint32 reasonsize; /* Size of the wakeup reason code */
- wowl_pattern_type_t type; /* Type of pattern */
+ uint32 masksize; /**< Size of the mask in #of bytes */
+ uint32 offset; /**< Pattern byte offset in packet */
+ uint32 patternoffset; /**< Offset of start of pattern in the structure */
+ uint32 patternsize; /**< Size of the pattern itself in #of bytes */
+ uint32 id; /**< id */
+ uint32 reasonsize; /**< Size of the wakeup reason code */
+ wowl_pattern_type_t type; /**< Type of pattern */
/* Mask follows the structure above */
/* Pattern follows the mask is at 'patternoffset' from the start */
} wl_wowl_pattern_t;
typedef struct wl_wowl_pattern_list {
- uint count;
+ uint32 count;
wl_wowl_pattern_t pattern[1];
} wl_wowl_pattern_list_t;
typedef struct wl_wowl_wakeind {
- uint8 pci_wakeind; /* Whether PCI PMECSR PMEStatus bit was set */
- uint32 ucode_wakeind; /* What wakeup-event indication was set by ucode */
+ uint8 pci_wakeind; /**< Whether PCI PMECSR PMEStatus bit was set */
+ uint32 ucode_wakeind; /**< What wakeup-event indication was set by ucode */
} wl_wowl_wakeind_t;
-typedef struct {
- uint32 pktlen; /* size of packet */
- void *sdu;
-} tcp_keepalive_wake_pkt_infop_t;
-
-/* per AC rate control related data structure */
+/** per AC rate control related data structure */
typedef struct wl_txrate_class {
uint8 init_rate;
uint8 min_rate;
uint8 max_rate;
} wl_txrate_class_t;
-/* structure for Overlap BSS scan arguments */
+/** structure for Overlap BSS scan arguments */
typedef struct wl_obss_scan_arg {
int16 passive_dwell;
int16 active_dwell;
@@ -4169,16 +6835,17 @@
#define WL_OBSS_SCAN_PARAM_LEN sizeof(wl_obss_scan_arg_t)
-/* RSSI event notification configuration. */
+/** RSSI event notification configuration. */
typedef struct wl_rssi_event {
- uint32 rate_limit_msec; /* # of events posted to application will be limited to
+ uint32 rate_limit_msec; /**< # of events posted to application will be limited to
* one per specified period (0 to disable rate limit).
*/
- uint8 num_rssi_levels; /* Number of entries in rssi_levels[] below */
- int8 rssi_levels[MAX_RSSI_LEVELS]; /* Variable number of RSSI levels. An event
+ uint8 num_rssi_levels; /**< Number of entries in rssi_levels[] below */
+ int8 rssi_levels[MAX_RSSI_LEVELS]; /**< Variable number of RSSI levels. An event
* will be posted each time the RSSI of received
* beacons/packets crosses a level.
*/
+ int8 pad[3];
} wl_rssi_event_t;
#define RSSI_MONITOR_VERSION 1
@@ -4196,61 +6863,68 @@
uint16 pad;
} wl_rssi_monitor_evt_t;
-/* CCA based channel quality event configuration */
+/* CCA based channel quality event configuration (ID values for both config and report) */
#define WL_CHAN_QUAL_CCA 0
#define WL_CHAN_QUAL_NF 1
#define WL_CHAN_QUAL_NF_LTE 2
-#define WL_CHAN_QUAL_TOTAL 3
+#define WL_CHAN_QUAL_TOTAL 3 /* The total IDs supported in both config and report */
+/* Additional channel quality event support in report only (>= 0x100)
+ * Notice that uint8 is used in configuration struct wl_chan_qual_metric_t, but uint16 is
+ * used for report in struct cca_chan_qual_event_t. So the ID values beyond 8-bit are used
+ * for reporting purpose only.
+ */
+#define WL_CHAN_QUAL_FULL_CCA (0x100 | WL_CHAN_QUAL_CCA)
+#define WL_CHAN_QUAL_FULLPM_CCA (0x200u | WL_CHAN_QUAL_CCA) /* CCA: me vs. notme, PM vs. !PM */
#define MAX_CHAN_QUAL_LEVELS 8
typedef struct wl_chan_qual_metric {
- uint8 id; /* metric ID */
- uint8 num_levels; /* Number of entries in rssi_levels[] below */
+ uint8 id; /**< metric ID */
+ uint8 num_levels; /**< Number of entries in rssi_levels[] below */
uint16 flags;
- int16 htol[MAX_CHAN_QUAL_LEVELS]; /* threshold level array: hi-to-lo */
- int16 ltoh[MAX_CHAN_QUAL_LEVELS]; /* threshold level array: lo-to-hi */
+ int16 htol[MAX_CHAN_QUAL_LEVELS]; /**< threshold level array: hi-to-lo */
+ int16 ltoh[MAX_CHAN_QUAL_LEVELS]; /**< threshold level array: lo-to-hi */
} wl_chan_qual_metric_t;
typedef struct wl_chan_qual_event {
- uint32 rate_limit_msec; /* # of events posted to application will be limited to
+ uint32 rate_limit_msec; /**< # of events posted to application will be limited to
* one per specified period (0 to disable rate limit).
*/
uint16 flags;
uint16 num_metrics;
- wl_chan_qual_metric_t metric[WL_CHAN_QUAL_TOTAL]; /* metric array */
+ wl_chan_qual_metric_t metric[WL_CHAN_QUAL_TOTAL]; /**< metric array */
} wl_chan_qual_event_t;
-
typedef struct wl_action_obss_coex_req {
uint8 info;
uint8 num;
uint8 ch_list[1];
} wl_action_obss_coex_req_t;
-
-/* IOVar parameter block for small MAC address array with type indicator */
+/** IOVar parameter block for small MAC address array with type indicator */
#define WL_IOV_MAC_PARAM_LEN 4
#define WL_IOV_PKTQ_LOG_PRECS 16
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint32 num_addrs;
- char addr_type[WL_IOV_MAC_PARAM_LEN];
+ uint8 addr_type[WL_IOV_MAC_PARAM_LEN];
struct ether_addr ea[WL_IOV_MAC_PARAM_LEN];
} BWL_POST_PACKED_STRUCT wl_iov_mac_params_t;
+#include <packed_section_end.h>
-/* This is extra info that follows wl_iov_mac_params_t */
-typedef BWL_PRE_PACKED_STRUCT struct {
+/** This is extra info that follows wl_iov_mac_params_t */
+typedef struct {
uint32 addr_info[WL_IOV_MAC_PARAM_LEN];
-} BWL_POST_PACKED_STRUCT wl_iov_mac_extra_params_t;
+} wl_iov_mac_extra_params_t;
-/* Combined structure */
+/** Combined structure */
typedef struct {
wl_iov_mac_params_t params;
wl_iov_mac_extra_params_t extra_params;
} wl_iov_mac_full_params_t;
-/* Parameter block for PKTQ_LOG statistics */
+/** Parameter block for PKTQ_LOG statistics */
#define PKTQ_LOG_COUNTERS_V4 \
/* packets requested to be stored */ \
uint32 requested; \
@@ -4299,10 +6973,10 @@
PKTQ_LOG_COUNTERS_V4
} pktq_log_counters_v04_t;
-/* v5 is the same as V4 with extra parameter */
+/** v5 is the same as V4 with extra parameter */
typedef struct {
PKTQ_LOG_COUNTERS_V4
- /* cumulative time to transmit */
+ /** cumulative time to transmit */
uint32 airtime;
} pktq_log_counters_v05_t;
@@ -4311,7 +6985,7 @@
pktq_log_counters_v04_t counters[WL_IOV_MAC_PARAM_LEN][WL_IOV_PKTQ_LOG_PRECS];
uint32 counter_info[WL_IOV_MAC_PARAM_LEN];
uint32 pspretend_time_delta[WL_IOV_MAC_PARAM_LEN];
- char headings[1];
+ char headings[];
} pktq_log_format_v04_t;
typedef struct {
@@ -4319,9 +6993,8 @@
pktq_log_counters_v05_t counters[WL_IOV_MAC_PARAM_LEN][WL_IOV_PKTQ_LOG_PRECS];
uint32 counter_info[WL_IOV_MAC_PARAM_LEN];
uint32 pspretend_time_delta[WL_IOV_MAC_PARAM_LEN];
- char headings[1];
+ char headings[];
} pktq_log_format_v05_t;
-
typedef struct {
uint32 version;
@@ -4336,60 +7009,75 @@
#define PKTQ_LOG_AUTO (1 << 31)
#define PKTQ_LOG_DEF_PREC (1 << 30)
+typedef struct wl_pfn_macaddr_cfg_0 {
+ uint8 version;
+ uint8 reserved;
+ struct ether_addr macaddr;
+} wl_pfn_macaddr_cfg_0_t;
#define LEGACY1_WL_PFN_MACADDR_CFG_VER 0
-
#define WL_PFN_MAC_OUI_ONLY_MASK 1
#define WL_PFN_SET_MAC_UNASSOC_MASK 2
#define WL_PFN_RESTRICT_LA_MAC_MASK 4
#define WL_PFN_MACADDR_FLAG_MASK 0x7
-
+/** To configure pfn_macaddr */
+typedef struct wl_pfn_macaddr_cfg {
+ uint8 version;
+ uint8 flags;
+ struct ether_addr macaddr;
+} wl_pfn_macaddr_cfg_t;
+#define WL_PFN_MACADDR_CFG_VER 1
/*
* SCB_BS_DATA iovar definitions start.
*/
#define SCB_BS_DATA_STRUCT_VERSION 1
-/* The actual counters maintained for each station */
-typedef BWL_PRE_PACKED_STRUCT struct {
+/** The actual counters maintained for each station */
+typedef struct {
/* The following counters are a subset of what pktq_stats provides per precedence. */
- uint32 retry; /* packets re-sent because they were not received */
- uint32 retry_drop; /* packets finally dropped after retry limit */
- uint32 rtsfail; /* count of rts attempts that failed to receive cts */
- uint32 acked; /* count of packets sent (acked) successfully */
- uint32 txrate_succ; /* running total of phy rate of packets sent successfully */
- uint32 txrate_main; /* running total of phy 'main' rate */
- uint32 throughput; /* actual data transferred successfully */
- uint32 time_delta; /* time difference since last pktq_stats */
- uint32 airtime; /* cumulative total medium access delay in useconds */
-} BWL_POST_PACKED_STRUCT iov_bs_data_counters_t;
+ uint32 retry; /**< packets re-sent because they were not received */
+ uint32 retry_drop; /**< packets finally dropped after retry limit */
+ uint32 rtsfail; /**< count of rts attempts that failed to receive cts */
+ uint32 acked; /**< count of packets sent (acked) successfully */
+ uint32 txrate_succ; /**< running total of phy rate of packets sent successfully */
+ uint32 txrate_main; /**< running total of phy 'main' rate */
+ uint32 throughput; /**< actual data transferred successfully */
+ uint32 time_delta; /**< time difference since last pktq_stats */
+ uint32 airtime; /**< cumulative total medium access delay in useconds */
+} iov_bs_data_counters_t;
-/* The structure for individual station information. */
+/** The structure for individual station information. */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- struct ether_addr station_address; /* The station MAC address */
- uint16 station_flags; /* Bit mask of flags, for future use. */
- iov_bs_data_counters_t station_counters; /* The actual counter values */
+ struct ether_addr station_address; /**< The station MAC address */
+ uint16 station_flags; /**< Bit mask of flags, for future use. */
+ iov_bs_data_counters_t station_counters; /**< The actual counter values */
} BWL_POST_PACKED_STRUCT iov_bs_data_record_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint16 structure_version; /* Structure version number (for wl/wlu matching) */
- uint16 structure_count; /* Number of iov_bs_data_record_t records following */
- iov_bs_data_record_t structure_record[1]; /* 0 - structure_count records */
+ uint16 structure_version; /**< Structure version number (for wl/wlu matching) */
+ uint16 structure_count; /**< Number of iov_bs_data_record_t records following */
+ iov_bs_data_record_t structure_record[1]; /**< 0 - structure_count records */
} BWL_POST_PACKED_STRUCT iov_bs_data_struct_t;
+#include <packed_section_end.h>
/* Bitmask of options that can be passed in to the iovar. */
enum {
- SCB_BS_DATA_FLAG_NO_RESET = (1<<0) /* Do not clear the counters after reading */
+ SCB_BS_DATA_FLAG_NO_RESET = (1<<0) /**< Do not clear the counters after reading */
};
/*
* SCB_BS_DATA iovar definitions end.
*/
typedef struct wlc_extlog_cfg {
- int max_number;
- uint16 module; /* bitmap */
+ int32 max_number;
+ uint16 module; /**< bitmap */
uint8 level;
uint8 flag;
uint16 version;
+ uint16 PAD;
} wlc_extlog_cfg_t;
typedef struct log_record {
@@ -4399,8 +7087,10 @@
uint8 level;
uint8 sub_unit;
uint8 seq_num;
+ uint8 pad;
int32 arg;
- char str[MAX_ARGSTR_LEN];
+ char str[MAX_ARGSTR_LEN];
+ char PAD[4-MAX_ARGSTR_LEN%4];
} log_record_t;
typedef struct wlc_extlog_req {
@@ -4462,87 +7152,7 @@
FMTSTR_MAX_ID
} log_fmtstr_id_t;
-#ifdef DONGLEOVERLAYS
-typedef struct {
- uint32 flags_idx; /* lower 8 bits: overlay index; upper 24 bits: flags */
- uint32 offset; /* offset into overlay region to write code */
- uint32 len; /* overlay code len */
- /* overlay code follows this struct */
-} wl_ioctl_overlay_t;
-#endif /* DONGLEOVERLAYS */
-
-/* Mesh peering states */
-#define MESH_PEERING_IDLE 0
-#define MESH_PEERING_OPEN_SNT 1
-#define MESH_PEERING_CNF_RCVD 2
-#define MESH_PEERING_OPEN_RCVD 3
-#define MESH_PEERING_ESTAB 4
-#define MESH_PEERING_HOLDING 5
-#define MESH_PEERING_LAST_STATE 6
-/* for debugging: mapping strings */
-#define MESH_PEERING_STATE_STRINGS \
- {"IDLE ", "OPNSNT", "CNFRCV", "OPNRCV", "ESTAB ", "HOLDNG"}
-
-typedef BWL_PRE_PACKED_STRUCT struct mesh_peer_info {
- /* mesh_peer_instance as given in the spec. Note that, peer address
- * is stored in scb
- */
- uint16 mesh_peer_prot_id;
- uint16 local_link_id;
- uint16 peer_link_id;
- uint16 peer_aid; /* AID generated by *peer* to self & received in peer_confirm.
- * TODO: no mention in spec? possibly used in PS case. Note that aid generated
- * from self to peer is stored in scb.
- */
- uint8 state;
- /* TODO: struct mesh_peer_info *next; this field is required
- * if multiple peerings per same src is allowed, which is
- * true as per spec.
- */
-} BWL_POST_PACKED_STRUCT mesh_peer_info_t;
-
-/* once an entry is added into mesh_peer_list, if peering is lost, it will
-* get retried for peering, MAX_MESH_PEER_ENTRY_RETRIES times. after wards, it
-* wont get retried and will be moved to MESH_PEER_ENTRY_STATE_TIMEDOUT state,
-* until user adds it again explicitely, when its entry_state is changed
-* to MESH_PEER_ENTRY_STATE_ACTIVE and tried again.
-*/
-#define MAX_MESH_SELF_PEER_ENTRY_RETRIES 3
-#define MESH_SELF_PEER_ENTRY_STATE_ACTIVE 1
-#define MESH_SELF_PEER_ENTRY_STATE_TIMEDOUT 2
-
-/* to identify if the list of mac addresses got in "mesh_peer" iovar
-* have to be peered or should be cancelled peering
-*/
-#define PEER_MACLIST_FLAG_CLEAR 1
-
-typedef BWL_PRE_PACKED_STRUCT struct mesh_peer_info_ext {
- mesh_peer_info_t peer_info;
- uint16 local_aid; /* AID generated by *local* to peer */
- struct ether_addr ea; /* peer ea */
- uint32 entry_state; /* see MESH_PEER_ENTRY_STATE_ACTIVE etc; valid
- * ONLY for internal peering requests
- */
- int rssi;
-} BWL_POST_PACKED_STRUCT mesh_peer_info_ext_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct mesh_peer_info_dump {
- uint32 buflen;
- uint32 version;
- uint32 count; /* number of results */
- mesh_peer_info_ext_t mpi_ext[1];
-} BWL_POST_PACKED_STRUCT mesh_peer_info_dump_t;
-
-#define WL_MESH_PEER_RES_FIXED_SIZE (sizeof(mesh_peer_info_dump_t) - sizeof(mesh_peer_info_ext_t))
-
-typedef BWL_PRE_PACKED_STRUCT struct mesh_pmk {
- struct ether_addr ea;
- uint8 pmk[32];
-} BWL_POST_PACKED_STRUCT mesh_pmk_t;
-
-#define SAE_MAX_PASSWD_LEN 32
-
-/* 11k Neighbor Report element (unversioned, deprecated) */
+/** 11k Neighbor Report element (unversioned, deprecated) */
typedef struct nbr_element {
uint8 id;
uint8 len;
@@ -4553,9 +7163,14 @@
uint8 phytype;
uint8 pad;
} nbr_element_t;
+#define NBR_ADD_STATIC 0
+#define NBR_ADD_DYNAMIC 1
#define WL_RRM_NBR_RPT_VER 1
-/* 11k Neighbor Report element */
+#define WL_NBR_RPT_FLAG_BSS_PREF_FROM_AP 0x01
+#define WL_RRM_DEFAULT_BSS_PREFERENCE 255
+#define WL_RRM_ADD_NBR_MIN_PARAMS 6
+/** 11k Neighbor Report element */
typedef struct nbr_rpt_elem {
uint8 version;
uint8 id;
@@ -4567,11 +7182,18 @@
uint8 reg;
uint8 channel;
uint8 phytype;
- uint8 pad_2;
+ uint8 addtype; /* static for manual add or dynamic if auto-learning of neighbors */
wlc_ssid_t ssid;
+ chanspec_t chanspec;
uint8 bss_trans_preference;
- uint8 pad_3[3];
+ uint8 flags;
} nbr_rpt_elem_t;
+
+typedef struct bcn_nbr_query {
+ uint16 list_cnt;
+ uint8 pad[2];
+ struct ether_addr sta_addr;
+} bcn_nbr_query_t;
typedef enum event_msgs_ext_command {
EVENTMSGS_NONE = 0,
@@ -4582,9 +7204,6 @@
#define EVENTMSGS_VER 1
#define EVENTMSGS_EXT_STRUCT_SIZE OFFSETOF(eventmsgs_ext_t, mask[0])
-
-#define WL_EVENTING_MASK_MAX_LEN 64
-#define WL_EVENTINT_MAX_GET_SIZE (WL_EVENTING_MASK_MAX_LEN + EVENTMSGS_EXT_STRUCT_SIZE)
/* len- for SET it would be mask size from the application to the firmware */
/* for GET it would be actual firmware mask size */
@@ -4599,61 +7218,117 @@
uint8 mask[1];
} eventmsgs_ext_t;
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct pcie_bus_tput_params {
- /* no of host dma descriptors programmed by the firmware before a commit */
+ /** no of host dma descriptors programmed by the firmware before a commit */
uint16 max_dma_descriptors;
- uint16 host_buf_len; /* length of host buffer */
- dmaaddr_t host_buf_addr; /* physical address for bus_throughput_buf */
+ uint16 host_buf_len; /**< length of host buffer */
+ dmaaddr_t host_buf_addr; /**< physical address for bus_throughput_buf */
} BWL_POST_PACKED_STRUCT pcie_bus_tput_params_t;
-typedef BWL_PRE_PACKED_STRUCT struct pcie_bus_tput_stats {
- uint16 time_taken; /* no of secs the test is run */
- uint16 nbytes_per_descriptor; /* no of bytes of data dma ed per descriptor */
+#include <packed_section_end.h>
- /* no of desciptors fo which dma is sucessfully completed within the test time */
+typedef struct pcie_bus_tput_stats {
+ uint16 time_taken; /**< no of secs the test is run */
+ uint16 nbytes_per_descriptor; /**< no of bytes of data dma ed per descriptor */
+
+ /** no of desciptors for which dma is sucessfully completed within the test time */
uint32 count;
-} BWL_POST_PACKED_STRUCT pcie_bus_tput_stats_t;
+} pcie_bus_tput_stats_t;
-#define MAX_ROAMOFFL_BSSID_NUM 100
+#define HOST_WAKEUP_DATA_VER 1
+#include <packed_section_start.h>
+/* Bus interface host wakeup data */
+typedef BWL_PRE_PACKED_STRUCT struct wl_host_wakeup_data {
+ uint16 ver;
+ uint16 len;
+ uchar data[1]; /* wakeup data */
+} BWL_POST_PACKED_STRUCT wl_host_wakeup_data_t;
+#include <packed_section_end.h>
-typedef BWL_PRE_PACKED_STRUCT struct roamoffl_bssid_list {
- int32 cnt;
- struct ether_addr bssid[1];
-} BWL_POST_PACKED_STRUCT roamoffl_bssid_list_t;
-
-/* no default structure packing */
+#define HOST_WAKEUP_DATA_VER_2 2
+#include <packed_section_start.h>
+/* Bus interface host wakeup data */
+typedef BWL_PRE_PACKED_STRUCT struct wl_host_wakeup_data_v2 {
+ uint16 ver;
+ uint16 len;
+ uint32 gpio_toggle_time; /* gpio toggle time in ms */
+ uchar data[1]; /* wakeup data */
+} BWL_POST_PACKED_STRUCT wl_host_wakeup_data_v2_t;
#include <packed_section_end.h>
typedef struct keepalives_max_idle {
- uint16 keepalive_count; /* nmbr of keepalives per bss_max_idle period */
- uint8 mkeepalive_index; /* mkeepalive_index for keepalive frame to be used */
- uint8 PAD; /* to align next field */
- uint16 max_interval; /* seconds */
+ uint16 keepalive_count; /**< nmbr of keepalives per bss_max_idle period */
+ uint8 mkeepalive_index; /**< mkeepalive_index for keepalive frame to be used */
+ uint8 PAD; /**< to align next field */
+ uint16 max_interval; /**< seconds */
} keepalives_max_idle_t;
#define PM_IGNORE_BCMC_PROXY_ARP (1 << 0)
#define PM_IGNORE_BCMC_ALL_DMS_ACCEPTED (1 << 1)
-/* require strict packing */
-#include <packed_section_start.h>
+/* ##### HMAP section ##### */
+#define PCIE_MAX_HMAP_WINDOWS 8
+#define PCIE_HMAPTEST_VERSION 2
+#define HMAPTEST_INVALID_OFFSET 0xFFFFFFFFu
+#define HMAPTEST_DEFAULT_WRITE_PATTERN 0xBABECAFEu
+#define HMAPTEST_ACCESS_ARM 0
+#define HMAPTEST_ACCESS_M2M 1
+#define HMAPTEST_ACCESS_D11 2
+#define HMAPTEST_ACCESS_NONE 3
+
+typedef struct pcie_hmaptest {
+ uint16 version; /* Version */
+ uint16 length; /* Length of entire structure */
+ uint32 xfer_len;
+ uint32 accesstype;
+ uint32 is_write;
+ uint32 is_invalid;
+ uint32 host_addr_hi;
+ uint32 host_addr_lo;
+ uint32 host_offset;
+ uint32 value; /* 4 byte value to be filled in case of write access test */
+ uint32 delay; /* wait time in seconds before initiating access from dongle */
+} pcie_hmaptest_t;
+
+/* HMAP window register set */
+typedef struct hmapwindow {
+ uint32 baseaddr_lo; /* BaseAddrLower */
+ uint32 baseaddr_hi; /* BaseAddrUpper */
+ uint32 windowlength; /* Window Length */
+} hmapwindow_t;
+
+#define PCIE_HMAP_VERSION 1
+typedef struct pcie_hmap {
+ uint16 version; /**< Version */
+ uint16 length; /**< Length of entire structure */
+ uint32 enable; /**< status of HMAP enabled/disabled */
+ uint32 nwindows; /* no. of HMAP windows enabled */
+ uint32 window_config; /* HMAP window_config register */
+ uint32 hmap_violationaddr_lo; /* violating address lo */
+ uint32 hmap_violationaddr_hi; /* violating addr hi */
+ uint32 hmap_violation_info; /* violation info */
+ hmapwindow_t hwindows[]; /* Multiple hwindows */
+} pcie_hmap_t;
/* ##### Power Stats section ##### */
#define WL_PWRSTATS_VERSION 2
-/* Input structure for pwrstats IOVAR */
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwrstats_query {
- uint16 length; /* Number of entries in type array. */
- uint16 type[1]; /* Types (tags) to retrieve.
+/** Input structure for pwrstats IOVAR */
+typedef struct wl_pwrstats_query {
+ uint16 length; /**< Number of entries in type array. */
+ uint16 type[1]; /**< Types (tags) to retrieve.
* Length 0 (no types) means get all.
*/
-} BWL_POST_PACKED_STRUCT wl_pwrstats_query_t;
+} wl_pwrstats_query_t;
-/* This structure is for version 2; version 1 will be deprecated in by FW */
+/** This structure is for version 2; version 1 will be deprecated in by FW */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_pwrstats {
- uint16 version; /* Version = 2 is TLV format */
- uint16 length; /* Length of entire structure */
- uint8 data[1]; /* TLV data, a series of structures,
+ uint16 version; /**< Version = 2 is TLV format */
+ uint16 length; /**< Length of entire structure */
+ uint8 data[1]; /**< TLV data, a series of structures,
* each starting with type and length.
*
* Padded as necessary so each section
@@ -4664,21 +7339,13 @@
* valid len values are 0-4095.
*/
} BWL_POST_PACKED_STRUCT wl_pwrstats_t;
+#include <packed_section_end.h>
#define WL_PWR_STATS_HDRLEN OFFSETOF(wl_pwrstats_t, data)
-
-/* Type values for the data section */
-#define WL_PWRSTATS_TYPE_PHY 0 /* struct wl_pwr_phy_stats */
-#define WL_PWRSTATS_TYPE_SCAN 1 /* struct wl_pwr_scan_stats */
-#define WL_PWRSTATS_TYPE_USB_HSIC 2 /* struct wl_pwr_usb_hsic_stats */
-#define WL_PWRSTATS_TYPE_PM_AWAKE1 3 /* struct wl_pwr_pm_awake_stats_v1 */
-#define WL_PWRSTATS_TYPE_CONNECTION 4 /* struct wl_pwr_connect_stats; assoc and key-exch time */
-#define WL_PWRSTATS_TYPE_PCIE 6 /* struct wl_pwr_pcie_stats */
-#define WL_PWRSTATS_TYPE_PM_AWAKE2 7 /* struct wl_pwr_pm_awake_stats_v2 */
/* Bits for wake reasons */
#define WLC_PMD_WAKE_SET 0x1
#define WLC_PMD_PM_AWAKE_BCN 0x2
-#define WLC_PMD_BTA_ACTIVE 0x4
+/* BIT:3 is no longer being used */
#define WLC_PMD_SCAN_IN_PROGRESS 0x8
#define WLC_PMD_RM_IN_PROGRESS 0x10
#define WLC_PMD_AS_IN_PROGRESS 0x20
@@ -4686,22 +7353,123 @@
#define WLC_PMD_PS_POLL 0x80
#define WLC_PMD_CHK_UNALIGN_TBTT 0x100
#define WLC_PMD_APSD_STA_UP 0x200
-#define WLC_PMD_TX_PEND_WAR 0x400
+#define WLC_PMD_TX_PEND_WAR 0x400 /* obsolete, can be reused */
#define WLC_PMD_GPTIMER_STAY_AWAKE 0x800
#define WLC_PMD_PM2_RADIO_SOFF_PEND 0x2000
#define WLC_PMD_NON_PRIM_STA_UP 0x4000
#define WLC_PMD_AP_UP 0x8000
-typedef BWL_PRE_PACKED_STRUCT struct wlc_pm_debug {
- uint32 timestamp; /* timestamp in millisecond */
- uint32 reason; /* reason(s) for staying awake */
-} BWL_POST_PACKED_STRUCT wlc_pm_debug_t;
+typedef struct wlc_pm_debug {
+ uint32 timestamp; /**< timestamp in millisecond */
+ uint32 reason; /**< reason(s) for staying awake */
+} wlc_pm_debug_t;
-/* WL_PWRSTATS_TYPE_PM_AWAKE1 structures (for 6.25 firmware) */
+/** WL_PWRSTATS_TYPE_PM_AWAKE1 structures (for 6.25 firmware) */
#define WLC_STA_AWAKE_STATES_MAX_V1 30
#define WLC_PMD_EVENT_MAX_V1 32
-/* Data sent as part of pwrstats IOVAR (and EXCESS_PM_WAKE event) */
+/** Data sent as part of pwrstats IOVAR (and EXCESS_PM_WAKE event) */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct pm_awake_data_v1 {
+ uint32 curr_time; /**< ms */
+ uint32 hw_macc; /**< HW maccontrol */
+ uint32 sw_macc; /**< SW maccontrol */
+ uint32 pm_dur; /**< Total sleep time in PM, msecs */
+ uint32 mpc_dur; /**< Total sleep time in MPC, msecs */
+
+ /* int32 drifts = remote - local; +ve drift => local-clk slow */
+ int32 last_drift; /**< Most recent TSF drift from beacon */
+ int32 min_drift; /**< Min TSF drift from beacon in magnitude */
+ int32 max_drift; /**< Max TSF drift from beacon in magnitude */
+
+ uint32 avg_drift; /**< Avg TSF drift from beacon */
+
+ /* Wake history tracking */
+ uint8 pmwake_idx; /**< for stepping through pm_state */
+ wlc_pm_debug_t pm_state[WLC_STA_AWAKE_STATES_MAX_V1]; /**< timestamped wake bits */
+ uint32 pmd_event_wake_dur[WLC_PMD_EVENT_MAX_V1]; /**< cumulative usecs per wake reason */
+ uint32 drift_cnt; /**< Count of drift readings over which avg_drift was computed */
+} BWL_POST_PACKED_STRUCT pm_awake_data_v1_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_pm_awake_stats_v1 {
+ uint16 type; /**< WL_PWRSTATS_TYPE_PM_AWAKE */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+
+ pm_awake_data_v1_t awake_data;
+ uint32 frts_time; /**< Cumulative ms spent in frts since driver load */
+ uint32 frts_end_cnt; /**< No of times frts ended since driver load */
+} BWL_POST_PACKED_STRUCT wl_pwr_pm_awake_stats_v1_t;
+#include <packed_section_end.h>
+
+/** WL_PWRSTATS_TYPE_PM_AWAKE2 structures. Data sent as part of pwrstats IOVAR */
+typedef struct pm_awake_data_v2 {
+ uint32 curr_time; /**< ms */
+ uint32 hw_macc; /**< HW maccontrol */
+ uint32 sw_macc; /**< SW maccontrol */
+ uint32 pm_dur; /**< Total sleep time in PM, msecs */
+ uint32 mpc_dur; /**< Total sleep time in MPC, msecs */
+
+ /* int32 drifts = remote - local; +ve drift => local-clk slow */
+ int32 last_drift; /**< Most recent TSF drift from beacon */
+ int32 min_drift; /**< Min TSF drift from beacon in magnitude */
+ int32 max_drift; /**< Max TSF drift from beacon in magnitude */
+
+ uint32 avg_drift; /**< Avg TSF drift from beacon */
+
+ /* Wake history tracking */
+
+ /* pmstate array (type wlc_pm_debug_t) start offset */
+ uint16 pm_state_offset;
+ /** pmstate number of array entries */
+ uint16 pm_state_len;
+
+ /** array (type uint32) start offset */
+ uint16 pmd_event_wake_dur_offset;
+ /** pmd_event_wake_dur number of array entries */
+ uint16 pmd_event_wake_dur_len;
+
+ uint32 drift_cnt; /**< Count of drift readings over which avg_drift was computed */
+ uint8 pmwake_idx; /**< for stepping through pm_state */
+ uint8 flags; /**< bit0: 1-sleep, 0- wake. bit1: 0-bit0 invlid, 1-bit0 valid */
+ uint8 pad[2];
+ uint32 frts_time; /**< Cumulative ms spent in frts since driver load */
+ uint32 frts_end_cnt; /**< No of times frts ended since driver load */
+} pm_awake_data_v2_t;
+
+typedef struct wl_pwr_pm_awake_stats_v2 {
+ uint16 type; /**< WL_PWRSTATS_TYPE_PM_AWAKE */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+
+ pm_awake_data_v2_t awake_data;
+} wl_pwr_pm_awake_stats_v2_t;
+
+/* bit0: 1-sleep, 0- wake. bit1: 0-bit0 invlid, 1-bit0 valid */
+#define WL_PWR_PM_AWAKE_STATS_WAKE 0x02
+#define WL_PWR_PM_AWAKE_STATS_ASLEEP 0x03
+#define WL_PWR_PM_AWAKE_STATS_WAKE_MASK 0x03
+
+/* WL_PWRSTATS_TYPE_PM_AWAKE Version 2 structures taken from 4324/43342 */
+/* These structures are only to be used with 4324/43342 devices */
+
+#define WL_STA_AWAKE_STATES_MAX_V2 30
+#define WL_PMD_EVENT_MAX_V2 32
+#define MAX_P2P_BSS_DTIM_PRD 4
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct ucode_dbg_v2 {
+ uint32 macctrl;
+ uint16 m_p2p_hps;
+ uint16 m_p2p_bss_dtim_prd[MAX_P2P_BSS_DTIM_PRD];
+ uint32 psmdebug[20];
+ uint32 phydebug[20];
+ uint32 psm_brc;
+ uint32 ifsstat;
+} BWL_POST_PACKED_STRUCT ucode_dbg_v2_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct pmalert_awake_data_v2 {
uint32 curr_time; /* ms */
uint32 hw_macc; /* HW maccontrol */
uint32 sw_macc; /* SW maccontrol */
@@ -4717,172 +7485,377 @@
/* Wake history tracking */
uint8 pmwake_idx; /* for stepping through pm_state */
- wlc_pm_debug_t pm_state[WLC_STA_AWAKE_STATES_MAX_V1]; /* timestamped wake bits */
- uint32 pmd_event_wake_dur[WLC_PMD_EVENT_MAX_V1]; /* cumulative usecs per wake reason */
+ wlc_pm_debug_t pm_state[WL_STA_AWAKE_STATES_MAX_V2]; /* timestamped wake bits */
+ uint32 pmd_event_wake_dur[WL_PMD_EVENT_MAX_V2]; /* cumulative usecs per wake reason */
uint32 drift_cnt; /* Count of drift readings over which avg_drift was computed */
-} BWL_POST_PACKED_STRUCT pm_awake_data_v1_t;
+ uint32 start_event_dur[WL_PMD_EVENT_MAX_V2]; /* start event-duration */
+ ucode_dbg_v2_t ud;
+ uint32 frts_time; /* Cumulative ms spent in frts since driver load */
+ uint32 frts_end_cnt; /* No of times frts ended since driver load */
+} BWL_POST_PACKED_STRUCT pmalert_awake_data_v2_t;
+#include <packed_section_end.h>
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_pm_awake_stats_v1 {
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct pm_alert_data_v2 {
+ uint32 version;
+ uint32 length; /* Length of entire structure */
+ uint32 reasons; /* reason(s) for pm_alert */
+ /* Following fields are present only for reasons
+ * PM_DUR_EXCEEDED, MPC_DUR_EXCEEDED & CONST_AWAKE_DUR_EXCEEDED
+ */
+ uint32 prev_stats_time; /* msecs */
+ uint32 prev_pm_dur; /* msecs */
+ uint32 prev_mpc_dur; /* msecs */
+ pmalert_awake_data_v2_t awake_data;
+} BWL_POST_PACKED_STRUCT pm_alert_data_v2_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_pm_awake_status_v2 {
uint16 type; /* WL_PWRSTATS_TYPE_PM_AWAKE */
uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+ pmalert_awake_data_v2_t awake_data;
+ uint32 frts_time; /* Cumulative ms spent in frts since driver load */
+ uint32 frts_end_cnt; /* No of times frts ended since driver load */
+} BWL_POST_PACKED_STRUCT wl_pwr_pm_awake_status_v2_t;
+#include <packed_section_end.h>
+
+/* Below are latest definitions from PHO25178RC100_BRANCH_6_50 */
+/* wl_pwr_pm_awake_stats_v1_t is used for WL_PWRSTATS_TYPE_PM_AWAKE */
+/* (at least) the chip independent registers */
+typedef struct ucode_dbg_ext {
+ uint32 x120;
+ uint32 x124;
+ uint32 x154;
+ uint32 x158;
+ uint32 x15c;
+ uint32 x180;
+ uint32 x184;
+ uint32 x188;
+ uint32 x18c;
+ uint32 x1a0;
+ uint32 x1a8;
+ uint32 x1e0;
+ uint32 scr_x14;
+ uint32 scr_x2b;
+ uint32 scr_x2c;
+ uint32 scr_x2d;
+ uint32 scr_x2e;
+
+ uint16 x40a;
+ uint16 x480;
+ uint16 x490;
+ uint16 x492;
+ uint16 x4d8;
+ uint16 x4b8;
+ uint16 x4ba;
+ uint16 x4bc;
+ uint16 x4be;
+ uint16 x500;
+ uint16 x50e;
+ uint16 x522;
+ uint16 x546;
+ uint16 x578;
+ uint16 x602;
+ uint16 x646;
+ uint16 x648;
+ uint16 x666;
+ uint16 x670;
+ uint16 x690;
+ uint16 x692;
+ uint16 x6a0;
+ uint16 x6a2;
+ uint16 x6a4;
+ uint16 x6b2;
+ uint16 x7c0;
+
+ uint16 shm_x20;
+ uint16 shm_x4a;
+ uint16 shm_x5e;
+ uint16 shm_x5f;
+ uint16 shm_xaab;
+ uint16 shm_x74a;
+ uint16 shm_x74b;
+ uint16 shm_x74c;
+ uint16 shm_x74e;
+ uint16 shm_x756;
+ uint16 shm_x75b;
+ uint16 shm_x7b9;
+ uint16 shm_x7d4;
+
+ uint16 shm_P2P_HPS;
+ uint16 shm_P2P_intr[16];
+ uint16 shm_P2P_perbss[48];
+} ucode_dbg_ext_t;
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct pm_alert_data_v1 {
+ uint32 version;
+ uint32 length; /**< Length of entire structure */
+ uint32 reasons; /**< reason(s) for pm_alert */
+ /* Following fields are present only for reasons
+ * PM_DUR_EXCEEDED, MPC_DUR_EXCEEDED & CONST_AWAKE_DUR_EXCEEDED
+ */
+ uint32 prev_stats_time; /**< msecs */
+ uint32 prev_pm_dur; /**< msecs */
+ uint32 prev_mpc_dur; /**< msecs */
pm_awake_data_v1_t awake_data;
- uint32 frts_time; /* Cumulative ms spent in frts since driver load */
- uint32 frts_end_cnt; /* No of times frts ended since driver load */
-} BWL_POST_PACKED_STRUCT wl_pwr_pm_awake_stats_v1_t;
+ uint32 start_event_dur[WLC_PMD_EVENT_MAX_V1]; /**< start event-duration */
+ ucode_dbg_v2_t ud;
+ uint32 frts_time; /**< Cumulative ms spent in frts since driver load */
+ uint32 frts_end_cnt; /**< No of times frts ended since driver load */
+ ucode_dbg_ext_t ud_ext;
+ uint32 prev_frts_dur; /**< ms */
+} BWL_POST_PACKED_STRUCT pm_alert_data_v1_t;
+#include <packed_section_end.h>
-/* WL_PWRSTATS_TYPE_PM_AWAKE2 structures */
-/* Data sent as part of pwrstats IOVAR */
-typedef BWL_PRE_PACKED_STRUCT struct pm_awake_data_v2 {
- uint32 curr_time; /* ms */
- uint32 hw_macc; /* HW maccontrol */
- uint32 sw_macc; /* SW maccontrol */
- uint32 pm_dur; /* Total sleep time in PM, msecs */
- uint32 mpc_dur; /* Total sleep time in MPC, msecs */
-
- /* int32 drifts = remote - local; +ve drift => local-clk slow */
- int32 last_drift; /* Most recent TSF drift from beacon */
- int32 min_drift; /* Min TSF drift from beacon in magnitude */
- int32 max_drift; /* Max TSF drift from beacon in magnitude */
-
- uint32 avg_drift; /* Avg TSF drift from beacon */
-
- /* Wake history tracking */
-
- /* pmstate array (type wlc_pm_debug_t) start offset */
- uint16 pm_state_offset;
- /* pmstate number of array entries */
- uint16 pm_state_len;
-
- /* array (type uint32) start offset */
- uint16 pmd_event_wake_dur_offset;
- /* pmd_event_wake_dur number of array entries */
- uint16 pmd_event_wake_dur_len;
-
- uint32 drift_cnt; /* Count of drift readings over which avg_drift was computed */
- uint8 pmwake_idx; /* for stepping through pm_state */
- uint8 pad[3];
- uint32 frts_time; /* Cumulative ms spent in frts since driver load */
- uint32 frts_end_cnt; /* No of times frts ended since driver load */
-} BWL_POST_PACKED_STRUCT pm_awake_data_v2_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_pm_awake_stats_v2 {
- uint16 type; /* WL_PWRSTATS_TYPE_PM_AWAKE */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
-
- pm_awake_data_v2_t awake_data;
-} BWL_POST_PACKED_STRUCT wl_pwr_pm_awake_stats_v2_t;
+/* End of 43342/4324 v2 structure definitions */
/* Original bus structure is for HSIC */
-typedef BWL_PRE_PACKED_STRUCT struct bus_metrics {
- uint32 suspend_ct; /* suspend count */
- uint32 resume_ct; /* resume count */
- uint32 disconnect_ct; /* disconnect count */
- uint32 reconnect_ct; /* reconnect count */
- uint32 active_dur; /* msecs in bus, usecs for user */
- uint32 suspend_dur; /* msecs in bus, usecs for user */
- uint32 disconnect_dur; /* msecs in bus, usecs for user */
-} BWL_POST_PACKED_STRUCT bus_metrics_t;
-/* Bus interface info for USB/HSIC */
+typedef struct bus_metrics {
+ uint32 suspend_ct; /**< suspend count */
+ uint32 resume_ct; /**< resume count */
+ uint32 disconnect_ct; /**< disconnect count */
+ uint32 reconnect_ct; /**< reconnect count */
+ uint32 active_dur; /**< msecs in bus, usecs for user */
+ uint32 suspend_dur; /**< msecs in bus, usecs for user */
+ uint32 disconnect_dur; /**< msecs in bus, usecs for user */
+} bus_metrics_t;
+
+/** Bus interface info for USB/HSIC */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_usb_hsic_stats {
- uint16 type; /* WL_PWRSTATS_TYPE_USB_HSIC */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+ uint16 type; /**< WL_PWRSTATS_TYPE_USB_HSIC */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
- bus_metrics_t hsic; /* stats from hsic bus driver */
+ bus_metrics_t hsic; /**< stats from hsic bus driver */
} BWL_POST_PACKED_STRUCT wl_pwr_usb_hsic_stats_t;
+#include <packed_section_end.h>
-typedef BWL_PRE_PACKED_STRUCT struct pcie_bus_metrics {
- uint32 d3_suspend_ct; /* suspend count */
- uint32 d0_resume_ct; /* resume count */
- uint32 perst_assrt_ct; /* PERST# assert count */
- uint32 perst_deassrt_ct; /* PERST# de-assert count */
- uint32 active_dur; /* msecs */
- uint32 d3_suspend_dur; /* msecs */
- uint32 perst_dur; /* msecs */
- uint32 l0_cnt; /* L0 entry count */
- uint32 l0_usecs; /* L0 duration in usecs */
- uint32 l1_cnt; /* L1 entry count */
- uint32 l1_usecs; /* L1 duration in usecs */
- uint32 l1_1_cnt; /* L1_1ss entry count */
- uint32 l1_1_usecs; /* L1_1ss duration in usecs */
- uint32 l1_2_cnt; /* L1_2ss entry count */
- uint32 l1_2_usecs; /* L1_2ss duration in usecs */
- uint32 l2_cnt; /* L2 entry count */
- uint32 l2_usecs; /* L2 duration in usecs */
- uint32 timestamp; /* Timestamp on when stats are collected */
- uint32 num_h2d_doorbell; /* # of doorbell interrupts - h2d */
- uint32 num_d2h_doorbell; /* # of doorbell interrupts - d2h */
- uint32 num_submissions; /* # of submissions */
- uint32 num_completions; /* # of completions */
- uint32 num_rxcmplt; /* # of rx completions */
- uint32 num_rxcmplt_drbl; /* of drbl interrupts for rx complt. */
- uint32 num_txstatus; /* # of tx completions */
- uint32 num_txstatus_drbl; /* of drbl interrupts for tx complt. */
- uint32 ltr_active_ct; /* # of times chip went to LTR ACTIVE */
- uint32 ltr_active_dur; /* # of msecs chip was in LTR ACTIVE */
- uint32 ltr_sleep_ct; /* # of times chip went to LTR SLEEP */
- uint32 ltr_sleep_dur; /* # of msecs chip was in LTR SLEEP */
- uint32 deepsleep_count; /* # of times chip went to deepsleep */
- uint32 deepsleep_dur; /* # of msecs chip was in deepsleep */
-} BWL_POST_PACKED_STRUCT pcie_bus_metrics_t;
+/* PCIe Event counter tlv IDs */
+enum pcie_cnt_xtlv_id {
+ PCIE_CNT_XTLV_METRICS = 0x1, /**< PCIe Bus Metrics */
+ PCIE_CNT_XTLV_BUS_CNT = 0x2 /**< PCIe Bus counters */
+};
-/* Bus interface info for PCIE */
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_pcie_stats {
- uint16 type; /* WL_PWRSTATS_TYPE_PCIE */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
- pcie_bus_metrics_t pcie; /* stats from pcie bus driver */
-} BWL_POST_PACKED_STRUCT wl_pwr_pcie_stats_t;
+typedef struct pcie_bus_metrics {
+ uint32 d3_suspend_ct; /**< suspend count */
+ uint32 d0_resume_ct; /**< resume count */
+ uint32 perst_assrt_ct; /**< PERST# assert count */
+ uint32 perst_deassrt_ct; /**< PERST# de-assert count */
+ uint32 active_dur; /**< msecs */
+ uint32 d3_suspend_dur; /**< msecs */
+ uint32 perst_dur; /**< msecs */
+ uint32 l0_cnt; /**< L0 entry count */
+ uint32 l0_usecs; /**< L0 duration in usecs */
+ uint32 l1_cnt; /**< L1 entry count */
+ uint32 l1_usecs; /**< L1 duration in usecs */
+ uint32 l1_1_cnt; /**< L1_1ss entry count */
+ uint32 l1_1_usecs; /**< L1_1ss duration in usecs */
+ uint32 l1_2_cnt; /**< L1_2ss entry count */
+ uint32 l1_2_usecs; /**< L1_2ss duration in usecs */
+ uint32 l2_cnt; /**< L2 entry count */
+ uint32 l2_usecs; /**< L2 duration in usecs */
+ uint32 timestamp; /**< Timestamp on when stats are collected */
+ uint32 num_h2d_doorbell; /**< # of doorbell interrupts - h2d */
+ uint32 num_d2h_doorbell; /**< # of doorbell interrupts - d2h */
+ uint32 num_submissions; /**< # of submissions */
+ uint32 num_completions; /**< # of completions */
+ uint32 num_rxcmplt; /**< # of rx completions */
+ uint32 num_rxcmplt_drbl; /**< of drbl interrupts for rx complt. */
+ uint32 num_txstatus; /**< # of tx completions */
+ uint32 num_txstatus_drbl; /**< of drbl interrupts for tx complt. */
+ uint32 deepsleep_count; /**< # of times chip went to deepsleep */
+ uint32 deepsleep_dur; /**< # of msecs chip was in deepsleep */
+ uint32 ltr_active_ct; /**< # of times chip went to LTR ACTIVE */
+ uint32 ltr_active_dur; /**< # of msecs chip was in LTR ACTIVE */
+ uint32 ltr_sleep_ct; /**< # of times chip went to LTR SLEEP */
+ uint32 ltr_sleep_dur; /**< # of msecs chip was in LTR SLEEP */
+} pcie_bus_metrics_t;
-/* Scan information history per category */
-typedef BWL_PRE_PACKED_STRUCT struct scan_data {
- uint32 count; /* Number of scans performed */
- uint32 dur; /* Total time (in us) used */
-} BWL_POST_PACKED_STRUCT scan_data_t;
+typedef struct pcie_cnt {
+ uint32 ltr_state; /**< Current LTR state */
+ uint32 l0_sr_cnt; /**< SR count during L0 */
+ uint32 l2l3_sr_cnt; /**< SR count during L2L3 */
+ uint32 d3_ack_sr_cnt; /**< srcount during last D3-ACK */
+ uint32 d3_sr_cnt; /**< SR count during D3 */
+ uint32 d3_info_start; /**< D3 INFORM received time */
+ uint32 d3_info_enter_cnt; /**< # of D3 INFORM received */
+ uint32 d3_cnt; /**< # of real D3 */
+ uint32 d3_ack_sent_cnt; /**< # of D3 ACK sent count */
+ uint32 d3_drop_cnt_event; /**< # of events dropped during D3 */
+ uint32 d2h_req_q_len; /**< # of Packet pending in D2H request queue */
+ uint32 hw_reason; /**< Last Host wake assert reason */
+ uint32 hw_assert_cnt; /**< # of times Host wake Asserted */
+ uint32 host_ready_cnt; /**< # of Host ready interrupts */
+ uint32 hw_assert_reason_0; /**< timestamp when hw_reason is TRAP */
+ uint32 hw_assert_reason_1; /**< timestamp when hw_reason is WL_EVENT */
+ uint32 hw_assert_reason_2; /**< timestamp when hw_reason is DATA */
+ uint32 hw_assert_reason_3; /**< timestamp when hw_reason is DELAYED_WAKE */
+ uint32 last_host_ready; /**< Timestamp of last Host ready */
+ bool hw_asserted; /**< Flag to indicate if Host wake is Asserted */
+ bool event_delivery_pend; /**< No resources to send event */
+ uint16 pad; /**< Word alignment for scripts */
+} pcie_cnt_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_scan_stats {
- uint16 type; /* WL_PWRSTATS_TYPE_SCAN */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+/** Bus interface info for PCIE */
+typedef struct wl_pwr_pcie_stats {
+ uint16 type; /**< WL_PWRSTATS_TYPE_PCIE */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+ pcie_bus_metrics_t pcie; /**< stats from pcie bus driver */
+} wl_pwr_pcie_stats_t;
+
+/** Scan information history per category */
+typedef struct scan_data {
+ uint32 count; /**< Number of scans performed */
+ uint32 dur; /**< Total time (in us) used */
+} scan_data_t;
+
+typedef struct wl_pwr_scan_stats {
+ uint16 type; /**< WL_PWRSTATS_TYPE_SCAN */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
/* Scan history */
- scan_data_t user_scans; /* User-requested scans: (i/e/p)scan */
- scan_data_t assoc_scans; /* Scans initiated by association requests */
- scan_data_t roam_scans; /* Scans initiated by the roam engine */
- scan_data_t pno_scans[8]; /* For future PNO bucketing (BSSID, SSID, etc) */
- scan_data_t other_scans; /* Scan engine usage not assigned to the above */
-} BWL_POST_PACKED_STRUCT wl_pwr_scan_stats_t;
+ scan_data_t user_scans; /**< User-requested scans: (i/e/p)scan */
+ scan_data_t assoc_scans; /**< Scans initiated by association requests */
+ scan_data_t roam_scans; /**< Scans initiated by the roam engine */
+ scan_data_t pno_scans[8]; /**< For future PNO bucketing (BSSID, SSID, etc) */
+ scan_data_t other_scans; /**< Scan engine usage not assigned to the above */
+} wl_pwr_scan_stats_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_connect_stats {
- uint16 type; /* WL_PWRSTATS_TYPE_SCAN */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+typedef struct wl_pwr_connect_stats {
+ uint16 type; /**< WL_PWRSTATS_TYPE_SCAN */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
/* Connection (Association + Key exchange) data */
- uint32 count; /* Number of connections performed */
- uint32 dur; /* Total time (in ms) used */
-} BWL_POST_PACKED_STRUCT wl_pwr_connect_stats_t;
+ uint32 count; /**< Number of connections performed */
+ uint32 dur; /**< Total time (in ms) used */
+} wl_pwr_connect_stats_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pwr_phy_stats {
- uint16 type; /* WL_PWRSTATS_TYPE_PHY */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
- uint32 tx_dur; /* TX Active duration in us */
- uint32 rx_dur; /* RX Active duration in us */
-} BWL_POST_PACKED_STRUCT wl_pwr_phy_stats_t;
+typedef struct wl_pwr_phy_stats {
+ uint16 type; /**< WL_PWRSTATS_TYPE_PHY */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+ uint32 tx_dur; /**< TX Active duration in us */
+ uint32 rx_dur; /**< RX Active duration in us */
+} wl_pwr_phy_stats_t;
+typedef struct wl_mimo_meas_metrics_v1 {
+ uint16 type;
+ uint16 len;
+ /* Total time(us) idle in MIMO RX chain configuration */
+ uint32 total_idle_time_mimo;
+ /* Total time(us) idle in SISO RX chain configuration */
+ uint32 total_idle_time_siso;
+ /* Total receive time (us) in SISO RX chain configuration */
+ uint32 total_rx_time_siso;
+ /* Total receive time (us) in MIMO RX chain configuration */
+ uint32 total_rx_time_mimo;
+ /* Total 1-chain transmit time(us) */
+ uint32 total_tx_time_1chain;
+ /* Total 2-chain transmit time(us) */
+ uint32 total_tx_time_2chain;
+ /* Total 3-chain transmit time(us) */
+ uint32 total_tx_time_3chain;
+} wl_mimo_meas_metrics_v1_t;
+
+typedef struct wl_mimo_meas_metrics {
+ uint16 type;
+ uint16 len;
+ /* Total time(us) idle in MIMO RX chain configuration */
+ uint32 total_idle_time_mimo;
+ /* Total time(us) idle in SISO RX chain configuration */
+ uint32 total_idle_time_siso;
+ /* Total receive time (us) in SISO RX chain configuration */
+ uint32 total_rx_time_siso;
+ /* Total receive time (us) in MIMO RX chain configuration */
+ uint32 total_rx_time_mimo;
+ /* Total 1-chain transmit time(us) */
+ uint32 total_tx_time_1chain;
+ /* Total 2-chain transmit time(us) */
+ uint32 total_tx_time_2chain;
+ /* Total 3-chain transmit time(us) */
+ uint32 total_tx_time_3chain;
+ /* End of original, OCL fields start here */
+ /* Total time(us) idle in ocl mode */
+ uint32 total_idle_time_ocl;
+ /* Total receive time (us) in ocl mode */
+ uint32 total_rx_time_ocl;
+ /* End of OCL fields, internal adjustment fields here */
+ /* Total SIFS idle time in MIMO mode */
+ uint32 total_sifs_time_mimo;
+ /* Total SIFS idle time in SISO mode */
+ uint32 total_sifs_time_siso;
+} wl_mimo_meas_metrics_t;
+
+typedef struct wl_pwr_slice_index {
+ uint16 type; /* WL_PWRSTATS_TYPE_SLICE_INDEX */
+ uint16 len;
+
+ uint32 slice_index; /* Slice index for which stats are meant for */
+} wl_pwr_slice_index_t;
+
+typedef struct wl_pwr_tsync_stats {
+ uint16 type; /**< WL_PWRSTATS_TYPE_TSYNC */
+ uint16 len;
+ uint32 avb_uptime; /**< AVB uptime in msec */
+} wl_pwr_tsync_stats_t;
+
+typedef struct wl_pwr_ops_stats {
+ uint16 type; /* WL_PWRSTATS_TYPE_OPS_STATS */
+ uint16 len; /* total length includes fixed fields */
+ uint32 partial_ops_dur; /* Total time(in usec) partial ops duration */
+ uint32 full_ops_dur; /* Total time(in usec) full ops duration */
+} wl_pwr_ops_stats_t;
+
+typedef struct wl_pwr_bcntrim_stats {
+ uint16 type; /* WL_PWRSTATS_TYPE_BCNTRIM_STATS */
+ uint16 len; /* total length includes fixed fields */
+ uint8 associated; /* STA is associated ? */
+ uint8 slice_idx; /* on which slice STA is associated */
+ uint16 pad; /* padding */
+ uint32 slice_beacon_seen; /* number of beacons seen on the Infra
+ * interface on this slice
+ */
+ uint32 slice_beacon_trimmed; /* number beacons actually trimmed on this slice */
+ uint32 total_beacon_seen; /* total number of beacons seen on the Infra interface */
+ uint32 total_beacon_trimmed; /* total beacons actually trimmed */
+} wl_pwr_bcntrim_stats_t;
+
+typedef struct wl_pwr_slice_index_band {
+ uint16 type; /* WL_PWRSTATS_TYPE_SLICE_INDEX_BAND_INFO */
+ uint16 len; /* Total length includes fixed fields */
+ uint16 index; /* Slice Index */
+ int16 bandtype; /* Slice Bandtype */
+} wl_pwr_slice_index_band_t;
+
+typedef struct wl_pwr_psbw_stats {
+ uint16 type; /* WL_PWRSTATS_TYPE_PSBW_STATS */
+ uint16 len; /* total length includes fixed fields */
+ uint8 slice_idx; /* on which slice STA is associated */
+ uint8 pad[3];
+ uint32 slice_enable_dur; /* time(ms) psbw remains enabled on this slice */
+ uint32 total_enable_dur; /* time(ms) psbw remains enabled total */
+} wl_pwr_psbw_stats_t;
/* ##### End of Power Stats section ##### */
-/* IPV4 Arp offloads for ndis context */
+/** IPV4 Arp offloads for ndis context */
+#include <packed_section_start.h>
BWL_PRE_PACKED_STRUCT struct hostip_id {
struct ipv4_addr ipa;
uint8 id;
} BWL_POST_PACKED_STRUCT;
+#include <packed_section_end.h>
/* Return values */
-#define ND_REPLY_PEER 0x1 /* Reply was sent to service NS request from peer */
-#define ND_REQ_SINK 0x2 /* Input packet should be discarded */
-#define ND_FORCE_FORWARD 0X3 /* For the dongle to forward req to HOST */
+#define ND_REPLY_PEER 0x1 /**< Reply was sent to service NS request from peer */
+#define ND_REQ_SINK 0x2 /**< Input packet should be discarded */
+#define ND_FORCE_FORWARD 0X3 /**< For the dongle to forward req to HOST */
-/* Neighbor Solicitation Response Offload IOVAR param */
+/** Neighbor Solicitation Response Offload IOVAR param */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct nd_param {
struct ipv6_addr host_ip[2];
struct ipv6_addr solicit_ip;
@@ -4890,12 +7863,12 @@
uint8 host_mac[ETHER_ADDR_LEN];
uint32 offload_id;
} BWL_POST_PACKED_STRUCT nd_param_t;
+#include <packed_section_end.h>
-typedef BWL_PRE_PACKED_STRUCT struct wl_pfn_roam_thresh {
- uint32 pfn_alert_thresh; /* time in ms */
- uint32 roam_alert_thresh; /* time in ms */
-} BWL_POST_PACKED_STRUCT wl_pfn_roam_thresh_t;
-
+typedef struct wl_pfn_roam_thresh {
+ uint32 pfn_alert_thresh; /**< time in ms */
+ uint32 roam_alert_thresh; /**< time in ms */
+} wl_pfn_roam_thresh_t;
/* Reasons for wl_pmalert_t */
#define PM_DUR_EXCEEDED (1<<0)
@@ -4907,17 +7880,16 @@
#define MIN_PM_ALERT_LEN 9
-/* Data sent in EXCESS_PM_WAKE event */
+/** Data sent in EXCESS_PM_WAKE event */
#define WL_PM_ALERT_VERSION 3
-#define MAX_P2P_BSS_DTIM_PRD 4
-
-/* This structure is for version 3; version 2 will be deprecated in by FW */
+/** This structure is for version 3; version 2 will be deprecated in by FW */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_pmalert {
- uint16 version; /* Version = 3 is TLV format */
- uint16 length; /* Length of entire structure */
- uint32 reasons; /* reason(s) for pm_alert */
- uint8 data[1]; /* TLV data, a series of structures,
+ uint16 version; /**< Version = 3 is TLV format */
+ uint16 length; /**< Length of entire structure */
+ uint32 reasons; /**< reason(s) for pm_alert */
+ uint8 data[1]; /**< TLV data, a series of structures,
* each starting with type and length.
*
* Padded as necessary so each section
@@ -4928,63 +7900,66 @@
* valid len values are 0-4095.
*/
} BWL_POST_PACKED_STRUCT wl_pmalert_t;
+#include <packed_section_end.h>
/* Type values for the data section */
-#define WL_PMALERT_FIXED 0 /* struct wl_pmalert_fixed_t, fixed fields */
-#define WL_PMALERT_PMSTATE 1 /* struct wl_pmalert_pmstate_t, variable */
-#define WL_PMALERT_EVENT_DUR 2 /* struct wl_pmalert_event_dur_t, variable */
-#define WL_PMALERT_UCODE_DBG 3 /* struct wl_pmalert_ucode_dbg_t, variable */
-#define WL_PMALERT_PS_ALLOWED_HIST 4 /* struct wl_pmalert_ps_allowed_history, variable */
-#define WL_PMALERT_EXT_UCODE_DBG 5 /* struct wl_pmalert_ext_ucode_dbg_t, variable */
-#define WL_PMALERT_EPM_START_EVENT_DUR 6 /* struct wl_pmalert_event_dur_t, variable */
+#define WL_PMALERT_FIXED 0 /**< struct wl_pmalert_fixed_t, fixed fields */
+#define WL_PMALERT_PMSTATE 1 /**< struct wl_pmalert_pmstate_t, variable */
+#define WL_PMALERT_EVENT_DUR 2 /**< struct wl_pmalert_event_dur_t, variable */
+#define WL_PMALERT_UCODE_DBG 3 /**< struct wl_pmalert_ucode_dbg_v1, variable */
+#define WL_PMALERT_PS_ALLOWED_HIST 4 /**< struct wl_pmalert_ps_allowed_history, variable */
+#define WL_PMALERT_EXT_UCODE_DBG 5 /**< struct wl_pmalert_ext_ucode_dbg_t, variable */
+#define WL_PMALERT_EPM_START_EVENT_DUR 6 /**< struct wl_pmalert_event_dur_t, variable */
+#define WL_PMALERT_UCODE_DBG_V2 7 /**< struct wl_pmalert_ucode_dbg_v2, variable */
-typedef BWL_PRE_PACKED_STRUCT struct wl_pmalert_fixed {
- uint16 type; /* WL_PMALERT_FIXED */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
- uint32 prev_stats_time; /* msecs */
- uint32 curr_time; /* ms */
- uint32 prev_pm_dur; /* msecs */
- uint32 pm_dur; /* Total sleep time in PM, msecs */
- uint32 prev_mpc_dur; /* msecs */
- uint32 mpc_dur; /* Total sleep time in MPC, msecs */
- uint32 hw_macc; /* HW maccontrol */
- uint32 sw_macc; /* SW maccontrol */
+typedef struct wl_pmalert_fixed {
+ uint16 type; /**< WL_PMALERT_FIXED */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+ uint32 prev_stats_time; /**< msecs */
+ uint32 curr_time; /**< ms */
+ uint32 prev_pm_dur; /**< msecs */
+ uint32 pm_dur; /**< Total sleep time in PM, msecs */
+ uint32 prev_mpc_dur; /**< msecs */
+ uint32 mpc_dur; /**< Total sleep time in MPC, msecs */
+ uint32 hw_macc; /**< HW maccontrol */
+ uint32 sw_macc; /**< SW maccontrol */
/* int32 drifts = remote - local; +ve drift -> local-clk slow */
- int32 last_drift; /* Most recent TSF drift from beacon */
- int32 min_drift; /* Min TSF drift from beacon in magnitude */
- int32 max_drift; /* Max TSF drift from beacon in magnitude */
+ int32 last_drift; /**< Most recent TSF drift from beacon */
+ int32 min_drift; /**< Min TSF drift from beacon in magnitude */
+ int32 max_drift; /**< Max TSF drift from beacon in magnitude */
- uint32 avg_drift; /* Avg TSF drift from beacon */
- uint32 drift_cnt; /* Count of drift readings over which avg_drift was computed */
- uint32 frts_time; /* Cumulative ms spent in data frts since driver load */
- uint32 frts_end_cnt; /* No of times frts ended since driver load */
- uint32 prev_frts_dur; /* Data frts duration at start of pm-period */
- uint32 cal_dur; /* Cumulative ms spent in calibration */
- uint32 prev_cal_dur; /* cal duration at start of pm-period */
-} BWL_POST_PACKED_STRUCT wl_pmalert_fixed_t;
+ uint32 avg_drift; /**< Avg TSF drift from beacon */
+ uint32 drift_cnt; /**< Count of drift readings over which avg_drift was computed */
+ uint32 frts_time; /**< Cumulative ms spent in data frts since driver load */
+ uint32 frts_end_cnt; /**< No of times frts ended since driver load */
+ uint32 prev_frts_dur; /**< Data frts duration at start of pm-period */
+ uint32 cal_dur; /**< Cumulative ms spent in calibration */
+ uint32 prev_cal_dur; /**< cal duration at start of pm-period */
+} wl_pmalert_fixed_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pmalert_pmstate {
- uint16 type; /* WL_PMALERT_PMSTATE */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+typedef struct wl_pmalert_pmstate {
+ uint16 type; /**< WL_PMALERT_PMSTATE */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
- uint8 pmwake_idx; /* for stepping through pm_state */
+ uint8 pmwake_idx; /**< for stepping through pm_state */
uint8 pad[3];
/* Array of pmstate; len of array is based on tlv len */
wlc_pm_debug_t pmstate[1];
-} BWL_POST_PACKED_STRUCT wl_pmalert_pmstate_t;
+} wl_pmalert_pmstate_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pmalert_event_dur {
- uint16 type; /* WL_PMALERT_EVENT_DUR */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+typedef struct wl_pmalert_event_dur {
+ uint16 type; /**< WL_PMALERT_EVENT_DUR */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
/* Array of event_dur, len of array is based on tlv len */
uint32 event_dur[1];
-} BWL_POST_PACKED_STRUCT wl_pmalert_event_dur_t;
+} wl_pmalert_event_dur_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_pmalert_ucode_dbg {
- uint16 type; /* WL_PMALERT_UCODE_DBG */
- uint16 len; /* Up to 4K-1, top 4 bits are reserved */
+#include <packed_section_start.h>
+BWL_PRE_PACKED_STRUCT struct wl_pmalert_ucode_dbg_v1 {
+ uint16 type; /* WL_PMALERT_UCODE_DBG */
+ uint16 len; /* Up to 4K-1, top 4 bits are reserved */
uint32 macctrl;
uint16 m_p2p_hps;
uint32 psm_brc;
@@ -4992,195 +7967,304 @@
uint16 m_p2p_bss_dtim_prd[MAX_P2P_BSS_DTIM_PRD];
uint32 psmdebug[20];
uint32 phydebug[20];
-} BWL_POST_PACKED_STRUCT wl_pmalert_ucode_dbg_t;
+ uint16 M_P2P_BSS[3][12];
+ uint16 M_P2P_PRE_TBTT[3];
+ /* Following is valid only for corerevs<40 */
+ uint16 xmtfifordy;
+
+ /* Following 3 are valid only for 11ac corerevs (>=40) */
+ uint16 psm_maccommand;
+ uint16 txe_status1;
+ uint16 AQMFifoReady;
+} BWL_POST_PACKED_STRUCT;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+BWL_PRE_PACKED_STRUCT struct wl_pmalert_ucode_dbg_v2 {
+ uint16 type; /**< WL_PMALERT_UCODE_DBG_V2 */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+ uint32 macctrl;
+ uint16 m_p2p_hps;
+ uint32 psm_brc;
+ uint32 ifsstat;
+ uint16 m_p2p_bss_dtim_prd[MAX_P2P_BSS_DTIM_PRD];
+ uint32 psmdebug[20];
+ uint32 phydebug[20];
+ uint16 M_P2P_BSS[3][12];
+ uint16 M_P2P_PRE_TBTT[3];
+
+ /* Following is valid only for corerevs<40 */
+ uint16 xmtfifordy;
+
+ /* Following 3 are valid only for 11ac corerevs (>=40) */
+ uint16 psm_maccommand;
+ uint16 txe_status1;
+ uint32 AQMFifoReady;
+} BWL_POST_PACKED_STRUCT;
+#include <packed_section_end.h>
+
+typedef struct wlc_ps_debug {
+ uint32 timestamp; /**< timestamp in millisecond */
+ uint32 ps_mask; /**< reason(s) for disallowing ps */
+} wlc_ps_debug_t;
+
+typedef struct wl_pmalert_ps_allowed_hist {
+ uint16 type; /**< WL_PMALERT_PS_ALLOWED_HIST */
+ uint16 len; /**< Up to 4K-1, top 4 bits are reserved */
+ uint32 ps_allowed_start_idx;
+ /* Array of ps_debug, len of array is based on tlv len */
+ wlc_ps_debug_t ps_debug[1];
+} wl_pmalert_ps_allowed_hist_t;
/* Structures and constants used for "vndr_ie" IOVar interface */
-#define VNDR_IE_CMD_LEN 4 /* length of the set command string:
+#define VNDR_IE_CMD_LEN 4 /**< length of the set command string:
* "add", "del" (+ NUL)
*/
#define VNDR_IE_INFO_HDR_LEN (sizeof(uint32))
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */
- vndr_ie_t vndr_ie_data; /* vendor IE data */
+ uint32 pktflag; /**< bitmask indicating which packet(s) contain this IE */
+ vndr_ie_t vndr_ie_data; /**< vendor IE data */
} BWL_POST_PACKED_STRUCT vndr_ie_info_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- int iecount; /* number of entries in the vndr_ie_list[] array */
- vndr_ie_info_t vndr_ie_list[1]; /* variable size list of vndr_ie_info_t structs */
+ int32 iecount; /**< number of entries in the vndr_ie_list[] array */
+ vndr_ie_info_t vndr_ie_list[1]; /**< variable size list of vndr_ie_info_t structs */
} BWL_POST_PACKED_STRUCT vndr_ie_buf_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- char cmd[VNDR_IE_CMD_LEN]; /* vndr_ie IOVar set command : "add", "del" + NUL */
- vndr_ie_buf_t vndr_ie_buffer; /* buffer containing Vendor IE list information */
+ char cmd[VNDR_IE_CMD_LEN]; /**< vndr_ie IOVar set command : "add", "del" + NUL */
+ vndr_ie_buf_t vndr_ie_buffer; /**< buffer containing Vendor IE list information */
} BWL_POST_PACKED_STRUCT vndr_ie_setbuf_t;
+#include <packed_section_end.h>
-/* tag_ID/length/value_buffer tuple */
+/** tag_ID/length/value_buffer tuple */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint8 id;
uint8 len;
uint8 data[1];
} BWL_POST_PACKED_STRUCT tlv_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */
- tlv_t ie_data; /* IE data */
+ uint32 pktflag; /**< bitmask indicating which packet(s) contain this IE */
+ tlv_t ie_data; /**< IE data */
} BWL_POST_PACKED_STRUCT ie_info_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- int iecount; /* number of entries in the ie_list[] array */
- ie_info_t ie_list[1]; /* variable size list of ie_info_t structs */
+ int32 iecount; /**< number of entries in the ie_list[] array */
+ ie_info_t ie_list[1]; /**< variable size list of ie_info_t structs */
} BWL_POST_PACKED_STRUCT ie_buf_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- char cmd[VNDR_IE_CMD_LEN]; /* ie IOVar set command : "add" + NUL */
- ie_buf_t ie_buffer; /* buffer containing IE list information */
+ char cmd[VNDR_IE_CMD_LEN]; /**< ie IOVar set command : "add" + NUL */
+ ie_buf_t ie_buffer; /**< buffer containing IE list information */
} BWL_POST_PACKED_STRUCT ie_setbuf_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 pktflag; /* bitmask indicating which packet(s) contain this IE */
- uint8 id; /* IE type */
+ uint32 pktflag; /**< bitmask indicating which packet(s) contain this IE */
+ uint8 id; /**< IE type */
} BWL_POST_PACKED_STRUCT ie_getbuf_t;
+#include <packed_section_end.h>
/* structures used to define format of wps ie data from probe requests */
/* passed up to applications via iovar "prbreq_wpsie" */
-typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_hdr {
+typedef struct sta_prbreq_wps_ie_hdr {
struct ether_addr staAddr;
uint16 ieLen;
-} BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_hdr_t;
+} sta_prbreq_wps_ie_hdr_t;
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_data {
sta_prbreq_wps_ie_hdr_t hdr;
uint8 ieData[1];
} BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_data_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct sta_prbreq_wps_ie_list {
uint32 totLen;
uint8 ieDataList[1];
} BWL_POST_PACKED_STRUCT sta_prbreq_wps_ie_list_t;
+#include <packed_section_end.h>
-
-#ifdef WLMEDIA_TXFAILEVENT
-typedef BWL_PRE_PACKED_STRUCT struct {
- char dest[ETHER_ADDR_LEN]; /* destination MAC */
- uint8 prio; /* Packet Priority */
- uint8 flags; /* Flags */
- uint32 tsf_l; /* TSF timer low */
- uint32 tsf_h; /* TSF timer high */
- uint16 rates; /* Main Rates */
- uint16 txstatus; /* TX Status */
-} BWL_POST_PACKED_STRUCT txfailinfo_t;
-#endif /* WLMEDIA_TXFAILEVENT */
-
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint32 flags;
- chanspec_t chanspec; /* txpwr report for this channel */
- chanspec_t local_chanspec; /* channel on which we are associated */
- uint8 local_max; /* local max according to the AP */
- uint8 local_constraint; /* local constraint according to the AP */
- int8 antgain[2]; /* Ant gain for each band - from SROM */
- uint8 rf_cores; /* count of RF Cores being reported */
- uint8 est_Pout[4]; /* Latest tx power out estimate per RF chain */
- uint8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain w/o adjustment */
- uint8 est_Pout_cck; /* Latest CCK tx power out estimate */
- uint8 tx_power_max[4]; /* Maximum target power among all rates */
- uint tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */
- int8 sar; /* SAR limit for display by wl executable */
- int8 channel_bandwidth; /* 20, 40 or 80 MHz bandwidth? */
- uint8 version; /* Version of the data format wlu <--> driver */
- uint8 display_core; /* Displayed curpower core */
- int8 target_offsets[4]; /* Target power offsets for current rate per core */
- uint32 last_tx_ratespec; /* Ratespec for last transmition */
-#ifdef WLTXPWR_PER_CORE
- int8 user_target[WL_TXPWR_CORE_MAX];
-#if WL_TXPWR_CORE_MAX < 4
- int8 padding[sizeof(uint32) - WL_TXPWR_CORE_MAX];
-#else
-#error "Please fix this padding for > 4 cores"
-#endif /* WL_TXPWR_CORE_MAX */
-#else
- uint32 user_target;
-#endif /* WLTXPWR_PER_CORE */
- uint32 ppr_len; /* length of each ppr serialization buffer */
+ chanspec_t chanspec; /**< txpwr report for this channel */
+ chanspec_t local_chanspec; /**< channel on which we are associated */
+ uint8 local_max; /**< local max according to the AP */
+ uint8 local_constraint; /**< local constraint according to the AP */
+ int8 antgain[2]; /**< Ant gain for each band - from SROM */
+ uint8 rf_cores; /**< count of RF Cores being reported */
+ uint8 est_Pout[4]; /**< Latest tx power out estimate per RF chain */
+ uint8 est_Pout_act[4]; /**< Latest tx power out estimate per RF chain w/o adjustment */
+ uint8 est_Pout_cck; /**< Latest CCK tx power out estimate */
+ uint8 tx_power_max[4]; /**< Maximum target power among all rates */
+ uint32 tx_power_max_rate_ind[4]; /**< Index of the rate with the max target power */
+ int8 sar; /**< SAR limit for display by wl executable */
+ int8 channel_bandwidth; /**< 20, 40 or 80 MHz bandwidth? */
+ uint8 version; /**< Version of the data format wlu <--> driver */
+ uint8 display_core; /**< Displayed curpower core */
+ int8 target_offsets[4]; /**< Target power offsets for current rate per core */
+ uint32 last_tx_ratespec; /**< Ratespec for last transmition */
+ uint32 user_target; /**< user limit */
+ uint32 ppr_len; /**< length of each ppr serialization buffer */
int8 SARLIMIT[MAX_STREAMS_SUPPORTED];
- uint8 pprdata[1]; /* ppr serialization buffer */
-} BWL_POST_PACKED_STRUCT tx_pwr_rpt_t;
+ uint8 pprdata[1]; /**< ppr serialization buffer */
+} BWL_POST_PACKED_STRUCT tx_pwr_rpt_v1_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct {
+ uint32 flags;
+ chanspec_t chanspec; /**< txpwr report for this channel */
+ chanspec_t local_chanspec; /**< channel on which we are associated */
+ uint8 local_max; /**< local max according to the AP */
+ uint8 local_constraint; /**< local constraint according to the AP */
+ int8 antgain[3]; /**< Ant gain for each band - from SROM */
+ uint8 rf_cores; /**< count of RF Cores being reported */
+ uint8 est_Pout[4]; /**< Latest tx power out estimate per RF chain */
+ uint8 est_Pout_act[4]; /**< Latest tx power out estimate per RF chain w/o adjustment */
+ uint8 est_Pout_cck; /**< Latest CCK tx power out estimate */
+ uint8 tx_power_max[4]; /**< Maximum target power among all rates */
+ uint32 tx_power_max_rate_ind[4]; /**< Index of the rate with the max target power */
+ int8 sar; /**< SAR limit for display by wl executable */
+ int8 channel_bandwidth; /**< 20, 40 or 80 MHz bandwidth? */
+ uint8 version; /**< Version of the data format wlu <--> driver */
+ uint8 display_core; /**< Displayed curpower core */
+ int8 target_offsets[4]; /**< Target power offsets for current rate per core */
+ uint32 last_tx_ratespec; /**< Ratespec for last transmition */
+ uint32 user_target; /**< user limit */
+ uint32 ppr_len; /**< length of each ppr serialization buffer */
+ int8 SARLIMIT[MAX_STREAMS_SUPPORTED];
+ uint8 pprdata[1]; /**< ppr serialization buffer */
+} BWL_POST_PACKED_STRUCT tx_pwr_rpt_v2_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct {
+ uint8 version; /* Version of the data format wlu <--> driver */
+ uint32 length; /* Length token */
+} BWL_POST_PACKED_STRUCT tx_pwr_rpt_version_t;
+#include <packed_section_end.h>
+
+#ifdef TBAND
+typedef tx_pwr_rpt_v2_t tx_pwr_rpt_t;
+#else
+typedef tx_pwr_rpt_v1_t tx_pwr_rpt_t;
+#endif /* TBAND */
+
+#define TXPWR_RPT_LEN_TOKEN 0x5649414e /* Spells VIAN */
+#define TXPWR_RPT_VERSION_V1 1
+#define TXPWR_RPT_VERSION_V2 2
+
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
struct ipv4_addr ipv4_addr;
struct ether_addr nexthop;
} BWL_POST_PACKED_STRUCT ibss_route_entry_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint32 num_entry;
ibss_route_entry_t route_entry[1];
} BWL_POST_PACKED_STRUCT ibss_route_tbl_t;
+#include <packed_section_end.h>
#define MAX_IBSS_ROUTE_TBL_ENTRY 64
#define TXPWR_TARGET_VERSION 0
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
- int32 version; /* version number */
- chanspec_t chanspec; /* txpwr report for this channel */
- int8 txpwr[WL_STA_ANT_MAX]; /* Max tx target power, in qdb */
- uint8 rf_cores; /* count of RF Cores being reported */
+ int32 version; /**< version number */
+ chanspec_t chanspec; /**< txpwr report for this channel */
+ int8 txpwr[WL_STA_ANT_MAX]; /**< Max tx target power, in qdb */
+ uint8 rf_cores; /**< count of RF Cores being reported */
} BWL_POST_PACKED_STRUCT txpwr_target_max_t;
+#include <packed_section_end.h>
#define BSS_PEER_INFO_PARAM_CUR_VER 0
-/* Input structure for IOV_BSS_PEER_INFO */
+/** Input structure for IOV_BSS_PEER_INFO */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint16 version;
- struct ether_addr ea; /* peer MAC address */
+ struct ether_addr ea; /**< peer MAC address */
} BWL_POST_PACKED_STRUCT bss_peer_info_param_t;
+#include <packed_section_end.h>
#define BSS_PEER_INFO_CUR_VER 0
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint16 version;
struct ether_addr ea;
int32 rssi;
- uint32 tx_rate; /* current tx rate */
- uint32 rx_rate; /* current rx rate */
- wl_rateset_t rateset; /* rateset in use */
- uint32 age; /* age in seconds */
+ uint32 tx_rate; /**< current tx rate */
+ uint32 rx_rate; /**< current rx rate */
+ wl_rateset_t rateset; /**< rateset in use */
+ uint32 age; /**< age in seconds */
} BWL_POST_PACKED_STRUCT bss_peer_info_t;
+#include <packed_section_end.h>
#define BSS_PEER_LIST_INFO_CUR_VER 0
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint16 version;
- uint16 bss_peer_info_len; /* length of bss_peer_info_t */
- uint32 count; /* number of peer info */
- bss_peer_info_t peer_info[1]; /* peer info */
+ uint16 bss_peer_info_len; /**< length of bss_peer_info_t */
+ uint32 count; /**< number of peer info */
+ bss_peer_info_t peer_info[1]; /**< peer info */
} BWL_POST_PACKED_STRUCT bss_peer_list_info_t;
+#include <packed_section_end.h>
#define BSS_PEER_LIST_INFO_FIXED_LEN OFFSETOF(bss_peer_list_info_t, peer_info)
#define AIBSS_BCN_FORCE_CONFIG_VER_0 0
-/* structure used to configure AIBSS beacon force xmit */
+/** structure used to configure AIBSS beacon force xmit */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint16 version;
uint16 len;
- uint32 initial_min_bcn_dur; /* dur in ms to check a bcn in bcn_flood period */
- uint32 min_bcn_dur; /* dur in ms to check a bcn after bcn_flood period */
- uint32 bcn_flood_dur; /* Initial bcn xmit period in ms */
+ uint32 initial_min_bcn_dur; /**< dur in ms to check a bcn in bcn_flood period */
+ uint32 min_bcn_dur; /**< dur in ms to check a bcn after bcn_flood period */
+ uint32 bcn_flood_dur; /**< Initial bcn xmit period in ms */
} BWL_POST_PACKED_STRUCT aibss_bcn_force_config_t;
+#include <packed_section_end.h>
#define AIBSS_TXFAIL_CONFIG_VER_0 0
#define AIBSS_TXFAIL_CONFIG_VER_1 1
#define AIBSS_TXFAIL_CONFIG_CUR_VER AIBSS_TXFAIL_CONFIG_VER_1
-/* structure used to configure aibss tx fail event */
+/** structure used to configure aibss tx fail event */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct {
uint16 version;
uint16 len;
- uint32 bcn_timeout; /* dur in seconds to receive 1 bcn */
- uint32 max_tx_retry; /* no of consecutive no acks to send txfail event */
- uint32 max_atim_failure; /* no of consecutive atim failure */
+ uint32 bcn_timeout; /**< dur in seconds to receive 1 bcn */
+ uint32 max_tx_retry; /**< no of consecutive no acks to send txfail event */
+ uint32 max_atim_failure; /**< no of consecutive atim failure */
} BWL_POST_PACKED_STRUCT aibss_txfail_config_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_aibss_if {
uint16 version;
uint16 len;
@@ -5188,50 +8272,156 @@
struct ether_addr addr;
chanspec_t chspec;
} BWL_POST_PACKED_STRUCT wl_aibss_if_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wlc_ipfo_route_entry {
struct ipv4_addr ip_addr;
struct ether_addr nexthop;
} BWL_POST_PACKED_STRUCT wlc_ipfo_route_entry_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wlc_ipfo_route_tbl {
uint32 num_entry;
wlc_ipfo_route_entry_t route_entry[1];
} BWL_POST_PACKED_STRUCT wlc_ipfo_route_tbl_t;
+#include <packed_section_end.h>
-#ifdef WL_OLDPPR
-#define WL_CLM_NUM_RATES 178
-typedef BWL_PRE_PACKED_STRUCT struct {
- uint32 flags;
- chanspec_t chanspec; /* txpwr report for this channel */
- chanspec_t local_chanspec; /* channel on which we are associated */
- uint8 local_max; /* local max according to the AP */
- uint8 local_constraint; /* local constraint according to the AP */
- int8 antgain[2]; /* Ant gain for each band - from SROM */
- uint8 rf_cores; /* count of RF Cores being reported */
- uint8 est_Pout[4]; /* Latest tx power out estimate per RF chain */
- uint8 est_Pout_act[4]; /* Latest tx power out estimate per RF chain
- * without adjustment
- */
- uint8 est_Pout_cck; /* Latest CCK tx power out estimate */
- uint8 tx_power_max[4]; /* Maximum target power among all rates */
- uint8 tx_power_max_rate_ind[4]; /* Index of the rate with the max target power */
- uint8 user_limit; /* User limit */
- int8 clm_limits[WL_CLM_NUM_RATES]; /* regulatory limits - 20 or 40MHz */
- int8 clm_limits20in40[WL_CLM_NUM_RATES]; /* regulatory limits - 20in40MHz */
- int8 sar; /* SAR limit for display by wl executable */
- bool bandwidth_is_20MHz; /* 20 or 40MHz bandwidth? */
- uint board_limit_len; /* board limit buffer length */
- uint target_len; /* target limit buffer length */
- uint8 ppr_buf[1]; /* ppr serialization buffer */
-} BWL_POST_PACKED_STRUCT tx_pwr_rpt_t_old;
-#endif /* WL_OLDPPR */
+/* Version of wlc_btc_stats_t structure.
+ * Increment whenever a change is made to wlc_btc_stats_t
+ */
+#define BTCX_STATS_VER_4 4
+typedef struct wlc_btc_stats_v4 {
+ uint16 version; /* version number of struct */
+ uint16 valid; /* Size of this struct */
+ uint32 stats_update_timestamp; /* tStamp when data is updated. */
+ uint32 btc_status; /* Hybrid/TDM indicator: Bit2:Hybrid, Bit1:TDM,Bit0:CoexEnabled */
+ uint32 bt_req_type_map; /* BT Antenna Req types since last stats sample */
+ uint32 bt_req_cnt; /* #BT antenna requests since last stats sampl */
+ uint32 bt_gnt_cnt; /* #BT antenna grants since last stats sample */
+ uint32 bt_gnt_dur; /* usec BT owns antenna since last stats sample */
+ uint16 bt_abort_cnt; /* #Times WL was preempted due to BT since WL up */
+ uint16 bt_rxf1ovfl_cnt; /* #Time PSNULL retry count exceeded since WL up */
+ uint16 bt_latency_cnt; /* #Time ucode high latency detected since WL up */
+ uint16 bt_succ_pm_protect_cnt; /* successful PM protection */
+ uint16 bt_succ_cts_cnt; /* successful CTS2A protection */
+ uint16 bt_wlan_tx_preempt_cnt; /* WLAN TX Preemption */
+ uint16 bt_wlan_rx_preempt_cnt; /* WLAN RX Preemption */
+ uint16 bt_ap_tx_after_pm_cnt; /* AP TX even after PM protection */
+ uint16 bt_peraud_cumu_gnt_cnt; /* Grant cnt for periodic audio */
+ uint16 bt_peraud_cumu_deny_cnt; /* Deny cnt for periodic audio */
+ uint16 bt_a2dp_cumu_gnt_cnt; /* Grant cnt for A2DP */
+ uint16 bt_a2dp_cumu_deny_cnt; /* Deny cnt for A2DP */
+ uint16 bt_sniff_cumu_gnt_cnt; /* Grant cnt for Sniff */
+ uint16 bt_sniff_cumu_deny_cnt; /* Deny cnt for Sniff */
+ uint16 bt_dcsn_map; /* Accumulated decision bitmap once Ant grant */
+ uint16 bt_dcsn_cnt; /* Accumulated decision bitmap counters once Ant grant */
+ uint16 bt_a2dp_hiwat_cnt; /* Ant grant by a2dp high watermark */
+ uint16 bt_datadelay_cnt; /* Ant grant by acl/a2dp datadelay */
+ uint16 bt_crtpri_cnt; /* Ant grant by critical BT task */
+ uint16 bt_pri_cnt; /* Ant grant by high BT task */
+ uint16 a2dpbuf1cnt; /* Ant request with a2dp buffercnt 1 */
+ uint16 a2dpbuf2cnt; /* Ant request with a2dp buffercnt 2 */
+ uint16 a2dpbuf3cnt; /* Ant request with a2dp buffercnt 3 */
+ uint16 a2dpbuf4cnt; /* Ant request with a2dp buffercnt 4 */
+ uint16 a2dpbuf5cnt; /* Ant request with a2dp buffercnt 5 */
+ uint16 a2dpbuf6cnt; /* Ant request with a2dp buffercnt 6 */
+ uint16 a2dpbuf7cnt; /* Ant request with a2dp buffercnt 7 */
+ uint16 a2dpbuf8cnt; /* Ant request with a2dp buffercnt 8 */
+ uint16 antgrant_lt10ms; /* Ant grant duration cnt 0~10ms */
+ uint16 antgrant_lt30ms; /* Ant grant duration cnt 10~30ms */
+ uint16 antgrant_lt60ms; /* Ant grant duration cnt 30~60ms */
+ uint16 antgrant_ge60ms; /* Ant grant duration cnt 60~ms */
+} wlc_btc_stats_v4_t;
+
+#define BTCX_STATS_VER_3 3
+
+typedef struct wlc_btc_stats_v3 {
+ uint16 version; /* version number of struct */
+ uint16 valid; /* Size of this struct */
+ uint32 stats_update_timestamp; /* tStamp when data is updated. */
+ uint32 btc_status; /* Hybrid/TDM indicator: Bit2:Hybrid, Bit1:TDM,Bit0:CoexEnabled */
+ uint32 bt_req_type_map; /* BT Antenna Req types since last stats sample */
+ uint32 bt_req_cnt; /* #BT antenna requests since last stats sampl */
+ uint32 bt_gnt_cnt; /* #BT antenna grants since last stats sample */
+ uint32 bt_gnt_dur; /* usec BT owns antenna since last stats sample */
+ uint16 bt_abort_cnt; /* #Times WL was preempted due to BT since WL up */
+ uint16 bt_rxf1ovfl_cnt; /* #Time PSNULL retry count exceeded since WL up */
+ uint16 bt_latency_cnt; /* #Time ucode high latency detected since WL up */
+ uint16 rsvd; /* pad to align struct to 32bit bndry */
+ uint16 bt_succ_pm_protect_cnt; /* successful PM protection */
+ uint16 bt_succ_cts_cnt; /* successful CTS2A protection */
+ uint16 bt_wlan_tx_preempt_cnt; /* WLAN TX Preemption */
+ uint16 bt_wlan_rx_preempt_cnt; /* WLAN RX Preemption */
+ uint16 bt_ap_tx_after_pm_cnt; /* AP TX even after PM protection */
+ uint16 bt_peraud_cumu_gnt_cnt; /* Grant cnt for periodic audio */
+ uint16 bt_peraud_cumu_deny_cnt; /* Deny cnt for periodic audio */
+ uint16 bt_a2dp_cumu_gnt_cnt; /* Grant cnt for A2DP */
+ uint16 bt_a2dp_cumu_deny_cnt; /* Deny cnt for A2DP */
+ uint16 bt_sniff_cumu_gnt_cnt; /* Grant cnt for Sniff */
+ uint16 bt_sniff_cumu_deny_cnt; /* Deny cnt for Sniff */
+ uint8 pad; /* Padding */
+ uint8 slice_index; /* Slice to report */
+} wlc_btc_stats_v3_t;
+
+#define BTCX_STATS_VER_2 2
+
+typedef struct wlc_btc_stats_v2 {
+ uint16 version; /* version number of struct */
+ uint16 valid; /* Size of this struct */
+ uint32 stats_update_timestamp; /* tStamp when data is updated. */
+ uint32 btc_status; /* Hybrid/TDM indicator: Bit2:Hybrid, Bit1:TDM,Bit0:CoexEnabled */
+ uint32 bt_req_type_map; /* BT Antenna Req types since last stats sample */
+ uint32 bt_req_cnt; /* #BT antenna requests since last stats sampl */
+ uint32 bt_gnt_cnt; /* #BT antenna grants since last stats sample */
+ uint32 bt_gnt_dur; /* usec BT owns antenna since last stats sample */
+ uint16 bt_abort_cnt; /* #Times WL was preempted due to BT since WL up */
+ uint16 bt_rxf1ovfl_cnt; /* #Time PSNULL retry count exceeded since WL up */
+ uint16 bt_latency_cnt; /* #Time ucode high latency detected since WL up */
+ uint16 rsvd; /* pad to align struct to 32bit bndry */
+} wlc_btc_stats_v2_t;
+
+/* Durations for each bt task in millisecond */
+#define WL_BTCX_DURSTATS_VER_1 (1u)
+typedef struct wlc_btcx_durstats_v1 {
+ uint16 version; /* version number of struct */
+ uint16 valid; /* validity of this struct */
+ uint32 stats_update_timestamp; /* tStamp when data is updated */
+ uint16 bt_acl_dur; /* acl duration in ms */
+ uint16 bt_sco_dur; /* sco duration in ms */
+ uint16 bt_esco_dur; /* esco duration in ms */
+ uint16 bt_a2dp_dur; /* a2dp duration in ms */
+ uint16 bt_sniff_dur; /* sniff duration in ms */
+ uint16 bt_pscan_dur; /* page scan duration in ms */
+ uint16 bt_iscan_dur; /* inquiry scan duration in ms */
+ uint16 bt_page_dur; /* paging duration in ms */
+ uint16 bt_inquiry_dur; /* inquiry duration in ms */
+ uint16 bt_mss_dur; /* mss duration in ms */
+ uint16 bt_park_dur; /* park duration in ms */
+ uint16 bt_rssiscan_dur; /* rssiscan duration in ms */
+ uint16 bt_iscan_sco_dur; /* inquiry scan sco duration in ms */
+ uint16 bt_pscan_sco_dur; /* page scan sco duration in ms */
+ uint16 bt_tpoll_dur; /* tpoll duration in ms */
+ uint16 bt_sacq_dur; /* sacq duration in ms */
+ uint16 bt_sdata_dur; /* sdata duration in ms */
+ uint16 bt_rs_listen_dur; /* rs listen duration in ms */
+ uint16 bt_rs_burst_dur; /* rs brust duration in ms */
+ uint16 bt_ble_adv_dur; /* ble adv duration in ms */
+ uint16 bt_ble_scan_dur; /* ble scan duration in ms */
+ uint16 bt_ble_init_dur; /* ble init duration in ms */
+ uint16 bt_ble_conn_dur; /* ble connection duration in ms */
+ uint16 bt_task_lmp_dur; /* lmp duration in ms */
+ uint16 bt_esco_retran_dur; /* esco retransmission duration in ms */
+ uint16 bt_task26_dur; /* task26 duration in ms */
+ uint16 bt_task27_dur; /* task27 duration in ms */
+ uint16 bt_task28_dur; /* task28 duration in ms */
+ uint16 bt_task_pred_dur; /* prediction task duration in ms */
+ uint16 bt_multihid_dur; /* multihid duration in ms */
+} wlc_btcx_durstats_v1_t;
#define WL_IPFO_ROUTE_TBL_FIXED_LEN 4
#define WL_MAX_IPFO_ROUTE_TBL_ENTRY 64
-
-/* no strict structure packing */
-#include <packed_section_end.h>
/* Global ASSERT Logging */
#define ASSERTLOG_CUR_VER 0x0100
@@ -5240,7 +8430,7 @@
typedef struct assert_record {
uint32 time;
uint8 seq_num;
- char str[MAX_ASSRTSTR_LEN];
+ int8 str[MAX_ASSRTSTR_LEN];
} assert_record_t;
typedef struct assertlog_results {
@@ -5252,40 +8442,71 @@
#define LOGRRC_FIX_LEN 8
#define IOBUF_ALLOWED_NUM_OF_LOGREC(type, len) ((len - LOGRRC_FIX_LEN)/sizeof(type))
-
-
+/* BCMWAPI_WAI */
+#define IV_LEN 16
+ struct wapi_sta_msg_t
+ {
+ uint16 msg_type;
+ uint16 datalen;
+ uint8 vap_mac[6];
+ uint8 reserve_data1[2];
+ uint8 sta_mac[6];
+ uint8 reserve_data2[2];
+ uint8 gsn[IV_LEN];
+ uint8 wie[TLV_BODY_LEN_MAX + TLV_HDR_LEN]; /* 257 */
+ uint8 pad[3]; /* padding for alignment */
+ };
+/* #endif BCMWAPI_WAI */
/* chanim acs record */
typedef struct {
- bool valid;
+ uint8 valid;
uint8 trigger;
chanspec_t selected_chspc;
int8 bgnoise;
uint32 glitch_cnt;
uint8 ccastats;
uint8 chan_idle;
- uint timestamp;
+ uint32 timestamp;
} chanim_acs_record_t;
typedef struct {
chanim_acs_record_t acs_record[CHANIM_ACS_RECORD];
uint8 count;
- uint timestamp;
+ uint32 timestamp;
} wl_acs_record_t;
- typedef struct chanim_stats {
- uint32 glitchcnt; /* normalized as per second count */
- uint32 badplcp; /* normalized as per second count */
- uint8 ccastats[CCASTATS_MAX]; /* normalized as 0-255 */
- int8 bgnoise; /* background noise level (in dBm) */
- chanspec_t chanspec; /* ctrl chanspec of the interface */
- uint32 timestamp; /* time stamp at which the stats are collected */
- uint32 bphy_glitchcnt; /* normalized as per second count */
- uint32 bphy_badplcp; /* normalized as per second count */
- uint8 chan_idle; /* normalized as 0~255 */
- } chanim_stats_t;
+#define WL_CHANIM_STATS_V2 2
+#define CCASTATS_V2_MAX 9
+typedef struct chanim_stats_v2 {
+ uint32 glitchcnt; /**< normalized as per second count */
+ uint32 badplcp; /**< normalized as per second count */
+ uint8 ccastats[CCASTATS_V2_MAX]; /**< normalized as 0-255 */
+ int8 bgnoise; /**< background noise level (in dBm) */
+ chanspec_t chanspec; /**< ctrl chanspec of the interface */
+ uint32 timestamp; /**< time stamp at which the stats are collected */
+ uint32 bphy_glitchcnt; /**< normalized as per second count */
+ uint32 bphy_badplcp; /**< normalized as per second count */
+ uint8 chan_idle; /**< normalized as 0~255 */
+ uint8 PAD[3];
+} chanim_stats_v2_t;
-#define WL_CHANIM_STATS_VERSION 2
+#define CCASTATS_V3_MAX 10
+typedef struct chanim_stats {
+ uint32 glitchcnt; /**< normalized as per second count */
+ uint32 badplcp; /**< normalized as per second count */
+ uint8 ccastats[CCASTATS_V3_MAX]; /**< normalized as 0-255 */
+ int8 bgnoise; /**< background noise level (in dBm) */
+ uint8 pad_1[11 - CCASTATS_V3_MAX];
+ chanspec_t chanspec; /**< ctrl chanspec of the interface */
+ uint8 pad_2[2];
+ uint32 timestamp; /**< time stamp at which the stats are collected */
+ uint32 bphy_glitchcnt; /**< normalized as per second count */
+ uint32 bphy_badplcp; /**< normalized as per second count */
+ uint8 chan_idle; /**< normalized as 0~255 */
+ uint8 PAD[3];
+} chanim_stats_t;
+#define WL_CHANIM_STATS_VERSION 3
typedef struct {
uint32 buflen;
uint32 version;
@@ -5295,10 +8516,10 @@
#define WL_CHANIM_STATS_FIXED_LEN OFFSETOF(wl_chanim_stats_t, stats)
-/* Noise measurement metrics. */
+/** Noise measurement metrics. */
#define NOISE_MEASURE_KNOISE 0x1
-/* scb probe parameter */
+/** scb probe parameter */
typedef struct {
uint32 scb_timeout;
uint32 scb_activity_time;
@@ -5308,20 +8529,21 @@
/* structure/defines for selective mgmt frame (smf) stats support */
#define SMFS_VERSION 1
-/* selected mgmt frame (smf) stats element */
+/** selected mgmt frame (smf) stats element */
typedef struct wl_smfs_elem {
uint32 count;
- uint16 code; /* SC or RC code */
+ uint16 code; /**< SC or RC code */
+ uint8 PAD[2];
} wl_smfs_elem_t;
typedef struct wl_smf_stats {
uint32 version;
- uint16 length; /* reserved for future usage */
+ uint16 length; /**< reserved for future usage */
uint8 type;
uint8 codetype;
uint32 ignored_cnt;
uint32 malformed_cnt;
- uint32 count_total; /* count included the interested group */
+ uint32 count_total; /**< count included the interested group */
wl_smfs_elem_t elem[1];
} wl_smf_stats_t;
@@ -5343,7 +8565,7 @@
SMFS_TYPE_MAX
} smfs_type_t;
-#ifdef PHYMON
+/* #ifdef PHYMON */
#define PHYMON_VERSION 1
@@ -5360,84 +8582,88 @@
int8 tx_iqlocal_fi;
int8 tx_iqlocal_fq;
- /* Rx IQ calibration coeffs */
+ /** Rx IQ calibration coeffs */
int16 rx_iqcal_a;
int16 rx_iqcal_b;
- uint8 tx_iqlocal_pwridx; /* Tx Power Index for Tx IQ/LO calibration */
- uint32 papd_epsilon_table[64]; /* PAPD epsilon table */
- int16 papd_epsilon_offset; /* PAPD epsilon offset */
- uint8 curr_tx_pwrindex; /* Tx power index */
- int8 idle_tssi; /* Idle TSSI */
- int8 est_tx_pwr; /* Estimated Tx Power (dB) */
- int8 est_rx_pwr; /* Estimated Rx Power (dB) from RSSI */
- uint16 rx_gaininfo; /* Rx gain applied on last Rx pkt */
- uint16 init_gaincode; /* initgain required for ACI */
+ uint8 tx_iqlocal_pwridx; /**< Tx Power Index for Tx IQ/LO calibration */
+ uint8 PAD[3];
+ uint32 papd_epsilon_table[64]; /**< PAPD epsilon table */
+ int16 papd_epsilon_offset; /**< PAPD epsilon offset */
+ uint8 curr_tx_pwrindex; /**< Tx power index */
+ int8 idle_tssi; /**< Idle TSSI */
+ int8 est_tx_pwr; /**< Estimated Tx Power (dB) */
+ int8 est_rx_pwr; /**< Estimated Rx Power (dB) from RSSI */
+ uint16 rx_gaininfo; /**< Rx gain applied on last Rx pkt */
+ uint16 init_gaincode; /**< initgain required for ACI */
int8 estirr_tx;
int8 estirr_rx;
-
} wl_phycal_core_state_t;
typedef struct wl_phycal_state {
- int version;
- int8 num_phy_cores; /* number of cores */
- int8 curr_temperature; /* on-chip temperature sensor reading */
- chanspec_t chspec; /* channspec for this state */
- bool aci_state; /* ACI state: ON/OFF */
- uint16 crsminpower; /* crsminpower required for ACI */
- uint16 crsminpowerl; /* crsminpowerl required for ACI */
- uint16 crsminpoweru; /* crsminpoweru required for ACI */
+ int32 version;
+ int8 num_phy_cores; /**< number of cores */
+ int8 curr_temperature; /**< on-chip temperature sensor reading */
+ chanspec_t chspec; /**< channspec for this state */
+ uint8 aci_state; /**< ACI state: ON/OFF */
+ uint8 PAD;
+ uint16 crsminpower; /**< crsminpower required for ACI */
+ uint16 crsminpowerl; /**< crsminpowerl required for ACI */
+ uint16 crsminpoweru; /**< crsminpoweru required for ACI */
wl_phycal_core_state_t phycal_core[1];
} wl_phycal_state_t;
#define WL_PHYCAL_STAT_FIXED_LEN OFFSETOF(wl_phycal_state_t, phycal_core)
-#endif /* PHYMON */
+/* endif PHYMON */
-/* discovery state */
+/** discovery state */
typedef struct wl_p2p_disc_st {
- uint8 state; /* see state */
- chanspec_t chspec; /* valid in listen state */
- uint16 dwell; /* valid in listen state, in ms */
+ uint8 state; /**< see state */
+ uint8 PAD;
+ chanspec_t chspec; /**< valid in listen state */
+ uint16 dwell; /**< valid in listen state, in ms */
} wl_p2p_disc_st_t;
-/* scan request */
+/** scan request */
typedef struct wl_p2p_scan {
- uint8 type; /* 'S' for WLC_SCAN, 'E' for "escan" */
+ uint8 type; /**< 'S' for WLC_SCAN, 'E' for "escan" */
uint8 reserved[3];
/* scan or escan parms... */
} wl_p2p_scan_t;
-/* i/f request */
+/** i/f request */
typedef struct wl_p2p_if {
struct ether_addr addr;
- uint8 type; /* see i/f type */
- chanspec_t chspec; /* for p2p_ifadd GO */
+ uint8 type; /**< see i/f type */
+ uint8 PAD;
+ chanspec_t chspec; /**< for p2p_ifadd GO */
} wl_p2p_if_t;
-/* i/f query */
+/** i/f query */
typedef struct wl_p2p_ifq {
- uint bsscfgidx;
+ uint32 bsscfgidx;
char ifname[BCM_MSG_IFNAME_MAX];
} wl_p2p_ifq_t;
-/* OppPS & CTWindow */
+/** OppPS & CTWindow */
typedef struct wl_p2p_ops {
- uint8 ops; /* 0: disable 1: enable */
- uint8 ctw; /* >= 10 */
+ uint8 ops; /**< 0: disable 1: enable */
+ uint8 ctw; /**< >= 10 */
} wl_p2p_ops_t;
-/* absence and presence request */
+/** absence and presence request */
typedef struct wl_p2p_sched_desc {
uint32 start;
uint32 interval;
uint32 duration;
- uint32 count; /* see count */
+ uint32 count; /**< see count */
} wl_p2p_sched_desc_t;
typedef struct wl_p2p_sched {
- uint8 type; /* see schedule type */
- uint8 action; /* see schedule action */
- uint8 option; /* see schedule option */
+ uint8 type; /**< see schedule type */
+ uint8 action; /**< see schedule action */
+ uint8 option; /**< see schedule option */
+ uint8 PAD;
wl_p2p_sched_desc_t desc[1];
} wl_p2p_sched_t;
@@ -5447,59 +8673,59 @@
uint8 wfds_hash[6];
uint8 name_len;
uint8 service_name[MAX_WFDS_SVC_NAME_LEN];
+ uint8 PAD[3];
} wl_p2p_wfds_hash_t;
+typedef struct wl_p2p_config_params {
+ uint16 enable; /**< 0: disable 1: enable */
+ uint16 chanspec; /* GO chanspec */
+ wlc_ssid_t ssid; /* SSID */
+} wl_p2p_config_params_t;
+
typedef struct wl_bcmdcs_data {
- uint reason;
+ uint32 reason;
chanspec_t chspec;
+ uint8 PAD[2];
} wl_bcmdcs_data_t;
-
-
-/* NAT configuration */
+/* ifdef EXT_STA */
+/**
+ * Format of IHV data passed to OID_DOT11_NIC_SPECIFIC_EXTENSION.
+ */
+typedef struct _IHV_NIC_SPECIFIC_EXTENSION {
+ uint8 oui[4]; /**< vendor specific OUI value */
+ uint32 event; /**< event code */
+ uint8 ihvData[1]; /**< ihv data */
+} IHV_NIC_SPECIFIC_EXTENSION, *PIHV_NIC_SPECIFIC_EXTENSION;
+#define IHV_NIC_SPECIFIC_EXTENTION_HEADER OFFSETOF(IHV_NIC_SPECIFIC_EXTENSION, ihvData[0])
+/* EXT_STA */
+/** NAT configuration */
typedef struct {
- uint32 ipaddr; /* interface ip address */
- uint32 ipaddr_mask; /* interface ip address mask */
- uint32 ipaddr_gateway; /* gateway ip address */
- uint8 mac_gateway[6]; /* gateway mac address */
- uint32 ipaddr_dns; /* DNS server ip address, valid only for public if */
- uint8 mac_dns[6]; /* DNS server mac address, valid only for public if */
- uint8 GUID[38]; /* interface GUID */
+ uint32 ipaddr; /**< interface ip address */
+ uint32 ipaddr_mask; /**< interface ip address mask */
+ uint32 ipaddr_gateway; /**< gateway ip address */
+ uint8 mac_gateway[6]; /**< gateway mac address */
+ uint8 PAD[2];
+ uint32 ipaddr_dns; /**< DNS server ip address, valid only for public if */
+ uint8 mac_dns[6]; /**< DNS server mac address, valid only for public if */
+ uint8 GUID[38]; /**< interface GUID */
} nat_if_info_t;
typedef struct {
- uint op; /* operation code */
- bool pub_if; /* set for public if, clear for private if */
- nat_if_info_t if_info; /* interface info */
+ uint32 op; /**< operation code */
+ uint8 pub_if; /**< set for public if, clear for private if */
+ uint8 PAD[3];
+ nat_if_info_t if_info; /**< interface info */
} nat_cfg_t;
typedef struct {
- int state; /* NAT state returned */
+ int32 state; /**< NAT state returned */
} nat_state_t;
-
-
-#define BTA_STATE_LOG_SZ 64
-
-/* BTAMP Statemachine states */
-enum {
- HCIReset = 1,
- HCIReadLocalAMPInfo,
- HCIReadLocalAMPASSOC,
- HCIWriteRemoteAMPASSOC,
- HCICreatePhysicalLink,
- HCIAcceptPhysicalLinkRequest,
- HCIDisconnectPhysicalLink,
- HCICreateLogicalLink,
- HCIAcceptLogicalLink,
- HCIDisconnectLogicalLink,
- HCILogicalLinkCancel,
- HCIAmpStateChange,
- HCIWriteLogicalLinkAcceptTimeout
-};
typedef struct flush_txfifo {
uint32 txfifobmp;
uint32 hwtxfifoflush;
struct ether_addr ea;
+ uint8 PAD[2];
} flush_txfifo_t;
enum {
@@ -5511,42 +8737,140 @@
SPATIAL_MODE_MAX_IDX
};
-#define WLC_TXCORE_MAX 4 /* max number of txcore supports */
-#define WLC_SUBBAND_MAX 4 /* max number of sub-band supports */
+#define WLC_TXCORE_MAX 4 /**< max number of txcore supports */
+#define WLC_TXCORE_MAX_OLD 2 /**< backward compatibilty for TXCAL */
+#define WLC_SUBBAND_MAX 4 /**< max number of sub-band supports */
typedef struct {
uint8 band2g[WLC_TXCORE_MAX];
uint8 band5g[WLC_SUBBAND_MAX][WLC_TXCORE_MAX];
+#ifdef TBAND
+ /* Temporary WAR. SWWLAN-140646 */
+ uint8 band6g[WLC_SUBBAND_MAX][WLC_TXCORE_MAX];
+#endif /* TBAND */
} sar_limit_t;
-#define WLC_TXCAL_CORE_MAX 2 /* max number of txcore supports for txcal */
#define MAX_NUM_TXCAL_MEAS 128
#define MAX_NUM_PWR_STEP 40
-#define TXCAL_ROUNDING_FIX 1
-typedef struct wl_txcal_meas {
-#ifdef TXCAL_ROUNDING_FIX
- uint16 tssi[WLC_TXCAL_CORE_MAX][MAX_NUM_TXCAL_MEAS];
-#else
- uint8 tssi[WLC_TXCAL_CORE_MAX][MAX_NUM_TXCAL_MEAS];
-#endif /* TXCAL_ROUNDING_FIX */
- int16 pwr[WLC_TXCAL_CORE_MAX][MAX_NUM_TXCAL_MEAS];
+#define TXCAL_IOVAR_VERSION 0x1
+
+#define TXCAL_GAINSWEEP_VER (TXCAL_GAINSWEEP_VERSION_V2)
+#define TXCAL_GAINSWEEP_VERSION_V2 2
+
+/* Below macro defines the latest txcal iovar version updated */
+/* This macro also reflects in the 'txcal_ver' iovar */
+#define TXCAL_IOVAR_LATEST TXCAL_GAINSWEEP_VER
+
+/* below are used for bphy/ofdm separated LSC */
+#define TXCAL_PWR_BPHY 0
+#define TXCAL_PWR_OFDM 1
+
+typedef struct wl_txcal_meas_percore {
+ uint16 tssi[MAX_NUM_TXCAL_MEAS];
+ int16 pwr[MAX_NUM_TXCAL_MEAS];
+} wl_txcal_meas_percore_t;
+
+typedef struct wl_txcal_meas_ncore {
+ uint16 version;
uint8 valid_cnt;
+ uint8 num_core;
+ wl_txcal_meas_percore_t txcal_percore[1];
+} wl_txcal_meas_ncore_t;
+
+typedef struct wl_txcal_power_tssi_percore {
+ int16 tempsense;
+ int16 pwr_start;
+ uint8 pwr_start_idx;
+ uint8 num_entries;
+ uint16 pad;
+ uint8 tssi[MAX_NUM_PWR_STEP];
+} wl_txcal_power_tssi_percore_t;
+
+typedef struct wl_txcal_power_tssi_ncore {
+ uint16 version;
+ uint8 set_core;
+ uint8 channel;
+ uint8 num_core;
+ uint8 gen_tbl;
+ uint8 ofdm;
+ uint8 pad;
+ wl_txcal_power_tssi_percore_t tssi_percore[4];
+} wl_txcal_power_tssi_ncore_t;
+
+typedef struct wl_txcal_meas {
+ uint16 tssi[WLC_TXCORE_MAX][MAX_NUM_TXCAL_MEAS];
+ int16 pwr[WLC_TXCORE_MAX][MAX_NUM_TXCAL_MEAS];
+ uint8 valid_cnt;
+ uint8 PAD;
} wl_txcal_meas_t;
+
+typedef struct wl_txcal_meas_old {
+ uint16 tssi[WLC_TXCORE_MAX_OLD][MAX_NUM_TXCAL_MEAS];
+ int16 pwr[WLC_TXCORE_MAX_OLD][MAX_NUM_TXCAL_MEAS];
+ uint8 valid_cnt;
+ uint8 PAD;
+} wl_txcal_meas_old_t;
typedef struct wl_txcal_power_tssi {
uint8 set_core;
uint8 channel;
- int16 tempsense[WLC_TXCAL_CORE_MAX];
- int16 pwr_start[WLC_TXCAL_CORE_MAX];
- uint8 pwr_start_idx[WLC_TXCAL_CORE_MAX];
- uint8 num_entries[WLC_TXCAL_CORE_MAX];
- uint8 tssi[WLC_TXCAL_CORE_MAX][MAX_NUM_PWR_STEP];
- bool gen_tbl;
+ int16 tempsense[WLC_TXCORE_MAX];
+ int16 pwr_start[WLC_TXCORE_MAX];
+ uint8 pwr_start_idx[WLC_TXCORE_MAX];
+ uint8 num_entries[WLC_TXCORE_MAX];
+ uint8 tssi[WLC_TXCORE_MAX][MAX_NUM_PWR_STEP];
+ uint8 gen_tbl;
+ uint8 ofdm;
} wl_txcal_power_tssi_t;
-/* IOVAR "mempool" parameter. Used to retrieve a list of memory pool statistics. */
+typedef struct wl_txcal_power_tssi_old {
+ uint8 set_core;
+ uint8 channel;
+ int16 tempsense[WLC_TXCORE_MAX_OLD];
+ int16 pwr_start[WLC_TXCORE_MAX_OLD];
+ uint8 pwr_start_idx[WLC_TXCORE_MAX_OLD];
+ uint8 num_entries[WLC_TXCORE_MAX_OLD];
+ uint8 tssi[WLC_TXCORE_MAX_OLD][MAX_NUM_PWR_STEP];
+ uint8 gen_tbl;
+ uint8 ofdm;
+} wl_txcal_power_tssi_old_t;
+
+typedef struct wl_olpc_pwr {
+ uint16 version;
+ uint8 core;
+ uint8 channel;
+ int16 tempsense;
+ uint8 olpc_idx;
+ uint8 ofdm;
+} wl_olpc_pwr_t;
+
+typedef struct wl_rfem_temp_vdet_temp {
+ uint8 vdet_fem_t1;
+ int8 rfem_temp_t1;
+ uint8 vdet_fem_t2;
+ int8 rfem_temp_t2;
+} wl_rfem_temp_vdet_temp_t;
+
+typedef struct wl_rfem_temp_vin_tssi {
+ uint16 vin_chip_v1;
+ int16 tssi_chip_v1;
+ uint16 vin_chip_v2;
+ int16 tssi_chip_v2;
+} wl_rfem_temp_vin_tssi_t;
+
+typedef struct wl_txcal_tempsense {
+ uint16 version;
+ uint8 valid_cnt;
+ uint8 core;
+ int16 ref_temperature;
+ int16 meas_temperature;
+ wl_rfem_temp_vdet_temp_t vdet_temp;
+ wl_rfem_temp_vin_tssi_t vin_tssi;
+} wl_txcal_tempsense_t;
+
+/** IOVAR "mempool" parameter. Used to retrieve a list of memory pool statistics. */
typedef struct wl_mempool_stats {
- int num; /* Number of memory pools */
- bcm_mp_stats_t s[1]; /* Variable array of memory pool stats. */
+ int32 num; /**< Number of memory pools */
+ bcm_mp_stats_t s[1]; /**< Variable array of memory pool stats. */
} wl_mempool_stats_t;
typedef struct {
@@ -5555,46 +8879,47 @@
uint32 ipaddr_gateway;
} nwoe_ifconfig_t;
-/* Traffic management priority classes */
+/** Traffic management priority classes */
typedef enum trf_mgmt_priority_class {
- trf_mgmt_priority_low = 0, /* Maps to 802.1p BK */
- trf_mgmt_priority_medium = 1, /* Maps to 802.1p BE */
- trf_mgmt_priority_high = 2, /* Maps to 802.1p VI */
- trf_mgmt_priority_nochange = 3, /* do not update the priority */
+ trf_mgmt_priority_low = 0, /**< Maps to 802.1p BK */
+ trf_mgmt_priority_medium = 1, /**< Maps to 802.1p BE */
+ trf_mgmt_priority_high = 2, /**< Maps to 802.1p VI */
+ trf_mgmt_priority_nochange = 3, /**< do not update the priority */
trf_mgmt_priority_invalid = (trf_mgmt_priority_nochange + 1)
} trf_mgmt_priority_class_t;
-/* Traffic management configuration parameters */
+/** Traffic management configuration parameters */
typedef struct trf_mgmt_config {
- uint32 trf_mgmt_enabled; /* 0 - disabled, 1 - enabled */
- uint32 flags; /* See TRF_MGMT_FLAG_xxx defines */
- uint32 host_ip_addr; /* My IP address to determine subnet */
- uint32 host_subnet_mask; /* My subnet mask */
- uint32 downlink_bandwidth; /* In units of kbps */
- uint32 uplink_bandwidth; /* In units of kbps */
- uint32 min_tx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /* Minimum guaranteed tx bandwidth */
- uint32 min_rx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /* Minimum guaranteed rx bandwidth */
+ uint32 trf_mgmt_enabled; /**< 0 - disabled, 1 - enabled */
+ uint32 flags; /**< See TRF_MGMT_FLAG_xxx defines */
+ uint32 host_ip_addr; /**< My IP address to determine subnet */
+ uint32 host_subnet_mask; /**< My subnet mask */
+ uint32 downlink_bandwidth; /**< In units of kbps */
+ uint32 uplink_bandwidth; /**< In units of kbps */
+ uint32 min_tx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /**< Minimum guaranteed tx bandwidth */
+ uint32 min_rx_bandwidth[TRF_MGMT_MAX_PRIORITIES]; /**< Minimum guaranteed rx bandwidth */
} trf_mgmt_config_t;
-/* Traffic management filter */
+/** Traffic management filter */
typedef struct trf_mgmt_filter {
- struct ether_addr dst_ether_addr; /* His L2 address */
- uint32 dst_ip_addr; /* His IP address */
- uint16 dst_port; /* His L4 port */
- uint16 src_port; /* My L4 port */
- uint16 prot; /* L4 protocol (only TCP or UDP) */
- uint16 flags; /* TBD. For now, this must be zero. */
- trf_mgmt_priority_class_t priority; /* Priority for filtered packets */
- uint32 dscp; /* DSCP */
+ struct ether_addr dst_ether_addr; /**< His L2 address */
+ uint8 PAD[2];
+ uint32 dst_ip_addr; /**< His IP address */
+ uint16 dst_port; /**< His L4 port */
+ uint16 src_port; /**< My L4 port */
+ uint16 prot; /**< L4 protocol (only TCP or UDP) */
+ uint16 flags; /**< TBD. For now, this must be zero. */
+ trf_mgmt_priority_class_t priority; /**< Priority for filtered packets */
+ uint32 dscp; /**< DSCP */
} trf_mgmt_filter_t;
-/* Traffic management filter list (variable length) */
+/** Traffic management filter list (variable length) */
typedef struct trf_mgmt_filter_list {
uint32 num_filters;
trf_mgmt_filter_t filter[1];
} trf_mgmt_filter_list_t;
-/* Traffic management global info used for all queues */
+/** Traffic management global info used for all queues */
typedef struct trf_mgmt_global_info {
uint32 maximum_bytes_per_second;
uint32 maximum_bytes_per_sampling_period;
@@ -5603,18 +8928,18 @@
uint32 total_unused_bytes_per_sampling_period;
} trf_mgmt_global_info_t;
-/* Traffic management shaping info per priority queue */
+/** Traffic management shaping info per priority queue */
typedef struct trf_mgmt_shaping_info {
uint32 gauranteed_bandwidth_percentage;
uint32 guaranteed_bytes_per_second;
uint32 guaranteed_bytes_per_sampling_period;
uint32 num_bytes_produced_per_second;
uint32 num_bytes_consumed_per_second;
- uint32 num_queued_packets; /* Number of packets in queue */
- uint32 num_queued_bytes; /* Number of bytes in queue */
+ uint32 num_queued_packets; /**< Number of packets in queue */
+ uint32 num_queued_bytes; /**< Number of bytes in queue */
} trf_mgmt_shaping_info_t;
-/* Traffic management shaping info array */
+/** Traffic management shaping info array */
typedef struct trf_mgmt_shaping_info_array {
trf_mgmt_global_info_t tx_global_shaping_info;
trf_mgmt_shaping_info_t tx_queue_shaping_info[TRF_MGMT_MAX_PRIORITIES];
@@ -5622,74 +8947,83 @@
trf_mgmt_shaping_info_t rx_queue_shaping_info[TRF_MGMT_MAX_PRIORITIES];
} trf_mgmt_shaping_info_array_t;
-
-/* Traffic management statistical counters */
+/** Traffic management statistical counters */
typedef struct trf_mgmt_stats {
- uint32 num_processed_packets; /* Number of packets processed */
- uint32 num_processed_bytes; /* Number of bytes processed */
- uint32 num_discarded_packets; /* Number of packets discarded from queue */
+ uint32 num_processed_packets; /**< Number of packets processed */
+ uint32 num_processed_bytes; /**< Number of bytes processed */
+ uint32 num_discarded_packets; /**< Number of packets discarded from queue */
} trf_mgmt_stats_t;
-/* Traffic management statisics array */
+/** Traffic management statistics array */
typedef struct trf_mgmt_stats_array {
trf_mgmt_stats_t tx_queue_stats[TRF_MGMT_MAX_PRIORITIES];
trf_mgmt_stats_t rx_queue_stats[TRF_MGMT_MAX_PRIORITIES];
} trf_mgmt_stats_array_t;
+/* Both powersel_params and lpc_params are used by IOVAR lpc_params.
+ * The powersel_params is replaced by lpc_params in later WLC versions.
+ */
typedef struct powersel_params {
/* LPC Params exposed via IOVAR */
- int32 tp_ratio_thresh; /* Throughput ratio threshold */
- uint8 rate_stab_thresh; /* Thresh for rate stability based on nupd */
- uint8 pwr_stab_thresh; /* Number of successes before power step down */
- uint8 pwr_sel_exp_time; /* Time lapse for expiry of database */
+ int32 tp_ratio_thresh; /**< Throughput ratio threshold */
+ uint8 rate_stab_thresh; /**< Thresh for rate stability based on nupd */
+ uint8 pwr_stab_thresh; /**< Number of successes before power step down */
+ uint8 pwr_sel_exp_time; /**< Time lapse for expiry of database */
+ uint8 PAD;
} powersel_params_t;
+#define WL_LPC_PARAMS_VER_2 2
+#define WL_LPC_PARAMS_CURRENT_VERSION WL_LPC_PARAMS_VER_2
+
typedef struct lpc_params {
+ uint16 version;
+ uint16 length;
/* LPC Params exposed via IOVAR */
- uint8 rate_stab_thresh; /* Thresh for rate stability based on nupd */
- uint8 pwr_stab_thresh; /* Number of successes before power step down */
- uint8 lpc_exp_time; /* Time lapse for expiry of database */
- uint8 pwrup_slow_step; /* Step size for slow step up */
- uint8 pwrup_fast_step; /* Step size for fast step up */
- uint8 pwrdn_slow_step; /* Step size for slow step down */
+ uint8 rate_stab_thresh; /**< Thresh for rate stability based on nupd */
+ uint8 pwr_stab_thresh; /**< Number of successes before power step down */
+ uint8 lpc_exp_time; /**< Time lapse for expiry of database */
+ uint8 pwrup_slow_step; /**< Step size for slow step up */
+ uint8 pwrup_fast_step; /**< Step size for fast step up */
+ uint8 pwrdn_slow_step; /**< Step size for slow step down */
} lpc_params_t;
/* tx pkt delay statistics */
-#define SCB_RETRY_SHORT_DEF 7 /* Default Short retry Limit */
-#define WLPKTDLY_HIST_NBINS 16 /* number of bins used in the Delay histogram */
+#define SCB_RETRY_SHORT_DEF 7 /**< Default Short retry Limit */
+#define WLPKTDLY_HIST_NBINS 16 /**< number of bins used in the Delay histogram */
-/* structure to store per-AC delay statistics */
+/** structure to store per-AC delay statistics */
typedef struct scb_delay_stats {
- uint32 txmpdu_lost; /* number of MPDUs lost */
- uint32 txmpdu_cnt[SCB_RETRY_SHORT_DEF]; /* retry times histogram */
- uint32 delay_sum[SCB_RETRY_SHORT_DEF]; /* cumulative packet latency */
- uint32 delay_min; /* minimum packet latency observed */
- uint32 delay_max; /* maximum packet latency observed */
- uint32 delay_avg; /* packet latency average */
- uint32 delay_hist[WLPKTDLY_HIST_NBINS]; /* delay histogram */
- uint32 delay_count; /* minimum number of time period units before
+ uint32 txmpdu_lost; /**< number of MPDUs lost */
+ uint32 txmpdu_cnt[SCB_RETRY_SHORT_DEF]; /**< retry times histogram */
+ uint32 delay_sum[SCB_RETRY_SHORT_DEF]; /**< cumulative packet latency */
+ uint32 delay_min; /**< minimum packet latency observed */
+ uint32 delay_max; /**< maximum packet latency observed */
+ uint32 delay_avg; /**< packet latency average */
+ uint32 delay_hist[WLPKTDLY_HIST_NBINS]; /**< delay histogram */
+ uint32 delay_count; /**< minimum number of time period units before
consequent packet delay events can be generated
*/
- uint32 prev_txmpdu_cnt; /* Previous value of txmpdu_cnt[] during last iteration */
- uint32 prev_delay_sum; /* Previous value of delay_sum[] during last iteration */
+ uint32 prev_txmpdu_cnt; /**< Previous value of txmpdu_cnt[] during last iteration */
+ uint32 prev_delay_sum; /**< Previous value of delay_sum[] during last iteration */
} scb_delay_stats_t;
-/* structure for txdelay event */
+/** structure for txdelay event */
typedef struct txdelay_event {
- uint8 status;
- int rssi;
+ uint8 status;
+ uint8 PAD[3];
+ int32 rssi;
chanim_stats_t chanim_stats;
scb_delay_stats_t delay_stats[AC_COUNT];
} txdelay_event_t;
-/* structure for txdelay parameters */
+/** structure for txdelay parameters */
typedef struct txdelay_params {
- uint16 ratio; /* Avg Txdelay Delta */
- uint8 cnt; /* Sample cnt */
- uint8 period; /* Sample period */
- uint8 tune; /* Debug */
+ uint16 ratio; /**< Avg Txdelay Delta */
+ uint8 cnt; /**< Sample cnt */
+ uint8 period; /**< Sample period */
+ uint8 tune; /**< Debug */
+ uint8 PAD;
} txdelay_params_t;
-
#define MAX_TXDELAY_STATS_SCBS 6
#define TXDELAY_STATS_VERSION 1
@@ -5699,28 +9033,27 @@
};
typedef struct scb_total_delay_stats {
- struct ether_addr ea;
- uint8 pad[2];
+ struct ether_addr ea;
+ uint8 pad[2];
scb_delay_stats_t dlystats[AC_COUNT];
} scb_total_delay_stats_t;
typedef struct txdelay_stats {
uint32 version;
uint32 full_result; /* 0:Partial, 1:full */
- uint32 scb_cnt; /* in:requested, out:returned */
+ uint32 scb_cnt; /* in:requested, out:returned */
scb_total_delay_stats_t scb_delay_stats[1];
} txdelay_stats_t;
#define WL_TXDELAY_STATS_FIXED_SIZE \
(sizeof(txdelay_stats_t)+(MAX_TXDELAY_STATS_SCBS-1)*sizeof(scb_total_delay_stats_t))
-
enum {
WNM_SERVICE_DMS = 1,
WNM_SERVICE_FMS = 2,
WNM_SERVICE_TFS = 3
};
-/* Definitions for WNM/NPS TCLAS */
+/** Definitions for WNM/NPS TCLAS */
typedef struct wl_tclas {
uint8 user_priority;
uint8 fc_len;
@@ -5731,10 +9064,10 @@
typedef struct wl_tclas_list {
uint32 num;
- wl_tclas_t tclas[1];
+ wl_tclas_t tclas[];
} wl_tclas_list_t;
-/* Definitions for WNM/NPS Traffic Filter Service */
+/** Definitions for WNM/NPS Traffic Filter Service */
typedef struct wl_tfs_req {
uint8 tfs_id;
uint8 tfs_actcode;
@@ -5743,68 +9076,67 @@
} wl_tfs_req_t;
typedef struct wl_tfs_filter {
- uint8 status; /* Status returned by the AP */
- uint8 tclas_proc; /* TCLAS processing value (0:and, 1:or) */
- uint8 tclas_cnt; /* count of all wl_tclas_t in tclas array */
- uint8 tclas[1]; /* VLA of wl_tclas_t */
+ uint8 status; /**< Status returned by the AP */
+ uint8 tclas_proc; /**< TCLAS processing value (0:and, 1:or) */
+ uint8 tclas_cnt; /**< count of all wl_tclas_t in tclas array */
+ uint8 tclas[1]; /**< VLA of wl_tclas_t */
} wl_tfs_filter_t;
#define WL_TFS_FILTER_FIXED_SIZE OFFSETOF(wl_tfs_filter_t, tclas)
typedef struct wl_tfs_fset {
- struct ether_addr ea; /* Address of AP/STA involved with this filter set */
- uint8 tfs_id; /* TFS ID field chosen by STA host */
- uint8 status; /* Internal status TFS_STATUS_xxx */
- uint8 actcode; /* Action code DOT11_TFS_ACTCODE_xxx */
- uint8 token; /* Token used in last request frame */
- uint8 notify; /* Notify frame sent/received because of this set */
- uint8 filter_cnt; /* count of all wl_tfs_filter_t in filter array */
- uint8 filter[1]; /* VLA of wl_tfs_filter_t */
+ struct ether_addr ea; /**< Address of AP/STA involved with this filter set */
+ uint8 tfs_id; /**< TFS ID field chosen by STA host */
+ uint8 status; /**< Internal status TFS_STATUS_xxx */
+ uint8 actcode; /**< Action code DOT11_TFS_ACTCODE_xxx */
+ uint8 token; /**< Token used in last request frame */
+ uint8 notify; /**< Notify frame sent/received because of this set */
+ uint8 filter_cnt; /**< count of all wl_tfs_filter_t in filter array */
+ uint8 filter[1]; /**< VLA of wl_tfs_filter_t */
} wl_tfs_fset_t;
#define WL_TFS_FSET_FIXED_SIZE OFFSETOF(wl_tfs_fset_t, filter)
enum {
- TFS_STATUS_DISABLED = 0, /* TFS filter set disabled by user */
- TFS_STATUS_DISABLING = 1, /* Empty request just sent to AP */
- TFS_STATUS_VALIDATED = 2, /* Filter set validated by AP (but maybe not enabled!) */
- TFS_STATUS_VALIDATING = 3, /* Filter set just sent to AP */
- TFS_STATUS_NOT_ASSOC = 4, /* STA not associated */
- TFS_STATUS_NOT_SUPPORT = 5, /* TFS not supported by AP */
- TFS_STATUS_DENIED = 6, /* Filter set refused by AP (=> all sets are disabled!) */
+ TFS_STATUS_DISABLED = 0, /**< TFS filter set disabled by user */
+ TFS_STATUS_DISABLING = 1, /**< Empty request just sent to AP */
+ TFS_STATUS_VALIDATED = 2, /**< Filter set validated by AP (but maybe not enabled!) */
+ TFS_STATUS_VALIDATING = 3, /**< Filter set just sent to AP */
+ TFS_STATUS_NOT_ASSOC = 4, /**< STA not associated */
+ TFS_STATUS_NOT_SUPPORT = 5, /**< TFS not supported by AP */
+ TFS_STATUS_DENIED = 6, /**< Filter set refused by AP (=> all sets are disabled!) */
};
typedef struct wl_tfs_status {
- uint8 fset_cnt; /* count of all wl_tfs_fset_t in fset array */
- wl_tfs_fset_t fset[1]; /* VLA of wl_tfs_fset_t */
+ uint8 fset_cnt; /**< count of all wl_tfs_fset_t in fset array */
+ wl_tfs_fset_t fset[1]; /**< VLA of wl_tfs_fset_t */
} wl_tfs_status_t;
typedef struct wl_tfs_set {
- uint8 send; /* Immediatly register registered sets on AP side */
- uint8 tfs_id; /* ID of a specific set (existing or new), or nul for all */
- uint8 actcode; /* Action code for this filter set */
- uint8 tclas_proc; /* TCLAS processing operator for this filter set */
+ uint8 send; /**< Immediatly register registered sets on AP side */
+ uint8 tfs_id; /**< ID of a specific set (existing or new), or nul for all */
+ uint8 actcode; /**< Action code for this filter set */
+ uint8 tclas_proc; /**< TCLAS processing operator for this filter set */
} wl_tfs_set_t;
typedef struct wl_tfs_term {
- uint8 del; /* Delete internal set once confirmation received */
- uint8 tfs_id; /* ID of a specific set (existing), or nul for all */
+ uint8 del; /**< Delete internal set once confirmation received */
+ uint8 tfs_id; /**< ID of a specific set (existing), or nul for all */
} wl_tfs_term_t;
-
#define DMS_DEP_PROXY_ARP (1 << 0)
/* Definitions for WNM/NPS Directed Multicast Service */
enum {
- DMS_STATUS_DISABLED = 0, /* DMS desc disabled by user */
- DMS_STATUS_ACCEPTED = 1, /* Request accepted by AP */
- DMS_STATUS_NOT_ASSOC = 2, /* STA not associated */
- DMS_STATUS_NOT_SUPPORT = 3, /* DMS not supported by AP */
- DMS_STATUS_DENIED = 4, /* Request denied by AP */
- DMS_STATUS_TERM = 5, /* Request terminated by AP */
- DMS_STATUS_REMOVING = 6, /* Remove request just sent */
- DMS_STATUS_ADDING = 7, /* Add request just sent */
- DMS_STATUS_ERROR = 8, /* Non compliant AP behvior */
- DMS_STATUS_IN_PROGRESS = 9, /* Request just sent */
- DMS_STATUS_REQ_MISMATCH = 10 /* Conditions for sending DMS req not met */
+ DMS_STATUS_DISABLED = 0, /**< DMS desc disabled by user */
+ DMS_STATUS_ACCEPTED = 1, /**< Request accepted by AP */
+ DMS_STATUS_NOT_ASSOC = 2, /**< STA not associated */
+ DMS_STATUS_NOT_SUPPORT = 3, /**< DMS not supported by AP */
+ DMS_STATUS_DENIED = 4, /**< Request denied by AP */
+ DMS_STATUS_TERM = 5, /**< Request terminated by AP */
+ DMS_STATUS_REMOVING = 6, /**< Remove request just sent */
+ DMS_STATUS_ADDING = 7, /**< Add request just sent */
+ DMS_STATUS_ERROR = 8, /**< Non compliant AP behvior */
+ DMS_STATUS_IN_PROGRESS = 9, /**< Request just sent */
+ DMS_STATUS_REQ_MISMATCH = 10 /**< Conditions for sending DMS req not met */
};
typedef struct wl_dms_desc {
@@ -5813,9 +9145,9 @@
uint8 token;
uint8 dms_id;
uint8 tclas_proc;
- uint8 mac_len; /* length of all ether_addr in data array, 0 if STA */
- uint8 tclas_len; /* length of all wl_tclas_t in data array */
- uint8 data[1]; /* VLA of 'ether_addr' and 'wl_tclas_t' (in this order ) */
+ uint8 mac_len; /**< length of all ether_addr in data array, 0 if STA */
+ uint8 tclas_len; /**< length of all wl_tclas_t in data array */
+ uint8 data[1]; /**< VLA of 'ether_addr' and 'wl_tclas_t' (in this order ) */
} wl_dms_desc_t;
#define WL_DMS_DESC_FIXED_SIZE OFFSETOF(wl_dms_desc_t, data)
@@ -5843,20 +9175,48 @@
} u;
} wl_service_term_t;
-/* Definitions for WNM/NPS BSS Transistion */
+/** Definitions for WNM/NPS BSS Transistion */
+#define WL_BSSTRANS_QUERY_VERSION_1 1
+typedef struct wl_bsstrans_query {
+ uint16 version; /* structure version */
+ uint16 pad0; /* padding for 4-byte allignment */
+ wlc_ssid_t ssid; /* SSID of NBR elem to be queried for */
+ uint8 reason; /* Reason code of the BTQ */
+ uint8 pad1[3]; /* padding for 4-byte allignment */
+} wl_bsstrans_query_t;
+
+#define BTM_QUERY_NBR_COUNT_MAX 16
+
+#define WL_BTQ_NBR_LIST_VERSION_1 1
+typedef struct wl_btq_nbr_list {
+ uint16 version; /* structure version */
+ uint8 count; /* No. of BTQ NBRs returned */
+ uint8 pad; /* padding for 4-byte allignment */
+ nbr_rpt_elem_t btq_nbt_elem[]; /* BTQ NBR elem in a BTQ NBR list */
+} wl_btq_nbr_list_t;
+
typedef struct wl_bsstrans_req {
- uint16 tbtt; /* time of BSS to end of life, in unit of TBTT */
- uint16 dur; /* time of BSS to keep off, in unit of minute */
- uint8 reqmode; /* request mode of BSS transition request */
- uint8 unicast; /* request by unicast or by broadcast */
+ uint16 tbtt; /**< time of BSS to end of life, in unit of TBTT */
+ uint16 dur; /**< time of BSS to keep off, in unit of minute */
+ uint8 reqmode; /**< request mode of BSS transition request */
+ uint8 unicast; /**< request by unicast or by broadcast */
} wl_bsstrans_req_t;
+typedef struct wl_bsstrans_req_v2 {
+ wl_bsstrans_req_t v1;
+ int16 reason; /**< Transition reason code, -1: no reason code */
+ uint16 assoc_delay; /**< Association retry delay, 0: means no delay */
+} wl_bsstrans_req_v2_t;
+
+#define WL_BTM_REQ_NO_REASON_CODE -1
+#define WL_BTM_REQ_NO_ASSOC_RETRY_DELAY 0
+
enum {
- BSSTRANS_RESP_AUTO = 0, /* Currently equivalent to ENABLE */
- BSSTRANS_RESP_DISABLE = 1, /* Never answer BSS Trans Req frames */
- BSSTRANS_RESP_ENABLE = 2, /* Always answer Req frames with preset data */
- BSSTRANS_RESP_WAIT = 3, /* Send ind, wait and/or send preset data (NOT IMPL) */
- BSSTRANS_RESP_IMMEDIATE = 4 /* After an ind, set data and send resp (NOT IMPL) */
+ BSSTRANS_RESP_AUTO = 0, /**< Currently equivalent to ENABLE */
+ BSSTRANS_RESP_DISABLE = 1, /**< Never answer BSS Trans Req frames */
+ BSSTRANS_RESP_ENABLE = 2, /**< Always answer Req frames with preset data */
+ BSSTRANS_RESP_WAIT = 3, /**< Send ind, wait and/or send preset data (NOT IMPL) */
+ BSSTRANS_RESP_IMMEDIATE = 4 /**< After an ind, set data and send resp (NOT IMPL) */
};
typedef struct wl_bsstrans_resp {
@@ -5872,39 +9232,43 @@
* mandates different behavior on receiving BSS-transition request. To accomodate
* such divergent behaviors these policies have been created.
*/
-enum {
- WL_BSSTRANS_POLICY_ROAM_ALWAYS = 0, /* Roam (or disassociate) in all cases */
- WL_BSSTRANS_POLICY_ROAM_IF_MODE = 1, /* Roam only if requested by Request Mode field */
- WL_BSSTRANS_POLICY_ROAM_IF_PREF = 2, /* Roam only if Preferred BSS provided */
- WL_BSSTRANS_POLICY_WAIT = 3, /* Wait for deauth and send Accepted status */
- WL_BSSTRANS_POLICY_PRODUCT = 4, /* Policy for real product use cases (non-pf) */
-};
+typedef enum {
+ WL_BSSTRANS_POLICY_ROAM_ALWAYS = 0, /**< Roam (or disassociate) in all cases */
+ WL_BSSTRANS_POLICY_ROAM_IF_MODE = 1, /**< Roam only if requested by Request Mode field */
+ WL_BSSTRANS_POLICY_ROAM_IF_PREF = 2, /**< Roam only if Preferred BSS provided */
+ WL_BSSTRANS_POLICY_WAIT = 3, /**< Wait for deauth and send Accepted status */
+ WL_BSSTRANS_POLICY_PRODUCT = 4, /**< Policy for real product use cases (Olympic) */
+ WL_BSSTRANS_POLICY_PRODUCT_WBTEXT = 5, /**< Policy for real product use cases (SS) */
+ WL_BSSTRANS_POLICY_MBO = 6, /**< Policy for MBO certification */
+ WL_BSSTRANS_POLICY_MAX = 7
+} wnm_bsstrans_policy_type_t;
-/* Definitions for WNM/NPS TIM Broadcast */
+/** Definitions for WNM/NPS TIM Broadcast */
typedef struct wl_timbc_offset {
- int16 offset; /* offset in us */
- uint16 fix_intv; /* override interval sent from STA */
- uint16 rate_override; /* use rate override to send high rate TIM broadcast frame */
- uint8 tsf_present; /* show timestamp in TIM broadcast frame */
+ int16 offset; /**< offset in us */
+ uint16 fix_intv; /**< override interval sent from STA */
+ uint16 rate_override; /**< use rate override to send high rate TIM broadcast frame */
+ uint8 tsf_present; /**< show timestamp in TIM broadcast frame */
+ uint8 PAD;
} wl_timbc_offset_t;
typedef struct wl_timbc_set {
- uint8 interval; /* Interval in DTIM wished or required. */
- uint8 flags; /* Bitfield described below */
- uint16 rate_min; /* Minimum rate required for High/Low TIM frames. Optionnal */
- uint16 rate_max; /* Maximum rate required for High/Low TIM frames. Optionnal */
+ uint8 interval; /**< Interval in DTIM wished or required. */
+ uint8 flags; /**< Bitfield described below */
+ uint16 rate_min; /**< Minimum rate required for High/Low TIM frames. Optionnal */
+ uint16 rate_max; /**< Maximum rate required for High/Low TIM frames. Optionnal */
} wl_timbc_set_t;
enum {
- WL_TIMBC_SET_TSF_REQUIRED = 1, /* Enable TIMBC only if TSF in TIM frames */
- WL_TIMBC_SET_NO_OVERRIDE = 2, /* ... if AP does not override interval */
- WL_TIMBC_SET_PROXY_ARP = 4, /* ... if AP support Proxy ARP */
- WL_TIMBC_SET_DMS_ACCEPTED = 8 /* ... if all DMS desc have been accepted */
+ WL_TIMBC_SET_TSF_REQUIRED = 1, /**< Enable TIMBC only if TSF in TIM frames */
+ WL_TIMBC_SET_NO_OVERRIDE = 2, /**< ... if AP does not override interval */
+ WL_TIMBC_SET_PROXY_ARP = 4, /**< ... if AP support Proxy ARP */
+ WL_TIMBC_SET_DMS_ACCEPTED = 8 /**< ... if all DMS desc have been accepted */
};
typedef struct wl_timbc_status {
- uint8 status_sta; /* Status from internal state machine (check below) */
- uint8 status_ap; /* From AP response frame (check 8.4.2.86 from 802.11) */
+ uint8 status_sta; /**< Status from internal state machine (check below) */
+ uint8 status_ap; /**< From AP response frame (check 8.4.2.86 from 802.11) */
uint8 interval;
uint8 pad;
int32 offset;
@@ -5913,39 +9277,40 @@
} wl_timbc_status_t;
enum {
- WL_TIMBC_STATUS_DISABLE = 0, /* TIMBC disabled by user */
- WL_TIMBC_STATUS_REQ_MISMATCH = 1, /* AP settings do no match user requirements */
- WL_TIMBC_STATUS_NOT_ASSOC = 2, /* STA not associated */
- WL_TIMBC_STATUS_NOT_SUPPORT = 3, /* TIMBC not supported by AP */
- WL_TIMBC_STATUS_DENIED = 4, /* Req to disable TIMBC sent to AP */
- WL_TIMBC_STATUS_ENABLE = 5 /* TIMBC enabled */
+ WL_TIMBC_STATUS_DISABLE = 0, /**< TIMBC disabled by user */
+ WL_TIMBC_STATUS_REQ_MISMATCH = 1, /**< AP settings do no match user requirements */
+ WL_TIMBC_STATUS_NOT_ASSOC = 2, /**< STA not associated */
+ WL_TIMBC_STATUS_NOT_SUPPORT = 3, /**< TIMBC not supported by AP */
+ WL_TIMBC_STATUS_DENIED = 4, /**< Req to disable TIMBC sent to AP */
+ WL_TIMBC_STATUS_ENABLE = 5 /**< TIMBC enabled */
};
-/* Definitions for PM2 Dynamic Fast Return To Sleep */
+/** Definitions for PM2 Dynamic Fast Return To Sleep */
typedef struct wl_pm2_sleep_ret_ext {
- uint8 logic; /* DFRTS logic: see WL_DFRTS_LOGIC_* below */
- uint16 low_ms; /* Low FRTS timeout */
- uint16 high_ms; /* High FRTS timeout */
- uint16 rx_pkts_threshold; /* switching threshold: # rx pkts */
- uint16 tx_pkts_threshold; /* switching threshold: # tx pkts */
- uint16 txrx_pkts_threshold; /* switching threshold: # (tx+rx) pkts */
- uint32 rx_bytes_threshold; /* switching threshold: # rx bytes */
- uint32 tx_bytes_threshold; /* switching threshold: # tx bytes */
- uint32 txrx_bytes_threshold; /* switching threshold: # (tx+rx) bytes */
+ uint8 logic; /**< DFRTS logic: see WL_DFRTS_LOGIC_* below */
+ uint8 PAD;
+ uint16 low_ms; /**< Low FRTS timeout */
+ uint16 high_ms; /**< High FRTS timeout */
+ uint16 rx_pkts_threshold; /**< switching threshold: # rx pkts */
+ uint16 tx_pkts_threshold; /**< switching threshold: # tx pkts */
+ uint16 txrx_pkts_threshold; /**< switching threshold: # (tx+rx) pkts */
+ uint32 rx_bytes_threshold; /**< switching threshold: # rx bytes */
+ uint32 tx_bytes_threshold; /**< switching threshold: # tx bytes */
+ uint32 txrx_bytes_threshold; /**< switching threshold: # (tx+rx) bytes */
} wl_pm2_sleep_ret_ext_t;
-#define WL_DFRTS_LOGIC_OFF 0 /* Feature is disabled */
-#define WL_DFRTS_LOGIC_OR 1 /* OR all non-zero threshold conditions */
-#define WL_DFRTS_LOGIC_AND 2 /* AND all non-zero threshold conditions */
+#define WL_DFRTS_LOGIC_OFF 0 /**< Feature is disabled */
+#define WL_DFRTS_LOGIC_OR 1 /**< OR all non-zero threshold conditions */
+#define WL_DFRTS_LOGIC_AND 2 /**< AND all non-zero threshold conditions */
/* Values for the passive_on_restricted_mode iovar. When set to non-zero, this iovar
* disables automatic conversions of a channel from passively scanned to
* actively scanned. These values only have an effect for country codes such
* as XZ where some 5 GHz channels are defined to be passively scanned.
*/
-#define WL_PASSACTCONV_DISABLE_NONE 0 /* Enable permanent and temporary conversions */
-#define WL_PASSACTCONV_DISABLE_ALL 1 /* Disable permanent and temporary conversions */
-#define WL_PASSACTCONV_DISABLE_PERM 2 /* Disable only permanent conversions */
+#define WL_PASSACTCONV_DISABLE_NONE 0 /**< Enable permanent and temporary conversions */
+#define WL_PASSACTCONV_DISABLE_ALL 1 /**< Disable permanent and temporary conversions */
+#define WL_PASSACTCONV_DISABLE_PERM 2 /**< Disable only permanent conversions */
/* Definitions for Reliable Multicast */
#define WL_RMC_CNT_VERSION 1
@@ -5963,110 +9328,112 @@
#define WL_RMC_MAX_TRS_IN_ACKALL 1
#define WL_RMC_ACK_MCAST0 0x02
#define WL_RMC_ACK_MCAST_ALL 0x01
-#define WL_RMC_ACTF_TIME_MIN 300 /* time in ms */
-#define WL_RMC_ACTF_TIME_MAX 20000 /* time in ms */
-#define WL_RMC_MAX_NUM_TRS 32 /* maximun transmitters allowed */
-#define WL_RMC_ARTMO_MIN 350 /* time in ms */
-#define WL_RMC_ARTMO_MAX 40000 /* time in ms */
+#define WL_RMC_ACTF_TIME_MIN 300 /**< time in ms */
+#define WL_RMC_ACTF_TIME_MAX 20000 /**< time in ms */
+#define WL_RMC_MAX_NUM_TRS 32 /**< maximun transmitters allowed */
+#define WL_RMC_ARTMO_MIN 350 /**< time in ms */
+#define WL_RMC_ARTMO_MAX 40000 /**< time in ms */
/* RMC events in action frames */
enum rmc_opcodes {
- RELMCAST_ENTRY_OP_DISABLE = 0, /* Disable multi-cast group */
- RELMCAST_ENTRY_OP_DELETE = 1, /* Delete multi-cast group */
- RELMCAST_ENTRY_OP_ENABLE = 2, /* Enable multi-cast group */
- RELMCAST_ENTRY_OP_ACK_ALL = 3 /* Enable ACK ALL bit in AMT */
+ RELMCAST_ENTRY_OP_DISABLE = 0, /**< Disable multi-cast group */
+ RELMCAST_ENTRY_OP_DELETE = 1, /**< Delete multi-cast group */
+ RELMCAST_ENTRY_OP_ENABLE = 2, /**< Enable multi-cast group */
+ RELMCAST_ENTRY_OP_ACK_ALL = 3 /**< Enable ACK ALL bit in AMT */
};
/* RMC operational modes */
enum rmc_modes {
- WL_RMC_MODE_RECEIVER = 0, /* Receiver mode by default */
- WL_RMC_MODE_TRANSMITTER = 1, /* Transmitter mode using wl ackreq */
- WL_RMC_MODE_INITIATOR = 2 /* Initiator mode using wl ackreq */
+ WL_RMC_MODE_RECEIVER = 0, /**< Receiver mode by default */
+ WL_RMC_MODE_TRANSMITTER = 1, /**< Transmitter mode using wl ackreq */
+ WL_RMC_MODE_INITIATOR = 2 /**< Initiator mode using wl ackreq */
};
-/* Each RMC mcast client info */
+/** Each RMC mcast client info */
typedef struct wl_relmcast_client {
- uint8 flag; /* status of client such as AR, R, or blacklisted */
- int16 rssi; /* rssi value of RMC client */
- struct ether_addr addr; /* mac address of RMC client */
+ uint8 flag; /**< status of client such as AR, R, or blacklisted */
+ uint8 PAD;
+ int16 rssi; /**< rssi value of RMC client */
+ struct ether_addr addr; /**< mac address of RMC client */
} wl_relmcast_client_t;
-/* RMC Counters */
+/** RMC Counters */
typedef struct wl_rmc_cnts {
- uint16 version; /* see definition of WL_CNT_T_VERSION */
- uint16 length; /* length of entire structure */
- uint16 dupcnt; /* counter for duplicate rmc MPDU */
- uint16 ackreq_err; /* counter for wl ackreq error */
- uint16 af_tx_err; /* error count for action frame transmit */
- uint16 null_tx_err; /* error count for rmc null frame transmit */
- uint16 af_unicast_tx_err; /* error count for rmc unicast frame transmit */
- uint16 mc_no_amt_slot; /* No mcast AMT entry available */
+ uint16 version; /**< see definition of WL_CNT_T_VERSION */
+ uint16 length; /**< length of entire structure */
+ uint16 dupcnt; /**< counter for duplicate rmc MPDU */
+ uint16 ackreq_err; /**< counter for wl ackreq error */
+ uint16 af_tx_err; /**< error count for action frame transmit */
+ uint16 null_tx_err; /**< error count for rmc null frame transmit */
+ uint16 af_unicast_tx_err; /**< error count for rmc unicast frame transmit */
+ uint16 mc_no_amt_slot; /**< No mcast AMT entry available */
/* Unused. Keep for rom compatibility */
- uint16 mc_no_glb_slot; /* No mcast entry available in global table */
- uint16 mc_not_mirrored; /* mcast group is not mirrored */
- uint16 mc_existing_tr; /* mcast group is already taken by transmitter */
- uint16 mc_exist_in_amt; /* mcast group is already programmed in amt */
+ uint16 mc_no_glb_slot; /**< No mcast entry available in global table */
+ uint16 mc_not_mirrored; /**< mcast group is not mirrored */
+ uint16 mc_existing_tr; /**< mcast group is already taken by transmitter */
+ uint16 mc_exist_in_amt; /**< mcast group is already programmed in amt */
/* Unused. Keep for rom compatibility */
- uint16 mc_not_exist_in_gbl; /* mcast group is not in global table */
- uint16 mc_not_exist_in_amt; /* mcast group is not in AMT table */
- uint16 mc_utilized; /* mcast addressed is already taken */
- uint16 mc_taken_other_tr; /* multi-cast addressed is already taken */
- uint32 rmc_rx_frames_mac; /* no of mc frames received from mac */
- uint32 rmc_tx_frames_mac; /* no of mc frames transmitted to mac */
- uint32 mc_null_ar_cnt; /* no. of times NULL AR is received */
- uint32 mc_ar_role_selected; /* no. of times took AR role */
- uint32 mc_ar_role_deleted; /* no. of times AR role cancelled */
- uint32 mc_noacktimer_expired; /* no. of times noack timer expired */
- uint16 mc_no_wl_clk; /* no wl clk detected when trying to access amt */
- uint16 mc_tr_cnt_exceeded; /* No of transmitters in the network exceeded */
+ uint16 mc_not_exist_in_gbl; /**< mcast group is not in global table */
+ uint16 mc_not_exist_in_amt; /**< mcast group is not in AMT table */
+ uint16 mc_utilized; /**< mcast addressed is already taken */
+ uint16 mc_taken_other_tr; /**< multi-cast addressed is already taken */
+ uint32 rmc_rx_frames_mac; /**< no of mc frames received from mac */
+ uint32 rmc_tx_frames_mac; /**< no of mc frames transmitted to mac */
+ uint32 mc_null_ar_cnt; /**< no. of times NULL AR is received */
+ uint32 mc_ar_role_selected; /**< no. of times took AR role */
+ uint32 mc_ar_role_deleted; /**< no. of times AR role cancelled */
+ uint32 mc_noacktimer_expired; /**< no. of times noack timer expired */
+ uint16 mc_no_wl_clk; /**< no wl clk detected when trying to access amt */
+ uint16 mc_tr_cnt_exceeded; /**< No of transmitters in the network exceeded */
} wl_rmc_cnts_t;
-/* RMC Status */
+/** RMC Status */
typedef struct wl_relmcast_st {
- uint8 ver; /* version of RMC */
- uint8 num; /* number of clients detected by transmitter */
+ uint8 ver; /**< version of RMC */
+ uint8 num; /**< number of clients detected by transmitter */
wl_relmcast_client_t clients[WL_RMC_MAX_CLIENT];
- uint16 err; /* error status (used in infra) */
- uint16 actf_time; /* action frame time period */
+ uint16 err; /**< error status (used in infra) */
+ uint16 actf_time; /**< action frame time period */
} wl_relmcast_status_t;
-/* Entry for each STA/node */
+/** Entry for each STA/node */
typedef struct wl_rmc_entry {
/* operation on multi-cast entry such add,
* delete, ack-all
*/
int8 flag;
- struct ether_addr addr; /* multi-cast group mac address */
+ struct ether_addr addr; /**< multi-cast group mac address */
} wl_rmc_entry_t;
-/* RMC table */
+/** RMC table */
typedef struct wl_rmc_entry_table {
- uint8 index; /* index to a particular mac entry in table */
- uint8 opcode; /* opcodes or operation on entry */
+ uint8 index; /**< index to a particular mac entry in table */
+ uint8 opcode; /**< opcodes or operation on entry */
wl_rmc_entry_t entry[WL_RMC_MAX_TABLE_ENTRY];
} wl_rmc_entry_table_t;
typedef struct wl_rmc_trans_elem {
- struct ether_addr tr_mac; /* transmitter mac */
- struct ether_addr ar_mac; /* ar mac */
- uint16 artmo; /* AR timeout */
- uint8 amt_idx; /* amt table entry */
- uint16 flag; /* entry will be acked, not acked, programmed, full etc */
+ struct ether_addr tr_mac; /**< transmitter mac */
+ struct ether_addr ar_mac; /**< ar mac */
+ uint16 artmo; /**< AR timeout */
+ uint8 amt_idx; /**< amt table entry */
+ uint8 PAD;
+ uint16 flag; /**< entry will be acked, not acked, programmed, full etc */
} wl_rmc_trans_elem_t;
-/* RMC transmitters */
+/** RMC transmitters */
typedef struct wl_rmc_trans_in_network {
- uint8 ver; /* version of RMC */
- uint8 num_tr; /* number of transmitters in the network */
+ uint8 ver; /**< version of RMC */
+ uint8 num_tr; /**< number of transmitters in the network */
wl_rmc_trans_elem_t trs[WL_RMC_MAX_NUM_TRS];
} wl_rmc_trans_in_network_t;
-/* To update vendor specific ie for RMC */
+/** To update vendor specific ie for RMC */
typedef struct wl_rmc_vsie {
uint8 oui[DOT11_OUI_LEN];
- uint16 payload; /* IE Data Payload */
+ uint8 PAD;
+ uint16 payload; /**< IE Data Payload */
} wl_rmc_vsie_t;
-
/* structures & defines for proximity detection */
enum proxd_method {
@@ -6093,12 +9460,20 @@
#define WL_PROXD_FLAG_ONEWAY 0x40
#define WL_PROXD_FLAG_SEQ_EN 0x80
+#define WL_PROXD_SETFLAG_K 0x1
+#define WL_PROXD_SETFLAG_N 0x2
+#define WL_PROXD_SETFLAG_S 0x4
+
+#define WL_PROXD_SETFLAG_K 0x1
+#define WL_PROXD_SETFLAG_N 0x2
+#define WL_PROXD_SETFLAG_S 0x4
+
#define WL_PROXD_RANDOM_WAKEUP 0x8000
#define WL_PROXD_MAXREPORT 8
typedef struct wl_proxd_iovar {
- uint16 method; /* Proxmity Detection method */
- uint16 mode; /* Mode (neutral, initiator, target) */
+ uint16 method; /**< Proximity Detection method */
+ uint16 mode; /**< Mode (neutral, initiator, target) */
} wl_proxd_iovar_t;
/*
@@ -6107,33 +9482,30 @@
* common params should be placed at the beginning
*/
-/* require strict packing */
-#include <packed_section_start.h>
+typedef struct wl_proxd_params_common {
+ chanspec_t chanspec; /**< channel spec */
+ int16 tx_power; /**< tx power of Proximity Detection(PD) frames (in dBm) */
+ uint16 tx_rate; /**< tx rate of PD rames (in 500kbps units) */
+ uint16 timeout; /**< timeout value */
+ uint16 interval; /**< interval between neighbor finding attempts (in TU) */
+ uint16 duration; /**< duration of neighbor finding attempts (in ms) */
+} wl_proxd_params_common_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_common {
- chanspec_t chanspec; /* channel spec */
- int16 tx_power; /* tx power of Proximity Detection(PD) frames (in dBm) */
- uint16 tx_rate; /* tx rate of PD rames (in 500kbps units) */
- uint16 timeout; /* timeout value */
- uint16 interval; /* interval between neighbor finding attempts (in TU) */
- uint16 duration; /* duration of neighbor finding attempts (in ms) */
-} BWL_POST_PACKED_STRUCT wl_proxd_params_common_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_rssi_method {
- chanspec_t chanspec; /* chanspec for home channel */
- int16 tx_power; /* tx power of Proximity Detection frames (in dBm) */
- uint16 tx_rate; /* tx rate of PD frames, 500kbps units */
- uint16 timeout; /* state machine wait timeout of the frames (in ms) */
- uint16 interval; /* interval between neighbor finding attempts (in TU) */
- uint16 duration; /* duration of neighbor finding attempts (in ms) */
+typedef struct wl_proxd_params_rssi_method {
+ chanspec_t chanspec; /**< chanspec for home channel */
+ int16 tx_power; /**< tx power of Proximity Detection frames (in dBm) */
+ uint16 tx_rate; /**< tx rate of PD frames, 500kbps units */
+ uint16 timeout; /**< state machine wait timeout of the frames (in ms) */
+ uint16 interval; /**< interval between neighbor finding attempts (in TU) */
+ uint16 duration; /**< duration of neighbor finding attempts (in ms) */
/* method specific ones go after this line */
- int16 rssi_thresh; /* RSSI threshold (in dBm) */
- uint16 maxconvergtmo; /* max wait converge timeout (in ms) */
+ int16 rssi_thresh; /**< RSSI threshold (in dBm) */
+ uint16 maxconvergtmo; /**< max wait converge timeout (in ms) */
} wl_proxd_params_rssi_method_t;
-#define Q1_NS 25 /* Q1 time units */
+#define Q1_NS 25 /**< Q1 time units */
-#define TOF_BW_NUM 3 /* number of bandwidth that the TOF can support */
+#define TOF_BW_NUM 3 /**< number of bandwidth that the TOF can support */
#define TOF_BW_SEQ_NUM (TOF_BW_NUM+2) /* number of total index */
enum tof_bw_index {
TOF_BW_20MHZ_INDEX = 0,
@@ -6143,31 +9515,31 @@
TOF_BW_SEQRX_INDEX = 4
};
-#define BANDWIDTH_BASE 20 /* base value of bandwidth */
+#define BANDWIDTH_BASE 20 /**< base value of bandwidth */
#define TOF_BW_20MHZ (BANDWIDTH_BASE << TOF_BW_20MHZ_INDEX)
#define TOF_BW_40MHZ (BANDWIDTH_BASE << TOF_BW_40MHZ_INDEX)
#define TOF_BW_80MHZ (BANDWIDTH_BASE << TOF_BW_80MHZ_INDEX)
#define TOF_BW_10MHZ 10
-#define NFFT_BASE 64 /* base size of fft */
+#define NFFT_BASE 64 /**< base size of fft */
#define TOF_NFFT_20MHZ (NFFT_BASE << TOF_BW_20MHZ_INDEX)
#define TOF_NFFT_40MHZ (NFFT_BASE << TOF_BW_40MHZ_INDEX)
#define TOF_NFFT_80MHZ (NFFT_BASE << TOF_BW_80MHZ_INDEX)
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_tof_method {
- chanspec_t chanspec; /* chanspec for home channel */
- int16 tx_power; /* tx power of Proximity Detection(PD) frames (in dBm) */
- uint16 tx_rate; /* tx rate of PD rames (in 500kbps units) */
- uint16 timeout; /* state machine wait timeout of the frames (in ms) */
- uint16 interval; /* interval between neighbor finding attempts (in TU) */
- uint16 duration; /* duration of neighbor finding attempts (in ms) */
+typedef struct wl_proxd_params_tof_method {
+ chanspec_t chanspec; /**< chanspec for home channel */
+ int16 tx_power; /**< tx power of Proximity Detection(PD) frames (in dBm) */
+ uint16 tx_rate; /**< tx rate of PD rames (in 500kbps units) */
+ uint16 timeout; /**< state machine wait timeout of the frames (in ms) */
+ uint16 interval; /**< interval between neighbor finding attempts (in TU) */
+ uint16 duration; /**< duration of neighbor finding attempts (in ms) */
/* specific for the method go after this line */
- struct ether_addr tgt_mac; /* target mac addr for TOF method */
- uint16 ftm_cnt; /* number of the frames txed by initiator */
- uint16 retry_cnt; /* number of retransmit attampts for ftm frames */
- int16 vht_rate; /* ht or vht rate */
+ struct ether_addr tgt_mac; /**< target mac addr for TOF method */
+ uint16 ftm_cnt; /**< number of the frames txed by initiator */
+ uint16 retry_cnt; /**< number of retransmit attampts for ftm frames */
+ int16 vht_rate; /**< ht or vht rate */
/* add more params required for other methods can be added here */
-} BWL_POST_PACKED_STRUCT wl_proxd_params_tof_method_t;
+} wl_proxd_params_tof_method_t;
typedef struct wl_proxd_seq_config
{
@@ -6179,42 +9551,147 @@
int16 w_offset;
} wl_proxd_seq_config_t;
-
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_tof_tune {
- uint32 Ki; /* h/w delay K factor for initiator */
- uint32 Kt; /* h/w delay K factor for target */
- int16 vhtack; /* enable/disable VHT ACK */
- int16 N_log2[TOF_BW_SEQ_NUM]; /* simple threshold crossing */
- int16 w_offset[TOF_BW_NUM]; /* offset of threshold crossing window(per BW) */
- int16 w_len[TOF_BW_NUM]; /* length of threshold crossing window(per BW) */
- int32 maxDT; /* max time difference of T4/T1 or T3/T2 */
- int32 minDT; /* min time difference of T4/T1 or T3/T2 */
- uint8 totalfrmcnt; /* total count of transfered measurement frames */
- uint16 rsv_media; /* reserve media value for TOF */
- uint32 flags; /* flags */
- uint8 core; /* core to use for tx */
- uint8 force_K; /* set to force value of K */
- int16 N_scale[TOF_BW_SEQ_NUM]; /* simple threshold crossing */
- uint8 sw_adj; /* enable sw assisted timestamp adjustment */
- uint8 hw_adj; /* enable hw assisted timestamp adjustment */
- uint8 seq_en; /* enable ranging sequence */
- uint8 ftm_cnt[TOF_BW_SEQ_NUM]; /* number of ftm frames based on bandwidth */
- int16 N_log2_2g; /* simple threshold crossing for 2g channel */
- int16 N_scale_2g; /* simple threshold crossing for 2g channel */
+#define WL_PROXD_TUNE_VERSION_1 1
+#define WL_PROXD_TUNE_VERSION_2 2
+#include <packed_section_start.h>
+/* For legacy ranging target (e.g. 43430, 43342) */
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_tof_tune_v1 {
+ uint32 version;
+ uint32 Ki; /**< h/w delay K factor for initiator */
+ uint32 Kt; /**< h/w delay K factor for target */
+ int16 vhtack; /**< enable/disable VHT ACK */
+ int16 N_log2[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ int16 w_offset[TOF_BW_NUM]; /**< offset of threshold crossing window(per BW) */
+ int16 w_len[TOF_BW_NUM]; /**< length of threshold crossing window(per BW) */
+ int32 maxDT; /**< max time difference of T4/T1 or T3/T2 */
+ int32 minDT; /**< min time difference of T4/T1 or T3/T2 */
+ uint8 totalfrmcnt; /**< total count of transfered measurement frames */
+ uint16 rsv_media; /**< reserve media value for TOF */
+ uint32 flags; /**< flags */
+ uint8 core; /**< core to use for tx */
+ uint8 setflags; /* set flags of K, N. S values */
+ int16 N_scale[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ uint8 sw_adj; /**< enable sw assisted timestamp adjustment */
+ uint8 hw_adj; /**< enable hw assisted timestamp adjustment */
+ uint8 seq_en; /**< enable ranging sequence */
+ uint8 ftm_cnt[TOF_BW_SEQ_NUM]; /**< number of ftm frames based on bandwidth */
+ int16 N_log2_2g; /**< simple threshold crossing for 2g channel */
+ int16 N_scale_2g; /**< simple threshold crossing for 2g channel */
wl_proxd_seq_config_t seq_5g20;
-} BWL_POST_PACKED_STRUCT wl_proxd_params_tof_tune_t;
+ wl_proxd_seq_config_t seq_2g20; /* Thresh crossing params for 2G Sequence */
+ uint16 bitflip_thresh; /* bitflip threshold */
+ uint16 snr_thresh; /* SNR threshold */
+ int8 recv_2g_thresh; /* 2g recieve sensitivity threshold */
+ uint32 acs_gdv_thresh;
+ int8 acs_rssi_thresh;
+ uint8 smooth_win_en;
+ int32 emu_delay;
+} BWL_POST_PACKED_STRUCT wl_proxd_params_tof_tune_v1_t;
+#include <packed_section_end.h>
+
+#include <packed_section_start.h>
+/* For legacy ranging initiator (including 4364) */
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_params_tof_tune_v2 {
+ uint32 version;
+ uint32 Ki; /**< h/w delay K factor for initiator */
+ uint32 Kt; /**< h/w delay K factor for target */
+ int16 vhtack; /**< enable/disable VHT ACK */
+ int16 N_log2[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ int16 w_offset[TOF_BW_NUM]; /**< offset of threshold crossing window(per BW) */
+ int16 w_len[TOF_BW_NUM]; /**< length of threshold crossing window(per BW) */
+ int32 maxDT; /**< max time difference of T4/T1 or T3/T2 */
+ int32 minDT; /**< min time difference of T4/T1 or T3/T2 */
+ uint8 totalfrmcnt; /**< total count of transfered measurement frames */
+ uint16 rsv_media; /**< reserve media value for TOF */
+ uint32 flags; /**< flags */
+ uint8 core; /**< core to use for tx */
+ uint8 setflags; /* set flags of K, N. S values */
+ int16 N_scale[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ uint8 sw_adj; /**< enable sw assisted timestamp adjustment */
+ uint8 hw_adj; /**< enable hw assisted timestamp adjustment */
+ uint8 seq_en; /**< enable ranging sequence */
+ uint8 ftm_cnt[TOF_BW_SEQ_NUM]; /**< number of ftm frames based on bandwidth */
+ int16 N_log2_2g; /**< simple threshold crossing for 2g channel */
+ int16 N_scale_2g; /**< simple threshold crossing for 2g channel */
+ wl_proxd_seq_config_t seq_5g20;
+ wl_proxd_seq_config_t seq_2g20; /* Thresh crossing params for 2G Sequence */
+ uint16 bitflip_thresh; /* bitflip threshold */
+ uint16 snr_thresh; /* SNR threshold */
+ int8 recv_2g_thresh; /* 2g recieve sensitivity threshold */
+ uint32 acs_gdv_thresh;
+ int8 acs_rssi_thresh;
+ uint8 smooth_win_en;
+ int32 acs_gdmm_thresh;
+ int8 acs_delta_rssi_thresh;
+ int32 emu_delay;
+ uint8 core_mask; /* core mask selection */
+} BWL_POST_PACKED_STRUCT wl_proxd_params_tof_tune_v2_t;
+#include <packed_section_end.h>
+
+#define WL_PROXD_TUNE_VERSION_3 3
+/* Future ranging support */
+typedef struct wl_proxd_params_tof_tune_v3 {
+ uint16 version;
+ uint16 len;
+ uint32 Ki; /**< h/w delay K factor for initiator */
+ uint32 Kt; /**< h/w delay K factor for target */
+ int16 vhtack; /**< enable/disable VHT ACK */
+ uint16 PAD;
+ int16 N_log2[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ uint16 PAD;
+ int16 w_offset[TOF_BW_NUM]; /**< offset of threshold crossing window(per BW) */
+ uint16 PAD;
+ int16 w_len[TOF_BW_NUM]; /**< length of threshold crossing window(per BW) */
+ uint16 PAD;
+ int32 maxDT; /**< max time difference of T4/T1 or T3/T2 */
+ int32 minDT; /**< min time difference of T4/T1 or T3/T2 */
+ uint8 totalfrmcnt; /**< total count of transfered measurement frames */
+ uint8 PAD[3];
+ uint16 rsv_media; /**< reserve media value for TOF */
+ uint16 PAD;
+ uint32 flags; /**< flags */
+ uint8 core; /**< core to use for tx */
+ uint8 setflags; /* set flags of K, N. S values */
+ uint16 PAD;
+ int16 N_scale[TOF_BW_SEQ_NUM]; /**< simple threshold crossing */
+ uint8 sw_adj; /**< enable sw assisted timestamp adjustment */
+ uint8 hw_adj; /**< enable hw assisted timestamp adjustment */
+ uint8 seq_en; /**< enable ranging sequence */
+ uint8 PAD[3];
+ uint8 ftm_cnt[TOF_BW_SEQ_NUM]; /**< number of ftm frames based on bandwidth */
+ uint8 PAD[3];
+ int16 N_log2_2g; /**< simple threshold crossing for 2g channel */
+ int16 N_scale_2g; /**< simple threshold crossing for 2g channel */
+ wl_proxd_seq_config_t seq_5g20;
+ wl_proxd_seq_config_t seq_2g20; /* Thresh crossing params for 2G Sequence */
+ uint16 bitflip_thresh; /* bitflip threshold */
+ uint16 snr_thresh; /* SNR threshold */
+ int8 recv_2g_thresh; /* 2g recieve sensitivity threshold */
+ uint8 PAD[3];
+ uint32 acs_gdv_thresh;
+ int8 acs_rssi_thresh;
+ uint8 smooth_win_en;
+ uint16 PAD;
+ int32 acs_gdmm_thresh;
+ int8 acs_delta_rssi_thresh;
+ uint8 PAD[3];
+ int32 emu_delay;
+ uint8 core_mask; /* core mask selection */
+ uint8 PAD[3];
+} wl_proxd_params_tof_tune_v3_t;
typedef struct wl_proxd_params_iovar {
- uint16 method; /* Proxmity Detection method */
+ uint16 method; /**< Proximity Detection method */
+ uint8 PAD[2];
union {
/* common params for pdsvc */
- wl_proxd_params_common_t cmn_params; /* common parameters */
+ wl_proxd_params_common_t cmn_params; /**< common parameters */
/* method specific */
- wl_proxd_params_rssi_method_t rssi_params; /* RSSI method parameters */
- wl_proxd_params_tof_method_t tof_params; /* TOF meothod parameters */
+ wl_proxd_params_rssi_method_t rssi_params; /**< RSSI method parameters */
+ wl_proxd_params_tof_method_t tof_params; /**< TOF method parameters */
/* tune parameters */
- wl_proxd_params_tof_tune_t tof_tune; /* TOF tune parameters */
- } u; /* Method specific optional parameters */
+ wl_proxd_params_tof_tune_v3_t tof_tune; /**< TOF tune parameters */
+ } u; /**< Method specific optional parameters */
} wl_proxd_params_iovar_t;
#define PROXD_COLLECT_GET_STATUS 0
@@ -6223,120 +9700,1108 @@
#define PROXD_COLLECT_QUERY_DATA 3
#define PROXD_COLLECT_QUERY_DEBUG 4
#define PROXD_COLLECT_REMOTE_REQUEST 5
-#define PROXD_COLLECT_DONE 6
+#define PROXD_COLLECT_DONE 6
+typedef enum {
+ WL_PROXD_COLLECT_METHOD_TYPE_DISABLE = 0x0,
+ WL_PROXD_COLLECT_METHOD_TYPE_IOVAR = 0x1,
+ WL_PROXD_COLLECT_METHOD_TYPE_EVENT = 0x2,
+ WL_PROXD_COLLECT_METHOD_TYPE_EVENT_LOG = 0x4
+} wl_proxd_collect_method_type_t;
+
+typedef uint16 wl_proxd_collect_method_t; /* query status: method to send proxd collect */
+
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_query {
- uint32 method; /* method */
- uint8 request; /* Query request. */
- uint8 status; /* 0 -- disable, 1 -- enable collection, */
- /* 2 -- enable collection & debug */
- uint16 index; /* The current frame index [0 to total_frames - 1]. */
- uint16 mode; /* Initiator or Target */
- bool busy; /* tof sm is busy */
- bool remote; /* Remote collect data */
+ uint32 method; /**< method */
+ uint8 request; /**< Query request. */
+ uint8 status; /**< bitmask 0 -- disable, 0x1 -- enable collection, */
+ /* 0x2 -- Use generic event, 0x4 -- use event log */
+ uint16 index; /**< The current frame index [0 to total_frames - 1]. */
+ uint16 mode; /**< Initiator or Target */
+ uint8 busy; /**< tof sm is busy */
+ uint8 remote; /**< Remote collect data */
} BWL_POST_PACKED_STRUCT wl_proxd_collect_query_t;
+#include <packed_section_end.h>
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_header {
- uint16 total_frames; /* The totral frames for this collect. */
- uint16 nfft; /* nfft value */
- uint16 bandwidth; /* bandwidth */
- uint16 channel; /* channel number */
- uint32 chanspec; /* channel spec */
- uint32 fpfactor; /* avb timer value factor */
- uint16 fpfactor_shift; /* avb timer value shift bits */
- int32 distance; /* distance calculated by fw */
- uint32 meanrtt; /* mean of RTTs */
- uint32 modertt; /* mode of RTTs */
- uint32 medianrtt; /* median of RTTs */
- uint32 sdrtt; /* standard deviation of RTTs */
- uint32 clkdivisor; /* clock divisor */
- uint16 chipnum; /* chip type */
- uint8 chiprev; /* chip revision */
- uint8 phyver; /* phy version */
- struct ether_addr loaclMacAddr; /* local mac address */
- struct ether_addr remoteMacAddr; /* remote mac address */
- wl_proxd_params_tof_tune_t params;
+ uint16 total_frames; /**< The total frames for this collect. */
+ uint16 nfft; /**< nfft value */
+ uint16 bandwidth; /**< bandwidth */
+ uint16 channel; /**< channel number */
+ uint32 chanspec; /**< channel spec */
+ uint32 fpfactor; /**< avb timer value factor */
+ uint16 fpfactor_shift; /**< avb timer value shift bits */
+ int32 distance; /**< distance calculated by fw */
+ uint32 meanrtt; /**< mean of RTTs */
+ uint32 modertt; /**< mode of RTTs */
+ uint32 medianrtt; /**< median of RTTs */
+ uint32 sdrtt; /**< standard deviation of RTTs */
+ uint32 clkdivisor; /**< clock divisor */
+ uint16 chipnum; /**< chip type */
+ uint8 chiprev; /**< chip revision */
+ uint8 phyver; /**< phy version */
+ struct ether_addr localMacAddr; /**< local mac address */
+ struct ether_addr remoteMacAddr; /**< remote mac address */
+ wl_proxd_params_tof_tune_v3_t params;
} BWL_POST_PACKED_STRUCT wl_proxd_collect_header_t;
+#include <packed_section_end.h>
-
-#ifdef WL_NAN
+/* ifdef WL_NAN */
/* ********************** NAN wl interface struct types and defs ******************** */
+/*
+ * Uses new common IOVAR batch processing mechanism
+ */
-#define WL_NAN_IOCTL_VERSION 0x1
-#define NAN_IOC_BUFSZ 256 /* some sufficient ioc buff size for our module */
-#define NAN_IOC_BUFSZ_EXT 1024 /* some sufficient ioc buff size for dump commands */
+/*
+ * NAN config control
+ * Bits 0 - 23 can be set by host
+ * Bits 24 - 31 - Internal use for firmware, host cannot set it
+ */
-/* wl_nan_sub_cmd may also be used in dhd */
-typedef struct wl_nan_sub_cmd wl_nan_sub_cmd_t;
-typedef int (cmd_handler_t)(void *wl, const wl_nan_sub_cmd_t *cmd, char **argv);
-/* nan cmd list entry */
-struct wl_nan_sub_cmd {
- char *name;
- uint8 version; /* cmd version */
- uint16 id; /* id for the dongle f/w switch/case */
- uint16 type; /* base type of argument */
- cmd_handler_t *handler; /* cmd handler */
+/*
+ * Bit 0 : If set to 1, means event uses nan bsscfg,
+ * otherwise uses infra bsscfg. Default is using infra bsscfg
+ */
+#define WL_NAN_CTRL_ROUTE_EVENT_VIA_NAN_BSSCFG 0x0000001
+/* If set, discovery beacons are transmitted on 2G band */
+#define WL_NAN_CTRL_DISC_BEACON_TX_2G 0x0000002
+/* If set, sync beacons are transmitted on 2G band */
+#define WL_NAN_CTRL_SYNC_BEACON_TX_2G 0x0000004
+/* If set, discovery beacons are transmitted on 5G band */
+#define WL_NAN_CTRL_DISC_BEACON_TX_5G 0x0000008
+/* If set, sync beacons are transmitted on 5G band */
+#define WL_NAN_CTRL_SYNC_BEACON_TX_5G 0x0000010
+/* If set, auto datapath responses will be sent by FW */
+#define WL_NAN_CTRL_AUTO_DPRESP 0x0000020
+/* If set, auto datapath confirms will be sent by FW */
+#define WL_NAN_CTRL_AUTO_DPCONF 0x0000040
+/* If set, auto schedule responses will be sent by FW */
+#define WL_NAN_CTRL_AUTO_SCHEDRESP 0x0000080
+/* If set, auto schedule confirms will be sent by FW */
+#define WL_NAN_CTRL_AUTO_SCHEDCONF 0x0000100
+/* If set, proprietary rates are supported by FW */
+#define WL_NAN_CTRL_PROP_RATE 0x0000200
+/* If set, service awake_dw overrides global dev awake_dw */
+#define WL_NAN_CTRL_SVC_OVERRIDE_DEV_AWAKE_DW 0x0000400
+/* If set, merge scan will be disabled */
+#define WL_NAN_CTRL_SCAN_DISABLE 0x0000800
+/* If set, power save will be disabled */
+#define WL_NAN_CTRL_POWER_SAVE_DISABLE 0x0001000
+/* If set, device will merge to configured CID only */
+#define WL_NAN_CTRL_MERGE_CONF_CID_ONLY 0x0002000
+/* If set, 5g core will be brought down in single band NAN */
+#define WL_NAN_CTRL_5G_SLICE_POWER_OPT 0x0004000
+#define WL_NAN_CTRL_DUMP_HEAP 0x0008000
+/* If set, host generates and assign ndp id for ndp sessions */
+#define WL_NAN_CTRL_HOST_GEN_NDPID 0x0010000
+/* If set, nan ndp inactivity watchdog will be activated */
+#define WL_NAN_CTRL_DELETE_INACTIVE_PEERS 0x0020000
+/* If set, nan assoc coex will be activated */
+#define WL_NAN_CTRL_INFRA_ASSOC_COEX 0x0040000
+/* If set, dam will accept all NDP/RNG request from the peer including counter */
+#define WL_NAN_CTRL_DAM_ACCEPT_ALL 0x0080000
+/* If set, nan mac ignores role for tx discovery beacon for periodic config */
+#define WL_NAN_CTRL_FASTDISC_IGNO_ROLE 0x0100000
+/* If set, include NA in NAN beacons (disc beacons for now) */
+#define WL_NAN_CTRL_INCL_NA_IN_BCNS 0x0200000
+/* If set, host assist will be enabled */
+#define WL_NAN_CTRL_HOST_ASSIST 0x0400000
+/* If set, host configures NDI associated with the service */
+#define WL_NAN_CTRL_HOST_CFG_SVC_NDI 0x0800000
+#define WL_NAN_CTRL_NDP_HB_ENABLE 0x1000000
+
+/* Value when all host-configurable bits set */
+#define WL_NAN_CTRL_MAX_MASK 0xFFFFFFF
+#define WL_NAN_CFG_CTRL_FW_BITS 4
+
+/* Last 4-bits are firmware controlled bits.
+ * Bit 31:
+ * If set - indicates that NAN initialization is successful
+ * Bit 30:
+ * If set - indicates that NAN MAC cfg creation is successful
+ *
+ * NOTE: These are only ready-only bits for host.
+ * All sets to these bits from host are masked off
+ */
+#define WL_NAN_PROTO_INIT_DONE (1 << 31)
+#define WL_NAN_CFG_CREATE_DONE (1 << 30)
+
+#define WL_NAN_GET_PROTO_INIT_STATUS(x) \
+ (((x) & WL_NAN_PROTO_INIT_DONE) ? TRUE:FALSE)
+#define WL_NAN_CLEAR_PROTO_INIT_STATUS(x) \
+ ((x) &= ~WL_NAN_PROTO_INIT_DONE)
+#define WL_NAN_SET_PROTO_INIT_STATUS(x) \
+ ((x) |= (WL_NAN_PROTO_INIT_DONE))
+
+#define WL_NAN_GET_CFG_CREATE_STATUS(x) \
+ (((x) & WL_NAN_CFG_CREATE_DONE) ? TRUE:FALSE)
+#define WL_NAN_CLEAR_CFG_CREATE_STATUS(x) \
+ ((x) &= ~WL_NAN_CFG_CREATE_DONE)
+#define WL_NAN_SET_CFG_CREATE_STATUS(x) \
+ ((x) |= (WL_NAN_CFG_CREATE_DONE))
+
+#define WL_NAN_IOCTL_VERSION 0x2
+/* < some sufficient ioc buff size for our module */
+#define WL_NAN_IOC_BUFSZ 256
+/* some sufficient ioc buff size for dump commands */
+#define WL_NAN_IOC_BUFSZ_EXT 1024
+#define WL_NAN_MAX_SIDS_IN_BEACONS 127 /* Max allowed SIDs */
+#define WL_NAN_MASTER_RANK_LEN 8
+#define WL_NAN_RANGE_LIMITED 0x0040 /* Publish/Subscribe flags */
+
+/** The service hash (service id) is exactly this many bytes. */
+#define WL_NAN_SVC_HASH_LEN 6
+#define WL_NAN_HASHES_PER_BLOOM 4 /** Number of hash functions per bloom filter */
+
+/* no. of max last disc results */
+#define WL_NAN_MAX_DISC_RESULTS 3
+
+/* Max len of Rx and Tx filters */
+#define WL_NAN_MAX_SVC_MATCH_FILTER_LEN 255
+
+/* Max service name len */
+#define WL_NAN_MAX_SVC_NAME_LEN 32
+
+/* Type of Data path connection */
+#define WL_NAN_DP_TYPE_UNICAST 0
+#define WL_NAN_DP_TYPE_MULTICAST 1
+
+/* MAX security params length PMK field */
+#define WL_NAN_NCS_SK_PMK_LEN 32
+
+/* Post disc attr ID type */
+typedef uint8 wl_nan_post_disc_attr_id_t;
+
+/*
+ * Component IDs
+ */
+typedef enum {
+ WL_NAN_COMPID_CONFIG = 1,
+ WL_NAN_COMPID_ELECTION = 2,
+ WL_NAN_COMPID_SD = 3,
+ WL_NAN_COMPID_TIMESYNC = 4,
+ WL_NAN_COMPID_DATA_PATH = 5,
+ WL_NAN_COMPID_DEBUG = 15 /* Keep this at the end */
+} wl_nan_comp_id_t;
+
+#define WL_NAN_COMP_SHIFT 8
+#define WL_NAN_COMP_MASK(_c) (0x0F & ((uint8)(_c)))
+#define WL_NAN_COMP_ID(_c) (WL_NAN_COMP_MASK(_c) << WL_NAN_COMP_SHIFT)
+
+/* NAN Events */
+
+/** Instance ID type (unique identifier) */
+typedef uint8 wl_nan_instance_id_t;
+
+/* Publish sent for a subscribe */
+/* WL_NAN_EVENT_REPLIED */
+
+typedef struct wl_nan_ev_replied {
+ struct ether_addr sub_mac; /* Subscriber MAC */
+ wl_nan_instance_id_t pub_id; /* Publisher Instance ID */
+ uint8 sub_id; /* Subscriber ID */
+ int8 sub_rssi; /* Subscriber RSSI */
+ uint8 pad[3];
+} wl_nan_ev_replied_t;
+
+typedef struct wl_nan_event_replied {
+ struct ether_addr sub_mac; /* Subscriber MAC */
+ wl_nan_instance_id_t pub_id; /* Publisher Instance ID */
+ uint8 sub_id; /* Subscriber ID */
+ int8 sub_rssi; /* Subscriber RSSI */
+ uint8 attr_num;
+ uint16 attr_list_len; /* sizeof attributes attached to payload */
+ uint8 attr_list[0]; /* attributes payload */
+} wl_nan_event_replied_t;
+
+/* NAN Tx status of transmitted frames */
+#define WL_NAN_TXS_FAILURE 0
+#define WL_NAN_TXS_SUCCESS 1
+
+/* NAN frame types */
+enum wl_nan_frame_type {
+ /* discovery frame types */
+ WL_NAN_FRM_TYPE_PUBLISH = 1,
+ WL_NAN_FRM_TYPE_SUBSCRIBE = 2,
+ WL_NAN_FRM_TYPE_FOLLOWUP = 3,
+
+ /* datapath frame types */
+ WL_NAN_FRM_TYPE_DP_REQ = 4,
+ WL_NAN_FRM_TYPE_DP_RESP = 5,
+ WL_NAN_FRM_TYPE_DP_CONF = 6,
+ WL_NAN_FRM_TYPE_DP_INSTALL = 7,
+ WL_NAN_FRM_TYPE_DP_END = 8,
+
+ /* schedule frame types */
+ WL_NAN_FRM_TYPE_SCHED_REQ = 9,
+ WL_NAN_FRM_TYPE_SCHED_RESP = 10,
+ WL_NAN_FRM_TYPE_SCHED_CONF = 11,
+ WL_NAN_FRM_TYPE_SCHED_UPD = 12,
+
+ /* ranging frame types */
+ WL_NAN_FRM_TYPE_RNG_REQ = 13,
+ WL_NAN_FRM_TYPE_RNG_RESP = 14,
+ WL_NAN_FRM_TYPE_RNG_TERM = 15,
+ WL_NAN_FRM_TYPE_RNG_REPORT = 16,
+
+ WL_NAN_FRM_TYPE_UNSOLICIT_SDF = 17,
+ WL_NAN_FRM_TYPE_INVALID
+};
+typedef uint8 wl_nan_frame_type_t;
+
+/* NAN Reason codes for tx status */
+enum wl_nan_txs_reason_codes {
+ WL_NAN_REASON_SUCCESS = 1, /* NAN status success */
+ WL_NAN_REASON_TIME_OUT = 2, /* timeout reached */
+ WL_NAN_REASON_DROPPED = 3, /* pkt dropped due to internal failure */
+ WL_NAN_REASON_MAX_RETRIES_DONE = 4 /* Max retries exceeded */
};
-/* container for nan iovtls & events */
-typedef BWL_PRE_PACKED_STRUCT struct wl_nan_ioc {
- uint16 version; /* interface command or event version */
- uint16 id; /* nan ioctl cmd ID */
- uint16 len; /* total length of all tlv records in data[] */
- uint16 pad; /* pad to be 32 bit aligment */
- uint8 data [1]; /* var len payload of bcm_xtlv_t type */
-} BWL_POST_PACKED_STRUCT wl_nan_ioc_t;
+/* For NAN TX status */
+typedef struct wl_nan_event_txs {
+ uint8 status; /* For TX status, success or failure */
+ uint8 reason_code; /* to identify reason when status is failure */
+ uint16 host_seq; /* seq num to keep track of pkts sent by host */
+ uint8 type; /* frame type */
+ uint8 pad;
+ uint16 opt_tlvs_len;
+ uint8 opt_tlvs[];
+} wl_nan_event_txs_t;
-typedef struct wl_nan_status {
- uint8 inited;
- uint8 joined;
- uint8 role;
- uint8 hop_count;
- uint32 chspec[2];
- uint8 amr[8]; /* Anchor Master Rank */
- uint32 cnt_pend_txfrm; /* pending TX frames */
- uint32 cnt_bcn_tx; /* TX disc/sync beacon count */
- uint32 cnt_bcn_rx; /* RX disc/sync beacon count */
- uint32 cnt_svc_disc_tx; /* TX svc disc frame count */
- uint32 cnt_svc_disc_rx; /* RX svc disc frame count */
- struct ether_addr cid;
-} wl_nan_status_t;
+/* SD transmit pkt's event status is sent as optional tlv in wl_nan_event_txs_t */
+typedef struct wl_nan_event_sd_txs {
+ uint8 inst_id; /* Publish or subscribe instance id */
+ uint8 req_id; /* Requestor instance id */
+} wl_nan_event_sd_txs_t;
-typedef struct wl_nan_count {
- uint32 cnt_bcn_tx; /* TX disc/sync beacon count */
- uint32 cnt_bcn_rx; /* RX disc/sync beacon count */
- uint32 cnt_svc_disc_tx; /* TX svc disc frame count */
- uint32 cnt_svc_disc_rx; /* RX svc disc frame count */
-} wl_nan_count_t;
+/* Subscribe or Publish instance Terminated */
-/* various params and ctl swithce for nan_debug instance */
-typedef struct nan_debug_params {
- uint8 enabled; /* runtime debuging enabled */
- uint8 collect; /* enables debug svc sdf monitor mode */
- uint16 cmd; /* debug cmd to perform a debug action */
- uint32 msglevel; /* msg level if enabled */
- uint16 status;
-} nan_debug_params_t;
+/* WL_NAN_EVENT_TERMINATED */
-/* time slot */
-#define NAN_MAX_TIMESLOT 32
-typedef struct nan_timeslot {
- uint32 abitmap; /* available bitmap */
- uint32 chanlist[NAN_MAX_TIMESLOT];
-} nan_timeslot_t;
+#define NAN_SD_TERM_REASON_TIMEOUT 1
+#define NAN_SD_TERM_REASON_HOSTREQ 2
+#define NAN_SD_TERM_REASON_FWTERM 3
+#define NAN_SD_TERM_REASON_FAIL 4
-/* nan passive scan params */
-#define NAN_SCAN_MAX_CHCNT 8
-typedef struct nan_scan_params {
- uint16 scan_time;
- uint16 home_time;
- uint16 ms_intvl; /* interval between merge scan */
- uint16 ms_dur; /* duration of merge scan */
- uint16 chspec_num;
+typedef struct wl_nan_ev_terminated {
+ uint8 instance_id; /* publish / subscribe instance id */
+ uint8 reason; /* 1=timeout, 2=Host/IOVAR, 3=FW Terminated 4=Failure */
+ uint8 svctype; /* 0 - Publish, 0x1 - Subscribe */
+ uint8 pad; /* Align */
+ uint32 tx_cnt; /* Number of SDFs sent */
+} wl_nan_ev_terminated_t;
+
+/* Follow up received against a pub / subscr */
+/* WL_NAN_EVENT_RECEIVE */
+
+typedef struct wl_nan_ev_receive {
+ struct ether_addr remote_addr; /* Peer NAN device MAC */
+ uint8 local_id; /* Local subscribe or publish ID */
+ uint8 remote_id; /* Remote subscribe or publish ID */
+ int8 fup_rssi;
+ uint8 attr_num;
+ uint16 attr_list_len; /* sizeof attributes attached to payload */
+ uint8 attr_list[0]; /* attributes payload */
+} wl_nan_ev_receive_t;
+
+/* WL_NAN_EVENT_DISC_CACHE_TIMEOUT */
+#define WL_NAN_DISC_CACHE_EXPIRY_ENTRIES_MAX 8
+
+typedef struct wl_nan_disc_expired_cache_entry {
+ uint8 l_sub_id; /* local sub instance_id */
+ uint8 r_pub_id; /* remote-matched pub instance_id */
+ struct ether_addr r_nmi_addr; /* remote-matched pub nmi addr */
+} wl_nan_disc_expired_cache_entry_t;
+
+typedef struct wl_nan_ev_disc_cache_timeout {
+ uint16 count; /* no. of expired cache entries */
+ uint16 pad;
+ wl_nan_disc_expired_cache_entry_t cache_exp_list[];
+} wl_nan_ev_disc_cache_timeout_t;
+
+/* For NAN event mask extention */
+#define WL_NAN_EVMASK_EXTN_VER 1
+#define WL_NAN_EVMASK_EXTN_LEN 16 /* 16*8 = 128 masks supported */
+
+typedef struct wl_nan_event_extn {
+ uint8 ver;
+ uint8 pad;
+ uint16 len;
+ uint8 evmask[];
+} wl_nan_evmask_extn_t;
+
+/* WL_NAN_XTLV_DATA_DP_TXS */
+
+typedef struct wl_nan_data_dp_txs {
+ uint8 ndp_id;
+ uint8 pad;
+ struct ether_addr indi; /* initiator ndi */
+} wl_nan_data_dp_txs_t;
+
+/* WL_NAN_XTLV_RNG_TXS */
+
+typedef struct wl_nan_range_txs {
+ uint8 range_id;
+ uint8 pad[3];
+} wl_nan_range_txs_t;
+
+#define NAN_MAX_BANDS 2
+
+/*
+ * TLVs - Below XTLV definitions will be deprecated
+ * in due course (soon as all other branches update
+ * to the comp ID based XTLVs listed below).
+ */
+enum wl_nan_cmd_xtlv_id {
+ WL_NAN_XTLV_MAC_ADDR = 0x120,
+ WL_NAN_XTLV_MATCH_RX = 0x121,
+ WL_NAN_XTLV_MATCH_TX = 0x122,
+ WL_NAN_XTLV_SVC_INFO = 0x123,
+ WL_NAN_XTLV_SVC_NAME = 0x124,
+ WL_NAN_XTLV_SR_FILTER = 0x125,
+ WL_NAN_XTLV_FOLLOWUP = 0x126,
+ WL_NAN_XTLV_SVC_LIFE_COUNT = 0x127,
+ WL_NAN_XTLV_AVAIL = 0x128,
+ WL_NAN_XTLV_SDF_RX = 0x129,
+ WL_NAN_XTLV_SDE_CONTROL = 0x12a,
+ WL_NAN_XTLV_SDE_RANGE_LIMIT = 0x12b,
+ WL_NAN_XTLV_NAN_AF = 0x12c,
+ WL_NAN_XTLV_SD_TERMINATE = 0x12d,
+ WL_NAN_XTLV_CLUSTER_ID = 0x12e,
+ WL_NAN_XTLV_PEER_RSSI = 0x12f,
+ WL_NAN_XTLV_BCN_RX = 0x130,
+ WL_NAN_XTLV_REPLIED = 0x131, /* Publish sent for a subscribe */
+ WL_NAN_XTLV_RECEIVED = 0x132, /* FUP Received */
+ WL_NAN_XTLV_DISC_RESULTS = 0x133, /* Discovery results */
+ WL_NAN_XTLV_TXS = 0x134 /* TX status */
+};
+
+#define WL_NAN_CMD_GLOBAL 0x00
+#define WL_NAN_CMD_CFG_COMP_ID 0x01
+#define WL_NAN_CMD_ELECTION_COMP_ID 0x02
+#define WL_NAN_CMD_SD_COMP_ID 0x03
+#define WL_NAN_CMD_SYNC_COMP_ID 0x04
+#define WL_NAN_CMD_DATA_COMP_ID 0x05
+#define WL_NAN_CMD_DAM_COMP_ID 0x06
+#define WL_NAN_CMD_RANGE_COMP_ID 0x07
+#define WL_NAN_CMD_GENERIC_COMP_ID 0x08
+#define WL_NAN_CMD_SCHED_COMP_ID 0x09
+#define WL_NAN_CMD_NSR_COMP_ID 0x0a /* NAN Save Restore */
+#define WL_NAN_CMD_NANHO_COMP_ID 0x0b /* NAN Host offload */
+#define WL_NAN_CMD_DBG_COMP_ID 0x0f
+
+#define WL_NAN_CMD_COMP_SHIFT 8
+#define NAN_CMD(x, y) (((x) << WL_NAN_CMD_COMP_SHIFT) | (y))
+
+/*
+ * Module based NAN TLV IDs
+ */
+typedef enum wl_nan_tlv {
+
+ WL_NAN_XTLV_CFG_MATCH_RX = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x01),
+ WL_NAN_XTLV_CFG_MATCH_TX = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x02),
+ WL_NAN_XTLV_CFG_SR_FILTER = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x03),
+ WL_NAN_XTLV_CFG_SVC_NAME = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x04),
+ WL_NAN_XTLV_CFG_NAN_STATUS = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x05),
+ WL_NAN_XTLV_CFG_SVC_LIFE_COUNT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x06),
+ WL_NAN_XTLV_CFG_SVC_HASH = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x07),
+ WL_NAN_XTLV_CFG_SEC_CSID = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x08), /* Security CSID */
+ WL_NAN_XTLV_CFG_SEC_PMK = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x09), /* Security PMK */
+ WL_NAN_XTLV_CFG_SEC_PMKID = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0A),
+ WL_NAN_XTLV_CFG_SEC_SCID = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0B),
+ WL_NAN_XTLV_CFG_VNDR_PAYLOAD = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0C),
+ WL_NAN_XTLV_CFG_HOST_INDPID = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0D),
+ /* when host ndpid is used */
+ WL_NAN_XTLV_CFG_MAC_ADDR = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0E),
+ /* fast disc time bitmap config */
+ WL_NAN_XTLV_CFG_FDISC_TBMP = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0F),
+
+ WL_NAN_XTLV_SD_SVC_INFO = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x01),
+ WL_NAN_XTLV_SD_FOLLOWUP = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x02),
+ WL_NAN_XTLV_SD_SDF_RX = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x03),
+ WL_NAN_XTLV_SD_SDE_CONTROL = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x04),
+ WL_NAN_XTLV_SD_SDE_RANGE_LIMIT = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x05),
+ WL_NAN_XTLV_SD_NAN_AF = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x06),
+ WL_NAN_XTLV_SD_TERM = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x07),
+ WL_NAN_XTLV_SD_REPLIED = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x08), /* Pub sent */
+ WL_NAN_XTLV_SD_FUP_RECEIVED = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x09), /* FUP Received */
+ WL_NAN_XTLV_SD_DISC_RESULTS = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0A), /* Pub RX */
+ WL_NAN_XTLV_SD_TXS = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0B), /* Tx status */
+ WL_NAN_XTLV_SD_SDE_SVC_INFO = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0C),
+ WL_NAN_XTLV_SD_SDE_SVC_UPD_IND = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0D),
+ WL_NAN_XTLV_SD_SVC_NDI = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0E),
+ WL_NAN_XTLV_SD_NDP_SPEC_INFO = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0F),
+ WL_NAN_XTLV_SD_NDPE_TLV_LIST = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x10),
+ WL_NAN_XTLV_SD_NDL_QOS_UPD = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x11),
+ WL_NAN_XTLV_SD_DISC_CACHE_TIMEOUT = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x12),
+
+ WL_NAN_XTLV_SYNC_BCN_RX = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x01),
+ WL_NAN_XTLV_EV_MR_CHANGED = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x02),
+
+ WL_NAN_XTLV_DATA_DP_END = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x01),
+ WL_NAN_XTLV_DATA_DP_INFO = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x02),
+ WL_NAN_XTLV_DATA_DP_SEC_INST = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x03),
+ WL_NAN_XTLV_DATA_DP_TXS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x04), /* txs for dp */
+ WL_NAN_XTLV_DATA_DP_OPAQUE_INFO = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x05),
+ WL_NAN_XTLV_RANGE_INFO = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x01),
+ WL_NAN_XTLV_RNG_TXS = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x02),
+
+ WL_NAN_XTLV_EV_SLOT_INFO = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x01),
+ WL_NAN_XTLV_EV_GEN_INFO = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x02),
+ WL_NAN_XTLV_CCA_STATS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x03),
+ WL_NAN_XTLV_PER_STATS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x04),
+ WL_NAN_XTLV_CHBOUND_INFO = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x05),
+ WL_NAN_XTLV_SLOT_STATS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x06),
+
+ WL_NAN_XTLV_DAM_NA_ATTR = NAN_CMD(WL_NAN_CMD_DAM_COMP_ID, 0x01), /* na attr */
+ WL_NAN_XTLV_HOST_ASSIST_REQ = NAN_CMD(WL_NAN_CMD_DAM_COMP_ID, 0x02), /* host assist */
+
+ WL_NAN_XTLV_GEN_FW_CAP = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x01), /* fw cap */
+
+ WL_NAN_XTLV_SCHED_INFO = NAN_CMD(WL_NAN_CMD_SCHED_COMP_ID, 0x01),
+
+ /* Nan Save-Restore XTLVs */
+ WL_NAN_XTLV_NSR2_PEER = NAN_CMD(WL_NAN_CMD_NSR_COMP_ID, 0x21),
+ WL_NAN_XTLV_NSR2_NDP = NAN_CMD(WL_NAN_CMD_NSR_COMP_ID, 0x22),
+
+ /* Host offload XTLVs */
+ WL_NAN_XTLV_NANHO_PEER_ENTRY = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x01),
+ WL_NAN_XTLV_NANHO_DCAPLIST = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x02),
+ WL_NAN_XTLV_NANHO_DCSLIST = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x03),
+ WL_NAN_XTLV_NANHO_BLOB = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x04),
+ WL_NAN_XTLV_NANHO_NDP_STATE = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x05),
+ WL_NAN_XTLV_NANHO_FRM_TPLT = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x06),
+ WL_NAN_XTLV_NANHO_OOB_NAF = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x07)
+} wl_nan_tlv_t;
+
+/* Sub Module ID's for NAN */
+enum {
+ NAN_MAC = 0, /* nan mac */
+ NAN_DISC = 1, /* nan discovery */
+ NAN_DBG = 2, /* nan debug */
+ NAN_SCHED = 3, /* nan sched */
+ NAN_PEER_ENTRY = 4, /* nan peer entry */
+ NAN_AVAIL = 5, /* nan avail */
+ NAN_DAM = 6, /* nan dam */
+ NAN_FSM = 7, /* nan fsm registry */
+ NAN_NDP = 8, /* nan ndp */
+ NAN_NDL = 9, /* nan ndl */
+ NAN_DP = 10, /* nan dp core */
+ NAN_RNG = 11, /* nan ranging */
+ NAN_SEC = 12, /* nan sec */
+ NAN_LAST = 13
+};
+
+enum wl_nan_sub_cmd_xtlv_id {
+
+ /* Special command - Tag zero */
+ WL_NAN_CMD_GLB_NAN_VER = NAN_CMD(WL_NAN_CMD_GLOBAL, 0x00),
+
+ /* nan cfg sub-commands */
+
+ WL_NAN_CMD_CFG_NAN_INIT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x01),
+ WL_NAN_CMD_CFG_ROLE = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x02),
+ WL_NAN_CMD_CFG_HOP_CNT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x03),
+ WL_NAN_CMD_CFG_HOP_LIMIT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x04),
+ WL_NAN_CMD_CFG_WARMUP_TIME = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x05),
+ WL_NAN_CMD_CFG_STATUS = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x06),
+ WL_NAN_CMD_CFG_OUI = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x07),
+ WL_NAN_CMD_CFG_COUNT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x08),
+ WL_NAN_CMD_CFG_CLEARCOUNT = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x09),
+ WL_NAN_CMD_CFG_CHANNEL = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0A),
+ WL_NAN_CMD_CFG_BAND = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0B),
+ WL_NAN_CMD_CFG_CID = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0C),
+ WL_NAN_CMD_CFG_IF_ADDR = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0D),
+ WL_NAN_CMD_CFG_BCN_INTERVAL = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0E),
+ WL_NAN_CMD_CFG_SDF_TXTIME = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x0F),
+ WL_NAN_CMD_CFG_SID_BEACON = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x10),
+ WL_NAN_CMD_CFG_DW_LEN = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x11),
+ WL_NAN_CMD_CFG_AVAIL = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x12),
+ WL_NAN_CMD_CFG_WFA_TM = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x13),
+ WL_NAN_CMD_CFG_EVENT_MASK = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x14),
+ WL_NAN_CMD_CFG_NAN_CONFIG = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x15), /* ctrl */
+ WL_NAN_CMD_CFG_NAN_ENAB = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x16),
+ WL_NAN_CMD_CFG_ULW = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x17),
+ WL_NAN_CMD_CFG_NAN_CONFIG2 = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x18), /* ctrl2 */
+ WL_NAN_CMD_CFG_DEV_CAP = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x19),
+ WL_NAN_CMD_CFG_SCAN_PARAMS = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x1A),
+ WL_NAN_CMD_CFG_VNDR_PAYLOAD = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x1B),
+ WL_NAN_CMD_CFG_FASTDISC = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x1C),
+ WL_NAN_CMD_CFG_MIN_TX_RATE = NAN_CMD(WL_NAN_CMD_CFG_COMP_ID, 0x1D),
+ WL_NAN_CMD_CFG_MAX = WL_NAN_CMD_CFG_MIN_TX_RATE,
+
+ /* Add new commands before and update */
+
+ /* nan election sub-commands */
+ WL_NAN_CMD_ELECTION_HOST_ENABLE = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x01),
+ WL_NAN_CMD_ELECTION_METRICS_CONFIG = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x02),
+ WL_NAN_CMD_ELECTION_METRICS_STATE = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x03),
+ WL_NAN_CMD_ELECTION_LEAVE = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x03),
+ WL_NAN_CMD_ELECTION_MERGE = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x04),
+ WL_NAN_CMD_ELECTION_ADVERTISERS = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x05),
+ WL_NAN_CMD_ELECTION_RSSI_THRESHOLD = NAN_CMD(WL_NAN_CMD_ELECTION_COMP_ID, 0x06),
+ WL_NAN_CMD_ELECTION_MAX = WL_NAN_CMD_ELECTION_RSSI_THRESHOLD,
+ /* New commands go before and update */
+
+ /* nan SD sub-commands */
+ WL_NAN_CMD_SD_PARAMS = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x01),
+ WL_NAN_CMD_SD_PUBLISH = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x02),
+ WL_NAN_CMD_SD_PUBLISH_LIST = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x03),
+ WL_NAN_CMD_SD_CANCEL_PUBLISH = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x04),
+ WL_NAN_CMD_SD_SUBSCRIBE = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x05),
+ WL_NAN_CMD_SD_SUBSCRIBE_LIST = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x06),
+ WL_NAN_CMD_SD_CANCEL_SUBSCRIBE = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x07),
+ WL_NAN_CMD_SD_VND_INFO = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x08),
+ WL_NAN_CMD_SD_STATS = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x09),
+ WL_NAN_CMD_SD_TRANSMIT = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0A),
+ WL_NAN_CMD_SD_FUP_TRANSMIT = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0B),
+ WL_NAN_CMD_SD_CONNECTION = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0C),
+ WL_NAN_CMD_SD_SHOW = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0D),
+ WL_NAN_CMD_SD_DISC_CACHE_TIMEOUT = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0E),
+ WL_NAN_CMD_SD_DISC_CACHE_CLEAR = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x0F),
+ WL_NAN_CMD_SD_MAX = WL_NAN_CMD_SD_DISC_CACHE_CLEAR,
+
+ /* nan time sync sub-commands */
+
+ WL_NAN_CMD_SYNC_SOCIAL_CHAN = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x01),
+ WL_NAN_CMD_SYNC_AWAKE_DWS = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x02),
+ WL_NAN_CMD_SYNC_BCN_RSSI_NOTIF_THRESHOLD = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x03),
+ WL_NAN_CMD_SYNC_MAX = WL_NAN_CMD_SYNC_BCN_RSSI_NOTIF_THRESHOLD,
+
+ /* nan2 commands */
+ WL_NAN_CMD_DATA_CONFIG = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x01),
+ WL_NAN_CMD_DATA_RSVD02 = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x02),
+ WL_NAN_CMD_DATA_RSVD03 = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x03),
+ WL_NAN_CMD_DATA_DATAREQ = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x04),
+ WL_NAN_CMD_DATA_DATARESP = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x05),
+ WL_NAN_CMD_DATA_DATAEND = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x06),
+ WL_NAN_CMD_DATA_SCHEDUPD = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x07),
+ WL_NAN_CMD_DATA_RSVD08 = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x08),
+ WL_NAN_CMD_DATA_CAP = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x9),
+ WL_NAN_CMD_DATA_STATUS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0A),
+ WL_NAN_CMD_DATA_STATS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0B),
+ WL_NAN_CMD_DATA_RSVD0C = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0C),
+ WL_NAN_CMD_DATA_NDP_SHOW = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0D),
+ WL_NAN_CMD_DATA_DATACONF = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0E),
+ WL_NAN_CMD_DATA_MIN_TX_RATE = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x0F),
+ WL_NAN_CMD_DATA_MAX_PEERS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x10),
+ WL_NAN_CMD_DATA_DP_IDLE_PERIOD = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x11),
+ WL_NAN_CMD_DATA_DP_OPAQUE_INFO = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x12),
+ WL_NAN_CMD_DATA_DP_HB_DURATION = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x13),
+ WL_NAN_CMD_DATA_PATH_MAX = WL_NAN_CMD_DATA_DP_HB_DURATION, /* New ones before and update */
+
+ /* nan dam sub-commands */
+ WL_NAN_CMD_DAM_CFG = NAN_CMD(WL_NAN_CMD_DAM_COMP_ID, 0x01),
+ WL_NAN_CMD_DAM_MAX = WL_NAN_CMD_DAM_CFG, /* New ones before and update */
+
+ /* nan2.0 ranging commands */
+ WL_NAN_CMD_RANGE_REQUEST = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x01),
+ WL_NAN_CMD_RANGE_AUTO = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x02),
+ WL_NAN_CMD_RANGE_RESPONSE = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x03),
+ WL_NAN_CMD_RANGE_CANCEL = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x04),
+ WL_NAN_CMD_RANGE_IDLE_COUNT = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x05),
+ WL_NAN_CMD_RANGE_CANCEL_EXT = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x06),
+
+ /* nan debug sub-commands */
+ WL_NAN_CMD_DBG_SCAN_PARAMS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x01),
+ WL_NAN_CMD_DBG_SCAN = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x02),
+ WL_NAN_CMD_DBG_SCAN_RESULTS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x03),
+ /* This is now moved under CFG */
+ WL_NAN_CMD_DBG_EVENT_MASK = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x04),
+ WL_NAN_CMD_DBG_EVENT_CHECK = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x05),
+ WL_NAN_CMD_DBG_DUMP = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x06),
+ WL_NAN_CMD_DBG_CLEAR = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x07),
+ WL_NAN_CMD_DBG_RSSI = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x08),
+ WL_NAN_CMD_DBG_DEBUG = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x09),
+ WL_NAN_CMD_DBG_TEST1 = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0A),
+ WL_NAN_CMD_DBG_TEST2 = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0B),
+ WL_NAN_CMD_DBG_TEST3 = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0C),
+ WL_NAN_CMD_DBG_DISC_RESULTS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0D),
+ WL_NAN_CMD_DBG_STATS = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0E),
+ WL_NAN_CMD_DBG_LEVEL = NAN_CMD(WL_NAN_CMD_DBG_COMP_ID, 0x0F),
+ WL_NAN_CMD_DBG_MAX = WL_NAN_CMD_DBG_LEVEL, /* New ones before and update */
+
+ /* Generic componenet */
+ WL_NAN_CMD_GEN_STATS = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x01),
+ WL_NAN_CMD_GEN_FW_CAP = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x02),
+ WL_NAN_CMD_GEN_MAX = WL_NAN_CMD_GEN_FW_CAP,
+
+ /* NAN Save-Restore */
+ WL_NAN_CMD_NSR2 = NAN_CMD(WL_NAN_CMD_NSR_COMP_ID, 0x20),
+ WL_NAN_CMD_NSR2_MAX = WL_NAN_CMD_NSR2,
+
+ /* Host offload sub-commands */
+ WL_NAN_CMD_NANHO_UPDATE = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x01),
+ WL_NAN_CMD_NANHO_FRM_TPLT = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x02),
+ WL_NAN_CMD_NANHO_OOB_NAF = NAN_CMD(WL_NAN_CMD_NANHO_COMP_ID, 0x03),
+ WL_NAN_CMD_NANHO_MAX = WL_NAN_CMD_NANHO_OOB_NAF
+};
+
+/*
+ * Component/Module based NAN TLV IDs for NAN stats
+ */
+typedef enum wl_nan_stats_tlv {
+ WL_NAN_XTLV_SYNC_MAC_STATS = NAN_CMD(WL_NAN_CMD_SYNC_COMP_ID, 0x01),
+
+ WL_NAN_XTLV_SD_DISC_STATS = NAN_CMD(WL_NAN_CMD_SD_COMP_ID, 0x01),
+
+ WL_NAN_XTLV_DATA_NDP_STATS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x01),
+ WL_NAN_XTLV_DATA_NDL_STATS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x02),
+ WL_NAN_XTLV_DATA_SEC_STATS = NAN_CMD(WL_NAN_CMD_DATA_COMP_ID, 0x03),
+
+ WL_NAN_XTLV_GEN_SCHED_STATS = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x01),
+ WL_NAN_XTLV_GEN_PEER_STATS = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x02),
+ WL_NAN_XTLV_GEN_PEER_STATS_DEVCAP = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x03),
+ WL_NAN_XTLV_GEN_PEER_STATS_NDP = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x04),
+ WL_NAN_XTLV_GEN_PEER_STATS_SCHED = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x05),
+ WL_NAN_XTLV_GEN_AVAIL_STATS_SCHED = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x06),
+ WL_NAN_XTLV_GEN_NDP_STATS = NAN_CMD(WL_NAN_CMD_GENERIC_COMP_ID, 0x07),
+
+ WL_NAN_XTLV_DAM_STATS = NAN_CMD(WL_NAN_CMD_DAM_COMP_ID, 0x01),
+ WL_NAN_XTLV_DAM_AVAIL_STATS = NAN_CMD(WL_NAN_CMD_DAM_COMP_ID, 0x02),
+
+ WL_NAN_XTLV_RANGE_STATS = NAN_CMD(WL_NAN_CMD_RANGE_COMP_ID, 0x01)
+} wl_nan_stats_tlv_t;
+
+/* NAN stats WL_NAN_CMD_GEN_STATS command */
+/* Input data */
+typedef struct wl_nan_cmn_get_stat {
+ uint32 modules_btmap; /* Bitmap to indicate module stats are needed:
+ * See NAN Sub Module ID's above
+ */
+ uint8 operation; /* Get, Get and Clear */
+ uint8 arg1; /* Submodule control variable1 */
+ uint8 arg2; /* Submodule control variable2 */
+ uint8 pad; /* May not be needed as TLV's are aligned,add to pass compile chk */
+} wl_nan_cmn_get_stat_t;
+
+/* Output for Stats container */
+typedef struct wl_nan_cmn_stat {
+ uint32 n_stats; /* Number of different sub TLV stats present in the container */
+ uint32 totlen; /* Total Length of stats data in container */
+ uint8 stats_tlvs []; /* Stat TLV's container */
+} wl_nan_cmn_stat_t;
+
+/* Defines for operation */
+#define WLA_NAN_STATS_GET 0
+#define WLA_NAN_STATS_GET_CLEAR 1
+
+#define WL_NAN_STAT_ALL 0xFFFFFFFF
+
+/* NAN Mac stats */
+
+typedef struct wl_nan_mac_band_stats {
+ uint32 bcn_tx; /* 2g/5g disc/sync beacon tx count */
+ uint32 bcn_rx; /* 2g/5g disc/sync beacon rx count */
+ uint32 dws; /* Number of 2g/5g DW's */
+} wl_nan_mac_band_stats_t;
+
+/* Note: if this struct is changing update wl_nan_slot_ecounters_vX_t version,
+ * as this struct is sent as payload in wl_nan_slot_ecounter_vX_ts
+ */
+typedef struct wl_nan_mac_stats {
+ wl_nan_mac_band_stats_t band[NAN_MAX_BANDS]; /* MAC sync band specific stats */
+ uint32 naf_tx; /* NAN AF tx */
+ uint32 naf_rx; /* NAN AF rx */
+ uint32 sdf_tx; /* SDF tx */
+ uint32 sdf_rx; /* SDF rx */
+} wl_nan_mac_stats_t;
+
+/* NAN Sched stats */
+/* Per core Sched stats */
+typedef struct nan_sched_stats_core {
+ uint32 slotstart; /* slot_start */
+ uint32 slotend; /* slot_end */
+ uint32 slotskip; /* slot_skip */
+ uint32 slotstart_partial; /* slot resume */
+ uint32 slotend_partial; /* slot pre-empt */
+ uint8 avail_upd_cnt; /* count to track num of times avail has been updated */
+ uint8 pad[3];
+} nan_sched_stats_core_t;
+/* Common Sched stats */
+typedef struct nan_sched_stats_cmn {
+ uint32 slot_adj_dw; /* Slot adjusts due to DW changes */
+ uint32 slot_dur; /* Total slot duration in TU's */
+} nan_sched_stats_cmn_t;
+
+/* Note: if this struct is changing update wl_nan_slot_ecounters_vX_t version,
+ * as this struct is sent as payload in wl_nan_slot_ecounters_vX_t
+ */
+typedef struct nan_sched_stats {
+ nan_sched_stats_cmn_t cmn;
+ nan_sched_stats_core_t slice[MAX_NUM_D11CORES];
+} nan_sched_stats_t;
+/* End NAN Sched stats */
+
+/* NAN Discovery stats */
+typedef struct nan_disc_stats {
+ uint32 pub_tx; /* Publish tx */
+ uint32 pub_rx; /* Publish rx */
+ uint32 sub_tx; /* Subscribe tx */
+ uint32 sub_rx; /* Subscribe rx */
+ uint32 fup_tx; /* Followup tx */
+ uint32 fup_rx; /* Followup rx */
+ uint32 pub_resp_ignored; /* response to incoming publish ignored */
+ uint32 sub_resp_ignored; /* response to incoming subscribe ignored */
+} nan_disc_stats_t;
+/* NAN Discovery stats end */
+
+/* statistics for nan sec */
+typedef struct nan_sec_stats_s {
+ uint32 mic_fail; /* rx mic fail */
+ uint32 replay_fail; /* replay counter */
+ uint32 tx_fail; /* tx fail (from txstatus) */
+ uint32 key_info_err; /* key info field err */
+ uint32 ok_sessions; /* successful mx negotiations */
+ uint32 fail_sessions; /* failed sessions */
+ uint32 keydesc_err; /* key desc error */
+ uint32 invalid_cipher; /* cipher suite not valid */
+ uint32 pmk_not_found; /* no pmk found for given service or for any reason */
+ uint32 no_pmk_for_pmkid; /* no pmk found for give pmkid */
+ uint32 key_install_err; /* failed to install keys */
+ uint32 no_keydesc_attr; /* key desc attr missing */
+ uint32 nonce_mismatch; /* nonce mismatch */
+} nan_sec_stats_t;
+
+/* WL_NAN_XTLV_GEN_PEER_STATS */
+typedef struct wl_nan_peer_stats {
+ struct ether_addr nmi;
uint8 pad[2];
- chanspec_t chspec_list[NAN_SCAN_MAX_CHCNT]; /* act. used 3, 5 rfu */
-} nan_scan_params_t;
+ uint32 pkt_enq; /* counter for queued pkt of peer */
+ /* NDL */
+ bool ndl_exist;
+ uint8 ndl_state;
+ bool counter_proposed;
+ uint8 pad1;
+
+ /* NDL QoS */
+ uint16 local_max_latency;
+ uint16 peer_max_latency;
+ uint8 local_min_slots;
+ uint8 peer_min_slots;
+
+ /* security association */
+ struct ether_addr sec_laddr; /* local mac addr */
+ struct ether_addr sec_raddr; /* remote mac addr */
+ uint8 sec_csid;
+ uint8 pad2;
+} wl_nan_peer_stats_t;
+
+/* WL_NAN_XTLV_GEN_PEER_STATS_DEVCAP */
+typedef struct wl_nan_peer_stats_dev_cap {
+ uint8 mapid;
+ uint8 awake_dw_2g;
+ uint8 awake_dw_5g;
+ uint8 bands_supported;
+ uint8 op_mode;
+ uint8 num_antennas;
+ uint16 chan_switch_time;
+ uint8 capabilities;
+ uint8 pad[3];
+} wl_nan_peer_stats_dev_cap_t;
+
+/* WL_NAN_XTLV_GEN_PEER_STATS_NDP */
+typedef struct wl_nan_peer_stats_ndp {
+ uint8 peer_role;
+ uint8 ndp_state;
+ uint8 indp_id; /* initiator ndp id */
+ uint8 ndp_ctrl; /* ndp control field */
+ struct ether_addr peer_nmi;
+ struct ether_addr peer_ndi;
+ struct ether_addr local_ndi;
+
+ /* peer scb info */
+ bool scb_allocated;
+ bool scb_found;
+ uint32 scb_flags;
+ uint32 scb_flags2;
+ uint32 scb_flags3;
+} wl_nan_peer_stats_ndp_t;
+
+enum {
+ WL_NAN_SCHED_STAT_SLOT_COMM = 0x01, /* Committed slot */
+ WL_NAN_SCHED_STAT_SLOT_COND = 0x02, /* Conditional slot(proposal/counter) */
+ WL_NAN_SCHED_STAT_SLOT_NDC = 0x04, /* NDC slot */
+ WL_NAN_SCHED_STAT_SLOT_IMMUT = 0x08, /* Immutable slot */
+ WL_NAN_SCHED_STAT_SLOT_RANGE = 0x10, /* Ranging slot */
+};
+typedef uint16 wl_nan_stats_sched_slot_info_t;
+
+typedef struct wl_nan_stats_sched_slot {
+ wl_nan_stats_sched_slot_info_t info; /* capture slot type and more info */
+ chanspec_t chanspec;
+} wl_nan_stats_sched_slot_t;
+
+/* WL_NAN_XTLV_GEN_PEER_STATS_SCHED, WL_NAN_XTLV_GEN_AVAIL_STATS_SCHED */
+typedef struct wl_nan_stats_sched {
+ uint8 map_id;
+ uint8 seq_id; /* seq id from NA attr */
+ uint8 slot_dur;
+ uint8 pad;
+ uint16 period;
+ uint16 num_slot;
+ wl_nan_stats_sched_slot_t slot[];
+} wl_nan_stats_sched_t;
+
+/* WL_NAN_XTLV_GEN_PEER_STATS_SCHED */
+typedef struct wl_nan_peer_stats_sched {
+ uint8 map_id;
+ uint8 seq_id; /* seq id from NA attr */
+ uint8 slot_dur;
+ uint8 pad;
+ uint16 period;
+ uint16 num_slot;
+ wl_nan_stats_sched_slot_t slot[];
+} wl_nan_peer_stats_sched_t;
+
+/* WL_NAN_XTLV_RANGE_STATS */
+typedef struct wl_nan_range_stats {
+ uint16 rng_ssn_estb;
+ uint16 rng_ssn_fail;
+ uint16 rng_sched_start;
+ uint16 rng_sched_end;
+ uint16 ftm_ssn_success; /* number of succesfull ftm sessions */
+ uint16 ftm_ssn_fail;
+ uint16 num_meas; /* number of ftm frames */
+ uint16 num_valid_meas; /* number of ftm frames with valid timestamp */
+} wl_nan_range_stats_t;
+
+/* defines for ndp stats flag */
+
+#define NAN_NDP_STATS_FLAG_ROLE_MASK 0x01
+#define NAN_NDP_STATS_FLAG_ROLE_INIT 0x00
+#define NAN_NDP_STATS_FLAG_ROLE_RESP 0x01
+
+#define NAN_NDP_STATS_STATE_BIT_SHIFT 1
+#define NAN_NDP_STATS_FLAG_STATE_MASK 0x07
+#define NAN_NDP_STATS_FLAG_STATE_IN_PROG 0x00
+#define NAN_NDP_STATS_FLAG_STATE_ESTB 0x01
+#define NAN_NDP_STATS_FLAG_STATE_TEARDOWN_WAIT 0x02
+/* More states can be added here, when needed */
+
+/* WL_NAN_XTLV_GEN_NDP_STATS */
+typedef struct wl_nan_ndp_stats_s {
+ uint8 ndp_id;
+ uint8 indp_id;
+ uint8 flags;
+ uint8 nan_sec_csid;
+ struct ether_addr lndi_addr;
+ struct ether_addr pnmi_addr;
+ struct ether_addr pndi_addr;
+ uint8 PAD[2];
+} wl_nan_ndp_stats_t;
+
+/* WL_NAN_XTLV_EV_SLOT_INFO */
+typedef struct wl_nan_slot_info_s {
+ /* dw slot start expected */
+ uint32 dwst_h;
+ uint32 dwst_l;
+ /* dw slot start actual */
+ uint32 act_dwst_h;
+ uint32 act_dwst_l;
+ uint16 cur_chan[MAX_NUM_D11CORES]; /* sdb channels */
+ uint16 dw_chan; /* dw channel */
+ uint8 dw_no; /* dw number */
+ uint8 slot_seq_no; /* slot seq no. */
+} wl_nan_slot_info_t;
+
+/* WL_NAN_EVENT_MR_CHANGED */
+typedef uint8 wl_nan_mr_changed_t;
+#define WL_NAN_AMR_CHANGED 1
+#define WL_NAN_IMR_CHANGED 2
+
+/** status - TBD BCME_ vs NAN status - range reserved for BCME_ */
+enum {
+ /* add new status here... */
+ WL_NAN_E_PEER_NOTAVAIL = -2131,
+ WL_NAN_E_SCB_EXISTS = -2130,
+ WL_NAN_E_INVALID_PEER_NDI = -2129,
+ WL_NAN_E_INVALID_LOCAL_NDI = -2128,
+ WL_NAN_E_ALREADY_EXISTS = -2127, /* generic NAN error for duplication */
+ WL_NAN_E_EXCEED_MAX_NUM_MAPS = -2126,
+ WL_NAN_E_INVALID_DEV_CHAN_SCHED = -2125,
+ WL_NAN_E_INVALID_PEER_BLOB_TYPE = -2124,
+ WL_NAN_E_INVALID_LCL_BLOB_TYPE = -2123,
+ WL_NAN_E_BCMC_PDPA = -2122, /* BCMC NAF PDPA */
+ WL_NAN_E_TIMEOUT = -2121,
+ WL_NAN_E_HOST_CFG = -2120,
+ WL_NAN_E_NO_ACK = -2119,
+ WL_NAN_E_SECINST_FAIL = -2118,
+ WL_NAN_E_REJECT_NDL = -2117, /* generic NDL rejection error */
+ WL_NAN_E_INVALID_NDP_ATTR = -2116,
+ WL_NAN_E_HOST_REJECTED = -2115,
+ WL_NAN_E_PCB_NORESOURCE = -2114,
+ WL_NAN_E_NDC_EXISTS = -2113,
+ WL_NAN_E_NO_NDC_ENTRY_AVAIL = -2112,
+ WL_NAN_E_INVALID_NDC_ENTRY = -2111,
+ WL_NAN_E_SD_TX_LIST_FULL = -2110,
+ WL_NAN_E_SVC_SUB_LIST_FULL = -2109,
+ WL_NAN_E_SVC_PUB_LIST_FULL = -2108,
+ WL_NAN_E_SDF_MAX_LEN_EXCEEDED = -2107,
+ WL_NAN_E_ZERO_CRB = -2106, /* no CRB between local and peer */
+ WL_NAN_E_PEER_NDC_NOT_SELECTED = -2105, /* peer ndc not selected */
+ WL_NAN_E_DAM_CHAN_CONFLICT = -2104, /* dam schedule channel conflict */
+ WL_NAN_E_DAM_SCHED_PERIOD = -2103, /* dam schedule period mismatch */
+ WL_NAN_E_LCL_NDC_NOT_SELECTED = -2102, /* local selected ndc not configured */
+ WL_NAN_E_NDL_QOS_INVALID_NA = -2101, /* na doesn't comply with ndl qos */
+ WL_NAN_E_CLEAR_NAF_WITH_SA_AS_RNDI = -2100, /* rx clear naf with peer rndi */
+ WL_NAN_E_SEC_CLEAR_PKT = -2099, /* rx clear pkt from a peer with sec_sa */
+ WL_NAN_E_PROT_NON_PDPA_NAF = -2098, /* rx protected non PDPA frame */
+ WL_NAN_E_DAM_DOUBLE_REMOVE = -2097, /* remove peer schedule already removed */
+ WL_NAN_E_DAM_DOUBLE_MERGE = -2096, /* merge peer schedule already merged */
+ WL_NAN_E_DAM_REJECT_INVALID = -2095, /* reject for invalid schedule */
+ WL_NAN_E_DAM_REJECT_RANGE = -2094,
+ WL_NAN_E_DAM_REJECT_QOS = -2093,
+ WL_NAN_E_DAM_REJECT_NDC = -2092,
+ WL_NAN_E_DAM_REJECT_PEER_IMMUT = -2091,
+ WL_NAN_E_DAM_REJECT_LCL_IMMUT = -2090,
+ WL_NAN_E_DAM_EXCEED_NUM_SCHED = -2089,
+ WL_NAN_E_DAM_INVALID_SCHED_MAP = -2088, /* invalid schedule map list */
+ WL_NAN_E_DAM_INVALID_LCL_SCHED = -2087,
+ WL_NAN_E_INVALID_MAP_ID = -2086,
+ WL_NAN_E_CHAN_OVERLAP_ACROSS_MAP = -2085,
+ WL_NAN_E_INVALID_CHAN_LIST = -2084,
+ WL_NAN_E_INVALID_RANGE_TBMP = -2083,
+ WL_NAN_E_INVALID_IMMUT_SCHED = -2082,
+ WL_NAN_E_INVALID_NDC_ATTR = -2081,
+ WL_NAN_E_INVALID_TIME_BITMAP = -2080,
+ WL_NAN_E_INVALID_NA_ATTR = -2079,
+ WL_NAN_E_NO_NA_ATTR_IN_AVAIL_MAP = -2078, /* no na attr saved in avail map */
+ WL_NAN_E_INVALID_MAP_IDX = -2077,
+ WL_NAN_E_SEC_SA_NOTFOUND = -2076,
+ WL_NAN_E_BSSCFG_NOTFOUND = -2075,
+ WL_NAN_E_SCB_NOTFOUND = -2074,
+ WL_NAN_E_NCS_SK_KDESC_TYPE = -2073,
+ WL_NAN_E_NCS_SK_KEY_DESC_VER = -2072, /* key descr ver */
+ WL_NAN_E_NCS_SK_KEY_TYPE = -2071, /* key descr type */
+ WL_NAN_E_NCS_SK_KEYINFO_FAIL = -2070, /* key info (generic) */
+ WL_NAN_E_NCS_SK_KEY_LEN = -2069, /* key len */
+ WL_NAN_E_NCS_SK_KDESC_NOT_FOUND = -2068, /* key desc not found */
+ WL_NAN_E_NCS_SK_INVALID_PARAMS = -2067, /* invalid args */
+ WL_NAN_E_NCS_SK_KDESC_INVALID = -2066, /* key descr is not valid */
+ WL_NAN_E_NCS_SK_NONCE_MISMATCH = -2065,
+ WL_NAN_E_NCS_SK_KDATA_SAVE_FAIL = -2064, /* not able to save key data */
+ WL_NAN_E_NCS_SK_AUTH_TOKEN_CALC_FAIL = -2063,
+ WL_NAN_E_NCS_SK_PTK_CALC_FAIL = -2062,
+ WL_NAN_E_INVALID_STARTOFFSET = -2061,
+ WL_NAN_E_BAD_NA_ENTRY_TYPE = -2060,
+ WL_NAN_E_INVALID_CHANBMP = -2059,
+ WL_NAN_E_INVALID_OP_CLASS = -2058,
+ WL_NAN_E_NO_IES = -2057,
+ WL_NAN_E_NO_PEER_ENTRY_AVAIL = -2056,
+ WL_NAN_E_INVALID_PEER = -2055,
+ WL_NAN_E_PEER_EXISTS = -2054,
+ WL_NAN_E_PEER_NOTFOUND = -2053,
+ WL_NAN_E_NO_MEM = -2052,
+ WL_NAN_E_INVALID_OPTION = -2051,
+ WL_NAN_E_INVALID_BAND = -2050,
+ WL_NAN_E_INVALID_MAC = -2049,
+ WL_NAN_E_BAD_INSTANCE = -2048,
+ /* NAN status code reserved from -2048 to -3071 */
+ WL_NAN_E_ERROR = -1,
+ WL_NAN_E_OK = 0
+};
+
+/* Error codes used in vendor specific attribute in Data Path Termination frames */
+enum {
+ WL_NAN_DPEND_E_OK = 0,
+ WL_NAN_DPEND_E_ERROR = 1,
+ WL_NAN_DPEND_E_HOST_CMD = 2,
+ WL_NAN_DPEND_E_HOST_REJECTED = 3, /* host rejected rx frame */
+ WL_NAN_DPEND_E_RESOURCE_LIMIT = 4,
+ WL_NAN_DPEND_E_NO_ACK_RCV = 5,
+ WL_NAN_DPEND_E_TIMEOUT = 6,
+ WL_NAN_DPEND_E_NO_ELT = 7, /* rx frame missing element container */
+ WL_NAN_DPEND_E_NO_NDP_ATTR = 8,
+ WL_NAN_DPEND_E_NO_AVAIL_ATTR = 9,
+ WL_NAN_DPEND_E_NO_NDC_ATTR = 10,
+ WL_NAN_DPEND_E_NO_RANGE_BM = 11,
+ WL_NAN_DPEND_E_INVALID_NDP_ATTR = 12,
+ WL_NAN_DPEND_E_INVALID_NDC_ATTR = 13,
+ WL_NAN_DPEND_E_INVALID_IMMUT = 14,
+ WL_NAN_DPEND_E_INVALID_NDL_QOS = 15,
+ WL_NAN_DPEND_E_INVALID_SEC_PARAMS = 16,
+ WL_NAN_DPEND_E_REJECT_AVAIL = 17,
+ WL_NAN_DPEND_E_REJECT_NDL = 18
+};
+
+typedef int32 wl_nan_status_t;
+
+/** nan cmd list entry */
+enum wl_nan_sub_cmd_input_flags {
+ WL_NAN_SUB_CMD_FLAG_NONE = 0,
+ WL_NAN_SUB_CMD_FLAG_SKIP = 1, /* Skip to next sub-command on error */
+ WL_NAN_SUB_CMD_FLAG_TERMINATE = 2, /* Terminate processing and return */
+ WL_NAN_SUB_CMD_FLAG_LAST /* Keep this at the end */
+};
+
+/** container for nan events */
+typedef struct wl_nan_ioc {
+ uint16 version; /**< interface command or event version */
+ uint16 id; /**< nan ioctl cmd ID */
+ uint16 len; /**< total length of all tlv records in data[] */
+ uint16 pad; /**< pad to be 32 bit aligment */
+ uint8 data []; /**< var len payload of bcm_xtlv_t type */
+} wl_nan_ioc_t;
+
+/*
+ * NAN sub-command data structures
+ */
+
+/*
+ * Config component WL_NAN_CMD_CFG_XXXX sub-commands
+ * WL_NAN_CMD_CFG_ENABLE
+ */
+enum wl_nan_config_state {
+ WL_NAN_CONFIG_STATE_DISABLE = 0,
+ WL_NAN_CONFIG_STATE_ENABLE = 1
+};
+
+typedef int8 wl_nan_config_state_t;
+
+/* WL_NAN_CMD_CFG_NAN_INIT */
+
+typedef uint8 wl_nan_init_t;
+
+/* WL_NAN_CMD_CFG_NAN_VERSION */
+typedef uint16 wl_nan_ver_t;
+
+/* WL_NAN_CMD_CFG_NAN_CONFIG */
+typedef uint32 wl_nan_cfg_ctrl_t;
+
+/* WL_NAN_CMD_CFG_NAN_CONFIG2 */
+typedef struct wl_nan_cfg_ctrl2 {
+ uint32 flags1; /* wl_nan_cfg_ctrl2_flags1 */
+ uint32 flags2; /* wl_nan_cfg_ctrl2_flags2 */
+} wl_nan_cfg_ctrl2_t;
+
+enum wl_nan_cfg_ctrl2_flags1 {
+ /* Allows unicast SDF TX while local device is under NDP/NDL negotiation,
+ * but Not with the peer SDF destined to.
+ */
+ WL_NAN_CTRL2_FLAG1_ALLOW_SDF_TX_UCAST_IN_PROG = 0x00000001,
+ /* Allows broadcast SDF TX while local device is under NDP/NDL negotiation */
+ WL_NAN_CTRL2_FLAG1_ALLOW_SDF_TX_BCAST_IN_PROG = 0x00000002,
+ /* Allows the device to send schedule update automatically on local schedule change */
+ WL_NAN_CTRL2_FLAG1_AUTO_SCHEDUPD = 0x00000004,
+ /* Allows the device to handle slot pre_close operations */
+ WL_NAN_CTRL2_FLAG1_SLOT_PRE_CLOSE = 0x00000008
+};
+#define WL_NAN_CTRL2_FLAGS1_MASK 0x0000000F
+
+#define WL_NAN_CTRL2_FLAGS2_MASK 0x00000000
+
+/*
+ * WL_NAN_CMD_CFG_BAND, WL_NAN_CMD_CFG_RSSI_THRESHOLD(Get only)
+ */
+typedef uint8 wl_nan_band_t;
+
+/*
+ * WL_NAN_CMD_CFG_ROLE
+ */
enum wl_nan_role {
WL_NAN_ROLE_AUTO = 0,
WL_NAN_ROLE_NON_MASTER_NON_SYNC = 1,
@@ -6344,7 +10809,581 @@
WL_NAN_ROLE_MASTER = 3,
WL_NAN_ROLE_ANCHOR_MASTER = 4
};
-#define NAN_MASTER_RANK_LEN 8
+
+typedef uint8 wl_nan_role_t;
+
+typedef struct wl_nan_device_state
+{
+ wl_nan_role_t role; /* Sync Master, Non-Sync Master */
+ uint8 state; /* TBD */
+ uint8 hopcount; /* Hops to the Anchor Master */
+ struct ether_addr immediate_master; /* Master MAC */
+ struct ether_addr anchor_master; /* Anchor Master MAC */
+ struct ether_addr cluster_id; /* Cluster ID to which this device belongs to */
+ uint8 PAD[3];
+ uint32 tsf_high; /* NAN Cluster TSFs */
+ uint32 tsf_low;
+} wl_nan_device_state_t;
+
+/*
+ * WL_NAN_CMD_CFG_HOP_CNT, WL_NAN_CMD_CFG_HOP_LIMIT
+ */
+typedef uint8 wl_nan_hop_count_t;
+
+/*
+ * WL_NAN_CMD_CFG_WARMUP_TIME
+ */
+typedef uint32 wl_nan_warmup_time_ticks_t;
+
+/*
+ * WL_NAN_CMD_CFG_RSSI_THRESHOLD
+ * rssi_close and rssi_mid are used to transition master to non-master
+ * role by NAN state machine. rssi thresholds corresponding to the band
+ * will be updated.
+ */
+/* To be deprecated */
+typedef struct wl_nan_rssi_threshold {
+ wl_nan_band_t band;
+ int8 rssi_close;
+ int8 rssi_mid;
+ uint8 pad;
+} wl_nan_rssi_threshold_t;
+
+/* WL_NAN_CMD_ELECTION_RSSI_THRESHOLD */
+
+typedef struct wl_nan_rssi_thld {
+ int8 rssi_close_2g;
+ int8 rssi_mid_2g;
+ int8 rssi_close_5g;
+ int8 rssi_mid_5g;
+} wl_nan_rssi_thld_t;
+
+/* WL_NAN_CMD_DATA_MAX_PEERS */
+
+typedef uint8 wl_nan_max_peers_t;
+
+/*
+ * WL_NAN_CMD_CFG_STATUS
+ */
+
+typedef enum wl_nan_election_mode {
+ WL_NAN_ELECTION_RUN_BY_HOST = 1,
+ WL_NAN_ELECTION_RUN_BY_FW = 2
+} wl_nan_election_mode_t;
+
+typedef struct wl_nan_conf_status {
+ struct ether_addr nmi; /* NAN mgmt interface address */
+ uint8 enabled; /* NAN is enabled */
+ uint8 role; /* Current nan sync role */
+ struct ether_addr cid; /* Current Cluster id */
+ uint8 social_chans[2]; /* Social channels */
+ uint8 mr[8]; /* Self Master Rank */
+ uint8 amr[8]; /* Anchor Master Rank */
+ uint32 ambtt; /* Anchor master beacon target time */
+ uint32 cluster_tsf_h; /* Current Cluster TSF High */
+ uint32 cluster_tsf_l; /* Current Cluster TSF Low */
+ uint8 election_mode; /* Election mode, host or firmware */
+ uint8 hop_count; /* Current Hop count */
+ uint8 imr[8]; /* Immediate Master Rank */
+ uint8 pad[4];
+ uint16 opt_tlvs_len;
+ uint8 opt_tlvs[];
+} wl_nan_conf_status_t;
+
+/*
+ * WL_NAN_CMD_CFG_OUI
+ */
+typedef struct wl_nan_oui_type {
+ uint8 nan_oui[DOT11_OUI_LEN];
+ uint8 type;
+} wl_nan_oui_type_t;
+
+/*
+ * WL_NAN_CMD_CFG_COUNT
+ */
+typedef struct wl_nan_count {
+ uint32 cnt_bcn_tx; /**< TX disc/sync beacon count */
+ uint32 cnt_bcn_rx; /**< RX disc/sync beacon count */
+ uint32 cnt_svc_disc_tx; /**< TX svc disc frame count */
+ uint32 cnt_svc_disc_rx; /**< RX svc disc frame count */
+} wl_nan_count_t;
+/*
+ * Election component WL_NAN_CMD_ELECTION_XXXX sub-commands
+ * WL_NAN_CMD_ELECTION_HOST_ENABLE
+ */
+enum wl_nan_enable_flags {
+ WL_NAN_DISABLE_FLAG_HOST_ELECTION = 0,
+ WL_NAN_ENABLE_FLAG_HOST_ELECTION = 1
+};
+
+/*
+ * 0 - disable host based election
+ * 1 - enable host based election
+ */
+typedef uint8 wl_nan_host_enable_t;
+
+/*
+ * WL_NAN_CMD_ELECTION_METRICS_CONFIG
+ */
+/* Set only */
+typedef struct wl_nan_election_metric_config {
+ uint8 random_factor; /* Configured random factor */
+ uint8 master_pref; /* configured master preference */
+ uint8 pad[2];
+} wl_nan_election_metric_config_t;
+
+/*
+ * WL_NAN_CMD_ELECTION_METRICS_STATE
+ */
+/* Get only */
+typedef struct wl_nan_election_metric_state {
+ uint8 random_factor; /* random factor used in MIs */
+ uint8 master_pref; /* Master advertised in MIs */
+ uint8 pad[2];
+} wl_nan_election_metric_state_t;
+
+/*
+ * WL_NAN_CMD_ELECTION_LEAVE
+ * WL_NAN_CMD_ELECTION_STOP
+ */
+typedef struct ether_addr wl_nan_cluster_id_t;
+
+/*
+ * WL_NAN_CMD_ELECTION_MERGE
+ * 0 - disable cluster merge
+ * 1 - enable cluster merge
+ */
+typedef uint8 wl_nan_merge_enable_t;
+
+/*
+ * WL_NAN_CMD_CFG_ROLE
+ * role = 0 means configuration by firmware(obsolete); otherwise by host
+ * when host configures role, also need target master address to sync to
+ */
+#define NAN_SYNC_MASTER_SELF 1
+#define NAN_SYNC_MASTER_USE_TIMING 2 /* Use the tsf timing provided */
+#define NAN_SYNC_MASTER_AMREC_UPD 4 /* provide AM record update */
+
+/*
+ struct ether_addr addr:
+ when NAN_SYNC_MASTER_USE_TIMING is set, addr is the mac of Rx NAN beacon
+ providing the timing info
+ ltsf_h, ltsf_l:
+ The local TSF timestamp filled in by FW in the WL_NAN_EVENT_BCN_RX event;
+ rtsf_h, rtsf_l:
+ The timestamp in the Rx beacon frame, filled in by host
+ uint32 ambtt:
+ the amtt in the cluster ID attribute in the Rx beacon frame
+*/
+
+typedef struct nan_sync_master {
+ uint8 flag; /* 1: self; 2: use TSF timing; 4: AMR update */
+ uint8 hop_count;
+ struct ether_addr addr;
+ struct ether_addr cluster_id;
+ chanspec_t channel; /* bcn reception channel */
+ uint32 ltsf_h;
+ uint32 ltsf_l;
+ uint32 rtsf_h;
+ uint32 rtsf_l;
+ uint8 amr[WL_NAN_MASTER_RANK_LEN];
+ uint32 ambtt;
+} nan_sync_master_t;
+
+/*
+* NAN Sync TLV(NSTLV):
+* To keep NAN/AWDL concurrency time sync.
+* It is generated at hybrid device, and propogated by AWDL only device.
+* It contains the information needed to run NAN election
+*/
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct awdl_nan_sync_tlv {
+ uint16 hop_count; /* total hop_count */
+ struct ether_addr src_addr; /* macaddr of the hybrid originator of nstlv */
+ struct ether_addr cluster_id; /* NAN cluster ID of hybrid originator of nstlv */
+ uint32 nan_tsf_h; /* NAN cluster TSF of the hybrid originator of nstlv */
+ uint32 nan_tsf_l;
+ uint8 master_preference;
+ uint8 random_factor;
+ uint8 amr[WL_NAN_MASTER_RANK_LEN];
+ uint8 orig_hop_count; /* hop_count of the origin hybrid NAN device */
+ uint32 ambtt; /* Anchor Master Beacon Transmission Time */
+ uint8 opt_xtlv_len; /* xtlv len */
+} BWL_POST_PACKED_STRUCT awdl_nan_sync_tlv_t;
+
+typedef BWL_PRE_PACKED_STRUCT struct wl_awdl_nan_sync_tlv {
+ uint8 type; /* 23 for NTLV */
+ uint16 param_len;
+ awdl_nan_sync_tlv_t ntlv;
+} BWL_POST_PACKED_STRUCT wl_awdl_nan_sync_tlv_t;
+#include <packed_section_end.h>
+
+/* NAN advertiser structure */
+/* TODO RSDB: add chspec to indicates core corresponds correct core */
+typedef struct nan_adv_entry {
+ uint8 age; /* used to remove stale entries */
+ uint8 hop_count; /* for NTLV support, use bit7 for virtual NAN peer */
+ struct ether_addr addr;
+ struct ether_addr cluster_id;
+ chanspec_t channel; /* bcn reception channel */
+ uint32 ltsf_h;
+ uint32 ltsf_l;
+ uint32 rtsf_h;
+ uint32 rtsf_l;
+ uint8 amr[WL_NAN_MASTER_RANK_LEN];
+ uint32 ambtt;
+ int8 rssi[NAN_MAX_BANDS]; /* rssi last af was received at */
+ int8 last_rssi[NAN_MAX_BANDS]; /* rssi in the last AF */
+} nan_adv_entry_t;
+#define NAN_VIRTUAL_PEER_BIT 0x80
+
+typedef enum {
+ NAC_CNT_NTLV_AF_TX = 0, /* count of AWDL AF containing NTLV tx */
+ NAC_CNT_NTLV_AF_RX, /* count of AWDL AF containing NTLV rx */
+ NAC_CNT_NTLV_TMERR_TX, /* count of NTLV tx timing error */
+ NAC_CNT_NTLV_TMERR_RX, /* count of NTLV rx timing error */
+ NAC_CNT_NTLV_TM_MISMATCH, /* count of TopMaster mismatch in Rx NTLV processing */
+ NAC_CNT_NTLV_ADV_EXISTED, /* count of NTLV ignored bc advertiser existed from bcn */
+ NAC_CNT_NTLV_STALED_BCN, /* count of staled bcn from NTLV info */
+ NAC_CNT_NTLV_MERGE, /* count of NTLV used for NAN cluster merge */
+ NAC_CNT_NTLV_ELECTION_DROP, /* count of NTLV dropped in NAN election */
+ NAC_CNT_NTLV_TSF_ADOPT, /* count of NTLV used for NAN TSF adoption */
+ NAC_CNT_NTLV_LAST
+} nac_cnt_enum_t;
+
+#define NAC_MAX_CNT (NAC_CNT_NTLV_LAST)
+
+typedef struct nac_stats {
+ uint32 nac_cnt[NAC_MAX_CNT];
+} nac_stats_t;
+
+typedef struct nan_adv_table {
+ uint8 num_adv;
+ uint8 adv_size;
+ uint8 pad[2];
+ nan_adv_entry_t adv_nodes[0];
+} nan_adv_table_t;
+
+typedef struct wl_nan_role_cfg {
+ wl_nan_role_t cfg_role;
+ wl_nan_role_t cur_role;
+ uint8 pad[2];
+ nan_sync_master_t target_master;
+} wl_nan_role_cfg_t;
+
+typedef int8 wl_nan_sd_optional_field_types_t;
+
+/* Flag bits for Publish and Subscribe (wl_nan_sd_params_t flags) */
+
+/* First 8 bits are blocked for mapping
+ * against svc_control flag bits which goes out
+ * as part of SDA attribute in air in SDF frames
+ */
+#define WL_NAN_RANGE_LIMITED 0x0040
+
+/* Event generation indicator (default is continuous) */
+
+#define WL_NAN_MATCH_ONCE 0x100000
+#define WL_NAN_MATCH_NEVER 0x200000
+
+/* Bits specific to Publish */
+
+#define WL_NAN_PUB_UNSOLICIT 0x1000 /* Unsolicited Tx */
+#define WL_NAN_PUB_SOLICIT 0x2000 /* Solicited Tx */
+#define WL_NAN_PUB_BOTH 0x3000 /* Both the above */
+
+#define WL_NAN_PUB_BCAST 0x4000 /* bcast solicited Tx only */
+#define WL_NAN_PUB_EVENT 0x8000 /* Event on each solicited Tx */
+#define WL_NAN_PUB_SOLICIT_PENDING 0x10000 /* Used for one-time solicited Publish */
+
+#define WL_NAN_FOLLOWUP 0x20000 /* Follow-up frames */
+#define WL_NAN_TX_FOLLOWUP 0x40000 /* host generated transmit Follow-up frames */
+
+/* Bits specific to Subscribe */
+
+#define WL_NAN_SUB_ACTIVE 0x1000 /* Active subscribe mode */
+#define WL_NAN_SUB_MATCH_IF_SVC_INFO 0x2000 /* Service info in publish */
+
+#define WL_NAN_TTL_UNTIL_CANCEL 0xFFFFFFFF /* Special values for time to live (ttl) parameter */
+
+/*
+ * Publish - runs until first transmission
+ * Subscribe - runs until first DiscoveryResult event
+ */
+#define WL_NAN_TTL_FIRST 0
+
+/* Nan Service Based control Flags */
+
+/* If set, dev will take care of dp_resp */
+#define WL_NAN_SVC_CTRL_AUTO_DPRESP 0x1000000
+
+/* If set, host wont rec event "receive" */
+#define WL_NAN_SVC_CTRL_SUPPRESS_EVT_RECEIVE 0x2000000
+
+/* If set, host wont rec event "replied" */
+#define WL_NAN_SVC_CTRL_SUPPRESS_EVT_REPLIED 0x4000000
+
+/* If set, host wont rec event "terminated" */
+#define WL_NAN_SVC_CTRL_SUPPRESS_EVT_TERMINATED 0x8000000
+
+/*
+ * WL_NAN_CMD_SD_PARAMS
+ */
+typedef struct wl_nan_sd_params
+{
+ uint16 length; /* length including options */
+ uint8 period; /* period of the unsolicited SDF xmission in DWs */
+ uint8 awake_dw; /* interval between two DWs where SDF tx/rx are done */
+ uint8 svc_hash[WL_NAN_SVC_HASH_LEN]; /* Hash for the service name */
+ uint8 instance_id; /* Instance of the current service */
+ int8 proximity_rssi; /* RSSI limit to Rx subscribe or pub SDF 0 no effect */
+ uint32 flags; /* bitmap representing aforesaid optional flags */
+ int32 ttl; /* TTL for this instance id, -1 will run till cancelled */
+ tlv_t optional[1]; /* optional fields in the SDF as appropriate */
+} wl_nan_sd_params_t;
+
+/*
+ * WL_NAN_CMD_SD_PUBLISH_LIST
+ * WL_NAN_CMD_SD_SUBSCRIBE_LIST
+ */
+typedef struct wl_nan_service_info
+{
+ uint8 instance_id; /* Publish instance ID */
+ uint8 service_hash[WL_NAN_SVC_HASH_LEN]; /* Hash for service name */
+} wl_nan_service_info_t;
+
+typedef struct wl_nan_service_list
+{
+ uint16 id_count; /* Number of registered publish/subscribe services */
+ wl_nan_service_info_t list[1]; /* service info defined by nan_service instance */
+} wl_nan_service_list_t;
+
+/*
+ * WL_NAN_CMD_CFG_BCN_INTERVAL
+ */
+typedef uint16 wl_nan_disc_bcn_interval_t;
+
+/*
+ * WL_NAN_CMD_CFG_SDF_TXTIME
+ */
+typedef uint16 wl_nan_svc_disc_txtime_t;
+
+/*
+ * WL_NAN_CMD_CFG_STOP_BCN_TX
+ */
+typedef uint16 wl_nan_stop_bcn_tx_t;
+
+/*
+ * WL_NAN_CMD_CFG_SID_BEACON
+ */
+typedef struct wl_nan_sid_beacon_control {
+ uint8 sid_enable; /* Flag to indicate the inclusion of Service IDs in Beacons */
+ uint8 sid_count; /* Limit for number of publish SIDs to be included in Beacons */
+ uint8 sub_sid_count; /* Limit for number of subscribe SIDs to be included in Beacons */
+ uint8 pad;
+} wl_nan_sid_beacon_control_t;
+
+/*
+ * WL_NAN_CMD_CFG_DW_LEN
+ */
+typedef uint16 wl_nan_dw_len_t;
+
+/*
+ * WL_NAN_CMD_CFG_AWAKE_DW Will be deprecated.
+ */
+typedef struct wl_nan_awake_dw {
+ wl_nan_band_t band; /* 0 - b mode 1- a mode */
+ uint8 interval; /* 1 or 2 or 4 or 8 or 16 */
+ uint16 pad;
+} wl_nan_awake_dw_t;
+
+/*
+ * WL_NAN_CMD_CFG_AWAKE_DWS
+ */
+typedef struct wl_nan_awake_dws {
+ uint8 dw_interval_2g; /* 2G DW interval */
+ uint8 dw_interval_5g; /* 5G DW interval */
+ uint16 pad;
+} wl_nan_awake_dws_t;
+
+/* WL_NAN_CMD_SYNC_BCN_RSSI_NOTIF_THRESHOLD */
+
+typedef struct wl_nan_rssi_notif_thld {
+ int8 bcn_rssi_2g;
+ int8 bcn_rssi_5g;
+ int16 pad;
+} wl_nan_rssi_notif_thld_t;
+
+/*
+ * WL_NAN_CMD_CFG_SOCIAL_CHAN
+ */
+typedef struct wl_nan_social_channels {
+ uint8 soc_chan_2g; /* 2G social channel */
+ uint8 soc_chan_5g; /* 5G social channel */
+ uint16 pad;
+} wl_nan_social_channels_t;
+
+/*
+ * WL_NAN_CMD_SD_CANCEL_PUBLISH
+ * WL_NAN_CMD_SD_CANCEL_SUBSCRIBE
+ */
+typedef uint8 wl_nan_instance_id; /* Instance ID of an active publish instance */
+
+/*
+ * WL_NAN_CMD_SD_VND_INFO
+ */
+typedef struct wl_nan_sd_vendor_info
+{
+ uint16 length; /* Size in bytes of the payload following this field */
+ uint8 data[]; /* Vendor Information */
+} wl_nan_sd_vendor_info_t;
+
+/*
+ * WL_NAN_CMD_SD_STATS
+ */
+typedef struct wl_nan_sd_stats {
+ uint32 sdftx;
+ uint32 sdfrx;
+ uint32 sdsrffail;
+ uint32 sdrejrssi;
+ uint32 sdfollowuprx;
+ uint32 sdsubmatch;
+ uint32 sdpubreplied;
+ uint32 sdmftfail1;
+ uint32 sdmftfail2;
+ uint32 sdmftfail3;
+ uint32 sdmftfail4;
+} wl_nan_sd_stats_t;
+
+/* Flag bits for sd transmit message (wl_nan_sd_transmit_t flags) */
+
+/* If set, host wont rec "tx status" event for tx-followup msg */
+#define WL_NAN_FUP_SUPR_EVT_TXS 0x01
+/* more flags can be added here */
+
+/*
+ * WL_NAN_CMD_SD_TRANSMIT
+ * WL_NAN_CMD_SD_FUP_TRANSMIT
+ */
+typedef struct wl_nan_sd_transmit {
+ uint8 local_service_id; /* Sender Service ID */
+ uint8 requestor_service_id; /* Destination Service ID */
+ struct ether_addr destination_addr; /* Destination MAC */
+ uint16 token; /* follow_up_token when a follow-up
+ * msg is queued successfully
+ */
+ uint8 priority; /* requested relative prio */
+ uint8 flags; /* Flags for tx follow-up msg */
+ uint16 opt_len; /* total length of optional tlvs */
+ uint8 opt_tlv[]; /* optional tlvs in bcm_xtlv_t type */
+} wl_nan_sd_transmit_t;
+
+/* disc cache timeout for a cache entry */
+typedef uint16 wl_nan_disc_cache_timeout_t;
+
+/*
+ * WL_NAN_CMD_SYNC_TSRESERVE
+ */
+/** time slot */
+#define NAN_MAX_TIMESLOT 32
+typedef struct wl_nan_timeslot {
+ uint32 abitmap; /**< available bitmap */
+ uint32 chanlist[NAN_MAX_TIMESLOT];
+} wl_nan_timeslot_t;
+
+/*
+ * Deprecated
+ *
+ * WL_NAN_CMD_SYNC_TSRELEASE
+ */
+typedef uint32 wl_nan_ts_bitmap_t;
+
+/* nan passive scan params */
+#define NAN_SCAN_MAX_CHCNT 8
+/* nan merge scan params */
+typedef struct wl_nan_scan_params {
+ /* dwell time of discovery channel corresponds to band_idx.
+ * If set to 0 then fw default will be used.
+ */
+ uint16 dwell_time;
+ /* scan period of discovery channel corresponds to band_idx.
+ * If set to 0 then fw default will be used.
+ */
+ uint16 scan_period;
+ /* band index of discovery channel */
+ uint8 band_index;
+} wl_nan_scan_params_t;
+
+/*
+ * WL_NAN_CMD_DBG_SCAN
+ */
+typedef struct wl_nan_dbg_scan {
+ struct ether_addr cid;
+ uint8 pad[2];
+} wl_nan_dbg_scan_t;
+
+/* NAN_DBG_LEVEL */
+typedef struct wl_nan_dbg_level {
+ uint32 nan_err_level; /* for Error levels */
+ uint32 nan_dbg_level; /* for bebug logs and trace */
+ uint32 nan_info_level; /* for dumps like prhex */
+} wl_nan_dbg_level_t;
+
+/*
+ * WL_NAN_CMD_DBG_EVENT_MASK
+ */
+typedef uint32 wl_nan_event_mask_t;
+
+/*
+ * WL_NAN_CMD_DBG_EVENT_CHECK
+ */
+typedef uint8 wl_nan_dbg_ifname[BCM_MSG_IFNAME_MAX];
+
+/*
+ * WL_NAN_CMD_DBG_DUMP
+ * WL_NAN_CMD_DBG_CLEAR
+ */
+enum wl_nan_dbg_dump_type {
+ WL_NAN_DBG_DT_RSSI_DATA = 1,
+ WL_NAN_DBG_DT_STATS_DATA = 2,
+ /*
+ * Additional enums before this line
+ */
+ WL_NAN_DBG_DT_INVALID
+};
+typedef int8 wl_nan_dbg_dump_type_t;
+
+/** various params and ctl swithce for nan_debug instance */
+/*
+ * WL_NAN_CMD_DBG_DEBUG
+ */
+typedef struct wl_nan_debug_params {
+ uint16 cmd; /**< debug cmd to perform a debug action */
+ uint16 status;
+ uint32 msglevel; /**< msg level if enabled */
+ uint8 enabled; /**< runtime debuging enabled */
+ uint8 collect;
+ uint8 PAD[2];
+} wl_nan_debug_params_t;
+
+typedef struct wl_nan_sched_svc_timeslot_s {
+ uint32 abitmap; /* availability bitmap */
+ uint32 chanlist[NAN_MAX_TIMESLOT];
+ uint8 res; /* resolution: 0 = 16ms, 1 = 32ms, 2 = 64ms 3 = reserved. REfer NAN spec */
+ uint8 mapid; /* mapid from NAN spec. Used to differentiate 2G Vs 5G band */
+ uint8 PAD[2];
+} wl_nan_sched_svc_timeslot_t;
+
+/*
+ * WL_NAN_CMD_DATA_DP_IDLE_PERIOD
+ */
+typedef uint16 wl_nan_ndp_idle_period_t;
+
+/*
+ * WL_NAN_CMD_DATA_DP_HB_DURATION
+ */
+typedef uint16 wl_nan_ndp_hb_duration_t;
+
/* nan cmd IDs */
enum wl_nan_cmds {
/* nan cfg /disc & dbg ioctls */
@@ -6358,6 +11397,8 @@
WL_NAN_CMD_TSSCHEDULE = 8,
WL_NAN_CMD_TSRELEASE = 9,
WL_NAN_CMD_OUI = 10,
+ WL_NAN_CMD_OOB_AF = 11,
+ WL_NAN_CMD_SCAN_PARAMS = 12,
WL_NAN_CMD_COUNT = 15,
WL_NAN_CMD_CLEARCOUNT = 16,
@@ -6372,7 +11413,6 @@
WL_NAN_CMD_SHOW = 26,
WL_NAN_CMD_STOP = 27, /* stop nan for a given cluster ID */
/* nan debug iovars & cmds */
- WL_NAN_CMD_SCAN_PARAMS = 46,
WL_NAN_CMD_SCAN = 47,
WL_NAN_CMD_SCAN_RESULTS = 48,
WL_NAN_CMD_EVENT_MASK = 49,
@@ -6385,153 +11425,58 @@
WL_NAN_CMD_TEST1 = 61,
WL_NAN_CMD_TEST2 = 62,
WL_NAN_CMD_TEST3 = 63,
- WL_NAN_CMD_DISC_RESULTS = 64
+ WL_NAN_CMD_DISC_RESULTS = 64,
+ /* nan 2.0 data path commands */
+ WL_NAN_CMD_DATAPATH = 65
};
-/*
- * tlv IDs uniquely identifies cmd parameters
- * packed into wl_nan_ioc_t container
- */
-enum wl_nan_cmd_xtlv_id {
- /* 0x00 ~ 0xFF: standard TLV ID whose data format is the same as NAN attribute TLV */
- WL_NAN_XTLV_ZERO = 0, /* used as tlv buf end marker */
-#ifdef NAN_STD_TLV /* rfu, don't use yet */
- WL_NAN_XTLV_MASTER_IND = 1, /* == NAN_ATTR_MASTER_IND, */
- WL_NAN_XTLV_CLUSTER = 2, /* == NAN_ATTR_CLUSTER, */
- WL_NAN_XTLV_VENDOR = 221, /* == NAN_ATTR_VENDOR, */
-#endif
- /* 0x02 ~ 0xFF: reserved. In case to use with the same data format as NAN attribute TLV */
- /* 0x100 ~ : private TLV ID defined just for NAN command */
- /* common types */
- WL_NAN_XTLV_MAC_ADDR = 0x102, /* used in various cmds */
- WL_NAN_XTLV_REASON = 0x103,
- WL_NAN_XTLV_ENABLED = 0x104,
- /* explicit types, primarily for discovery engine iovars */
- WL_NAN_XTLV_SVC_PARAMS = 0x120, /* Contains required params: wl_nan_disc_params_t */
- WL_NAN_XTLV_MATCH_RX = 0x121, /* Matching filter to evaluate on receive */
- WL_NAN_XTLV_MATCH_TX = 0x122, /* Matching filter to send */
- WL_NAN_XTLV_SVC_INFO = 0x123, /* Service specific info */
- WL_NAN_XTLV_SVC_NAME = 0x124, /* Optional UTF-8 service name, for debugging. */
- WL_NAN_XTLV_INSTANCE_ID = 0x125, /* Identifies unique publish or subscribe instance */
- WL_NAN_XTLV_PRIORITY = 0x126, /* used in transmit cmd context */
- WL_NAN_XTLV_REQUESTOR_ID = 0x127, /* Requestor instance ID */
- WL_NAN_XTLV_VNDR = 0x128, /* Vendor specific attribute */
- WL_NAN_XTLV_SR_FILTER = 0x129, /* Service Response Filter */
- WL_NAN_XTLV_PEER_INSTANCE_ID = 0x131, /* Used to parse remote instance Id */
- /* explicit types, primarily for NAN MAC iovars */
- WL_NAN_XTLV_DW_LEN = 0x140, /* discovery win length */
- WL_NAN_XTLV_BCN_INTERVAL = 0x141, /* beacon interval, both sync and descovery bcns? */
- WL_NAN_XTLV_CLUSTER_ID = 0x142,
- WL_NAN_XTLV_IF_ADDR = 0x143,
- WL_NAN_XTLV_MC_ADDR = 0x144,
- WL_NAN_XTLV_ROLE = 0x145,
- WL_NAN_XTLV_START = 0x146,
-
- WL_NAN_XTLV_MASTER_PREF = 0x147,
- WL_NAN_XTLV_DW_INTERVAL = 0x148,
- WL_NAN_XTLV_PTBTT_OVERRIDE = 0x149,
- /* nan status command xtlvs */
- WL_NAN_XTLV_MAC_INITED = 0x14a,
- WL_NAN_XTLV_MAC_ENABLED = 0x14b,
- WL_NAN_XTLV_MAC_CHANSPEC = 0x14c,
- WL_NAN_XTLV_MAC_AMR = 0x14d, /* anchormaster rank u8 amr[8] */
- WL_NAN_XTLV_MAC_HOPCNT = 0x14e,
- WL_NAN_XTLV_MAC_AMBTT = 0x14f,
- WL_NAN_XTLV_MAC_TXRATE = 0x150,
- WL_NAN_XTLV_MAC_STATUS = 0x151, /* xtlv payload is nan_status_t */
- WL_NAN_XTLV_NAN_SCANPARAMS = 0x152, /* payload is nan_scan_params_t */
- WL_NAN_XTLV_DEBUGPARAMS = 0x153, /* payload is nan_scan_params_t */
- WL_NAN_XTLV_SUBSCR_ID = 0x154, /* subscriber id */
- WL_NAN_XTLV_PUBLR_ID = 0x155, /* publisher id */
- WL_NAN_XTLV_EVENT_MASK = 0x156,
- WL_NAN_XTLV_MASTER_RANK = 0x158,
- WL_NAN_XTLV_WARM_UP_TIME = 0x159,
- WL_NAN_XTLV_PM_OPTION = 0x15a,
- WL_NAN_XTLV_OUI = 0x15b, /* NAN OUI */
- WL_NAN_XTLV_MAC_COUNT = 0x15c, /* xtlv payload is nan_count_t */
- /* nan timeslot management */
- WL_NAN_XTLV_TSRESERVE = 0x160,
- WL_NAN_XTLV_TSRELEASE = 0x161,
- WL_NAN_XTLV_IDLE_DW_TIMEOUT = 0x162,
- WL_NAN_XTLV_IDLE_DW_LEN = 0x163,
- WL_NAN_XTLV_RND_FACTOR = 0x164,
- WL_NAN_XTLV_SVC_DISC_TXTIME = 0x165, /* svc disc frame tx time in DW */
- WL_NAN_XTLV_OPERATING_BAND = 0x166,
- WL_NAN_XTLV_STOP_BCN_TX = 0x167,
- WL_NAN_XTLV_CONCUR_SCAN = 0x168,
- WL_NAN_XTLV_BMP_RESOLUTION = 0x169,
- WL_NAN_XTLV_AVAILABILITY_REPEAT = 0x170,
- WL_NAN_XTLV_AVAILABLE_BMP = 0x171,
- /* p2p operation attribute */
- WL_NAN_XTLV_P2P_DEV_ROLE = 0x172,
- WL_NAN_XTLV_P2P_DEV_ADDR = 0x173,
- WL_NAN_XTLV_POST_DISC_ATTR_ID = 0x174, /* Post discovery attribute id */
- WL_NAN_XTLV_DUMP_CLR_TYPE = 0x175, /* wl nan dump/clear subtype */
- WL_NAN_XTLV_PEER_RSSI = 0x176, /* xtlv payload for wl nan dump rssi */
- WL_NAN_XTLV_POST_DISC_DATA_P2P = 0x177, /* p2p post disc data */
- WL_NAN_XTLV_RX_FAVAIL_MAP = 0x178, /* Rx Further Avail Map Data */
- WL_NAN_XTLV_RX_CONN_CAP_BMP = 0x179, /* Rx Conn Capability Data */
- WL_NAN_XTLV_MAC_CHANSPEC_1 = 0x17A, /* to get chanspec[1] */
- WL_NAN_XTLV_DISC_RESULTS = 0x17B, /* get disc results */
- WL_NAN_XTLV_MAC_STATS = 0x17C /* xtlv payload for wl nan dump stats */
+/* NAN DP interface commands */
+enum wl_nan_dp_cmds {
+ /* nan 2.0 ioctls */
+ WL_NAN_CMD_DP_CAP = 1000,
+ WL_NAN_CMD_DP_CONFIG = 1001,
+ WL_NAN_CMD_DP_CREATE = 1002,
+ WL_NAN_CMD_DP_AUTO_CONNECT = 1003,
+ WL_NAN_CMD_DP_DATA_REQ = 1004,
+ WL_NAN_CMD_DP_DATA_RESP = 1005,
+ WL_NAN_CMD_DP_SCHED_UPD = 1006,
+ WL_NAN_CMD_DP_END = 1007,
+ WL_NAN_CMD_DP_CONNECT = 1008,
+ WL_NAN_CMD_DP_STATUS = 1009
};
-/* Flag bits for Publish and Subscribe (wl_nan_disc_params_t flags) */
-#define WL_NAN_RANGE_LIMITED 0x0040
-/* Bits specific to Publish */
-/* Unsolicited transmissions */
-#define WL_NAN_PUB_UNSOLICIT 0x1000
-/* Solicited transmissions */
-#define WL_NAN_PUB_SOLICIT 0x2000
-#define WL_NAN_PUB_BOTH 0x3000
-/* Set for broadcast solicited transmission
- * Do not set for unicast solicited transmission
- */
-#define WL_NAN_PUB_BCAST 0x4000
-/* Generate event on each solicited transmission */
-#define WL_NAN_PUB_EVENT 0x8000
-/* Used for one-time solicited Publish functions to indicate transmision occurred */
-#define WL_NAN_PUB_SOLICIT_PENDING 0x10000
-/* Follow-up frames */
-#define WL_NAN_FOLLOWUP 0x20000
-/* Bits specific to Subscribe */
-/* Active subscribe mode (Leave unset for passive) */
-#define WL_NAN_SUB_ACTIVE 0x1000
+/* TODO Should remove this fixed length */
+#define WL_NAN_DATA_SVC_SPEC_INFO_LEN 32 /* arbitrary */
+#define WL_NAN_DP_MAX_SVC_INFO 0xFF
+#define WL_NAN_DATA_NDP_INST_SUPPORT 16
-/* Special values for time to live (ttl) parameter */
-#define WL_NAN_TTL_UNTIL_CANCEL 0xFFFFFFFF
-/* Publish - runs until first transmission
- * Subscribe - runs until first DiscoveryResult event
- */
-#define WL_NAN_TTL_FIRST 0
+/* Nan flags (16 bits) */
+#define WL_NAN_DP_FLAG_SVC_INFO 0x0001
+#define WL_NAN_DP_FLAG_CONFIRM 0x0002
+#define WL_NAN_DP_FLAG_EXPLICIT_CFM 0x0004
+#define WL_NAN_DP_FLAG_SECURITY 0x0008
+#define WL_NAN_DP_FLAG_HAST_NDL_COUNTER 0x0010 /* Host assisted NDL counter */
-/* The service hash (service id) is exactly this many bytes. */
+/* NAN Datapath host status */
+#define WL_NAN_DP_STATUS_ACCEPTED 1
+#define WL_NAN_DP_STATUS_REJECTED 0
+
+/* to be done */
+typedef struct wl_nan_dp_cap {
+ uint8 tbd;
+} wl_nan_dp_cap_t;
+
+/** The service hash (service id) is exactly this many bytes. */
#define WL_NAN_SVC_HASH_LEN 6
-
-/* Number of hash functions per bloom filter */
+/** Number of hash functions per bloom filter */
#define WL_NAN_HASHES_PER_BLOOM 4
-
-/* Instance ID type (unique identifier) */
-typedef uint8 wl_nan_instance_id_t;
-
/* no. of max last disc results */
#define WL_NAN_MAX_DISC_RESULTS 3
-/* Mandatory parameters for publish/subscribe iovars - NAN_TLV_SVC_PARAMS */
-typedef struct wl_nan_disc_params_s {
- /* Periodicity of unsolicited/query transmissions, in DWs */
- uint32 period;
- /* Time to live in DWs */
- uint32 ttl;
- /* Flag bits */
- uint32 flags;
- /* Publish or subscribe service id, i.e. hash of the service name */
- uint8 svc_hash[WL_NAN_SVC_HASH_LEN];
- /* pad to make 4 byte alignment, can be used for something else in the future */
- uint8 pad;
- /* Publish or subscribe id */
- wl_nan_instance_id_t instance_id;
-} wl_nan_disc_params_t;
+/* NAN security related defines */
+/* NCS-SK related */
+#define WL_NAN_NCS_SK_PMK_LEN 32
+#define WL_NAN_NCS_SK_PMKID_LEN 16
/* recent discovery results */
typedef struct wl_nan_disc_result_s
@@ -6548,20 +11493,65 @@
wl_nan_disc_result_t disc_result[WL_NAN_MAX_DISC_RESULTS];
} wl_nan_disc_results_list_t;
+/* nan 1.0 events */
+/* To be deprecated - will be replaced by event_disc_result */
+typedef struct wl_nan_ev_disc_result {
+ wl_nan_instance_id_t pub_id;
+ wl_nan_instance_id_t sub_id;
+ struct ether_addr pub_mac;
+ uint8 opt_tlvs[0];
+} wl_nan_ev_disc_result_t;
+
+typedef struct wl_nan_event_disc_result {
+ wl_nan_instance_id_t pub_id;
+ wl_nan_instance_id_t sub_id;
+ struct ether_addr pub_mac;
+ int8 publish_rssi; /* publisher RSSI */
+ uint8 attr_num;
+ uint16 attr_list_len; /* length of the all the attributes in the SDF */
+ uint8 attr_list[0]; /* list of NAN attributes */
+} wl_nan_event_disc_result_t;
+
+typedef struct wl_nan_ev_p2p_avail {
+ struct ether_addr sender;
+ struct ether_addr p2p_dev_addr;
+ uint8 dev_role;
+ uint8 resolution;
+ uint8 repeat;
+ uint8 pad[3];
+ chanspec_t chanspec;
+ uint32 avail_bmap;
+} wl_nan_ev_p2p_avail_t;
+
/*
-* desovery interface event structures *
+* discovery interface event structures *
*/
+
+/* mandatory parameters for OOB action frame */
+/* single-shot when bitmap and offset are set to 0; periodic otherwise */
+typedef struct wl_nan_oob_af_params_s
+{
+ /* bitmap for the 32 timeslots in 512TU dw interval */
+ uint32 ts_map;
+ /* offset from start of dw, in us */
+ uint32 tx_offset;
+ struct ether_addr bssid;
+ struct ether_addr dest;
+ uint32 pkt_lifetime;
+ uint16 payload_len;
+ uint8 payload[1];
+} wl_nan_oob_af_params_t;
/* NAN Ranging */
/* Bit defines for global flags */
-#define WL_NAN_RANGING_ENABLE 1 /* enable RTT */
-#define WL_NAN_RANGING_RANGED 2 /* Report to host if ranged as target */
+#define WL_NAN_RANGING_ENABLE 1 /**< enable RTT */
+#define WL_NAN_RANGING_RANGED 2 /**< Report to host if ranged as target */
typedef struct nan_ranging_config {
- uint32 chanspec; /* Ranging chanspec */
- uint16 timeslot; /* NAN RTT start time slot 1-511 */
- uint16 duration; /* NAN RTT duration in ms */
- struct ether_addr allow_mac; /* peer initiated ranging: the allowed peer mac
+ uint32 chanspec; /**< Ranging chanspec */
+ uint16 timeslot; /**< NAN RTT start time slot 1-511 */
+ uint16 duration; /**< NAN RTT duration in ms */
+ struct ether_addr allow_mac; /**< peer initiated ranging: the allowed peer mac
* address, a unicast (for one peer) or
* a broadcast for all. Setting it to all zeros
* means responding to none,same as not setting
@@ -6570,68 +11560,74 @@
uint16 flags;
} wl_nan_ranging_config_t;
-/* list of peers for self initiated ranging */
-/* Bit defines for per peer flags */
-#define WL_NAN_RANGING_REPORT (1<<0) /* Enable reporting range to target */
+/** list of peers for self initiated ranging */
+/** Bit defines for per peer flags */
+#define WL_NAN_RANGING_REPORT (1<<0) /**< Enable reporting range to target */
typedef struct nan_ranging_peer {
- uint32 chanspec; /* desired chanspec for this peer */
- uint32 abitmap; /* available bitmap */
- struct ether_addr ea; /* peer MAC address */
- uint8 frmcnt; /* frame count */
- uint8 retrycnt; /* retry count */
- uint16 flags; /* per peer flags, report or not */
+ uint32 chanspec; /**< desired chanspec for this peer */
+ uint32 abitmap; /**< available bitmap */
+ struct ether_addr ea; /**< peer MAC address */
+ uint8 frmcnt; /**< frame count */
+ uint8 retrycnt; /**< retry count */
+ uint16 flags; /**< per peer flags, report or not */
+ uint16 PAD;
} wl_nan_ranging_peer_t;
typedef struct nan_ranging_list {
- uint8 count; /* number of MAC addresses */
- uint8 num_peers_done; /* host set to 0, when read, shows number of peers
+ uint8 count; /**< number of MAC addresses */
+ uint8 num_peers_done; /**< host set to 0, when read, shows number of peers
* completed, success or fail
*/
- uint8 num_dws; /* time period to do the ranging, specified in dws */
- uint8 reserve; /* reserved field */
- wl_nan_ranging_peer_t rp[1]; /* variable length array of peers */
+ uint8 num_dws; /**< time period to do the ranging, specified in dws */
+ uint8 reserve; /**< reserved field */
+ wl_nan_ranging_peer_t rp[1]; /**< variable length array of peers */
} wl_nan_ranging_list_t;
/* ranging results, a list for self initiated ranging and one for peer initiated ranging */
/* There will be one structure for each peer */
#define WL_NAN_RANGING_STATUS_SUCCESS 1
-#define WL_NAN_RANGING_STATUS_FAIL 2
+#define WL_NAN_RANGING_STATUS_FAIL 2
#define WL_NAN_RANGING_STATUS_TIMEOUT 3
-#define WL_NAN_RANGING_STATUS_ABORT 4 /* with partial results if sounding count > 0 */
+#define WL_NAN_RANGING_STATUS_ABORT 4 /**< with partial results if sounding count > 0 */
typedef struct nan_ranging_result {
- uint8 status; /* 1: Success, 2: Fail 3: Timeout 4: Aborted */
- uint8 sounding_count; /* number of measurements completed (0 = failure) */
- struct ether_addr ea; /* initiator MAC address */
- uint32 chanspec; /* Chanspec where the ranging was done */
- uint32 timestamp; /* 32bits of the TSF timestamp ranging was completed at */
- uint32 distance; /* mean distance in meters expressed as Q4 number.
+ uint8 status; /**< 1: Success, 2: Fail 3: Timeout 4: Aborted */
+ uint8 sounding_count; /**< number of measurements completed (0 = failure) */
+ struct ether_addr ea; /**< initiator MAC address */
+ uint32 chanspec; /**< Chanspec where the ranging was done */
+ uint32 timestamp; /**< 32bits of the TSF timestamp ranging was completed at */
+ uint32 distance; /**< mean distance in meters expressed as Q4 number.
* Only valid when sounding_count > 0. Examples:
* 0x08 = 0.5m
* 0x10 = 1m
* 0x18 = 1.5m
* set to 0xffffffff to indicate invalid number
*/
- int32 rtt_var; /* standard deviation in 10th of ns of RTTs measured.
+ int32 rtt_var; /**< standard deviation in 10th of ns of RTTs measured.
* Only valid when sounding_count > 0
*/
- struct ether_addr tgtea; /* target MAC address */
+ struct ether_addr tgtea; /**< target MAC address */
+ uint8 PAD[2];
} wl_nan_ranging_result_t;
typedef struct nan_ranging_event_data {
- uint8 mode; /* 1: Result of host initiated ranging */
+ uint8 mode; /**< 1: Result of host initiated ranging */
/* 2: Result of peer initiated ranging */
uint8 reserved;
- uint8 success_count; /* number of peers completed successfully */
- uint8 count; /* number of peers in the list */
- wl_nan_ranging_result_t rr[1]; /* variable array of ranging peers */
+ uint8 success_count; /**< number of peers completed successfully */
+ uint8 count; /**< number of peers in the list */
+ wl_nan_ranging_result_t rr[1]; /**< variable array of ranging peers */
} wl_nan_ranging_event_data_t;
enum {
- WL_NAN_RSSI_DATA = 1,
+ WL_NAN_STATS_RSSI = 1,
WL_NAN_STATS_DATA = 2,
+ WL_NAN_STATS_DP = 3,
/*
* ***** ADD before this line ****
*/
- WL_NAN_INVALID
+ WL_NAN_STATS_INVALID
};
+typedef struct wl_nan_dp_stats {
+ uint32 tbd; /* TBD */
+} wl_nan_dp_stats_t;
typedef struct wl_nan_stats {
/* general */
@@ -6671,9 +11667,15 @@
uint32 cnt_err_ms_rej; /* number of merge scan failed */
uint32 cnt_scan_results; /* no. of nan beacons scanned */
uint32 cnt_join_scan_rej; /* no. of join scans rejected */
+ uint32 cnt_nan_scan_abort; /* no. of join scans rejected */
/* enable/disable */
uint32 cnt_nan_enab; /* no. of times nan feature got enabled */
uint32 cnt_nan_disab; /* no. of times nan feature got disabled */
+ uint32 cnt_sync_bcn_rx; /* count of sync bcn rx within DW */
+ uint32 cnt_sync_bcn_rx_tu[3]; /* Delta bw the tsf in bcn & remote */
+ uint32 cnt_bcn_tx_out_dw; /* TX sync beacon outside dw */
+ uint32 cnt_role_am_dw; /* anchor master role due to dw */
+ uint32 cnt_am_hop_err; /* wrong hopcount set for AM */
} wl_nan_stats_t;
#define WL_NAN_MAC_MAX_NAN_PEERS 6
@@ -6681,8 +11683,9 @@
typedef struct wl_nan_nbr_rssi {
uint8 rx_chan; /* channel number on which bcn rcvd */
- int rssi_raw; /* received rssi value */
- int rssi_avg; /* normalized rssi value */
+ uint8 PAD[3];
+ int32 rssi_raw; /* received rssi value */
+ int32 rssi_avg; /* normalized rssi value */
} wl_nan_peer_rssi_t;
typedef struct wl_nan_peer_rssi_entry {
@@ -6702,20 +11705,535 @@
wl_nan_peer_rssi_entry_t peers[1]; /* peers data list */
} wl_nan_peer_rssi_data_t;
+/* WL_NAN_CMD_DBG_DUMP, GET Resp */
+typedef struct wl_nan_dbg_dump_rsp {
+ wl_nan_dbg_dump_type_t dump_type; /* dump data type */
+ uint8 pad[3];
+ union {
+ wl_nan_peer_rssi_data_t peer_rssi;
+ wl_nan_stats_t nan_stats;
+ } u;
+} wl_nan_dbg_dump_rsp_t;
+
+enum nan_termination_status {
+ NAN_TERM_REASON_INVALID = 1,
+ NAN_TERM_REASON_TIMEOUT = 2,
+ NAN_TERM_REASON_USER_REQ = 3,
+ NAN_TERM_REASON_FAILURE = 4,
+ NAN_TERM_REASON_COUNT_REACHED = 5,
+ NAN_TERM_REASON_DE_SHUTDOWN = 6,
+ NAN_TERM_REASON_DISABLE_IN_PROGRESS = 7
+};
+
+/* nan2 data iovar */
+/* nan2 qos */
+typedef struct wl_nan_dp_qos
+{
+ uint8 tid;
+ uint8 pad;
+ uint16 pkt_size;
+ uint16 mean_rate;
+ uint16 svc_interval;
+} wl_nan_dp_qos_t;
+
+#define WL_NAN_NDL_QOS_MAX_LAT_NO_PREF 0xFFFF
+
+/* nan2 qos */
+typedef struct wl_nan_ndl_qos
+{
+ uint8 min_slots; /* min slots per dw interval */
+ uint8 pad;
+ uint16 max_latency; /* max latency */
+} wl_nan_ndl_qos_t;
+
+/* ndp config */
+typedef struct wl_nan_ndp_config
+{
+ uint8 ndp_id;
+ uint8 pub_id;
+ struct ether_addr pub_addr;
+ struct ether_addr data_addr; /* configure local data addr */
+ struct ether_addr init_data_addr; /* initiator data addr */
+ uint8 svc_spec_info[WL_NAN_DATA_SVC_SPEC_INFO_LEN];
+ wl_nan_dp_qos_t qos;
+ uint16 avail_len;
+ uint8 pad[3];
+ uint8 data[1];
+} wl_nan_ndp_config_t;
+
+/* nan2 device capabilities */
+typedef struct wl_nan_ndp_oper_cfg {
+ uint8 awake_dw_2g;
+ uint8 awake_dw_5g;
+ uint8 bands_supported;
+ uint8 op_mode;
+} wl_nan_ndp_oper_cfg_t;
+
+typedef uint8 wl_nan_ndp_ndpid_t;
+typedef uint8 wl_nan_ndp_conn_t;
+
+#define WL_NAN_INVALID_NDPID 0 /* reserved ndp id */
+
+typedef struct wl_nan_dp_req {
+ uint8 type; /* 0- unicast 1 - multicast */
+ uint8 pub_id; /* Publisher ID */
+ uint16 flags;
+ struct ether_addr peer_mac; /* Peer's NMI addr */
+ struct ether_addr mcast_mac; /* Multicast addr */
+ struct ether_addr ndi;
+ wl_nan_dp_qos_t qos;
+ wl_nan_ndl_qos_t ndl_qos; /* ndl qos */
+ uint8 tlv_params[]; /* xtlv parameters for command */
+} wl_nan_dp_req_t;
+
+/* TODO Need to replace ndp_id with lndp_id */
+/* Return structure to data req IOVAR */
+typedef struct wl_nan_dp_req_ret {
+ struct ether_addr indi; /* Initiators data mac addr */
+ uint8 ndp_id; /* Initiators ndpid */
+ uint8 pad;
+} wl_nan_dp_req_ret_t;
+
+typedef struct wl_nan_dp_resp {
+ uint8 type; /* 0- unicast 1 - multicast */
+ uint8 status; /* Accepted or Rejected */
+ uint8 reason_code;
+ /* Local NDP ID for unicast, mc_id for multicast, 0 for implicit NMSG */
+ uint8 ndp_id; /* can be host indp id also */
+ wl_nan_dp_qos_t qos;
+ /* Initiator data address for unicast or multicast address for multicast */
+ struct ether_addr mac_addr;
+ struct ether_addr ndi;
+ uint16 flags;
+ wl_nan_ndl_qos_t ndl_qos; /* ndl qos */
+ uint8 tlv_params[]; /* xtlv parameters for command */
+} wl_nan_dp_resp_t;
+
+/* Return structure to data resp IOVAR */
+typedef struct wl_nan_dp_resp_ret {
+ uint8 nmsgid; /* NMSG ID or for multicast else 0 */
+ uint8 pad[3];
+} wl_nan_dp_resp_ret_t;
+
+typedef struct wl_nan_dp_conf {
+ uint8 lndp_id; /* can be host ndp id */
+ uint8 status; /* Accepted or Rejected */
+ uint8 pad[2];
+} wl_nan_dp_conf_t;
+
+typedef struct wl_nan_dp_end
+{
+ uint8 lndp_id; /* can be host ndp id */
+ uint8 status;
+ struct ether_addr mac_addr; /* initiator's ndi */
+} wl_nan_dp_end_t;
+
+typedef struct wl_nan_dp_schedupd {
+ uint8 type; /* 0: unicast, 1: multicast */
+ uint8 flags;
+ struct ether_addr addr; /* peer NMI or multicast addr */
+ wl_nan_dp_qos_t qos;
+ wl_nan_ndl_qos_t ndl_qos; /* ndl qos */
+ uint8 map_id;
+ uint8 pad;
+ uint16 hostseq;
+} wl_nan_dp_schedupd_t;
+
+/* set: update with notification, unset: NDL setup handshake */
+#define WL_NAN_DP_SCHEDUPD_NOTIF (1 << 0)
+
+/* list ndp ids */
+typedef struct wl_nan_ndp_id_list {
+ uint16 ndp_count;
+ uint8 lndp_id[];
+} wl_nan_ndp_id_list_t;
+
+/* nan2 status */
+typedef struct ndp_session {
+ uint8 lndp_id;
+ uint8 state;
+ uint8 pub_id;
+ uint8 pad;
+} ndp_session_t;
+
+typedef struct wl_nan_ndp_status {
+ struct ether_addr peer_nmi;
+ struct ether_addr peer_ndi;
+ ndp_session_t session;
+ struct ether_addr lndi;
+ uint8 pad[2];
+} wl_nan_ndp_status_t;
+
+#define NAN_DP_OPAQUE_INFO_DP_RESP 0x01
+#define NAN_DP_OPAQUE_INFO_DP_CONF 0x02
+
+typedef struct wl_nan_dp_opaque_info {
+ uint8 frm_mask; /* dp_resp / dp_conf as defined above. */
+ struct ether_addr initiator_ndi; /* NDI to match in the dp_req. */
+ uint8 pub_id; /* publish id where the opaque data is included. */
+ uint8 len; /* len of opaque_info[]. */
+ uint8 pad[3];
+ uint8 opaque_info[0];
+} wl_nan_dp_opaque_info_t;
+
+/* events */
+#define NAN_DP_SESSION_UNICAST 0
+#define NAN_DP_SESSION_MULTICAST 1
+#define NAN_DP_SECURITY_NONE 0
+#define NAN_DP_SECURITY_CSID 1
+#define NAN_DP_SECURITY_MK 2
+#define WL_NAN_DATA_NMSGID_LEN 8 /* 8 bytes as per nan spec */
+
+/* Common event structure for Nan Datapath
+ * Used for sending NDP Indication, Response, Confirmation, Securty Install and Establish events
+ */
+typedef struct wl_nan_ev_datapath_cmn {
+ uint8 type;
+ /* ndp_id is valid only if type is unicast */
+ uint8 ndp_id;
+ uint8 pub_id;
+ uint8 security;
+ /* Following two fields are valid only if type is unicast */
+ struct ether_addr initiator_ndi;
+ struct ether_addr responder_ndi;
+ struct ether_addr peer_nmi;
+ uint8 status;
+ uint8 role;
+ /* Following two fields are valid only if type is multicast */
+ uint8 nmsg_id[WL_NAN_DATA_NMSGID_LEN];
+ uint8 mc_id;
+ uint8 pad;
+ uint16 opt_tlv_len;
+ uint8 opt_tlvs[];
+} wl_nan_ev_datapath_cmn_t;
+
+/* this is obsolete - DON'T USE */
+typedef struct wl_nan_ev_datapath_end {
+ uint8 ndp_id;
+ uint8 status;
+ uint8 pad[2];
+ struct ether_addr peer_nmi;
+ struct ether_addr peer_ndi;
+} wl_nan_ev_datapath_end_t;
+
+typedef struct wl_tsf {
+ uint32 tsf_l;
+ uint32 tsf_h;
+} wl_tsf_t;
+
+typedef struct wl_nan_ev_rx_bcn {
+ wl_tsf_t tsf;
+ uint16 bcn_len;
+ uint8 pad[2];
+ uint8 bcn[0];
+} wl_nan_ev_rx_bcn_t;
+
+/* reason of host assist request */
+enum wl_nan_host_assist_reason {
+ WL_NAN_HAST_REASON_NONE = 0,
+
+ /* reason for host assist request */
+ WL_NAN_HAST_REASON_NO_CRB = 1, /* NDL: no common NA */
+ WL_NAN_HAST_REASON_NDC = 2, /* NDL: NDC not compliant */
+ WL_NAN_HAST_REASON_IMMUT = 3, /* NDL: peer immutable schedule */
+ WL_NAN_HAST_REASON_RNG = 4, /* NDL: ranging schedule */
+ WL_NAN_HAST_REASON_QOS = 5, /* NDL: QoS not satisfied */
+ WL_NAN_HAST_REASON_SVC_NDI_MISSING = 6 /* SD: NDI associated with svc is missing */
+};
+typedef uint8 wl_nan_host_assist_reason_t;
+
+/* WL_NAN_XTLV_HOST_ASSIST_REQ */
+typedef struct wl_nan_host_assist_req {
+ struct ether_addr peer_nmi; /* peer nmi */
+ struct ether_addr initiator_ndi; /* initiator ndi */
+ uint8 indp_id; /* initiator NDP ID */
+ wl_nan_frame_type_t frm_type; /* received NAF type */
+ wl_nan_host_assist_reason_t reason; /* reason of host assist request */
+ uint8 pub_id; /* Publish ID (valid for WL_NAN_FRM_TYPE_DP_REQ) */
+ uint8 pad[2];
+} wl_nan_host_assist_req_t;
+
+/* nan sub-features */
+enum wl_nan_fw_cap_flag1 {
+ WL_NAN_FW_CAP_FLAG_NONE = 0x00000000, /* dummy */
+ WL_NAN_FW_CAP_FLAG1_AVAIL = 0x00000001,
+ WL_NAN_FW_CAP_FLAG1_DISC = 0x00000002,
+ WL_NAN_FW_CAP_FLAG1_DATA = 0x00000004,
+ WL_NAN_FW_CAP_FLAG1_SEC = 0x00000008,
+ WL_NAN_FW_CAP_FLAG1_RANGE = 0x00000010,
+ WL_NAN_FW_CAP_FLAG1_WFA_TB = 0x00000020,
+ WL_NAN_FW_CAP_FLAG1_DAM = 0x00000040,
+ WL_NAN_FW_CAP_FLAG1_DAM_STRICT = 0x00000080,
+ WL_NAN_FW_CAP_FLAG1_DAM_AUTO = 0x00000100,
+ WL_NAN_FW_CAP_FLAG1_DBG = 0x00000200,
+ WL_NAN_FW_CAP_FLAG1_BCMC_IN_NDC = 0x00000400,
+ WL_NAN_FW_CAP_FLAG1_CHSTATS = 0x00000800,
+ WL_NAN_FW_CAP_FLAG1_ASSOC_COEX = 0x00001000,
+ WL_NAN_FW_CAP_FLAG1_FASTDISC = 0x00002000,
+ WL_NAN_FW_CAP_FLAG1_NO_ID_GEN = 0x00004000,
+ WL_NAN_FW_CAP_FLAG1_DP_OPAQUE_DATA = 0x00008000,
+ WL_NAN_FW_CAP_FLAG1_NSR2 = 0x00010000,
+ WL_NAN_FW_CAP_FLAG1_NSR2_SAVE = 0x00020000,
+ WL_NAN_FW_CAP_FLAG1_NANHO = 0x00040000
+};
+
+/* WL_NAN_XTLV_GEN_FW_CAP */
+typedef struct wl_nan_fw_cap {
+ uint32 flags1; /* nan sub-features compiled in firmware */
+ uint32 flags2; /* for more sub-features in future */
+ uint8 max_svc_publishes; /* max num of service publish */
+ uint8 max_svc_subscribes; /* max num of service subscribe */
+ uint8 max_lcl_sched_maps; /* max num of local schedule map */
+ uint8 max_lcl_ndc_entries; /* max num of local NDC entry */
+ uint8 max_lcl_ndi_interfaces; /* max num of local NDI interface */
+ uint8 max_peer_entries; /* max num of peer entry */
+ uint8 max_ndp_sessions; /* max num of NDP session */
+ uint8 max_concurrent_nan_clusters; /* max num of concurrent clusters */
+ uint16 max_service_name_len; /* max service name length */
+ uint16 max_match_filter_len; /* max match filter length */
+ uint16 max_total_match_filter_len; /* max total match filter length */
+ uint16 max_service_specific_info_len; /* max service specific info length */
+ uint16 max_vsa_data_len; /* max vendor specific attrib data length */
+ uint16 max_mesh_data_len; /* max mesh data length */
+ uint16 max_app_info_len; /* max app info length */
+ uint16 max_sdea_svc_specific_info_len; /* max sdea ser specific info length */
+ uint8 max_queued_tx_followup_msgs; /* max no. of queued tx followup msgs */
+ uint8 max_subscribe_address; /* max subscribe addresses supported */
+ uint8 ndp_supported_bands; /* number of ndp supported bands */
+ uint8 is_ndp_security_supported; /* if secure ndp is supported */
+ uint8 cipher_suites_supported_mask; /* bitmask for suites supported */
+ uint8 pad[3];
+} wl_nan_fw_cap_t;
+
+/* nan cipher suite support mask bits */
+#define WL_NAN_CIPHER_SUITE_SHARED_KEY_128_MASK 0x01
+#define WL_NAN_CIPHER_SUITE_SHARED_KEY_256_MASK 0x02
+
+/* NAN Save Restore */
+#define WL_NAN_NSR2_INFO_MAX_SIZE 2048 /* arbitrary */
+
+/* WL_NAN_XTLV_NSR2_PEER */
+typedef struct wl_nan_nsr_peer_info {
+ struct ether_addr nmi;
+ uint8 l_min_slots; /* local QoS min slots */
+ uint8 p_min_slots; /* peer QoS min slots */
+ uint16 l_max_latency; /* local QoS max latency */
+ uint16 p_max_latency; /* peer QoS max latency */
+ uint8 num_map; /* num of NA map */
+ uint8 pad;
+ uint16 attrs_len; /* total len of following attrs */
+ uint8 attrs[]; /* peer attributes (NA/NDC/ULW/DevCap/Element container) */
+} wl_nan_nsr_peer_info_t;
+
+enum wl_nan_nsr_ndp_flag {
+ WL_NAN_NSR_NDP_FLAG_LCL_INITATOR = 0x0001,
+ WL_NAN_NSR_NDP_FLAG_MCAST = 0x0002
+};
+typedef uint16 wl_nan_nsr_ndp_flag_t;
+
+/* WL_NAN_XTLV_NSR2_NDP */
+typedef struct wl_nan_nsr_ndp_info {
+ struct ether_addr peer_nmi;
+ struct ether_addr peer_ndi;
+ struct ether_addr lcl_ndi;
+ uint16 flags; /* wl_nan_nsr_ndp_flag_t */
+ uint8 pub_id; /* publish id */
+ uint8 indp_id; /* initiator's ndp id */
+ uint8 last_token; /* last NDP dialog token */
+ uint8 pad;
+} wl_nan_nsr_ndp_info_t;
+
+/* NAN2.0 Ranging definitions */
+
+/* result indication bit map */
+#define NAN_RANGE_INDICATION_CONT (1<<0)
+#define NAN_RANGE_INDICATION_INGRESS (1<<1)
+#define NAN_RANGE_INDICATION_EGRESS (1<<2)
+
+/* responder flags */
+#define NAN_RANGE_FLAG_AUTO_ACCEPT (1 << 0)
+#define NAN_RANGE_FLAG_RESULT_REQUIRED (1 << 1)
+
+typedef struct wl_nan_range_req {
+ struct ether_addr peer;
+ uint8 publisher_id;
+ uint8 indication; /* bit map for result event */
+ uint32 resolution; /* default millimeters */
+ uint32 ingress; /* ingress limit in mm */
+ uint32 egress; /* egress limit in mm */
+ uint32 interval; /* max interval(in TU) b/w two ranging measurements */
+} wl_nan_range_req_t;
+
+#define NAN_RNG_REQ_IOV_LEN 24
+
+typedef uint8 wl_nan_range_id;
+
+typedef struct wl_nan_range_resp {
+ wl_nan_range_id range_id;
+ uint8 flags; /* auto response, range result required */
+ uint8 status; /* accept, reject */
+ uint8 indication; /* bit map for result event */
+ uint32 resolution; /* default millimeters */
+ uint32 ingress; /* ingress limit in mm */
+ uint32 egress; /* egress limit in mm */
+ uint32 interval; /* max interval(in TU) b/w two ranging measurements */
+} wl_nan_range_resp_t;
+
+#define NAN_RNG_RESP_IOV_LEN 20
+
+#define NAN_RNG_TERM_FLAG_IMMEDIATE (1u << 0u) /* Do not wait for TXS */
+#define NAN_RNG_TERM_FLAG_SILIENT_TEARDOWN (1u << 1u) /* Do not TX rng_term */
+#define NAN_RNG_TERM_FLAG_EVENT_HOST (1u << 2u) /* Notify event to host */
+#define NAN_RNG_TERM_FLAG_OPT_TLVS (1u << 3u) /* opt tlvs present */
+
+typedef struct wl_nan_range_cancel_ext {
+ wl_nan_range_id range_id;
+ uint8 flags;
+ uint8 pad[2];
+} wl_nan_range_cancel_ext_t;
+
+#define NAN_RNG_CANCEL_IOV_FIXED_LEN 4u
+
+#define NAN_RNG_MAX_IOV_LEN 255
+
+typedef struct wl_nan_ev_rng_req_ind {
+ struct ether_addr peer_m_addr;
+ uint8 rng_id;
+ /* ftm parameters */
+ uint8 max_burst_dur;
+ uint8 min_ftm_delta;
+ uint8 max_num_ftm;
+ uint8 ftm_format_bw;
+ /* location info availability bit map */
+ uint8 lc_info_avail;
+ /* Last movement indication */
+ uint16 last_movement;
+ uint8 pad[2];
+} wl_nan_ev_rng_req_ind_t;
+
+#define NAN_RNG_REQ_IND_SIZE 14
+
+typedef struct wl_nan_ev_rng_rpt_ind {
+ uint32 dist_mm; /* in millimeter */
+ struct ether_addr peer_m_addr;
+ uint8 indication; /* indication definitions mentioned above */
+ uint8 rng_id;
+} wl_nan_ev_rng_rpt_ind_t;
+
+#define NAN_RNG_RPT_IND_SIZE 12
+
+/* number of continuous ranging crbs which can be idle,
+* after which ranging session will be terminated.
+* Default value is 5. Set to zero for disabling the
+* idle timeout functionality
+*/
+typedef uint8 wl_nan_range_idle_count_t;
+
+/* nan ranging termination reason codes */
+#define NAN_RNG_TERM_IDLE_TIMEOUT 1 /* no ftms from peer */
+#define NAN_RNG_TERM_PEER_REQ 2
+#define NAN_RNG_TERM_USER_REQ 3
+#define NAN_RNG_TERM_RNG_RESP_TIMEOUT 4
+
+typedef struct wl_nan_ev_rng_term_ind {
+ struct ether_addr peer_m_addr;
+ uint8 reason_code;
+ uint8 rng_id;
+} wl_nan_ev_rng_term_ind_t;
+
+#define NAN_RNG_TERM_IND_SIZE 8
+
+typedef struct wl_nan_ev_rng_resp {
+ struct ether_addr peer_m_addr;
+ uint8 status;
+ uint8 rng_id;
+} wl_nan_ev_rng_resp_t;
+
+/* Used by NDL schedule events -
+ * WL_NAN_EVENT_PEER_SCHED_UPD_NOTIF, WL_NAN_EVENT_PEER_SCHED_REQ
+ * WL_NAN_EVENT_PEER_SCHED_RESP, WL_NAN_EVENT_PEER_SCHED_CONF
+ */
+typedef struct wl_nan_ev_sched_info {
+ struct ether_addr peer_nmi;
+ uint8 ndl_status; /* applies only to sched resp/conf */
+ uint8 pad;
+ uint16 opt_tlv_len;
+ uint8 opt_tlvs[];
+} wl_nan_ev_sched_info_t;
+
+/* WL_NAN_EVENT_CHAN_BOUNDARY */
+typedef struct wl_nan_chbound_info {
+ uint32 cluster_tsf_h; /* Current Cluster TSF High */
+ uint32 cluster_tsf_l; /* Current Cluster TSF Low */
+ uint16 cur_chspec;
+ uint16 opt_tlvs_len;
+ uint8 opt_tlvs[];
+} wl_nan_chbound_info_t;
+
+/* channel stats (includes nan & non-nan) */
+
+/* WL_NAN_XTLV_CCA_STATS */
+typedef struct wl_nan_cca_stats {
+ uint16 chanspec;
+ uint8 pad[2];
+ uint32 sample_dur;
+
+ uint32 congest_ibss;
+ uint32 congest_obss;
+ uint32 interference;
+} wl_nan_cca_stats_t;
+
+/* WL_NAN_XTLV_PER_STATS */
+typedef struct wl_nan_per_stats_s {
+ uint16 chanspec;
+ uint8 pad[2];
+ uint32 sample_dur;
+
+ uint32 txframe; /* tx data frames */
+ uint32 txretrans; /* tx mac retransmits */
+ uint32 txerror; /* tx data errors */
+ uint32 txctl; /* tx management frames */
+ uint32 txserr; /* tx status errors */
+
+ uint32 rxframe; /* rx data frames */
+ uint32 rxerror; /* rx data errors */
+ uint32 rxctl; /* rx management frames */
+
+ uint32 txbar; /* tx bar */
+ uint32 rxbar; /* rx bar */
+ uint32 txaction; /* tx action frame */
+ uint32 rxaction; /* rx action frame */
+ uint32 txlost; /* lost packets reported in txs */
+ uint32 rxback; /* rx block ack */
+ uint32 txback; /* tx bloak ack */
+} wl_nan_per_stats_t;
+
+/* fast discovery beacon config
+ * WL_NAN_XTLV_CFG_FDISC_TBMP
+*/
+typedef struct wl_nan_fastdisc_s {
+ uint8 id;
+ uint8 bitmap_len;
+ uint8 pad[2];
+ uint8 bitmap[];
+} wl_nan_fastdisc_t;
+
+#define WL_NAN_FASTDISC_CFG_SIZE 1024 /* arbitrary */
+
/* ********************* end of NAN section ******************************** */
-#endif /* WL_NAN */
+/* endif WL_NAN */
#define P2P_NAN_IOC_BUFSZ 512 /* some sufficient ioc buff size */
#define WL_P2P_NAN_IOCTL_VERSION 0x1
/* container for p2p nan iovtls & events */
-typedef BWL_PRE_PACKED_STRUCT struct wl_p2p_nan_ioc {
+typedef struct wl_p2p_nan_ioc {
uint16 version; /* interface command or event version */
uint16 id; /* p2p nan ioctl cmd ID */
uint16 len; /* total length of data[] */
uint16 pad; /* padding */
- uint8 data [1]; /* var len payload of bcm_xtlv_t type */
-} BWL_POST_PACKED_STRUCT wl_p2p_nan_ioc_t;
+ uint8 data []; /* var len payload of bcm_xtlv_t type */
+} wl_p2p_nan_ioc_t;
/* p2p nan cmd IDs */
enum wl_p2p_nan_cmds {
@@ -6749,7 +12267,7 @@
uint16 pad2; /* Padding */
uint32 avail_bmap; /* availability interval bitmap */
uint32 chanspec; /* Chanspec */
- uint8 ie[1]; /* hex ie data */
+ uint8 ie[]; /* hex ie data */
} wl_p2p_nan_config_t;
#define WL_P2P_NAN_SERVICE_LIST_VERSION 1
@@ -6790,162 +12308,410 @@
uint32 avl_bmp; /* availability interval bitmap */
} nan_post_disc_p2p_data_t;
-/* timeslot etc for NAN */
enum {
- WL_TMU_TU = 0,
- WL_TMU_SEC = 1,
- WL_TMU_MILLI_SEC = 2,
- WL_TMU_MICRO_SEC = 3,
- WL_TMU_NANO_SEC = 4,
- WL_TMU_PICO_SEC = 5
+ WL_AVAIL_NONE = 0x0000,
+ WL_AVAIL_LOCAL = 0x0001,
+ WL_AVAIL_PEER = 0x0002,
+ WL_AVAIL_NDC = 0x0003,
+ WL_AVAIL_IMMUTABLE = 0x0004,
+ WL_AVAIL_RESPONSE = 0x0005,
+ WL_AVAIL_COUNTER = 0x0006,
+ WL_AVAIL_RANGING = 0x0007,
+ WL_AVAIL_UPD_POT = 0x0008, /* modify potential, keep committed/conditional */
+ WL_AVAIL_UPD_COM_COND = 0x0009, /* modify committed/conditional, keep potential */
+ WL_AVAIL_REMOVE_MAP = 0x000A, /* remove map */
+ WL_AVAIL_FRM_TYPE = 0x000B, /* specify frame types containing NA */
+ WL_AVAIL_TYPE_MAX = WL_AVAIL_FRM_TYPE /* New ones before and update */
};
-
-typedef int16 wl_tmu_t;
-
-typedef struct {
- uint32 intvl; /* time interval */
- wl_tmu_t tmu; /* time unit */
- uint8 pad[2]; /* padding */
-} wl_time_interval_t;
-
-typedef struct wl_time_slot {
- wl_time_interval_t start; /* from time ref; in TU */
- wl_time_interval_t duration; /* from start; in TU */
- uint32 chanspec; /* channel spec */
-} wl_time_slot_t;
-
-/* time reference */
-enum {
- WL_TIME_REF_NONE = 0,
- WL_TIME_REF_DEV_TSF = 1,
- WL_TIME_REF_NAN_DW = 2,
- WL_TIME_REF_TBTT = 3,
- WL_TIME_REF_MAX = 4
-};
-
-typedef int16 wl_time_ref_t;
-
-/* Read only flags */
-enum {
- WL_AVAIL_NONE = 0,
- WL_AVAIL_NAN_PUBLISHED = 0x0001, /* Published by NAN */
- WL_AVAIL_SCHEDULED = 0x0002, /* already scheduled */
-};
+#define WL_AVAIL_TYPE_MASK 0x000F
+#define WL_AVAIL_FLAG_REMOVE 0x2000 /* remove schedule attr of given type & map id */
+#define WL_AVAIL_FLAG_SELECTED_NDC 0x4000
+#define WL_AVAIL_FLAG_RAW_MODE 0x8000
+#define WL_AVAIL_FLAGS_MASK 0xFF00
+#define WL_AVAIL_FLAGS_SHIFT 8
typedef int16 wl_avail_flags_t;
+/* availability entry flags */
+enum {
+ WL_AVAIL_ENTRY_NONE = 0x0000,
+ WL_AVAIL_ENTRY_COM = 0x0001, /* committed */
+ WL_AVAIL_ENTRY_POT = 0x0002, /* potential */
+ WL_AVAIL_ENTRY_COND = 0x0004, /* conditional */
+ WL_AVAIL_ENTRY_PAGED = 0x0008, /* P-NDL */
+ WL_AVAIL_ENTRY_USAGE = 0x0030, /* usage preference */
+ WL_AVAIL_ENTRY_BIT_DUR = 0x00C0, /* bit duration */
+ WL_AVAIL_ENTRY_BAND_PRESENT = 0x0100, /* band present */
+ WL_AVAIL_ENTRY_CHAN_PRESENT = 0x0200, /* channel information present */
+ WL_AVAIL_ENTRY_CHAN_ENTRY_PRESENT = 0x0400, /* channel entry (opclass+bitmap) */
+ /* free to use 0x0800 */
+ WL_AVAIL_ENTRY_RXNSS = 0xF000 /* max num of spatial stream RX */
+};
+
+/* bit duration */
+enum {
+ WL_AVAIL_BIT_DUR_16 = 0, /* 16TU */
+ WL_AVAIL_BIT_DUR_32 = 1, /* 32TU */
+ WL_AVAIL_BIT_DUR_64 = 2, /* 64TU */
+ WL_AVAIL_BIT_DUR_128 = 3, /* 128TU */
+};
+
+/* period */
+enum {
+ WL_AVAIL_PERIOD_0 = 0, /* 0TU */
+ WL_AVAIL_PERIOD_128 = 1, /* 128TU */
+ WL_AVAIL_PERIOD_256 = 2, /* 256TU */
+ WL_AVAIL_PERIOD_512 = 3, /* 512TU */
+ WL_AVAIL_PERIOD_1024 = 4, /* 1024TU */
+ WL_AVAIL_PERIOD_2048 = 5, /* 2048TU */
+ WL_AVAIL_PERIOD_4096 = 6, /* 4096TU */
+ WL_AVAIL_PERIOD_8192 = 7, /* 8192TU */
+};
+
+/* band */
+enum {
+ WL_AVAIL_BAND_NONE = 0, /* reserved */
+ WL_AVAIL_BAND_SUB1G = 1, /* sub-1 GHz */
+ WL_AVAIL_BAND_2G = 2, /* 2.4 GHz */
+ WL_AVAIL_BAND_3G = 3, /* reserved (for 3.6 GHz) */
+ WL_AVAIL_BAND_5G = 4, /* 4.9 and 5 GHz */
+ WL_AVAIL_BAND_60G = 5, /* reserved (for 60 GHz) */
+};
+
+#define WL_AVAIL_ENTRY_TYPE_MASK 0x000F
+#define WL_AVAIL_ENTRY_USAGE_MASK 0x0030 /* up to 4 usage preferences */
+#define WL_AVAIL_ENTRY_USAGE_SHIFT 4
+#define WL_AVAIL_ENTRY_USAGE_VAL(_flags) (((_flags) & WL_AVAIL_ENTRY_USAGE_MASK) \
+ >> WL_AVAIL_ENTRY_USAGE_SHIFT)
+
+#define WL_AVAIL_ENTRY_BIT_DUR_MASK 0x00C0 /* 0:16TU, 1:32TU, 2:64TU, 3:128TU */
+#define WL_AVAIL_ENTRY_BIT_DUR_SHIFT 6
+#define WL_AVAIL_ENTRY_BIT_DUR_VAL(_flags) (((_flags) & WL_AVAIL_ENTRY_BIT_DUR_MASK) \
+ >> WL_AVAIL_ENTRY_BIT_DUR_SHIFT)
+
+#define WL_AVAIL_ENTRY_BAND_MASK 0x0100 /* 0=band not present, 1=present */
+#define WL_AVAIL_ENTRY_BAND_SHIFT 8
+
+#define WL_AVAIL_ENTRY_CHAN_MASK 0x0200 /* 0=channel info not present, 1=present */
+#define WL_AVAIL_ENTRY_CHAN_SHIFT 9
+
+#define WL_AVAIL_ENTRY_CHAN_ENTRY_MASK 0x0400 /* 0=chanspec, 1=hex channel entry */
+#define WL_AVAIL_ENTRY_CHAN_ENTRY_SHIFT 10
+
+#define WL_AVAIL_ENTRY_RXNSS_MASK 0xF000
+#define WL_AVAIL_ENTRY_RXNSS_SHIFT 12
+#define WL_AVAIL_ENTRY_RXNSS_VAL(_flags) (((_flags) & WL_AVAIL_ENTRY_RXNSS_MASK) \
+ >> WL_AVAIL_ENTRY_RXNSS_SHIFT)
+#define WL_AVAIL_ENTRY_RXNSS_MAX 15 /* 0-15 */
+
+/* mask for channel_entry (to be obsoleted) */
+#define WL_AVAIL_ENTRY_OPCLASS_MASK 0xFF
+#define WL_AVAIL_ENTRY_CHAN_BITMAP_MASK 0xFF00
+#define WL_AVAIL_ENTRY_CHAN_BITMAP_SHIFT 8
+#define WL_AVAIL_ENTRY_CHAN_BITMAP_VAL(_info) (((_info) & WL_AVAIL_ENTRY_CHAN_BITMAP_MASK) \
+ >> WL_AVAIL_ENTRY_CHAN_BITMAP_SHIFT)
+
+/* Used for raw channel entry field input */
+#define MAX_CHAN_ENTRY_LEN 6
+
+typedef struct wl_avail_entry {
+ uint16 length; /* total length */
+ uint16 start_offset; /* in TUs, multiply by 16 for total offset */
+ union {
+ uint32 channel_info; /* either chanspec or hex channel entry (opclass +
+ * bitmap per NAN spec), as indicated by setting
+ * WL_AVAIL_ENTRY_HEX_CHAN_ENTRY flag
+ */
+ uint32 band; /* defined by WL_BAND enum, 2=2.4GHz, 4=5GHz */
+ uint8 channel_entry[MAX_CHAN_ENTRY_LEN];
+ uint8 align[8]; /* aligned len of union in structure (not for use)
+ * if member of union is changed,
+ * update length of align[] accordingly.
+ */
+ } u; /* band or channel value, 0=all band/channels */
+ uint8 sched_map_id; /* avail map id associated with sched entry */
+ uint8 pad;
+ uint8 period; /* in TUs, defined by WL_AVAIL_PERIOD enum
+ * 1:128, 2:256, 3:512, 4:1024, 5:2048, 6:4096,
+ * 7:8192
+ */
+ uint8 bitmap_len;
+ uint16 flags; /* defined by avail entry flags enum:
+ * type, usage pref, bit duration, rx nss,
+ * and band, channel or channel entry
+ */
+ uint8 bitmap[]; /* time bitmap */
+} wl_avail_entry_t;
+
+#define WL_AVAIL_VERSION 1 /* current wl_avail version */
+
typedef struct wl_avail {
- /* future use/specific use.
- * To indicate any specific use
- */
- wl_avail_flags_t flags;
- /* time reference base for slots */
- wl_time_ref_t time_ref;
- /* repeat sequence */
- wl_time_interval_t repeat;
- /* num of slots present */
- uint16 num_slots;
- /* padding */
- uint8 pad[2];
- /* slots */
- wl_time_slot_t slots[1];
+ uint16 length; /* total length */
+ uint16 flags; /* LSB - avail type (defined by WL_AVAIL enum)
+ * MSB - avail flags
+ */
+ uint8 id; /* id used for multiple maps/avail */
+ uint8 lndc_id; /* ndc id used in multi-ndc case */
+ uint8 version;
+ uint8 pad;
+ struct ether_addr addr; /* peer mac address or ndc id */
+ uint8 num_entries;
+ uint8 unused_byte;
+ /* add additional fields above this line */
+ uint8 entry[];
} wl_avail_t;
+
+#define WL_AVAIL_MIN_LEN(n) ((n) ? OFFSETOF(wl_avail_t, entry) + \
+ ((n) * OFFSETOF(wl_avail_entry_t, bitmap)) : 0)
+
+/* unaligned schedule (window) */
+typedef struct wl_avail_ulw {
+ uint8 id; /* schedule ID */
+ uint8 overwrite; /* bit 0: overwrite all
+ * 1-4: map ID if overwrite all is 0
+ */
+ uint16 flags;
+ uint32 start; /* start time of first ULW, in us */
+ uint32 dur; /* duration of ULW, in us */
+ uint32 period; /* time between consecutive ULWs, in us */
+ union {
+ uint32 chanspec;
+ uint32 band;
+ uint8 chan_entry[MAX_CHAN_ENTRY_LEN];
+ uint8 pad[8];
+ } u;
+ uint8 cntdwn; /* remaining ULWs before schedule ends */
+ uint8 pad[3];
+} wl_avail_ulw_t;
+
+/* unset: NAN is not available during ULW, set: NAN is avail depending on ctrl flags */
+#define WL_NAN_ULW_CTRL_PRESENT (1 << 0)
+/* unset: band, set: channel */
+#define WL_NAN_ULW_CTRL_TYPE (1 << 1)
+/* set: NAN is availabile on specified band/channel */
+#define WL_NAN_ULW_CTRL_AVAIL (1 << 2)
+/* channel is provided in raw attribute format */
+#define WL_NAN_ULW_CTRL_RAW_CHAN (1 << 3)
+
+/* nan wfa testmode operations */
+enum {
+ WL_NAN_WFA_TM_IGNORE_TERMINATE_NAF = 0x00000001,
+ WL_NAN_WFA_TM_IGNORE_RX_DATA_OUTSIDE_CRB = 0x00000002,
+ WL_NAN_WFA_TM_ALLOW_TX_DATA_OUTSIDE_CRB = 0x00000004,
+ WL_NAN_WFA_TM_ENFORCE_NDL_COUNTER = 0x00000008,
+ WL_NAN_WFA_TM_BYPASS_NDL_PROPOSAL_VALIDATION = 0x00000010,
+ /* allow data(pings) tx while ndp sec negotiation */
+ WL_NAN_WFA_TM_SEC_SEND_PINGS_BYPASS_NDP_SM = 0x00000020,
+ /* generate and insert incorrect mic */
+ WL_NAN_WFA_TM_SEC_INCORRECT_MIC = 0x00000040,
+ /* send m4 reject deliberately */
+ WL_NAN_WFA_TM_SEC_REJECT_STATUS4M4 = 0x00000080,
+ /* send mgmt frame (for eg. ndp terminate) in clear txt (bypass security) */
+ WL_NAN_WFA_TM_SEC_SEND_MGMT_CLEAR = 0x00000100,
+ /* validate qos */
+ WL_NAN_WFA_TM_NDL_QOS_VALIDATE = 0x00000200,
+ /* firmware generated schedule update */
+ WL_NAN_WFA_TM_GEN_SCHED_UPD = 0x00000400,
+ /* add lower 4-bytes of TSF to configured start time */
+ WL_NAN_WFA_TM_ULW_START_TIME = 0x00000800,
+ /* enable schedule validation for SDF */
+ WL_NAN_WFA_TM_SDF_SCHED_VALIDATE = 0x00001000,
+ /* by pass faw na iovar */
+ WL_NAN_WFA_TM_SKIP_RAW_NA_BLOB = 0x00002000,
+ /* overwrite local NA with peer NA in received frame */
+ WL_NAN_WFA_TM_LOCAL_NA_OVERWRITE = 0x00004000,
+ /* randomize and self configure ndl qos(needed at responder in auto mode) */
+ WL_NAN_WFA_TM_SELF_CFG_NDL_QOS = 0x00008000,
+ /* send NAF frames only in DW */
+ WL_NAN_WFA_TM_SEND_NAF_IN_DW = 0x00010000,
+ /* restrict channels used for countered slots to Ch 6/149 only */
+ WL_NAN_WFA_TM_RESTRICT_COUNTER_SLOTS_CHAN = 0x00020000,
+ /* NDPE negative test case (4.2.5 & 4.2.6) */
+ WL_NAN_WFA_TM_NDPE_NEGATIVE_TEST_TB = 0x00040000,
+ /* Set NDPE(NAN3.0) capable bit in dev cap attr */
+ WL_NAN_WFA_TM_ENABLE_NDPE_CAP = 0x00080000,
+
+ /* add above & update mask */
+ WL_NAN_WFA_TM_FLAG_MASK = 0x000FFFFF
+};
+typedef uint32 wl_nan_wfa_testmode_t;
+
+/* To be removed; replaced by wl_nan_vndr_payload */
+typedef struct wl_nan_vndr_ie {
+ uint32 flags; /* bitmask indicating which packet(s) contain this IE */
+ uint16 body_len; /* length of body (does not include oui field) */
+ uint8 pad[2];
+ uint8 oui[DOT11_OUI_LEN];
+ uint8 pad2;
+ uint8 body[]; /* vendor IE payload */
+} wl_nan_vndr_ie_t;
+
+typedef struct wl_nan_vndr_payload {
+ uint32 flags; /* bitmask indicating which packet(s) contain payload */
+ uint16 payload_len; /* length of payload */
+ uint8 pad[2];
+ uint8 payload[]; /* payload to be appended to NAN frame */
+} wl_nan_vndr_payload_t;
+
+typedef struct wl_nan_dev_cap {
+ uint8 bands[NAN_MAX_BANDS];
+ uint8 awake_dw[NAN_MAX_BANDS];
+ uint8 overwrite_mapid[NAN_MAX_BANDS];
+ uint8 mapid; /* dev cap mapid */
+ uint8 all_maps; /* applies to device */
+ uint8 paging;
+ uint8 pad[3];
+} wl_nan_dev_cap_t;
+
+/* arbitrary max len for frame template */
+#define WL_NAN_FRM_TPLT_MAX_LEN 1024
+
+typedef struct wl_nan_frm_tplt {
+ wl_nan_frame_type_t type;
+ uint8 pad;
+ uint16 len; /* length of template */
+ uint8 data[]; /* template */
+} wl_nan_frm_tplt_t;
#define RSSI_THRESHOLD_SIZE 16
#define MAX_IMP_RESP_SIZE 256
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_rssi_bias {
- int32 version; /* version */
- int32 threshold[RSSI_THRESHOLD_SIZE]; /* threshold */
- int32 peak_offset; /* peak offset */
- int32 bias; /* rssi bias */
- int32 gd_delta; /* GD - GD_ADJ */
- int32 imp_resp[MAX_IMP_RESP_SIZE]; /* (Hi*Hi)+(Hr*Hr) */
-} BWL_POST_PACKED_STRUCT wl_proxd_rssi_bias_t;
+typedef struct wl_proxd_rssi_bias {
+ int32 version; /**< version */
+ int32 threshold[RSSI_THRESHOLD_SIZE]; /**< threshold */
+ int32 peak_offset; /**< peak offset */
+ int32 bias; /**< rssi bias */
+ int32 gd_delta; /**< GD - GD_ADJ */
+ int32 imp_resp[MAX_IMP_RESP_SIZE]; /**< (Hi*Hi)+(Hr*Hr) */
+} wl_proxd_rssi_bias_t;
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_rssi_bias_avg {
- int32 avg_threshold[RSSI_THRESHOLD_SIZE]; /* avg threshold */
- int32 avg_peak_offset; /* avg peak offset */
- int32 avg_rssi; /* avg rssi */
- int32 avg_bias; /* avg bias */
-} BWL_POST_PACKED_STRUCT wl_proxd_rssi_bias_avg_t;
+typedef struct wl_proxd_rssi_bias_avg {
+ int32 avg_threshold[RSSI_THRESHOLD_SIZE]; /**< avg threshold */
+ int32 avg_peak_offset; /**< avg peak offset */
+ int32 avg_rssi; /**< avg rssi */
+ int32 avg_bias; /**< avg bias */
+} wl_proxd_rssi_bias_avg_t;
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_info {
- uint16 type; /* type: 0 channel table, 1 channel smoothing table, 2 and 3 seq */
- uint16 index; /* The current frame index, from 1 to total_frames. */
- uint16 tof_cmd; /* M_TOF_CMD */
- uint16 tof_rsp; /* M_TOF_RSP */
- uint16 tof_avb_rxl; /* M_TOF_AVB_RX_L */
- uint16 tof_avb_rxh; /* M_TOF_AVB_RX_H */
- uint16 tof_avb_txl; /* M_TOF_AVB_TX_L */
- uint16 tof_avb_txh; /* M_TOF_AVB_TX_H */
- uint16 tof_id; /* M_TOF_ID */
+ uint16 type; /**< type: 0 channel table, 1 channel smoothing table, 2 and 3 seq */
+ uint16 index; /**< The current frame index, from 1 to total_frames. */
+ uint16 tof_cmd; /**< M_TOF_CMD */
+ uint16 tof_rsp; /**< M_TOF_RSP */
+ uint16 tof_avb_rxl; /**< M_TOF_AVB_RX_L */
+ uint16 tof_avb_rxh; /**< M_TOF_AVB_RX_H */
+ uint16 tof_avb_txl; /**< M_TOF_AVB_TX_L */
+ uint16 tof_avb_txh; /**< M_TOF_AVB_TX_H */
+ uint16 tof_id; /**< M_TOF_ID */
uint8 tof_frame_type;
uint8 tof_frame_bw;
int8 tof_rssi;
int32 tof_cfo;
- int32 gd_adj_ns; /* gound delay */
- int32 gd_h_adj_ns; /* group delay + threshold crossing */
-#ifdef RSSI_REFINE
- wl_proxd_rssi_bias_t rssi_bias; /* RSSI refinement info */
-#endif
- int16 nfft; /* number of samples stored in H */
+ int32 gd_adj_ns; /**< gound delay */
+ int32 gd_h_adj_ns; /**< group delay + threshold crossing */
+ int16 nfft; /**< number of samples stored in H */
+ uint8 num_max_cores;
} BWL_POST_PACKED_STRUCT wl_proxd_collect_info_t;
+#include <packed_section_end.h>
-#define k_tof_collect_H_pad 1
-#define k_tof_collect_H_size (256+16+k_tof_collect_H_pad)
-#define k_tof_collect_Hraw_size (2*k_tof_collect_H_size)
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_data {
+#define K_TOF_COLLECT_H_PAD 1
+#define K_TOF_COLLECT_SC_20MHZ (64)
+/* Maximum possible size of sample capture */
+#define K_TOF_COLLECT_SC_80MHZ (2*K_TOF_COLLECT_SC_20MHZ)
+/* Maximum possible size of channel dump */
+#define K_TOF_COLLECT_CHAN_SIZE (2*K_TOF_COLLECT_SC_80MHZ)
+
+/*
+A few extra samples are required to estimate frequency offset
+Right now 16 samples are being used. Can be changed in future.
+*/
+#define K_TOF_COLLECT_SAMP_SIZE_20MHZ (2*(K_TOF_COLLECT_SC_20MHZ)+16+K_TOF_COLLECT_H_PAD)
+#define K_TOF_COLLECT_RAW_SAMP_SIZE_20MHZ (2*K_TOF_COLLECT_SAMP_SIZE_20MHZ)
+#define K_TOF_COLLECT_H_SIZE_20MHZ (K_TOF_COLLECT_SAMP_SIZE_20MHZ)
+#define K_TOF_COLLECT_HRAW_SIZE_20MHZ (K_TOF_COLLECT_RAW_SAMP_SIZE_20MHZ)
+
+#define K_TOF_COLLECT_SAMP_SIZE_80MHZ (2*(K_TOF_COLLECT_SC_80MHZ)+16+K_TOF_COLLECT_H_PAD)
+#define K_TOF_COLLECT_RAW_SAMP_SIZE_80MHZ (2*K_TOF_COLLECT_SAMP_SIZE_80MHZ)
+#define K_TOF_COLLECT_H_SIZE_80MHZ (K_TOF_COLLECT_SAMP_SIZE_80MHZ)
+#define K_TOF_COLLECT_HRAW_SIZE_80MHZ (K_TOF_COLLECT_RAW_SAMP_SIZE_80MHZ)
+
+#define WL_PROXD_COLLECT_DATA_VERSION_1 1
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_data_v1 {
wl_proxd_collect_info_t info;
- uint32 H[k_tof_collect_H_size]; /* raw data read from phy used to adjust timestamps */
+ uint8 ri_rr[FTM_TPK_RI_RR_LEN];
+ /**< raw data read from phy used to adjust timestamps */
+ uint32 H[K_TOF_COLLECT_H_SIZE_20MHZ];
+} BWL_POST_PACKED_STRUCT wl_proxd_collect_data_t_v1;
+#include <packed_section_end.h>
-} BWL_POST_PACKED_STRUCT wl_proxd_collect_data_t;
+#define WL_PROXD_COLLECT_DATA_VERSION_2 2
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_data_v2 {
+ wl_proxd_collect_info_t info;
+ uint8 ri_rr[FTM_TPK_RI_RR_LEN_SECURE_2_0];
+ /**< raw data read from phy used to adjust timestamps */
+ uint32 H[K_TOF_COLLECT_H_SIZE_20MHZ];
+} BWL_POST_PACKED_STRUCT wl_proxd_collect_data_t_v2;
+#include <packed_section_end.h>
-typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_debug_data {
- uint8 count; /* number of packets */
- uint8 stage; /* state machone stage */
- uint8 received; /* received or txed */
- uint8 paket_type; /* packet type */
- uint8 category; /* category field */
- uint8 action; /* action field */
- uint8 token; /* token number */
- uint8 follow_token; /* following token number */
- uint16 index; /* index of the packet */
- uint16 tof_cmd; /* M_TOF_CMD */
- uint16 tof_rsp; /* M_TOF_RSP */
- uint16 tof_avb_rxl; /* M_TOF_AVB_RX_L */
- uint16 tof_avb_rxh; /* M_TOF_AVB_RX_H */
- uint16 tof_avb_txl; /* M_TOF_AVB_TX_L */
- uint16 tof_avb_txh; /* M_TOF_AVB_TX_H */
- uint16 tof_id; /* M_TOF_ID */
- uint16 tof_status0; /* M_TOF_STATUS_0 */
- uint16 tof_status2; /* M_TOF_STATUS_2 */
- uint16 tof_chsm0; /* M_TOF_CHNSM_0 */
- uint16 tof_phyctl0; /* M_TOF_PHYCTL0 */
- uint16 tof_phyctl1; /* M_TOF_PHYCTL1 */
- uint16 tof_phyctl2; /* M_TOF_PHYCTL2 */
- uint16 tof_lsig; /* M_TOF_LSIG */
- uint16 tof_vhta0; /* M_TOF_VHTA0 */
- uint16 tof_vhta1; /* M_TOF_VHTA1 */
- uint16 tof_vhta2; /* M_TOF_VHTA2 */
- uint16 tof_vhtb0; /* M_TOF_VHTB0 */
- uint16 tof_vhtb1; /* M_TOF_VHTB1 */
- uint16 tof_apmductl; /* M_TOF_AMPDU_CTL */
- uint16 tof_apmdudlim; /* M_TOF_AMPDU_DLIM */
- uint16 tof_apmdulen; /* M_TOF_AMPDU_LEN */
-} BWL_POST_PACKED_STRUCT wl_proxd_debug_data_t;
+#define WL_PROXD_COLLECT_DATA_VERSION_3 3
+typedef struct wl_proxd_collect_data_v3 {
+ uint16 version;
+ uint16 len;
+ wl_proxd_collect_info_t info;
+ uint8 ri_rr[FTM_TPK_RI_RR_LEN_SECURE_2_0];
+ /**< raw data read from phy used to adjust timestamps */
+ uint32 H[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint32 chan[4 * K_TOF_COLLECT_CHAN_SIZE];
+} wl_proxd_collect_data_t_v3;
+#define WL_PROXD_COLLECT_DATA_VERSION_MAX WL_PROXD_COLLECT_DATA_VERSION_3
-/* version of the wl_wsec_info structure */
+typedef struct wl_proxd_debug_data {
+ uint8 count; /**< number of packets */
+ uint8 stage; /**< state machone stage */
+ uint8 received; /**< received or txed */
+ uint8 paket_type; /**< packet type */
+ uint8 category; /**< category field */
+ uint8 action; /**< action field */
+ uint8 token; /**< token number */
+ uint8 follow_token; /**< following token number */
+ uint16 index; /**< index of the packet */
+ uint16 tof_cmd; /**< M_TOF_CMD */
+ uint16 tof_rsp; /**< M_TOF_RSP */
+ uint16 tof_avb_rxl; /**< M_TOF_AVB_RX_L */
+ uint16 tof_avb_rxh; /**< M_TOF_AVB_RX_H */
+ uint16 tof_avb_txl; /**< M_TOF_AVB_TX_L */
+ uint16 tof_avb_txh; /**< M_TOF_AVB_TX_H */
+ uint16 tof_id; /**< M_TOF_ID */
+ uint16 tof_status0; /**< M_TOF_STATUS_0 */
+ uint16 tof_status2; /**< M_TOF_STATUS_2 */
+ uint16 tof_chsm0; /**< M_TOF_CHNSM_0 */
+ uint16 tof_phyctl0; /**< M_TOF_PHYCTL0 */
+ uint16 tof_phyctl1; /**< M_TOF_PHYCTL1 */
+ uint16 tof_phyctl2; /**< M_TOF_PHYCTL2 */
+ uint16 tof_lsig; /**< M_TOF_LSIG */
+ uint16 tof_vhta0; /**< M_TOF_VHTA0 */
+ uint16 tof_vhta1; /**< M_TOF_VHTA1 */
+ uint16 tof_vhta2; /**< M_TOF_VHTA2 */
+ uint16 tof_vhtb0; /**< M_TOF_VHTB0 */
+ uint16 tof_vhtb1; /**< M_TOF_VHTB1 */
+ uint16 tof_apmductl; /**< M_TOF_AMPDU_CTL */
+ uint16 tof_apmdudlim; /**< M_TOF_AMPDU_DLIM */
+ uint16 tof_apmdulen; /**< M_TOF_AMPDU_LEN */
+} wl_proxd_debug_data_t;
+
+/** version of the wl_wsec_info structure */
#define WL_WSEC_INFO_VERSION 0x01
-/* start enum value for BSS properties */
+/** start enum value for BSS properties */
#define WL_WSEC_INFO_BSS_BASE 0x0100
-/* size of len and type fields of wl_wsec_info_tlv_t struct */
+/** size of len and type fields of wl_wsec_info_tlv_t struct */
#define WL_WSEC_INFO_TLV_HDR_LEN OFFSETOF(wl_wsec_info_tlv_t, data)
-/* Allowed wl_wsec_info properties; not all of them may be supported. */
+/** Allowed wl_wsec_info properties; not all of them may be supported. */
typedef enum {
WL_WSEC_INFO_NONE = 0,
WL_WSEC_INFO_MAX_KEYS = 1,
@@ -6962,68 +12728,425 @@
WL_WSEC_INFO_BSS_TX_KEY_ID = (WL_WSEC_INFO_BSS_BASE + 3),
WL_WSEC_INFO_BSS_ALGO = (WL_WSEC_INFO_BSS_BASE + 4),
WL_WSEC_INFO_BSS_KEY_LEN = (WL_WSEC_INFO_BSS_BASE + 5),
+ WL_WSEC_INFO_BSS_ALGOS = (WL_WSEC_INFO_BSS_BASE + 6),
/* add per-BSS properties above */
WL_WSEC_INFO_MAX = 0xffff
} wl_wsec_info_type_t;
-/* tlv used to return wl_wsec_info properties */
+typedef struct {
+ uint32 algos; /* set algos to be enabled/disabled */
+ uint32 mask; /* algos outside mask unaltered */
+} wl_wsec_info_algos_t;
+
+/** tlv used to return wl_wsec_info properties */
typedef struct {
uint16 type;
- uint16 len; /* data length */
- uint8 data[1]; /* data follows */
+ uint16 len; /**< data length */
+ uint8 data[1]; /**< data follows */
} wl_wsec_info_tlv_t;
-/* input/output data type for wsec_info iovar */
+/** input/output data type for wsec_info iovar */
typedef struct wl_wsec_info {
- uint8 version; /* structure version */
+ uint8 version; /**< structure version */
uint8 pad[2];
uint8 num_tlvs;
- wl_wsec_info_tlv_t tlvs[1]; /* tlv data follows */
+ wl_wsec_info_tlv_t tlvs[1]; /**< tlv data follows */
} wl_wsec_info_t;
+
+/*
+ * randmac definitions
+ */
+#define WL_RANDMAC_MODULE "randmac"
+#define WL_RANDMAC_API_VERSION 0x0100 /**< version 1.0 */
+#define WL_RANDMAC_API_MIN_VERSION 0x0100 /**< version 1.0 */
+
+/** subcommands that can apply to randmac */
+enum {
+ WL_RANDMAC_SUBCMD_NONE = 0,
+ WL_RANDMAC_SUBCMD_GET_VERSION = 1,
+ WL_RANDMAC_SUBCMD_ENABLE = 2,
+ WL_RANDMAC_SUBCMD_DISABLE = 3,
+ WL_RANDMAC_SUBCMD_CONFIG = 4,
+ WL_RANDMAC_SUBCMD_STATS = 5,
+ WL_RANDMAC_SUBCMD_CLEAR_STATS = 6,
+
+ WL_RANDMAC_SUBCMD_MAX
+};
+typedef int16 wl_randmac_subcmd_t;
+
+/* Common IOVAR struct */
+typedef struct wl_randmac {
+ uint16 version;
+ uint16 len; /* total length */
+ wl_randmac_subcmd_t subcmd_id; /* subcommand id */
+ uint8 data[0]; /* subcommand data */
+} wl_randmac_t;
+
+#define WL_RANDMAC_IOV_HDR_SIZE OFFSETOF(wl_randmac_t, data)
+
+/* randmac version subcommand */
+typedef struct wl_randmac_version {
+ uint16 version; /* Randmac method version info */
+ uint8 pad[2]; /* Align on 4 byte boundary */
+} wl_randmac_version_t;
+
+/*
+ * Bitmask for methods supporting MAC randomization feature
+ */
+#define WL_RANDMAC_USER_NONE 0x0000
+#define WL_RANDMAC_USER_FTM 0x0001
+#define WL_RANDMAC_USER_NAN 0x0002
+#define WL_RANDMAC_USER_SCAN 0x0004
+#define WL_RANDMAC_USER_ANQP 0x0008
+#define WL_RANDMAC_USER_ALL 0xFFFF
+typedef uint16 wl_randmac_method_t;
+
+enum {
+ WL_RANDMAC_FLAGS_NONE = 0x00,
+ WL_RANDMAC_FLAGS_ADDR = 0x01,
+ WL_RANDMAC_FLAGS_MASK = 0x02,
+ WL_RANDMAC_FLAGS_METHOD = 0x04,
+ WL_RANDMAC_FLAGS_ALL = 0xFF
+};
+typedef uint8 wl_randmac_flags_t;
+
+/* randmac statistics subcommand */
+typedef struct wl_randmac_stats {
+ uint32 set_ok; /* Set random addr success count */
+ uint32 set_fail; /* Set random addr failed count */
+ uint32 set_reqs; /* Set random addr count */
+ uint32 reset_reqs; /* Restore random addr count */
+ uint32 restore_ok; /* Restore random addr succes count */
+ uint32 restore_fail; /* Restore random addr failed count */
+ uint32 events_sent; /* randmac module events count */
+ uint32 events_rcvd; /* randmac events received count */
+} wl_randmac_stats_t;
+
+/* randmac config subcommand */
+typedef struct wl_randmac_config {
+ struct ether_addr addr; /* Randomized MAC address */
+ struct ether_addr addr_mask; /* bitmask for randomization */
+ wl_randmac_method_t method; /* Enabled methods */
+ wl_randmac_flags_t flags; /* What config info changed */
+ uint8 PAD;
+} wl_randmac_config_t;
+
+enum {
+ WL_RANDMAC_EVENT_NONE = 0, /**< not an event, reserved */
+ WL_RANDMAC_EVENT_BSSCFG_ADDR_SET = 1, /* bsscfg addr randomized */
+ WL_RANDMAC_EVENT_BSSCFG_ADDR_RESTORE = 2, /* bsscfg addr restored */
+ WL_RANDMAC_EVENT_ENABLED = 3, /* randmac module enabled */
+ WL_RANDMAC_EVENT_DISABLE = 4, /* randmac module disabled */
+ WL_RANDMAC_EVENT_BSSCFG_STATUS = 5, /* bsscfg enable/disable */
+
+ WL_RANDMAC_EVENT_MAX
+};
+typedef int16 wl_randmac_event_type_t;
+typedef int32 wl_randmac_status_t;
+typedef uint32 wl_randmac_event_mask_t;
+
+#define WL_RANDMAC_EVENT_MASK_ALL 0xfffffffe
+#define WL_RANDMAC_EVENT_MASK_EVENT(_event_type) (1 << (_event_type))
+#define WL_RANDMAC_EVENT_ENABLED(_mask, _event_type) (\
+ ((_mask) & WL_RANDMAC_EVENT_MASK_EVENT(_event_type)) != 0)
+
+/** tlv IDs - data length 4 bytes unless overridden by type, alignment 32 bits */
+enum {
+ WL_RANDMAC_TLV_NONE = 0,
+ WL_RANDMAC_TLV_METHOD = 1,
+ WL_RANDMAC_TLV_ADDR = 2,
+ WL_RANDMAC_TLV_MASK = 3
+};
+typedef uint16 wl_randmac_tlv_id_t;
+
+typedef struct wl_randmac_tlv {
+ wl_randmac_tlv_id_t id;
+ uint16 len; /* Length of variable */
+ uint8 data[1];
+} wl_randmac_tlv_t;
+
+/** randmac event */
+typedef struct wl_randmac_event {
+ uint16 version;
+ uint16 len; /* Length of all variables */
+ wl_randmac_event_type_t type;
+ wl_randmac_method_t method;
+ uint8 pad[2];
+ wl_randmac_tlv_t tlvs[1]; /**< variable */
+} wl_randmac_event_t;
/*
* scan MAC definitions
*/
-/* common iovar struct */
+/** common iovar struct */
typedef struct wl_scanmac {
- uint16 subcmd_id; /* subcommand id */
- uint16 len; /* total length of data[] */
- uint8 data[1]; /* subcommand data */
+ uint16 subcmd_id; /**< subcommand id */
+ uint16 len; /**< total length of data[] */
+ uint8 data[]; /**< subcommand data */
} wl_scanmac_t;
/* subcommand ids */
#define WL_SCANMAC_SUBCMD_ENABLE 0
-#define WL_SCANMAC_SUBCMD_BSSCFG 1 /* only GET supported */
+#define WL_SCANMAC_SUBCMD_BSSCFG 1 /**< only GET supported */
#define WL_SCANMAC_SUBCMD_CONFIG 2
-/* scanmac enable data struct */
+/** scanmac enable data struct */
typedef struct wl_scanmac_enable {
- uint8 enable; /* 1 - enable, 0 - disable */
- uint8 pad[3]; /* 4-byte struct alignment */
+ uint8 enable; /**< 1 - enable, 0 - disable */
+ uint8 pad[3]; /**< 4-byte struct alignment */
} wl_scanmac_enable_t;
-/* scanmac bsscfg data struct */
+/** scanmac bsscfg data struct */
typedef struct wl_scanmac_bsscfg {
- uint32 bsscfg; /* bsscfg index */
+ uint32 bsscfg; /**< bsscfg index */
} wl_scanmac_bsscfg_t;
-/* scanmac config data struct */
+/** scanmac config data struct */
typedef struct wl_scanmac_config {
- struct ether_addr mac; /* 6 bytes of MAC address or MAC prefix (i.e. OUI) */
- struct ether_addr random_mask; /* randomized bits on each scan */
- uint16 scan_bitmap; /* scans to use this MAC address */
- uint8 pad[2]; /* 4-byte struct alignment */
+ struct ether_addr mac; /**< 6 bytes of MAC address or MAC prefix (i.e. OUI) */
+ struct ether_addr random_mask; /**< randomized bits on each scan */
+ uint16 scan_bitmap; /**< scans to use this MAC address */
+ uint8 pad[2]; /**< 4-byte struct alignment */
} wl_scanmac_config_t;
/* scan bitmap */
-#define WL_SCANMAC_SCAN_UNASSOC (0x01 << 0) /* unassociated scans */
-#define WL_SCANMAC_SCAN_ASSOC_ROAM (0x01 << 1) /* associated roam scans */
-#define WL_SCANMAC_SCAN_ASSOC_PNO (0x01 << 2) /* associated PNO scans */
-#define WL_SCANMAC_SCAN_ASSOC_HOST (0x01 << 3) /* associated host scans */
+#define WL_SCANMAC_SCAN_UNASSOC (0x01 << 0) /**< unassociated scans */
+#define WL_SCANMAC_SCAN_ASSOC_ROAM (0x01 << 1) /**< associated roam scans */
+#define WL_SCANMAC_SCAN_ASSOC_PNO (0x01 << 2) /**< associated PNO scans */
+#define WL_SCANMAC_SCAN_ASSOC_HOST (0x01 << 3) /**< associated host scans */
-/* no default structure packing */
-#include <packed_section_end.h>
+#define WL_SCAN_EVENT_VERSION 1
+
+#define WL_SCAN_TYPE_ASSOC 0x1 /* Assoc scan */
+#define WL_SCAN_TYPE_ROAM 0x2 /* Roam scan */
+#define WL_SCAN_TYPE_FWSCAN 0x4 /* Other FW scan */
+#define WL_SCAN_TYPE_HOSTSCAN 0x8 /* Host scan */
+
+typedef struct scan_event_data {
+ uint32 version;
+ uint32 flags;
+ uint16 num_chan_slice0;
+ uint16 num_chan_slice1;
+ /* Will contain num_chan_slice0 followed by num_chan_slice1 chanspecs */
+ chanspec_t scan_chan_list[];
+} scan_event_data_t;
+
+/*
+ * bonjour dongle offload definitions
+ */
+
+/* common iovar struct */
+typedef struct wl_bdo {
+ uint16 subcmd_id; /* subcommand id */
+ uint16 len; /* total length of data[] */
+ uint8 data[]; /* subcommand data */
+} wl_bdo_t;
+
+/* subcommand ids */
+#define WL_BDO_SUBCMD_DOWNLOAD 0 /* Download flattened database */
+#define WL_BDO_SUBCMD_ENABLE 1 /* Start bonjour after download */
+#define WL_BDO_SUBCMD_MAX_DOWNLOAD 2 /* Get the max download size */
+
+/* maximum fragment size */
+#define BDO_MAX_FRAGMENT_SIZE 1024
+
+/* download flattened database
+ *
+ * BDO must be disabled before database download else fail.
+ *
+ * If database size is within BDO_MAX_FRAGMENT_SIZE then only a single fragment
+ * is required (i.e. frag_num = 0, total_size = frag_size).
+ * If database size exceeds BDO_MAX_FRAGMENT_SIZE then multiple fragments are required.
+ */
+typedef struct wl_bdo_download {
+ uint16 total_size; /* total database size */
+ uint16 frag_num; /* fragment number, 0 for first fragment, N-1 for last fragment */
+ uint16 frag_size; /* size of fragment (max BDO_MAX_FRAGMENT_SIZE) */
+ uint8 pad[2]; /* 4-byte struct alignment */
+ uint8 fragment[BDO_MAX_FRAGMENT_SIZE]; /* fragment data */
+} wl_bdo_download_t;
+
+/* enable
+ *
+ * Enable requires a downloaded database else fail.
+ */
+typedef struct wl_bdo_enable {
+ uint8 enable; /* 1 - enable, 0 - disable */
+ uint8 pad[3]; /* 4-byte struct alignment */
+} wl_bdo_enable_t;
+
+/*
+ * Get the max download size for Bonjour Offload.
+ */
+typedef struct wl_bdo_max_download {
+ uint16 size; /* Max download size in bytes */
+ uint8 pad[2]; /* 4-byte struct alignment */
+} wl_bdo_max_download_t;
+
+/*
+ * TCP keepalive offload definitions
+ */
+
+/* common iovar struct */
+typedef struct wl_tko {
+ uint16 subcmd_id; /* subcommand id */
+ uint16 len; /* total length of data[] */
+ uint8 data[]; /* subcommand data */
+} wl_tko_t;
+
+/* subcommand ids */
+#define WL_TKO_SUBCMD_MAX_TCP 0 /* max TCP connections supported */
+#define WL_TKO_SUBCMD_PARAM 1 /* configure offload common parameters */
+#define WL_TKO_SUBCMD_CONNECT 2 /* TCP connection info */
+#define WL_TKO_SUBCMD_ENABLE 3 /* enable/disable */
+#define WL_TKO_SUBCMD_STATUS 4 /* TCP connection status */
+#define WL_TKO_SUBCMD_RST 5 /* TCP wake RST frame release request */
+
+/** Delay to retain a TCP RST frame on a monitored TCP session
+ * before toggling the wake GPIO (in sec).
+ */
+typedef enum tko_rst_wake_delay {
+ /** No delay, no RST frame retention */
+ TKO_RST_WAKE_DELAY_DISABLED = -2,
+ /** Infinite delay. No timeout */
+ TKO_RST_WAKE_DELAY_INFINITY = -1,
+ /* 0 - 3600 sec are valid */
+ TKO_RST_WAKE_DELAY_MAX = 3600
+} tko_rst_wake_delay_t;
+
+/* WL_TKO_SUBCMD_MAX_CONNECT subcommand data */
+typedef struct wl_tko_max_tcp {
+ uint8 max; /* max TCP connections supported */
+ uint8 pad[3]; /* 4-byte struct alignment */
+} wl_tko_max_tcp_t;
+
+/* WL_TKO_SUBCMD_PARAM subcommand data */
+typedef struct wl_tko_param {
+ uint16 interval; /* keepalive tx interval (secs) */
+ uint16 retry_interval; /* keepalive retry interval (secs) */
+ uint16 retry_count; /* retry_count */
+ int16 rst_delay; /* delay to delay a RST frame from reaching the host */
+} wl_tko_param_t;
+
+/* WL_TKO_SUBCMD_CONNECT subcommand data
+ * invoke with unique 'index' for each TCP connection
+ */
+typedef struct wl_tko_connect {
+ uint8 index; /* TCP connection index, 0 to max-1 */
+ uint8 ip_addr_type; /* 0 - IPv4, 1 - IPv6 */
+ uint16 local_port; /* local port */
+ uint16 remote_port; /* remote port */
+ uint16 PAD;
+ uint32 local_seq; /* local sequence number */
+ uint32 remote_seq; /* remote sequence number */
+ uint16 request_len; /* TCP keepalive request packet length */
+ uint16 response_len; /* TCP keepalive response packet length */
+ uint8 data[]; /* variable length field containing local/remote IPv4/IPv6,
+ * TCP keepalive request packet, TCP keepalive response packet
+ * For IPv4, length is 4 * 2 + request_length + response_length
+ * offset 0 - local IPv4
+ * offset 4 - remote IPv4
+ * offset 8 - TCP keepalive request packet
+ * offset 8+request_length - TCP keepalive response packet
+ * For IPv6, length is 16 * 2 + request_length + response_length
+ * offset 0 - local IPv6
+ * offset 16 - remote IPv6
+ * offset 32 - TCP keepalive request packet
+ * offset 32+request_length - TCP keepalive response packet
+ */
+} wl_tko_connect_t;
+
+/* WL_TKO_SUBCMD_CONNECT subcommand data to GET configured info for specific index */
+typedef struct wl_tko_get_connect {
+ uint8 index; /* TCP connection index, 0 to max-1 */
+ uint8 pad[3]; /* 4-byte struct alignment */
+} wl_tko_get_connect_t;
+
+typedef struct wl_tko_enable {
+ uint8 enable; /* 1 - enable, 0 - disable */
+ uint8 pad[3]; /* 4-byte struct alignment */
+} wl_tko_enable_t;
+
+/* WL_TKO_SUBCMD_STATUS subcommand data */
+/* must be invoked before tko is disabled else status is unavailable */
+typedef struct wl_tko_status {
+ uint8 count; /* number of status entries (i.e. equals
+ * max TCP connections supported)
+ */
+ uint8 status[1]; /* variable length field contain status for
+ * each TCP connection index
+ */
+} wl_tko_status_t;
+
+/* TKO_STATUS_TCP_RST subcommand data */
+typedef struct wl_tko_get_reset {
+ uint8 index; /**< TCP connection index, 0 to max-1 */
+ uint8 clear_only; /**< 1 to clear the RST frame without sending it up to the host */
+ uint8 pad[2]; /**< 4-bytes structure alignment */
+} wl_tko_get_reset_t;
+
+typedef enum {
+ TKO_STATUS_NORMAL = 0, /* TCP connection normal, no error */
+ TKO_STATUS_NO_RESPONSE = 1, /* no response to TCP keepalive */
+ TKO_STATUS_NO_TCP_ACK_FLAG = 2, /* TCP ACK flag not set */
+ TKO_STATUS_UNEXPECT_TCP_FLAG = 3, /* unexpect TCP flags set other than ACK */
+ TKO_STATUS_SEQ_NUM_INVALID = 4, /* ACK != sequence number */
+ TKO_STATUS_REMOTE_SEQ_NUM_INVALID = 5, /* SEQ > remote sequence number */
+ TKO_STATUS_TCP_DATA = 6, /* TCP data available */
+ TKO_STATUS_TCP_RST = 7, /* TCP RST flag received */
+ TKO_STATUS_UNAVAILABLE = 255, /* not used/configured */
+} tko_status_t;
+
+/*
+ * DHCP lease time renew offload definitions
+ */
+
+/* Common iovar struct */
+typedef struct wl_dltro {
+ uint8 subcmd_id; /* Subcommand id */
+ uint8 pad;
+ uint16 len; /* Total length of data[] */
+ uint8 data[1]; /* Subcommand data */
+} wl_dltro_t;
+
+/* Subcommand ids */
+#define WL_DLTRO_SUBCMD_CONNECT 0 /* DLTRO connection info */
+#define WL_DLTRO_SUBCMD_PARAM 1 /* DLTRO parameter info */
+#define WL_DLTRO_SUBCMD_MAX_DLTRO 2 /* Max DLTRO supported */
+
+/* WL_DLTRO_SUBCMD_CONNECT subcommand data
+ * Invoke with unique 'index' for each DLTRO connection
+ */
+typedef struct wl_dltro_connect {
+ uint8 index; /* DLTRO connection index, 0 to max-1 */
+ uint8 ip_addr_type; /* 0 - IPv4, 1 - IPv6 */
+ uint8 offload_type; /* 0 - Client, 1 - Server */
+ uint8 pad;
+ uint32 tid; /* Transaction id */
+ uint32 timer_val; /* DHCP lease time remaining in seconds */
+ uint32 time_before_expiry; /* Time before expiry for DHCP lease renewal in seconds */
+ uint32 len; /* Length of the variable data */
+ uint8 data[1]; /* Variable length field containing DLTRO packet */
+} wl_dltro_connect_t;
+
+/* WL_DLTRO_SUBCMD_PARAM subcommand data
+ * Invoke with unique 'index' for each DLTRO connection
+ */
+typedef struct wl_dltro_param {
+ uint8 index; /* DLTRO connection index, 0 to max-1 */
+ uint8 retry; /* Number of retries */
+} wl_dltro_param_t;
+
+/* WL_DLTRO_SUBCMD_MAX_DLTRO subcommand data */
+typedef struct wl_dltro_max_dltro {
+ uint8 max; /* Max DLTRO supported */
+} wl_dltro_max_dltro_t;
+
+/* WL_DLTRO_SUBCMD_PARAM subcommand data to GET configured info for specific index */
+typedef struct wl_dltro_get_param {
+ uint8 index; /* DLTRO connection index, 0 to max-1 */
+} wl_dltro_get_param_t;
enum rssi_reason {
RSSI_REASON_UNKNOW = 0,
@@ -7083,7 +13206,7 @@
TOF_FRAME_RATE_LEGACY = 1
};
-#define TOF_ADJ_TYPE_NUM 4 /* number of assisted timestamp adjustment */
+#define TOF_ADJ_TYPE_NUM 4 /**< number of assisted timestamp adjustment */
enum tof_adj_mode {
TOF_ADJ_SOFTWARE = 0,
TOF_ADJ_HARDWARE = 1,
@@ -7091,7 +13214,7 @@
TOF_ADJ_NONE = 3
};
-#define FRAME_TYPE_NUM 4 /* number of frame type */
+#define FRAME_TYPE_NUM 4 /**< number of frame type */
enum frame_type {
FRAME_TYPE_CCK = 0,
FRAME_TYPE_OFDM = 1,
@@ -7100,28 +13223,30 @@
};
typedef struct wl_proxd_status_iovar {
- uint16 method; /* method */
- uint8 mode; /* mode */
- uint8 peermode; /* peer mode */
- uint8 state; /* state */
- uint8 reason; /* reason code */
- uint32 distance; /* distance */
- uint32 txcnt; /* tx pkt counter */
- uint32 rxcnt; /* rx pkt counter */
- struct ether_addr peer; /* peer mac address */
- int8 avg_rssi; /* average rssi */
- int8 hi_rssi; /* highest rssi */
- int8 low_rssi; /* lowest rssi */
- uint32 dbgstatus; /* debug status */
- uint16 frame_type_cnt[FRAME_TYPE_NUM]; /* frame types */
- uint8 adj_type_cnt[TOF_ADJ_TYPE_NUM]; /* adj types HW/SW */
+ uint16 method; /**< method */
+ uint8 mode; /**< mode */
+ uint8 peermode; /**< peer mode */
+ uint8 state; /**< state */
+ uint8 reason; /**< reason code */
+ uint8 PAD[2];
+ uint32 distance; /**< distance */
+ uint32 txcnt; /**< tx pkt counter */
+ uint32 rxcnt; /**< rx pkt counter */
+ struct ether_addr peer; /**< peer mac address */
+ int8 avg_rssi; /**< average rssi */
+ int8 hi_rssi; /**< highest rssi */
+ int8 low_rssi; /**< lowest rssi */
+ uint8 PAD[3];
+ uint32 dbgstatus; /**< debug status */
+ uint16 frame_type_cnt[FRAME_TYPE_NUM]; /**< frame types */
+ uint8 adj_type_cnt[TOF_ADJ_TYPE_NUM]; /**< adj types HW/SW */
} wl_proxd_status_iovar_t;
-#ifdef NET_DETECT
+/* ifdef NET_DETECT */
typedef struct net_detect_adapter_features {
- bool wowl_enabled;
- bool net_detect_enabled;
- bool nlo_enabled;
+ uint8 wowl_enabled;
+ uint8 net_detect_enabled;
+ uint8 nlo_enabled;
} net_detect_adapter_features_t;
typedef enum net_detect_bss_type {
@@ -7132,22 +13257,24 @@
typedef struct net_detect_profile {
wlc_ssid_t ssid;
- net_detect_bss_type_t bss_type; /* Ignore for now since Phase 1 is only for ESS */
- uint32 cipher_type; /* DOT11_CIPHER_ALGORITHM enumeration values */
- uint32 auth_type; /* DOT11_AUTH_ALGORITHM enumeration values */
+ net_detect_bss_type_t bss_type; /**< Ignore for now since Phase 1 is only for ESS */
+ uint32 cipher_type; /**< DOT11_CIPHER_ALGORITHM enumeration values */
+ uint32 auth_type; /**< DOT11_AUTH_ALGORITHM enumeration values */
} net_detect_profile_t;
typedef struct net_detect_profile_list {
uint32 num_nd_profiles;
- net_detect_profile_t nd_profile[0];
+ net_detect_profile_t nd_profile[];
} net_detect_profile_list_t;
typedef struct net_detect_config {
- bool nd_enabled;
+ uint8 nd_enabled;
+ uint8 PAD[3];
uint32 scan_interval;
uint32 wait_period;
- bool wake_if_connected;
- bool wake_if_disconnected;
+ uint8 wake_if_connected;
+ uint8 wake_if_disconnected;
+ uint8 PAD[2];
net_detect_profile_list_t nd_profile_list;
} net_detect_config_t;
@@ -7161,20 +13288,22 @@
typedef struct net_detect_wake_data {
net_detect_wake_reason_t nd_wake_reason;
uint32 nd_wake_date_length;
- uint8 nd_wake_data[0]; /* Wake data (currently unused) */
+ uint8 nd_wake_data[0]; /**< Wake data (currently unused) */
} net_detect_wake_data_t;
-#endif /* NET_DETECT */
+/* endif NET_DETECT */
/* (unversioned, deprecated) */
typedef struct bcnreq {
uint8 bcn_mode;
- int dur;
- int channel;
+ uint8 PAD[3];
+ int32 dur;
+ int32 channel;
struct ether_addr da;
uint16 random_int;
wlc_ssid_t ssid;
uint16 reps;
+ uint8 PAD[2];
} bcnreq_t;
#define WL_RRM_BCN_REQ_VER 1
@@ -7192,6 +13321,34 @@
uint8 pad_2;
chanspec_list_t chspec_list;
} bcn_req_t;
+
+#define WL_RRM_BCN_REQ_VER_2 2
+typedef struct bcn_req_v2 {
+ uint8 version;
+ uint8 bcn_mode;
+ uint8 pad_1[2];
+ int32 dur;
+ int32 channel;
+ struct ether_addr da;
+ uint16 random_int;
+ wlc_ssid_t ssid;
+ uint16 reps;
+ uint8 req_elements;
+ uint8 pad_2;
+ struct ether_addr bssid;
+ uint8 pad_3[2];
+ chanspec_list_t chspec_list;
+} bcn_req_v2_t;
+
+#define WL_RRM_BCN_REQ_MIN_PARAMS 8
+#define WL_RRM_BCN_REQ_PARAM_INC_SSID 8
+#define WL_RRM_BCN_REQ_PARAM_INC_CHANS 9
+enum {
+ WL_RRM_BCN_MODE_PASSIVE = 0, /* passive mode */
+ WL_RRM_BCN_MODE_ACTIVE = 1, /* active mode */
+ WL_RRM_BCN_MODE_TABLE = 2, /* beacon table */
+ WL_RRM_BCN_MODE_MAX_VALUE = 2
+};
typedef struct rrmreq {
struct ether_addr da;
@@ -7218,8 +13375,143 @@
uint16 random_int;
uint16 dur;
uint8 group_id;
+ uint8 PAD;
uint16 reps;
} statreq_t;
+
+typedef struct txstrmreq {
+ struct ether_addr da; /* Destination address */
+ uint16 random_int; /* Random interval for measurement start */
+ uint16 dur; /* Measurement duration */
+ uint16 reps; /* number of repetitions */
+ struct ether_addr peer; /* Peer MAC address */
+ uint8 tid; /* Traffic ID */
+ uint8 bin0_range; /* Delay range of the first bin */
+} txstrmreq_t;
+
+typedef struct lcireq {
+ struct ether_addr da; /* Destination address */
+ uint16 reps; /* number of repetitions */
+ uint8 subj; /* Local/Remote/Thid party */
+ uint8 lat_res; /* Latitude requested Resolution */
+ uint8 lon_res; /* Longitude requested Resolution */
+ uint8 alt_res; /* Altitude requested Resolution */
+} lcireq_t;
+
+typedef struct civicreq {
+ struct ether_addr da; /* Destination address */
+ uint16 reps; /* number of repetitions */
+ uint8 subj; /* Local/Remote/Thid party */
+ uint8 civloc_type; /* Format of location info */
+ uint8 siu; /* Unit of Location service interval */
+ uint8 pad;
+ uint16 si; /* Location service interval */
+} civicreq_t;
+
+typedef struct locidreq {
+ struct ether_addr da; /* Destination address */
+ uint16 reps; /* number of repetitions */
+ uint8 subj; /* Local/Remote/Thid party */
+ uint8 siu; /* Unit of Location service interval */
+ uint16 si; /* Location service interval */
+} locidreq_t;
+
+typedef struct wl_rrm_config_ioc {
+ uint16 version; /* command version */
+ uint16 id; /* subiovar cmd ID */
+ uint16 len; /* total length of all bytes in data[] */
+ uint16 pad; /* 4-byte boundary padding */
+ uint8 data[1]; /* payload */
+} wl_rrm_config_ioc_t;
+
+enum {
+ WL_RRM_CONFIG_NONE = 0, /* reserved */
+ WL_RRM_CONFIG_GET_LCI = 1, /* get LCI */
+ WL_RRM_CONFIG_SET_LCI = 2, /* set LCI */
+ WL_RRM_CONFIG_GET_CIVIC = 3, /* get civic location */
+ WL_RRM_CONFIG_SET_CIVIC = 4, /* set civic location */
+ WL_RRM_CONFIG_GET_LOCID = 5, /* get location identifier */
+ WL_RRM_CONFIG_SET_LOCID = 6, /* set location identifier */
+ WL_RRM_CONFIG_MAX = 7
+};
+
+#define WL_RRM_CONFIG_NAME "rrm_config"
+#define WL_RRM_CONFIG_MIN_LENGTH OFFSETOF(wl_rrm_config_ioc_t, data)
+
+enum {
+ WL_RRM_EVENT_NONE = 0, /* not an event, reserved */
+ WL_RRM_EVENT_FRNG_REQ = 1, /* Receipt of FRNG request frame */
+ WL_RRM_EVENT_FRNG_REP = 2, /* Receipt of FRNG report frame */
+
+ WL_RRM_EVENT_MAX
+};
+typedef int16 wl_rrm_event_type_t;
+
+typedef struct frngreq_target {
+ uint32 bssid_info;
+ uint8 channel;
+ uint8 phytype;
+ uint8 reg;
+ uint8 pad;
+ struct ether_addr bssid;
+ chanspec_t chanspec;
+ uint32 sid;
+} frngreq_target_t;
+
+typedef struct frngreq {
+ wl_rrm_event_type_t event; /* RRM event type */
+ struct ether_addr da;
+ uint16 max_init_delay; /* Upper bound of random delay, in TUs */
+ uint8 min_ap_count; /* Min FTM ranges requested (1-15) */
+ uint8 num_aps; /* Number of APs to range, at least min_ap_count */
+ uint16 max_age; /* Max elapsed time before FTM request, 0xFFFF = any */
+ uint16 reps; /* Number of repetitions of this measurement type */
+ frngreq_target_t targets[1]; /* Target BSSIDs to range */
+} frngreq_t;
+
+typedef struct frngrep_range {
+ uint32 start_tsf; /* 4 lsb of tsf */
+ struct ether_addr bssid;
+ uint8 pad[2];
+ uint32 range;
+ uint32 max_err;
+ uint8 rsvd;
+ uint8 pad2[3];
+} frngrep_range_t;
+
+typedef struct frngrep_error {
+ uint32 start_tsf; /* 4 lsb of tsf */
+ struct ether_addr bssid;
+ uint8 code;
+ uint8 pad[1];
+} frngrep_error_t;
+
+typedef struct frngrep {
+ wl_rrm_event_type_t event; /* RRM event type */
+ struct ether_addr da;
+ uint8 range_entry_count;
+ uint8 error_entry_count;
+ uint16 dialog_token; /* dialog token */
+ frngrep_range_t range_entries[DOT11_FTM_RANGE_ENTRY_MAX_COUNT];
+ frngrep_error_t error_entries[DOT11_FTM_RANGE_ERROR_ENTRY_MAX_COUNT];
+} frngrep_t;
+
+typedef struct wl_rrm_frng_ioc {
+ uint16 version; /* command version */
+ uint16 id; /* subiovar cmd ID */
+ uint16 len; /* total length of all bytes in data[] */
+ uint16 pad; /* 4-byte boundary padding */
+ uint8 data[]; /* payload */
+} wl_rrm_frng_ioc_t;
+
+enum {
+ WL_RRM_FRNG_NONE = 0, /* reserved */
+ WL_RRM_FRNG_SET_REQ = 1, /* send ftm ranging request */
+ WL_RRM_FRNG_MAX = 2
+};
+
+#define WL_RRM_FRNG_NAME "rrm_frng"
+#define WL_RRM_FRNG_MIN_LENGTH OFFSETOF(wl_rrm_frng_ioc_t, data)
#define WL_RRM_RPT_VER 0
#define WL_RRM_RPT_MAX_PAYLOAD 256
@@ -7228,29 +13520,25 @@
#define WL_RRM_RPT_FALG_GRP_ID_PROPR (1 << 0)
#define WL_RRM_RPT_FALG_GRP_ID_0 (1 << 1)
typedef struct {
- uint16 ver; /* version */
- struct ether_addr addr; /* STA MAC addr */
- uint32 timestamp; /* timestamp of the report */
- uint16 flag; /* flag */
- uint16 len; /* length of payload data */
- unsigned char data[WL_RRM_RPT_MAX_PAYLOAD];
+ uint16 ver; /**< version */
+ struct ether_addr addr; /**< STA MAC addr */
+ uint32 timestamp; /**< timestamp of the report */
+ uint16 flag; /**< flag */
+ uint16 len; /**< length of payload data */
+ uint8 data[WL_RRM_RPT_MAX_PAYLOAD];
} statrpt_t;
-
-typedef struct wlc_l2keepalive_ol_params {
- uint8 flags;
- uint8 prio;
- uint16 period_ms;
-} wlc_l2keepalive_ol_params_t;
typedef struct wlc_dwds_config {
uint32 enable;
- uint32 mode; /* STA/AP interface */
+ uint32 mode; /**< STA/AP interface */
struct ether_addr ea;
+ uint8 PAD[2];
} wlc_dwds_config_t;
typedef struct wl_el_set_params_s {
- uint8 set; /* Set number */
- uint32 size; /* Size to make/expand */
+ uint8 set; /**< Set number */
+ uint8 PAD[3];
+ uint32 size; /**< Size to make/expand */
} wl_el_set_params_t;
typedef struct wl_el_tag_params_s {
@@ -7259,20 +13547,33 @@
uint8 flags;
} wl_el_tag_params_t;
-/* Video Traffic Interference Monitor config */
+/** Video Traffic Interference Monitor config */
#define INTFER_VERSION 1
typedef struct wl_intfer_params {
- uint16 version; /* version */
- uint8 period; /* sample period */
- uint8 cnt; /* sample cnt */
- uint8 txfail_thresh; /* non-TCP txfail threshold */
- uint8 tcptxfail_thresh; /* tcptxfail threshold */
+ uint16 version; /**< version */
+ uint8 period; /**< sample period */
+ uint8 cnt; /**< sample cnt */
+ uint8 txfail_thresh; /**< non-TCP txfail threshold */
+ uint8 tcptxfail_thresh; /**< tcptxfail threshold */
} wl_intfer_params_t;
+#define EVENT_LOG_SET_TYPE_CURRENT_VERSION 0
+typedef struct wl_el_set_type_s {
+ uint16 version;
+ uint16 len;
+ uint8 set; /* Set number */
+ uint8 type; /* Type- EVENT_LOG_SET_TYPE_DEFAULT or EVENT_LOG_SET_TYPE_PRSRV */
+ uint16 PAD;
+} wl_el_set_type_t;
+
typedef struct wl_staprio_cfg {
- struct ether_addr ea; /* mac addr */
- uint8 prio; /* scb priority */
+ struct ether_addr ea; /**< mac addr */
+ uint8 prio; /**< scb priority */
} wl_staprio_cfg_t;
+
+#define STAMON_STACONFIG_VER 1
+/* size of struct wlc_stamon_sta_config_t elements */
+#define STAMON_STACONFIG_LENGTH 20
typedef enum wl_stamon_cfg_cmd_type {
STAMON_CFG_CMD_DEL = 0,
@@ -7280,15 +13581,22 @@
STAMON_CFG_CMD_ENB = 2,
STAMON_CFG_CMD_DSB = 3,
STAMON_CFG_CMD_CNT = 4,
- STAMON_CFG_CMD_RSTCNT = 5
+ STAMON_CFG_CMD_RSTCNT = 5,
+ STAMON_CFG_CMD_GET_STATS = 6,
+ STAMON_CFG_CMD_SET_MONTIME = 7
} wl_stamon_cfg_cmd_type_t;
typedef struct wlc_stamon_sta_config {
- wl_stamon_cfg_cmd_type_t cmd; /* 0 - delete, 1 - add */
+ wl_stamon_cfg_cmd_type_t cmd; /**< 0 - delete, 1 - add */
struct ether_addr ea;
+ uint16 version; /* Command structure version */
+ uint16 length; /* Command structure length */
+ uint8 pad[2];
+ /* Time (ms) for which STA's are monitored. Value ZERO indicates no time limit */
+ uint32 monitor_time;
} wlc_stamon_sta_config_t;
-#ifdef SR_DEBUG
+/* ifdef SR_DEBUG */
typedef struct /* pmu_reg */{
uint32 pmu_control;
uint32 pmu_capabilities;
@@ -7304,238 +13612,318 @@
uint32 pmu_rsrc_up_down_timer[31];
uint32 rsrc_dep_mask[31];
} pmu_reg_t;
-#endif /* pmu_reg */
+/* endif SR_DEBUG */
typedef struct wl_taf_define {
- struct ether_addr ea; /* STA MAC or 0xFF... */
- uint16 version; /* version */
- uint32 sch; /* method index */
- uint32 prio; /* priority */
- uint32 misc; /* used for return value */
- char text[1]; /* used to pass and return ascii text */
+ struct ether_addr ea; /**< STA MAC or 0xFF... */
+ uint16 version; /**< version */
+ uint32 sch; /**< method index */
+ uint32 prio; /**< priority */
+ uint32 misc; /**< used for return value */
+ uint8 text[]; /**< used to pass and return ascii text */
} wl_taf_define_t;
-/* Received Beacons lengths information */
+/** Received Beacons lengths information */
#define WL_LAST_BCNS_INFO_FIXED_LEN OFFSETOF(wlc_bcn_len_hist_t, bcnlen_ring)
typedef struct wlc_bcn_len_hist {
- uint16 ver; /* version field */
- uint16 cur_index; /* current pointed index in ring buffer */
- uint32 max_bcnlen; /* Max beacon length received */
- uint32 min_bcnlen; /* Min beacon length received */
- uint32 ringbuff_len; /* Length of the ring buffer 'bcnlen_ring' */
- uint32 bcnlen_ring[1]; /* ring buffer storing received beacon lengths */
+ uint16 ver; /**< version field */
+ uint16 cur_index; /**< current pointed index in ring buffer */
+ uint32 max_bcnlen; /**< Max beacon length received */
+ uint32 min_bcnlen; /**< Min beacon length received */
+ uint32 ringbuff_len; /**< Length of the ring buffer 'bcnlen_ring' */
+ uint32 bcnlen_ring[1]; /**< ring buffer storing received beacon lengths */
} wlc_bcn_len_hist_t;
/* WDS net interface types */
-#define WL_WDSIFTYPE_NONE 0x0 /* The interface type is neither WDS nor DWDS. */
-#define WL_WDSIFTYPE_WDS 0x1 /* The interface is WDS type. */
-#define WL_WDSIFTYPE_DWDS 0x2 /* The interface is DWDS type. */
+#define WL_WDSIFTYPE_NONE 0x0 /**< The interface type is neither WDS nor DWDS. */
+#define WL_WDSIFTYPE_WDS 0x1 /**< The interface is WDS type. */
+#define WL_WDSIFTYPE_DWDS 0x2 /**< The interface is DWDS type. */
typedef struct wl_bssload_static {
- bool is_static;
+ uint8 is_static;
+ uint8 PAD;
uint16 sta_count;
uint8 chan_util;
+ uint8 PAD;
uint16 aac;
} wl_bssload_static_t;
+/* Buffer of size WLC_SAMPLECOLLECT_MAXLEN (=10240 for 4345a0 ACPHY)
+ * gets copied to this, multiple times
+ */
+typedef enum wl_gpaio_option {
+ GPAIO_PMU_AFELDO,
+ GPAIO_PMU_TXLDO,
+ GPAIO_PMU_VCOLDO,
+ GPAIO_PMU_LNALDO,
+ GPAIO_PMU_ADCLDO,
+ GPAIO_ICTAT_CAL,
+ GPAIO_PMU_CLEAR,
+ GPAIO_OFF,
+ GPAIO_PMU_LOGENLDO,
+ GPAIO_PMU_RXLDO2G,
+ GPAIO_PMU_RXLDO5G,
+ GPAIO_PMU_LPFTXLDO,
+ GPAIO_PMU_LDO1P6,
+ GPAIO_RCAL,
+ GPAIO_IQDAC_BUF_DC_MEAS,
+ GPAIO_IQDAC_BUF_DC_CLEAR,
+ GPAIO_DAC_IQ_DC_RDBK,
+ GPAIO_DAC_IQ_DC_RDBK_CLEAR,
+ GPAIO_AFE_LDO_FOR_DAC_DC,
+ GPAIO_PA5G_VCAS_SOURCE,
+ GPAIO_BIQ2_DC_MEAS,
+ GPAIO_BIQ2_DC_CLEAR,
+ GPAIO_LDO_1P8_OUT
+} wl_gpaio_option_t;
-/* IO Var Operations - the Value of iov_op In wlc_ap_doiovar */
-typedef enum wlc_ap_iov_operation {
+/** IO Var Operations - the Value of iov_op In wlc_ap_doiovar */
+typedef enum wlc_ap_iov_bss_operation {
WLC_AP_IOV_OP_DELETE = -1,
WLC_AP_IOV_OP_DISABLE = 0,
WLC_AP_IOV_OP_ENABLE = 1,
- WLC_AP_IOV_OP_MANUAL_AP_BSSCFG_CREATE = 2,
- WLC_AP_IOV_OP_MANUAL_STA_BSSCFG_CREATE = 3,
+ WLC_AP_IOV_OP_MANUAL_STA_BSSCFG_CREATE = 2,
+ WLC_AP_IOV_OP_MANUAL_AP_BSSCFG_CREATE = 3,
WLC_AP_IOV_OP_MOVE = 4
-} wlc_ap_iov_oper_t;
+} wlc_ap_iov_bss_oper_t;
/* LTE coex info */
/* Analogue of HCI Set MWS Signaling cmd */
typedef struct {
- uint16 mws_rx_assert_offset;
- uint16 mws_rx_assert_jitter;
- uint16 mws_rx_deassert_offset;
- uint16 mws_rx_deassert_jitter;
- uint16 mws_tx_assert_offset;
- uint16 mws_tx_assert_jitter;
- uint16 mws_tx_deassert_offset;
- uint16 mws_tx_deassert_jitter;
- uint16 mws_pattern_assert_offset;
- uint16 mws_pattern_assert_jitter;
- uint16 mws_inact_dur_assert_offset;
- uint16 mws_inact_dur_assert_jitter;
- uint16 mws_scan_freq_assert_offset;
- uint16 mws_scan_freq_assert_jitter;
- uint16 mws_prio_assert_offset_req;
+ int16 mws_rx_assert_offset;
+ int16 mws_rx_assert_jitter;
+ int16 mws_rx_deassert_offset;
+ int16 mws_rx_deassert_jitter;
+ int16 mws_tx_assert_offset;
+ int16 mws_tx_assert_jitter;
+ int16 mws_tx_deassert_offset;
+ int16 mws_tx_deassert_jitter;
+ int16 mws_pattern_assert_offset;
+ int16 mws_pattern_assert_jitter;
+ int16 mws_inact_dur_assert_offset;
+ int16 mws_inact_dur_assert_jitter;
+ int16 mws_scan_freq_assert_offset;
+ int16 mws_scan_freq_assert_jitter;
+ int16 mws_prio_assert_offset_req;
} wci2_config_t;
-/* Analogue of HCI MWS Channel Params */
+/** Analogue of HCI MWS Channel Params */
typedef struct {
- uint16 mws_rx_center_freq; /* MHz */
+ uint16 mws_rx_center_freq; /**< MHz */
uint16 mws_tx_center_freq;
- uint16 mws_rx_channel_bw; /* KHz */
+ uint16 mws_rx_channel_bw; /**< KHz */
uint16 mws_tx_channel_bw;
uint8 mws_channel_en;
- uint8 mws_channel_type; /* Don't care for WLAN? */
+ uint8 mws_channel_type; /**< Don't care for WLAN? */
} mws_params_t;
-/* MWS wci2 message */
+#define LTECX_MAX_NUM_PERIOD_TYPES 7
+
+/* LTE Frame params */
typedef struct {
- uint8 mws_wci2_data; /* BT-SIG msg */
- uint16 mws_wci2_interval; /* Interval in us */
- uint16 mws_wci2_repeat; /* No of msgs to send */
+ uint16 mws_frame_dur;
+ int16 mws_framesync_assert_offset;
+ uint16 mws_framesync_assert_jitter;
+ uint16 mws_period_dur[LTECX_MAX_NUM_PERIOD_TYPES];
+ uint8 mws_period_type[LTECX_MAX_NUM_PERIOD_TYPES];
+ uint8 mws_num_periods;
+} mws_frame_config_t;
+
+/** MWS wci2 message */
+typedef struct {
+ uint8 mws_wci2_data; /**< BT-SIG msg */
+ uint8 PAD;
+ uint16 mws_wci2_interval; /**< Interval in us */
+ uint16 mws_wci2_repeat; /**< No of msgs to send */
} mws_wci2_msg_t;
+/* MWS ANT map */
+typedef struct {
+ uint16 combo1; /* mws ant selection 1 */
+ uint16 combo2; /* mws ant selection 2 */
+ uint16 combo3; /* mws ant selection 3 */
+ uint16 combo4; /* mws ant selection 4 */
+} mws_ant_map_t;
+
+/* MWS ANT map 2nd generation */
+typedef struct {
+ uint16 combo[16]; /* mws ant selection 2nd */
+} mws_ant_map_t_2nd;
+
+/* MWS SCAN_REQ Bitmap */
+typedef struct mws_scanreq_params {
+ uint16 idx;
+ uint16 bm_2g;
+ uint16 bm_5g_lo;
+ uint16 bm_5g_mid;
+ uint16 bm_5g_hi;
+} mws_scanreq_params_t;
typedef struct {
- uint32 config; /* MODE: AUTO (-1), Disable (0), Enable (1) */
- uint32 status; /* Current state: Disabled (0), Enabled (1) */
+ uint32 config; /**< MODE: AUTO (-1), Disable (0), Enable (1) */
+ uint32 status; /**< Current state: Disabled (0), Enabled (1) */
} wl_config_t;
#define WLC_RSDB_MODE_AUTO_MASK 0x80
#define WLC_RSDB_EXTRACT_MODE(val) ((int8)((val) & (~(WLC_RSDB_MODE_AUTO_MASK))))
-#define WL_IF_STATS_T_VERSION 1 /* current version of wl_if_stats structure */
+typedef struct {
+ uint16 request; /* type of sensor hub request */
+ uint16 enable; /* enable/disable response for specified request */
+ uint16 interval; /* interval between responses to the request */
+} shub_req_t;
-/* per interface counters */
+#define WL_IF_STATS_T_VERSION 1 /**< current version of wl_if_stats structure */
+
+/** per interface counters */
typedef struct wl_if_stats {
- uint16 version; /* version of the structure */
- uint16 length; /* length of the entire structure */
- uint32 PAD; /* padding */
+ uint16 version; /**< version of the structure */
+ uint16 length; /**< length of the entire structure */
+ uint32 PAD; /**< padding */
/* transmit stat counters */
- uint64 txframe; /* tx data frames */
- uint64 txbyte; /* tx data bytes */
- uint64 txerror; /* tx data errors (derived: sum of others) */
- uint64 txnobuf; /* tx out of buffer errors */
- uint64 txrunt; /* tx runt frames */
- uint64 txfail; /* tx failed frames */
- uint64 txretry; /* tx retry frames */
- uint64 txretrie; /* tx multiple retry frames */
- uint64 txfrmsnt; /* tx sent frames */
- uint64 txmulti; /* tx mulitcast sent frames */
- uint64 txfrag; /* tx fragments sent */
+ uint64 txframe; /**< tx data frames */
+ uint64 txbyte; /**< tx data bytes */
+ uint64 txerror; /**< tx data errors (derived: sum of others) */
+ uint64 txnobuf; /**< tx out of buffer errors */
+ uint64 txrunt; /**< tx runt frames */
+ uint64 txfail; /**< tx failed frames */
+ uint64 txretry; /**< tx retry frames */
+ uint64 txretrie; /**< tx multiple retry frames */
+ uint64 txfrmsnt; /**< tx sent frames */
+ uint64 txmulti; /**< tx mulitcast sent frames */
+ uint64 txfrag; /**< tx fragments sent */
/* receive stat counters */
- uint64 rxframe; /* rx data frames */
- uint64 rxbyte; /* rx data bytes */
- uint64 rxerror; /* rx data errors (derived: sum of others) */
- uint64 rxnobuf; /* rx out of buffer errors */
- uint64 rxrunt; /* rx runt frames */
- uint64 rxfragerr; /* rx fragment errors */
- uint64 rxmulti; /* rx multicast frames */
+ uint64 rxframe; /**< rx data frames */
+ uint64 rxbyte; /**< rx data bytes */
+ uint64 rxerror; /**< rx data errors (derived: sum of others) */
+ uint64 rxnobuf; /**< rx out of buffer errors */
+ uint64 rxrunt; /**< rx runt frames */
+ uint64 rxfragerr; /**< rx fragment errors */
+ uint64 rxmulti; /**< rx multicast frames */
uint64 txexptime; /* DATA Tx frames suppressed due to timer expiration */
uint64 txrts; /* RTS/CTS succeeeded count */
uint64 txnocts; /* RTS/CTS faled count */
+
+ uint64 txretrans; /* Number of frame retransmissions */
}
wl_if_stats_t;
typedef struct wl_band {
- uint16 bandtype; /* WL_BAND_2G, WL_BAND_5G */
- uint16 bandunit; /* bandstate[] index */
- uint16 phytype; /* phytype */
+ uint16 bandtype; /**< WL_BAND_2G, WL_BAND_5G */
+ uint16 bandunit; /**< bandstate[] index */
+ uint16 phytype; /**< phytype */
uint16 phyrev;
}
wl_band_t;
-#define WL_WLC_VERSION_T_VERSION 1 /* current version of wlc_version structure */
+#define WL_WLC_VERSION_T_VERSION 1 /**< current version of wlc_version structure */
-/* wlc interface version */
+/** wlc interface version */
typedef struct wl_wlc_version {
- uint16 version; /* version of the structure */
- uint16 length; /* length of the entire structure */
+ uint16 version; /**< version of the structure */
+ uint16 length; /**< length of the entire structure */
/* epi version numbers */
- uint16 epi_ver_major; /* epi major version number */
- uint16 epi_ver_minor; /* epi minor version number */
- uint16 epi_rc_num; /* epi RC number */
- uint16 epi_incr_num; /* epi increment number */
+ uint16 epi_ver_major; /**< epi major version number */
+ uint16 epi_ver_minor; /**< epi minor version number */
+ uint16 epi_rc_num; /**< epi RC number */
+ uint16 epi_incr_num; /**< epi increment number */
/* wlc interface version numbers */
- uint16 wlc_ver_major; /* wlc interface major version number */
- uint16 wlc_ver_minor; /* wlc interface minor version number */
+ uint16 wlc_ver_major; /**< wlc interface major version number */
+ uint16 wlc_ver_minor; /**< wlc interface minor version number */
}
wl_wlc_version_t;
-/* Version of WLC interface to be returned as a part of wl_wlc_version structure.
- * For the discussion related to versions update policy refer to
- * http://hwnbu-twiki.broadcom.com/bin/view/Mwgroup/WlShimAbstractionLayer
- * For now the policy is to increment WLC_VERSION_MAJOR each time
- * there is a change that involves both WLC layer and per-port layer.
- * WLC_VERSION_MINOR is currently not in use.
- */
-#define WLC_VERSION_MAJOR 3
-#define WLC_VERSION_MINOR 0
+/* Highest version of WLC_API_VERSION supported */
+#define WLC_API_VERSION_MAJOR_MAX 8
+#define WLC_API_VERSION_MINOR_MAX 0
/* begin proxd definitions */
#include <packed_section_start.h>
-#define WL_PROXD_API_VERSION 0x0300 /* version 3.0 */
+#define WL_PROXD_API_VERSION 0x0300 /**< version 3.0 */
-/* Minimum supported API version */
+/** Minimum supported API version */
#define WL_PROXD_API_MIN_VERSION 0x0300
-/* proximity detection methods */
+/** proximity detection methods */
enum {
WL_PROXD_METHOD_NONE = 0,
- WL_PROXD_METHOD_RSVD1 = 1, /* backward compatibility - RSSI, not supported */
- WL_PROXD_METHOD_TOF = 2,
- WL_PROXD_METHOD_RSVD2 = 3, /* 11v only - if needed */
- WL_PROXD_METHOD_FTM = 4, /* IEEE rev mc/2014 */
+ WL_PROXD_METHOD_RSVD1 = 1, /**< backward compatibility - RSSI, not supported */
+ WL_PROXD_METHOD_TOF = 2,
+ WL_PROXD_METHOD_RSVD2 = 3, /**< 11v only - if needed */
+ WL_PROXD_METHOD_FTM = 4, /**< IEEE rev mc/2014 */
WL_PROXD_METHOD_MAX
};
typedef int16 wl_proxd_method_t;
-/* global and method configuration flags */
+/** global and method configuration flags */
enum {
- WL_PROXD_FLAG_NONE = 0x00000000,
- WL_PROXD_FLAG_RX_ENABLED = 0x00000001, /* respond to requests */
- WL_PROXD_FLAG_RX_RANGE_REQ = 0x00000002, /* 11mc range requests enabled */
- WL_PROXD_FLAG_TX_LCI = 0x00000004, /* transmit location, if available */
- WL_PROXD_FLAG_TX_CIVIC = 0x00000008, /* tx civic loc, if available */
- WL_PROXD_FLAG_RX_AUTO_BURST = 0x00000010, /* respond to requests w/o host action */
- WL_PROXD_FLAG_TX_AUTO_BURST = 0x00000020, /* continue requests w/o host action */
- WL_PROXD_FLAG_AVAIL_PUBLISH = 0x00000040, /* publish availability */
- WL_PROXD_FLAG_AVAIL_SCHEDULE = 0x00000080, /* schedule using availability */
- WL_PROXD_FLAG_ALL = 0xffffffff
+ WL_PROXD_FLAG_NONE = 0x00000000,
+ WL_PROXD_FLAG_RX_ENABLED = 0x00000001, /**< respond to requests, per bss */
+ WL_PROXD_FLAG_RX_RANGE_REQ = 0x00000002, /**< 11mc range requests enabled */
+ WL_PROXD_FLAG_TX_LCI = 0x00000004, /**< tx lci, if known */
+ WL_PROXD_FLAG_TX_CIVIC = 0x00000008, /**< tx civic, if known */
+ WL_PROXD_FLAG_RX_AUTO_BURST = 0x00000010, /**< auto respond w/o host action */
+ WL_PROXD_FLAG_TX_AUTO_BURST = 0x00000020, /**< continue tx w/o host action */
+ WL_PROXD_FLAG_AVAIL_PUBLISH = 0x00000040, /**< publish availability */
+ WL_PROXD_FLAG_AVAIL_SCHEDULE = 0x00000080, /**< schedule using availability */
+ WL_PROXD_FLAG_ASAP_CAPABLE = 0x00000100, /* ASAP capable */
+ WL_PROXD_FLAG_MBURST_FOLLOWUP = 0x00000200, /* new multi-burst algorithm */
+ WL_PROXD_FLAG_SECURE = 0x00000400, /* per bsscfg option */
+ WL_PROXD_FLAG_NO_TSF_SYNC = 0x00000800, /* disable tsf sync */
+ WL_PROXD_FLAG_ALL = 0xffffffff
};
typedef uint32 wl_proxd_flags_t;
#define WL_PROXD_FLAGS_AVAIL (WL_PROXD_FLAG_AVAIL_PUBLISH | \
WL_PROXD_FLAG_AVAIL_SCHEDULE)
-/* session flags */
+/** session flags */
enum {
- WL_PROXD_SESSION_FLAG_NONE = 0x00000000, /* no flags */
- WL_PROXD_SESSION_FLAG_INITIATOR = 0x00000001, /* local device is initiator */
- WL_PROXD_SESSION_FLAG_TARGET = 0x00000002, /* local device is target */
- WL_PROXD_SESSION_FLAG_ONE_WAY = 0x00000004, /* (initiated) 1-way rtt */
- WL_PROXD_SESSION_FLAG_AUTO_BURST = 0x00000008, /* created w/ rx_auto_burst */
- WL_PROXD_SESSION_FLAG_PERSIST = 0x00000010, /* good until cancelled */
- WL_PROXD_SESSION_FLAG_RTT_DETAIL = 0x00000020, /* rtt detail in results */
- WL_PROXD_SESSION_FLAG_TOF_COMPAT = 0x00000040, /* TOF compatibility - TBD */
- WL_PROXD_SESSION_FLAG_AOA = 0x00000080, /* AOA along w/ RTT */
- WL_PROXD_SESSION_FLAG_RX_AUTO_BURST = 0x00000100, /* Same as proxd flags above */
- WL_PROXD_SESSION_FLAG_TX_AUTO_BURST = 0x00000200, /* Same as proxd flags above */
- WL_PROXD_SESSION_FLAG_NAN_BSS = 0x00000400, /* Use NAN BSS, if applicable */
- WL_PROXD_SESSION_FLAG_TS1 = 0x00000800, /* e.g. FTM1 - cap or rx */
- WL_PROXD_SESSION_FLAG_REPORT_FAILURE= 0x00002000, /* report failure to target */
- WL_PROXD_SESSION_FLAG_INITIATOR_RPT = 0x00004000, /* report distance to target */
- WL_PROXD_SESSION_FLAG_NOCHANSWT = 0x00008000, /* No channel switching */
- WL_PROXD_SESSION_FLAG_NETRUAL = 0x00010000, /* netrual mode */
- WL_PROXD_SESSION_FLAG_SEQ_EN = 0x00020000, /* Toast */
- WL_PROXD_SESSION_FLAG_NO_PARAM_OVRD = 0x00040000, /* no param override from target */
- WL_PROXD_SESSION_FLAG_ASAP = 0x00080000, /* ASAP session */
- WL_PROXD_SESSION_FLAG_REQ_LCI = 0x00100000, /* transmit LCI req */
- WL_PROXD_SESSION_FLAG_REQ_CIV = 0x00200000, /* transmit civic loc req */
- WL_PROXD_SESSION_FLAG_COLLECT = 0x80000000, /* debug - collect */
- WL_PROXD_SESSION_FLAG_ALL = 0xffffffff
+ WL_PROXD_SESSION_FLAG_NONE = 0x00000000, /**< no flags */
+ WL_PROXD_SESSION_FLAG_INITIATOR = 0x00000001, /**< local device is initiator */
+ WL_PROXD_SESSION_FLAG_TARGET = 0x00000002, /**< local device is target */
+ WL_PROXD_SESSION_FLAG_ONE_WAY = 0x00000004, /**< (initiated) 1-way rtt */
+ WL_PROXD_SESSION_FLAG_AUTO_BURST = 0x00000008, /**< created w/ rx_auto_burst */
+ WL_PROXD_SESSION_FLAG_PERSIST = 0x00000010, /**< good until cancelled */
+ WL_PROXD_SESSION_FLAG_RTT_DETAIL = 0x00000020, /**< rtt detail in results */
+ WL_PROXD_SESSION_FLAG_SECURE = 0x00000040, /**< sessionis secure */
+ WL_PROXD_SESSION_FLAG_AOA = 0x00000080, /**< AOA along w/ RTT */
+ WL_PROXD_SESSION_FLAG_RX_AUTO_BURST = 0x00000100, /**< Same as proxd flags above */
+ WL_PROXD_SESSION_FLAG_TX_AUTO_BURST = 0x00000200, /**< Same as proxd flags above */
+ WL_PROXD_SESSION_FLAG_NAN_BSS = 0x00000400, /**< Use NAN BSS, if applicable */
+ WL_PROXD_SESSION_FLAG_TS1 = 0x00000800, /**< e.g. FTM1 - ASAP-capable */
+ WL_PROXD_SESSION_FLAG_REPORT_FAILURE = 0x00002000, /**< report failure to target */
+ WL_PROXD_SESSION_FLAG_INITIATOR_RPT = 0x00004000, /**< report distance to target */
+ WL_PROXD_SESSION_FLAG_NOCHANSWT = 0x00008000,
+ WL_PROXD_SESSION_FLAG_NETRUAL = 0x00010000, /**< netrual mode */
+ WL_PROXD_SESSION_FLAG_SEQ_EN = 0x00020000, /**< Toast */
+ WL_PROXD_SESSION_FLAG_NO_PARAM_OVRD = 0x00040000, /**< no param override from target */
+ WL_PROXD_SESSION_FLAG_ASAP = 0x00080000, /**< ASAP session */
+ WL_PROXD_SESSION_FLAG_REQ_LCI = 0x00100000, /**< transmit LCI req */
+ WL_PROXD_SESSION_FLAG_REQ_CIV = 0x00200000, /**< transmit civic loc req */
+ WL_PROXD_SESSION_FLAG_PRE_SCAN = 0x00400000, /* enable pre-scan for asap=1 */
+ WL_PROXD_SESSION_FLAG_AUTO_VHTACK = 0x00800000, /* use vhtack based on brcm ie */
+ WL_PROXD_SESSION_FLAG_VHTACK = 0x01000000, /* vht ack is in use - output only */
+ WL_PROXD_SESSION_FLAG_BDUR_NOPREF = 0x02000000, /* burst-duration: no preference */
+ WL_PROXD_SESSION_FLAG_NUM_FTM_NOPREF = 0x04000000, /* num of FTM frames: no preference */
+ WL_PROXD_SESSION_FLAG_FTM_SEP_NOPREF = 0x08000000, /* time btw FTM frams: no pref */
+ WL_PROXD_SESSION_FLAG_NUM_BURST_NOPREF = 0x10000000, /* num of bursts: no pref */
+ WL_PROXD_SESSION_FLAG_BURST_PERIOD_NOPREF = 0x20000000, /* burst period: no pref */
+ WL_PROXD_SESSION_FLAG_MBURST_FOLLOWUP = 0x40000000, /* new mburst algo - reserved */
+ WL_PROXD_SESSION_FLAG_MBURST_NODELAY = 0x80000000, /**< good until cancelled */
+ WL_PROXD_SESSION_FLAG_ALL = 0xffffffff
+
};
typedef uint32 wl_proxd_session_flags_t;
-/* time units - mc supports up to 0.1ns resolution */
+/** time units - mc supports up to 0.1ns resolution */
enum {
- WL_PROXD_TMU_TU = 0, /* 1024us */
+ WL_PROXD_TMU_TU = 0, /**< 1024us */
WL_PROXD_TMU_SEC = 1,
WL_PROXD_TMU_MILLI_SEC = 2,
WL_PROXD_TMU_MICRO_SEC = 3,
@@ -7544,37 +13932,37 @@
};
typedef int16 wl_proxd_tmu_t;
-/* time interval e.g. 10ns */
+/** time interval e.g. 10ns */
typedef struct wl_proxd_intvl {
uint32 intvl;
wl_proxd_tmu_t tmu;
uint8 pad[2];
} wl_proxd_intvl_t;
-/* commands that can apply to proxd, method or a session */
+/** commands that can apply to proxd, method or a session */
enum {
- WL_PROXD_CMD_NONE = 0,
+ WL_PROXD_CMD_NONE = 0,
WL_PROXD_CMD_GET_VERSION = 1,
- WL_PROXD_CMD_ENABLE = 2,
- WL_PROXD_CMD_DISABLE = 3,
- WL_PROXD_CMD_CONFIG = 4,
- WL_PROXD_CMD_START_SESSION = 5,
- WL_PROXD_CMD_BURST_REQUEST = 6,
- WL_PROXD_CMD_STOP_SESSION = 7,
- WL_PROXD_CMD_DELETE_SESSION = 8,
- WL_PROXD_CMD_GET_RESULT = 9,
- WL_PROXD_CMD_GET_INFO = 10,
- WL_PROXD_CMD_GET_STATUS = 11,
- WL_PROXD_CMD_GET_SESSIONS = 12,
- WL_PROXD_CMD_GET_COUNTERS = 13,
- WL_PROXD_CMD_CLEAR_COUNTERS = 14,
- WL_PROXD_CMD_COLLECT = 15,
- WL_PROXD_CMD_TUNE = 16,
- WL_PROXD_CMD_DUMP = 17,
+ WL_PROXD_CMD_ENABLE = 2,
+ WL_PROXD_CMD_DISABLE = 3,
+ WL_PROXD_CMD_CONFIG = 4,
+ WL_PROXD_CMD_START_SESSION = 5,
+ WL_PROXD_CMD_BURST_REQUEST = 6,
+ WL_PROXD_CMD_STOP_SESSION = 7,
+ WL_PROXD_CMD_DELETE_SESSION = 8,
+ WL_PROXD_CMD_GET_RESULT = 9,
+ WL_PROXD_CMD_GET_INFO = 10,
+ WL_PROXD_CMD_GET_STATUS = 11,
+ WL_PROXD_CMD_GET_SESSIONS = 12,
+ WL_PROXD_CMD_GET_COUNTERS = 13,
+ WL_PROXD_CMD_CLEAR_COUNTERS = 14,
+ WL_PROXD_CMD_COLLECT = 15, /* not supported, see 'wl proxd_collect' */
+ WL_PROXD_CMD_TUNE = 16, /* not supported, see 'wl proxd_tune' */
+ WL_PROXD_CMD_DUMP = 17,
WL_PROXD_CMD_START_RANGING = 18,
WL_PROXD_CMD_STOP_RANGING = 19,
- WL_PROXD_CMD_GET_RANGING_INFO = 20,
- WL_PROXD_CMD_IS_TLV_SUPPORTED = 21,
+ WL_PROXD_CMD_GET_RANGING_INFO = 20,
+ WL_PROXD_CMD_IS_TLV_SUPPORTED = 21,
WL_PROXD_CMD_MAX
};
@@ -7589,46 +13977,89 @@
WL_PROXD_SESSION_ID_GLOBAL = 0
};
-#define WL_PROXD_SID_HOST_MAX 0x7fff
-#define WL_PROXD_SID_HOST_ALLOC(_sid) ((_sid) > 0 && (_sid) <= WL_PROXD_SID_HOST_MAX)
+/* Externally allocated sids */
+#define WL_PROXD_SID_EXT_MAX 0x7fff
+#define WL_PROXD_SID_EXT_ALLOC(_sid) ((_sid) > 0 && (_sid) <= WL_PROXD_SID_EXT_MAX)
-/* maximum number sessions that can be allocated, may be less if tunable */
+/* block size for reserved sid blocks */
+#define WL_PROXD_SID_EXT_BLKSZ 256
+#define WL_PROXD_SID_EXT_BLK_START(_i) (WL_PROXD_SID_EXT_MAX - (_i) * WL_PROXD_SID_EXT_BLKSZ + 1)
+#define WL_PROXD_SID_EXT_BLK_END(_start) ((_start) + WL_PROXD_SID_EXT_BLKSZ - 1)
+
+/* rrm block */
+#define WL_PROXD_SID_RRM_START WL_PROXD_SID_EXT_BLK_START(1)
+#define WL_PROXD_SID_RRM_END WL_PROXD_SID_EXT_BLK_END(WL_PROXD_SID_RRM_START)
+
+/* nan block */
+#define WL_PROXD_SID_NAN_START WL_PROXD_SID_EXT_BLK_START(2)
+#define WL_PROXD_SID_NAN_END WL_PROXD_SID_EXT_BLK_END(WL_PROXD_SID_NAN_START)
+
+/** maximum number sessions that can be allocated, may be less if tunable */
#define WL_PROXD_MAX_SESSIONS 16
typedef uint16 wl_proxd_session_id_t;
-/* status - TBD BCME_ vs proxd status - range reserved for BCME_ */
+/** status - TBD BCME_ vs proxd status - range reserved for BCME_ */
enum {
- WL_PROXD_E_POLICY = -1045,
+ WL_PROXD_E_LAST = -1056,
+ WL_PROXD_E_NOAVAIL = -1056,
+ WL_PROXD_E_EXT_SCHED = -1055,
+ WL_PROXD_E_NOT_BCM = -1054,
+ WL_PROXD_E_FRAME_TYPE = -1053,
+ WL_PROXD_E_VERNOSUPPORT = -1052,
+ WL_PROXD_E_SEC_NOKEY = -1051,
+ WL_PROXD_E_SEC_POLICY = -1050,
+ WL_PROXD_E_SCAN_INPROCESS = -1049,
+ WL_PROXD_E_BAD_PARTIAL_TSF = -1048,
+ WL_PROXD_E_SCANFAIL = -1047,
+ WL_PROXD_E_NOTSF = -1046,
+ WL_PROXD_E_POLICY = -1045,
WL_PROXD_E_INCOMPLETE = -1044,
WL_PROXD_E_OVERRIDDEN = -1043,
WL_PROXD_E_ASAP_FAILED = -1042,
WL_PROXD_E_NOTSTARTED = -1041,
- WL_PROXD_E_INVALIDAVB = -1040,
+ WL_PROXD_E_INVALIDMEAS = -1040,
WL_PROXD_E_INCAPABLE = -1039,
- WL_PROXD_E_MISMATCH = -1038,
+ WL_PROXD_E_MISMATCH = -1038,
WL_PROXD_E_DUP_SESSION = -1037,
WL_PROXD_E_REMOTE_FAIL = -1036,
- WL_PROXD_E_REMOTE_INCAPABLE = -1035,
+ WL_PROXD_E_REMOTE_INCAPABLE = -1035,
WL_PROXD_E_SCHED_FAIL = -1034,
- WL_PROXD_E_PROTO = -1033,
- WL_PROXD_E_EXPIRED = -1032,
- WL_PROXD_E_TIMEOUT = -1031,
- WL_PROXD_E_NOACK = -1030,
- WL_PROXD_E_DEFERRED = -1029,
+ WL_PROXD_E_PROTO = -1033,
+ WL_PROXD_E_EXPIRED = -1032,
+ WL_PROXD_E_TIMEOUT = -1031,
+ WL_PROXD_E_NOACK = -1030,
+ WL_PROXD_E_DEFERRED = -1029,
WL_PROXD_E_INVALID_SID = -1028,
- WL_PROXD_E_REMOTE_CANCEL = -1027,
- WL_PROXD_E_CANCELED = -1026, /* local */
+ WL_PROXD_E_REMOTE_CANCEL = -1027,
+ WL_PROXD_E_CANCELED = -1026, /**< local */
WL_PROXD_E_INVALID_SESSION = -1025,
WL_PROXD_E_BAD_STATE = -1024,
- WL_PROXD_E_ERROR = -1,
- WL_PROXD_E_OK = 0
+ WL_PROXD_E_START = -1024,
+ WL_PROXD_E_ERROR = -1,
+ WL_PROXD_E_OK = 0
};
typedef int32 wl_proxd_status_t;
-/* session states */
+/* proxd errors from phy */
+#define PROXD_TOF_INIT_ERR_BITS 16
+
enum {
- WL_PROXD_SESSION_STATE_NONE = 0,
+ WL_PROXD_PHY_ERR_LB_CORR_THRESH = (1 << 0), /* Loopback Correlation threshold */
+ WL_PROXD_PHY_ERR_RX_CORR_THRESH = (1 << 1), /* Received Correlation threshold */
+ WL_PROXD_PHY_ERR_LB_PEAK_POWER = (1 << 2), /* Loopback Peak power */
+ WL_PROXD_PHY_ERR_RX_PEAK_POWER = (1 << 3), /* Received Peak power */
+ WL_PROXD_PHY_ERR_BITFLIP = (1 << 4), /* Bitflips */
+ WL_PROXD_PHY_ERR_SNR = (1 << 5), /* SNR */
+ WL_PROXD_PHY_RX_STRT_WIN_OFF = (1 << 6), /* Receive start window is off */
+ WL_PROXD_PHY_RX_END_WIN_OFF = (1 << 7), /* Receive End window is off */
+ WL_PROXD_PHY_ERR_LOW_CONFIDENCE = (1 << 15), /* Low confidence on meas distance */
+};
+typedef uint32 wl_proxd_phy_error_t;
+
+/** session states */
+enum {
+ WL_PROXD_SESSION_STATE_NONE = 0,
WL_PROXD_SESSION_STATE_CREATED = 1,
WL_PROXD_SESSION_STATE_CONFIGURED = 2,
WL_PROXD_SESSION_STATE_STARTED = 3,
@@ -7638,94 +14069,166 @@
WL_PROXD_SESSION_STATE_BURST = 7,
WL_PROXD_SESSION_STATE_STOPPING = 8,
WL_PROXD_SESSION_STATE_ENDED = 9,
+ WL_PROXD_SESSION_STATE_START_WAIT = 10,
WL_PROXD_SESSION_STATE_DESTROYING = -1
};
typedef int16 wl_proxd_session_state_t;
-/* RTT sample flags */
+/** RTT sample flags */
enum {
- WL_PROXD_RTT_SAMPLE_NONE = 0x00,
- WL_PROXD_RTT_SAMPLE_DISCARD = 0x01
+ WL_PROXD_RTT_SAMPLE_NONE = 0x00,
+ WL_PROXD_RTT_SAMPLE_DISCARD = 0x01
};
typedef uint8 wl_proxd_rtt_sample_flags_t;
+typedef int16 wl_proxd_rssi_t;
+typedef uint16 wl_proxd_snr_t;
+typedef uint16 wl_proxd_bitflips_t;
-typedef struct wl_proxd_rtt_sample {
- uint8 id; /* id for the sample - non-zero */
- wl_proxd_rtt_sample_flags_t flags;
- int16 rssi;
- wl_proxd_intvl_t rtt; /* round trip time */
- uint32 ratespec;
-} wl_proxd_rtt_sample_t;
-
-/* result flags */
+/** result flags */
enum {
WL_PRXOD_RESULT_FLAG_NONE = 0x0000,
- WL_PROXD_RESULT_FLAG_NLOS = 0x0001, /* LOS - if available */
- WL_PROXD_RESULT_FLAG_LOS = 0x0002, /* NLOS - if available */
- WL_PROXD_RESULT_FLAG_FATAL = 0x0004, /* Fatal error during burst */
+ WL_PROXD_RESULT_FLAG_NLOS = 0x0001, /**< LOS - if available */
+ WL_PROXD_RESULT_FLAG_LOS = 0x0002, /**< NLOS - if available */
+ WL_PROXD_RESULT_FLAG_FATAL = 0x0004, /**< Fatal error during burst */
WL_PROXD_RESULT_FLAG_VHTACK = 0x0008, /* VHTACK or Legacy ACK used */
- WL_PROXD_RESULT_FLAG_ALL = 0xffff
+ WL_PROXD_REQUEST_SENT = 0x0010, /* FTM request was sent */
+ WL_PROXD_REQUEST_ACKED = 0x0020, /* FTM request was acked */
+ WL_PROXD_LTFSEQ_STARTED = 0x0040, /* LTF sequence started */
+ WL_PROXD_RESULT_FLAG_ALL = 0xffff
};
typedef int16 wl_proxd_result_flags_t;
-/* rtt measurement result */
-typedef struct wl_proxd_rtt_result {
- wl_proxd_session_id_t sid;
- wl_proxd_result_flags_t flags;
- wl_proxd_status_t status;
- struct ether_addr peer;
- wl_proxd_session_state_t state; /* current state */
- union {
- wl_proxd_intvl_t retry_after; /* hint for errors */
- wl_proxd_intvl_t burst_duration; /* burst duration */
- } u;
- wl_proxd_rtt_sample_t avg_rtt;
- uint32 avg_dist; /* 1/256m units */
- uint16 sd_rtt; /* RTT standard deviation */
- uint8 num_valid_rtt; /* valid rtt cnt */
- uint8 num_ftm; /* actual num of ftm cnt */
- uint16 burst_num; /* in a session */
- uint16 num_rtt; /* 0 if no detail */
- wl_proxd_rtt_sample_t rtt[1]; /* variable */
-} wl_proxd_rtt_result_t;
+#define WL_PROXD_RTT_SAMPLE_VERSION_1 1
+typedef struct wl_proxd_rtt_sample_v1 {
+ uint8 id; /**< id for the sample - non-zero */
+ wl_proxd_rtt_sample_flags_t flags;
+ wl_proxd_rssi_t rssi;
+ wl_proxd_intvl_t rtt; /**< round trip time */
+ uint32 ratespec;
+ wl_proxd_snr_t snr;
+ wl_proxd_bitflips_t bitflips;
+ wl_proxd_status_t status;
+ int32 distance;
+ wl_proxd_phy_error_t tof_phy_error;
+ wl_proxd_phy_error_t tof_tgt_phy_error; /* target phy error bit map */
+ wl_proxd_snr_t tof_tgt_snr;
+ wl_proxd_bitflips_t tof_tgt_bitflips;
+ uint8 coreid;
+ uint8 pad[3];
+} wl_proxd_rtt_sample_v1_t;
-/* aoa measurement result */
+#define WL_PROXD_RTT_RESULT_VERSION_1 1
+/** rtt measurement result */
+typedef struct wl_proxd_rtt_result_v1 {
+ wl_proxd_session_id_t sid;
+ wl_proxd_result_flags_t flags;
+ wl_proxd_status_t status;
+ struct ether_addr peer;
+ wl_proxd_session_state_t state; /**< current state */
+ union {
+ wl_proxd_intvl_t retry_after; /* hint for errors */
+ wl_proxd_intvl_t burst_duration; /* burst duration */
+ } u;
+ wl_proxd_rtt_sample_v1_t avg_rtt;
+ uint32 avg_dist; /* 1/256m units */
+ uint16 sd_rtt; /* RTT standard deviation */
+ uint8 num_valid_rtt; /* valid rtt cnt */
+ uint8 num_ftm; /* actual num of ftm cnt (Configured) */
+ uint16 burst_num; /* in a session */
+ uint16 num_rtt; /* 0 if no detail */
+ uint16 num_meas; /* number of ftm frames seen OTA */
+ uint8 pad[2];
+ wl_proxd_rtt_sample_v1_t rtt[1]; /* variable */
+} wl_proxd_rtt_result_v1_t;
+
+#define WL_PROXD_RTT_SAMPLE_VERSION_2 2
+typedef struct wl_proxd_rtt_sample_v2 {
+ uint16 version;
+ uint16 length;
+ uint8 id; /**< id for the sample - non-zero */
+ wl_proxd_rtt_sample_flags_t flags;
+ wl_proxd_rssi_t rssi;
+ wl_proxd_intvl_t rtt; /**< round trip time */
+ uint32 ratespec;
+ wl_proxd_snr_t snr;
+ wl_proxd_bitflips_t bitflips;
+ wl_proxd_status_t status;
+ int32 distance;
+ wl_proxd_phy_error_t tof_phy_error;
+ wl_proxd_phy_error_t tof_tgt_phy_error; /* target phy error bit map */
+ wl_proxd_snr_t tof_tgt_snr;
+ wl_proxd_bitflips_t tof_tgt_bitflips;
+ uint8 coreid;
+ uint8 pad[3];
+ uint32 chanspec;
+} wl_proxd_rtt_sample_v2_t;
+
+#define WL_PROXD_RTT_RESULT_VERSION_2 2
+/** rtt measurement result */
+typedef struct wl_proxd_rtt_result_v2 {
+ uint16 version;
+ uint16 length; /* up to rtt[] */
+ wl_proxd_session_id_t sid;
+ wl_proxd_result_flags_t flags;
+ wl_proxd_status_t status;
+ struct ether_addr peer;
+ wl_proxd_session_state_t state; /**< current state */
+ union {
+ wl_proxd_intvl_t retry_after; /* hint for errors */
+ wl_proxd_intvl_t burst_duration; /* burst duration */
+ } u;
+ uint32 avg_dist; /* 1/256m units */
+ uint16 sd_rtt; /* RTT standard deviation */
+ uint8 num_valid_rtt; /* valid rtt cnt */
+ uint8 num_ftm; /* actual num of ftm cnt (Configured) */
+ uint16 burst_num; /* in a session */
+ uint16 num_rtt; /* 0 if no detail */
+ uint16 num_meas; /* number of ftm frames seen OTA */
+ uint8 pad[2];
+ wl_proxd_rtt_sample_v2_t rtt[1]; /* variable, first element is avg_rtt */
+} wl_proxd_rtt_result_v2_t;
+
+/** aoa measurement result */
typedef struct wl_proxd_aoa_result {
- wl_proxd_session_id_t sid;
- wl_proxd_result_flags_t flags;
- wl_proxd_status_t status;
- struct ether_addr peer;
- wl_proxd_session_state_t state;
- uint16 burst_num;
- uint8 pad[2];
+ wl_proxd_session_id_t sid;
+ wl_proxd_result_flags_t flags;
+ wl_proxd_status_t status;
+ struct ether_addr peer;
+ wl_proxd_session_state_t state;
+ uint16 burst_num;
+ uint8 pad[2];
/* wl_proxd_aoa_sample_t sample_avg; TBD */
} BWL_POST_PACKED_STRUCT wl_proxd_aoa_result_t;
+#include <packed_section_end.h>
-/* global stats */
+/** global stats */
typedef struct wl_proxd_counters {
- uint32 tx; /* tx frame count */
- uint32 rx; /* rx frame count */
- uint32 burst; /* total number of burst */
- uint32 sessions; /* total number of sessions */
+ uint32 tx; /* tx frame count */
+ uint32 rx; /* rx frame count */
+ uint32 burst; /* total number of burst */
+ uint32 sessions; /* total number of sessions */
uint32 max_sessions; /* max concurrency */
- uint32 sched_fail; /* scheduling failures */
- uint32 timeouts; /* timeouts */
- uint32 protoerr; /* protocol errors */
- uint32 noack; /* tx w/o ack */
- uint32 txfail; /* any tx falure */
- uint32 lci_req_tx; /* tx LCI requests */
- uint32 lci_req_rx; /* rx LCI requests */
- uint32 lci_rep_tx; /* tx LCI reports */
- uint32 lci_rep_rx; /* rx LCI reports */
+ uint32 sched_fail; /* scheduling failures */
+ uint32 timeouts; /* timeouts */
+ uint32 protoerr; /* protocol errors */
+ uint32 noack; /* tx w/o ack */
+ uint32 txfail; /* any tx falure */
+ uint32 lci_req_tx; /* tx LCI requests */
+ uint32 lci_req_rx; /* rx LCI requests */
+ uint32 lci_rep_tx; /* tx LCI reports */
+ uint32 lci_rep_rx; /* rx LCI reports */
uint32 civic_req_tx; /* tx civic requests */
uint32 civic_req_rx; /* rx civic requests */
uint32 civic_rep_tx; /* tx civic reports */
uint32 civic_rep_rx; /* rx civic reports */
- uint32 rctx; /* ranging contexts created */
- uint32 rctx_done; /* count of ranging done */
- uint32 publish_err; /* availability publishing errors */
- uint32 on_chan; /* count of scheduler onchan */
- uint32 off_chan; /* count of scheduler offchan */
+ uint32 rctx; /* ranging contexts created */
+ uint32 rctx_done; /* count of ranging done */
+ uint32 publish_err; /* availability publishing errors */
+ uint32 on_chan; /* count of scheduler onchan */
+ uint32 off_chan; /* count of scheduler offchan */
+ uint32 tsf_lo; /* local tsf or session tsf */
+ uint32 tsf_hi;
+ uint32 num_meas;
} wl_proxd_counters_t;
typedef struct wl_proxd_counters wl_proxd_session_counters_t;
@@ -7736,29 +14239,34 @@
};
typedef int16 wl_proxd_caps_t;
-/* method capabilities */
+/** method capabilities */
enum {
WL_PROXD_FTM_CAP_NONE = 0x0000,
WL_PROXD_FTM_CAP_FTM1 = 0x0001
};
typedef uint16 wl_proxd_ftm_caps_t;
-typedef struct BWL_PRE_PACKED_STRUCT wl_proxd_tlv_id_list {
+typedef struct wl_proxd_tlv_id_list {
uint16 num_ids;
uint16 ids[1];
-} BWL_POST_PACKED_STRUCT wl_proxd_tlv_id_list_t;
+} wl_proxd_tlv_id_list_t;
typedef struct wl_proxd_session_id_list {
uint16 num_ids;
wl_proxd_session_id_t ids[1];
} wl_proxd_session_id_list_t;
+typedef struct wl_proxd_tpk {
+ struct ether_addr peer;
+ uint8 tpk[TPK_FTM_LEN];
+} wl_proxd_tpk_t;
+
/* tlvs returned for get_info on ftm method
- * configuration:
- * proxd flags
- * event mask
- * debug mask
- * session defaults (session tlvs)
+ * configuration:
+ * proxd flags
+ * event mask
+ * debug mask
+ * session defaults (session tlvs)
* status tlv - not supported for ftm method
* info tlv
*/
@@ -7768,6 +14276,14 @@
uint16 num_sessions;
uint16 rx_max_burst;
} wl_proxd_ftm_info_t;
+
+enum {
+ WL_PROXD_WAIT_NONE = 0x0000,
+ WL_PROXD_WAIT_KEY = 0x0001,
+ WL_PROXD_WAIT_SCHED = 0x0002,
+ WL_PROXD_WAIT_TSF = 0x0004
+};
+typedef int16 wl_proxd_wait_reason_t;
/* tlvs returned for get_info on session
* session config (tlvs)
@@ -7781,6 +14297,9 @@
wl_proxd_session_state_t state;
wl_proxd_status_t status;
uint16 burst_num;
+ wl_proxd_wait_reason_t wait_reason;
+ uint32 meas_start_lo; /* sn tsf of 1st meas for cur/prev burst */
+ uint32 meas_start_hi;
} wl_proxd_ftm_session_info_t;
typedef struct wl_proxd_ftm_session_status {
@@ -7788,15 +14307,16 @@
wl_proxd_session_state_t state;
wl_proxd_status_t status;
uint16 burst_num;
+ uint16 pad;
} wl_proxd_ftm_session_status_t;
-/* rrm range request */
+/** rrm range request */
typedef struct wl_proxd_range_req {
uint16 num_repeat;
- uint16 init_delay_range; /* in TUs */
+ uint16 init_delay_range; /**< in TUs */
uint8 pad;
- uint8 num_nbr; /* number of (possible) neighbors */
- nbr_element_t nbr[1];
+ uint8 num_nbr; /**< number of (possible) neighbors */
+ nbr_element_t nbr[1];
} wl_proxd_range_req_t;
#define WL_PROXD_LCI_LAT_OFF 0
@@ -7840,15 +14360,15 @@
#define WL_PROXD_LCI_VERSION(_lci) ((_lci)->data[15] >> 6)
/* availability. advertising mechanism bss specific */
-/* availablity flags */
+/** availablity flags */
enum {
WL_PROXD_AVAIL_NONE = 0,
WL_PROXD_AVAIL_NAN_PUBLISHED = 0x0001,
- WL_PROXD_AVAIL_SCHEDULED = 0x0002 /* scheduled by proxd */
+ WL_PROXD_AVAIL_SCHEDULED = 0x0002 /**< scheduled by proxd */
};
typedef int16 wl_proxd_avail_flags_t;
-/* time reference */
+/** time reference */
enum {
WL_PROXD_TREF_NONE = 0,
WL_PROXD_TREF_DEV_TSF = 1,
@@ -7858,19 +14378,19 @@
};
typedef int16 wl_proxd_time_ref_t;
-/* proxd channel-time slot */
+/** proxd channel-time slot */
typedef struct {
- wl_proxd_intvl_t start; /* from ref */
- wl_proxd_intvl_t duration; /* from start */
+ wl_proxd_intvl_t start; /**< from ref */
+ wl_proxd_intvl_t duration; /**< from start */
uint32 chanspec;
} wl_proxd_time_slot_t;
typedef struct wl_proxd_avail24 {
- wl_proxd_avail_flags_t flags; /* for query only */
+ wl_proxd_avail_flags_t flags; /**< for query only */
wl_proxd_time_ref_t time_ref;
- uint16 max_slots; /* for query only */
+ uint16 max_slots; /**< for query only */
uint16 num_slots;
- wl_proxd_time_slot_t slots[1]; /* ROM compat - not used */
+ wl_proxd_time_slot_t slots[1]; /**< ROM compat - not used */
wl_proxd_intvl_t repeat;
wl_proxd_time_slot_t ts0[1];
} wl_proxd_avail24_t;
@@ -7882,9 +14402,9 @@
(_num_slots) * sizeof(*WL_PROXD_AVAIL24_TIMESLOT(_avail24, 0)))
typedef struct wl_proxd_avail {
- wl_proxd_avail_flags_t flags; /* for query only */
+ wl_proxd_avail_flags_t flags; /**< for query only */
wl_proxd_time_ref_t time_ref;
- uint16 max_slots; /* for query only */
+ uint16 max_slots; /**< for query only */
uint16 num_slots;
wl_proxd_intvl_t repeat;
wl_proxd_time_slot_t slots[1];
@@ -7899,73 +14419,88 @@
/* collect support TBD */
-/* debugging */
+/** debugging */
enum {
WL_PROXD_DEBUG_NONE = 0x00000000,
WL_PROXD_DEBUG_LOG = 0x00000001,
WL_PROXD_DEBUG_IOV = 0x00000002,
- WL_PROXD_DEBUG_EVENT = 0x00000004,
- WL_PROXD_DEBUG_SESSION = 0x00000008,
- WL_PROXD_DEBUG_PROTO = 0x00000010,
- WL_PROXD_DEBUG_SCHED = 0x00000020,
- WL_PROXD_DEBUG_RANGING = 0x00000040,
+ WL_PROXD_DEBUG_EVENT = 0x00000004,
+ WL_PROXD_DEBUG_SESSION = 0x00000008,
+ WL_PROXD_DEBUG_PROTO = 0x00000010,
+ WL_PROXD_DEBUG_SCHED = 0x00000020,
+ WL_PROXD_DEBUG_RANGING = 0x00000040,
+ WL_PROXD_DEBUG_NAN = 0x00000080,
+ WL_PROXD_DEBUG_PKT = 0x00000100,
+ WL_PROXD_DEBUG_SEC = 0x00000200,
+ WL_PROXD_DEBUG_EVENTLOG = 0x80000000, /* map/enable EVNET_LOG_TAG_PROXD_INFO */
WL_PROXD_DEBUG_ALL = 0xffffffff
};
typedef uint32 wl_proxd_debug_mask_t;
-/* tlv IDs - data length 4 bytes unless overridden by type, alignment 32 bits */
+/** tlv IDs - data length 4 bytes unless overridden by type, alignment 32 bits */
enum {
- WL_PROXD_TLV_ID_NONE = 0,
- WL_PROXD_TLV_ID_METHOD = 1,
- WL_PROXD_TLV_ID_FLAGS = 2,
- WL_PROXD_TLV_ID_CHANSPEC = 3, /* note: uint32 */
- WL_PROXD_TLV_ID_TX_POWER = 4,
- WL_PROXD_TLV_ID_RATESPEC = 5,
- WL_PROXD_TLV_ID_BURST_DURATION = 6, /* intvl - length of burst */
- WL_PROXD_TLV_ID_BURST_PERIOD = 7, /* intvl - between bursts */
- WL_PROXD_TLV_ID_BURST_FTM_SEP = 8, /* intvl - between FTMs */
- WL_PROXD_TLV_ID_BURST_NUM_FTM = 9, /* uint16 - per burst */
- WL_PROXD_TLV_ID_NUM_BURST = 10, /* uint16 */
- WL_PROXD_TLV_ID_FTM_RETRIES = 11, /* uint16 at FTM level */
- WL_PROXD_TLV_ID_BSS_INDEX = 12, /* uint8 */
- WL_PROXD_TLV_ID_BSSID = 13,
- WL_PROXD_TLV_ID_INIT_DELAY = 14, /* intvl - optional, non-standalone only */
- WL_PROXD_TLV_ID_BURST_TIMEOUT = 15, /* expect response within - intvl */
- WL_PROXD_TLV_ID_EVENT_MASK = 16, /* interested events - in/out */
- WL_PROXD_TLV_ID_FLAGS_MASK = 17, /* interested flags - in only */
- WL_PROXD_TLV_ID_PEER_MAC = 18, /* mac address of peer */
- WL_PROXD_TLV_ID_FTM_REQ = 19, /* dot11_ftm_req */
- WL_PROXD_TLV_ID_LCI_REQ = 20,
- WL_PROXD_TLV_ID_LCI = 21,
+ WL_PROXD_TLV_ID_NONE = 0,
+ WL_PROXD_TLV_ID_METHOD = 1,
+ WL_PROXD_TLV_ID_FLAGS = 2,
+ WL_PROXD_TLV_ID_CHANSPEC = 3, /**< note: uint32 */
+ WL_PROXD_TLV_ID_TX_POWER = 4,
+ WL_PROXD_TLV_ID_RATESPEC = 5,
+ WL_PROXD_TLV_ID_BURST_DURATION = 6, /**< intvl - length of burst */
+ WL_PROXD_TLV_ID_BURST_PERIOD = 7, /**< intvl - between bursts */
+ WL_PROXD_TLV_ID_BURST_FTM_SEP = 8, /**< intvl - between FTMs */
+ WL_PROXD_TLV_ID_BURST_NUM_FTM = 9, /**< uint16 - per burst */
+ WL_PROXD_TLV_ID_NUM_BURST = 10, /**< uint16 */
+ WL_PROXD_TLV_ID_FTM_RETRIES = 11, /**< uint16 at FTM level */
+ WL_PROXD_TLV_ID_BSS_INDEX = 12, /**< uint8 */
+ WL_PROXD_TLV_ID_BSSID = 13,
+ WL_PROXD_TLV_ID_INIT_DELAY = 14, /**< intvl - optional,non-standalone only */
+ WL_PROXD_TLV_ID_BURST_TIMEOUT = 15, /**< expect response within - intvl */
+ WL_PROXD_TLV_ID_EVENT_MASK = 16, /**< interested events - in/out */
+ WL_PROXD_TLV_ID_FLAGS_MASK = 17, /**< interested flags - in only */
+ WL_PROXD_TLV_ID_PEER_MAC = 18, /**< mac address of peer */
+ WL_PROXD_TLV_ID_FTM_REQ = 19, /**< dot11_ftm_req */
+ WL_PROXD_TLV_ID_LCI_REQ = 20,
+ WL_PROXD_TLV_ID_LCI = 21,
WL_PROXD_TLV_ID_CIVIC_REQ = 22,
WL_PROXD_TLV_ID_CIVIC = 23,
- WL_PROXD_TLV_ID_AVAIL24 = 24, /* ROM compatibility */
- WL_PROXD_TLV_ID_SESSION_FLAGS = 25,
- WL_PROXD_TLV_ID_SESSION_FLAGS_MASK = 26, /* in only */
- WL_PROXD_TLV_ID_RX_MAX_BURST = 27, /* uint16 - limit bursts per session */
- WL_PROXD_TLV_ID_RANGING_INFO = 28, /* ranging info */
- WL_PROXD_TLV_ID_RANGING_FLAGS = 29, /* uint16 */
- WL_PROXD_TLV_ID_RANGING_FLAGS_MASK = 30, /* uint16, in only */
- WL_PROXD_TLV_ID_NAN_MAP_ID = 31,
- WL_PROXD_TLV_ID_DEV_ADDR = 32,
- WL_PROXD_TLV_ID_AVAIL = 33, /* wl_proxd_avail_t */
- WL_PROXD_TLV_ID_TLV_ID = 34, /* uint16 tlv-id */
- WL_PROXD_TLV_ID_FTM_REQ_RETRIES = 35, /* uint16 FTM request retries */
+ WL_PROXD_TLV_ID_AVAIL24 = 24, /**< ROM compatibility */
+ WL_PROXD_TLV_ID_SESSION_FLAGS = 25,
+ WL_PROXD_TLV_ID_SESSION_FLAGS_MASK = 26, /**< in only */
+ WL_PROXD_TLV_ID_RX_MAX_BURST = 27, /**< uint16 - limit bursts per session */
+ WL_PROXD_TLV_ID_RANGING_INFO = 28, /**< ranging info */
+ WL_PROXD_TLV_ID_RANGING_FLAGS = 29, /**< uint16 */
+ WL_PROXD_TLV_ID_RANGING_FLAGS_MASK = 30, /**< uint16, in only */
+ WL_PROXD_TLV_ID_NAN_MAP_ID = 31,
+ WL_PROXD_TLV_ID_DEV_ADDR = 32,
+ WL_PROXD_TLV_ID_AVAIL = 33, /**< wl_proxd_avail_t */
+ WL_PROXD_TLV_ID_TLV_ID = 34, /* uint16 tlv-id */
+ WL_PROXD_TLV_ID_FTM_REQ_RETRIES = 35, /* uint16 FTM request retries */
+ WL_PROXD_TLV_ID_TPK = 36, /* 32byte TPK */
+ WL_PROXD_TLV_ID_RI_RR = 36, /* RI_RR */
+ WL_PROXD_TLV_ID_TUNE = 37, /* wl_proxd_pararms_tof_tune_t */
+ WL_PROXD_TLV_ID_CUR_ETHER_ADDR = 38, /* Source Address used for Tx */
/* output - 512 + x */
- WL_PROXD_TLV_ID_STATUS = 512,
- WL_PROXD_TLV_ID_COUNTERS = 513,
- WL_PROXD_TLV_ID_INFO = 514,
- WL_PROXD_TLV_ID_RTT_RESULT = 515,
+ WL_PROXD_TLV_ID_STATUS = 512,
+ WL_PROXD_TLV_ID_COUNTERS = 513,
+ WL_PROXD_TLV_ID_INFO = 514,
+ WL_PROXD_TLV_ID_RTT_RESULT = 515,
WL_PROXD_TLV_ID_AOA_RESULT = 516,
- WL_PROXD_TLV_ID_SESSION_INFO = 517,
- WL_PROXD_TLV_ID_SESSION_STATUS = 518,
- WL_PROXD_TLV_ID_SESSION_ID_LIST = 519,
+ WL_PROXD_TLV_ID_SESSION_INFO = 517,
+ WL_PROXD_TLV_ID_SESSION_STATUS = 518,
+ WL_PROXD_TLV_ID_SESSION_ID_LIST = 519,
+ WL_PROXD_TLV_ID_RTT_RESULT_V2 = 520,
/* debug tlvs can be added starting 1024 */
- WL_PROXD_TLV_ID_DEBUG_MASK = 1024,
- WL_PROXD_TLV_ID_COLLECT = 1025, /* output only */
- WL_PROXD_TLV_ID_STRBUF = 1026,
+ WL_PROXD_TLV_ID_DEBUG_MASK = 1024,
+ WL_PROXD_TLV_ID_COLLECT = 1025, /**< output only */
+ WL_PROXD_TLV_ID_STRBUF = 1026,
+
+ WL_PROXD_TLV_ID_COLLECT_HEADER = 1025, /* wl_proxd_collect_header_t */
+ WL_PROXD_TLV_ID_COLLECT_INFO = 1028, /* wl_proxd_collect_info_t */
+ WL_PROXD_TLV_ID_COLLECT_DATA = 1029, /* wl_proxd_collect_data_t */
+ WL_PROXD_TLV_ID_COLLECT_CHAN_DATA = 1030, /* wl_proxd_collect_data_t */
+ WL_PROXD_TLV_ID_MF_STATS_DATA = 1031, /* mf_stats_buffer */
WL_PROXD_TLV_ID_MAX
};
@@ -7976,15 +14511,15 @@
uint8 data[1];
} wl_proxd_tlv_t;
-/* proxd iovar - applies to proxd, method or session */
+/** proxd iovar - applies to proxd, method or session */
typedef struct wl_proxd_iov {
- uint16 version;
- uint16 len;
- wl_proxd_cmd_t cmd;
- wl_proxd_method_t method;
- wl_proxd_session_id_t sid;
- uint8 pad[2];
- wl_proxd_tlv_t tlvs[1]; /* variable */
+ uint16 version;
+ uint16 len;
+ wl_proxd_cmd_t cmd;
+ wl_proxd_method_t method;
+ wl_proxd_session_id_t sid;
+ uint8 PAD[2];
+ wl_proxd_tlv_t tlvs[1]; /**< variable */
} wl_proxd_iov_t;
#define WL_PROXD_IOV_HDR_SIZE OFFSETOF(wl_proxd_iov_t, tlvs)
@@ -7993,29 +14528,32 @@
* across needs more invasive changes unrelated to proxd
*/
enum {
- WL_PROXD_EVENT_NONE = 0, /* not an event, reserved */
- WL_PROXD_EVENT_SESSION_CREATE = 1,
- WL_PROXD_EVENT_SESSION_START = 2,
+ WL_PROXD_EVENT_NONE = 0, /**< not an event, reserved */
+ WL_PROXD_EVENT_SESSION_CREATE = 1,
+ WL_PROXD_EVENT_SESSION_START = 2,
WL_PROXD_EVENT_FTM_REQ = 3,
WL_PROXD_EVENT_BURST_START = 4,
WL_PROXD_EVENT_BURST_END = 5,
WL_PROXD_EVENT_SESSION_END = 6,
- WL_PROXD_EVENT_SESSION_RESTART = 7,
- WL_PROXD_EVENT_BURST_RESCHED = 8, /* burst rescheduled - e.g. partial TSF */
- WL_PROXD_EVENT_SESSION_DESTROY = 9,
- WL_PROXD_EVENT_RANGE_REQ = 10,
+ WL_PROXD_EVENT_SESSION_RESTART = 7,
+ WL_PROXD_EVENT_BURST_RESCHED = 8, /**< burst rescheduled-e.g. partial TSF */
+ WL_PROXD_EVENT_SESSION_DESTROY = 9,
+ WL_PROXD_EVENT_RANGE_REQ = 10,
WL_PROXD_EVENT_FTM_FRAME = 11,
WL_PROXD_EVENT_DELAY = 12,
- WL_PROXD_EVENT_VS_INITIATOR_RPT = 13, /* (target) rx initiator-report */
+ WL_PROXD_EVENT_VS_INITIATOR_RPT = 13, /**< (target) rx initiator-report */
WL_PROXD_EVENT_RANGING = 14,
- WL_PROXD_EVENT_LCI_MEAS_REP = 15, /* LCI measurement report */
- WL_PROXD_EVENT_CIVIC_MEAS_REP = 16, /* civic measurement report */
+ WL_PROXD_EVENT_LCI_MEAS_REP = 15, /* LCI measurement report */
+ WL_PROXD_EVENT_CIVIC_MEAS_REP = 16, /* civic measurement report */
+ WL_PROXD_EVENT_COLLECT = 17,
+ WL_PROXD_EVENT_START_WAIT = 18, /* waiting to start */
+ WL_PROXD_EVENT_MF_STATS = 19, /* mf stats event */
WL_PROXD_EVENT_MAX
};
typedef int16 wl_proxd_event_type_t;
-/* proxd event mask - upto 32 events for now */
+/** proxd event mask - upto 32 events for now */
typedef uint32 wl_proxd_event_mask_t;
#define WL_PROXD_EVENT_MASK_ALL 0xfffffffe
@@ -8023,15 +14561,15 @@
#define WL_PROXD_EVENT_ENABLED(_mask, _event_type) (\
((_mask) & WL_PROXD_EVENT_MASK_EVENT(_event_type)) != 0)
-/* proxd event - applies to proxd, method or session */
+/** proxd event - applies to proxd, method or session */
typedef struct wl_proxd_event {
- uint16 version;
- uint16 len;
- wl_proxd_event_type_t type;
- wl_proxd_method_t method;
- wl_proxd_session_id_t sid;
- uint8 pad[2];
- wl_proxd_tlv_t tlvs[1]; /* variable */
+ uint16 version;
+ uint16 len;
+ wl_proxd_event_type_t type;
+ wl_proxd_method_t method;
+ wl_proxd_session_id_t sid;
+ uint8 pad[2];
+ wl_proxd_tlv_t tlvs[1]; /**< variable */
} wl_proxd_event_t;
enum {
@@ -8042,9 +14580,9 @@
};
typedef int16 wl_proxd_ranging_state_t;
-/* proxd ranging flags */
+/** proxd ranging flags */
enum {
- WL_PROXD_RANGING_FLAG_NONE = 0x0000, /* no flags */
+ WL_PROXD_RANGING_FLAG_NONE = 0x0000, /**< no flags */
WL_PROXD_RANGING_FLAG_DEL_SESSIONS_ON_STOP = 0x0001,
WL_PROXD_RANGING_FLAG_ALL = 0xffff
};
@@ -8058,21 +14596,50 @@
uint16 num_done;
};
typedef struct wl_proxd_ranging_info wl_proxd_ranging_info_t;
-#include <packed_section_end.h>
-/* end proxd definitions */
-/* require strict packing */
#include <packed_section_start.h>
-/* Data returned by the bssload_report iovar.
- * This is also the WLC_E_BSS_LOAD event data.
- */
-typedef BWL_PRE_PACKED_STRUCT struct wl_bssload {
- uint16 sta_count; /* station count */
- uint16 aac; /* available admission capacity */
- uint8 chan_util; /* channel utilization */
-} BWL_POST_PACKED_STRUCT wl_bssload_t;
+/* Legacy platform i.e. 43342/43430 */
+#define WL_PROXD_COLLECT_EVENT_DATA_VERSION_1 1
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_event_data_v1 {
+ uint32 H_LB[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint32 H_RX[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint8 ri_rr[FTM_TPK_LEN];
+ wl_proxd_phy_error_t phy_err_mask;
+} BWL_POST_PACKED_STRUCT wl_proxd_collect_event_data_v1_t;
-/* Maximum number of configurable BSS Load levels. The number of BSS Load
+/* Secured 2.0 supoorted devices i.e. 4364 */
+#define WL_PROXD_COLLECT_EVENT_DATA_VERSION_2 2
+typedef BWL_PRE_PACKED_STRUCT struct wl_proxd_collect_event_data_v2 {
+ uint32 H_LB[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint32 H_RX[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint8 ri_rr[FTM_TPK_RI_RR_LEN_SECURE_2_0];
+ wl_proxd_phy_error_t phy_err_mask;
+} BWL_POST_PACKED_STRUCT wl_proxd_collect_event_data_v2_t;
+#include <packed_section_end.h>
+
+#define WL_PROXD_COLLECT_EVENT_DATA_VERSION_3 3
+typedef struct wl_proxd_collect_event_data_v3 {
+ uint16 version;
+ uint16 length;
+ uint32 H_LB[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint32 H_RX[K_TOF_COLLECT_H_SIZE_20MHZ];
+ uint8 ri_rr[FTM_TPK_RI_RR_LEN_SECURE_2_0];
+ wl_proxd_phy_error_t phy_err_mask;
+} wl_proxd_collect_event_data_v3_t;
+
+#define WL_PROXD_COLLECT_EVENT_DATA_VERSION_MAX WL_PROXD_COLLECT_EVENT_DATA_VERSION_3
+
+/** Data returned by the bssload_report iovar. This is also the WLC_E_BSS_LOAD event data */
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct wl_bssload {
+ uint16 sta_count; /**< station count */
+ uint16 aac; /**< available admission capacity */
+ uint8 chan_util; /**< channel utilization */
+} BWL_POST_PACKED_STRUCT wl_bssload_t;
+#include <packed_section_end.h>
+
+/**
+ * Maximum number of configurable BSS Load levels. The number of BSS Load
* ranges is always 1 more than the number of configured levels. eg. if
* 3 levels of 10, 20, 30 are configured then this defines 4 load ranges:
* 0-10, 11-20, 21-30, 31-255. A WLC_E_BSS_LOAD event is generated each time
@@ -8081,68 +14648,202 @@
#define MAX_BSSLOAD_LEVELS 8
#define MAX_BSSLOAD_RANGES (MAX_BSSLOAD_LEVELS + 1)
-/* BSS Load event notification configuration. */
+/** BSS Load event notification configuration. */
typedef struct wl_bssload_cfg {
- uint32 rate_limit_msec; /* # of events posted to application will be limited to
+ uint32 rate_limit_msec; /**< # of events posted to application will be limited to
* one per specified period (0 to disable rate limit).
*/
- uint8 num_util_levels; /* Number of entries in util_levels[] below */
+ uint8 num_util_levels; /**< Number of entries in util_levels[] below */
uint8 util_levels[MAX_BSSLOAD_LEVELS];
- /* Variable number of BSS Load utilization levels in
+ /**< Variable number of BSS Load utilization levels in
* low to high order. An event will be posted each time
* a received beacon's BSS Load IE channel utilization
* value crosses a level.
*/
+ uint8 PAD[3];
} wl_bssload_cfg_t;
-/* Multiple roaming profile suport */
+/** Multiple roaming profile suport */
#define WL_MAX_ROAM_PROF_BRACKETS 4
-#define WL_MAX_ROAM_PROF_VER 1
+#define WL_ROAM_PROF_VER_0 0
+#define WL_ROAM_PROF_VER_1 1
+#define WL_ROAM_PROF_VER_2 2
+#define WL_MAX_ROAM_PROF_VER WL_ROAM_PROF_VER_1
#define WL_ROAM_PROF_NONE (0 << 0)
#define WL_ROAM_PROF_LAZY (1 << 0)
#define WL_ROAM_PROF_NO_CI (1 << 1)
#define WL_ROAM_PROF_SUSPEND (1 << 2)
#define WL_ROAM_PROF_SYNC_DTIM (1 << 6)
-#define WL_ROAM_PROF_DEFAULT (1 << 7) /* backward compatible single default profile */
+#define WL_ROAM_PROF_DEFAULT (1 << 7) /**< backward compatible single default profile */
-#define WL_ROAM_DELTA_2G 20 /* default 2G roam delta in dBm when "cu == 0" */
-#define WL_ROAM_DELTA_5G 15 /* default 5G roam delta in dBm when "cu == 0" */
-#define WL_SCORE_DELTA_DEFAULT 20 /* default score delta in percentage when "cu != 0" */
-
-#define WL_JOIN_PREF_RSSI_BOOST_MIN -70
-#define WL_ROAM_FULLSCAN_NTIMES 3
-#define WL_FULLROAM_PERIOD 70
-#define WL_ROAM_SCAN_PERIOD 10
#define WL_FACTOR_TABLE_MAX_LIMIT 5
-typedef struct wl_roam_prof {
- int8 roam_flags; /* bit flags */
- int8 roam_trigger; /* RSSI trigger level per profile/RSSI bracket */
+#define WL_CU_2G_ROAM_TRIGGER (-60)
+#define WL_CU_5G_ROAM_TRIGGER (-70)
+
+#define WL_CU_SCORE_DELTA_DEFAULT 20
+
+#define WL_MAX_CHANNEL_USAGE 0x0FF
+#define WL_CU_PERCENTAGE_DISABLE 0
+#define WL_CU_PERCENTAGE_DEFAULT 70
+#define WL_CU_PERCENTAGE_MAX 100
+#define WL_CU_CALC_DURATION_DEFAULT 10 /* seconds */
+#define WL_CU_CALC_DURATION_MAX 60 /* seconds */
+
+#define WL_ESTM_LOW_TRIGGER_DISABLE 0
+#define WL_ESTM_LOW_TRIGGER_DEFAULT 5 /* Mbps */
+#define WL_ESTM_LOW_TRIGGER_MAX 250 /* Mbps */
+#define WL_ESTM_ROAM_DELTA_DEFAULT 10
+
+typedef struct wl_roam_prof_v3 {
+ uint8 roam_flags; /**< bit flags */
+ int8 roam_trigger; /**< RSSI trigger level per profile/RSSI bracket */
int8 rssi_lower;
int8 roam_delta;
- int8 rssi_boost_thresh; /* Min RSSI to qualify for RSSI boost */
- int8 rssi_boost_delta; /* RSSI boost for AP in the other band */
- uint16 nfscan; /* nuber of full scan to start with */
+
+ /* if channel_usage if zero, roam_delta is rssi delta required for new AP */
+ /* if channel_usage if non-zero, roam_delta is score delta(%) required for new AP */
+ int8 rssi_boost_thresh; /**< Min RSSI to qualify for RSSI boost */
+ int8 rssi_boost_delta; /**< RSSI boost for AP in the other band */
+ uint16 nfscan; /**< number of full scan to start with */
uint16 fullscan_period;
uint16 init_scan_period;
uint16 backoff_multiplier;
uint16 max_scan_period;
- uint8 channel_usage;
- uint8 cu_avg_calc_dur;
-} wl_roam_prof_t;
+ uint8 channel_usage;
+ uint8 cu_avg_calc_dur;
+ uint16 estm_low_trigger; /**< ESTM low throughput roam trigger */
+ int8 estm_roam_delta; /**< ESTM low throughput roam delta */
+ uint8 pad;
+} wl_roam_prof_v3_t;
-typedef struct wl_roam_prof_band {
- uint32 band; /* Must be just one band */
- uint16 ver; /* version of this struct */
- uint16 len; /* length in bytes of this structure */
- wl_roam_prof_t roam_prof[WL_MAX_ROAM_PROF_BRACKETS];
-} wl_roam_prof_band_t;
+typedef struct wl_roam_prof_v2 {
+ int8 roam_flags; /**< bit flags */
+ int8 roam_trigger; /**< RSSI trigger level per profile/RSSI bracket */
+ int8 rssi_lower;
+ int8 roam_delta;
+
+ /* if channel_usage if zero, roam_delta is rssi delta required for new AP */
+ /* if channel_usage if non-zero, roam_delta is score delta(%) required for new AP */
+ int8 rssi_boost_thresh; /**< Min RSSI to qualify for RSSI boost */
+ int8 rssi_boost_delta; /**< RSSI boost for AP in the other band */
+ uint16 nfscan; /**< number of full scan to start with */
+ uint16 fullscan_period;
+ uint16 init_scan_period;
+ uint16 backoff_multiplier;
+ uint16 max_scan_period;
+ uint8 channel_usage;
+ uint8 cu_avg_calc_dur;
+ uint8 pad[2];
+} wl_roam_prof_v2_t;
+
+typedef struct wl_roam_prof_v1 {
+ int8 roam_flags; /**< bit flags */
+ int8 roam_trigger; /**< RSSI trigger level per profile/RSSI bracket */
+ int8 rssi_lower;
+ int8 roam_delta;
+
+ /* if channel_usage if zero, roam_delta is rssi delta required for new AP */
+ /* if channel_usage if non-zero, roam_delta is score delta(%) required for new AP */
+ int8 rssi_boost_thresh; /**< Min RSSI to qualify for RSSI boost */
+ int8 rssi_boost_delta; /**< RSSI boost for AP in the other band */
+ uint16 nfscan; /**< number of full scan to start with */
+ uint16 fullscan_period;
+ uint16 init_scan_period;
+ uint16 backoff_multiplier;
+ uint16 max_scan_period;
+} wl_roam_prof_v1_t;
+
+typedef struct wl_roam_prof_band_v3 {
+ uint32 band; /**< Must be just one band */
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length in bytes of this structure */
+ wl_roam_prof_v3_t roam_prof[WL_MAX_ROAM_PROF_BRACKETS];
+} wl_roam_prof_band_v3_t;
+
+typedef struct wl_roam_prof_band_v2 {
+ uint32 band; /**< Must be just one band */
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length in bytes of this structure */
+ wl_roam_prof_v2_t roam_prof[WL_MAX_ROAM_PROF_BRACKETS];
+} wl_roam_prof_band_v2_t;
+
+typedef struct wl_roam_prof_band_v1 {
+ uint32 band; /**< Must be just one band */
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length in bytes of this structure */
+ wl_roam_prof_v1_t roam_prof[WL_MAX_ROAM_PROF_BRACKETS];
+} wl_roam_prof_band_v1_t;
+
+#define BSS_MAXTABLE_SIZE 10
+#define WNM_BSS_SELECT_FACTOR_VERSION 1
+typedef struct wnm_bss_select_factor_params {
+ uint8 low;
+ uint8 high;
+ uint8 factor;
+ uint8 pad;
+} wnm_bss_select_factor_params_t;
+
+#define WNM_BSS_SELECT_FIXED_SIZE OFFSETOF(wnm_bss_select_factor_cfg_t, params)
+typedef struct wnm_bss_select_factor_cfg {
+ uint8 version;
+ uint8 band;
+ uint16 type;
+ uint16 pad;
+ uint16 count;
+ wnm_bss_select_factor_params_t params[1];
+} wnm_bss_select_factor_cfg_t;
+
+#define WNM_BSS_SELECT_WEIGHT_VERSION 1
+typedef struct wnm_bss_select_weight_cfg {
+ uint8 version;
+ uint8 band;
+ uint16 type;
+ uint16 weight; /* weightage for each type between 0 to 100 */
+} wnm_bss_select_weight_cfg_t;
+
+/* For branches before koala .. wbtext is part
+ * of wnm need to use below type only
+ */
+typedef struct wnm_btm_default_score_cfg {
+ uint32 default_score; /* default score */
+ uint8 band;
+} wnm_btm_default_score_cfg_t;
+
+/* For branches from koala and above .. wbtext is
+ * seperate module..need to use below type only
+ */
+typedef struct wbtext_btm_default_score_cfg {
+ uint32 default_score; /* default score */
+ uint8 band;
+} wbtext_btm_default_score_cfg_t;
+
+#define WNM_BSS_SELECT_TYPE_RSSI 0
+#define WNM_BSS_SELECT_TYPE_CU 1
+#define WNM_BSS_SELECT_TYPE_ESTM_DL 2
+
+#define WNM_BSSLOAD_MONITOR_VERSION 1
+typedef struct wnm_bssload_monitor_cfg {
+ uint8 version;
+ uint8 band;
+ uint8 duration; /* duration between 1 to 20sec */
+} wnm_bssload_monitor_cfg_t;
+
+#define WNM_ROAM_TRIGGER_VERSION 1
+typedef struct wnm_roam_trigger_cfg {
+ uint8 version;
+ uint8 band;
+ uint16 type;
+ int16 trigger; /* trigger for each type in new roam algorithm */
+} wnm_roam_trigger_cfg_t;
/* Data structures for Interface Create/Remove */
-#define WL_INTERFACE_CREATE_VER (0)
+#define WL_INTERFACE_CREATE_VER_1 1
+#define WL_INTERFACE_CREATE_VER_2 2
+#define WL_INTERFACE_CREATE_VER_3 3
/*
* The flags filed of the wl_interface_create is designed to be
@@ -8156,9 +14857,26 @@
* be created is STA or AP.
* 0 - Create a STA interface
* 1 - Create an AP interface
+ * NOTE: This Bit 0 is applicable for the WL_INTERFACE_CREATE_VER < 2
*/
#define WL_INTERFACE_CREATE_STA (0 << 0)
#define WL_INTERFACE_CREATE_AP (1 << 0)
+
+/*
+ * From revision >= 2 Bit 0 of flags field will not used be for STA or AP interface creation.
+ * "iftype" field shall be used for identifying the interface type.
+ */
+typedef enum wl_interface_type {
+ WL_INTERFACE_TYPE_STA = 0,
+ WL_INTERFACE_TYPE_AP = 1,
+ WL_INTERFACE_TYPE_AWDL = 2,
+ WL_INTERFACE_TYPE_NAN = 3,
+ WL_INTERFACE_TYPE_P2P_GO = 4,
+ WL_INTERFACE_TYPE_P2P_GC = 5,
+ WL_INTERFACE_TYPE_P2P_DISC = 6,
+ WL_INTERFACE_TYPE_IBSS = 7,
+ WL_INTERFACE_TYPE_MAX
+} wl_interface_type_t;
/*
* Bit 1 of flags field is used to inform whether MAC is present in the
@@ -8169,21 +14887,170 @@
#define WL_INTERFACE_MAC_DONT_USE (0 << 1)
#define WL_INTERFACE_MAC_USE (1 << 1)
+/*
+ * Bit 2 of flags field is used to inform whether core or wlc index
+ * is present in the data structure or not.
+ * 0 - Ignore wlc_index field
+ * 1 - Use the wlc_index field
+ */
+#define WL_INTERFACE_WLC_INDEX_DONT_USE (0 << 2)
+#define WL_INTERFACE_WLC_INDEX_USE (1 << 2)
+
+/*
+ * Bit 3 of flags field is used to create interface on the host requested interface index
+ * 0 - Ignore if_index field
+ * 1 - Use the if_index field
+ */
+#define WL_INTERFACE_IF_INDEX_USE (1 << 3)
+
+/*
+ * Bit 4 of flags field is used to assign BSSID
+ * 0 - Ignore bssid field
+ * 1 - Use the bssid field
+ */
+#define WL_INTERFACE_BSSID_INDEX_USE (1 << 4)
+
typedef struct wl_interface_create {
- uint16 ver; /* version of this struct */
- uint32 flags; /* flags that defines the operation */
- struct ether_addr mac_addr; /* Optional Mac address */
-} wl_interface_create_t;
+ uint16 ver; /**< version of this struct */
+ uint8 pad1[2]; /**< Padding bytes */
+ uint32 flags; /**< flags that defines the operation */
+ struct ether_addr mac_addr; /**< Optional Mac address */
+ uint8 pad2[2]; /**< Padding bytes */
+ uint32 wlc_index; /**< Optional wlc index */
+} wl_interface_create_v1_t;
-typedef struct wl_interface_info {
- uint16 ver; /* version of this struct */
- struct ether_addr mac_addr; /* MAC address of the interface */
- char ifname[BCM_MSG_IFNAME_MAX]; /* name of interface */
- uint8 bsscfgidx; /* source bsscfg index */
-} wl_interface_info_t;
+typedef struct wl_interface_create_v2 {
+ uint16 ver; /**< version of this struct */
+ uint8 pad1[2]; /**< Padding bytes */
+ uint32 flags; /**< flags that defines the operation */
+ struct ether_addr mac_addr; /**< Optional Mac address */
+ uint8 iftype; /**< Type of interface created */
+ uint8 pad2; /**< Padding bytes */
+ uint32 wlc_index; /**< Optional wlc index */
+} wl_interface_create_v2_t;
-/* no default structure packing */
-#include <packed_section_end.h>
+typedef struct wl_interface_create_v3 {
+ uint16 ver; /**< version of this struct */
+ uint16 len; /**< length of whole structure including variable length */
+ uint16 fixed_len; /**< Fixed length of this structure excluding data[] */
+ uint8 iftype; /**< Type of interface created */
+ uint8 wlc_index; /**< Optional wlc index */
+ uint32 flags; /**< flags that defines the operation */
+ struct ether_addr mac_addr; /**< Optional Mac address */
+ struct ether_addr bssid; /**< Optional BSSID */
+ uint8 if_index; /**< interface index requested by Host */
+ uint8 pad[3]; /**< Padding bytes to ensure data[] is at 32 bit aligned */
+ uint8 data[]; /**< Optional application/Module specific data */
+} wl_interface_create_v3_t;
+
+#define WL_INTERFACE_INFO_VER_1 1
+#define WL_INTERFACE_INFO_VER_2 2
+
+typedef struct wl_interface_info_v1 {
+ uint16 ver; /**< version of this struct */
+ struct ether_addr mac_addr; /**< MAC address of the interface */
+ char ifname[BCM_MSG_IFNAME_MAX]; /**< name of interface */
+ uint8 bsscfgidx; /**< source bsscfg index */
+ uint8 PAD;
+} wl_interface_info_v1_t;
+
+typedef struct wl_interface_info_v2 {
+ uint16 ver; /**< version of this struct */
+ uint16 length; /**< length of the whole structure */
+ struct ether_addr mac_addr; /**< MAC address of the interface */
+ uint8 bsscfgidx; /**< source bsscfg index */
+ uint8 if_index; /**< Interface index allocated by FW */
+ char ifname[BCM_MSG_IFNAME_MAX]; /**< name of interface */
+} wl_interface_info_v2_t;
+
+#define PHY_RXIQEST_AVERAGING_DELAY 10
+
+typedef struct wl_iqest_params {
+ uint32 rxiq;
+ uint8 niter;
+ uint8 delay;
+ uint8 PAD[2];
+} wl_iqest_params_t;
+
+typedef struct wl_iqest_sweep_params {
+ wl_iqest_params_t params;
+ uint8 nchannels;
+ uint8 channel[3]; /** variable */
+} wl_iqest_sweep_params_t;
+
+typedef struct wl_iqest_value {
+ uint8 channel;
+ uint8 PAD[3];
+ uint32 rxiq;
+} wl_iqest_value_t;
+
+typedef struct wl_iqest_result {
+ uint8 nvalues;
+ uint8 PAD[3];
+ wl_iqest_value_t value[1];
+} wl_iqest_result_t;
+
+#define WL_PRIO_ROAM_PROF_V1 (1u)
+
+typedef struct wl_prio_roam_prof_v1 {
+ uint16 version; /* Version info */
+ uint16 length; /* byte length of this structure */
+ uint8 prio_roam_mode; /* Roam mode RCC/RCC+Full Scan */
+ uint8 PAD[3];
+} wl_prio_roam_prof_v1_t;
+
+typedef enum wl_prio_roam_mode {
+ PRIO_ROAM_MODE_OFF = 0, /* Prio_Roam feature disable */
+ PRIO_ROAM_MODE_RCC_ONLY = 1, /* Scan RCC list only */
+ PRIO_ROAM_MODE_RCC_FULLSCAN = 2, /* Scan RCC list + Full scan */
+ PRIO_ROAM_MODE_FULLSCAN_ONLY = 3 /* Full Scan only */
+} wl_prio_roam_mode_t;
+
+/* BTCX AIBSS (Oxygen) Status */
+/* MC2 strobing status */
+typedef struct wlc_btc_aibss_info {
+ uint32 prev_tsf_l; // Lower 32 bits of last read of TSF
+ uint32 prev_tsf_h; // Higher 32 bits of last read of TSF
+ uint32 last_btinfo; // Last read of BT info
+ uint32 local_btinfo; // Local BT INFO BitMap
+ uint8 bt_out_of_sync_cnt; // BT not in sync with strobe
+ uint8 esco_off_cnt; // Count incremented when ESCO is off
+ uint8 strobe_enabled; // Set only in AIBSS mode
+ uint8 strobe_on; // strobe to BT is on for Oxygen
+ uint8 local_bt_in_sync; // Sync status of local BT when strobe is on
+ uint8 other_bt_in_sync; // Sync state of BT in other devices in AIBSS
+ uint8 local_bt_is_master; // Local BT is master
+ uint8 sco_prot_on; // eSCO Protection on in local device
+ uint8 other_esco_present; // eSCO status in other devices in AIBSS
+ uint8 rx_agg_change; // Indicates Rx Agg size needs to change
+ uint8 rx_agg_modified; // Rx Agg size modified
+ uint8 acl_grant_set; // ACL grants on for speeding up sync
+ uint8 write_ie_err_cnt; // BTCX Ie write error cnt
+ uint8 parse_ie_err_cnt; // BTCX IE parse error cnt
+ uint8 wci2_fail_cnt; // WCI2 init failure cnt
+ uint8 strobe_enable_err_cnt; // Strobe enable err cnt
+ uint8 strobe_init_err_cnt; // Strobe init err cnt
+ uint8 tsf_jump_cnt; // TSF jump cnt
+ uint8 acl_grant_cnt; // ALC grant cnt
+ uint8 pad1;
+ uint16 ibss_tsf_shm; // SHM address of strobe TSF
+ uint16 strobe_interval; /**< interval of the strobe */
+ uint32 strobe_missed_cnt; /**< missed strobe counter */
+} wlc_btc_aibss_info_t;
+
+#define WLC_BTC_AIBSS_STATUS_VER 1
+#define WLC_BTC_AIBSS_STATUS_LEN (sizeof(wlc_btc_aibss_status_t) - 2 * (sizeof(uint16)))
+
+typedef struct wlc_btc_aibss_status {
+ uint16 version; // Version #
+ uint16 len; // Length of the structure(excluding len & version)
+ int32 mode; // Current value of btc_mode
+ uint16 bth_period; // bt coex period. read from shm.
+ uint16 agg_off_bm; // AGG OFF BM read from SHM
+ uint8 bth_active; // bt active session
+ uint8 pad[3];
+ wlc_btc_aibss_info_t aibss_info; // Structure definition above
+} wlc_btc_aibss_status_t;
typedef enum {
STATE_NONE = 0,
@@ -8241,6 +15108,8 @@
uint8 passphrase_len;
uint8 passphrase[TBOW_MAX_PASSPHRASE_LEN];
chanspec_t chanspec;
+ uint8 PAD[2];
+ uint32 channel;
} tbow_setup_netinfo_t;
typedef enum tbow_ho_opmode {
@@ -8255,35 +15124,276 @@
} tbow_ho_opmode_t;
/* Beacon trim feature statistics */
-/* Configuration params */
-#define M_BCNTRIM_N (0) /* Enable/Disable Beacon Trim */
-#define M_BCNTRIM_TIMEND (1) /* Waiting time for TIM IE to end */
-#define M_BCNTRIM_TSFTLRN (2) /* TSF tolerance value (usecs) */
-/* PSM internal use */
-#define M_BCNTRIM_PREVBCNLEN (3) /* Beacon length excluding the TIM IE */
-#define M_BCNTRIM_N_COUNTER (4) /* PSM's local beacon trim counter */
-#define M_BCNTRIM_STATE (5) /* PSM's Beacon trim status register */
-#define M_BCNTRIM_TIMLEN (6) /* TIM IE Length */
-#define M_BCNTRIM_BMPCTL (7) /* Bitmap control word */
-#define M_BCNTRIM_TSF_L (8) /* Lower TSF word */
-#define M_BCNTRIM_TSF_ML (9) /* Lower middle TSF word */
-#define M_BCNTRIM_RSSI (10) /* Partial beacon RSSI */
-#define M_BCNTRIM_CHANNEL (11) /* Partial beacon channel */
-/* Trimming Counters */
-#define M_BCNTRIM_SBCNRXED (12) /* Self-BSSID beacon received */
-#define M_BCNTRIM_CANTRIM (13) /* Num of beacons which can be trimmed */
-#define M_BCNTRIM_TRIMMED (14) /* # beacons which were trimmed */
-#define M_BCNTRIM_BCNLENCNG (15) /* # beacons trimmed due to length change */
-#define M_BCNTRIM_TSFADJ (16) /* # beacons not trimmed due to large TSF delta */
-#define M_BCNTRIM_TIMNOTFOUND (17) /* # beacons not trimmed due to TIM missing */
-#define M_RXTSFTMRVAL_WD0 (18)
-#define M_RXTSFTMRVAL_WD1 (19)
-#define M_RXTSFTMRVAL_WD2 (20)
-#define M_RXTSFTMRVAL_WD3 (21)
-#define BCNTRIM_STATS_NUMPARAMS (22) /* 16 bit words */
+/* configuration */
+#define BCNTRIMST_PER 0 /* Number of beacons to trim (0: disable) */
+#define BCNTRIMST_TIMEND 1 /* Number of bytes till TIM IE */
+#define BCNTRIMST_TSFLMT 2 /* TSF tolerance value (usecs) */
+/* internal use */
+#define BCNTRIMST_CUR 3 /* PSM's local beacon trim counter */
+#define BCNTRIMST_PREVLEN 4 /* Beacon length excluding the TIM IE */
+#define BCNTRIMST_TIMLEN 5 /* TIM IE Length */
+#define BCNTRIMST_RSSI 6 /* Partial beacon RSSI */
+#define BCNTRIMST_CHAN 7 /* Partial beacon channel */
+/* debug stat (off by default) */
+#define BCNTRIMST_DUR 8 /* RX duration until beacon trimmed */
+#define BCNTRIMST_RXMBSS 9 /* MYBSSID beacon received */
+#define BCNTRIMST_CANTRIM 10 /* # beacons which were trimmed */
+#define BCNTRIMST_LENCHG 11 /* # beacons not trimmed due to length change */
+#define BCNTRIMST_TSFDRF 12 /* # beacons not trimmed due to large TSF delta */
+#define BCNTRIMST_NOTIM 13 /* # beacons not trimmed due to TIM missing */
+#define BCNTRIMST_NUM 14
+
+#define WL_BCNTRIM_STATUS_VERSION_1 1
+typedef struct wl_bcntrim_status_query_v1 {
+ uint16 version;
+ uint16 len; /* Total length includes fixed fields */
+ uint8 reset; /* reset after reading the stats */
+ uint8 pad[3]; /* 4-byte alignment */
+} wl_bcntrim_status_query_v1_t;
+
+typedef struct wl_bcntrim_status_v1 {
+ uint16 version;
+ uint16 len; /* Total length includes fixed fields and variable data[] */
+ uint8 curr_slice_id; /* slice index of the interface */
+ uint8 applied_cfg; /* applied bcntrim N threshold */
+ uint8 pad[2]; /* 4-byte alignment */
+ uint32 fw_status; /* Bits representing bcntrim disable reason in FW */
+ uint32 total_disable_dur; /* total duration (msec) bcntrim remains
+ disabled due to FW disable reasons
+ */
+ uint32 data[]; /* variable length data containing stats */
+} wl_bcntrim_status_v1_t;
+
+#define BCNTRIM_STATS_MAX 10 /* Total stats part of the status data[] */
+
+/* Bits for FW status */
+#define WL_BCNTRIM_DISABLE_HOST 0x1 /* Host disabled bcntrim through bcntrim IOVar */
+#define WL_BCNTRIM_DISABLE_PHY_RATE 0x2 /* bcntrim disabled because beacon rx rate is
+ * higher than phy_rate_thresh
+ */
+#define WL_BCNTRIM_DISABLE_QUIET_IE 0x4 /* bcntrim disable when Quiet IE present */
+#define WL_BCNTRIM_DISABLE_QBSSLOAD_IE 0x8 /* bcntrim disable when QBSS Load IE present */
+#define WL_BCNTRIM_DISABLE_OPERMODE_IE 0x10 /* bcntrim dsiable when opermode IE is present */
+#define WL_BCNTRIM_DISABLE_CSA_IE 0x20 /* bcntrim dsiable when CSA IE is present */
+
+#define BCNTRIM_DISABLE_THRESHOLD_TIME 1000 * 10 /* enable bcntrim after a threshold (10sec)
+ * when disabled due to above mentioned IE's
+ */
+#define WL_BCNTRIM_CFG_VERSION_1 1
+/* Common IOVAR struct */
+typedef struct wl_bcntrim_cfg_v1 {
+ uint16 version;
+ uint16 len; /* Total length includes fixed fields and variable data[] */
+ uint16 subcmd_id; /* subcommand id */
+ uint16 pad; /* pad/reserved */
+ uint8 data[]; /* subcommand data; could be empty */
+} wl_bcntrim_cfg_v1_t;
+
+/* subcommands ids */
+enum {
+ WL_BCNTRIM_CFG_SUBCMD_PHY_RATE_THRESH = 0, /* PHY rate threshold above
+ which bcntrim is not applied
+ */
+ WL_BCNTRIM_CFG_SUBCMD_OVERRIDE_DISABLE_MASK = 1, /* Override bcntrim disable reasons */
+ WL_BCNTRIM_CFG_SUBCMD_TSF_DRIFT_LIMIT = 2 /* TSF drift limit to consider bcntrim */
+};
+
+#define BCNTRIM_MAX_PHY_RATE 48 /* in 500Kbps */
+#define BCNTRIM_MAX_TSF_DRIFT 65535 /* in usec */
+#define WL_BCNTRIM_OVERRIDE_DISABLE_MASK \
+ (WL_BCNTRIM_DISABLE_QUIET_IE | WL_BCNTRIM_DISABLE_QBSSLOAD_IE)
+
+/* WL_BCNTRIM_CFG_SUBCMD_PHY_RATE_TRESH */
+typedef struct wl_bcntrim_cfg_phy_rate_thresh {
+ uint32 rate; /* beacon rate (in 500kbps units) */
+} wl_bcntrim_cfg_phy_rate_thresh_t;
+
+/* WL_BCNTRIM_CFG_SUBCMD_OVERRIDE_DISABLE_MASK */
+typedef struct wl_bcntrim_cfg_override_disable_mask {
+ uint32 mask; /* bits representing individual disable reason to override */
+} wl_bcntrim_cfg_override_disable_mask_t;
+
+/* WL_BCNTRIM_CFG_SUBCMD_TSF_DRIFT_LIMIT */
+typedef struct wl_bcntrim_cfg_tsf_drift_limit {
+ uint16 drift; /* tsf drift limit specified in usec */
+ uint8 pad[2]; /* 4-byte alignment */
+} wl_bcntrim_cfg_tsf_drift_limit_t;
+
+/* -------------- TX Power Cap --------------- */
#define TXPWRCAP_MAX_NUM_CORES 8
#define TXPWRCAP_MAX_NUM_ANTENNAS (TXPWRCAP_MAX_NUM_CORES * 2)
+
+#define TXPWRCAP_MAX_NUM_CORES_V3 4
+#define TXPWRCAP_MAX_NUM_ANTENNAS_V3 (TXPWRCAP_MAX_NUM_CORES_V3 * 2)
+
+#define TXPWRCAP_NUM_SUBBANDS 5
+#define TXPWRCAP_MAX_NUM_SUBGRPS 10
+
+/* IOVAR txcapconfig enum's */
+#define TXPWRCAPCONFIG_WCI2 0u
+#define TXPWRCAPCONFIG_HOST 1u
+#define TXPWRCAPCONFIG_WCI2_AND_HOST 2u
+#define TXPWRCAPCONFIG_NONE 0xFFu
+
+/* IOVAR txcapstate enum's */
+#define TXPWRCAPSTATE_LOW_CAP 0
+#define TXPWRCAPSTATE_HIGH_CAP 1
+#define TXPWRCAPSTATE_HOST_LOW_WCI2_LOW_CAP 0
+#define TXPWRCAPSTATE_HOST_LOW_WCI2_HIGH_CAP 1
+#define TXPWRCAPSTATE_HOST_HIGH_WCI2_LOW_CAP 2
+#define TXPWRCAPSTATE_HOST_HIGH_WCI2_HIGH_CAP 3
+
+/* IOVAR txcapconfig and txcapstate structure is shared: SET and GET */
+#define TXPWRCAPCTL_VERSION 2
+#define TXPWRCAPCTL_VERSION_3 3
+
+typedef struct wl_txpwrcap_ctl {
+ uint8 version;
+ uint8 ctl[TXPWRCAP_NUM_SUBBANDS];
+} wl_txpwrcap_ctl_t;
+
+typedef struct wl_txpwrcap_ctl_v3 {
+ uint8 version;
+ uint8 ctl[TXPWRCAP_MAX_NUM_SUBGRPS];
+} wl_txpwrcap_ctl_v3_t;
+
+/* IOVAR txcapdump structure: GET only */
+#define TXPWRCAP_DUMP_VERSION 2
+typedef struct wl_txpwrcap_dump {
+ uint8 version;
+ uint8 pad0;
+ uint8 current_country[2];
+ uint32 current_channel;
+ uint8 config[TXPWRCAP_NUM_SUBBANDS];
+ uint8 state[TXPWRCAP_NUM_SUBBANDS];
+ uint8 high_cap_state_enabled;
+ uint8 wci2_cell_status_last;
+ uint8 download_present;
+ uint8 num_subbands;
+ uint8 num_antennas;
+ uint8 num_antennas_per_core[TXPWRCAP_MAX_NUM_CORES];
+ uint8 num_cc_groups;
+ uint8 current_country_cc_group_info_index;
+ int8 low_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ int8 high_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ uint8 PAD[3];
+} wl_txpwrcap_dump_t;
+
+typedef struct wl_txpwrcap_dump_v3 {
+ uint8 version;
+ uint8 pad0;
+ uint8 current_country[2];
+ uint32 current_channel;
+ uint8 config[TXPWRCAP_NUM_SUBBANDS];
+ uint8 state[TXPWRCAP_NUM_SUBBANDS];
+ uint8 high_cap_state_enabled;
+ uint8 wci2_cell_status_last;
+ uint8 download_present;
+ uint8 num_subbands;
+ uint8 num_antennas;
+ uint8 num_antennas_per_core[TXPWRCAP_MAX_NUM_CORES];
+ uint8 num_cc_groups;
+ uint8 current_country_cc_group_info_index;
+ uint8 cap_states_per_cc_group;
+ int8 host_low_wci2_low_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ int8 host_low_wci2_high_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ int8 host_high_wci2_low_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ int8 host_high_wci2_high_cap[TXPWRCAP_MAX_NUM_ANTENNAS*TXPWRCAP_NUM_SUBBANDS];
+ uint8 PAD[2];
+} wl_txpwrcap_dump_v3_t;
+
+/*
+* Capability flag for wl_txpwrcap_tbl_v2_t and wl_txpwrcap_t
+* The index into pwrs will be: 0: onbody-cck, 1: onbody-ofdm, 2:offbody-cck, 3:offbody-ofdm
+*
+* For 5G power in SDB case as well as for non-SDB case, the value of flag will be: CAP_ONOFF_BODY
+* The index into pwrs will be: 0: onbody, 1: offbody-ofdm
+*/
+
+#define CAP_ONOFF_BODY (0x1) /* on/off body only */
+#define CAP_CCK_OFDM (0x2) /* cck/ofdm capability only */
+#define CAP_LTE_CELL (0x4) /* cell on/off capability; required for iOS builds */
+#define CAP_HEAD_BODY (0x8) /* head/body capability */
+#define CAP_2G_DEPON_5G (0x10) /* 2G pwr caps depend on other slice 5G subband */
+#define CAP_SISO_MIMO (0x20) /* Siso/Mimo Separate Power Caps */
+#define CAP_ANT_TX (0x40) /* Separate Power Caps based on cell ant tx value */
+#define CAP_ONOFF_BODY_CCK_OFDM (CAP_ONOFF_BODY | CAP_CCK_OFDM)
+#define CAP_TXPWR_ALL (CAP_ONOFF_BODY|CAP_CCK_OFDM|CAP_LTE_CELL|\
+ CAP_SISO_MIMO|CAP_HEAD_BODY|CAP_ANT_TX)
+
+#define TXHDR_SEC_MAX 5u /* Deprecated. Kept till removed in all branches */
+#define TXPWRCAP_MAX_STATES 4u
+#define TXPWRCAP_MAX_STATES_V3 10u
+#define TXPWRCAP_CCKOFDM_ONOFFBODY_MAX_STATES 4u
+#define TXPWRCAP_ONOFFBODY_MAX_STATES 2u
+#define TXPWRCAP_ONOFFCELL_MAX_STATES 2u
+
+#define TXHDR_SEC_NONSDB_MAIN_2G 0
+#define TXHDR_SEC_NONSDB_MAIN_5G 1
+#define TXHDR_SEC_NONSDB_AUX_2G 2
+#define TXHDR_SEC_NONSDB_AUX_5G 3
+#define TXHDR_SEC_SDB_MAIN_2G 4
+#define TXHDR_SEC_SDB_MAIN_5G 5
+#define TXHDR_SEC_SDB_AUX_2G 6
+#define TXHDR_SEC_SDB_AUX_5G 7
+#define TXHDR_MAX_SECTION 8
+
+#define WL_TXPWRCAP_MAX_SLICES 2
+#define WL_TXPWRCAPDUMP_VER 4
+
+#define WL_TXPWRCAP_VERSION_2 2
+#define WL_TXPWRCAP_VERSION_3 3
+
+typedef struct wl_txpwrcap {
+ uint8 capability;
+ uint8 num_cap_states;
+ uint8 section; /* Index from above,eg. TXHDR_SEC_NONSDB */
+ int8 pwrs[][TXPWRCAP_NUM_SUBBANDS][TXPWRCAP_MAX_NUM_CORES];
+} wl_txpwrcap_t;
+
+typedef struct {
+ uint8 capability;
+ uint8 num_cap_states;
+ uint8 num_subgrps;
+ uint8 section; /* Index from above,eg. TXHDR_SEC_NONSDB */
+ int8 pwrs[][TXPWRCAP_MAX_NUM_SUBGRPS][TXPWRCAP_MAX_NUM_ANTENNAS_V3];
+} wl_txpwrcap_v2_t;
+
+#define TXPWRCAP_DUMP_VERSION_4 4
+#define TXPWRCAP_DUMP_VERSION_5 5
+
+typedef struct wl_txpwrcap_dump_v4 {
+ uint8 version;
+ uint8 num_pwrcap;
+ uint8 current_country[2];
+ uint32 current_channel;
+ uint8 download_present;
+ uint8 num_cores; /* number cores on slice */
+ uint8 num_cc_groups; /* number cc groups */
+ uint8 current_country_cc_group_info_index;
+ /* first power cap always exist
+ * On main,-non-sdb follows by sdb2g and then sdb5g
+ * On aux slice - aux2g then aux5g.
+ */
+ wl_txpwrcap_t pwrcap; /* first power cap */
+} wl_txpwrcap_dump_v4_t;
+
+typedef struct wl_txpwrcap_dump_v5 {
+ uint8 version;
+ uint8 num_pwrcap;
+ uint8 current_country[2];
+ uint8 current_channel;
+ uint8 high_cap_state_enabled;
+ uint8 reserved[2];
+ uint8 download_present;
+ uint8 num_ants; /* number antenna slice */
+ uint8 num_cc_groups; /* number cc groups */
+ uint8 current_country_cc_group_info_index;
+ uint8 ant_tx; /* current value of ant_tx */
+ uint8 cell_status; /* current value of cell status */
+ int8 pwrcap[]; /* variable size power caps (wl_txpwrcap_v2_t) */
+} wl_txpwrcap_dump_v5_t;
typedef struct wl_txpwrcap_tbl {
uint8 num_antennas_per_core[TXPWRCAP_MAX_NUM_CORES];
@@ -8292,37 +15402,410 @@
int8 pwrcap_cell_off[TXPWRCAP_MAX_NUM_ANTENNAS]; /* qdBm units */
} wl_txpwrcap_tbl_t;
-/* -------------- dynamic BTCOEX --------------- */
-/* require strict packing */
-#include <packed_section_start.h>
+typedef struct wl_txpwrcap_tbl_v2 {
+ uint8 version;
+ uint8 length; /* size of entire structure, including the pwrs */
+ uint8 capability; /* capability bitmap */
+ uint8 num_cores; /* number of cores i.e. entries in each cap state row */
+ /*
+ * pwrs array has TXPWRCAP_MAX_STATES rows - one for each cap state.
+ * Each row has up to TXPWRCAP_MAX_NUM_CORES entries - one for each core.
+ */
+ uint8 pwrs[][TXPWRCAP_MAX_NUM_CORES]; /* qdBm units */
+} wl_txpwrcap_tbl_v2_t;
-#define DCTL_TROWS 2 /* currently practical number of rows */
-#define DCTL_TROWS_MAX 4 /* 2 extra rows RFU */
+typedef struct wl_txpwrcap_tbl_v3 {
+ uint8 version;
+ uint8 length; /* size of entire structure, including the pwrs */
+ uint8 capability; /* capability bitmap */
+ uint8 num_cores; /* number of cores */
+ uint8 num_antennas_per_core[TXPWRCAP_MAX_NUM_CORES_V3];
+ /*
+ * pwrs array has TXPWRCAP_MAX_STATES rows - one for each cap state.
+ * Each row has up to TXPWRCAP_MAX_NUM_ANTENNAS entries - for each antenna.
+ * Included in the rows of powers are rows for fail safe.
+ */
+ int8 pwrs[][TXPWRCAP_MAX_NUM_ANTENNAS_V3]; /* qdBm units */
+} wl_txpwrcap_tbl_v3_t;
+
+/* ##### Ecounters section ##### */
+#define ECOUNTERS_VERSION_1 1
+
+/* Input structure for ecounters IOVAR */
+typedef struct ecounters_config_request {
+ uint16 version; /* config version */
+ uint16 set; /* Set where data will go. */
+ uint16 size; /* Size of the set. */
+ uint16 timeout; /* timeout in seconds. */
+ uint16 num_events; /* Number of events to report. */
+ uint16 ntypes; /* Number of entries in type array. */
+ uint16 type[1]; /* Statistics Types (tags) to retrieve. */
+} ecounters_config_request_t;
+
+#define ECOUNTERS_EVENTMSGS_VERSION_1 1
+#define ECOUNTERS_TRIGGER_CONFIG_VERSION_1 1
+
+#define ECOUNTERS_EVENTMSGS_EXT_MASK_OFFSET \
+ OFFSETOF(ecounters_eventmsgs_ext_t, mask[0])
+
+#define ECOUNTERS_TRIG_CONFIG_TYPE_OFFSET \
+ OFFSETOF(ecounters_trigger_config_t, type[0])
+
+typedef struct ecounters_eventmsgs_ext {
+ uint8 version;
+ uint8 len;
+ uint8 mask[1];
+} ecounters_eventmsgs_ext_t;
+
+typedef struct ecounters_trigger_config {
+ uint16 version; /* version */
+ uint16 set; /* set where data should go */
+ uint16 rsvd; /* reserved */
+ uint16 pad; /* pad/reserved */
+ uint16 ntypes; /* number of types/tags */
+ uint16 type[1]; /* list of types */
+} ecounters_trigger_config_t;
+
+#define ECOUNTERS_TRIGGER_REASON_VERSION_1 1
+typedef enum {
+ /* Triggered due to timer based ecounters */
+ ECOUNTERS_TRIGGER_REASON_TIMER = 0,
+ /* Triggered due to event based configuration */
+ ECOUNTERS_TRIGGER_REASON_EVENTS = 1,
+ ECOUNTERS_TRIGGER_REASON_D2H_EVENTS = 2,
+ ECOUNTERS_TRIGGER_REASON_H2D_EVENTS = 3,
+ ECOUNTERS_TRIGGER_REASON_USER_EVENTS = 4,
+ ECOUNTERS_TRIGGER_REASON_MAX = 5
+} ecounters_trigger_reasons_list_t;
+
+typedef struct ecounters_trigger_reason {
+ uint16 version; /* version */
+ uint16 trigger_reason; /* trigger reason */
+ uint32 sub_reason_code; /* sub reason code */
+ uint32 trigger_time_now; /* time in ms at trigger */
+ uint32 host_ref_time; /* host ref time */
+} ecounters_trigger_reason_t;
+
+#define WL_LQM_VERSION_1 1
+
+/* For wl_lqm_t flags field */
+#define WL_LQM_CURRENT_BSS_VALID 0x1
+#define WL_LQM_TARGET_BSS_VALID 0x2
+
+#define WL_PERIODIC_COMPACT_CNTRS_VER_1 (1)
+#define WL_PERIODIC_TXBF_CNTRS_VER_1 (1)
+typedef struct {
+ uint16 version;
+ uint16 pad;
+ /* taken from wl_wlc_cnt_t */
+ uint32 txfail;
+ /* taken from wl_cnt_ge40mcst_v1_t */
+ uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
+ * Control Management (includes retransmissions)
+ */
+ uint32 txrtsfrm; /**< number of RTS sent out by the MAC */
+ uint32 txctsfrm; /**< number of CTS sent out by the MAC */
+ uint32 txback; /**< blockack txcnt */
+ uint32 txucast; /**< number of unicast tx expecting response other than cts/cwcts */
+ uint32 txnoack; /**< dot11ACKFailureCount */
+ uint32 txframe; /**< tx data frames */
+ uint32 txretrans; /**< tx mac retransmits */
+ uint32 txpspoll; /**< Number of TX PS-poll */
+
+ uint32 rxrsptmout; /**< number of response timeouts for transmitted frames
+ * expecting a response
+ */
+ uint32 txrtsfail; /**< number of rts transmission failure that reach retry limit */
+ uint32 rxstrt; /**< number of received frames with a good PLCP */
+ uint32 rxbadplcp; /**< number of parity check of the PLCP header failed */
+ uint32 rxcrsglitch; /**< PHY was able to correlate the preamble but not the header */
+ uint32 rxnodelim; /**< number of no valid delimiter detected by ampdu parser */
+ uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
+ uint32 bphy_rxcrsglitch; /**< PHY count of bphy glitches */
+ uint32 rxbadfcs; /**< number of frames for which the CRC check failed in the MAC */
+ uint32 rxf0ovfl; /**< number of receive fifo 0 overflows */
+ uint32 rxf1ovfl; /**< number of receive fifo 0 overflows */
+ uint32 rxhlovfl; /**< number of length / header fifo overflows */
+ uint32 rxrtsucast; /**< number of unicast RTS addressed to the MAC (good FCS) */
+ uint32 rxctsucast; /**< number of unicast CTS addressed to the MAC (good FCS) */
+ uint32 rxackucast; /**< number of ucast ACKS received (good FCS) */
+ uint32 rxback; /**< blockack rxcnt */
+ uint32 rxbeaconmbss; /**< beacons received from member of BSS */
+ uint32 rxdtucastmbss; /**< number of received DATA frames with good FCS and matching RA */
+ uint32 rxbeaconobss; /**< beacons received from other BSS */
+ uint32 rxdtucastobss; /**< number of unicast frames addressed to the MAC from
+ * other BSS (WDS FRAME)
+ */
+ uint32 rxdtocast; /**< number of received DATA frames (good FCS and no matching RA) */
+ uint32 rxrtsocast; /**< number of received RTS not addressed to the MAC */
+ uint32 rxctsocast; /**< number of received CTS not addressed to the MAC */
+ uint32 rxdtmcast; /**< number of RX Data multicast frames received by the MAC */
+ uint32 rxmpdu_mu; /**< Number of MU MPDUs received */
+ uint32 rxtoolate; /**< receive too late */
+ uint32 rxframe; /**< rx data frames */
+ uint32 lqcm_report; /**< lqcm metric tx/rx idx */
+ uint32 tx_toss_cnt; /* number of tx packets tossed */
+ uint32 rx_toss_cnt; /* number of rx packets tossed */
+ uint32 last_tx_toss_rsn; /* reason because of which last tx pkt tossed */
+ uint32 last_rx_toss_rsn; /* reason because of which last rx pkt tossed */
+ uint32 txbcnfrm; /**< beacons transmitted */
+} wl_periodic_compact_cntrs_v1_t;
+
+#define WL_PERIODIC_COMPACT_CNTRS_VER_2 (2)
+typedef struct {
+ uint16 version;
+ uint16 pad;
+ /* taken from wl_wlc_cnt_t */
+ uint32 txfail;
+ /* taken from wl_cnt_ge40mcst_v1_t */
+ uint32 txallfrm; /**< total number of frames sent, incl. Data, ACK, RTS, CTS,
+ * Control Management (includes retransmissions)
+ */
+ uint32 txrtsfrm; /**< number of RTS sent out by the MAC */
+ uint32 txctsfrm; /**< number of CTS sent out by the MAC */
+ uint32 txback; /**< blockack txcnt */
+ uint32 txucast; /**< number of unicast tx expecting response other than cts/cwcts */
+ uint32 txnoack; /**< dot11ACKFailureCount */
+ uint32 txframe; /**< tx data frames */
+ uint32 txretrans; /**< tx mac retransmits */
+ uint32 txpspoll; /**< Number of TX PS-poll */
+
+ uint32 rxrsptmout; /**< number of response timeouts for transmitted frames
+ * expecting a response
+ */
+ uint32 txrtsfail; /**< number of rts transmission failure that reach retry limit */
+ uint32 rxstrt; /**< number of received frames with a good PLCP */
+ uint32 rxbadplcp; /**< number of parity check of the PLCP header failed */
+ uint32 rxcrsglitch; /**< PHY was able to correlate the preamble but not the header */
+ uint32 rxnodelim; /**< number of no valid delimiter detected by ampdu parser */
+ uint32 bphy_badplcp; /**< number of bad PLCP reception on BPHY rate */
+ uint32 bphy_rxcrsglitch; /**< PHY count of bphy glitches */
+ uint32 rxbadfcs; /**< number of frames for which the CRC check failed in the MAC */
+ uint32 rxf0ovfl; /**< number of receive fifo 0 overflows */
+ uint32 rxf1ovfl; /**< number of receive fifo 0 overflows */
+ uint32 rxhlovfl; /**< number of length / header fifo overflows */
+ uint32 rxrtsucast; /**< number of unicast RTS addressed to the MAC (good FCS) */
+ uint32 rxctsucast; /**< number of unicast CTS addressed to the MAC (good FCS) */
+ uint32 rxackucast; /**< number of ucast ACKS received (good FCS) */
+ uint32 rxback; /**< blockack rxcnt */
+ uint32 rxbeaconmbss; /**< beacons received from member of BSS */
+ uint32 rxdtucastmbss; /**< number of received DATA frames with good FCS and matching RA */
+ uint32 rxbeaconobss; /**< beacons received from other BSS */
+ uint32 rxdtucastobss; /**< number of unicast frames addressed to the MAC from
+ * other BSS (WDS FRAME)
+ */
+ uint32 rxdtocast; /**< number of received DATA frames (good FCS and no matching RA) */
+ uint32 rxrtsocast; /**< number of received RTS not addressed to the MAC */
+ uint32 rxctsocast; /**< number of received CTS not addressed to the MAC */
+ uint32 rxdtmcast; /**< number of RX Data multicast frames received by the MAC */
+ uint32 rxmpdu_mu; /**< Number of MU MPDUs received */
+ uint32 rxtoolate; /**< receive too late */
+ uint32 rxframe; /**< rx data frames */
+ uint32 lqcm_report; /**< lqcm metric tx/rx idx */
+ uint32 tx_toss_cnt; /* number of tx packets tossed */
+ uint32 rx_toss_cnt; /* number of rx packets tossed */
+ uint32 last_tx_toss_rsn; /* reason because of which last tx pkt tossed */
+ uint32 last_rx_toss_rsn; /* reason because of which last rx pkt tossed */
+ uint32 txbcnfrm; /**< beacons transmitted */
+ uint32 rxretry; /* Number of rx packets received after retry */
+ uint32 rxdup; /* Number of dump packet. Indicates whether peer is receiving ack */
+ uint32 chswitch_cnt; /* Number of channel switches */
+ uint32 pm_dur; /* Total sleep time in PM, msecs */
+} wl_periodic_compact_cntrs_v2_t;
+
+#define WL_PERIODIC_COMPACT_HE_CNTRS_VER_1 (1)
+typedef struct {
+ uint16 version;
+ uint16 len;
+ uint32 he_rxtrig_rand;
+ uint32 he_colormiss_cnt;
+ uint32 he_txmtid_back;
+ uint32 he_rxmtid_back;
+ uint32 he_rxmsta_back;
+ uint32 he_rxtrig_basic;
+ uint32 he_rxtrig_murts;
+ uint32 he_rxtrig_bsrp;
+ uint32 he_rxdlmu;
+ uint32 he_physu_rx;
+ uint32 he_txtbppdu;
+} wl_compact_he_cnt_wlc_v1_t;
+
+typedef struct {
+ uint16 version;
+ uint16 coreup;
+ uint32 txndpa;
+ uint32 txndp;
+ uint32 rxsf;
+ uint32 txbfm;
+ uint32 rxndpa_u;
+ uint32 rxndpa_m;
+ uint32 bferpt;
+ uint32 rxbfpoll;
+ uint32 txsf;
+} wl_periodic_txbf_cntrs_v1_t;
+
+typedef struct {
+ struct ether_addr BSSID;
+ chanspec_t chanspec;
+ int32 rssi;
+ int32 snr;
+} wl_rx_signal_metric_t;
+
+typedef struct {
+ uint8 version;
+ uint8 flags;
+ uint16 pad;
+ int32 noise_level; /* current noise level */
+ wl_rx_signal_metric_t current_bss;
+ wl_rx_signal_metric_t target_bss;
+} wl_lqm_t;
+
+#define WL_PERIODIC_IF_STATE_VER_1 (1)
+typedef struct wl_if_state_compact {
+ uint8 version;
+ uint8 assoc_state;
+ uint8 antenna_count; /**< number of valid antenna rssi */
+ int8 noise_level; /**< noise right after tx (in dBm) */
+ int8 snr; /* current noise level */
+ int8 rssi_sum; /**< summed rssi across all antennas */
+ uint16 pad16;
+ int8 rssi_ant[WL_RSSI_ANT_MAX]; /**< rssi per antenna */
+ struct ether_addr BSSID;
+ chanspec_t chanspec;
+} wl_if_state_compact_t;
+
+#define WL_EVENT_STATISTICS_VER_1 (1)
+/* Event based statistics ecounters */
+typedef struct {
+ uint16 version;
+ uint16 pad;
+ struct ether_addr BSSID; /* BSSID of the BSS */
+ uint32 txdeauthivalclass;
+} wl_event_based_statistics_v1_t;
+
+/* ##### Ecounters v2 section ##### */
+
+#define ECOUNTERS_VERSION_2 2
+
+/* Enumeration of various ecounters request types. This namespace is different from
+ * global reportable stats namespace.
+*/
+enum {
+ WL_ECOUNTERS_XTLV_REPORT_REQ = 1
+};
+
+/* Input structure for ecounters IOVAR */
+typedef struct ecounters_config_request_v2 {
+ uint16 version; /* config version */
+ uint16 len; /* Length of this struct including variable len */
+ uint16 logset; /* Set where data will go. */
+ uint16 reporting_period; /* reporting_period */
+ uint16 num_reports; /* Number of timer expirations to report on */
+ uint8 pad[2]; /* Reserved for future use */
+ uint8 ecounters_xtlvs[]; /* Statistics Types (tags) to retrieve. */
+} ecounters_config_request_v2_t;
+
+#define ECOUNTERS_STATS_TYPES_FLAG_SLICE 0x1
+#define ECOUNTERS_STATS_TYPES_FLAG_IFACE 0x2
+#define ECOUNTERS_STATS_TYPES_FLAG_GLOBAL 0x4
+#define ECOUNTERS_STATS_TYPES_DEFAULT 0x8
+
+/* Slice mask bits */
+#define ECOUNTERS_STATS_TYPES_SLICE_MASK_SLICE0 0x1
+#define ECOUNTERS_STATS_TYPES_SLICE_MASK_SLICE1 0x2
+
+typedef struct ecounters_stats_types_report_req {
+ /* flags: bit0 = slice, bit1 = iface, bit2 = global,
+ * rest reserved
+ */
+ uint16 flags;
+ uint16 if_index; /* host interface index */
+ uint16 slice_mask; /* bit0 = slice0, bit1=slice1, rest reserved */
+ uint8 pad[2]; /* padding */
+ uint8 stats_types_req[]; /* XTLVs of requested types */
+} ecounters_stats_types_report_req_t;
+
+/* ##### Ecounters_Eventmsgs v2 section ##### */
+
+#define ECOUNTERS_EVENTMSGS_VERSION_2 2
+
+typedef struct event_ecounters_config_request_v2 {
+ uint16 version; /* config version */
+ uint16 len; /* Length of this struct including variable len */
+ uint16 logset; /* Set where data will go. */
+ uint16 event_id; /* Event id for which this config is meant for */
+ uint8 flags; /* Config flags */
+ uint8 pad[3]; /* Reserved for future use */
+ uint8 ecounters_xtlvs[]; /* Statistics Types (tags) to retrieve. */
+} event_ecounters_config_request_v2_t;
+
+#define EVENT_ECOUNTERS_FLAGS_ADD (1 << 0) /* Add configuration for the event_id if set */
+#define EVENT_ECOUNTERS_FLAGS_DEL (1 << 1) /* Delete configuration for event_id if set */
+#define EVENT_ECOUNTERS_FLAGS_ANYIF (1 << 2) /* Interface filtering disable / off bit */
+#define EVENT_ECOUNTERS_FLAGS_BE (1 << 3) /* If cleared report stats of
+ * one event log buffer
+ */
+#define EVENT_ECOUNTERS_FLAGS_DEL_ALL (1 << 4) /* Delete all the configurations of
+ * event ecounters if set
+ */
+
+#define EVENT_ECOUNTERS_FLAGS_BUS (1 << 5) /* Add configuration for the bus events */
+#define EVENT_ECOUNTERS_FLAGS_BUS_H2D (1 << 6) /* Add configuration for the bus direction
+ * 0 - D2H and 1 - H2D
+ */
+
+#define EVENT_ECOUNTERS_FLAGS_DELAYED_FLUSH (1 << 7) /* Flush only when half of the total size
+ * of blocks gets filled. This is to avoid
+ * many interrupts to host.
+ */
+#define EVENT_ECOUNTERS_FLAGS_USER (1 << 6) /* Add configuration for user defined events
+ * Reuse the same flag as H2D
+ */
+
+/* Ecounters suspend resume */
+#define ECOUNTERS_SUSPEND_VERSION_V1 1
+/* To be used in populating suspend_mask and suspend_bitmap */
+#define ECOUNTERS_SUSPEND_TIMER (1 << ECOUNTERS_TRIGGER_REASON_TIMER)
+#define ECOUNTERS_SUSPEND_EVENTS (1 << ECOUNTERS_TRIGGER_REASON_EVENTS)
+
+typedef struct ecounters_suspend {
+ uint16 version;
+ uint16 len;
+ uint32 suspend_bitmap; /* type of ecounter reporting to be suspended */
+ uint32 suspend_mask; /* type of ecounter reporting to be suspended */
+} ecounters_suspend_t;
+
+/* -------------- dynamic BTCOEX --------------- */
+#define DCTL_TROWS 2 /**< currently practical number of rows */
+#define DCTL_TROWS_MAX 4 /**< 2 extra rows RFU */
/* DYNCTL profile flags */
-#define DCTL_FLAGS_DYNCTL (1 << 0) /* 1 - enabled, 0 - legacy only */
-#define DCTL_FLAGS_DESENSE (1 << 1) /* auto desense is enabled */
-#define DCTL_FLAGS_MSWITCH (1 << 2) /* mode switching is enabled */
+#define DCTL_FLAGS_DISABLED 0 /**< default value: all features disabled */
+#define DCTL_FLAGS_DYNCTL (1 << 0) /**< 1 - enabled, 0 - legacy only */
+#define DCTL_FLAGS_DESENSE (1 << 1) /**< auto desense is enabled */
+#define DCTL_FLAGS_MSWITCH (1 << 2) /**< mode switching is enabled */
+#define DCTL_FLAGS_PWRCTRL (1 << 3) /**< Tx power control is enabled */
/* for now AGG on/off is handled separately */
-#define DCTL_FLAGS_TX_AGG_OFF (1 << 3) /* TBD: allow TX agg Off */
-#define DCTL_FLAGS_RX_AGG_OFF (1 << 4) /* TBD: allow RX agg Off */
+#define DCTL_FLAGS_TX_AGG_OFF (1 << 4) /**< TBD: allow TX agg Off */
+#define DCTL_FLAGS_RX_AGG_OFF (1 << 5) /**< TBD: allow RX agg Off */
/* used for dry run testing only */
-#define DCTL_FLAGS_DRYRUN (1 << 7) /* Eenables dynctl dry run mode */
+#define DCTL_FLAGS_DRYRUN (1 << 7) /**< Enables dynctl dry run mode */
#define IS_DYNCTL_ON(prof) ((prof->flags & DCTL_FLAGS_DYNCTL) != 0)
#define IS_DESENSE_ON(prof) ((prof->flags & DCTL_FLAGS_DESENSE) != 0)
#define IS_MSWITCH_ON(prof) ((prof->flags & DCTL_FLAGS_MSWITCH) != 0)
+#define IS_PWRCTRL_ON(prof) ((prof->flags & DCTL_FLAGS_PWRCTRL) != 0)
/* desense level currently in use */
#define DESENSE_OFF 0
#define DFLT_DESENSE_MID 12
#define DFLT_DESENSE_HIGH 2
-/*
+/**
* dynctl data points(a set of btpwr & wlrssi thresholds)
* for mode & desense switching
*/
typedef struct btc_thr_data {
- int8 mode; /* used by desense sw */
- int8 bt_pwr; /* BT tx power threshold */
- int8 bt_rssi; /* BT rssi threshold */
+ int8 mode; /**< used by desense sw */
+ int8 bt_pwr; /**< BT tx power threshold */
+ int8 bt_rssi; /**< BT rssi threshold */
/* wl rssi range when mode or desense change may be needed */
int8 wl_rssi_high;
int8 wl_rssi_low;
@@ -8330,90 +15813,95 @@
/* dynctl. profile data structure */
#define DCTL_PROFILE_VER 0x01
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct dctl_prof {
- uint8 version; /* dynctl profile version */
+ uint8 version; /**< dynctl profile version */
/* dynctl profile flags bit:0 - dynctl On, bit:1 dsns On, bit:2 mode sw On, */
- uint8 flags; /* bit[6:3] reserved, bit7 - Dryrun (sim) - On */
- /* wl desense levels to apply */
+ uint8 flags; /**< bit[6:3] reserved, bit7 - Dryrun (sim) - On */
+ /** wl desense levels to apply */
uint8 dflt_dsns_level;
uint8 low_dsns_level;
uint8 mid_dsns_level;
uint8 high_dsns_level;
- /* mode switching hysteresis in dBm */
+ /** mode switching hysteresis in dBm */
int8 msw_btrssi_hyster;
- /* default btcoex mode */
+ /** default btcoex mode */
uint8 default_btc_mode;
- /* num of active rows in mode switching table */
+ /** num of active rows in mode switching table */
uint8 msw_rows;
- /* num of rows in desense table */
+ /** num of rows in desense table */
uint8 dsns_rows;
- /* dynctl mode switching data table */
+ /** dynctl mode switching data table */
btc_thr_data_t msw_data[DCTL_TROWS_MAX];
- /* dynctl desense switching data table */
+ /** dynctl desense switching data table */
btc_thr_data_t dsns_data[DCTL_TROWS_MAX];
} BWL_POST_PACKED_STRUCT dctl_prof_t;
+#include <packed_section_end.h>
-/* dynctl status info */
+/** dynctl status info */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct dynctl_status {
- bool sim_on; /* true if simulation is On */
- uint16 bt_pwr_shm; /* BT per/task power as read from ucode */
- int8 bt_pwr; /* BT pwr extracted & converted to dBm */
- int8 bt_rssi; /* BT rssi in dBm */
- int8 wl_rssi; /* last wl rssi reading used by btcoex */
- uint8 dsns_level; /* current desense level */
- uint8 btc_mode; /* current btcoex mode */
+ uint8 sim_on; /**< true if simulation is On */
+ uint16 bt_pwr_shm; /**< BT per/task power as read from ucode */
+ int8 bt_pwr; /**< BT pwr extracted & converted to dBm */
+ int8 bt_rssi; /**< BT rssi in dBm */
+ int8 wl_rssi; /**< last wl rssi reading used by btcoex */
+ uint8 dsns_level; /**< current desense level */
+ uint8 btc_mode; /**< current btcoex mode */
/* add more status items if needed, pad to 4 BB if needed */
} BWL_POST_PACKED_STRUCT dynctl_status_t;
+#include <packed_section_end.h>
-/* dynctl simulation (dryrun data) */
+/** dynctl simulation (dryrun data) */
+#include <packed_section_start.h>
typedef BWL_PRE_PACKED_STRUCT struct dynctl_sim {
- bool sim_on; /* simulation mode on/off */
- int8 btpwr; /* simulated BT power in dBm */
- int8 btrssi; /* simulated BT rssi in dBm */
- int8 wlrssi; /* simulated WL rssi in dBm */
+ uint8 sim_on; /**< simulation mode on/off */
+ int8 btpwr; /**< simulated BT power in dBm */
+ int8 btrssi; /**< simulated BT rssi in dBm */
+ int8 wlrssi; /**< simulated WL rssi in dBm */
} BWL_POST_PACKED_STRUCT dynctl_sim_t;
/* no default structure packing */
#include <packed_section_end.h>
-/* PTK key maintained per SCB */
+/** PTK key maintained per SCB */
#define RSN_TEMP_ENCR_KEY_LEN 16
typedef struct wpa_ptk {
- uint8 kck[RSN_KCK_LENGTH]; /* EAPOL-Key Key Confirmation Key (KCK) */
- uint8 kek[RSN_KEK_LENGTH]; /* EAPOL-Key Key Encryption Key (KEK) */
- uint8 tk1[RSN_TEMP_ENCR_KEY_LEN]; /* Temporal Key 1 (TK1) */
- uint8 tk2[RSN_TEMP_ENCR_KEY_LEN]; /* Temporal Key 2 (TK2) */
+ uint8 kck[RSN_KCK_LENGTH]; /**< EAPOL-Key Key Confirmation Key (KCK) */
+ uint8 kek[RSN_KEK_LENGTH]; /**< EAPOL-Key Key Encryption Key (KEK) */
+ uint8 tk1[RSN_TEMP_ENCR_KEY_LEN]; /**< Temporal Key 1 (TK1) */
+ uint8 tk2[RSN_TEMP_ENCR_KEY_LEN]; /**< Temporal Key 2 (TK2) */
} wpa_ptk_t;
-/* GTK key maintained per SCB */
+/** GTK key maintained per SCB */
typedef struct wpa_gtk {
uint32 idx;
uint32 key_len;
uint8 key[DOT11_MAX_KEY_SIZE];
} wpa_gtk_t;
-/* FBT Auth Response Data structure */
+/** FBT Auth Response Data structure */
typedef struct wlc_fbt_auth_resp {
- uint8 macaddr[ETHER_ADDR_LEN]; /* station mac address */
+ uint8 macaddr[ETHER_ADDR_LEN]; /**< station mac address */
uint8 pad[2];
uint8 pmk_r1_name[WPA2_PMKID_LEN];
- wpa_ptk_t ptk; /* pairwise key */
- wpa_gtk_t gtk; /* group key */
+ wpa_ptk_t ptk; /**< pairwise key */
+ wpa_gtk_t gtk; /**< group key */
uint32 ie_len;
- uint8 status; /* Status of parsing FBT authentication
+ uint8 status; /**< Status of parsing FBT authentication
Request in application
*/
- uint8 ies[1]; /* IEs contains MDIE, RSNIE,
+ uint8 ies[1]; /**< IEs contains MDIE, RSNIE,
FBTIE (ANonce, SNonce,R0KH-ID, R1KH-ID)
*/
} wlc_fbt_auth_resp_t;
-/* FBT Action Response frame */
+/** FBT Action Response frame */
typedef struct wlc_fbt_action_resp {
- uint16 version; /* structure version */
- uint16 length; /* length of structure */
- uint8 macaddr[ETHER_ADDR_LEN]; /* station mac address */
- uint8 data_len; /* len of ie from Category */
- uint8 data[1]; /* data contains category, action, sta address, target ap,
+ uint16 version; /**< structure version */
+ uint16 length; /**< length of structure */
+ uint8 macaddr[ETHER_ADDR_LEN]; /**< station mac address */
+ uint8 data_len; /**< len of ie from Category */
+ uint8 data[1]; /**< data contains category, action, sta address, target ap,
status code,fbt response frame body
*/
} wlc_fbt_action_resp_t;
@@ -8424,18 +15912,113 @@
typedef struct _wl_macdbg_pmac_param_t {
char type[MACDBG_PMAC_OBJ_TYPE_LEN];
uint8 step;
- uint8 num;
+ uint8 w_en;
+ uint16 num;
uint32 bitmap;
- bool addr_raw;
+ uint8 addr_raw;
uint8 addr_num;
uint16 addr[MACDBG_PMAC_ADDR_INPUT_MAXNUM];
+ uint8 pad0[2];
+ uint32 w_val;
} wl_macdbg_pmac_param_t;
-/* IOVAR 'svmp_mem' parameter. Used to read/clear svmp memory */
+/** IOVAR 'svmp_sampcol' parameter. Used to set and read SVMP_SAMPLE_COLLECT's setting */
+typedef struct wl_svmp_sampcol_param {
+ uint32 version; /* version */
+ uint8 enable;
+ uint8 trigger_mode; /* SVMP_SAMPCOL_TRIGGER */
+ uint8 trigger_mode_s[2]; /* SVMP_SAMPCOL_PKTPROC */
+ uint8 data_samplerate; /* SVMP_SAMPCOL_SAMPLERATE */
+ uint8 data_sel_phy1; /* SVMP_SAMPCOL_PHY1MUX */
+ uint8 data_sel_rx1; /* SVMP_SAMPCOL_RX1MUX without iqCompOut */
+ uint8 data_sel_dualcap; /* SVMP_SAMPCOL_RX1MUX */
+ uint8 pack_mode; /* SVMP_SAMPCOL_PACK */
+ uint8 pack_order;
+ uint8 pack_cfix_fmt;
+ uint8 pack_1core_sel;
+ uint16 waitcnt;
+ uint16 caplen;
+ uint32 buff_addr_start; /* in word-size (2-bytes) */
+ uint32 buff_addr_end; /* note: Tcl in byte-size, HW in vector-size (8-bytes) */
+ uint8 int2vasip;
+ uint8 PAD;
+ uint16 status;
+} wl_svmp_sampcol_t;
+
+#define WL_SVMP_SAMPCOL_PARAMS_VERSION 1
+
+enum {
+ SVMP_SAMPCOL_TRIGGER_PKTPROC_TRANSITION = 0,
+ SVMP_SAMPCOL_TRIGGER_FORCE_IMMEDIATE,
+ SVMP_SAMPCOL_TRIGGER_RADAR_DET
+};
+
+enum {
+ SVMP_SAMPCOL_PHY1MUX_GPIOOUT = 0,
+ SVMP_SAMPCOL_PHY1MUX_FFT,
+ SVMP_SAMPCOL_PHY1MUX_DBGHX,
+ SVMP_SAMPCOL_PHY1MUX_RX1MUX
+};
+
+enum {
+ SVMP_SAMPCOL_RX1MUX_FARROWOUT = 4,
+ SVMP_SAMPCOL_RX1MUX_IQCOMPOUT,
+ SVMP_SAMPCOL_RX1MUX_DCFILTEROUT,
+ SVMP_SAMPCOL_RX1MUX_RXFILTEROUT,
+ SVMP_SAMPCOL_RX1MUX_ACIFILTEROUT
+};
+
+enum {
+ SVMP_SAMPCOL_SAMPLERATE_1XBW = 0,
+ SVMP_SAMPCOL_SAMPLERATE_2XBW
+};
+
+enum {
+ SVMP_SAMPCOL_PACK_DUALCAP = 0,
+ SVMP_SAMPCOL_PACK_4CORE,
+ SVMP_SAMPCOL_PACK_2CORE,
+ SVMP_SAMPCOL_PACK_1CORE
+};
+
+enum {
+ SVMP_SAMPCOL_PKTPROC_RESET = 0,
+ SVMP_SAMPCOL_PKTPROC_CARRIER_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_WAIT_FOR_NB_PWR,
+ SVMP_SAMPCOL_PKTPROC_WAIT_FOR_W1_PWR,
+ SVMP_SAMPCOL_PKTPROC_WAIT_FOR_W2_PWR,
+ SVMP_SAMPCOL_PKTPROC_OFDM_PHY,
+ SVMP_SAMPCOL_PKTPROC_TIMING_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_CHAN_EST_1,
+ SVMP_SAMPCOL_PKTPROC_LEG_SIG_DEC,
+ SVMP_SAMPCOL_PKTPROC_SIG_DECODE_1,
+ SVMP_SAMPCOL_PKTPROC_SIG_DECODE_2,
+ SVMP_SAMPCOL_PKTPROC_HT_AGC,
+ SVMP_SAMPCOL_PKTPROC_CHAN_EST_2,
+ SVMP_SAMPCOL_PKTPROC_PAY_DECODE,
+ SVMP_SAMPCOL_PKTPROC_DSSS_CCK_PHY,
+ SVMP_SAMPCOL_PKTPROC_WAIT_ENERGY_DROP,
+ SVMP_SAMPCOL_PKTPROC_WAIT_NCLKS,
+ SVMP_SAMPCOL_PKTPROC_PAY_DEC_EXT,
+ SVMP_SAMPCOL_PKTPROC_SIG_FAIL_DELAY,
+ SVMP_SAMPCOL_PKTPROC_RIFS_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_BOARD_SWITCH_DIV_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_DSSS_CCK_BOARD_SWITCH_DIV_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_CHAN_EST_3,
+ SVMP_SAMPCOL_PKTPROC_CHAN_EST_4,
+ SVMP_SAMPCOL_PKTPROC_FINE_TIMING_SEARCH,
+ SVMP_SAMPCOL_PKTPROC_SET_CLIP_GAIN,
+ SVMP_SAMPCOL_PKTPROC_NAP,
+ SVMP_SAMPCOL_PKTPROC_VHT_SIGA_DEC,
+ SVMP_SAMPCOL_PKTPROC_VHT_SIGB_DEC,
+ SVMP_SAMPCOL_PKTPROC_PKT_ABORT,
+ SVMP_SAMPCOL_PKTPROC_DCCAL
+};
+
+/** IOVAR 'svmp_mem' parameter. Used to read/clear svmp memory */
typedef struct svmp_mem {
- uint32 addr; /* offset to read svmp memory from vasip base address */
- uint16 len; /* length in count of uint16's */
- uint16 val; /* set the range of addr/len with a value */
+ uint32 addr; /**< offset to read svmp memory from vasip base address */
+ uint16 len; /**< length in count of uint16's */
+ uint16 val; /**< set the range of addr/len with a value */
} svmp_mem_t;
/** IOVAR 'mu_rate' parameter. read/set mu rate for upto four users */
@@ -8443,9 +16026,88 @@
typedef struct mu_rate {
uint16 version; /**< version of the structure as defined by MU_RATE_CFG_VERSION */
uint16 length; /**< length of entire structure */
- bool auto_rate; /**< enable/disable auto rate */
+ uint8 auto_rate; /**< enable/disable auto rate */
+ uint8 PAD;
uint16 rate_user[4]; /**< rate per each of four users, set to -1 for no change */
} mu_rate_t;
+
+/** IOVAR 'mu_group' parameter. Used to set and read MU group recommendation setting */
+#define WL_MU_GROUP_AUTO_COMMAND -1
+#define WL_MU_GROUP_PARAMS_VERSION 3
+#define WL_MU_GROUP_METHOD_NAMELEN 64
+#define WL_MU_GROUP_NGROUP_MAX 15
+#define WL_MU_GROUP_NUSER_MAX 4
+#define WL_MU_GROUP_METHOD_MIN 0
+#define WL_MU_GROUP_NUMBER_AUTO_MIN 1
+#define WL_MU_GROUP_NUMBER_AUTO_MAX 15
+#define WL_MU_GROUP_NUMBER_FORCED_MAX 8
+#define WL_MU_GROUP_METHOD_OLD 0
+#define WL_MU_GROUP_MODE_AUTO 0
+#define WL_MU_GROUP_MODE_FORCED 1
+#define WL_MU_GROUP_FORCED_1GROUP 1
+#define WL_MU_GROUP_ENTRY_EMPTY -1
+typedef struct mu_group {
+ uint32 version; /* version */
+ int16 forced; /* forced group recommendation */
+ int16 forced_group_mcs; /* forced group with mcs */
+ int16 forced_group_num; /* forced group number */
+ int16 group_option[WL_MU_GROUP_NGROUP_MAX][WL_MU_GROUP_NUSER_MAX];
+ /* set mode for forced grouping and read mode for auto grouping */
+ int16 group_GID[WL_MU_GROUP_NGROUP_MAX];
+ int16 group_method; /* methof for VASIP group recommendation */
+ int16 group_number; /* requested number for VASIP group recommendation */
+ int16 auto_group_num; /* exact number from VASIP group recommendation */
+ int8 group_method_name[WL_MU_GROUP_METHOD_NAMELEN];
+ uint8 PAD[2];
+} mu_group_t;
+
+typedef struct mupkteng_sta {
+ struct ether_addr ea;
+ uint8 PAD[2];
+ int32 nrxchain;
+ int32 idx;
+} mupkteng_sta_t;
+
+typedef struct mupkteng_client {
+ int32 rspec;
+ int32 idx;
+ int32 flen;
+ int32 nframes;
+} mupkteng_client_t;
+
+typedef struct mupkteng_tx {
+ mupkteng_client_t client[8];
+ int32 nclients;
+ int32 ntx;
+} mupkteng_tx_t;
+
+/*
+ * MU Packet engine interface.
+ * The following two definitions will go into
+ * wlioctl_defs.h
+ * when wl utility changes are merged to EAGLE TOB & Trunk
+ */
+
+#define WL_MUPKTENG_PER_TX_START 0x10
+#define WL_MUPKTENG_PER_TX_STOP 0x20
+
+/** IOVAR 'mu_policy' parameter. Used to configure MU admission control policies */
+#define WL_MU_POLICY_PARAMS_VERSION 1
+#define WL_MU_POLICY_SCHED_DEFAULT 60
+#define WL_MU_POLICY_DISABLED 0
+#define WL_MU_POLICY_ENABLED 1
+#define WL_MU_POLICY_NRX_MIN 1
+#define WL_MU_POLICY_NRX_MAX 2
+typedef struct mu_policy {
+ uint16 version;
+ uint16 length;
+ uint32 sched_timer;
+ uint32 pfmon;
+ uint32 pfmon_gpos;
+ uint32 samebw;
+ uint32 nrx;
+ uint32 max_muclients;
+} mu_policy_t;
#define WL_NAN_BAND_STR_SIZE 5 /* sizeof ("auto") */
@@ -8458,49 +16120,7 @@
NAN_BAND_INVALID = 0xFF
};
-#if defined(WL_LINKSTAT)
-typedef struct {
- uint32 preamble;
- uint32 nss;
- uint32 bw;
- uint32 rateMcsIdx;
- uint32 reserved;
- uint32 bitrate;
-} wifi_rate;
-
-typedef struct {
- uint16 version;
- uint16 length;
- uint32 tx_mpdu;
- uint32 rx_mpdu;
- uint32 mpdu_lost;
- uint32 retries;
- uint32 retries_short;
- uint32 retries_long;
- wifi_rate rate;
-} wifi_rate_stat_t;
-
-typedef int32 wifi_radio;
-
-typedef struct {
- uint16 version;
- uint16 length;
- wifi_radio radio;
- uint32 on_time;
- uint32 tx_time;
- uint32 rx_time;
- uint32 on_time_scan;
- uint32 on_time_nbd;
- uint32 on_time_gscan;
- uint32 on_time_roam_scan;
- uint32 on_time_pno_scan;
- uint32 on_time_hs20;
- uint32 num_channels;
- uint8 channels[1];
-} wifi_radio_stat;
-#endif /* WL_LINKSTAT */
-
-#ifdef WL11ULB
+/* ifdef WL11ULB */
/* ULB Mode configured via "ulb_mode" IOVAR */
enum {
ULB_MODE_DISABLED = 0,
@@ -8523,25 +16143,182 @@
/* Add all other enums before this */
MAX_SUPP_ULB_BW
} ulb_bw_type_t;
-#endif /* WL11ULB */
+/* endif WL11ULB */
-#if defined(WLRCC)
-#define MAX_ROAM_CHANNEL 20
+#define WL_MESH_IOCTL_VERSION 1
+#define MESH_IOC_BUFSZ 512 /* sufficient ioc buff size for mesh */
+
+#ifdef WLMESH
+typedef struct mesh_peer_info_ext {
+ mesh_peer_info_t peer_info;
+ uint8 pad1;
+ uint16 local_aid; /* AID generated by *local* to peer */
+ uint32 entry_state; /* see MESH_PEER_ENTRY_STATE_ACTIVE etc; valid
+ * ONLY for internal peering requests
+ */
+ int8 rssi;
+ uint8 pad2;
+ struct ether_addr ea; /* peer ea */
+} mesh_peer_info_ext_t;
+
+/* #ifdef WLMESH */
+typedef struct mesh_peer_info_dump {
+ uint32 buflen;
+ uint32 version;
+ uint16 count; /* number of results */
+ uint16 remaining; /* remaining rsults */
+ mesh_peer_info_ext_t mpi_ext[1];
+} mesh_peer_info_dump_t;
+#define WL_MESH_PEER_RES_FIXED_SIZE (sizeof(mesh_peer_info_dump_t) - sizeof(mesh_peer_info_ext_t))
+
+#endif /* WLMESH */
+/* container for mesh iovtls & events */
+typedef struct wl_mesh_ioc {
+ uint16 version; /* interface command or event version */
+ uint16 id; /* mesh ioctl cmd ID */
+ uint16 len; /* total length of all tlv records in data[] */
+ uint16 pad; /* pad to be 32 bit aligment */
+ uint8 data[]; /* var len payload of bcm_xtlv_t type */
+} wl_mesh_ioc_t;
+
+enum wl_mesh_cmds {
+ WL_MESH_CMD_ENABLE = 1,
+ WL_MESH_CMD_JOIN = 2,
+ WL_MESH_CMD_PEER_STATUS = 3,
+ WL_MESH_CMD_ADD_ROUTE = 4,
+ WL_MESH_CMD_DEL_ROUTE = 5,
+ WL_MESH_CMD_ADD_FILTER = 6,
+ WL_MESH_CMD_ENAB_AL_METRIC = 7
+};
+
+enum wl_mesh_cmd_xtlv_id {
+ WL_MESH_XTLV_ENABLE = 1,
+ WL_MESH_XTLV_JOIN = 2,
+ WL_MESH_XTLV_STATUS = 3,
+ WL_MESH_XTLV_ADD_ROUTE = 4,
+ WL_MESH_XTLV_DEL_ROUTE = 5,
+ WL_MESH_XTLV_ADD_FILTER = 6,
+ WL_MESH_XTLV_ENAB_AIRLINK = 7
+};
+/* endif WLMESH */
+
+/* Fast BSS Transition parameter configuration */
+#define FBT_PARAM_CURRENT_VERSION 0
+
+typedef struct _wl_fbt_params {
+ uint16 version; /* version of the structure
+ * as defined by FBT_PARAM_CURRENT_VERSION
+ */
+ uint16 length; /* length of the entire structure */
+
+ uint16 param_type; /* type of parameter defined below */
+ uint16 param_len; /* length of the param_value */
+ uint8 param_value[1]; /* variable length */
+} wl_fbt_params_t;
+
+#define WL_FBT_PARAM_TYPE_RSNIE 0
+#define WL_FBT_PARAM_TYPE_FTIE 0x1
+#define WL_FBT_PARAM_TYPE_SNONCE 0x2
+#define WL_FBT_PARAM_TYPE_MDE 0x3
+#define WL_FBT_PARAM_TYPE_PMK_R0_NAME 0x4
+#define WL_FBT_PARAM_TYPE_R0_KHID 0x5
+#define WL_FBT_PARAM_TYPE_R1_KHID 0x6
+#define WL_FBT_PARAM_TYPE_FIRST_INVALID 0x7
+
+/* Assoc Mgr commands for fine control of assoc */
+#define WL_ASSOC_MGR_CURRENT_VERSION 0x0
typedef struct {
- int n;
+ uint16 version; /* version of the structure as
+ * defined by WL_ASSOC_MGR_CURRENT_VERSION
+ */
+ uint16 length; /* length of the entire structure */
+
+ uint16 cmd;
+ uint16 params;
+} wl_assoc_mgr_cmd_t;
+
+#define WL_ASSOC_MGR_CMD_PAUSE_ON_EVT 0 /* have assoc pause on certain events */
+#define WL_ASSOC_MGR_CMD_ABORT_ASSOC 1
+
+#define WL_ASSOC_MGR_PARAMS_EVENT_NONE 0 /* use this to resume as well as clear */
+#define WL_ASSOC_MGR_PARAMS_PAUSE_EVENT_AUTH_RESP 1
+
+#define WL_WINVER_STRUCT_VER_1 (1)
+
+typedef struct wl_winver {
+
+ /* Version and length of this structure. Length includes all fields in wl_winver_t */
+ uint16 struct_version;
+ uint16 struct_length;
+
+ /* Windows operating system version info (Microsoft provided) */
+ struct {
+ uint32 major_ver;
+ uint32 minor_ver;
+ uint32 build;
+ } os_runtime;
+
+ /* NDIS runtime version (Microsoft provided) */
+ struct {
+ uint16 major_ver;
+ uint16 minor_ver;
+ } ndis_runtime;
+
+ /* NDIS Driver version (Broadcom provided) */
+ struct {
+ uint16 major_ver;
+ uint16 minor_ver;
+ } ndis_driver;
+
+ /* WDI Upper Edge (UE) Driver version (Microsoft provided) */
+ struct {
+ uint8 major_ver;
+ uint8 minor_ver;
+ uint8 suffix;
+ } wdi_ue;
+
+ /* WDI Lower Edge (LE) Driver version (Broadcom provided) */
+ struct {
+ uint8 major_ver;
+ uint8 minor_ver;
+ uint8 suffix;
+ } wdi_le;
+ uint8 PAD[2];
+} wl_winver_t;
+
+/* defined(WLRCC) || defined(ROAM_CHANNEL_CACHE) */
+#define MAX_ROAM_CHANNEL 20
+typedef struct {
+ int32 n;
chanspec_t channels[MAX_ROAM_CHANNEL];
} wl_roam_channel_list_t;
-#endif
+/* endif RCC || ROAM_CHANNEL_CACHE */
-#ifdef MFP
/* values for IOV_MFP arg */
enum {
WL_MFP_NONE = 0,
WL_MFP_CAPABLE,
WL_MFP_REQUIRED
};
-#endif /* MFP */
+
+typedef enum {
+ CHANSW_UNKNOWN = 0, /* channel switch due to unknown reason */
+ CHANSW_SCAN = 1, /* channel switch due to scan */
+ CHANSW_PHYCAL = 2, /* channel switch due to phy calibration */
+ CHANSW_INIT = 3, /* channel set at WLC up time */
+ CHANSW_ASSOC = 4, /* channel switch due to association */
+ CHANSW_ROAM = 5, /* channel switch due to roam */
+ CHANSW_MCHAN = 6, /* channel switch triggered by mchan module */
+ CHANSW_IOVAR = 7, /* channel switch due to IOVAR */
+ CHANSW_CSA_DFS = 8, /* channel switch due to chan switch announcement from AP */
+ CHANSW_APCS = 9, /* Channel switch from AP channel select module */
+ CHANSW_AWDL = 10, /* channel switch due to AWDL */
+ CHANSW_FBT = 11, /* Channel switch from FBT module for action frame response */
+ CHANSW_UPDBW = 12, /* channel switch at update bandwidth */
+ CHANSW_ULB = 13, /* channel switch at ULB */
+ CHANSW_LAST = 14 /* last channel switch reason */
+} chansw_reason_t;
/*
* WOWL unassociated mode power svae pattern.
@@ -8551,217 +16328,2883 @@
uint16 sleep_interval;
} wowl_radio_duty_cycle_t;
-#define WLC_IOCTL_VERSION_PEER_RSSI 1
-#define WLC_IOCTL_CMD_PEER_RSSI_PEERS_CNT 1
-#define WLC_IOCTL_CMD_PEER_RSSI_PEER_REG 2
-#define WLC_IOCTL_CMD_PEER_RSSI_PEER_RSSI 3
+typedef struct nd_ra_ol_limits {
+ uint16 version; /* version of the iovar buffer */
+ uint16 type; /* type of data provided */
+ uint16 length; /* length of the entire structure */
+ uint16 pad1; /* pad union to 4 byte boundary */
+ union {
+ struct {
+ uint16 min_time; /* seconds, min time for RA offload hold */
+ uint16 lifetime_percent;
+ /* percent, lifetime percentage for offload hold time */
+ } lifetime_relative;
+ struct {
+ uint16 hold_time; /* seconds, RA offload hold time */
+ uint16 pad2; /* unused */
+ } fixed;
+ } limits;
+} nd_ra_ol_limits_t;
-typedef struct wl_peer_rssi {
- int32 version;
- int32 cmd;
- int32 max_cnt;
- int32 cur_val;
- struct ether_addr ea;
-} wl_peer_rssi_t;
+#define ND_RA_OL_LIMITS_VER 1
-#define GPIO_WAKE_PAYLOAD_MAXSIZE 1024
-#define MAX_GPIO_WAKE_INT_SIZE (sizeof(wl_gpio_wake_int_t)+GPIO_WAKE_PAYLOAD_MAXSIZE-1)
+/* nd_ra_ol_limits sub-types */
+#define ND_RA_OL_LIMITS_REL_TYPE 0 /* relative, percent of RA lifetime */
+#define ND_RA_OL_LIMITS_FIXED_TYPE 1 /* fixed time */
-enum {
- GPIO_WAKE_PROTO_TCP = 0,
- GPIO_WAKE_PROTO_RAW,
-};
-
-typedef struct wl_gpio_wake_int_s {
- uint8 enable;
- uint8 proto;
- uint8 idx;
- uint16 data_len;
- uint8 data[1];
-} wl_gpio_wake_int_t;
+/* buffer lengths for the different nd_ra_ol_limits types */
+#define ND_RA_OL_LIMITS_REL_TYPE_LEN 12
+#define ND_RA_OL_LIMITS_FIXED_TYPE_LEN 10
/*
- * DHCP lease time renew offload definitions
+ * Temperature Throttling control mode
+ */
+typedef struct wl_temp_control {
+ uint8 enable;
+ uint8 PAD;
+ uint16 control_bit;
+} wl_temp_control_t;
+
+/* SensorHub Interworking mode */
+
+#define SHUB_CONTROL_VERSION 1
+#define SHUB_CONTROL_LEN 12
+
+typedef struct {
+ uint16 verison;
+ uint16 length;
+ uint16 cmd;
+ uint16 op_mode;
+ uint16 interval;
+ uint16 enable;
+} shub_control_t;
+
+/* WLC_MAJOR_VER <= 5 */
+/* Data structures for non-TLV format */
+
+/* Data structures for rsdb caps */
+/*
+ * The flags field of the rsdb_caps_response is designed to be
+ * a Bit Mask. As of now only Bit 0 is used as mentioned below.
+ */
+
+/* Bit-0 in flags is used to indicate if the cores can operate synchronously
+* i.e either as 2x2 MIMO or 2(1x1 SISO). This is true only for 4349 variants
+* 0 - device can operate only in rsdb mode (eg: 4364)
+* 1 - device can operate in both rsdb and mimo (eg : 4359 variants)
+*/
+
+#define WL_RSDB_CAPS_VER 2
+#define SYNCHRONOUS_OPERATION_TRUE (1 << 0)
+#define WL_RSDB_CAPS_FIXED_LEN OFFSETOF(rsdb_caps_response_t, num_chains)
+
+typedef struct rsdb_caps_response {
+ uint8 ver; /* Version */
+ uint8 len; /* length of this structure excluding ver and len */
+ uint8 rsdb; /* TRUE for rsdb chip */
+ uint8 num_of_cores; /* no of d11 cores */
+ uint16 flags; /* Flags to indicate various capabilities */
+ uint8 num_chains[1]; /* Tx/Rx chains for each core */
+} rsdb_caps_response_t;
+
+/* Data structures for rsdb bands */
+
+#define WL_RSDB_BANDS_VER 2
+#define WL_RSDB_BANDS_FIXED_LEN OFFSETOF(rsdb_bands_t, band)
+
+typedef struct rsdb_bands
+{
+ uint8 ver;
+ uint8 len;
+ uint16 num_cores; /* num of D11 cores */
+ int16 band[1]; /* The band operating on each of the d11 cores */
+} rsdb_bands_t;
+
+/* rsdb config */
+
+#define WL_RSDB_CONFIG_VER 3
+#define ALLOW_SIB_PARALLEL_SCAN (1 << 0)
+#define MAX_BANDS 2
+
+#define WL_RSDB_CONFIG_LEN sizeof(rsdb_config_t)
+
+typedef uint8 rsdb_opmode_t;
+typedef uint32 rsdb_flags_t;
+
+typedef enum rsdb_modes {
+ WLC_SDB_MODE_NOSDB_MAIN = 1, /* 2X2 or MIMO mode (applicable only for 4355) */
+ WLC_SDB_MODE_NOSDB_AUX = 2,
+ WLC_SDB_MODE_SDB_MAIN = 3, /* This is RSDB mode(default) applicable only for 4364 */
+ WLC_SDB_MODE_SDB_AUX = 4,
+ WLC_SDB_MODE_SDB_AUTO = 5, /* Same as WLC_RSDB_MODE_RSDB(1+1) mode above */
+} rsdb_modes_t;
+
+typedef struct rsdb_config {
+ uint8 ver;
+ uint8 len;
+ uint16 reserved;
+ rsdb_opmode_t non_infra_mode;
+ rsdb_opmode_t infra_mode[MAX_BANDS];
+ rsdb_flags_t flags[MAX_BANDS];
+ rsdb_opmode_t current_mode; /* Valid only in GET, returns the current mode */
+ uint8 pad[3];
+} rsdb_config_t;
+
+/* WLC_MAJOR_VER > =5 */
+/* TLV definitions and data structures for rsdb subcmds */
+
+enum wl_rsdb_cmd_ids {
+ /* RSDB ioctls */
+ WL_RSDB_CMD_VER = 0,
+ WL_RSDB_CMD_CAPS = 1,
+ WL_RSDB_CMD_BANDS = 2,
+ WL_RSDB_CMD_CONFIG = 3,
+ /* Add before this !! */
+ WL_RSDB_CMD_LAST
+};
+#define WL_RSDB_IOV_VERSION 0x1
+
+typedef struct rsdb_caps_response_v1 {
+ uint8 rsdb; /* TRUE for rsdb chip */
+ uint8 num_of_cores; /* no of d11 cores */
+ uint16 flags; /* Flags to indicate various capabilities */
+ uint8 num_chains[MAX_NUM_D11CORES]; /* Tx/Rx chains for each core */
+ uint8 band_cap[MAX_NUM_D11CORES]; /* band cap bitmask per slice */
+} rsdb_caps_response_v1_t;
+
+typedef struct rsdb_bands_v1
+{
+ uint8 num_cores; /* num of D11 cores */
+ uint8 pad; /* padding bytes for 4 byte alignment */
+ int8 band[MAX_NUM_D11CORES]; /* The band operating on each of the d11 cores */
+} rsdb_bands_v1_t;
+
+typedef struct rsdb_config_xtlv {
+ rsdb_opmode_t reserved1; /* Non_infra mode is no more applicable */
+ rsdb_opmode_t infra_mode[MAX_BANDS]; /* Target mode for Infra association */
+ uint8 pad; /* pad bytes for 4 byte alignment */
+ rsdb_flags_t flags[MAX_BANDS];
+ rsdb_opmode_t current_mode; /* GET only; has current mode of operation */
+ uint8 pad1[3];
+} rsdb_config_xtlv_t;
+
+/* Definitions for slot_bss chanseq iovar */
+#define WL_SLOT_BSS_VERSION 1
+
+/* critical slots max size */
+#define WL_SLOTTED_BSS_CS_BMP_CFG_MAX_SZ 128 /* arbitrary */
+
+enum wl_slotted_bss_cmd_id {
+ WL_SLOTTED_BSS_CMD_VER = 0,
+ WL_SLOTTED_BSS_CMD_CHANSEQ = 1,
+ WL_SLOTTED_BSS_CMD_CS_BMP = 2 /* critical slots bitmap */
+};
+typedef uint16 chan_seq_type_t;
+enum chan_seq_type {
+ CHAN_SEQ_TYPE_AWDL = 1,
+ CHAN_SEQ_TYPE_SLICE = 2,
+ CHAN_SEQ_TYPE_NAN = 3
+};
+typedef uint8 sched_flag_t;
+enum sched_flag {
+ NO_SDB_SCHED = 0x1,
+ SDB_TDM_SCHED = 0x2,
+ SDB_SPLIT_BAND_SCHED = 0x4, /* default mode for 4357 */
+ MAIN_ONLY = 0x8,
+ AUX_ONLY = 0x10,
+ SDB_DUAL_TIME = (MAIN_ONLY | AUX_ONLY),
+ NO_SDB_MAIN_ONLY = (NO_SDB_SCHED | MAIN_ONLY), /* default mode for 4364 */
+ SDB_TDM_SCHED_MAIN = (SDB_TDM_SCHED | MAIN_ONLY),
+ SDB_TDM_SCHED_AUX = (SDB_TDM_SCHED | AUX_ONLY),
+ SDB_TDM_SCHED_DUAL_TIME = (SDB_TDM_SCHED | SDB_DUAL_TIME),
+ SDB_SPLIT_BAND_SCHED_DUAL_TIME = (SDB_SPLIT_BAND_SCHED | SDB_DUAL_TIME)
+};
+
+typedef struct chan_seq_tlv_data {
+ uint32 flags;
+ uint8 data[1];
+} chan_seq_tlv_data_t;
+
+typedef struct chan_seq_tlv {
+ chan_seq_type_t type;
+ uint16 len;
+ chan_seq_tlv_data_t chanseq_data[1];
+} chan_seq_tlv_t;
+
+typedef struct sb_channel_sequence {
+ sched_flag_t sched_flags; /* (sdb-tdm or sdb-sb or Dual-Time) */
+ uint8 num_seq; /* number of chan_seq_tlv following */
+ uint16 pad;
+ chan_seq_tlv_t seq[1];
+} sb_channel_sequence_t;
+
+typedef struct slice_chan_seq {
+ uint8 slice_index; /* 0(Main) or 1 (Aux) */
+ uint8 num_chanspecs;
+ uint8 dur;
+ uint8 pad;
+ chanspec_t chanspecs[1];
+} slice_chan_seq_t;
+
+#define SLOT_BSS_SLICE_TYPE_DUR_MAX_RANGE 2u
+#define SLOTTED_BSS_AGGR_EN (1 << 0) /* Bitmap of mode */
+#define SLOTTED_BSS_AGGR_LIMIT_DUR (1 << 1) /* Jira 49554 */
+
+#define WL_SLICE_CHAN_SEQ_FIXED_LEN OFFSETOF(slice_chan_seq_t, chanspecs)
+/* Definitions for slotted_bss stats */
+#define SBSS_STATS_VERSION 1
+#define SBSS_STATS_CURRENT_VERSION SBSS_STATS_VERSION
+
+#define SBSS_MAX_CHAN_STATS 4
+
+typedef struct sbss_core_stats {
+ uint32 sb_slot_start;
+ uint32 sb_slot_end;
+ uint32 sb_slot_skip;
+ uint32 mismatch_count;
+} sbss_core_stats_t;
+
+typedef struct sbss_chan_stats {
+ chanspec_t chanspec;
+ uint32 slot_start;
+ uint32 slot_end;
+ uint32 slot_skip;
+} sbss_chan_stats_t;
+
+typedef struct sbss_stats_v1 {
+ uint16 version;
+ uint16 length;
+ sbss_core_stats_t corestats[MAX_NUM_D11CORES];
+ sbss_chan_stats_t sbss_chanstats[MAX_NUM_D11CORES][SBSS_MAX_CHAN_STATS];
+} sbss_stats_t;
+
+/* slotted bss critical slots */
+typedef struct wl_sbss_cs_bmp_s {
+ uint8 bitmap_len;
+ uint8 pad[3];
+ uint8 bitmap[];
+} wl_sbss_cs_bmp_t;
+
+typedef struct sim_pm_params {
+ uint32 enabled;
+ uint16 cycle;
+ uint16 up;
+} sim_pm_params_t;
+
+/* Digital napping status */
+#define WL_NAP_STATUS_VERSION_1 1
+typedef struct wl_nap_status_v1 {
+ uint16 version; /* structure version */
+ uint16 len; /* length of returned data */
+ uint16 fw_status; /* bitmask of FW disable reasons */
+ uint8 hw_status; /* bitmask for actual HW state info */
+ uint8 slice_index; /* which slice this represents */
+ uint32 total_disable_dur; /* total time (ms) disabled for fw_status */
+} wl_nap_status_v1_t;
+
+/* Bits for fw_status */
+#define NAP_DISABLED_HOST 0x0001 /* Host has disabled through nap_enable */
+#define NAP_DISABLED_RSSI 0x0002 /* Disabled because of nap_rssi_threshold */
+#define NAP_DISABLED_SCAN 0x0004 /* Disabled because of scan */
+#define NAP_DISABLED_ASSOC 0x0008 /* Disabled because of association */
+#define NAP_DISABLED_LTE 0x0010 /* Disabled because of LTE */
+#define NAP_DISABLED_ACI 0x0020 /* Disabled because of ACI mitigation */
+
+/* Bits for hw_status */
+#define NAP_HWCFG 0x01 /* State of NAP config bit in phy HW */
+#define NAP_NOCLK 0x80 /* No clock to read HW (e.g. core down) */
+
+/* ifdef WL_NATOE */
+#define WL_NATOE_IOCTL_VERSION 1
+#define WL_NATOE_IOC_BUFSZ 512 /* sufficient ioc buff size for natoe */
+#define WL_NATOE_DBG_STATS_BUFSZ 2048
+#define NATOE_FLAGS_ENAB_MASK 0x1
+#define NATOE_FLAGS_ACTIVE_MASK 0x2
+#define NATOE_FLAGS_PUBNW_MASK 0x4
+#define NATOE_FLAGS_PVTNW_MASK 0x8
+#define NATOE_FLAGS_ENAB_SHFT_MASK 0
+#define NATOE_FLAGS_ACTIVE_SHFT_MASK 1
+#define NATOE_FLAGS_PUBNW_SHFT_MASK 2
+#define NATOE_FLAGS_PVTNW_SHFT_MASK 3
+#define NATOE_FLAGS_PUB_NW_UP (1 << NATOE_FLAGS_PUBNW_SHFT_MASK)
+#define NATOE_FLAGS_PVT_NW_UP (1 << NATOE_FLAGS_PVTNW_SHFT_MASK)
+
+#define PCIE_FRWDPKT_STATS_VERSION 1
+
+/* Module version is 1 for IGUANA */
+#define WL_NATOE_MODULE_VER_1 1
+/* Module version is 2 for Lemur */
+#define WL_NATOE_MODULE_VER_2 2
+
+/* WL_NATOE_CMD_MOD_VER */
+typedef uint16 wl_natoe_ver_t;
+/* config natoe STA and AP IP's structure */
+typedef struct {
+ uint32 sta_ip;
+ uint32 sta_netmask;
+ uint32 sta_router_ip;
+ uint32 sta_dnsip;
+ uint32 ap_ip;
+ uint32 ap_netmask;
+} wl_natoe_config_ips_t;
+
+/* natoe ports config structure */
+typedef struct {
+ uint16 start_port_num;
+ uint16 no_of_ports;
+} wl_natoe_ports_config_t;
+
+/* natoe ports exception info */
+typedef struct {
+ uint16 sta_port_num;
+ uint16 dst_port_num; /* for SIP type protocol, dst_port_num info can be ignored by FW */
+ uint32 ip; /* for SIP ip is APcli_ip and for port clash it is dst_ip */
+ uint8 entry_type; /* Create/Destroy */
+ uint8 pad[3];
+} wl_natoe_exception_port_t;
+
+/* container for natoe ioctls & events */
+typedef struct wl_natoe_ioc {
+ uint16 version; /* interface command or event version */
+ uint16 id; /* natoe ioctl cmd ID */
+ uint16 len; /* total length of all tlv records in data[] */
+ uint16 pad; /* pad to be 32 bit aligment */
+ uint8 data[]; /* var len payload of bcm_xtlv_t type */
+} wl_natoe_ioc_t;
+
+typedef struct wl_natoe_pool_stats_v1 {
+ /* For debug purposes */
+ uint16 poolreorg_cnt;
+ uint16 poolrevert_cnt;
+ uint16 txfrag_state;
+ uint16 rxfrag_state;
+ uint16 txfrag_plen;
+ uint16 rxfrag_plen;
+ uint16 tx_pavail;
+ uint16 rx_pavail;
+ uint16 txmin_bkup_bufs;
+ uint16 rxmin_bkup_bufs;
+ uint16 pktpool_sbuf_alloc;
+ uint16 pktpool_plen;
+ uint16 pktpool_pavail;
+ /* Peak shared buffer count in all iterations */
+ uint16 sbuf_peak;
+ /* Peak shared buffer count in current D3 iteration */
+ uint16 sbuf_peak_cur;
+} wl_natoe_pool_stats_v1_t;
+
+typedef struct wl_natoe_arp_entry_v1 {
+ struct ipv4_addr ip;
+ struct ether_addr mac_addr;
+ uint8 lifetime;
+ uint8 flags;
+} wl_natoe_arp_entry_v1_t;
+
+typedef struct wl_natoe_dbg_arp_tbl_info_v1 {
+ uint8 valid_arp_entries;
+ uint8 PAD[3];
+ wl_natoe_arp_entry_v1_t arp_ent[];
+} wl_natoe_dbg_arp_tbl_info_v1_t;
+
+typedef struct wl_natoe_skip_port_entry_v1 {
+ struct ipv4_addr srcip;
+ uint16 src_port;
+ uint16 lifetime;
+} wl_natoe_skip_port_entry_v1_t;
+
+typedef struct wl_natoe_skip_port_info_v1 {
+ uint8 valid_entries;
+ uint8 PAD[3];
+ wl_natoe_skip_port_entry_v1_t skip_port_ent[];
+} wl_natoe_skip_port_info_v1_t;
+
+typedef struct wl_natoe_dbg_stats_v1 {
+ uint16 active_nat_entries;
+ uint16 active_dns_entries;
+ uint16 active_icmp_entries;
+ uint16 valid_arp_entries;
+ uint16 prev_nat_entries;
+ uint16 prev_dns_entries;
+ uint16 tcp_fast_reclaim_cnt;
+ uint16 mcast_packets;
+ uint16 bcast_packets;
+ uint16 port_commands_rcvd;
+ uint16 unsupported_prot;
+ uint16 arp_req_sent;
+ uint16 arp_rsp_rcvd;
+ uint16 non_ether_frames;
+ uint16 port_alloc_fail;
+ uint16 srcip_tbl_full;
+ uint16 dstip_tbl_full;
+ uint16 nat_tbl_full;
+ uint16 icmp_error_cnt;
+ uint16 pkt_drops_resource;
+ uint32 frwd_nat_pkt_cnt;
+ uint32 reverse_nat_pkt_cnt;
+ uint16 pub_nw_chspec;
+ uint16 pvt_nw_chspec;
+ uint8 pubnw_cfg_idx;
+ uint8 pvtnw_cfg_idx;
+ uint8 pubnw_cfg_ID;
+ uint8 pvtnw_cfg_ID;
+ uint16 natoe_flags;
+} wl_natoe_dbg_stats_v1_t;
+
+typedef struct wl_natoe_exception_port_inf_v1 {
+ uint16 except_bmap_size;
+ uint8 port_except_bmap[];
+} wl_natoe_exception_port_inf_v1_t;
+
+typedef struct wl_natoe_dstnat_entry_v1 {
+ struct ipv4_addr clientip;
+ struct ether_addr client_mac_addr;
+ uint16 client_listenport;
+ uint8 opcode;
+} wl_natoe_dstnat_entry_v1_t;
+
+typedef struct wl_pcie_frwd_stats_v1 {
+ uint16 version;
+ uint16 len;
+ uint16 frwd_txfrag_q_cnt; /* no. of txfrags in frwd_txfrag_list */
+ /* no. of outstanding lbufs in txpath on if0/ifx */
+ uint16 tx_frwd_n_lb_if0;
+ uint16 tx_frwd_n_lb_ifx;
+ /* no. of outstanding lfrags in txpath on if0/ifx */
+ uint16 tx_frwd_n_lf_if0;
+ uint16 tx_frwd_n_lf_ifx;
+ /* no. of pending frwd pkts dropped upon d3 entry */
+ uint16 tx_frwd_d3_drop_cnt;
+ /* Total no. of lbufs frwded in txpath on if0/ifx */
+ uint32 tx_frwd_n_lb_if0_cnt;
+ uint32 tx_frwd_n_lb_ifx_cnt;
+ /* Total no. of lfrags frwded in txpath on if0/ifx */
+ uint32 tx_frwd_n_lf_if0_cnt;
+ uint32 tx_frwd_n_lf_ifx_cnt;
+ uint32 frwd_tx_drop_thr_cnt; /* no. of pkts dropped due to txfrag threshold */
+ uint32 frwd_tx_drop_err_cnt; /* no. of pkts dropped due to txfrags not avail / errors */
+} wl_pcie_frwd_stats_v1_t;
+
+enum wl_natoe_cmds {
+ WL_NATOE_CMD_MOD_VER = 0,
+ WL_NATOE_CMD_ENABLE = 1,
+ WL_NATOE_CMD_CONFIG_IPS = 2,
+ WL_NATOE_CMD_CONFIG_PORTS = 3,
+ WL_NATOE_CMD_DBG_STATS = 4,
+ WL_NATOE_CMD_EXCEPTION_PORT = 5,
+ WL_NATOE_CMD_SKIP_PORT = 6,
+ WL_NATOE_CMD_TBL_CNT = 7,
+ WL_NATOE_CMD_CONFIG_DSTNAT = 8,
+ WL_NATOE_CMD_CTRL = 9
+};
+
+enum wl_natoe_cmd_xtlv_id {
+ WL_NATOE_XTLV_MOD_VER = 0,
+ WL_NATOE_XTLV_ENABLE = 1,
+ WL_NATOE_XTLV_CONFIG_IPS = 2,
+ WL_NATOE_XTLV_CONFIG_PORTS = 3,
+ WL_NATOE_XTLV_DBG_STATS = 4,
+ WL_NATOE_XTLV_EXCEPTION_PORT = 5,
+ WL_NATOE_XTLV_SKIP_PORT = 6,
+ WL_NATOE_XTLV_TBL_CNT = 7,
+ WL_NATOE_XTLV_ARP_TBL = 8,
+ WL_NATOE_XTLV_POOLREORG = 9,
+ WL_NATOE_XTLV_CONFIG_DSTNAT = 10,
+ WL_NATOE_XTLV_CTRL = 11
+};
+
+/* endif WL_NATOE */
+
+enum wl_idauth_cmd_ids {
+ WL_IDAUTH_CMD_CONFIG = 1,
+ WL_IDAUTH_CMD_PEER_INFO = 2,
+ WL_IDAUTH_CMD_COUNTERS = 3,
+ WL_IDAUTH_CMD_LAST
+};
+enum wl_idauth_xtlv_id {
+ WL_IDAUTH_XTLV_AUTH_ENAB = 0x1,
+ WL_IDAUTH_XTLV_GTK_ROTATION = 0x2,
+ WL_IDAUTH_XTLV_EAPOL_COUNT = 0x3,
+ WL_IDAUTH_XTLV_EAPOL_INTRVL = 0x4,
+ WL_IDAUTH_XTLV_BLKLIST_COUNT = 0x5,
+ WL_IDAUTH_XTLV_BLKLIST_AGE = 0x6,
+ WL_IDAUTH_XTLV_PEERS_INFO = 0x7,
+ WL_IDAUTH_XTLV_COUNTERS = 0x8
+};
+enum wl_idauth_stats {
+ WL_AUTH_PEER_STATE_AUTHORISED = 0x01,
+ WL_AUTH_PEER_STATE_BLACKLISTED = 0x02,
+ WL_AUTH_PEER_STATE_4WAY_HS_ONGOING = 0x03,
+ WL_AUTH_PEER_STATE_LAST
+};
+typedef struct {
+ uint16 state; /* Peer State: Authorised or Blacklisted */
+ struct ether_addr peer_addr; /* peer Address */
+ uint32 blklist_end_time; /* Time of blacklist end */
+} auth_peer_t;
+typedef struct wl_idauth_counters {
+ uint32 auth_reqs; /* No of auth req recvd */
+ uint32 mic_fail; /* No of mic fails */
+ uint32 four_way_hs_fail; /* No of 4-way handshake fails */
+} wl_idauth_counters_t;
+
+#define WLC_UTRACE_LEN (1024u * 4u) // default length
+#define WLC_UTRACE_LEN_AUX (1024u * 3u) // reduced length to fit smaller AUX BM
+#define WLC_UTRACE_READ_END 0
+#define WLC_UTRACE_MORE_DATA 1
+typedef struct wl_utrace_capture_args_v1 {
+ uint32 length;
+ uint32 flag;
+} wl_utrace_capture_args_v1_t;
+
+#define UTRACE_CAPTURE_VER_2 2
+typedef struct wl_utrace_capture_args_v2 {
+ /* structure control */
+ uint16 version; /**< structure version */
+ uint16 length; /**< length of the response */
+ uint32 flag; /* Indicates if there is more data or not */
+} wl_utrace_capture_args_v2_t;
+
+/* Signal read end. */
+#define WLC_REGVAL_READ_END 0
+/* Signal more data pending. */
+#define WLC_REGVAL_MORE_DATA 1
+/* Internal read state. */
+#define WLC_REGVAL_READ_CONTINUE 2
+
+#define WLC_REGVAL_DUMP_PHYREG 0
+#define WLC_REGVAL_DUMP_RADREG 1
+
+#define PHYREGVAL_CAPTURE_BUFFER_LEN 2048
+
+typedef struct wl_regval_capture_args {
+ uint32 control_flag; /* Carries status information. */
+} wl_regval_capture_args_t;
+
+/* XTLV IDs for the Health Check "hc" iovar top level container */
+enum {
+ WL_HC_XTLV_ID_CAT_HC = 1, /* category for HC as a whole */
+ WL_HC_XTLV_ID_CAT_DATAPATH_TX = 2, /* Datapath Tx */
+ WL_HC_XTLV_ID_CAT_DATAPATH_RX = 3, /* Datapath Rx */
+ WL_HC_XTLV_ID_CAT_SCAN = 4, /* Scan */
+ WL_HC_XTLV_ID_CAT_EVENTMASK = 5, /* Health Check event mask. */
+};
+
+/* Health Check: Common XTLV IDs for sub-elements in the top level container
+ * Number starts at 0x8000 to be out of the way for category specific IDs.
+ */
+enum {
+ WL_HC_XTLV_ID_ERR = 0x8000, /* for sub-command err return */
+ WL_HC_XTLV_ID_IDLIST = 0x8001, /* container for uint16 IDs */
+};
+
+/* Health Check: Datapath TX IDs */
+enum {
+ WL_HC_TX_XTLV_ID_VAL_STALL_THRESHOLD = 1, /* stall_threshold */
+ WL_HC_TX_XTLV_ID_VAL_STALL_SAMPLE_SIZE = 2, /* stall_sample_size */
+ WL_HC_TX_XTLV_ID_VAL_STALL_TIMEOUT = 3, /* stall_timeout */
+ WL_HC_TX_XTLV_ID_VAL_STALL_FORCE = 4, /* stall_force */
+ WL_HC_TX_XTLV_ID_VAL_STALL_EXCLUDE = 5, /* stall_exclude */
+ WL_HC_TX_XTLV_ID_VAL_FC_TIMEOUT = 6, /* flow ctl timeout */
+ WL_HC_TX_XTLV_ID_VAL_FC_FORCE = 7, /* flow ctl force failure */
+ WL_HC_TX_XTLV_ID_VAL_DELAY_TO_TRAP = 8, /* delay threshold for forced trap */
+ WL_HC_TX_XTLV_ID_VAL_DELAY_TO_RPT = 9, /* delay threshold for event log report */
+ WL_HC_TX_XTLV_ID_VAL_FAILURE_TO_RPT = 10, /* threshold for consecutive TX failures */
+};
+
+/* Health Check: Datapath RX IDs */
+enum {
+ WL_HC_RX_XTLV_ID_VAL_DMA_STALL_TIMEOUT = 1, /* dma_stall_timeout */
+ WL_HC_RX_XTLV_ID_VAL_DMA_STALL_FORCE = 2, /* dma_stall test trigger */
+ WL_HC_RX_XTLV_ID_VAL_STALL_THRESHOLD = 3, /* stall_threshold */
+ WL_HC_RX_XTLV_ID_VAL_STALL_SAMPLE_SIZE = 4, /* stall_sample_size */
+ WL_HC_RX_XTLV_ID_VAL_STALL_FORCE = 5, /* stall test trigger */
+};
+
+/* Health Check: Datapath SCAN IDs */
+enum {
+ WL_HC_XTLV_ID_VAL_SCAN_STALL_THRESHOLD = 1, /* scan stall threshold */
+};
+
+/* Health check: PHY IDs */
+/* Needed for iguana 13.35 branch */
+typedef enum {
+ PHY_HC_DD_ALL = 0,
+ PHY_HC_DD_TEMPSENSE = 1,
+ PHY_HC_DD_VCOCAL = 2,
+ PHY_HC_DD_RX = 3,
+ PHY_HC_DD_TX = 4,
+ PHY_HC_DD_LAST /* This must be the last entry */
+} phy_hc_dd_type_t;
+
+typedef enum {
+ PHY_HC_DD_TEMP_FAIL = 0,
+ PHY_HC_DD_VCO_FAIL = 1,
+ PHY_HC_DD_RXDSN_FAIL = 2,
+ PHY_HC_DD_TXPOW_FAIL = 3,
+ PHY_HC_DD_END /* This must be the last entry */
+} phy_hc_dd_type_v2_t;
+
+/* IDs of Health Check report structures for sub types of health checks within WL */
+typedef enum wl_hc_dd_type {
+ WL_HC_DD_PCIE = 0, /* PCIe */
+ WL_HC_DD_RX_DMA_STALL = 1, /* RX DMA stall check */
+ WL_HC_DD_RX_STALL = 2, /* RX stall check */
+ WL_HC_DD_TX_STALL = 3, /* TX stall check */
+ WL_HC_DD_SCAN_STALL = 4, /* SCAN stall check */
+ WL_HC_DD_PHY = 5, /* PHY health check */
+ WL_HC_DD_REINIT = 6, /* Reinit due to other reasons */
+ WL_HC_DD_TXQ_STALL = 7, /* TXQ stall */
+ WL_HC_DD_MAX
+} wl_hc_dd_type_t;
+
+/*
+ * Health Check report structures for sub types of health checks within WL
+ */
+
+/* Health Check report structure for Rx DMA Stall check */
+typedef struct {
+ uint16 type;
+ uint16 length;
+ uint16 timeout;
+ uint16 stalled_dma_bitmap;
+} wl_rx_dma_hc_info_t;
+
+/* Health Check report structure for Tx packet failure check */
+typedef struct {
+ uint16 type;
+ uint16 length;
+ uint32 stall_bitmap;
+ uint32 stall_bitmap1;
+ uint32 failure_ac;
+ uint32 threshold;
+ uint32 tx_all;
+ uint32 tx_failure_all;
+} wl_tx_hc_info_t;
+
+/* Health Check report structure for Rx dropped packet failure check */
+typedef struct {
+ uint16 type;
+ uint16 length;
+ uint32 bsscfg_idx;
+ uint32 rx_hc_pkts;
+ uint32 rx_hc_dropped_all;
+ uint32 rx_hc_alert_th;
+} wl_rx_hc_info_t;
+
+/* HE top level command IDs */
+enum {
+ WL_HE_CMD_ENAB = 0,
+ WL_HE_CMD_FEATURES = 1,
+ WL_HE_CMD_TWT_SETUP = 2,
+ WL_HE_CMD_TWT_TEARDOWN = 3,
+ WL_HE_CMD_TWT_INFO = 4,
+ WL_HE_CMD_BSSCOLOR = 5,
+ WL_HE_CMD_PARTIAL_BSSCOLOR = 6,
+ WL_HE_CMD_CAP = 7,
+ WL_HE_CMD_STAID = 8,
+ WL_HE_CMD_RTSDURTHRESH = 10,
+ WL_HE_CMD_PEDURATION = 11,
+ WL_HE_CMD_TESTBED_MODE = 12,
+ WL_HE_CMD_OMI = 13,
+ WL_HE_CMD_MAC_PAD_DUR = 14,
+ WL_HE_CMD_MUEDCA = 15,
+ WL_HE_CMD_MACCAP = 16,
+ WL_HE_CMD_PHYCAP = 17,
+ WL_HE_CMD_DISPLAY = 18,
+ WL_HE_CMD_ACTION = 19,
+ WL_HE_CMD_OFDMATX = 20,
+ WL_HE_CMD_20IN80_MODE = 21,
+ WL_HE_CMD_SMPS = 22,
+ WL_HE_CMD_PPETHRESH = 23,
+#ifdef WL11AX_TESTBED
+ WL_HE_CMD_HTC_OMI_EN = 24,
+ WL_HE_CMD_ERSU_EN = 25,
+ WL_HE_CMD_PREPUNCRX_EN = 26,
+ WL_HE_CMD_MIMOCAP_EN = 27,
+#endif // endif
+ WL_HE_CMD_MUEDCA_OPT = 28,
+ WL_HE_CMD_LAST
+};
+
+/* TWT top level command IDs */
+enum {
+ WL_TWT_CMD_ENAB = 0,
+ WL_TWT_CMD_SETUP = 1,
+ WL_TWT_CMD_TEARDOWN = 2,
+ WL_TWT_CMD_INFO = 3,
+ WL_TWT_CMD_AUTOSCHED = 4,
+ WL_TWT_CMD_STATS = 5,
+ WL_TWT_CMD_EARLY_TERM_TIME = 6,
+ WL_TWT_CMD_RESP_CONFIG = 7,
+ WL_TWT_CMD_SPPS_ENAB = 8,
+ WL_TWT_CMD_FEATURES = 9,
+ WL_TWT_CMD_LAST
+};
+
+/* TODO: Remove the follwoing after mering TWT changes to trunk */
+#define WL_TWT_CMD_DEF_IN_WLIOCTL 1
+
+#define WL_HEB_VER_1 1
+
+/* HEB top level command IDs */
+enum {
+ WL_HEB_CMD_ENAB = 0,
+ WL_HEB_CMD_NUM_HEB = 1,
+ WL_HEB_CMD_COUNTERS = 2,
+ WL_HEB_CMD_CLEAR_COUNTERS = 3,
+ WL_HEB_CMD_CONFIG = 4,
+ WL_HEB_CMD_STATUS = 5,
+ WL_HEB_CMD_LAST
+};
+
+/* HEB counters structures */
+typedef struct wl_heb_int_cnt_v1 {
+ uint16 pre_event;
+ uint16 start_event;
+ uint16 end_event;
+ uint16 missed;
+} wl_heb_int_cnt_v1_t;
+
+typedef struct wl_heb_cnt_v1 {
+ /* structure control */
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ wl_heb_int_cnt_v1_t heb_int_cnt[1];
+} wl_heb_cnt_v1_t;
+
+// struct for configuring HEB
+typedef struct wl_config_heb_fill_v1 {
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ uint32 duration;
+ uint32 periodicity;
+ uint16 heb_idx;
+ uint16 preeventtime;
+ uint8 count;
+ uint8 PAD[3];
+} wl_config_heb_fill_v1_t;
+
+typedef struct wl_heb_blk_params_v1 {
+ /* Don't change the order of following elements. This is as per the HEB HW spec */
+ uint32 event_int_val_l;
+ uint32 event_int_val_h;
+ uint32 param2;
+ uint32 param3;
+ uint32 pre_event_intmsk_bmp;
+ uint32 start_event_intmsk_bmp;
+ uint32 end_event_intmsk_bmp;
+ uint32 event_driver_info;
+ uint16 param1;
+ uint8 event_count;
+ uint8 noa_invert;
+} wl_heb_blk_params_v1_t;
+
+typedef struct wl_heb_int_status_v1 {
+ uint32 heb_idx;
+ wl_heb_blk_params_v1_t blk_params;
+} wl_heb_reg_status_v1_t;
+
+typedef struct wl_heb_status_v1 {
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ wl_heb_reg_status_v1_t heb_status[1];
+} wl_heb_status_v1_t;
+
+/* TWT Setup descriptor */
+typedef struct wl_twt_sdesc {
+ /* Setup Command. */
+ uint8 setup_cmd; /* See TWT_SETUP_CMD_XXXX in 802.11ah.h */
+ uint8 flow_flags; /* Flow attributes. See WL_TWT_FLOW_FLAG_XXXX below */
+ uint8 flow_id; /* must be between 0 and 7. Set 0xFF for auto assignment */
+ uint8 wake_type; /* See WL_TWT_TIME_TYPE_XXXX below */
+ uint32 wake_time_h; /* target wake time - BSS TSF (us) */
+ uint32 wake_time_l;
+ uint32 wake_dur; /* target wake duration in unit of microseconds */
+ uint32 wake_int; /* target wake interval */
+ uint32 btwt_persistence; /* Broadcast TWT Persistence */
+ uint32 wake_int_max; /* max wake interval(uS) for TWT */
+ uint8 duty_cycle_min; /* min duty cycle for TWT(Percentage) */
+ uint8 pad;
+ uint8 bid; /* must be between 0 and 31. Set 0xFF for auto assignment */
+ uint8 channel; /* Twt channel - Not used for now */
+ uint8 negotiation_type; /* Negotiation Type: See macros TWT_NEGO_TYPE_X */
+ uint8 frame_recomm; /* frame recommendation for broadcast TWTs - Not used for now */
+ /* deprecated - to be removed */
+ uint16 li;
+
+} wl_twt_sdesc_t;
+
+/* Flow flags */
+/* [TODO] : below flags are to be applied with corresponding wl param parsing
+#define WL_TWT_FLOW_FLAG_UNANNOUNCED (1u << 0u)
+#define WL_TWT_FLOW_FLAG_TRIGGER (1u << 1u)
+#define WL_TWT_FLOW_FLAG_REQUEST (1u << 2u)
+#define WL_TWT_FLOW_FLAG_PROTECT (1u << 3u)
+#define WL_TWT_FLOW_FLAG_RESPONDER_PM (1u << 4u)
+#define WL_TWT_FLOW_FLAG_UNSOLICITED (1u << 5u)
+
+#define WL_TWT_FLOW_FLAG_BROADCAST (1u << 5u)
+#define WL_TWT_FLOW_FLAG_WAKE_TBTT_NEGO (1u << 6u)
+#define WL_TWT_FLOW_FLAG_IMPLICIT (1u << 7u)
+*/
+#define WL_TWT_FLOW_FLAG_BROADCAST (1 << 0)
+#define WL_TWT_FLOW_FLAG_IMPLICIT (1 << 1)
+#define WL_TWT_FLOW_FLAG_UNANNOUNCED (1 << 2)
+#define WL_TWT_FLOW_FLAG_TRIGGER (1 << 3)
+#define WL_TWT_FLOW_FLAG_WAKE_TBTT_NEGO (1 << 4)
+#define WL_TWT_FLOW_FLAG_REQUEST (1 << 5)
+
+#define WL_TWT_FLOW_FLAG_PROTECT (1u << 0u)
+#define WL_TWT_FLOW_FLAG_RESPONDER_PM (1u << 6u)
+#define WL_TWT_FLOW_FLAG_UNSOLICITED (1u << 7u)
+
+/* Flow id */
+#define WL_TWT_FLOW_ID_FID 0x07u /* flow id */
+#define WL_TWT_FLOW_ID_GID_MASK 0x70u /* group id - broadcast TWT only */
+#define WL_TWT_FLOW_ID_GID_SHIFT 4u
+
+#define WL_TWT_INV_BCAST_ID 0xFFu
+#define WL_TWT_INV_FLOW_ID 0xFFu
+
+/* auto flow_id */
+#define WL_TWT_SETUP_FLOW_ID_AUTO 0xFFu
+/* auto broadcast ID */
+#define WL_TWT_SETUP_BCAST_ID_AUTO 0xFFu
+/* Infinite persistence for broadcast schedule */
+#define WL_TWT_INFINITE_BTWT_PERSIST 0xFFFFFFFFu
+
+#define WL_TWT_STATS_MAX_BTWT 4u
+#define WL_TWT_STATS_MAX_ITWT 4u
+
+/* Wake type */
+/* TODO: not yet finalized */
+#define WL_TWT_TIME_TYPE_BSS 0u /* The time specified in wake_time_h/l is
+ * the BSS TSF time.
+ */
+#define WL_TWT_TIME_TYPE_OFFSET 1u /* The time specified in wake_time_h/l is an offset
+ * of the TSF time when the iovar is processed.
+ */
+#define WL_TWT_TIME_TYPE_AUTO 2u /* The target wake time is chosen internally by the FW */
+
+#define WL_TWT_SETUP_VER 0u
+
+/* HE TWT Setup command */
+typedef struct wl_twt_setup {
+ /* structure control */
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ /* peer address */
+ struct ether_addr peer; /* leave it all 0s' for AP */
+ uint8 pad[2];
+ /* setup descriptor */
+ wl_twt_sdesc_t desc;
+
+ /* deprecated - to be removed */
+ uint16 dialog;
+ uint8 pad1[2];
+} wl_twt_setup_t;
+
+/* deprecated -to be removed */
+#define WL_TWT_DIALOG_TOKEN_AUTO 0xFFFF
+
+#define WL_TWT_TEARDOWN_VER 0u
+
+/* twt teardown descriptor */
+typedef struct wl_twt_teardesc {
+ uint8 negotiation_type;
+ uint8 flow_id; /* must be between 0 and 7 */
+ uint8 bid; /* must be between 0 and 31 */
+ uint8 alltwt; /* all twt teardown - 0 or 1 */
+} wl_twt_teardesc_t;
+
+/* HE TWT Teardown command */
+typedef struct wl_twt_teardown {
+ /* structure control */
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ /* peer address */
+ struct ether_addr peer; /* leave it all 0s' for AP */
+ wl_twt_teardesc_t teardesc; /* Teardown descriptor */
+
+ /* deprecated - to be removed */
+ uint8 flow_flags;
+ uint8 flow_id;
+ uint8 bid;
+ uint8 pad;
+} wl_twt_teardown_t;
+
+/* twt information descriptor */
+typedef struct wl_twt_infodesc {
+ uint8 flow_flags; /* See WL_TWT_INFO_FLAG_XXX below */
+ uint8 flow_id;
+ uint8 pad[2];
+ uint32 next_twt_h;
+ uint32 next_twt_l;
+ /* deprecated - to be removed */
+ uint8 wake_type;
+ uint8 pad1[3];
+} wl_twt_infodesc_t;
+
+/* Flow flags */
+#define WL_TWT_INFO_FLAG_ALL_TWT (1u << 0u) /* All TWT */
+#define WL_TWT_INFO_FLAG_RESUME (1u << 1u) /* 1 is TWT Resume, 0 is TWT Suspend */
+
+/* deprecated - to be removed */
+#define WL_TWT_INFO_FLAG_RESP_REQ (1 << 0) /* Response Requested */
+#define WL_TWT_INFO_FLAG_NEXT_TWT_REQ (1 << 1) /* Next TWT Request */
+#define WL_TWT_INFO_FLAG_BTWT_RESCHED (1 << 2) /* Broadcast Reschedule */
+typedef wl_twt_infodesc_t wl_twt_idesc_t;
+
+#define WL_TWT_INFO_VER 0u
+
+/* HE TWT Information command */
+typedef struct wl_twt_info {
+ /* structure control */
+ uint16 version; /* structure version */
+ uint16 length; /* data length (starting after this field) */
+ /* peer address */
+ struct ether_addr peer; /* leave it all 0s' for AP */
+ uint8 pad[2];
+ wl_twt_infodesc_t infodesc; /* information descriptor */
+ /* deprecated - to be removed */
+ wl_twt_idesc_t desc;
+} wl_twt_info_t;
+
+#define WL_TWT_PEER_STATS_VERSION_1 1u
+typedef struct wl_twt_peer_stats_v1 {
+ uint16 version;
+ uint16 length;
+ struct ether_addr peer;
+ uint8 PAD[2];
+ uint8 id;
+ uint8 flow_flags;
+ uint8 PAD[2];
+ uint32 sp_seq; /* sequence number of the service period */
+ uint32 tx_ucast_pkts;
+ uint32 tx_pkts_min;
+ uint32 tx_pkts_max;
+ uint32 tx_pkts_avg;
+ uint32 tx_failures;
+ uint32 rx_ucast_pkts;
+ uint32 rx_pkts_min;
+ uint32 rx_pkts_max;
+ uint32 rx_pkts_avg;
+ uint32 rx_pkts_retried;
+} wl_twt_peer_stats_v1_t;
+
+#define WL_TWT_STATS_VERSION_1 1
+typedef struct wl_twt_stats_v1 {
+ uint16 version;
+ uint16 length;
+ uint32 num_stats; /* number of peer stats in the peer_stats_list */
+ wl_twt_peer_stats_v1_t peer_stats_list[];
+} wl_twt_stats_v1_t;
+
+#define WL_TWT_STATS_CMD_VERSION_1 1
+#define WL_TWT_STATS_CMD_FLAGS_RESET (1u << 0u)
+/* HE TWT stats command */
+typedef struct wl_twt_stats_cmd_v1 {
+ uint16 version;
+ uint16 length;
+ struct ether_addr peer;
+ uint8 PAD[2];
+ uint16 flags; /* see WL_TWT_STATS_CMD_FLAGS */
+ uint8 num_fid;
+ uint8 num_bid;
+ uint8 fid_list[WL_TWT_STATS_MAX_ITWT];
+ uint8 bid_list[WL_TWT_STATS_MAX_BTWT];
+} wl_twt_stats_cmd_v1_t;
+
+#define WL_TWT_RESP_CFG_VER 0u
+
+#define WL_TWT_CMD_RESP_CFG_TYPE_ALTERNATE 0u
+#define WL_TWT_CMD_RESP_CFG_TYPE_DICTATE 1u
+/* HE TWT resp command */
+typedef struct wl_twt_resp_cfg {
+ /* structure control */
+ uint16 version; /* Structure version */
+ uint16 length; /* Data length (starting after this field) */
+ uint8 dc_max; /* Max supported duty cycle for single TWT */
+ uint8 resp_type; /* Resp. type(Alt/dict) if duty cycle>max duty cycle */
+} wl_twt_resp_cfg_t;
+
+/* Current version for wlc_clm_power_limits_req_t structure and flags */
+#define WLC_CLM_POWER_LIMITS_REQ_VERSION 1
+/* "clm_power_limits" iovar request structure */
+typedef struct wlc_clm_power_limits_req {
+ /* Input. Structure and flags version */
+ uint32 version;
+ /* Full length of buffer (includes this structure and space for TLV-encoded PPR) */
+ uint32 buflen;
+ /* Input. Flags (see WLC_CLM_POWER_LIMITS_INPUT_FLAG_... below) */
+ uint32 input_flags;
+ /* Input. CC of region whose data is being requested */
+ char cc[WLC_CNTRY_BUF_SZ];
+ /* Input. Channel/subchannel in chanspec_t format */
+ uint32 chanspec;
+ /* Subchannel encoded as clm_limits_type_t */
+ uint32 clm_subchannel;
+ /* Input. 0-based antenna index */
+ uint32 antenna_idx;
+ /* Output. General flags (see WLC_CLM_POWER_LIMITS_OUTPUT_FLAG_... below) */
+ uint32 output_flags;
+ /* Output. 2.4G country flags, encoded as clm_flags_t enum */
+ uint32 clm_country_flags_2g;
+ /* Output. 5G country flags, encoded as clm_flags_t enum */
+ uint32 clm_country_flags_5g;
+ /* Output. Length of TLV-encoded PPR data that follows this structure */
+ uint32 ppr_tlv_size;
+ /* Output. Beginning of buffer for TLV-encoded PPR data */
+ uint8 ppr_tlv[1];
+} wlc_clm_power_limits_req_t;
+
+/* Input. Do not apply SAR limits */
+#define WLC_CLM_POWER_LIMITS_INPUT_FLAG_NO_SAR 0x00000001
+/* Input. Do not apply board limits */
+#define WLC_CLM_POWER_LIMITS_INPUT_FLAG_NO_BOARD 0x00000002
+/* Output. Limits taken from product-specific country data */
+#define WLC_CLM_POWER_LIMITS_OUTPUT_FLAG_PRODUCT_LIMITS 0x00000001
+/* Output. Limits taken from product-specific worldwide data */
+#define WLC_CLM_POWER_LIMITS_OUTPUT_FLAG_WORLDWIDE_LIMITS 0x00000002
+/* Output. Limits taken from country-default (all-product) data */
+#define WLC_CLM_POWER_LIMITS_OUTPUT_FLAG_DEFAULT_COUNTRY_LIMITS 0x00000004
+
+#define WL_MBO_IOV_MAJOR_VER 1
+#define WL_MBO_IOV_MINOR_VER 1
+#define WL_MBO_IOV_MAJOR_VER_SHIFT 8
+#define WL_MBO_IOV_VERSION \
+ ((WL_MBO_IOV_MAJOR_VER << WL_MBO_IOV_MAJOR_VER_SHIFT)| WL_MBO_IOV_MINOR_VER)
+
+#define MBO_MAX_CHAN_PREF_ENTRIES 16
+
+enum wl_mbo_cmd_ids {
+ WL_MBO_CMD_ADD_CHAN_PREF = 1,
+ WL_MBO_CMD_DEL_CHAN_PREF = 2,
+ WL_MBO_CMD_LIST_CHAN_PREF = 3,
+ WL_MBO_CMD_CELLULAR_DATA_CAP = 4,
+ WL_MBO_CMD_DUMP_COUNTERS = 5,
+ WL_MBO_CMD_CLEAR_COUNTERS = 6,
+ WL_MBO_CMD_FORCE_ASSOC = 7,
+ WL_MBO_CMD_BSSTRANS_REJECT = 8,
+ WL_MBO_CMD_SEND_NOTIF = 9,
+ /* Unused command, This enum no can be use
+ * for next new command
+ */
+ WL_MBO_CMD_CLEAR_CHAN_PREF = 10,
+ WL_MBO_CMD_NBR_INFO_CACHE = 11,
+ WL_MBO_CMD_ANQPO_SUPPORT = 12,
+ WL_MBO_CMD_DBG_EVENT_CHECK = 13,
+ WL_MBO_CMD_EVENT_MASK = 14,
+ WL_MBO_CMD_ASSOC_DISALLOWED = 15,
+ WL_MBO_CMD_CELLULAR_DATA_PREF = 16,
+ /* Add before this !! */
+ WL_MBO_CMD_LAST
+};
+
+enum wl_mbo_xtlv_id {
+ WL_MBO_XTLV_OPCLASS = 0x1,
+ WL_MBO_XTLV_CHAN = 0x2,
+ WL_MBO_XTLV_PREFERENCE = 0x3,
+ WL_MBO_XTLV_REASON_CODE = 0x4,
+ WL_MBO_XTLV_CELL_DATA_CAP = 0x5,
+ WL_MBO_XTLV_COUNTERS = 0x6,
+ WL_MBO_XTLV_ENABLE = 0x7,
+ WL_MBO_XTLV_SUB_ELEM_TYPE = 0x8,
+ WL_MBO_XTLV_BTQ_TRIG_START_OFFSET = 0x9,
+ WL_MBO_XTLV_BTQ_TRIG_RSSI_DELTA = 0xa,
+ WL_MBO_XTLV_ANQP_CELL_SUPP = 0xb,
+ WL_MBO_XTLV_BIT_MASK = 0xc,
+ WL_MBO_XTLV_ASSOC_DISALLOWED = 0xd,
+ WL_MBO_XTLV_CELLULAR_DATA_PREF = 0xe
+};
+
+/* event bit mask flags for MBO */
+#define MBO_EVT_BIT_MASK_CELLULAR_SWITCH 0x0001 /* Evt bit mask to enab cellular switch */
+#define MBO_EVT_BIT_MASK_BTM_REQ_RCVD 0x0002 /* Evt bit mask to enab BTM req rcvd */
+
+/* masks for values in assoc_disallowed */
+#define WL_MBO_ASSOC_DISALLOWED_MASK 0xff00
+#define WL_MBO_ASSOC_DISALLOWED_SHIFT 8
+#define WL_MBO_ASSOC_DISALLOWED_RC_MASK 0xff
+
+typedef struct wl_mbo_counters {
+ /* No of transition req recvd */
+ uint16 trans_req_rcvd;
+ /* No of transition req with disassoc imminent */
+ uint16 trans_req_disassoc;
+ /* No of transition req with BSS Termination */
+ uint16 trans_req_bss_term;
+ /* No of trans req w/ unspecified reason */
+ uint16 trans_resn_unspec;
+ /* No of trans req w/ reason frame loss */
+ uint16 trans_resn_frm_loss;
+ /* No of trans req w/ reason traffic delay */
+ uint16 trans_resn_traffic_delay;
+ /* No of trans req w/ reason insufficient buffer */
+ uint16 trans_resn_insuff_bw;
+ /* No of trans req w/ reason load balance */
+ uint16 trans_resn_load_bal;
+ /* No of trans req w/ reason low rssi */
+ uint16 trans_resn_low_rssi;
+ /* No of trans req w/ reason excessive retransmission */
+ uint16 trans_resn_xcess_retransmn;
+ /* No of trans req w/ reason gray zone */
+ uint16 trans_resn_gray_zone;
+ /* No of trans req w/ reason switch to premium AP */
+ uint16 trans_resn_prem_ap_sw;
+ /* No of transition rejection sent */
+ uint16 trans_rejn_sent;
+ /* No of trans rejn reason excessive frame loss */
+ uint16 trans_rejn_xcess_frm_loss;
+ /* No of trans rejn reason excessive traffic delay */
+ uint16 trans_rejn_xcess_traffic_delay;
+ /* No of trans rejn reason insufficient QoS capability */
+ uint16 trans_rejn_insuffic_qos_cap;
+ /* No of trans rejn reason low RSSI */
+ uint16 trans_rejn_low_rssi;
+ /* No of trans rejn reason high interference */
+ uint16 trans_rejn_high_interference;
+ /* No of trans rejn reason service unavilable */
+ uint16 trans_rejn_service_unavail;
+ /* No of beacon request rcvd */
+ uint16 bcn_req_rcvd;
+ /* No of beacon report sent */
+ uint16 bcn_rep_sent;
+ /* No of null beacon report sent */
+ uint16 null_bcn_rep_sent;
+ /* No of wifi to cell switch */
+ uint16 wifi_to_cell;
+} wl_mbo_counters_t;
+
+#define WL_FILS_IOV_MAJOR_VER 1
+#define WL_FILS_IOV_MINOR_VER 1
+#define WL_FILS_IOV_MAJOR_VER_SHIFT 8
+#define WL_FILS_IOV_VERSION \
+ ((WL_FILS_IOV_MAJOR_VER << WL_FILS_IOV_MAJOR_VER_SHIFT)| WL_FILS_IOV_MINOR_VER)
+
+enum wl_fils_cmd_ids {
+ WL_FILS_CMD_ADD_IND_IE = 1,
+ WL_FILS_CMD_ADD_AUTH_DATA = 2, /* Deprecated, kept to prevent ROM invalidation */
+ WL_FILS_CMD_ADD_HLP_IE = 3,
+ WL_FILS_CMD_ADD_CONNECT_PARAMS = 4,
+ WL_FILS_CMD_GET_CONNECT_PARAMS = 5,
+ /* Add before this !! */
+ WL_FILS_CMD_LAST
+};
+
+enum wl_fils_xtlv_id {
+ WL_FILS_XTLV_IND_IE = 0x1,
+ WL_FILS_XTLV_AUTH_DATA = 0x2, /* Deprecated, kept to prevent ROM invalidation */
+ WL_FILS_XTLV_HLP_IE = 0x3,
+ WL_FILS_XTLV_ERP_USERNAME = 0x4,
+ WL_FILS_XTLV_ERP_REALM = 0x5,
+ WL_FILS_XTLV_ERP_RRK = 0x6,
+ WL_FILS_XTLV_ERP_NEXT_SEQ_NUM = 0x7,
+ WL_FILS_XTLV_KEK = 0x8,
+ WL_FILS_XTLV_PMK = 0x9,
+ WL_FILS_XTLV_TK = 0xa,
+ WL_FILS_XTLV_PMKID = 0xb
+};
+
+#define WL_OCE_IOV_MAJOR_VER 1
+#define WL_OCE_IOV_MINOR_VER 1
+#define WL_OCE_IOV_MAJOR_VER_SHIFT 8
+#define WL_OCE_IOV_VERSION \
+ ((WL_OCE_IOV_MAJOR_VER << WL_OCE_IOV_MAJOR_VER_SHIFT)| WL_OCE_IOV_MINOR_VER)
+
+enum wl_oce_cmd_ids {
+ WL_OCE_CMD_ENABLE = 1,
+ WL_OCE_CMD_PROBE_DEF_TIME = 2,
+ WL_OCE_CMD_FD_TX_PERIOD = 3,
+ WL_OCE_CMD_FD_TX_DURATION = 4,
+ WL_OCE_CMD_RSSI_TH = 5,
+ WL_OCE_CMD_RWAN_LINKS = 6,
+ WL_OCE_CMD_CU_TRIGGER = 7,
+ /* Add before this !! */
+ WL_OCE_CMD_LAST
+};
+
+enum wl_oce_xtlv_id {
+ WL_OCE_XTLV_ENABLE = 0x1,
+ WL_OCE_XTLV_PROBE_DEF_TIME = 0x2,
+ WL_OCE_XTLV_FD_TX_PERIOD = 0x3,
+ WL_OCE_XTLV_FD_TX_DURATION = 0x4,
+ WL_OCE_XTLV_RSSI_TH = 0x5,
+ WL_OCE_XTLV_RWAN_LINKS = 0x6,
+ WL_OCE_XTLV_CU_TRIGGER = 0x7
+};
+
+#define WL_ESP_IOV_MAJOR_VER 1
+#define WL_ESP_IOV_MINOR_VER 1
+#define WL_ESP_IOV_MAJOR_VER_SHIFT 8
+#define WL_ESP_IOV_VERSION \
+ ((WL_ESP_IOV_MAJOR_VER << WL_ESP_IOV_MAJOR_VER_SHIFT)| WL_ESP_IOV_MINOR_VER)
+
+enum wl_esp_cmd_ids {
+ WL_ESP_CMD_ENABLE = 1,
+ WL_ESP_CMD_STATIC = 2,
+ /* Add before this !! */
+ WL_ESP_CMD_LAST
+};
+
+enum wl_esp_xtlv_id {
+ WL_ESP_XTLV_ENABLE = 0x1,
+ WL_ESP_XTLV_STATIC_AC = 0x2, /* access category */
+ WL_ESP_XTLV_STATIC_TYPE = 0x3, /* data type */
+ WL_ESP_XTLV_STATIC_VAL = 0x4
+};
+
+/* otpread command */
+#define WL_OTPREAD_VER 1
+
+typedef struct {
+ uint16 version; /* cmd structure version */
+ uint16 cmd_len; /* cmd struct len */
+ uint32 rdmode; /* otp read mode */
+ uint32 rdoffset; /* byte offset into otp to start read */
+ uint32 rdsize; /* number of bytes to read */
+} wl_otpread_cmd_t;
+
+/* "otpecc_rows" command */
+typedef struct {
+ uint16 version; /* version of this structure */
+ uint16 len; /* len in bytes of this structure */
+ uint32 cmdtype; /* command type : 0 : read row data, 1 : ECC lock */
+ uint32 rowoffset; /* start row offset */
+ uint32 numrows; /* number of rows */
+ uint8 rowdata[]; /* read rows data */
+} wl_otpecc_rows_t;
+
+#define WL_OTPECC_ROWS_VER 1
+
+#define WL_OTPECC_ROWS_CMD_READ 0
+#define WL_OTPECC_ROWS_CMD_LOCK 1
+
+#define WL_OTPECC_ARGIDX_CMDTYPE 0 /* command type */
+#define WL_OTPECC_ARGIDX_ROWOFFSET 1 /* start row offset */
+#define WL_OTPECC_ARGIDX_NUMROWS 2 /* number of rows */
+
+/* "otpeccrows" raw data size per row */
+#define WL_ECCDUMP_ROW_SIZE_BYTE 6 /* 4 bytes row data + 2 bytes ECC status */
+#define WL_ECCDUMP_ROW_SIZE_WORD 3
+
+/* otpECCstatus */
+#define OTP_ECC_ENAB_SHIFT 13
+#define OTP_ECC_ENAB_MASK 0x7
+#define OTP_ECC_CORR_ST_SHIFT 12
+#define OTP_ECC_CORR_ST_MASK 0x1
+#define OTP_ECC_DBL_ERR_SHIFT 11
+#define OTP_ECC_DBL_ERR_MASK 0x1
+#define OTP_ECC_DED_ST_SHIFT 10
+#define OTP_ECC_DED_ST_MASK 0x1
+#define OTP_ECC_SEC_ST_SHIFT 9
+#define OTP_ECC_SEC_ST_MASK 0x1
+#define OTP_ECC_DATA_SHIFT 0
+#define OTP_ECC_DATA_MASK 0x7f
+
+/* OTP_ECC_CORR_ST field */
+#define OTP_ECC_MODE 1
+#define OTP_NO_ECC_MODE 0
+
+/* OTP_ECC_ENAB field (bit15:13) :
+ * When 2 or 3 bits are set,
+ * it indicates that OTP ECC is enabled on the last row read.
+ * Otherwise, ECC is disabled
+ */
+#define OTP_ECC_ENAB(val) \
+ (bcm_bitcount((uint8 *)&(val), sizeof(uint8)) > 1)
+
+#define WL_LEAKY_AP_STATS_GT_TYPE 0
+#define WL_LEAKY_AP_STATS_PKT_TYPE 1
+typedef struct wlc_leaked_infra_guard_marker {
+ /* type field for this TLV: WL_LEAKY_AP_STATS_GT_TYPE */
+ uint16 type;
+ /* length field for this TLV */
+ uint16 len;
+ /* guard sample sequence number; Updated by 1 on every guard sample */
+ uint32 seq_number;
+ /* Guard time start time (tsf; PS indicated and acked) */
+ uint32 start_time;
+ /* tsf timestamp for the GT end event */
+ uint32 gt_tsf_l;
+ /* Guard time period in ms */
+ uint16 guard_duration;
+ /* Number PPDUs in the notification */
+ uint16 num_pkts;
+ /* Flags to indicate some states see below */
+ uint8 flag;
+ /* pad for 32-bit alignment */
+ uint8 reserved[3];
+} wlc_leaked_infra_guard_marker_t;
+
+/* Flag information */
+#define WL_LEAKED_GUARD_TIME_NONE 0 /* Not in any guard time */
+#define WL_LEAKED_GUARD_TIME_FRTS (0x01 << 0) /* Normal FRTS power save */
+#define WL_LEAKED_GUARD_TIME_SCAN (0x01 << 1) /* Channel switch due to scanning */
+#define WL_LEAKED_GUARD_TIME_AWDL_PSF (0x01 << 2) /* Channel switch due to AWDL PSF */
+#define WL_LEAKED_GUARD_TIME_AWDL_AW (0x01 << 3) /* Channel switch due to AWDL AW */
+#define WL_LEAKED_GUARD_TIME_INFRA_STA (0x01 << 4) /* generic type infra sta channel switch */
+#define WL_LEAKED_GUARD_TIME_TERMINATED (0x01 << 7) /* indicate a GT is terminated early */
+
+typedef struct wlc_leaked_infra_packet_stat {
+ uint16 type; /* type field for this TLV: WL_LEAKY_AP_STATS_PKT_TYPE */
+ uint16 len; /* length field for this TLV */
+ uint16 ppdu_len_bytes; /* PPDU packet length in bytes */
+ uint16 num_mpdus; /* number of the MPDUs in the PPDU */
+ uint32 ppdu_time; /* PPDU arrival time at the begining of the guard time */
+ uint32 rate; /* PPDU packet rate; Received packet's data rate */
+ uint16 seq_number; /* sequence number */
+ int8 rssi; /* RSSI */
+ uint8 tid; /* tid */
+} wlc_leaked_infra_packet_stat_t;
+
+/* Wake timer structure definition */
+#define WAKE_TIMER_VERSION 1
+#define WAKE_TIMER_NOLIMIT 0xFFFF
+
+typedef struct wake_timer {
+ uint16 ver;
+ uint16 len;
+ uint16 limit; /* number of events to deliver
+ * 0-disable, 0xffff-indefinite, num_events otherwise
+ */
+ uint16 count; /* number of events delivered since enable (get only) */
+ uint16 period; /* timeout/period in milliseconds */
+} wake_timer_t;
+
+typedef struct wl_desense_restage_gain {
+ uint16 version;
+ uint16 length;
+ uint32 band;
+ uint8 num_cores;
+ uint8 desense_array[WL_TX_CHAINS_MAX];
+ uint8 PAD[3];
+} wl_desense_restage_gain_t;
+
+#define MAX_UCM_CHAINS 5
+#define MAX_UCM_PROFILES 10
+#define UCM_PROFILE_VERSION_1 1
+
+/* UCM per chain attribute struct */
+typedef struct wlc_btcx_chain_attr {
+ uint16 length; /* chain attr length, version is same as profile version */
+ int8 desense_level; /* per chain desense level */
+ int8 ack_pwr_strong_rssi; /* per chain ack power at strong rssi */
+ int8 ack_pwr_weak_rssi; /* per chain ack power at weak rssi */
+ int8 tx_pwr_strong_rssi; /* per chain tx power at strong rssi */
+ int8 tx_pwr_weak_rssi; /* per chain tx power at weak rssi */
+ uint8 PAD[1]; /* additional bytes for alignment */
+} wlc_btcx_chain_attr_t;
+
+typedef struct wlc_btcx_profile_v1 {
+ uint16 version; /* UCM profile version */
+ uint16 length; /* profile size */
+ uint16 fixed_length; /* size of the fixed portion of the profile */
+ uint8 init; /* profile initialized or not */
+ uint8 chain_attr_count; /* Number of elements in chain_attr array */
+ uint8 profile_index; /* profile index */
+ uint8 mode_strong_wl_bt; /* Mode under strong WLAN and BT RSSI */
+ uint8 mode_weak_wl; /* Mode under weak WLAN RSSI */
+ uint8 mode_weak_bt; /* Mode under weak BT RSSI */
+ uint8 mode_weak_wl_bt; /* Mode under weak BT and WLAN RSSI */
+ int8 mode_wl_hi_lo_rssi_thresh; /* Strong to weak WLAN RSSI threshold for mode selection */
+ int8 mode_wl_lo_hi_rssi_thresh; /* Weak to strong WLAN RSSI threshold for mode selection */
+ int8 mode_bt_hi_lo_rssi_thresh; /* Strong to weak BT RSSI threshold for mode selection */
+ int8 mode_bt_lo_hi_rssi_thresh; /* Weak to strong BT RSSI threshold for mode selection */
+ int8 desense_wl_hi_lo_rssi_thresh; /* Strong to weak RSSI threshold for desense */
+ int8 desense_wl_lo_hi_rssi_thresh; /* Weak to strong RSSI threshold for desense */
+ int8 ack_pwr_wl_hi_lo_rssi_thresh; /* Strong to weak RSSI threshold for ACK power */
+ int8 ack_pwr_wl_lo_hi_rssi_thresh; /* Weak to strong RSSI threshold for ACK power */
+ int8 tx_pwr_wl_hi_lo_rssi_thresh; /* Strong to weak RSSI threshold for Tx power */
+ int8 tx_pwr_wl_lo_hi_rssi_thresh; /* Weak to strong RSSI threshold for Tx power */
+ uint8 PAD[1]; /* additional bytes for 4 byte alignment */
+ wlc_btcx_chain_attr_t chain_attr[]; /* variable length array with chain attributes */
+} wlc_btcx_profile_v1_t;
+
+#define SSSR_D11_RESET_SEQ_STEPS 5
+#define SSSR_REG_INFO_VER 0
+#define SSSR_REG_INFO_VER_1 1
+
+typedef struct sssr_reg_info_v0 {
+ uint16 version;
+ uint16 length; /* length of the structure validated at host */
+ struct {
+ struct {
+ uint32 pmuintmask0;
+ uint32 pmuintmask1;
+ uint32 resreqtimer;
+ uint32 macresreqtimer;
+ uint32 macresreqtimer1;
+ } base_regs;
+ } pmu_regs;
+ struct {
+ struct {
+ uint32 intmask;
+ uint32 powerctrl;
+ uint32 clockcontrolstatus;
+ uint32 powerctrl_mask;
+ } base_regs;
+ } chipcommon_regs;
+ struct {
+ struct {
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 resetctrl;
+ uint32 itopoobb;
+ } wrapper_regs;
+ } arm_regs;
+ struct {
+ struct {
+ uint32 ltrstate;
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 itopoobb;
+ } wrapper_regs;
+ } pcie_regs;
+ struct {
+ struct {
+ uint32 ioctrl;
+ } wrapper_regs;
+ uint32 vasip_sr_addr;
+ uint32 vasip_sr_size;
+ } vasip_regs;
+ struct {
+ struct {
+ uint32 xmtaddress;
+ uint32 xmtdata;
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 resetctrl;
+ uint32 itopoobb;
+ uint32 ioctrl;
+ uint32 ioctrl_resetseq_val[SSSR_D11_RESET_SEQ_STEPS];
+ } wrapper_regs;
+ uint32 sr_size;
+ } mac_regs[MAX_NUM_D11CORES];
+} sssr_reg_info_v0_t;
+
+typedef struct sssr_reg_info_v1 {
+ uint16 version;
+ uint16 length; /* length of the structure validated at host */
+ struct {
+ struct {
+ uint32 pmuintmask0;
+ uint32 pmuintmask1;
+ uint32 resreqtimer;
+ uint32 macresreqtimer;
+ uint32 macresreqtimer1;
+ } base_regs;
+ } pmu_regs;
+ struct {
+ struct {
+ uint32 intmask;
+ uint32 powerctrl;
+ uint32 clockcontrolstatus;
+ uint32 powerctrl_mask;
+ } base_regs;
+ } chipcommon_regs;
+ struct {
+ struct {
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 resetctrl;
+ uint32 itopoobb;
+ } wrapper_regs;
+ } arm_regs;
+ struct {
+ struct {
+ uint32 ltrstate;
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 itopoobb;
+ } wrapper_regs;
+ } pcie_regs;
+ struct {
+ struct {
+ uint32 ioctrl;
+ } wrapper_regs;
+ uint32 vasip_sr_addr;
+ uint32 vasip_sr_size;
+ } vasip_regs;
+ struct {
+ struct {
+ uint32 xmtaddress;
+ uint32 xmtdata;
+ uint32 clockcontrolstatus;
+ uint32 clockcontrolstatus_val;
+ } base_regs;
+ struct {
+ uint32 resetctrl;
+ uint32 itopoobb;
+ uint32 ioctrl;
+ uint32 ioctrl_resetseq_val[SSSR_D11_RESET_SEQ_STEPS];
+ } wrapper_regs;
+ uint32 sr_size;
+ } mac_regs[MAX_NUM_D11CORES];
+ struct {
+ uint32 dig_sr_addr;
+ uint32 dig_sr_size;
+ } dig_mem_info;
+} sssr_reg_info_v1_t;
+
+#ifndef SSSR_REG_INFO_HAS_ALIAS
+typedef sssr_reg_info_v0_t sssr_reg_info_t;
+#endif // endif
+
+/* ADaptive Power Save(ADPS) structure definition */
+#define WL_ADPS_IOV_MAJOR_VER 1
+#define WL_ADPS_IOV_MINOR_VER 0
+#define WL_ADPS_IOV_MAJOR_VER_SHIFT 8
+#define WL_ADPS_IOV_VER \
+ ((WL_ADPS_IOV_MAJOR_VER << WL_ADPS_IOV_MAJOR_VER_SHIFT) | WL_ADPS_IOV_MINOR_VER)
+
+#define ADPS_NUM_DIR 2
+#define ADPS_RX 0
+#define ADPS_TX 1
+
+#define WL_ADPS_IOV_MODE 0x0001
+#define WL_ADPS_IOV_RSSI 0x0002
+#define WL_ADPS_IOV_DUMP 0x0003
+#define WL_ADPS_IOV_DUMP_CLEAR 0x0004
+#define WL_ADPS_IOV_SUSPEND 0x0005
+
+#define ADPS_SUMMARY_STEP_NUM 2
+#define ADPS_SUMMARY_STEP_LOW 0
+#define ADPS_SUMMARY_STEP_HIGH 1
+
+#define ADPS_SUB_IOV_VERSION_1 1
+#define ADPS_SUB_IOV_VERSION_2 2
+
+/* suspend/resume ADPS by wl/private command from host */
+#define ADPS_RESUME 0u
+#define ADPS_SUSPEND 1u
+
+typedef struct wl_adps_params_v1 {
+ uint16 version;
+ uint16 length;
+ uint8 band; /* band - 2G or 5G */
+ uint8 mode; /* operation mode, default = 0 (ADPS disable) */
+ uint16 padding;
+} wl_adps_params_v1_t;
+
+typedef struct wl_adps_rssi {
+ int32 thresh_hi; /* rssi threshold to resume ADPS operation */
+ int32 thresh_lo; /* rssi threshold to suspend ADPS operation */
+} wl_adps_rssi_t;
+
+typedef struct wl_adps_rssi_params_v1 {
+ uint16 version;
+ uint16 length;
+ uint8 band;
+ uint8 padding[3];
+ wl_adps_rssi_t rssi;
+} wl_adps_rssi_params_v1_t;
+
+typedef struct adps_stat_elem {
+ uint32 duration; /* each step duration time (mSec) */
+ uint32 counts; /* each step hit count number */
+} adps_stat_elem_t;
+
+typedef struct wl_adps_dump_summary_v1 {
+ uint16 version;
+ uint16 length;
+ uint8 mode; /* operation mode: On/Off */
+ uint8 flags; /* restrict flags */
+ uint8 current_step; /* current step */
+ uint8 padding;
+ adps_stat_elem_t stat[ADPS_SUMMARY_STEP_NUM]; /* statistics */
+} wl_adps_dump_summary_v1_t;
+
+typedef struct wl_adps_dump_summary_v2 {
+ uint16 version;
+ uint16 length;
+ uint8 mode; /* operation mode: On/Off */
+ uint8 current_step; /* current step */
+ uint8 padding[2];
+ uint32 flags; /* restrict flags */
+ adps_stat_elem_t stat[ADPS_SUMMARY_STEP_NUM]; /* statistics */
+} wl_adps_dump_summary_v2_t;
+
+typedef struct wl_adps_suspend_v1 {
+ uint16 version;
+ uint16 length;
+ uint8 suspend; /* 1: suspend 0: resume */
+ uint8 padding[3];
+} wl_adps_suspend_v1_t;
+
+typedef struct wlc_btc_2gchain_dis {
+ uint16 ver;
+ uint16 len;
+ uint8 chain_dis;
+ uint8 flag;
+} wlc_btc_2gchain_dis_t;
+
+#define WLC_BTC_2GCHAIN_DIS_REASSOC 0x1
+#define WLC_BTC_2GCHAIN_DIS_VER1 0x1
+#define WLC_BTC_2GCHAIN_DIS_VER1_LEN 6
+
+/* --- BTCX WiFi Protection (btc_wifi_prot iovar) --- */
+
+/* Current iovar structure version: 1 */
+#define WL_BTC_WIFI_PROT_VER_1 1
+
+typedef struct wl_btc_wifi_prot_v1 {
+ uint16 ver; /* version */
+ uint16 len; /* total length */
+ uint8 data[]; /* bcm_xtlv_t payload */
+} wl_btc_wifi_prot_v1_t;
+
+/* Xtlv tags (protection type) and data */
+#define WL_BTC_WIFI_PROT_M1_M4 1
+typedef struct wl_btc_wifi_prot_m1_m4 {
+ uint32 enable; /* enable/disable m1-m4 protection */
+ uint32 timeout; /* maximum timeout in ms (0: default) */
+} wl_btc_wifi_prot_m1_m4_t;
+
+#define WL_BTC_WIFI_PROT_ENABLE 1
+#define WL_BTC_WIFI_PROT__DISABLE 0
+
+/* --- End BTCX WiFi Protection --- */
+
+/* --- BTCX ULMU disable (btc_ulmu_config iovar) --- */
+
+/* Version number */
+#define WL_BTC_ULMU_CONFIG_VER_1 1
+typedef struct wl_btc_ulmu_config_v1 {
+ uint16 version; /* btc_ulmu_config version */
+ uint16 len; /* Total length */
+ uint32 ulmu_bt_task_bm; /* BT Task bimtap for ULMU disable */
+ uint32 ulmu_bt_period_th; /* BT period thresh for ULMU disable */
+} wl_btc_ulmu_config_v1_t;
+
+/* --- End BTCX ULMU config --- */
+enum wl_rpsnoa_cmd_ids {
+ WL_RPSNOA_CMD_ENABLE = 1,
+ WL_RPSNOA_CMD_STATUS,
+ WL_RPSNOA_CMD_PARAMS,
+ WL_RPSNOA_CMD_LAST
+};
+
+typedef struct rpsnoa_cmnhdr {
+ uint16 ver; /* cmd structure version */
+ uint16 len; /* cmd structure len */
+ uint32 subcmd;
+ uint32 cnt;
+} rpsnoa_cmnhdr_t;
+
+typedef struct rpsnoa_data {
+ int16 band;
+ int16 value;
+} rpsnoa_data_t;
+
+typedef struct rpsnoa_stats {
+ int16 band;
+ int16 state;
+ uint32 sleep_dur;
+ uint32 sleep_avail_dur;
+ uint32 last_pps;
+} rpsnoa_stats_t;
+
+typedef struct rpsnoa_param {
+ uint16 band;
+ uint8 level;
+ uint8 stas_assoc_check;
+ uint32 pps;
+ uint32 quiet_time;
+} rpsnoa_param_t;
+
+typedef struct rpsnoa_iovar {
+ rpsnoa_cmnhdr_t hdr;
+ rpsnoa_data_t data[1];
+} rpsnoa_iovar_t;
+
+typedef struct rpsnoa_iovar_status {
+ rpsnoa_cmnhdr_t hdr;
+ rpsnoa_stats_t stats[1];
+} rpsnoa_iovar_status_t;
+
+typedef struct rpsnoa_iovar_params {
+ rpsnoa_cmnhdr_t hdr;
+ rpsnoa_param_t param[1];
+} rpsnoa_iovar_params_t;
+
+/* Per-interface reportable stats types */
+enum wl_ifstats_xtlv_id {
+ /* global */
+ WL_IFSTATS_XTLV_SLICE_INDEX = 1,
+ WL_IFSTATS_XTLV_IF_INDEX = 2,
+ WL_IFSTATS_XTLV_MAC_ADDR = 3,
+ WL_IFSTATS_XTLV_REPORT_CMD = 4, /* Comes in an iovar */
+ WL_IFSTATS_XTLV_BUS_PCIE = 5,
+
+ /* Report data across all SCBs using ecounters */
+ /* STA_info ecounters */
+ WL_IFSTATS_XTLV_WL_STA_INFO_ECOUNTERS = 0x100,
+ /* For AMPDU stat sub-types requested in a different format */
+ /* these could be sum and report stats across slices. OR
+ * report sub-types in pairs so host can sum and add.
+ * Information sent here is across slices, therefore global
+ */
+ WL_IFSTATS_XTLV_TX_AMPDU_STATS = 0x101,
+ WL_IFSTATS_XTLV_RX_AMPDU_STATS = 0x102,
+ /* scb ecounter statistics */
+ WL_IFSTATS_XTLV_SCB_ECOUNTERS = 0x103,
+ /* Global NAN stats */
+ WL_IFSTATS_XTLV_NAN_STATS = 0x104,
+
+ /* Per-slice information
+ * Per-interface reporting could also include slice specific data
+ */
+ /* xtlv container for reporting */
+ WL_IFSTATS_XTLV_WL_SLICE = 0x301,
+ /* Per-slice AMPDU stats */
+ WL_IFSTATS_XTLV_WL_SLICE_TX_AMPDU_DUMP = 0x302,
+ WL_IFSTATS_XTLV_WL_SLICE_RX_AMPDU_DUMP = 0x303,
+ /* Per-slice BTCOEX stats */
+ WL_IFSTATS_XTLV_WL_SLICE_BTCOEX = 0x304,
+ /* V11_WLCNTRS used in ecounters */
+ WL_IFSTATS_XTLV_WL_SLICE_V11_WLCNTRS = 0x305,
+ /* V30_WLCNTRS Used in ecounters */
+ WL_IFSTATS_XTLV_WL_SLICE_V30_WLCNTRS = 0x306,
+ /* phy,ucode,scan pwrstats */
+ WL_IFSTATS_XTLV_WL_SLICE_PWRSTATS_PHY = 0x307,
+ WL_IFSTATS_XTLV_WL_SLICE_PWRSTATS_SCAN = 0x308,
+ WL_IFSTATS_XTLV_WL_SLICE_PWRSTATS_WAKE_V2 = 0x309,
+ /* Per-slice LTECOEX stats */
+ WL_IFSTATS_XTLV_WL_SLICE_LTECOEX = 0x30A,
+ /* TVPM ecounters */
+ WL_IFSTATS_XTLV_WL_SLICE_TVPM = 0x30B,
+ /* TDMTX ecounters */
+ WL_IFSTATS_XTLV_WL_SLICE_TDMTX = 0x30C,
+ /* Slice specific state capture in periodic fasion */
+ WL_SLICESTATS_XTLV_PERIODIC_STATE = 0x30D,
+ /* Per-slice BTCOEX task duration stats */
+ WL_IFSTATS_XTLV_WL_SLICE_BTCOEX_TSKDUR_STATS = 0x30E,
+ /* Per-interface */
+ /* XTLV container for reporting */
+ WL_IFSTATS_XTLV_IF = 0x501,
+ /* Generic stats applicable to all IFs */
+ WL_IFSTATS_XTLV_GENERIC = 0x502,
+ /* Infra specific */
+ WL_IFSTATS_XTLV_INFRA_SPECIFIC = 0x503,
+ /* MGT counters infra and softAP */
+ WL_IFSTATS_XTLV_MGT_CNT = 0x504,
+ /* AMPDU stats on per-IF */
+ WL_IFSTATS_XTLV_AMPDU_DUMP = 0x505,
+ WL_IFSTATS_XTLV_IF_SPECIFIC = 0x506,
+ WL_IFSTATS_XTLV_WL_PWRSTATS_AWDL = 0x507,
+ WL_IFSTATS_XTLV_IF_LQM = 0x508,
+ /* Interface specific state capture in periodic fashion */
+ WL_IFSTATS_XTLV_IF_PERIODIC_STATE = 0x509,
+ /* Event statistics on per-IF */
+ WL_IFSTATS_XTLV_IF_EVENT_STATS = 0x50A,
+ /* ecounters for nan */
+ /* nan slot stats */
+ WL_IFSTATS_XTLV_NAN_SLOT_STATS = 0x601
+};
+
+/* current version of wl_stats_report_t structure for request */
+#define WL_STATS_REPORT_REQUEST_VERSION_V2 2
+
+/* current version of wl_stats_report_t structure for response */
+#define WL_STATS_REPORT_RESPONSE_VERSION_V2 2
+
+/** Top structure of if_counters IOVar buffer */
+typedef struct wl_stats_report {
+ uint16 version; /**< see version definitions above */
+ uint16 length; /**< length of data including all paddings. */
+ uint8 data []; /**< variable length payload:
+ * 1 or more bcm_xtlv_t type of tuples.
+ * each tuple is padded to multiple of 4 bytes.
+ * 'length' field of this structure includes all paddings.
+ */
+} wl_stats_report_t;
+
+/* interface specific mgt count */
+#define WL_MGT_STATS_VERSION_V1 1
+/* Associated stats type: WL_IFSTATS_MGT_CNT */
+typedef struct {
+ uint16 version;
+ uint16 length;
+
+ /* detailed control/management frames */
+ uint32 txnull;
+ uint32 rxnull;
+ uint32 txqosnull;
+ uint32 rxqosnull;
+ uint32 txassocreq;
+ uint32 rxassocreq;
+ uint32 txreassocreq;
+ uint32 rxreassocreq;
+ uint32 txdisassoc;
+ uint32 rxdisassoc;
+ uint32 txassocrsp;
+ uint32 rxassocrsp;
+ uint32 txreassocrsp;
+ uint32 rxreassocrsp;
+ uint32 txauth;
+ uint32 rxauth;
+ uint32 txdeauth;
+ uint32 rxdeauth;
+ uint32 txprobereq;
+ uint32 rxprobereq;
+ uint32 txprobersp;
+ uint32 rxprobersp;
+ uint32 txaction;
+ uint32 rxaction;
+ uint32 txpspoll;
+ uint32 rxpspoll;
+} wl_if_mgt_stats_t;
+
+#define WL_INFRA_STATS_VERSION_V1 1
+/* Associated stats type: WL_IFSTATS_INFRA_SPECIFIC */
+typedef struct wl_infra_stats {
+ uint16 version; /**< version of the structure */
+ uint16 length;
+ uint32 rxbeaconmbss;
+ uint32 tbtt;
+} wl_if_infra_stats_t;
+
+#define LTECOEX_STATS_VER 1
+
+typedef struct wlc_ltecoex_stats {
+ uint16 version; /**< WL_IFSTATS_XTLV_WL_SLICE_LTECOEX */
+ uint16 len; /* Length of wl_ltecx_stats structure */
+ uint8 slice_index; /* Slice unit of wl_ltecx_stats structure */
+ uint8 pad[3]; /* Padding */
+ /* LTE noise based eCounters Bins
+ cumulative the wl_cnt_wlc_t and wl_ctl_mgt_cnt_t
+ counter information based on LTE Coex interference level
+ */
+ uint32 txframe_no_LTE; /* txframe counter in no LTE Coex case */
+ uint32 rxframe_no_LTE; /* rxframe counter in no LTE Coex case */
+ uint32 rxrtry_no_LTE; /* rxrtry counter in no LTE Coex case */
+ uint32 txretrans_no_LTE; /* txretrans counter in no LTE Coex case */
+ uint32 txnocts_no_LTE; /* txnocts counter in no LTE Coex case */
+ uint32 txrts_no_LTE; /* txrts counter in no LTE Coex case */
+ uint32 txdeauth_no_LTE; /* txdeauth counter in no LTE Coex case */
+ uint32 txassocreq_no_LTE; /* txassocreq counter in no LTE Coex case */
+ uint32 txassocrsp_no_LTE; /* txassocrsp counter in no LTE Coex case */
+ uint32 txreassocreq_no_LTE; /* txreassocreq counter in no LTE Coex case */
+ uint32 txreassocrsp_no_LTE; /* txreassocrsp counter in no LTE Coex case */
+ uint32 txframe_light_LTE; /* txframe counter in light LTE Coex case */
+ uint32 txretrans_light_LTE; /* txretrans counter in light LTE Coex case */
+ uint32 rxframe_light_LTE; /* rxframe counter in light LTE Coex case */
+ uint32 rxrtry_light_LTE; /* rxrtry counter in light LTE Coex case */
+ uint32 txnocts_light_LTE; /* txnocts counter in light LTE Coex case */
+ uint32 txrts_light_LTE; /* txrts counter in light LTE Coex case */
+ uint32 txdeauth_light_LTE; /* txdeauth counter in light LTE Coex case */
+ uint32 txassocreq_light_LTE; /* txassocreq counter in light LTE Coex case */
+ uint32 txassocrsp_light_LTE; /* txassocrsp counter in light LTE Coex case */
+ uint32 txreassocreq_light_LTE; /* txreassocreq counter in light LTE Coex case */
+ uint32 txreassocrsp_light_LTE; /* txreassocrsp counter in light LTE Coex case */
+ uint32 txframe_heavy_LTE; /* txframe counter in heavy LTE Coex case */
+ uint32 txretrans_heavy_LTE; /* txretrans counter in heavy LTE Coex case */
+ uint32 rxframe_heavy_LTE; /* rxframe counter in heavy LTE Coex case */
+ uint32 rxrtry_heavy_LTE; /* rxrtry counter in heavy LTE Coex case */
+ uint32 txnocts_heavy_LTE; /* txnocts counter in heavy LTE Coex case */
+ uint32 txrts_heavy_LTE; /* txrts counter in heavy LTE Coex case */
+ uint32 txdeauth_heavy_LTE; /* txdeauth counter in heavy LTE Coex case */
+ uint32 txassocreq_heavy_LTE; /* txassocreq counter in heavy LTE Coex case */
+ uint32 txassocrsp_heavy_LTE; /* txassocrsp counter in heavy LTE Coex case */
+ uint32 txreassocreq_heavy_LTE; /* txreassocreq counter in heavy LTE Coex case */
+ uint32 txreassocrsp_heavy_LTE; /* txreassocrsp counter in heavy LTE Coex case */
+
+ /* LTE specific ecounters */
+ uint16 type4_txinhi_dur; /* Duration of tx inhibit(in ms) due to Type4 */
+ uint16 type4_nonzero_cnt; /* Counts of none zero Type4 msg */
+ uint16 type4_timeout_cnt; /* Counts of Type4 timeout */
+ uint16 rx_pri_dur; /* Duration of wlan_rx_pri assertions */
+ uint16 rx_pri_cnt; /* Count of wlan_rx_pri assertions */
+ uint16 type6_dur; /* duration of LTE Tx power limiting assertions */
+ uint16 type6_cnt; /* Count of LTE Tx power limiting assertions */
+ uint16 ts_prot_frm_cnt; /* count of WLAN protection frames triggered by LTE coex */
+ uint16 ts_gr_cnt; /* count of intervals granted to WLAN in timesharing */
+ uint16 ts_gr_dur; /* duration granted to WLAN in timesharing */
+} wlc_ltecoex_stats_t;
+
+#define CSA_EVT_CSA_RXED (1 << 0)
+#define CSA_EVT_CSA_TIMEOUT (1 << 1)
+#define CSA_EVT_FROM_INFRA (1 << 2)
+typedef struct csa_event_data {
+ chanspec_t chan_old;
+ dot11_ext_csa_ie_t ecsa;
+ dot11_mesh_csp_ie_t mcsp;
+ dot11_wide_bw_chan_switch_ie_t wbcs;
+ uint8 flags;
+ uint8 pad[3];
+} csa_event_data_t;
+
+/* ifdef (WL_ASSOC_BCN_RPT) */
+enum wl_bcn_report_cmd_id {
+ WL_BCN_RPT_CMD_VER = 0,
+ WL_BCN_RPT_CMD_CONFIG = 1,
+ WL_BCN_RPT_CMD_VENDOR_IE = 2,
+ WL_BCN_RPT_CMD_LAST
+};
+
+/* beacon report specific macros */
+#define WL_BCN_RPT_CCX_IE_OVERRIDE (1u << 0)
+
+/* beacon report specific macros */
+#define WL_BCN_RPT_ASSOC_SCAN_UNSOLICITED_MODE (1u << 1)
+#define WL_BCN_RPT_ASSOC_SCAN_SOLICITED_MODE (1u << 2)
+#define WL_BCN_RPT_ASSOC_SCAN_MODE_SHIFT (1)
+#define WL_BCN_RPT_ASSOC_SCAN_MODE_MASK (WL_BCN_RPT_ASSOC_SCAN_UNSOLICITED_MODE |\
+ WL_BCN_RPT_ASSOC_SCAN_SOLICITED_MODE)
+#define WL_BCN_RPT_ASSOC_SCAN_MODE_MAX (WL_BCN_RPT_ASSOC_SCAN_MODE_MASK >> \
+ WL_BCN_RPT_ASSOC_SCAN_MODE_SHIFT)
+/* beacon report mode specific macro */
+#define WL_BCN_RPT_ASSOC_SCAN_MODE_DEFAULT WL_BCN_RPT_ASSOC_SCAN_UNSOLICITED_MODE
+
+/* beacon report timeout config specific macros */
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_TIMEOUT_DEFAULT (120000)
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_TIMEOUT_MIN (60000)
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_TIMEOUT_MAX (0xFFFFFFFF)
+
+/* beacon report cache count specific macros */
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_COUNT_MIN (0)
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_COUNT_MAX (8)
+#define WL_BCN_RPT_ASSOC_SCAN_CACHE_COUNT_DEFAULT (WL_BCN_RPT_ASSOC_SCAN_CACHE_COUNT_MAX)
+
+#define WL_BCN_REPORT_CMD_VERSION 1
+struct wl_bcn_report_cfg {
+ uint32 flags; /**< Flags that defines the operation/setting information */
+ uint32 scan_cache_timeout; /**< scan cache timeout value in millisec */
+ uint32 scan_cache_timer_pend; /**< Read only pending time for timer expiry in millisec */
+ uint8 scan_cache_cnt; /**< scan cache count */
+};
+
+/* endif (WL_ASSOC_BCN_RPT) */
+
+/* Thermal, Voltage, and Power Mitigation */
+#define TVPM_REQ_VERSION_1 1
+#define TVPM_REQ_CURRENT_VERSION TVPM_REQ_VERSION_1
+
+/* tvpm iovar data */
+typedef struct {
+ uint16 version; /* TVPM request version */
+ uint16 length; /* Length of the entire structure */
+
+ uint16 req_type; /* Request type: wl_tvpm_req_type_t */
+ uint16 req_len; /* Length of the following value */
+ uint8 value[]; /* Variable length data depending on req_type */
+} wl_tvpm_req_t;
+
+/* tvpm iovar request types */
+typedef enum {
+ WL_TVPM_REQ_CLTM_INDEX, /* req_value: uint32, range 1...100 */
+ WL_TVPM_REQ_PPM_INDEX, /* req_value: uint32, range 1...100 */
+ WL_TVPM_REQ_ENABLE, /* req_value: uint32, range 0...1 */
+ WL_TVPM_REQ_STATUS, /* req_value: none */
+ WL_TVPM_REQ_PERIOD, /* req_value: int32, range {-1,1-10} */
+ WL_TVPM_REQ_SETVAL,
+ WL_TVPM_REQ_MAX
+} wl_tvpm_req_type_t;
+
+/* structure for data returned by request type WL_TVPM_REQ_STATUS */
+typedef struct wl_tvpm_status {
+ uint16 enable; /* whether TVPM is enabled */
+ uint16 tx_dutycycle; /* a percentage: 1-100 */
+ int16 tx_power_backoff; /* 0...-6 */
+ uint16 num_active_chains; /* 1...3 */
+ int16 temp; /* local temperature in degrees C */
+ uint8 vbat; /* local voltage in units of 0.1V */
+ uint8 pad;
+} wl_tvpm_status_t;
+
+/* TVPM ecounters */
+typedef struct wl_tvpm_ecounters_t {
+ uint16 version; /* version field */
+ uint16 length; /* byte length in wl_tvpm_ecounters_t starting at version */
+ uint16 tx_dutycycle; /* a percentage: 1-100 */
+ int16 tx_power_backoff; /* 0...-6 */
+ uint16 num_active_chains; /* 1...3 */
+ int16 temp; /* local temperature */
+ uint8 vbat; /* local voltage */
+ uint8 cltm; /* CLTM index */
+ uint8 ppm; /* PPM index */
+ uint8 pad; /* pad to align to uint16 */
+} wl_tvpm_ecounters_t;
+
+#define TDMTX_ECOUNTERS_VERSION_V1 1
+#define TDMTX_ECOUNTERS_VERSION_V2 2
+
+/* TDMTX ecounters */
+typedef struct wl_tdmtx_ecounters_v1 {
+ uint16 version; /* version field */
+ uint16 length; /* byte length in wl_tdmtx_ecounters_t starting at version */
+ uint32 txa_on; /* TXA on requests */
+ uint32 txa_tmcnt; /* Total number of TXA timeout */
+ uint32 por_on; /* TXA POR requests */
+ uint32 txpuen; /* Path enable requests */
+ uint32 txpudis; /* Total number of times Tx path is muted on the slice */
+ uint32 txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint32 txdefer; /* Total number of times Tx was deferred by the slice */
+ uint32 txmute; /* Total number of times active Tx muted on the slice */
+ uint32 actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint32 txa_dur; /* Total time txa on */
+ uint32 txpri_dur; /* Total time TXPri */
+ uint32 txdefer_dur; /* Total time txdefer */
+} wl_tdmtx_ecounters_v1_t;
+
+/* TDMTX ecounters for version 2 */
+typedef struct wl_tdmtx_ecounters_v2 {
+ uint16 version; /* version field */
+ uint16 length; /* byte length in wl_tdmtx_ecounters_t starting at version */
+ uint32 txa_on; /* TXA on requests */
+ uint32 txa_tmcnt; /* Total number of TXA timeout */
+ uint32 porhi_on; /* TXA PORHI requests */
+ uint32 porlo_on; /* TXA PORLO requests */
+ uint32 txpuen; /* Path enable requests */
+ uint32 txpudis; /* Total number of times Tx path is muted on the slice */
+ uint32 txpri_on; /* Total number of times Tx priority was obtained by the slice */
+ uint32 txdefer; /* Total number of times Tx was deferred by the slice */
+ uint32 txmute; /* Total number of times active Tx muted on the slice */
+ uint32 actpwrboff; /* Total number of times TX power is backed off by the slice */
+ uint32 txa_dur; /* Total time txa on */
+ uint32 txpri_dur; /* Total time TXPri */
+ uint32 txdefer_dur; /* Total time txdefer */
+} wl_tdmtx_ecounters_v2_t;
+
+/* Note: if this struct is changing update wl_scb_ecounters_vX_t version,
+ * as this struct is sent as payload in wl_scb_ecounters_vX_t
+ */
+typedef struct wlc_scb_stats_v1 {
+ uint32 tx_pkts; /* num of packets transmitted (ucast) */
+ uint32 tx_failures; /* num of packets failed */
+ uint32 rx_ucast_pkts; /* num of unicast packets received */
+ uint32 rx_mcast_pkts; /* num of multicast packets received */
+ uint32 tx_rate; /* Rate of last successful tx frame */
+ uint32 rx_rate; /* Rate of last successful rx frame */
+ uint32 rx_decrypt_succeeds; /* num of packets decrypted successfully */
+ uint32 rx_decrypt_failures; /* num of packets decrypted unsuccessfully */
+ uint32 tx_mcast_pkts; /* num of mcast pkts txed */
+ uint64 tx_ucast_bytes; /* data bytes txed (ucast) */
+ uint64 tx_mcast_bytes; /* data bytes txed (mcast) */
+ uint64 rx_ucast_bytes; /* data bytes recvd ucast */
+ uint64 rx_mcast_bytes; /* data bytes recvd mcast */
+ uint32 tx_pkts_retried; /* num of packets where a retry was necessary */
+ uint32 tx_pkts_retry_exhausted; /* num of packets where a retry was exhausted */
+ uint32 tx_rate_mgmt; /* Rate of last transmitted management frame */
+ uint32 tx_rate_fallback; /* last used lowest fallback TX rate */
+ uint32 rx_pkts_retried; /* # rx with retry bit set */
+ uint32 tx_pkts_total; /* total num of tx pkts */
+ uint32 tx_pkts_retries; /* total num of tx retries */
+ uint32 tx_pkts_fw_total; /* total num of tx pkts generated from fw */
+ uint32 tx_pkts_fw_retries; /* num of fw generated tx pkts retried */
+ uint32 tx_pkts_fw_retry_exhausted; /* num of fw generated tx pkts where retry exhausted */
+} wlc_scb_stats_v1_t;
+
+/* ecounters for scb stats
+ * XTLV ID: WL_IFSTATS_XTLV_SCB_ECOUNTERS
+ */
+
+#define WL_SCB_ECOUNTERS_VERSION_1 1
+#define WL_SCB_ECOUNTERS_VERSION_2 2
+
+typedef struct wl_scb_ecounters_v1 {
+ uint16 version; /* version field */
+ uint16 length; /* struct length starting from version */
+ uint32 chanspec; /* current chanspec where scb is operating */
+ struct ether_addr ea; /* peer ndi or sta ea */
+ uint8 peer_type; /* peer type */
+ uint8 pad;
+
+ /* scb tx and rx stats */
+ wlc_scb_stats_v1_t stats;
+} wl_scb_ecounters_v1_t;
+
+typedef struct wl_scb_ecounters_v2 {
+ uint16 version; /* version field */
+ uint16 length; /* struct length starting from version */
+ uint32 chanspec; /* current chanspec where scb is operating */
+ struct ether_addr ea; /* peer ndi or sta ea */
+ uint8 peer_type; /* peer type */
+ uint8 pad;
+
+ /* scb tx and rx stats */
+ uint16 tx_rate; /* Rate(in Mbps) of last successful tx frame */
+ uint16 rx_rate; /* Rate(in Mbps) of last successful rx frame */
+ uint16 tx_rate_fallback; /* last used lowest fallback TX rate(in Mbps) */
+ uint16 pad1;
+ uint32 rx_decrypt_succeeds; /* num of packets decrypted successfully */
+ uint32 rx_decrypt_failures; /* num of packets decrypted unsuccessfully */
+ uint32 rx_pkts_retried; /* # rx with retry bit set */
+ uint32 tx_pkts_retries; /* total num of tx retries */
+ uint32 tx_failures; /* num of packets failed */
+ uint32 tx_pkts_total; /* total num of tx pkts */
+ int8 rssi[WL_STA_ANT_MAX]; /* average rssi per antenna of data frames */
+} wl_scb_ecounters_v2_t;
+
+/* ecounters for nan slot stats
+ * XTLV ID: WL_IFSTATS_XTLV_NAN_SLOT_STATS
+ */
+
+#define WL_NAN_SLOT_ECOUNTERS_VERSION_1 1
+
+typedef struct wl_nan_slot_ecounters_v1 {
+ uint16 version; /* version field */
+ uint16 length; /* struct length starting from version */
+ uint32 chan[NAN_MAX_BANDS]; /* cur nan slot chanspec of both bands */
+ uint16 cur_slot_idx; /* cur nan slot index */
+ uint16 pad;
+ nan_sched_stats_t sched; /* sched stats */
+ wl_nan_mac_stats_t mac; /* mac stats */
+} wl_nan_slot_ecounters_v1_t;
+/*
+ * BT log definitions
*/
/* common iovar struct */
-typedef struct wl_dltro {
- uint8 subcmd_id; /* subcommand id */
- uint8 pad;
+typedef struct wl_btl {
+ uint16 subcmd_id; /* subcommand id */
uint16 len; /* total length of data[] */
- uint8 data[1]; /* subcommand data */
-} wl_dltro_t;
+ uint8 data[2]; /* subcommand data, variable length */
+} wl_btl_t;
+/* subcommand ids */
+#define WL_BTL_SUBCMD_ENABLE 0 /* enable/disable logging */
+#define WL_BTL_SUBCMD_STATS 1 /* statistics */
-/* Subcommand ids */
-#define WL_DLTRO_SUBCMD_CONNECT 0 /* DLTRO connection info */
-#define WL_DLTRO_SUBCMD_PARAM 1 /* DLTRO parameter info */
-#define WL_DLTRO_SUBCMD_MAX_DLTRO 2 /* Max DLTRO supported */
+/* WL_BTL_SUBCMD_ENABLE data */
+typedef struct wl_blt_enable {
+ uint8 enable; /* 1 - enable, 0 - disable */
+ uint8 pad[3]; /* 4-byte struct alignment */
+} wl_btl_enable_t;
-/* WL_DLTRO_SUBCMD_CONNECT subcommand data
- * Invoke with unique 'index' for each DLTRO connection
+/* WL_BTL_SUBCMD_STATS data */
+typedef struct wl_blt_stats {
+ uint32 bt_interrupt; /* num BT interrupts */
+ uint32 config_req; /* num CONFIG_REQ */
+ uint32 config_res_success; /* num CONFIG_RES successful */
+ uint32 config_res_fail; /* num CONFIG_RES failed */
+ uint32 log_req; /* num LOG_REQ */
+ uint32 log_res_success; /* num LOG_RES successful */
+ uint32 log_res_fail; /* num LOG_RES failed */
+ uint32 indirect_read_fail; /* num indirect read fail */
+ uint32 indirect_write_fail; /* num indirect write fail */
+ uint32 dma_fail; /* num DMA failed */
+ uint32 min_log_req_duration; /* min log request duration in usec */
+ uint32 max_log_req_duration; /* max log request duration in usec */
+ uint16 mem_dump_req; /* num mem dump requests */
+ uint16 mem_dump_success; /* num mem dumps successful */
+ uint16 mem_dump_fail; /* num mem dumps failed */
+ uint16 bt_wake_success; /* num BT wakes successful */
+ uint16 bt_wake_fail; /* num BT wakes failed */
+ uint16 mem_dump_req_interrupt; /* num MEM_DUMP_REQ interrupt */
+ uint16 mem_dump_res_interrupt; /* num MEM_DUMP_RES interrupt */
+ uint16 mem_dump_res_timeout; /* num MEM_DUMP_RES timeout */
+ uint16 mem_dump_proc_no_bt_ready; /* num proceed if no BT ready */
+ uint16 mem_dump_proc_no_bt_response; /* num proceed if no BT response */
+ uint16 mem_dump_proc_no_bt_clock; /* num proceed if no BT clock */
+ uint16 pad; /* alignment */
+ uint32 last_failed_region; /* start addr of last failed region */
+ uint32 min_mem_dump_duration; /* min mem dump duration in usec */
+ uint32 max_mem_dump_duration; /* max mem dump duration in usec */
+} wl_btl_stats_t;
+
+/* IOV AWD DATA */
+
+/* AWD DATA structures */
+typedef struct {
+ uint8 version; /* Extended trap version info */
+ uint8 reserved; /* currently unused */
+ uint16 length; /* Length of data excluding this header */
+ uint8 data[]; /* this data is TLV of tags */
+} awd_data_v1_t;
+
+/* AWD TAG structure */
+typedef struct {
+ uint8 tagid; /* one of AWD DATA TAGs numbers */
+ uint8 length; /* the data size represented by this field must be aligned to 32 bits */
+ uint8 data[]; /* variable size, defined by length field */
+} awd_tag_data_v1_t;
+
+/* IOV ETD DATA */
+
+/* ETD DATA structures */
+typedef struct {
+ uint8 version; /* Extended trap version info */
+ uint8 reserved; /* currently unused */
+ uint16 length; /* Length of data excluding this header */
+ uint8 data[]; /* this data is TLV of tags */
+} etd_data_v1_t;
+
+/* ETD TAG structure */
+typedef struct {
+ uint8 tagid; /* one of ETD DATA TAGs numbers */
+ uint8 length; /* the data size represented by this field must be aligned to 32 bits */
+ uint8 data[]; /* variable size, defined by length field */
+} etd_tag_data_v1_t;
+
+/* ETD information structures associated with ETD_DATA_Tags */
+/* ETD_JOIN_CLASSIFICATION_INFO 10 */
+typedef struct {
+ uint8 assoc_type; /* assoc type */
+ uint8 assoc_state; /* current state of assoc state machine */
+ uint8 wpa_state; /* wpa->state */
+ uint8 wsec_portopen; /* shows if security port is open */
+ uint8 total_attempts_num; /* total number of join attempts (bss_retries) */
+ uint8 num_of_targets; /* up to 3, in current design */
+ uint8 reserved [2]; /* padding to get 32 bits alignment */
+ uint32 wsec; /* bsscfg->wsec */
+ uint32 wpa_auth; /* bsscfg->WPA_auth */
+ uint32 time_to_join; /* time duration to process WLC_SET_SSID request (ms) */
+} join_classification_info_v1_t;
+
+/* ETD_JOIN_TARGET_CLASSIFICATION_INFO 11 */
+typedef struct {
+ int8 rssi; /* RSSI on current channel */
+ uint8 cca; /* CCA on current channel */
+ uint8 channel; /* current channel */
+ uint8 num_of_attempts; /* (bss_retries) up to 5 */
+ uint8 oui[3]; /* the first three octets of the AP's address */
+ uint8 reserved; /* padding to get 32 bits alignment */
+ uint32 time_duration; /* time duration of current attempt (ms) */
+} join_target_classification_info_v1_t;
+
+/* ETD_ASSOC_STATE 12 */
+typedef struct {
+ uint8 assoc_state; /* assoc type */
+ uint8 reserved [3]; /* padding to get 32 bits alignment */
+} join_assoc_state_v1_t;
+
+/* ETD_CHANNEL 13 tag */
+typedef struct {
+ uint8 channel; /* last attempt channel */
+ uint8 reserved [3]; /* padding to get 32 bits alignment */
+} join_channel_v1_t;
+
+/* ETD_TOTAL_NUM_OF_JOIN_ATTEMPTS 14 */
+typedef struct {
+ uint8 total_attempts_num; /* total number of join attempts (bss_retries) */
+ uint8 reserved [3]; /* padding to get 32 bits alignment */
+} join_total_attempts_num_v1_t;
+
+/* IOV_ROAM_CACHE structures */
+
+enum wl_rmc_report_cmd_id {
+ WL_RMC_RPT_CMD_VER = 0,
+ WL_RMC_RPT_CMD_DATA = 1,
+ WL_RMC_RPT_CMD_LAST
+};
+
+enum wl_rmc_report_xtlv_id {
+ WL_RMC_RPT_XTLV_VER = 0x0,
+ WL_RMC_RPT_XTLV_BSS_INFO = 0x1,
+ WL_RMC_RPT_XTLV_CANDIDATE_INFO = 0x2
+};
+
+/* WL_RMC_RPT_XTLV_BSS_INFO */
+typedef struct {
+ int16 rssi; /* current BSS RSSI */
+ uint8 reason; /* reason code for last full scan */
+ uint8 status; /* last status code for not roaming */
+ uint32 fullscan_count; /* number of full scans performed on current BSS */
+ uint32 time_full_scan; /* delta time (in ms) between cur time and full scan timestamp */
+} rmc_bss_info_v1_t;
+
+/* WL_RMC_RPT_XTLV_CANDIDATE_INFO */
+typedef struct {
+ int16 rssi; /* last seen rssi */
+ uint16 ctl_channel; /* channel */
+ uint32 time_last_seen; /* delta time (in ms) between cur time and last seen timestamp */
+ uint16 bss_load; /* BSS load */
+ uint8 bssid [6]; /* padding to get 32 bits alignment */
+} rmc_candidate_info_v1_t;
+
+#define WL_FILTER_IE_VERSION 1
+enum wl_filter_ie_options {
+ WL_FILTER_IE_CLEAR = 0, /* allow element id in packet.For suboption */
+ WL_FILTER_IE_SET = 1, /* filter element id in packet.For suboption */
+ WL_FILTER_IE_LIST = 2, /* list element ID's.Set as option */
+ WL_FILTER_IE_CLEAR_ALL = 3, /* clear all the element.Set as option */
+ WL_FILTER_IE_CHECK_SUB_OPTION = 4 /* check for suboptions.Set only as option */
+};
+
+typedef struct wl_filter_ie_tlv {
+ uint16 id;
+ uint16 len; /* sub option length + pattern length */
+ uint8 data[]; /* sub option + pattern matching(OUI,type,sub-type) */
+} wl_filter_ie_tlv_t;
+
+typedef struct wl_filter_ie_iov {
+ uint16 version; /* Structure version */
+ uint16 len; /* Total length of the structure */
+ uint16 fixed_length; /* Total length of fixed fields */
+ uint8 option; /* Filter action - check for suboption */
+ uint8 pad[1]; /* Align to 4 bytes */
+ uint32 pktflag; /* frame type */
+ uint8 tlvs[]; /* variable data (zero in for list ,clearall) */
+} wl_filter_ie_iov_v1_t;
+
+/* Event aggregation config */
+#define EVENT_AGGR_CFG_VERSION 1
+#define EVENT_AGGR_DISABLED 0x0
+#define EVENT_AGGR_ENABLED 0x1
+
+#define EVENT_AGGR_BUFSIZE_MAX 1512
+#define EVENT_AGGR_BUFSIZE_MIN 512
+
+#define EVENT_AGGR_FLUSH_TIMEOUT_DEFAULT 100
+#define EVENT_AGGR_FLUSH_TIMEOUT_MAX 2000
+#define EVENT_AGGR_NUM_EVENTS_FLUSH 5
+typedef struct event_aggr_config {
+ uint16 version;
+ uint16 len;
+ uint16 flags; /* bit 0 to enable/disable the feature */
+ uint16 bufsize; /* Aggregate buffer size */
+ uint16 flush_timeout; /* Timeout for event flush */
+ uint16 num_events_flush; /* Number of events aggregated before flush */
+} event_aggr_config_t;
+
+#ifndef WL_TDMTX_TYPEDEF_HAS_ALIAS
+typedef tdmtx_cnt_v1_t tdmtx_cnt_t;
+typedef tdmtx_cnt_shm_v1_t tdmtx_cnt_shm_t;
+typedef wl_tdmtx_ecounters_v1_t wl_tdmtx_ecounters_t;
+#define WL_CNT_TDMTX_STRUCT_SZ (sizeof(tdmtx_cnt_t))
+#define WL_CNT_TDMTX_SHM_SZ (sizeof(tdmtx_cnt_shm_t))
+#endif // endif
+
+/** chanctxt related statistics */
+#define CHANCTXT_STATS_VERSION_1 1
+#define CHANCTXT_STATS_CURRENT_VERSION CHANCTXT_STATS_VERSION_1
+typedef struct wlc_chanctxt_stats {
+ uint32 excursionq_end_miss;
+ uint32 activeq_end_miss;
+ uint32 no_chanctxt_count;
+ uint32 txqueue_end_incomplete;
+ uint32 txqueue_start_incomplete;
+} wlc_chanctxt_stats_core_t;
+
+typedef struct chanctxt_stats {
+ uint16 version;
+ uint16 length;
+ wlc_chanctxt_stats_core_t corestats[MAX_NUM_D11CORES];
+} wlc_chanctxt_stats_t;
+
+typedef struct wl_txdc_ioc {
+ uint8 ver;
+ uint8 id; /* ID of the sub-command */
+ uint16 len; /* total length of all data[] */
+ uint8 data[]; /* var len payload */
+} wl_txdc_ioc_t;
+
+/*
+ * iovar subcommand ids
*/
-typedef struct wl_dltro_connect {
- uint8 index; /* DLTRO connection index, 0 to max-1 */
- uint8 ip_addr_type; /* 0 - IPv4, 1 - IPv6 */
- uint8 offload_type; /* 0 - Client, 1 - Server */
- uint8 pad;
- uint32 tid; /* Transaction id */
- uint32 timer_val; /* DHCP lease time remaining */
- uint32 time_before_expiry; /* Time before expiry for DHCP lease renewal */
- uint32 len; /* Length of the variable data */
- uint8 data[1]; /* Variable length field containing DLTRO packet */
-} wl_dltro_connect_t;
+enum {
+ IOV_TXDC_ENB = 1,
+ IOV_TXDC_MODE = 2,
+ IOV_TXDC_DUMP = 3,
+ IOV_TXDC_LAST
+};
-/* WL_DLTRO_SUBCMD_PARAM subcommand data
- * Invoke with unique 'index' for each DLTRO connection
+/* WL_NAN_XTLV_SLOT_STATS */
+/* WL_NAN_EVENT_SLOT_START, WL_NAN_EVENT_SLOT_END */
+typedef struct nan_slot_event_data {
+ uint32 cur_slot_idx; /* current idx in channel schedule */
+ uint32 fw_time; /* target current time in microseconds */
+ uint32 band; /* current band (2G/5G) for which the event is received */
+} nan_slot_event_data_t;
+
+/* SAE (Simultaneous Authentication of Equals) error codes.
+ * These error codes are local.
*/
-typedef struct wl_dltro_param {
- uint8 index; /* DLTRO connection index, 0 to max-1 */
- uint8 retry; /* Number of retries */
-} wl_dltro_param_t;
-/* WL_DLTRO_SUBCMD_PARAM subcommand data to GET configured info for specific index */
-typedef struct wl_dltro_get_param {
- uint8 index; /* DLTRO connection index, 0 to max-1 */
-} wl_dltro_get_param_t;
+#define WL_SAE_E_BASE -3072
-/* WL_DLTRO_SUBCMD_MAX_DLTRO subcommand data */
-typedef struct wl_dltro_max_dltro {
- uint8 max; /* Max DLTRO supported */
-} wl_dltro_max_dltro_t;
+/* SAE status codes are reserved from -3072 to -4095 (1K) */
-#ifdef WL_OLDPPR
-/* sslpnphy specifics */
-#define WL_TX_POWER_MCS20_SISO_FIRST_SSN 12 /* Index for first 20MHz MCS SISO rate */
-#define WL_TX_POWER_MCS40_SISO_FIRST_SSN 28 /* Index for first 40MHz MCS SISO rate */
+enum WL_SAE_E_STATUS_CODES {
+ WL_SAE_E_AUTH_FAILURE = -3072,
+ /* Discard silently */
+ WL_SAE_E_AUTH_DISCARD = -3073,
+ /* Authentication in progress */
+ WL_SAE_E_AUTH_CONTINUE = -3074,
+ /* Invalid scalar/elt */
+ WL_SAE_E_AUTH_COMMIT_INVALID = -3075,
+ /* Invalid confirm token */
+ WL_SAE_E_AUTH_CONFIRM_INVALID = -3076,
+ /* Peer scalar validation failure */
+ WL_SAE_E_CRYPTO_SCALAR_VALIDATION = -3077,
+ /* Peer element prime validation failure */
+ WL_SAE_E_CRYPTO_ELE_PRIME_VALIDATION = -3078,
+ /* Peer element is not on the curve */
+ WL_SAE_E_CRYPTO_ELE_NOT_ON_CURVE = -3079,
+ /* Generic EC error (eliptic curve related) */
+ WL_SAE_E_CRYPTO_EC_ERROR = -3080,
+ /* Both local and peer mac addrs are same */
+ WL_SAE_E_CRYPTO_EQUAL_MACADDRS = -3081,
+ /* Loop exceeded in deriving the scalar */
+ WL_SAE_E_CRYPTO_SCALAR_ITER_EXCEEDED = -3082,
+ /* ECC group is unsupported */
+ WL_SAE_E_CRYPTO_UNSUPPORTED_GROUP = -3083,
+ /* Exceeded the hunting-and-pecking counter */
+ WL_SAE_E_CRYPTO_PWE_COUNTER_EXCEEDED = -3084,
+ /* SAE crypto component is not initialized */
+ WL_SAE_E_CRYPTO_NOT_INITED = -3085,
+ /* bn_get has failed */
+ WL_SAE_E_CRYPTO_BN_GET_ERROR = -3086,
+ /* bn_set has failed */
+ WL_SAE_E_CRYPTO_BN_SET_ERROR = -3087,
+ /* PMK is not computed yet */
+ WL_SAE_E_CRYPTO_PMK_UNAVAILABLE = -3088,
+ /* Peer confirm did not match */
+ WL_SAE_E_CRYPTO_CONFIRM_MISMATCH = -3089,
+ /* Element K is at infinity no the curve */
+ WL_SAE_E_CRYPTO_KEY_AT_INFINITY = -3090,
+ /* SAE Crypto private data magic number mismatch */
+ WL_SAE_E_CRYPTO_PRIV_MAGIC_MISMATCH = -3091
+};
-/* TX Power index defines */
-typedef struct cck {
- uint8 s1x2[WL_NUM_RATES_CCK]; /* Legacy CCK to 2 Tx Chain */
- uint8 s1x3[WL_NUM_RATES_CCK]; /* Legacy CCK to 3 Tx Chain */
-} cck_t;
+/* Block Channel */
+#define WL_BLOCK_CHANNEL_VER_1 1u
-typedef struct ofdm {
- uint8 s1x1[WL_NUM_RATES_OFDM]; /* Legacy OFDM to 1 Tx Chain */
- uint8 s1x2[WL_NUM_RATES_OFDM]; /* Legacy OFDM to 2 Tx Chain */
- uint8 s1x3[WL_NUM_RATES_OFDM]; /* Legacy OFDM to 3 Tx Chain */
-} ofdm_t;
+typedef struct wl_block_ch_v1 {
+ uint16 version;
+ uint16 len;
+ uint32 band; /* Band select */
+ uint8 channel_num; /* The number of block channels in the selected band */
+ uint8 padding[3];
+ uint8 channel[]; /* Channel to block, Variable Length */
+} wl_block_ch_v1_t;
-typedef struct stbc {
- uint8 s2x2[WL_NUM_RATES_MCS_1STREAM]; /* STBC 20MHz to 2 Tx Chain */
- uint8 s2x3[WL_NUM_RATES_MCS_1STREAM]; /* STBC 20MHz to 3 Tx Chain */
- uint8 u40_s2x2[WL_NUM_RATES_MCS_1STREAM]; /* STBC 40MHz to 2 Tx Chain */
- uint8 u40_s2x3[WL_NUM_RATES_MCS_1STREAM]; /* STBC 40MHz to 3 Tx Chain */
- uint8 ul20_s2x2[WL_NUM_RATES_MCS_1STREAM]; /* STBC 20in40MHz to 2 Tx Chain */
- uint8 ul20_s2x3[WL_NUM_RATES_MCS_1STREAM]; /* STBC 20in40MHz to 3 Tx Chain */
-} stbc_t;
+typedef struct dma_wl_addr_region {
+ uint32 addr_low;
+ uint32 addr_high;
+} dma_wl_addr_region_t;
-typedef struct n2x2 {
- uint8 siso[WL_NUM_RATES_MCS_1STREAM]; /* SISO MCS 0-7 */
- uint8 cdd[WL_NUM_RATES_MCS_1STREAM]; /* CDD MCS 0-7 */
- uint8 stbc[WL_NUM_RATES_MCS_1STREAM]; /* STBC MCS 0-7 */
- uint8 sdm[WL_NUM_RATES_MCS_1STREAM]; /* MCS 8-15 */
-} n2x2_t;
+#define WL_ROAMSTATS_IOV_VERSION 1
-typedef struct n3x3 {
- uint8 s1x1[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 1 Tx Chain */
- uint8 s1x2[WL_NUM_RATES_MCS_1STREAM]; /* 1 Nsts to 2 Tx Chain */
- uint8 s2x2[WL_NUM_RATES_MCS_1STREAM]; /* 2 Nsts to 2 Tx Chain */
- uint8 s3x3[WL_NUM_RATES_MCS_1STREAM]; /* 3 Nsts to 3 Tx Chain */
-} n3x3_t;
+#define MAX_PREV_ROAM_EVENTS 16u
-typedef struct n3x3a {
- uint8 u20s1x3[WL_NUM_RATES_MCS_1STREAM]; /* 20 MHz 1 Nsts to 3 Tx Chain */
- uint8 u20s2x3[WL_NUM_RATES_MCS_1STREAM]; /* 20 MHz 2 Nsts to 3 Tx Chain */
- uint8 u40s1x3[WL_NUM_RATES_MCS_1STREAM]; /* 40 MHz 1 Nsts to 3 Tx Chain */
- uint8 u40s2x3[WL_NUM_RATES_MCS_1STREAM]; /* 40 MHz 2 Nsts to 3 Tx Chain */
- uint8 ul20s1x3[WL_NUM_RATES_MCS_1STREAM]; /* 20ul 1 Nsts to 3 Tx Chain */
- uint8 ul20s2x3[WL_NUM_RATES_MCS_1STREAM]; /* 20ul 2 Nsts to 3 Tx Chain */
-} n3x3a_t;
+#define ROAMSTATS_UNKNOWN_CNT 0xFFFFu
-#define WL_NUM_2x2_ELEMENTS 4
-#define WL_NUM_3x3_ELEMENTS 6
+/* roaming statistics counter structures */
+typedef struct wlc_assoc_roamstats_event_msg_v1 {
+ uint32 event_type; /* Message (see below) */
+ uint32 status; /* Status code (see below) */
+ uint32 reason; /* Reason code (if applicable) */
+ uint32 timestamp; /* Timestamp of event */
+} wlc_assoc_roamstats_event_msg_v1_t;
-typedef struct txppr {
- /* start of 20MHz tx power limits */
- uint8 cck[WL_NUM_RATES_CCK]; /* Legacy CCK/DSSS */
- uint8 ofdm[WL_NUM_RATES_OFDM]; /* 20 MHz Legacy OFDM transmission */
- uint8 ofdm_cdd[WL_NUM_RATES_OFDM]; /* 20 MHz Legacy OFDM CDD transmission */
- union {
- struct n2x2 n; /* nphy MCS rates */
- struct n3x3 ht; /* htphy MCS rates */
- } u20;
- /* start of 40MHz tx power limits */
- uint8 ofdm_40[WL_NUM_RATES_OFDM]; /* 40 MHz Legacy OFDM transmission */
- uint8 ofdm_40_cdd[WL_NUM_RATES_OFDM]; /* 40 MHz Legacy OFDM CDD transmission */
- union {
- struct n2x2 n;
- struct n3x3 ht;
- } u40;
- /* MCS32 tx power limits */
- uint8 mcs32;
- /* start of 20in40MHz tx power limits */
- uint8 cck_20ul[WL_NUM_RATES_CCK]; /* 20 in 40MHz Legacy CCK/DSSS */
- uint8 ofdm_20ul[WL_NUM_RATES_OFDM]; /* 20 in 40MHz Legacy OFDM transmission */
- uint8 ofdm_20ul_cdd[WL_NUM_RATES_OFDM]; /* 20 in 40MHz Legacy OFDM CDD transmission */
- n3x3_t ht20ul; /* 20 in 40MHz MCS rates */
- n3x3a_t ht; /* 1 & 2 Nsts to 3 Tx chain rates */
- cck_t cck_cdd; /* 20 MHz CCK CDD 2 and 3 Tx chains */
- cck_t cck_20ul_cdd; /* 20 in 40MHz CCK CDD 2 and 3 Tx chains */
-} txppr_t;
+enum wl_roamstats_cmd_id {
+ WL_ROAMSTATS_XTLV_CMD_VER = 0,
+ WL_ROAMSTATS_XTLV_CMD_RESET = 1,
+ WL_ROAMSTATS_XTLV_CMD_STATUS = 2,
+ WL_ROAMSTATS_XTLV_CMD_LAST /* Keep this at the end */
+};
-/* SROM 8 TX Power defines */
-/* 20MHz */
-#define WL_TX_POWER_CCK_FIRST OFFSETOF(txppr_t, cck) /* CCK */
-#define WL_TX_POWER_CCK_CDD_S1x2_FIRST OFFSETOF(txppr_t, cck_cdd.s1x2) /* CCK CDD 1x2 rate */
-#define WL_TX_POWER_CCK_CDD_S1x3_FIRST OFFSETOF(txppr_t, cck_cdd.s1x3) /* CCK CDD 1x3 rate */
-#define WL_TX_POWER_OFDM20_FIRST OFFSETOF(txppr_t, ofdm) /* OFDM SISO */
-#define WL_TX_POWER_OFDM20_CDD_FIRST OFFSETOF(txppr_t, ofdm_cdd) /* OFDM CDD rate */
-#define WL_TX_POWER_MCS20_SISO_FIRST OFFSETOF(txppr_t, u20.n.siso) /* MCS SISO rate */
-#define WL_TX_POWER_MCS20_CDD_FIRST OFFSETOF(txppr_t, u20.n.cdd) /* MCS CDD rate */
-#define WL_TX_POWER_MCS20_STBC_FIRST OFFSETOF(txppr_t, u20.n.stbc) /* MCS STBC rate */
-#define WL_TX_POWER_MCS20_SDM_FIRST OFFSETOF(txppr_t, u20.n.sdm) /* MCS SDM rate */
+enum wl_roamstats_xtlv_id {
+ WL_ROAMSTATS_XTLV_VER = 0x0,
+ WL_ROAMSTATS_XTLV_COUNTER_INFO = 0x1,
+ WL_ROAMSTATS_XTLV_PREV_ROAM_EVENTS = 0x2,
+ WL_ROAMSTATS_XTLV_REASON_INFO = 0x3
+};
-#define WL_TX_POWER_20_S1x1_FIRST OFFSETOF(txppr_t, u20.ht.s1x1) /* MCS 0-7 rate */
-#define WL_TX_POWER_20_S1x2_FIRST OFFSETOF(txppr_t, u20.ht.s1x2) /* MCS 0-7 rate */
-#define WL_TX_POWER_20_S1x3_FIRST OFFSETOF(txppr_t, ht.u20s1x3) /* MCS 0-7 rate */
-#define WL_TX_POWER_20_S2x2_FIRST OFFSETOF(txppr_t, u20.ht.s2x2) /* MCS 8-15 rate */
-#define WL_TX_POWER_20_S2x3_FIRST OFFSETOF(txppr_t, ht.u20s2x3) /* MCS 8-15 rate */
-#define WL_TX_POWER_20_S3x3_FIRST OFFSETOF(txppr_t, u20.ht.s3x3) /* MCS 16-23 rate */
+/* WL_ROAMSTATS_XTLV_COUNTER_INFO */
+typedef struct {
+ uint32 initial_assoc_time;
+ uint32 prev_roam_time;
+ uint32 host_access_time;
+ uint16 roam_success_cnt;
+ uint16 roam_fail_cnt;
+ uint16 roam_attempt_cnt;
+ uint16 max_roam_target_cnt;
+ uint16 min_roam_target_cnt;
+ uint16 max_cached_ch_cnt;
+ uint16 min_cached_ch_cnt;
+ uint16 partial_roam_scan_cnt;
+ uint16 full_roam_scan_cnt;
+} roamstats_counter_info_v1_t;
-/* 40MHz */
-#define WL_TX_POWER_OFDM40_FIRST OFFSETOF(txppr_t, ofdm_40) /* OFDM SISO rate */
-#define WL_TX_POWER_OFDM40_CDD_FIRST OFFSETOF(txppr_t, ofdm_40_cdd) /* OFDM CDD rate */
-#define WL_TX_POWER_MCS40_SISO_FIRST OFFSETOF(txppr_t, u40.n.siso) /* MCS SISO rate */
-#define WL_TX_POWER_MCS40_CDD_FIRST OFFSETOF(txppr_t, u40.n.cdd) /* MCS CDD rate */
-#define WL_TX_POWER_MCS40_STBC_FIRST OFFSETOF(txppr_t, u40.n.stbc) /* MCS STBC rate */
-#define WL_TX_POWER_MCS40_SDM_FIRST OFFSETOF(txppr_t, u40.n.sdm) /* MCS SDM rate */
+/* WL_ROAMSTATS_XTLV_PREV_ROAM_EVENTS */
+typedef struct {
+ uint16 max;
+ uint16 pos;
+ wlc_assoc_roamstats_event_msg_v1_t roam_event[];
+} roamstats_prev_roam_events_v1_t;
-#define WL_TX_POWER_40_S1x1_FIRST OFFSETOF(txppr_t, u40.ht.s1x1) /* MCS 0-7 rate */
-#define WL_TX_POWER_40_S1x2_FIRST OFFSETOF(txppr_t, u40.ht.s1x2) /* MCS 0-7 rate */
-#define WL_TX_POWER_40_S1x3_FIRST OFFSETOF(txppr_t, ht.u40s1x3) /* MCS 0-7 rate */
-#define WL_TX_POWER_40_S2x2_FIRST OFFSETOF(txppr_t, u40.ht.s2x2) /* MCS 8-15 rate */
-#define WL_TX_POWER_40_S2x3_FIRST OFFSETOF(txppr_t, ht.u40s2x3) /* MCS 8-15 rate */
-#define WL_TX_POWER_40_S3x3_FIRST OFFSETOF(txppr_t, u40.ht.s3x3) /* MCS 16-23 rate */
-#define WL_TX_POWER_MCS_32 OFFSETOF(txppr_t, mcs32) /* MCS 32 rate */
+/* WL_ROAMSTATS_XTLV_REASON_INFO */
+typedef struct {
+ uint16 max;
+ uint16 reason_cnt[];
+} roamstats_reason_info_v1_t;
-/* 20 in 40MHz */
-#define WL_TX_POWER_20UL_CCK_FIRST OFFSETOF(txppr_t, cck_20ul)
-/* CCK CDD 20in40 1x2 rate */
-#define WL_TX_POWER_CCK_20U_CDD_S1x2_FIRST OFFSETOF(txppr_t, cck_20ul_cdd.s1x2)
-/* CCK CDD 20in40 1x3 rate */
-#define WL_TX_POWER_CCK_20U_CDD_S1x3_FIRST OFFSETOF(txppr_t, cck_20ul_cdd.s1x3)
-#define WL_TX_POWER_20UL_OFDM_FIRST OFFSETOF(txppr_t, ofdm_20ul)
-#define WL_TX_POWER_20UL_OFDM_CDD_FIRST OFFSETOF(txppr_t, ofdm_20ul_cdd)
-#define WL_TX_POWER_20UL_S1x1_FIRST OFFSETOF(txppr_t, ht20ul.s1x1) /* MCS 0-7 rate */
-#define WL_TX_POWER_20UL_S1x2_FIRST OFFSETOF(txppr_t, ht20ul.s1x2) /* MCS 0-7 rate */
-#define WL_TX_POWER_20UL_S1x3_FIRST OFFSETOF(txppr_t, ht.ul20s1x3) /* MCS 0-7 rate */
-#define WL_TX_POWER_20UL_S2x2_FIRST OFFSETOF(txppr_t, ht20ul.s2x2) /* MCS 8-15 rate */
-#define WL_TX_POWER_20UL_S2x3_FIRST OFFSETOF(txppr_t, ht.ul20s2x3) /* MCS 8-15 rate */
-#define WL_TX_POWER_20UL_S3x3_FIRST OFFSETOF(txppr_t, ht20ul.s3x3) /* MCS 16-23 rate */
+#ifdef HEALTH_CHECK_WLIOCTL
+/* Health check status format:
+ * reporting status size = uint32
+ * 8 LSB bits are reserved for: WARN (0), ERROR (1), and other levels
+ * MSB 24 bits are reserved for client to fill in its specific status
+ */
+#define HEALTH_CHECK_STATUS_OK 0
+/* Bit positions. */
+#define HEALTH_CHECK_STATUS_WARN 0x1
+#define HEALTH_CHECK_STATUS_ERROR 0x2
+#define HEALTH_CHECK_STATUS_TRAP 0x4
+#define HEALTH_CHECK_STATUS_NOEVENT 0x8
+/* Indication that required information is populated in log buffers */
+#define HEALTH_CHECK_STATUS_INFO_LOG_BUF 0x80
+#define HEALTH_CHECK_STATUS_MASK (0xFF)
-#endif /* WL_OLDPPR */
+#define HEALTH_CHECK_STATUS_MSB_SHIFT 8
+#endif /* HEALTH_CHECK_WLIOCTL */
+/** receive signal reporting module interface */
+
+#define WL_RXSIG_IOV_MAJOR_VER (1u)
+#define WL_RXSIG_IOV_MINOR_VER (1u)
+#define WL_RXSIG_IOV_MAJOR_VER_SHIFT (8u)
+#define WL_RXSIG_IOV_VERSION \
+ ((WL_RXSIG_IOV_MAJOR_VER << WL_RXSIG_IOV_MAJOR_VER_SHIFT) | WL_RXSIG_IOV_MINOR_VER)
+#define WL_RXSIG_IOV_GET_MAJOR(x) (x >> WL_RXSIG_IOV_MAJOR_VER_SHIFT)
+#define WL_RXSIG_IOV_GET_MINOR(x) (x & 0xFF)
+
+enum wl_rxsig_cmd_rssi_mode {
+ WL_RXSIG_MODE_DB = 0x0,
+ WL_RXSIG_MODE_QDB = 0x1,
+ WL_RXSIG_MODE_LAST
+};
+
+/* structure defs for 'wl rxsig [cmd]' iovars */
+enum wl_rxsig_iov_v1 {
+ WL_RXSIG_CMD_RSSI = 0x1, /**< combined rssi moving avg */
+ WL_RXSIG_CMD_SNR = 0x2, /**< combined snr moving avg */
+ WL_RXSIG_CMD_RSSIANT = 0x3, /**< rssi moving avg per-ant */
+ WL_RXSIG_CMD_SNRANT = 0x4, /**< snr moving avg per-snr */
+ WL_RXSIG_CMD_SMPLWIN = 0x5, /**< config for sampling window size */
+ WL_RXSIG_CMD_SMPLGRP = 0x7, /**< config for grouping of pkt type */
+ WL_RXSIG_CMD_STA_MA = 0x8,
+ WL_RXSIG_CMD_MAMODE = 0x9,
+ WL_RXSIG_CMD_MADIV = 0xa,
+ WL_RXSIG_CMD_DUMP = 0xb,
+ WL_RXSIG_CMD_DUMPWIN = 0xc,
+ WL_RXSIG_CMD_TOTAL
+};
+
+struct wl_rxsig_cfg_v1 {
+ uint16 version;
+ chanspec_t chan; /**< chanspec info for querying stats */
+ uint8 pmac[ETHER_ADDR_LEN]; /**< peer(link) mac address */
+};
+
+struct wl_rxsig_iov_rssi_v1 {
+ int8 rssi;
+ uint8 rssi_qdb;
+ uint8 pad[2];
+};
+
+struct wl_rxsig_iov_snr_v1 {
+ int16 snr;
+ uint16 pad;
+};
+
+struct wl_rxsig_iov_rssi_ant_v1 {
+ int8 deci[WL_RSSI_ANT_MAX];
+ uint8 frac[WL_RSSI_ANT_MAX];
+ uint8 rssi_mode; /**< MODE_DB or MODE_QDB */
+ uint8 num_of_ant; /**< total number of ants */
+ uint8 pad[2]; /**< padding for 32bit align */
+};
+
+#ifdef BCM_SDC
+
+#define SDC_TRIGGER_CONFIG_VER_1 1
+typedef struct {
+ uint16 version;
+ uint16 type;
+ uint8 activate;
+ uint8 pad;
+} sdc_trigger_cfg_t;
+
+typedef enum sdc_trigger_types {
+ SDC_TYPE_STA_ONBOARD_DEBUG = 1,
+#ifdef SDC_TEST
+ /*
+ * This is for test purpose only. Don't assign specific value.
+ * Keep at the end
+ */
+ SDC_TYPE_TEST1,
+ SDC_TYPE_TEST2,
+ SDC_TYPE_TEST3,
+#endif /* SDC_TEST */
+ SDC_TYPE_MAX_TRIGGER
+} sdc_trigger_types_t;
+
+#endif /* BCM_SDC */
+
+typedef struct wl_avs_info_v1 {
+ uint16 version; /* Structure version */
+ uint16 equ_version; /* Equation Version */
+ uint32 RO; /* RO in OTP */
+ uint32 equ_csr; /* Equated CSR */
+ uint32 read_csr; /* Read Back CSR */
+ uint32 aging; /* aging setting in nvram */
+} wl_avs_info_v1_t;
+
+#define WL_AVS_INFO_VER_1 1
+
+/* bitmap for clm_flags iovar */
+#define WL_CLM_TXBF 0x01 /**< Flag for Tx beam forming */
+#define WL_CLM_RED_EU 0x02 /* Flag for EU RED */
+#define WL_CLM_EDCRS_EU 0x04 /**< Use EU post-2015 energy detect */
+#define WL_CLM_DFS_TPC 0x08 /**< Flag for DFS TPC */
+#define WL_CLM_RADAR_TYPE_EU 0x10 /**< Flag for EU */
+#define WL_CLM_DFS_FCC WL_CLM_DFS_TPC /**< Flag for DFS FCC */
+#define WL_CLM_DFS_EU (WL_CLM_DFS_TPC | WL_CLM_RADAR_TYPE_EU) /**< Flag for DFS EU */
+
+/* SC (scan core) command IDs */
+enum wl_sc_cmd {
+ WL_SC_CMD_DBG = 0,
+ WL_SC_CMD_CNX = 1,
+ WL_SC_CMD_LAST
+};
+
+#define WSEC_MAX_SAE_PASSWORD_LEN 128
+
+typedef struct {
+ ushort password_len; /* octets in key material */
+ uint8 password[WSEC_MAX_SAE_PASSWORD_LEN]; /* maximum key len for SAE passphrase */
+} wsec_sae_password_t;
+
+/** Statistic related to dongle sleep while in wowl. */
+typedef struct wl_sleep_stats {
+ uint32 cpu_wakes; /** Number of times the CPU has woken up from sleep. */
+ uint32 cpu_up_us; /** CPU active time in us */
+ uint32 total_time_ms; /** Total measured time in ms */
+ uint32 dtim; /** Number of DTIM processed */
+ uint32 tx_packets; /** Number of packets sent */
+ uint32 tx_bytes; /** Number of bytes sent */
+ uint32 tx_us; /** Time radio spent doing TX. */
+ uint32 rx_packets; /** Number of packets received */
+ uint32 rx_bytes; /** Number of bytes received */
+ uint32 rx_us; /** Time radio spent doing RX. */
+ uint32 idle_us; /** Time radio spent idle. */
+ uint32 arp_resp_cnt; /** Number of ARP replies sent */
+ uint32 tcpka_ack_cnt; /** Number of TCP KeepAlive Acks sent */
+ uint32 grp_key_renew_cnt; /** Number of group key renewals */
+} wl_sleep_stats_t;
+
+/* NSC defintions */
+#include <packed_section_start.h>
+typedef BWL_PRE_PACKED_STRUCT struct nsc_af_body {
+ uint8 type; /* should be 0x7f */
+ uint8 oui[DOT11_OUI_LEN]; /* just like it says */
+ uint8 subtype; /* 221, 0xdd: proprietary ie */
+ uint8 ielen; /* */
+ uint8 data[1]; /* variable */
+} BWL_POST_PACKED_STRUCT nsc_af_body_t;
+#include <packed_section_end.h>
+
+#define NSC_SUBTYPES_MAX 8
+#define NSC_SUBTYPES_EOL 0xff
+
+/* Aloe constants */
+#define WL_ALOE_AF_TYPE (0x7)
+#define WL_ALOE_CMD_PERIODIC (0x01)
+#define WL_ALOE_CMD_ONESHOT (0x02)
+#define WL_ALOE_HASHTABLE_SZ (508) /**< Max number of hash entries */
+#define WL_ALOE_HASH_SZ (8) /**< eight byte hash size */
+#define WL_ALOE_AF_CACHE_SZ (8) /** Mac Number of cached AF. */
+
+/** ALOE configuration */
+typedef struct wl_aloe_cfg {
+ /** ALOE major version number to be able to receive. */
+ uint8 major;
+ /** ALOE minor version number to be able to receive. */
+ uint8 minor;
+ /** Bitfield of the command to be able to receive.
+ * BWL_ALOE_CMD_PERIODIC and/or BWL_ALOE_CMD_ONESHOT.
+ */
+ uint8 command;
+ /** BSSID to receive the Aloe frame sent on. */
+ struct ether_addr BSSID;
+} wl_aloe_cfg_t;
+
+/** ALOE periodic action frame */
+typedef struct wl_aloe_periodic_af {
+ /** Tx interval, in ms. */
+ uint32 tx_int;
+ /** Number of AF to send during a phase.
+ * Phase duration is defined as tx_cnt * tx_int ms.
+ */
+ uint32 tx_cnt;
+ /** Interphase space, defined as muted TX periods during which no AF is sent.
+ * Interphase duration is defined as idle_cnt * tx_int ms.
+ */
+ uint32 idle_cnt;
+ /** Start of the RX window as a number of tx interval
+ * The RX window starts at rx_start * tx_int ms after the
+ * beginning of a given phase.
+ */
+ uint32 rx_start;
+ /** Number of tx_inteval the listening window lasts
+ * A RX window lasts for rx_cnt * tx_int ms.
+ */
+ uint32 rx_cnt;
+ wl_af_params_t af;
+} wl_aloe_periodic_af_t;
+
+/**
+ * @brief Aloe's action frame format.
+ */
+typedef struct wl_aloe_af {
+ /** Vendor specific: 0x7f */
+ uint8 category;
+ /** 00-22-aa */
+ uint8 oui[3];
+ /** 7 */
+ uint8 subtype;
+ uint8 PAD0;
+ /** ALOE Major version number */
+ uint8 major;
+ /** ALOE Minor version number */
+ uint8 minor;
+ /** Periodic or single shot */
+ uint8 command;
+ uint8 PAD1;
+ /** Authentication hash */
+ uint8 hash[8];
+ /** Aloe payload */
+ uint8 data[];
+} wl_aloe_af_t;
+
+typedef struct wl_aloe_stats {
+ uint32 tx_af_total; /** Counter for the total number of AF sent. */
+ /** Number of AF not sent because the previous TX is still pending */
+ /** Data is held in the AF data legacy buffer */
+ uint32 tx_af_aborted;
+ uint32 tx_af_failed; /** Number of TX AF that failed for a reason */
+ uint32 rx_af; /** Received ALOE Action frames. */
+ uint32 rx_af_filtered; /** Received and filtered out Aloe AF. */
+ /** Action frame received but dropped as the host is not asleep yet. */
+ uint32 rx_dropped;
+ uint32 cache_cnt;
+} wl_aloe_stats_t;
+
+/* pkteng_ru_fill enum definitions */
+#define PKTENG_RU_FILL_VERSION 1
+#define PKTENG_RU_FILL_LENGTH 32
+
+/* Packet length in bytes */
+#define PKT_LEN_TRIG_PROFILE_DEFAULT 100
+#define PKT_LEN_TRIG_PROFILE_0 650
+#define PKT_LEN_TRIG_PROFILE_1 600
+#define PKT_LEN_TRIG_PROFILE_2 4000
+#define PKT_LEN_TRIG_PROFILE_3 4000
+#define PKT_LEN_TRIG_PROFILE_4 3000
+#define PKT_LEN_TRIG_PROFILE_5 3000
+
+/* RU Allocation value */
+#define RU26_5 5
+#define RU242_61 61
+
+/* MAC Broadcast address individual Octet */
+#define BCAST_ADDR_OCTET 0xff
+
+#define ONE_SHOT_TRIGGER_TX 255 /* To send one shot trigger frame */
+#define TRIG_PERIOD_MAX 255 /* Max period */
+#define TRIG_PROFILES 6 /* Packet profiles to compute cmn and usr info params */
+#define HE_TRIG_FRM_NUSERINFO 1 /* Default number of user info fields */
+#define TRIG_TX_MIN_IP_ARGS 1
+#define TRIG_TX_MAX_IP_ARGS 4
+
+#define HE_TRIG_NON_HT_PPDU 0
+#define HE_TRIG_VHT_PPDU 1
+
+typedef struct {
+ uint8 ru_alloc_val; /* ru allocation index number */
+ uint8 mcs_val; /* mcs allocated value */
+ uint8 nss_val; /* num of spatial streams */
+ uint32 num_bytes; /* approx num of bytes to calculate other required params */
+} pkteng_reduced_t;
+
+/* Generic BW defintions */
+enum {
+ BW_20MHz = 0,
+ BW_40MHz = 1,
+ BW_80MHz = 2,
+ BW_160MHz = 3
+};
+
+/* Generic MCS */
+enum {
+ MCS_0 = 0,
+ MCS_1 = 1,
+ MCS_2 = 2,
+ MCS_3 = 3,
+ MCS_4 = 4,
+ MCS_5 = 5,
+ MCS_6 = 6,
+ MCS_7 = 7,
+ MCS_8 = 8,
+ MCS_9 = 9,
+ MCS_10 = 10,
+ MCS_11 = 11
+};
+
+/* Spatial streams */
+enum {
+ NSS1 = 1,
+ NSS2 = 2
+};
+
+/* HE-LTF Symbols index */
+enum {
+ NUM_HE_LTF_SYM0 = 0,
+ NUM_HE_LTF_SYM1 = 1,
+ NUM_HE_LTF_SYM2 = 2,
+ NUM_HE_LTF_SYM4 = 4,
+ NUM_HE_LTF_SYM5 = 5,
+ NUM_HE_LTF_SYM6 = 6
+};
+
+/* Status of STBC encoding in the solicited HE TBPPDUs */
+enum {
+ STBC_DIS = 0, /* Disabled */
+ STBC_EN = 1 /* Enabled */
+};
+
+/* pe_category, PE dur supported */
+enum {
+ PE0 = 0,
+ PE8 = 1,
+ PE16 = 2
+};
+
+/* Dual carrier modulation in solicited HE TBPPDU */
+enum {
+ DCM_DIS = 0, /* Disabled */
+ DCM_EN = 1, /* Enabled */
+};
+
+enum {
+ TRIG_TX_DIS = 0, /* Fake trigger frame TX */
+ TRIG_TX_EN = 1 /* Enable trigger frame transmission */
+};
+
+/* UL FEC Coding Type */
+enum {
+ CODING_BCC = 0, /* BCC Coding */
+ CODING_LDPC = 1 /* LDPC coding */
+};
+
+/* MU-MIMO LTF Mode subfield encoding */
+enum {
+ MUMIMO_LTF_0 = 0, /* HE single stream pilot HE-LTF mode */
+ MUMIMO_LTF_1 = 1 /* HE masked HE-LTF sequence mode */
+};
#endif /* _wlioctl_h_ */
--
Gitblit v1.6.2