android13/external/wifi_driver/bcmdhd/include/802.11k.h

929 lines
27 KiB
C

/*
* Fundamental types and constants relating to 802.11k -
* "Radio Resource Measurement of Wireless LANs" &
* Fundamental types and constants relating to 802.11v -
* "Wireless Network Management" extensions
*
* RRM - Radio Resource Measurement
* RM - same as RRM?
* NGBR - Neighbor Report
*
* Copyright (C) 2022, Broadcom.
*
* 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
* you also meet, for each linked independent module, the terms and conditions of
* 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.
*
*
* <<Broadcom-WL-IPTag/Dual:>>
*/
#ifndef _802_11k_h_
#define _802_11k_h_
#ifndef _TYPEDEFS_H_
#include <typedefs.h>
#endif
/* This marks the start of a packed structure section. */
#include <packed_section_start.h>
/* ************* 802.11k related definitions. ************* */
/* Radio measurements enabled capability ie */
#define DOT11_RRM_CAP_LEN 5 /* length of rrm cap bitmap */
#define RCPI_IE_LEN 1
#define RSNI_IE_LEN 1
BWL_PRE_PACKED_STRUCT struct dot11_rrm_cap_ie {
uint8 cap[DOT11_RRM_CAP_LEN];
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rrm_cap_ie dot11_rrm_cap_ie_t;
/* Bitmap definitions for cap ie */
#define DOT11_RRM_CAP_LINK 0
#define DOT11_RRM_CAP_NEIGHBOR_REPORT 1
#define DOT11_RRM_CAP_PARALLEL 2
#define DOT11_RRM_CAP_REPEATED 3
#define DOT11_RRM_CAP_BCN_PASSIVE 4
#define DOT11_RRM_CAP_BCN_ACTIVE 5
#define DOT11_RRM_CAP_BCN_TABLE 6
#define DOT11_RRM_CAP_BCN_REP_COND 7
#define DOT11_RRM_CAP_FM 8
#define DOT11_RRM_CAP_CLM 9
#define DOT11_RRM_CAP_NHM 10
#define DOT11_RRM_CAP_SM 11
#define DOT11_RRM_CAP_LCIM 12
#define DOT11_RRM_CAP_LCIA 13
#define DOT11_RRM_CAP_TSCM 14
#define DOT11_RRM_CAP_TTSCM 15
#define DOT11_RRM_CAP_AP_CHANREP 16
#define DOT11_RRM_CAP_RMMIB 17
/* bit18-bit23, not used for RRM_IOVAR */
#define DOT11_RRM_CAP_MPC0 24
#define DOT11_RRM_CAP_MPC1 25
#define DOT11_RRM_CAP_MPC2 26
#define DOT11_RRM_CAP_MPTI 27
#define DOT11_RRM_CAP_NBRTSFO 28
#define DOT11_RRM_CAP_RCPI 29
#define DOT11_RRM_CAP_RSNI 30
#define DOT11_RRM_CAP_BSSAAD 31
#define DOT11_RRM_CAP_BSSAAC 32
#define DOT11_RRM_CAP_AI 33
#define DOT11_RRM_CAP_FTM_RANGE 34
#define DOT11_RRM_CAP_CIVIC_LOC 35
#define DOT11_RRM_CAP_IDENT_LOC 36
#define DOT11_RRM_CAP_LAST 36
#ifdef WL11K_ALL_MEAS
#define DOT11_RRM_CAP_LINK_ENAB (1 << DOT11_RRM_CAP_LINK)
#define DOT11_RRM_CAP_FM_ENAB (1 << (DOT11_RRM_CAP_FM - 8))
#define DOT11_RRM_CAP_CLM_ENAB (1 << (DOT11_RRM_CAP_CLM - 8))
#define DOT11_RRM_CAP_NHM_ENAB (1 << (DOT11_RRM_CAP_NHM - 8))
#define DOT11_RRM_CAP_SM_ENAB (1 << (DOT11_RRM_CAP_SM - 8))
#define DOT11_RRM_CAP_LCIM_ENAB (1 << (DOT11_RRM_CAP_LCIM - 8))
#define DOT11_RRM_CAP_TSCM_ENAB (1 << (DOT11_RRM_CAP_TSCM - 8))
#ifdef WL11K_AP
#define DOT11_RRM_CAP_MPC0_ENAB (1 << (DOT11_RRM_CAP_MPC0 - 24))
#define DOT11_RRM_CAP_MPC1_ENAB (1 << (DOT11_RRM_CAP_MPC1 - 24))
#define DOT11_RRM_CAP_MPC2_ENAB (1 << (DOT11_RRM_CAP_MPC2 - 24))
#define DOT11_RRM_CAP_MPTI_ENAB (1 << (DOT11_RRM_CAP_MPTI - 24))
#else
#define DOT11_RRM_CAP_MPC0_ENAB 0
#define DOT11_RRM_CAP_MPC1_ENAB 0
#define DOT11_RRM_CAP_MPC2_ENAB 0
#define DOT11_RRM_CAP_MPTI_ENAB 0
#endif /* WL11K_AP */
#define DOT11_RRM_CAP_CIVIC_LOC_ENAB (1 << (DOT11_RRM_CAP_CIVIC_LOC - 32))
#define DOT11_RRM_CAP_IDENT_LOC_ENAB (1 << (DOT11_RRM_CAP_IDENT_LOC - 32))
#else
#define DOT11_RRM_CAP_LINK_ENAB 0
#define DOT11_RRM_CAP_FM_ENAB 0
#define DOT11_RRM_CAP_CLM_ENAB 0
#define DOT11_RRM_CAP_NHM_ENAB 0
#define DOT11_RRM_CAP_SM_ENAB 0
#define DOT11_RRM_CAP_LCIM_ENAB 0
#define DOT11_RRM_CAP_TSCM_ENAB 0
#define DOT11_RRM_CAP_MPC0_ENAB 0
#define DOT11_RRM_CAP_MPC1_ENAB 0
#define DOT11_RRM_CAP_MPC2_ENAB 0
#define DOT11_RRM_CAP_MPTI_ENAB 0
#define DOT11_RRM_CAP_CIVIC_LOC_ENAB 0
#define DOT11_RRM_CAP_IDENT_LOC_ENAB 0
#endif /* WL11K_ALL_MEAS */
#ifdef WL11K_NBR_MEAS
#define DOT11_RRM_CAP_NEIGHBOR_REPORT_ENAB (1 << DOT11_RRM_CAP_NEIGHBOR_REPORT)
#else
#define DOT11_RRM_CAP_NEIGHBOR_REPORT_ENAB 0
#endif /* WL11K_NBR_MEAS */
#ifdef WL11K_BCN_MEAS
#define DOT11_RRM_CAP_BCN_PASSIVE_ENAB (1 << DOT11_RRM_CAP_BCN_PASSIVE)
#define DOT11_RRM_CAP_BCN_ACTIVE_ENAB (1 << DOT11_RRM_CAP_BCN_ACTIVE)
#else
#define DOT11_RRM_CAP_BCN_PASSIVE_ENAB 0
#define DOT11_RRM_CAP_BCN_ACTIVE_ENAB 0
#endif /* WL11K_BCN_MEAS */
#define DOT11_RRM_CAP_MPA_MASK 0x7
/* Operating Class (formerly "Regulatory Class") definitions */
#define DOT11_OP_CLASS_NONE 255
BWL_PRE_PACKED_STRUCT struct do11_ap_chrep {
uint8 id;
uint8 len;
uint8 reg;
uint8 chanlist[BCM_FLEX_ARRAY];
} BWL_POST_PACKED_STRUCT;
typedef struct do11_ap_chrep dot11_ap_chrep_t;
/* Radio Measurements action ids */
#define DOT11_RM_ACTION_RM_REQ 0 /* Radio measurement request */
#define DOT11_RM_ACTION_RM_REP 1 /* Radio measurement report */
#define DOT11_RM_ACTION_LM_REQ 2 /* Link measurement request */
#define DOT11_RM_ACTION_LM_REP 3 /* Link measurement report */
#define DOT11_RM_ACTION_NR_REQ 4 /* Neighbor report request */
#define DOT11_RM_ACTION_NR_REP 5 /* Neighbor report response */
/** Generic radio measurement action frame header */
BWL_PRE_PACKED_STRUCT struct dot11_rm_action {
uint8 category; /* category of action frame (5) */
uint8 action; /* radio measurement action */
uint8 token; /* dialog token */
uint8 data[BCM_FLEX_ARRAY];
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rm_action dot11_rm_action_t;
#define DOT11_RM_ACTION_LEN 3
BWL_PRE_PACKED_STRUCT struct dot11_rmreq {
uint8 category; /* category of action frame (5) */
uint8 action; /* radio measurement action */
uint8 token; /* dialog token */
uint16 reps; /* no. of repetitions */
uint8 data[BCM_FLEX_ARRAY];
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq dot11_rmreq_t;
#define DOT11_RMREQ_LEN 5
BWL_PRE_PACKED_STRUCT struct dot11_rm_ie {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rm_ie dot11_rm_ie_t;
#define DOT11_RM_IE_LEN 5
/* Definitions for "mode" bits in rm req */
#define DOT11_RMREQ_MODE_PARALLEL 1
#define DOT11_RMREQ_MODE_ENABLE 2
#define DOT11_RMREQ_MODE_REQUEST 4
#define DOT11_RMREQ_MODE_REPORT 8
#define DOT11_RMREQ_MODE_DURMAND 0x10 /* Duration Mandatory */
/* Definitions for "mode" bits in rm rep */
#define DOT11_RMREP_MODE_LATE 1
#define DOT11_RMREP_MODE_INCAPABLE 2
#define DOT11_RMREP_MODE_REFUSED 4
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_bcn {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 reg;
uint8 channel;
uint16 interval;
uint16 duration;
uint8 bcn_mode;
struct ether_addr bssid;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_bcn dot11_rmreq_bcn_t;
#define DOT11_RMREQ_BCN_LEN 18u
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn {
uint8 reg;
uint8 channel;
uint32 starttime[2];
uint16 duration;
uint8 frame_info;
uint8 rcpi;
uint8 rsni;
struct ether_addr bssid;
uint8 antenna_id;
uint32 parent_tsf;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_bcn dot11_rmrep_bcn_t;
#define DOT11_RMREP_BCN_LEN 26
/* Beacon request measurement mode */
#define DOT11_RMREQ_BCN_PASSIVE 0
#define DOT11_RMREQ_BCN_ACTIVE 1
#define DOT11_RMREQ_BCN_TABLE 2
/* Sub-element IDs for Beacon Request */
#define DOT11_RMREQ_BCN_SSID_ID 0
#define DOT11_RMREQ_BCN_REPINFO_ID 1
#define DOT11_RMREQ_BCN_REPDET_ID 2
#define DOT11_RMREQ_BCN_REQUEST_ID 10
#define DOT11_RMREQ_BCN_APCHREP_ID DOT11_MNG_AP_CHREP_ID
#define DOT11_RMREQ_BCN_LAST_RPT_IND_REQ_ID 164
/* Reporting Detail element definition */
#define DOT11_RMREQ_BCN_REPDET_FIXED 0 /* Fixed length fields only */
#define DOT11_RMREQ_BCN_REPDET_REQUEST 1 /* + requested information elems */
#define DOT11_RMREQ_BCN_REPDET_ALL 2 /* All fields */
/* Reporting Information (reporting condition) element definition */
#define DOT11_RMREQ_BCN_REPINFO_LEN 2 /* Beacon Reporting Information length */
#define DOT11_RMREQ_BCN_REPCOND_DEFAULT 0 /* Report to be issued after each measurement */
/* Last Beacon Report Indication Request definition */
#define DOT11_RMREQ_BCN_LAST_RPT_IND_REQ_ENAB 1
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_last_bcn_rpt_ind_req {
uint8 id; /* DOT11_RMREQ_BCN_LAST_RPT_IND_REQ_ID */
uint8 len; /* length of remaining fields */
uint8 data; /* data = 1 means last bcn rpt ind requested */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_last_bcn_rpt_ind_req dot11_rmrep_last_bcn_rpt_ind_req_t;
/* Sub-element IDs for Beacon Report */
#define DOT11_RMREP_BCN_FRM_BODY 1
#define DOT11_RMREP_BCN_FRM_BODY_FRAG_ID 2
#define DOT11_RMREP_BCN_LAST_RPT_IND 164
#define DOT11_RMREP_BCN_FRM_BODY_LEN_MAX 224 /* 802.11k-2008 7.3.2.22.6 */
/* Refer IEEE P802.11-REVmd/D1.0 9.4.2.21.7 Beacon report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn_frm_body_fragmt_id {
uint8 id; /* DOT11_RMREP_BCN_FRM_BODY_FRAG_ID */
uint8 len; /* length of remaining fields */
/* More fragments(B15), fragment Id(B8-B14), Bcn rpt instance ID (B0 - B7) */
uint16 frag_info_rpt_id;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_bcn_frm_body_fragmt_id dot11_rmrep_bcn_frm_body_fragmt_id_t;
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_bcn_frm_body_frag_id {
uint8 id; /* DOT11_RMREP_BCN_FRM_BODY_FRAG_ID */
uint8 len; /* length of remaining fields */
uint8 bcn_rpt_id; /* Bcn rpt instance ID */
uint8 frag_info; /* fragment Id(7 bits) | More fragments(1 bit) */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_bcn_frm_body_frag_id dot11_rmrep_bcn_frm_body_frag_id_t;
#define DOT11_RMREP_BCNRPT_FRAG_ID_DATA_LEN 2u
#define DOT11_RMREP_BCNRPT_FRAG_ID_SE_LEN sizeof(dot11_rmrep_bcn_frm_body_frag_id_t)
#define DOT11_RMREP_BCNRPT_FRAG_ID_NUM_SHIFT 1u
#define DOT11_RMREP_BCNRPT_FRAGMT_ID_SE_LEN sizeof(dot11_rmrep_bcn_frm_body_fragmt_id_t)
#define DOT11_RMREP_BCNRPT_BCN_RPT_ID_MASK 0x00FFu
#define DOT11_RMREP_BCNRPT_FRAGMT_ID_NUM_SHIFT 8u
#define DOT11_RMREP_BCNRPT_FRAGMT_ID_NUM_MASK 0x7F00u
#define DOT11_RMREP_BCNRPT_MORE_FRAG_SHIFT 15u
#define DOT11_RMREP_BCNRPT_MORE_FRAG_MASK 0x8000u
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_last_bcn_rpt_ind {
uint8 id; /* DOT11_RMREP_BCN_LAST_RPT_IND */
uint8 len; /* length of remaining fields */
uint8 data; /* data = 1 is last bcn rpt */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_last_bcn_rpt_ind dot11_rmrep_last_bcn_rpt_ind_t;
#define DOT11_RMREP_LAST_BCN_RPT_IND_DATA_LEN 1
#define DOT11_RMREP_LAST_BCN_RPT_IND_SE_LEN sizeof(dot11_rmrep_last_bcn_rpt_ind_t)
/* Sub-element IDs for Frame Report */
#define DOT11_RMREP_FRAME_COUNT_REPORT 1
/* Channel load request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_chanload {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 reg;
uint8 channel;
uint16 interval;
uint16 duration;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_chanload dot11_rmreq_chanload_t;
#define DOT11_RMREQ_CHANLOAD_LEN 11
/** Channel load report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_chanload {
uint8 reg;
uint8 channel;
uint32 starttime[2];
uint16 duration;
uint8 channel_load;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_chanload dot11_rmrep_chanload_t;
#define DOT11_RMREP_CHANLOAD_LEN 13
/** Noise histogram request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_noise {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 reg;
uint8 channel;
uint16 interval;
uint16 duration;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_noise dot11_rmreq_noise_t;
#define DOT11_RMREQ_NOISE_LEN 11
/** Noise histogram report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_noise {
uint8 reg;
uint8 channel;
uint32 starttime[2];
uint16 duration;
uint8 antid;
uint8 anpi;
uint8 ipi0_dens;
uint8 ipi1_dens;
uint8 ipi2_dens;
uint8 ipi3_dens;
uint8 ipi4_dens;
uint8 ipi5_dens;
uint8 ipi6_dens;
uint8 ipi7_dens;
uint8 ipi8_dens;
uint8 ipi9_dens;
uint8 ipi10_dens;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_noise dot11_rmrep_noise_t;
#define DOT11_RMREP_NOISE_LEN 25
/** Frame request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_frame {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 reg;
uint8 channel;
uint16 interval;
uint16 duration;
uint8 req_type;
struct ether_addr ta;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_frame dot11_rmreq_frame_t;
#define DOT11_RMREQ_FRAME_LEN 18
/** Frame report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_frame {
uint8 reg;
uint8 channel;
uint32 starttime[2];
uint16 duration;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_frame dot11_rmrep_frame_t;
#define DOT11_RMREP_FRAME_LEN 12
/** Frame report entry */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_frmentry {
struct ether_addr ta;
struct ether_addr bssid;
uint8 phy_type;
uint8 avg_rcpi;
uint8 last_rsni;
uint8 last_rcpi;
uint8 ant_id;
uint16 frame_cnt;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_frmentry dot11_rmrep_frmentry_t;
#define DOT11_RMREP_FRMENTRY_LEN 19
/** STA statistics request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_stat {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
struct ether_addr peer;
uint16 interval;
uint16 duration;
uint8 group_id;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_stat dot11_rmreq_stat_t;
#define DOT11_RMREQ_STAT_LEN 16
/** STA statistics report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_stat {
uint16 duration;
uint8 group_id;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_stat dot11_rmrep_stat_t;
/* Statistics Group Report: Group IDs */
enum {
DOT11_RRM_STATS_GRP_ID_0 = 0,
DOT11_RRM_STATS_GRP_ID_1,
DOT11_RRM_STATS_GRP_ID_2,
DOT11_RRM_STATS_GRP_ID_3,
DOT11_RRM_STATS_GRP_ID_4,
DOT11_RRM_STATS_GRP_ID_5,
DOT11_RRM_STATS_GRP_ID_6,
DOT11_RRM_STATS_GRP_ID_7,
DOT11_RRM_STATS_GRP_ID_8,
DOT11_RRM_STATS_GRP_ID_9,
DOT11_RRM_STATS_GRP_ID_10,
DOT11_RRM_STATS_GRP_ID_11,
DOT11_RRM_STATS_GRP_ID_12,
DOT11_RRM_STATS_GRP_ID_13,
DOT11_RRM_STATS_GRP_ID_14,
DOT11_RRM_STATS_GRP_ID_15,
DOT11_RRM_STATS_GRP_ID_16
};
/* Statistics Group Report: Group Data length */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_0 28
typedef struct rrm_stat_group_0 {
uint32 txfrag;
uint32 txmulti;
uint32 txfail;
uint32 rxframe;
uint32 rxmulti;
uint32 rxbadfcs;
uint32 txframe;
} rrm_stat_group_0_t;
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_1 24
typedef struct rrm_stat_group_1 {
uint32 txretry;
uint32 txretries;
uint32 rxdup;
uint32 txrts;
uint32 rtsfail;
uint32 ackfail;
} rrm_stat_group_1_t;
/* group 2-9 use same qos data structure (tid 0-7), total 52 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_2_9 52
typedef struct rrm_stat_group_qos {
uint32 txfrag;
uint32 txfail;
uint32 txretry;
uint32 txretries;
uint32 rxdup;
uint32 txrts;
uint32 rtsfail;
uint32 ackfail;
uint32 rxfrag;
uint32 txframe;
uint32 txdrop;
uint32 rxmpdu;
uint32 rxretries;
} rrm_stat_group_qos_t;
/* dot11BSSAverageAccessDelay Group (only available at an AP): 8 byte */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_10 8
typedef BWL_PRE_PACKED_STRUCT struct rrm_stat_group_10 {
uint8 apavgdelay;
uint8 avgdelaybe;
uint8 avgdelaybg;
uint8 avgdelayvi;
uint8 avgdelayvo;
uint16 stacount;
uint8 chanutil;
} BWL_POST_PACKED_STRUCT rrm_stat_group_10_t;
/* AMSDU, 40 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_11 40
typedef struct rrm_stat_group_11 {
uint32 txamsdu;
uint32 amsdufail;
uint32 amsduretry;
uint32 amsduretries;
uint32 txamsdubyte_h;
uint32 txamsdubyte_l;
uint32 amsduackfail;
uint32 rxamsdu;
uint32 rxamsdubyte_h;
uint32 rxamsdubyte_l;
} rrm_stat_group_11_t;
/* AMPDU, 36 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_12 36
typedef struct rrm_stat_group_12 {
uint32 txampdu;
uint32 txmpdu;
uint32 txampdubyte_h;
uint32 txampdubyte_l;
uint32 rxampdu;
uint32 rxmpdu;
uint32 rxampdubyte_h;
uint32 rxampdubyte_l;
uint32 ampducrcfail;
} rrm_stat_group_12_t;
/* BACK etc, 36 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_13 36
typedef struct rrm_stat_group_13 {
uint32 rximpbarfail;
uint32 rxexpbarfail;
uint32 chanwidthsw;
uint32 txframe20mhz;
uint32 txframe40mhz;
uint32 rxframe20mhz;
uint32 rxframe40mhz;
uint32 psmpgrantdur;
uint32 psmpuseddur;
} rrm_stat_group_13_t;
/* RD Dual CTS etc, 36 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_14 36
typedef struct rrm_stat_group_14 {
uint32 grantrdgused;
uint32 grantrdgunused;
uint32 txframeingrantrdg;
uint32 txbyteingrantrdg_h;
uint32 txbyteingrantrdg_l;
uint32 dualcts;
uint32 dualctsfail;
uint32 rtslsi;
uint32 rtslsifail;
} rrm_stat_group_14_t;
/* bf and STBC etc, 20 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_15 20
typedef struct rrm_stat_group_15 {
uint32 bfframe;
uint32 stbccts;
uint32 stbcctsfail;
uint32 nonstbccts;
uint32 nonstbcctsfail;
} rrm_stat_group_15_t;
/* RSNA, 28 bytes */
#define DOT11_RRM_STATS_RPT_LEN_GRP_ID_16 28
typedef struct rrm_stat_group_16 {
uint32 rsnacmacicverr;
uint32 rsnacmacreplay;
uint32 rsnarobustmgmtccmpreplay;
uint32 rsnatkipicverr;
uint32 rsnatkipicvreplay;
uint32 rsnaccmpdecrypterr;
uint32 rsnaccmpreplay;
} rrm_stat_group_16_t;
/* Transmit stream/category measurement request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_tx_stream {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint16 interval;
uint16 duration;
struct ether_addr peer;
uint8 traffic_id;
uint8 bin0_range;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_tx_stream dot11_rmreq_tx_stream_t;
#define DOT11_RMREQ_TXSTREAM_LEN 17
/** Transmit stream/category measurement report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_tx_stream {
uint32 starttime[2];
uint16 duration;
struct ether_addr peer;
uint8 traffic_id;
uint8 reason;
uint32 txmsdu_cnt;
uint32 msdu_discarded_cnt;
uint32 msdufailed_cnt;
uint32 msduretry_cnt;
uint32 cfpolls_lost_cnt;
uint32 avrqueue_delay;
uint32 avrtx_delay;
uint8 bin0_range;
uint32 bin0;
uint32 bin1;
uint32 bin2;
uint32 bin3;
uint32 bin4;
uint32 bin5;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_tx_stream dot11_rmrep_tx_stream_t;
#define DOT11_RMREP_TXSTREAM_LEN 71
typedef struct rrm_tscm {
uint32 msdu_tx;
uint32 msdu_exp;
uint32 msdu_fail;
uint32 msdu_retries;
uint32 cfpolls_lost;
uint32 queue_delay;
uint32 tx_delay_sum;
uint32 tx_delay_cnt;
uint32 bin0_range_us;
uint32 bin0;
uint32 bin1;
uint32 bin2;
uint32 bin3;
uint32 bin4;
uint32 bin5;
} rrm_tscm_t;
enum {
DOT11_FTM_LOCATION_SUBJ_LOCAL = 0, /* Where am I? */
DOT11_FTM_LOCATION_SUBJ_REMOTE = 1, /* Where are you? */
DOT11_FTM_LOCATION_SUBJ_THIRDPARTY = 2 /* Where is he/she? */
};
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_ftm_lci {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 subj;
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_ftm_lci dot11_rmreq_ftm_lci_t;
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_ftm_lci {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 lci_sub_id;
uint8 lci_sub_len;
/* optional LCI field */
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_ftm_lci dot11_rmrep_ftm_lci_t;
#define DOT11_FTM_LCI_SUBELEM_ID 0
#define DOT11_FTM_LCI_SUBELEM_LEN 2
#define DOT11_FTM_LCI_FIELD_LEN 16
#define DOT11_FTM_LCI_UNKNOWN_LEN 2
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_ftm_civic {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 subj;
uint8 civloc_type;
uint8 siu; /* service interval units */
uint16 si; /* service interval */
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_ftm_civic dot11_rmreq_ftm_civic_t;
#define DOT11_RMREQ_CIVIC_LEN 10
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_ftm_civic {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 civloc_type;
uint8 civloc_sub_id;
uint8 civloc_sub_len;
/* optional location civic field */
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_ftm_civic dot11_rmrep_ftm_civic_t;
#define DOT11_FTM_CIVIC_LOC_TYPE_RFC4776 0
#define DOT11_FTM_CIVIC_SUBELEM_ID 0
#define DOT11_FTM_CIVIC_SUBELEM_LEN 2
#define DOT11_FTM_CIVIC_LOC_SI_NONE 0
#define DOT11_FTM_CIVIC_TYPE_LEN 1
#define DOT11_FTM_CIVIC_UNKNOWN_LEN 3
/* Location Identifier measurement request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_locid {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 subj;
uint8 siu;
uint16 si;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_locid dot11_rmreq_locid_t;
#define DOT11_RMREQ_LOCID_LEN 9
/* Location Identifier measurement report */
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_locid {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 exp_tsf[8];
uint8 locid_sub_id;
uint8 locid_sub_len;
/* optional location identifier field */
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_locid dot11_rmrep_locid_t;
#define DOT11_LOCID_UNKNOWN_LEN 10
#define DOT11_LOCID_SUBELEM_ID 0
BWL_PRE_PACKED_STRUCT struct dot11_ftm_range_subel {
uint8 id;
uint8 len;
uint16 max_age;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_ftm_range_subel dot11_ftm_range_subel_t;
#define DOT11_FTM_RANGE_SUBELEM_ID 4
#define DOT11_FTM_RANGE_SUBELEM_LEN 2
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_ftm_range {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint16 max_init_delay; /* maximum random initial delay */
uint8 min_ap_count;
uint8 data[BCM_FLEX_ARRAY];
/* neighbor report sub-elements */
/* optional sub-elements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_ftm_range dot11_rmreq_ftm_range_t;
#define DOT11_RMREQ_FTM_RANGE_LEN 8
#define DOT11_FTM_RANGE_LEN 3
BWL_PRE_PACKED_STRUCT struct dot11_ftm_range_entry {
uint32 start_tsf; /* 4 lsb of tsf */
struct ether_addr bssid;
uint8 range[DOT11_FTM_RANGE_LEN];
uint8 max_err[DOT11_FTM_RANGE_LEN];
uint8 rsvd;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_ftm_range_entry dot11_ftm_range_entry_t;
#define DOT11_FTM_RANGE_ENTRY_MAX_COUNT 15
enum {
DOT11_FTM_RANGE_ERROR_AP_INCAPABLE = 2,
DOT11_FTM_RANGE_ERROR_AP_FAILED = 3,
DOT11_FTM_RANGE_ERROR_TX_FAILED = 8,
DOT11_FTM_RANGE_ERROR_MAX
};
BWL_PRE_PACKED_STRUCT struct dot11_ftm_range_error_entry {
uint32 start_tsf; /* 4 lsb of tsf */
struct ether_addr bssid;
uint8 code;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_ftm_range_error_entry dot11_ftm_range_error_entry_t;
#define DOT11_FTM_RANGE_ERROR_ENTRY_MAX_COUNT 11
BWL_PRE_PACKED_STRUCT struct dot11_rmrep_ftm_range {
uint8 id;
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint8 entry_count;
uint8 data[2]; /* includes pad */
/*
dot11_ftm_range_entry_t entries[entry_count];
uint8 error_count;
dot11_ftm_error_entry_t errors[error_count];
*/
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmrep_ftm_range dot11_rmrep_ftm_range_t;
#define DOT11_FTM_RANGE_REP_MIN_LEN 6 /* No extra byte for error_count */
#define DOT11_FTM_RANGE_ENTRY_CNT_MAX 15
#define DOT11_FTM_RANGE_ERROR_CNT_MAX 11
#define DOT11_FTM_RANGE_REP_FIXED_LEN 1 /* No extra byte for error_count */
/** Measurement pause request */
BWL_PRE_PACKED_STRUCT struct dot11_rmreq_pause_time {
uint8 id; /* use dot11_rm_ie_t ? */
uint8 len;
uint8 token;
uint8 mode;
uint8 type;
uint16 pause_time;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_rmreq_pause_time dot11_rmreq_pause_time_t;
#define DOT11_RMREQ_PAUSE_LEN 7
/* Neighbor Report subelements ID (11k & 11v) */
#define DOT11_NGBR_TSF_INFO_SE_ID 1
#define DOT11_NGBR_CCS_SE_ID 2
#define DOT11_NGBR_BSSTRANS_PREF_SE_ID 3
#define DOT11_NGBR_BSS_TERM_DUR_SE_ID 4
#define DOT11_NGBR_BEARING_SE_ID 5
#define DOT11_NGBR_WIDE_BW_CHAN_SE_ID 6 /* proposed */
/** Neighbor Report, BSS Transition Candidate Preference subelement */
BWL_PRE_PACKED_STRUCT struct dot11_ngbr_bsstrans_pref_se {
uint8 sub_id;
uint8 len;
uint8 preference;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_ngbr_bsstrans_pref_se dot11_ngbr_bsstrans_pref_se_t;
#define DOT11_NGBR_BSSTRANS_PREF_SE_LEN 1
#define DOT11_NGBR_BSSTRANS_PREF_SE_IE_LEN 3
#define DOT11_NGBR_BSSTRANS_PREF_SE_HIGHEST 0xff
/** Neighbor Report, BSS Termination Duration subelement */
BWL_PRE_PACKED_STRUCT struct dot11_ngbr_bss_term_dur_se {
uint8 sub_id;
uint8 len;
uint8 tsf[8];
uint16 duration;
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_ngbr_bss_term_dur_se dot11_ngbr_bss_term_dur_se_t;
#define DOT11_NGBR_BSS_TERM_DUR_SE_LEN 10
/* Neighbor Report BSSID Information Field */
#define DOT11_NGBR_BI_REACHABILTY_UNKN 0x0002
#define DOT11_NGBR_BI_REACHABILTY 0x0003
#define DOT11_NGBR_BI_SEC 0x0004
#define DOT11_NGBR_BI_KEY_SCOPE 0x0008
#define DOT11_NGBR_BI_CAP 0x03f0
#define DOT11_NGBR_BI_CAP_SPEC_MGMT 0x0010
#define DOT11_NGBR_BI_CAP_QOS 0x0020
#define DOT11_NGBR_BI_CAP_APSD 0x0040
#define DOT11_NGBR_BI_CAP_RDIO_MSMT 0x0080
#define DOT11_NGBR_BI_CAP_DEL_BA 0x0100
#define DOT11_NGBR_BI_CAP_IMM_BA 0x0200
#define DOT11_NGBR_BI_MOBILITY 0x0400
#define DOT11_NGBR_BI_HT 0x0800
#define DOT11_NGBR_BI_VHT 0x1000
#define DOT11_NGBR_BI_FTM 0x2000
/** Neighbor Report element (11k & 11v) */
BWL_PRE_PACKED_STRUCT struct dot11_neighbor_rep_ie {
uint8 id;
uint8 len;
struct ether_addr bssid;
uint32 bssid_info;
uint8 reg; /* Operating class */
uint8 channel;
uint8 phytype;
uint8 data[BCM_FLEX_ARRAY]; /* Variable size subelements */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_neighbor_rep_ie dot11_neighbor_rep_ie_t;
#define DOT11_NEIGHBOR_REP_IE_FIXED_LEN 13u
/** Link Measurement */
BWL_PRE_PACKED_STRUCT struct dot11_lmreq {
uint8 category; /* category of action frame (5) */
uint8 action; /* radio measurement action */
uint8 token; /* dialog token */
uint8 txpwr; /* Transmit Power Used */
uint8 maxtxpwr; /* Max Transmit Power */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_lmreq dot11_lmreq_t;
#define DOT11_LMREQ_LEN 5
BWL_PRE_PACKED_STRUCT struct dot11_lmrep {
uint8 category; /* category of action frame (5) */
uint8 action; /* radio measurement action */
uint8 token; /* dialog token */
dot11_tpc_rep_t tpc; /* TPC element */
uint8 rxant; /* Receive Antenna ID */
uint8 txant; /* Transmit Antenna ID */
uint8 rcpi; /* RCPI */
uint8 rsni; /* RSNI */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_lmrep dot11_lmrep_t;
#define DOT11_LMREP_LEN 11
#define DOT11_MP_CAP_SPECTRUM 0x01 /* d11 cap. spectrum */
#define DOT11_MP_CAP_SHORTSLOT 0x02 /* d11 cap. shortslot */
/* Measurement Pilot */
BWL_PRE_PACKED_STRUCT struct dot11_mprep {
uint8 cap_info; /* Condensed capability Info. */
uint8 country[2]; /* Condensed country string */
uint8 opclass; /* Op. Class */
uint8 channel; /* Channel */
uint8 mp_interval; /* Measurement Pilot Interval */
} BWL_POST_PACKED_STRUCT;
typedef struct dot11_mprep dot11_mprep_t;
#define DOT11_MPREP_LEN 6
/* This marks the end of a packed structure section. */
#include <packed_section_end.h>
#endif /* _802_11k_h_ */