/*
|
* Monitor Mode routines.
|
* This header file housing the define and function use by DHD
|
*
|
* 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 _BCMWIFI_MONITOR_H_
|
#define _BCMWIFI_MONITOR_H_
|
|
#include <monitor.h>
|
|
typedef struct monitor_info monitor_info_t;
|
|
typedef struct monitor_pkt_ts {
|
union {
|
uint32 ts_low; /* time stamp low 32 bits */
|
uint32 reserved; /* If timestamp not used */
|
};
|
union {
|
uint32 ts_high; /* time stamp high 28 bits */
|
union {
|
uint32 ts_high_ext :28; /* time stamp high 28 bits */
|
uint32 clk_id_ext :3; /* clock ID source */
|
uint32 phase :1; /* Phase bit */
|
uint32 marker_ext;
|
};
|
};
|
} monitor_pkt_ts_t;
|
|
typedef struct monitor_pkt_info {
|
uint32 marker;
|
/* timestamp */
|
monitor_pkt_ts_t ts;
|
} monitor_pkt_info_t;
|
|
typedef struct monitor_pkt_rssi {
|
int8 dBm; /* number of full dBms */
|
/* sub-dbm resolution */
|
int8 decidBm; /* sub dBms : value after the decimal point */
|
} monitor_pkt_rssi_t;
|
|
/* structure to add specific information to rxsts structure
|
* otherwise non available to all modules like core RSSI and qdbm resolution
|
*/
|
|
typedef struct monitor_pkt_rxsts {
|
wl_rxsts_t *rxsts;
|
uint8 corenum; /* number of cores/antennas */
|
monitor_pkt_rssi_t rxpwr[4];
|
} monitor_pkt_rxsts_t;
|
|
#define HE_EXTRACT_FROM_PLCP(plcp, ppdu_type, field) \
|
(getbits(plcp, D11_PHY_HDR_LEN, \
|
HE_ ## ppdu_type ## _PPDU_ ## field ## _IDX, \
|
HE_ ## ppdu_type ## _PPDU_ ## field ## _FSZ))
|
|
#define HE_PACK_RTAP_FROM_PLCP(plcp, ppdu_type, field) \
|
(HE_EXTRACT_FROM_PLCP(plcp, ppdu_type, field) << \
|
HE_RADIOTAP_ ## field ## _SHIFT)
|
|
#define HE_PACK_RTAP_GI_LTF_FROM_PLCP(plcp, ppdu_type, field, member) \
|
((he_plcp2ltf_gi[HE_EXTRACT_FROM_PLCP(plcp, ppdu_type, field)].member) << \
|
HE_RADIOTAP_ ## field ## _SHIFT)
|
|
#define HE_PACK_RTAP_FROM_VAL(val, field) \
|
((val) << HE_RADIOTAP_ ## field ## _SHIFT)
|
|
#define HE_PACK_RTAP_FROM_PRXS(rxh, corerev, corerev_minor, field) \
|
(HE_PACK_RTAP_FROM_VAL(D11PPDU_ ## field(rxh, corerev, corerev_minor), field))
|
|
/* channel bandwidth */
|
#define WLC_20_MHZ 20 /**< 20Mhz channel bandwidth */
|
#define WLC_40_MHZ 40 /**< 40Mhz channel bandwidth */
|
#define WLC_80_MHZ 80 /**< 80Mhz channel bandwidth */
|
#define WLC_160_MHZ 160 /**< 160Mhz channel bandwidth */
|
#define WLC_240_MHZ 240 /**< 240Mhz channel bandwidth */
|
#define WLC_320_MHZ 320 /**< 320Mhz channel bandwidth */
|
|
extern uint16 bcmwifi_monitor_create(monitor_info_t**);
|
extern void bcmwifi_set_corerev_major(monitor_info_t* info, int8 corerev);
|
extern void bcmwifi_set_corerev_minor(monitor_info_t* info, int8 corerev);
|
extern void bcmwifi_monitor_delete(monitor_info_t* info);
|
extern uint16 bcmwifi_monitor(monitor_info_t* info,
|
monitor_pkt_info_t* pkt_info, void *pdata, uint16 len, void* pout,
|
uint16* offset, uint16 pad_req, void *wrxh_in, void *wrxh_last);
|
extern uint16 wl_rxsts_to_rtap(monitor_pkt_rxsts_t* pkt_rxsts, void *pdata,
|
uint16 len, void* pout, uint16 pad_req);
|
|
#endif /* _BCMWIFI_MONITOR_H_ */
|