/*
|
* Generic functions for d11 access
|
*
|
* 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 _hndd11_h_
|
#define _hndd11_h_
|
|
#include <typedefs.h>
|
#include <osl_decl.h>
|
#include <bcmutils.h>
|
#include <siutils.h>
|
#include <d11.h>
|
|
/* This marks the start of a packed structure section. */
|
#include <packed_section_start.h>
|
|
#ifndef WL_RSSI_ANT_MAX
|
#define WL_RSSI_ANT_MAX 4 /**< max possible rx antennas */
|
#elif WL_RSSI_ANT_MAX != 4
|
#error "WL_RSSI_ANT_MAX does not match"
|
#endif
|
|
BWL_PRE_PACKED_STRUCT struct wl_d11rxrssi {
|
int8 dBm; /* number of full dBms */
|
/* sub-dbm resolution */
|
int8 decidBm; /* sub dBms : value after the decimal point */
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct wl_d11rxrssi wlc_d11rxrssi_t;
|
|
BWL_PRE_PACKED_STRUCT struct wlc_d11rxhdr {
|
/* SW header */
|
uint32 tsf_l; /**< TSF_L reading */
|
int8 rssi; /**< computed instantaneous rssi */
|
int8 rssi_qdb; /**< qdB portion of the computed rssi */
|
int16 snr; /**< computed snginal-to-noise instantaneous snr */
|
int8 rxpwr[ROUNDUP(WL_RSSI_ANT_MAX,2)]; /**< rssi for supported antennas */
|
/**
|
* Even though rxhdr can be in short or long format, always declare it here
|
* to be in long format. So the offsets for the other fields are always the same.
|
*/
|
d11rxhdr_t rxhdr;
|
} BWL_POST_PACKED_STRUCT;
|
|
/* SW RXHDR + HW RXHDR */
|
typedef struct wlc_d11rxhdr wlc_d11rxhdr_t;
|
|
/* extension of wlc_d11rxhdr..
|
* This extra block can be used to store extra internal information that cannot fit into
|
* wlc_d11rxhdr.
|
* At the moment, it is only used to store and possibly transmit the per-core quater dbm rssi
|
* information produced by the phy.
|
* NOTE: To avoid header overhead and amsdu handling complexities this usage is limited to
|
* only in case that host need to get the extra info. e.g., monitoring mode packet.
|
*/
|
|
BWL_PRE_PACKED_STRUCT struct wlc_d11rxhdr_ext {
|
#ifdef BCM_MON_QDBM_RSSI
|
wlc_d11rxrssi_t rxpwr[WL_RSSI_ANT_MAX];
|
#endif
|
wlc_d11rxhdr_t wlc_d11rx;
|
} BWL_POST_PACKED_STRUCT;
|
|
typedef struct wlc_d11rxhdr_ext wlc_d11rxhdr_ext_t;
|
|
/* Length of software rx header extension */
|
#define WLC_SWRXHDR_EXT_LEN (OFFSETOF(wlc_d11rxhdr_ext_t, wlc_d11rx))
|
|
/* Length of SW header (12 bytes) */
|
#define WLC_RXHDR_LEN (OFFSETOF(wlc_d11rxhdr_t, rxhdr))
|
/* Length of RX headers - SW header + HW/ucode/PHY RX status */
|
#define WL_RXHDR_LEN(corerev, corerev_minor) \
|
(WLC_RXHDR_LEN + D11_RXHDR_LEN(corerev, corerev_minor))
|
#define WL_RXHDR_LEN_TMP(corerev, corerev_minor) \
|
(WLC_RXHDR_LEN + D11_RXHDR_LEN_TMP(corerev, corerev_minor))
|
|
/* This marks the end of a packed structure section. */
|
#include <packed_section_end.h>
|
|
/* Structure to hold d11 corerev information */
|
typedef struct d11_info d11_info_t;
|
struct d11_info {
|
uint major_revid;
|
uint minor_revid;
|
};
|
|
/* ulp dbg macro */
|
#define HNDD11_DBG(x)
|
#define HNDD11_ERR(x) printf x
|
|
/* d11 slice index */
|
#define DUALMAC_MAIN 0
|
#define DUALMAC_AUX 1
|
#define DUALMAC_SCAN 2
|
|
extern void hndd11_read_shm(si_t *sih, uint coreunit, uint offset, void* buf);
|
extern void hndd11_write_shm(si_t *sih, uint coreunit, uint offset, const void* buf);
|
|
extern void hndd11_copyfrom_shm(si_t *sih, uint coreunit, uint offset, void* buf, int len);
|
extern void hndd11_copyto_shm(si_t *sih, uint coreunit, uint offset, const void* buf, int len);
|
|
extern uint32 hndd11_bm_read(osl_t *osh, d11regs_info_t *regsinfo, uint32 offset, uint32 len,
|
uint32 *buf);
|
extern uint32 hndd11_bm_write(osl_t *osh, d11regs_info_t *regsinfo, uint32 offset, uint32 len,
|
const uint32 *buf);
|
extern void hndd11_bm_dump(osl_t *osh, d11regs_info_t *regsinfo, uint32 offset, uint32 len);
|
|
extern int hndd11_get_reginfo(si_t *sih, d11regs_info_t *regsinfo, uint coreunit);
|
|
#endif /* _hndd11_h_ */
|