/*
|
* Monitor Mode definitions.
|
* This header file housing the define and function prototype use by
|
* both the wl firmware and drivers.
|
*
|
* Broadcom Proprietary and Confidential. Copyright (C) 2020,
|
* All Rights Reserved.
|
*
|
* This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom;
|
* the contents of this file may not be disclosed to third parties,
|
* copied or duplicated in any form, in whole or in part, without
|
* the prior written permission of Broadcom.
|
*
|
*
|
* <<Broadcom-WL-IPTag/Proprietary:>>
|
*/
|
#ifndef _MONITOR_H_
|
#define _MONITOR_H_
|
|
#include <bcmwifi_channels.h>
|
|
#include <packed_section_start.h>
|
/* wl_monitor rx status per packet */
|
typedef struct BWL_PRE_PACKED_STRUCT wl_rxsts {
|
uint pkterror; /* error flags per pkt */
|
uint phytype; /* 802.11 A/B/G /N */
|
chanspec_t chanspec; /* channel spec */
|
uint16 datarate; /* rate in 500kbps */
|
uint8 mcs; /* MCS for HT frame */
|
uint8 htflags; /* HT modulation flags */
|
uint antenna; /* antenna pkts received on */
|
uint pktlength; /* pkt length minus bcm phy hdr */
|
uint32 mactime; /* time stamp from mac, count per 1us */
|
uint sq; /* signal quality */
|
int32 signal; /* in dBm */
|
int32 noise; /* in dBm */
|
uint preamble; /* Unknown, short, long */
|
uint encoding; /* Unknown, CCK, PBCC, OFDM, HT, VHT */
|
uint nfrmtype; /* special 802.11n frames(AMPDU, AMSDU) */
|
uint8 nss; /* Number of spatial streams for VHT frame */
|
uint8 coding;
|
uint16 aid; /* Partial AID for VHT frame */
|
uint8 gid; /* Group ID for VHT frame */
|
uint8 bw; /* Bandwidth for VHT frame */
|
uint16 vhtflags; /* VHT modulation flags */
|
uint16 bw_nonht; /* non-HT bw advertised in rts/cts */
|
uint32 ampdu_counter; /* AMPDU counter for sniffer */
|
uint32 sig_a1; /* TODO: this unused field needs to be removed */
|
uint32 sig_a2; /* TODO: this unused field needs to be removed */
|
uint16 data1;
|
uint16 data2;
|
uint16 data3;
|
uint16 data4;
|
uint16 data5;
|
uint16 data6;
|
uint8 ru_channel1[4];
|
uint8 ru_channel2[4];
|
uint16 flag1;
|
uint16 flag2;
|
} BWL_POST_PACKED_STRUCT wl_rxsts_t, wl_mon_rxsts_t;
|
#include <packed_section_end.h>
|
|
#define WLMONRXSTS_SIZE sizeof(wl_rxsts_t)
|
|
/* phy type */
|
#define WL_RXS_PHY_N 0x00000004 /* N phy type */
|
|
/* encoding */
|
#define WL_RXS_ENCODING_UNKNOWN 0x00000000
|
#define WL_RXS_ENCODING_DSSS_CCK 0x00000001 /* DSSS/CCK encoding (1, 2, 5.5, 11) */
|
#define WL_RXS_ENCODING_OFDM 0x00000002 /* OFDM encoding */
|
#define WL_RXS_ENCODING_HT 0x00000003 /* HT encoding */
|
#define WL_RXS_ENCODING_VHT 0x00000004 /* VHT encoding */
|
#define WL_RXS_ENCODING_HE 0x00000005 /* HE encoding */
|
#define WL_RXS_ENCODING_EHT 0x00000006 /* EHT encoding */
|
|
/* status per error RX pkt */
|
#define WL_RXS_CRC_ERROR 0x00000001 /* CRC Error in packet */
|
#define WL_RXS_RUNT_ERROR 0x00000002 /* Runt packet */
|
#define WL_RXS_ALIGN_ERROR 0x00000004 /* Misaligned packet */
|
#define WL_RXS_OVERSIZE_ERROR 0x00000008 /* packet bigger than RX_LENGTH (usually 1518) */
|
#define WL_RXS_WEP_ICV_ERROR 0x00000010 /* Integrity Check Value error */
|
#define WL_RXS_WEP_ENCRYPTED 0x00000020 /* Encrypted with WEP */
|
#define WL_RXS_PLCP_SHORT 0x00000040 /* Short PLCP error */
|
#define WL_RXS_DECRYPT_ERR 0x00000080 /* Decryption error */
|
#define WL_RXS_OTHER_ERR 0x80000000 /* Other errors */
|
|
/* preamble */
|
#define WL_RXS_UNUSED_STUB 0x0 /**< stub to match with wlc_ethereal.h */
|
#define WL_RXS_PREAMBLE_SHORT 0x00000001 /**< Short preamble */
|
#define WL_RXS_PREAMBLE_LONG 0x00000002 /**< Long preamble */
|
#define WL_RXS_PREAMBLE_HT_MM 0x00000003 /**< HT mixed mode preamble */
|
#define WL_RXS_PREAMBLE_HT_GF 0x00000004 /**< HT green field preamble */
|
|
/* htflags */
|
#define WL_RXS_HTF_BW_MASK 0x07
|
#define WL_RXS_HTF_40 0x01
|
#define WL_RXS_HTF_20L 0x02
|
#define WL_RXS_HTF_20U 0x04
|
#define WL_RXS_HTF_SGI 0x08
|
#define WL_RXS_HTF_STBC_MASK 0x30
|
#define WL_RXS_HTF_STBC_SHIFT 4
|
#define WL_RXS_HTF_LDPC 0x40
|
|
#ifdef WLTXMONITOR
|
/* reuse bw-bits in ht for vht */
|
#define WL_RXS_VHTF_BW_MASK 0x87
|
#define WL_RXS_VHTF_40 0x01
|
#define WL_RXS_VHTF_20L WL_RXS_VHTF_20LL
|
#define WL_RXS_VHTF_20U WL_RXS_VHTF_20LU
|
#define WL_RXS_VHTF_80 0x02
|
#define WL_RXS_VHTF_20LL 0x03
|
#define WL_RXS_VHTF_20LU 0x04
|
#define WL_RXS_VHTF_20UL 0x05
|
#define WL_RXS_VHTF_20UU 0x06
|
#define WL_RXS_VHTF_40L 0x07
|
#define WL_RXS_VHTF_40U 0x80
|
#endif /* WLTXMONITOR */
|
|
/* vhtflags */
|
#define WL_RXS_VHTF_STBC 0x01
|
#define WL_RXS_VHTF_TXOP_PS 0x02
|
#define WL_RXS_VHTF_SGI 0x04
|
#define WL_RXS_VHTF_SGI_NSYM_DA 0x08
|
#define WL_RXS_VHTF_LDPC_EXTRA 0x10
|
#define WL_RXS_VHTF_BF 0x20
|
#define WL_RXS_VHTF_DYN_BW_NONHT 0x40
|
#define WL_RXS_VHTF_CODING_LDCP 0x01
|
|
#define WL_RXS_VHT_BW_20 0
|
#define WL_RXS_VHT_BW_40 1
|
#define WL_RXS_VHT_BW_20L 2
|
#define WL_RXS_VHT_BW_20U 3
|
#define WL_RXS_VHT_BW_80 4
|
#define WL_RXS_VHT_BW_40L 5
|
#define WL_RXS_VHT_BW_40U 6
|
#define WL_RXS_VHT_BW_20LL 7
|
#define WL_RXS_VHT_BW_20LU 8
|
#define WL_RXS_VHT_BW_20UL 9
|
#define WL_RXS_VHT_BW_20UU 10
|
#define WL_RXS_VHT_BW_160 11
|
#define WL_RXS_VHT_BW_80L 12
|
#define WL_RXS_VHT_BW_80U 13
|
#define WL_RXS_VHT_BW_40LL 14
|
#define WL_RXS_VHT_BW_40LU 15
|
#define WL_RXS_VHT_BW_40UL 16
|
#define WL_RXS_VHT_BW_40UU 17
|
#define WL_RXS_VHT_BW_20LLL 18
|
#define WL_RXS_VHT_BW_20LLU 19
|
#define WL_RXS_VHT_BW_20LUL 20
|
#define WL_RXS_VHT_BW_20LUU 21
|
#define WL_RXS_VHT_BW_20ULL 22
|
#define WL_RXS_VHT_BW_20ULU 23
|
#define WL_RXS_VHT_BW_20UUL 24
|
#define WL_RXS_VHT_BW_20UUU 25
|
|
#define WL_RXS_NFRM_AMPDU_FIRST 0x00000001 /* first MPDU in A-MPDU */
|
#define WL_RXS_NFRM_AMPDU_SUB 0x00000002 /* subsequent MPDU(s) in A-MPDU */
|
#define WL_RXS_NFRM_AMSDU_FIRST 0x00000004 /* first MSDU in A-MSDU */
|
#define WL_RXS_NFRM_AMSDU_SUB 0x00000008 /* subsequent MSDU(s) in A-MSDU */
|
|
/* HE flags */
|
#define WL_RXS_HEF_SIGA_PPDU_SU 0x0000
|
#define WL_RXS_HEF_SIGA_PPDU_EXT_SU 0x0001
|
#define WL_RXS_HEF_SIGA_PPDU_MU 0x0002
|
#define WL_RXS_HEF_SIGA_PPDU_TRIG 0x0003
|
#define WL_RXS_HEF_SIGA_BSS_COLOR 0x0004
|
#define WL_RXS_HEF_SIGA_BEAM_CHANGE 0x0008
|
#define WL_RXS_HEF_SIGA_DL_UL 0x0010
|
#define WL_RXS_HEF_SIGA_MCS 0x0020
|
#define WL_RXS_HEF_SIGA_DCM 0x0040
|
#define WL_RXS_HEF_SIGA_CODING 0x0080
|
#define WL_RXS_HEF_SIGA_LDPC 0x0100
|
#define WL_RXS_HEF_SIGA_STBC 0x0200
|
#define WL_RXS_HEF_SIGA_SPATIAL_REUSE 0x0400
|
#define WL_RXS_HEF_SIGA_STA_ID 0x0800
|
#define WL_RXS_HEF_SIGA_SPATIAL_REUSE2 0x0800
|
#define WL_RXS_HEF_SIGA_SPATIAL_REUSE3 0x1000
|
#define WL_RXS_HEF_SIGA_SPATIAL_REUSE4 0x2000
|
#define WL_RXS_HEF_SIGA_BW 0x4000
|
#define WL_RXS_HEF_SIGA_RU_ALLOC 0x4000
|
#define WL_RXS_HEF_SIGA_DOPPLER 0x8000
|
#define WL_RXS_HEF_SIGA_GI 0x0002
|
#define WL_RXS_HEF_SIGA_LTF_SIZE 0x0004 /* no explicit known field */
|
#define WL_RXS_HEF_SIGA_NUM_LTF 0x0004
|
#define WL_RXS_HEF_SIGA_PADDING 0x0008
|
#define WL_RXS_HEF_SIGA_TXBF 0x0010
|
#define WL_RXS_HEF_SIGA_PE 0x0020
|
#define WL_RXS_HEF_SIGA_TXOP 0x0040
|
#define WL_RXS_HEF_SIGA_MIDAMBLE 0x0080
|
|
/* https://www.radiotap.org/fields/HE-MU.html */
|
#define WL_RXS_HEF_SIGB_MCS_KNOWN 0x0010
|
#define WL_RXS_HEF_SIGB_DCM_KNOWN 0x0040
|
#define WL_RXS_HEF_CH2_26TONE_RU_KNOWN 0x0080
|
#define WL_RXS_HEF_CH1_RU_KNOWN 0x0100
|
#define WL_RXS_HEF_CH2_RU_KNOWN 0x0200
|
#define WL_RXS_HEF_CH1_26TONE_RU_KNOWN 0x1000
|
#define WL_RXS_HEF_SIGB_COMP_KNOWN 0x4000
|
#define WL_RXS_HEF_NUM_SIGB_SYMB_KNOWN 0x8000
|
#define WL_RXS_HEF_BW_SIGA_KNOWN 0x0004
|
#define WL_RXS_HEF_PREPUNCR_SIGA_KNOWN 0x0400
|
#define WL_RXS_HEF_SIGB_SYMB_KNOWN 0x8000
|
#define WL_RXS_HEF_PREPUNCR_KNOWN 0x0400
|
|
#include <packed_section_start.h>
|
typedef struct BWL_PRE_PACKED_STRUCT wl_txsts {
|
uint pkterror; /**< error flags per pkt */
|
uint phytype; /**< 802.11 A/B/G /N */
|
chanspec_t chanspec; /**< channel spec */
|
uint16 datarate; /**< rate in 500kbps */
|
uint8 mcs; /**< MCS for HT frame */
|
uint8 htflags; /**< HT modulation flags */
|
uint antenna; /**< antenna pkt transmitted on */
|
uint pktlength; /**< pkt length minus bcm phy hdr */
|
uint32 mactime; /**< ? time stamp from mac, count per 1us */
|
uint preamble; /**< Unknown, short, long */
|
uint encoding; /**< Unknown, CCK, PBCC, OFDM, HT */
|
uint nfrmtype; /**< special 802.11n frames(AMPDU, AMSDU) */
|
uint txflags; /**< As defined in radiotap field 15 */
|
uint retries; /**< Number of retries */
|
struct wl_if *wlif; /**< wl interface */
|
} BWL_POST_PACKED_STRUCT wl_txsts_t;
|
#include <packed_section_end.h>
|
|
#define WL_TXS_TXF_FAIL 0x01 /**< TX failed due to excessive retries */
|
#define WL_TXS_TXF_CTS 0x02 /**< TX used CTS-to-self protection */
|
#define WL_TXS_TXF_RTSCTS 0x04 /**< TX used RTS/CTS */
|
|
#endif /* _MONITOR_H_ */
|