summaryrefslogtreecommitdiffstats
path: root/src/wl/sys/wlc_pub.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wl/sys/wlc_pub.h')
-rw-r--r--src/wl/sys/wlc_pub.h927
1 files changed, 927 insertions, 0 deletions
diff --git a/src/wl/sys/wlc_pub.h b/src/wl/sys/wlc_pub.h
new file mode 100644
index 0000000..53a98b8
--- /dev/null
+++ b/src/wl/sys/wlc_pub.h
@@ -0,0 +1,927 @@
+/*
+ * Common (OS-independent) definitions for
+ * Broadcom 802.11abg Networking Device Driver
+ *
+ * Copyright (C) 2015, Broadcom Corporation. All Rights Reserved.
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * $Id: wlc_pub.h 458427 2014-02-26 23:12:38Z $
+ */
+
+#ifndef _wlc_pub_h_
+#define _wlc_pub_h_
+
+#include <wlc_types.h>
+#include <wlc_utils.h>
+#include "proto/802.11.h"
+#include "proto/bcmevent.h"
+
+#define MAX_TIMERS (34 + WLC_MAXMFPS + WLC_MAXDLS_TIMERS + (2 * WLC_MAXDPT))
+
+#define WLC_NUMRATES 16
+#define MAXMULTILIST 32
+#define D11_PHY_HDR_LEN 6
+
+#define PHY_TYPE_A 0
+#define PHY_TYPE_G 2
+#define PHY_TYPE_N 4
+#define PHY_TYPE_LP 5
+#define PHY_TYPE_SSN 6
+#define PHY_TYPE_HT 7
+#define PHY_TYPE_LCN 8
+#define PHY_TYPE_LCNXN 9
+
+#define WLC_10_MHZ 10
+#define WLC_20_MHZ 20
+#define WLC_40_MHZ 40
+#define WLC_80_MHZ 80
+#define WLC_160_MHZ 160
+
+#define CHSPEC_WLC_BW(chanspec)(CHSPEC_IS160(chanspec) ? WLC_160_MHZ : \
+ CHSPEC_IS80(chanspec) ? WLC_80_MHZ : \
+ CHSPEC_IS40(chanspec) ? WLC_40_MHZ : \
+ CHSPEC_IS20(chanspec) ? WLC_20_MHZ : \
+ WLC_10_MHZ)
+
+#define WLC_RSSI_MINVAL -200
+#define WLC_RSSI_NO_SIGNAL -91
+#define WLC_RSSI_VERY_LOW -80
+#define WLC_RSSI_LOW -70
+#define WLC_RSSI_GOOD -68
+#define WLC_RSSI_VERY_GOOD -58
+#define WLC_RSSI_EXCELLENT -57
+
+#define PREFSZ 160
+#define WLPREFHDRS(h, sz) OSL_PREF_RANGE_ST((h), (sz))
+
+struct wlc_info;
+struct wlc_hw_info;
+struct wlc_bsscfg;
+struct wlc_if;
+
+typedef struct wlc_tunables {
+ int ntxd;
+ int nrxd;
+ int rxbufsz;
+ int nrxbufpost;
+ int maxscb;
+ int ampdunummpdu2streams;
+ int ampdunummpdu3streams;
+ int maxpktcb;
+ int maxdpt;
+ int maxucodebss;
+ int maxucodebss4;
+ int maxbss;
+ int datahiwat;
+ int ampdudatahiwat;
+ int rxbnd;
+ int txsbnd;
+ int pktcbnd;
+ int dngl_mem_restrict_rxdma;
+ int rpctxbufpost;
+ int pkt_maxsegs;
+ int maxscbcubbies;
+ int maxbsscfgcubbies;
+ int max_notif_servers;
+ int max_notif_clients;
+ int max_mempools;
+ int maxtdls;
+ int amsdu_resize_buflen;
+ int ampdu_pktq_size;
+ int ampdu_pktq_fav_size;
+ int ntxd_large;
+ int nrxd_large;
+ int wlfcfifocreditac0;
+ int wlfcfifocreditac1;
+ int wlfcfifocreditac2;
+ int wlfcfifocreditac3;
+ int wlfcfifocreditbcmc;
+ int wlfcfifocreditother;
+ int scan_settle_time;
+ int wlfc_fifo_cr_pending_thresh_ac_bk;
+ int wlfc_fifo_cr_pending_thresh_ac_be;
+ int wlfc_fifo_cr_pending_thresh_ac_vi;
+ int wlfc_fifo_cr_pending_thresh_ac_vo;
+ int ampdunummpdu1stream;
+} wlc_tunables_t;
+
+typedef struct wlc_rateset {
+ uint count;
+ uint8 rates[WLC_NUMRATES];
+ uint8 htphy_membership;
+ uint8 mcs[MCSSET_LEN];
+ uint16 vht_mcsmap;
+} wlc_rateset_t;
+
+typedef void *wlc_pkt_t;
+
+typedef struct wlc_event {
+ wl_event_msg_t event;
+ struct ether_addr *addr;
+ struct wlc_if *wlcif;
+ void *data;
+ struct wlc_event *next;
+} wlc_event_t;
+
+typedef struct wlc_bss_info
+{
+ struct ether_addr BSSID;
+ uint16 flags;
+ uint8 SSID_len;
+ uint8 SSID[32];
+ int16 RSSI;
+ int16 SNR;
+ uint16 beacon_period;
+ uint16 atim_window;
+ chanspec_t chanspec;
+ int8 infra;
+ wlc_rateset_t rateset;
+ uint8 dtim_period;
+ int8 phy_noise;
+ uint16 capability;
+ struct dot11_bcn_prb *bcn_prb;
+ uint16 bcn_prb_len;
+ uint8 wme_qosinfo;
+ struct rsn_parms wpa;
+ struct rsn_parms wpa2;
+ uint16 qbss_load_aac;
+
+ uint8 qbss_load_chan_free;
+ uint8 mcipher;
+ uint8 wpacfg;
+ uint16 mdid;
+ uint16 flags2;
+ uint32 vht_capabilities;
+ uint16 vht_rxmcsmap;
+ uint16 vht_txmcsmap;
+} wlc_bss_info_t;
+
+#define WLC_BSS_54G 0x0001
+#define WLC_BSS_RSSI_ON_CHANNEL 0x0002
+#define WLC_BSS_WME 0x0004
+#define WLC_BSS_BRCM 0x0008
+#define WLC_BSS_WPA 0x0010
+#define WLC_BSS_HT 0x0020
+#define WLC_BSS_40MHZ 0x0040
+#define WLC_BSS_WPA2 0x0080
+#define WLC_BSS_BEACON 0x0100
+#define WLC_BSS_40INTOL 0x0200
+#define WLC_BSS_SGI_20 0x0400
+#define WLC_BSS_SGI_40 0x0800
+#define WLC_BSS_CACHE 0x2000
+#define WLC_BSS_FBT 0x8000
+
+#define WLC_BSS_OVERDS_FBT 0x0001
+#define WLC_BSS_VHT 0x0002
+#define WLC_BSS_80MHZ 0x0004
+#define WLC_BSS_SGI_80 0x0008
+
+#define WLC_ENOIOCTL 1
+#define WLC_EINVAL 2
+#define WLC_ETOOSMALL 3
+#define WLC_ETOOBIG 4
+#define WLC_ERANGE 5
+#define WLC_EDOWN 6
+#define WLC_EUP 7
+#define WLC_ENOMEM 8
+#define WLC_EBUSY 9
+
+#define IOVF_BSSCFG_STA_ONLY (1<<0)
+#define IOVF_BSSCFG_AP_ONLY (1<<1)
+#define IOVF_BSS_SET_DOWN (1<<2)
+
+#define IOVF_MFG (1<<3)
+#define IOVF_WHL (1<<4)
+#define IOVF_NTRL (1<<5)
+
+#define IOVF_SET_UP (1<<6)
+#define IOVF_SET_DOWN (1<<7)
+#define IOVF_SET_CLK (1<<8)
+#define IOVF_SET_BAND (1<<9)
+
+#define IOVF_GET_UP (1<<10)
+#define IOVF_GET_DOWN (1<<11)
+#define IOVF_GET_CLK (1<<12)
+#define IOVF_GET_BAND (1<<13)
+#define IOVF_OPEN_ALLOW (1<<14)
+
+#define IOVF_BMAC_IOVAR (1<<15)
+
+#define BAR0_INVALID (1 << 0)
+#define VENDORID_INVALID (1 << 1)
+#define NOCARD_PRESENT (1 << 2)
+#define PHY_PLL_ERROR (1 << 3)
+#define DEADCHIP_ERROR (1 << 4)
+#define MACSPEND_TIMOUT (1 << 5)
+#define MACSPEND_WOWL_TIMOUT (1 << 6)
+#define DMATX_ERROR (1 << 7)
+#define DMARX_ERROR (1 << 8)
+#define DESCRIPTOR_ERROR (1 << 9)
+#define CARD_NOT_POWERED (1 << 10)
+
+#define WL_HEALTH_LOG(w, s) do {} while (0)
+
+typedef int (*watchdog_fn_t)(void *handle);
+typedef int (*up_fn_t)(void *handle);
+typedef int (*down_fn_t)(void *handle);
+typedef int (*dump_fn_t)(void *handle, struct bcmstrbuf *b);
+
+typedef int (*iovar_fn_t)(void *handle, const bcm_iovar_t *vi, uint32 actionid,
+ const char *name, void *params, uint plen, void *arg, int alen,
+ int vsize, struct wlc_if *wlcif);
+
+#define WLC_IOCF_BSSCFG_STA_ONLY (1<<0)
+#define WLC_IOCF_BSSCFG_AP_ONLY (1<<1)
+
+#define WLC_IOCF_MFG (1<<2)
+
+#define WLC_IOCF_DRIVER_UP (1<<3)
+#define WLC_IOCF_DRIVER_DOWN (1<<4)
+#define WLC_IOCF_CORE_CLK (1<<5)
+#define WLC_IOCF_FIXED_BAND (1<<6)
+#define WLC_IOCF_OPEN_ALLOW (1<<7)
+
+typedef int (*wlc_ioctl_fn_t)(void *handle, int cmd, void *arg, int len, struct wlc_if *wlcif);
+
+typedef struct wlc_ioctl_cmd_s {
+ uint16 cmd;
+ uint16 flags;
+ int min_len;
+} wlc_ioctl_cmd_t;
+
+typedef struct wlc_pub {
+ void *wlc;
+ struct ether_addr cur_etheraddr;
+ uint unit;
+ uint corerev;
+ osl_t *osh;
+ si_t *sih_obsolete;
+ char *vars_obsolete;
+ uint vars_size_obsolete;
+ bool up;
+ bool hw_off;
+ wlc_tunables_t *tunables;
+ bool hw_up;
+ bool _piomode;
+ uint _nbands;
+ uint now;
+
+ bool promisc;
+ bool delayed_down;
+ bool _ap;
+ bool _apsta;
+ bool _assoc_recreate;
+ int _wme;
+ uint8 _mbss;
+ bool associated;
+
+ bool phytest_on;
+ bool bf_preempt_4306;
+
+ bool _wowl;
+ bool _wowl_active;
+ bool _ampdu_tx;
+ bool _ampdu_rx;
+ bool _amsdu_tx;
+ bool _cac;
+ uint _spect_management;
+ uint8 _n_enab;
+ bool _n_reqd;
+
+ uint8 _vht_enab;
+
+ int8 _coex;
+ bool _priofc;
+ bool phy_bw40_capable;
+ bool phy_bw80_capable;
+
+ uint32 wlfeatureflag;
+ int psq_pkts_total;
+
+ uint16 txmaxpkts;
+
+ uint32 swdecrypt;
+
+ int bcmerror;
+
+ mbool radio_disabled;
+ mbool last_radio_disabled;
+ bool radio_active;
+ uint16 roam_time_thresh;
+ bool align_wd_tbtt;
+ uint16 boardrev;
+ uint8 sromrev;
+ uint32 boardflags;
+ uint32 boardflags2;
+
+ wl_cnt_t *_cnt;
+ wl_wme_cnt_t *_wme_cnt;
+
+ uint8 _ndis_cap;
+ bool _extsta;
+ bool _pkt_filter;
+ bool phy_11ncapable;
+ bool _fbt;
+ pktpool_t *pktpool;
+ uint8 _ampdumac;
+ bool _wleind;
+ bool _sup_enab;
+ uint driverrev;
+
+ bool _11h;
+ bool _11d;
+#ifdef WLCNTRY
+ bool _autocountry;
+#endif
+ uint32 health;
+ uint8 d11tpl_phy_hdr_len;
+ uint wsec_max_rcmta_keys;
+ uint max_addrma_idx;
+ uint16 m_seckindxalgo_blk;
+ uint m_seckindxalgo_blk_sz;
+ uint16 m_coremask_blk;
+ uint16 m_coremask_blk_wowl;
+#ifdef WL_BEAMFORMING
+ bool _txbf;
+#endif
+
+ bool wet_tunnel;
+ int _ol;
+
+ uint16 vht_features;
+
+ bool _ampdu_hostreorder;
+
+ int8 _pktc;
+ bool _tdls_support;
+ bool _okc;
+ bool _p2po;
+ bool _anqpo;
+ bool _wl_rxearlyrc;
+ bool _tiny_pktjoin;
+ si_t *sih;
+ char *vars;
+ uint vars_size;
+ bool _proxd;
+
+ bool _arpoe_support;
+ bool _11u;
+
+ bool _lpc_algo;
+ bool _relmcast;
+ bool _relmcast_support;
+
+ bool _l2_filter;
+
+ uint bcn_tmpl_len;
+#ifdef WL_OFFLOADSTATS
+ uint32 offld_cnt_received[4];
+ uint32 offld_cnt_consumed[4];
+#endif
+#ifdef WL_INTERRUPTSTATS
+ uint32 intr_cnt[32];
+#endif
+
+#ifdef TCPKAOE
+ bool _icmpoe;
+ bool _tcp_keepalive;
+#endif
+ bool _olpc;
+} wlc_pub_t;
+
+typedef struct wl_rxsts {
+ uint pkterror;
+ uint phytype;
+ chanspec_t chanspec;
+ uint16 datarate;
+ uint8 mcs;
+ uint8 htflags;
+ uint antenna;
+ uint pktlength;
+ uint32 mactime;
+ uint sq;
+ int32 signal;
+ int32 noise;
+ uint preamble;
+ uint encoding;
+ uint nfrmtype;
+ struct wl_if *wlif;
+ uint8 nss;
+ uint8 coding;
+ uint16 aid;
+ uint8 gid;
+ uint8 bw;
+ uint16 vhtflags;
+ uint8 bw_nonht;
+ uint32 ampdu_counter;
+} wl_rxsts_t;
+
+typedef struct wl_txsts {
+ uint pkterror;
+ uint phytype;
+ chanspec_t chanspec;
+ uint16 datarate;
+ uint8 mcs;
+ uint8 htflags;
+ uint antenna;
+ uint pktlength;
+ uint32 mactime;
+ uint preamble;
+ uint encoding;
+ uint nfrmtype;
+ uint txflags;
+ uint retries;
+ struct wl_if *wlif;
+} wl_txsts_t;
+
+typedef struct wlc_if_stats {
+
+ uint32 txframe;
+ uint32 txbyte;
+ uint32 txerror;
+ uint32 txnobuf;
+ uint32 txrunt;
+ uint32 txfail;
+
+ uint32 rxframe;
+ uint32 rxbyte;
+ uint32 rxerror;
+ uint32 rxnobuf;
+ uint32 rxrunt;
+ uint32 rxfragerr;
+
+ uint32 txretry;
+ uint32 txretrie;
+ uint32 txfrmsnt;
+ uint32 txmulti;
+ uint32 txfrag;
+
+ uint32 rxmulti;
+
+} wlc_if_stats_t;
+
+#define WL_RXS_CRC_ERROR 0x00000001
+#define WL_RXS_RUNT_ERROR 0x00000002
+#define WL_RXS_ALIGN_ERROR 0x00000004
+#define WL_RXS_OVERSIZE_ERROR 0x00000008
+#define WL_RXS_WEP_ICV_ERROR 0x00000010
+#define WL_RXS_WEP_ENCRYPTED 0x00000020
+#define WL_RXS_PLCP_SHORT 0x00000040
+#define WL_RXS_DECRYPT_ERR 0x00000080
+#define WL_RXS_OTHER_ERR 0x80000000
+
+#define WL_RXS_PHY_A 0x00000000
+#define WL_RXS_PHY_B 0x00000001
+#define WL_RXS_PHY_G 0x00000002
+#define WL_RXS_PHY_N 0x00000004
+
+#define WL_RXS_ENCODING_UNKNOWN 0x00000000
+#define WL_RXS_ENCODING_DSSS_CCK 0x00000001
+#define WL_RXS_ENCODING_OFDM 0x00000002
+#define WL_RXS_ENCODING_HT 0x00000003
+#define WL_RXS_ENCODING_VHT 0x00000004
+
+#define WL_RXS_UNUSED_STUB 0x0
+#define WL_RXS_PREAMBLE_SHORT 0x00000001
+#define WL_RXS_PREAMBLE_LONG 0x00000002
+#define WL_RXS_PREAMBLE_HT_MM 0x00000003
+#define WL_RXS_PREAMBLE_HT_GF 0x00000004
+
+#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
+
+#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_NFRM_AMPDU_FIRST 0x00000001
+#define WL_RXS_NFRM_AMPDU_SUB 0x00000002
+#define WL_RXS_NFRM_AMSDU_FIRST 0x00000004
+#define WL_RXS_NFRM_AMSDU_SUB 0x00000008
+#define WL_RXS_NFRM_AMPDU_NONE 0x00000100
+
+#define WL_TXS_TXF_FAIL 0x01
+#define WL_TXS_TXF_CTS 0x02
+#define WL_TXS_TXF_RTSCTS 0x04
+
+#define BPRESET_ENAB(pub) (0)
+
+#define AP_ENAB(pub) (0)
+
+#define APSTA_ENAB(pub) (0)
+
+#define PSTA_ENAB(pub) (0)
+
+#if defined(PKTC_DONGLE)
+#define PKTC_ENAB(pub) ((pub)->_pktc)
+#else
+#define PKTC_ENAB(pub) (0)
+#endif
+
+#if defined(WL_BEAMFORMING)
+ #if defined(WL_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
+ #define TXBF_ENAB(pub) ((pub)->_txbf)
+ #elif defined(WLTXBF_DISABLED)
+ #define TXBF_ENAB(pub) (0)
+ #else
+ #define TXBF_ENAB(pub) (1)
+ #endif
+#else
+ #define TXBF_ENAB(pub) (0)
+#endif
+
+#define STA_ONLY(pub) (!AP_ENAB(pub))
+#define AP_ONLY(pub) (AP_ENAB(pub) && !APSTA_ENAB(pub))
+
+ #define PROP_TXSTATUS_ENAB(pub) 0
+
+#define WLOFFLD_CAP(wlc) ((wlc)->ol != NULL)
+#define WLOFFLD_ENAB(pub) ((pub)->_ol)
+#define WLOFFLD_BCN_ENAB(pub) ((pub)->_ol & OL_BCN_ENAB)
+#define WLOFFLD_ARP_ENAB(pub) ((pub)->_ol & OL_ARP_ENAB)
+#define WLOFFLD_ND_ENAB(pub) ((pub)->_ol & OL_ND_ENAB)
+#define WLOFFLD_ARM_TX(pub) ((pub)->_ol & OL_ARM_TX_ENAB)
+
+#define WOWL_ENAB(pub) ((pub)->_wowl)
+#define WOWL_ACTIVE(pub) ((pub)->_wowl_active)
+
+ #define DPT_ENAB(pub) 0
+
+ #define TDLS_SUPPORT(pub) (0)
+ #define TDLS_ENAB(pub) (0)
+
+#define WLDLS_ENAB(pub) 0
+
+#ifdef WL_OKC
+ #if defined(WL_ENAB_RUNTIME_CHECK)
+#define OKC_ENAB(pub) ((pub)->_okc)
+ #elif defined(WL_OKC_DISABLED)
+ #define OKC_ENAB(pub) (0)
+#else
+ #define OKC_ENAB(pub) ((pub)->_okc)
+#endif
+#else
+ #define OKC_ENAB(pub) (0)
+#endif
+
+#define WLBSSLOAD_ENAB(pub) (0)
+
+ #define MCNX_ENAB(pub) 0
+
+ #define P2P_ENAB(pub) 0
+
+ #define MCHAN_ENAB(pub) (0)
+ #define MCHAN_ACTIVE(pub) (0)
+
+ #define MQUEUE_ENAB(pub) (0)
+
+ #define BTA_ENAB(pub) (0)
+
+#define PIO_ENAB(pub) 0
+
+#define CAC_ENAB(pub) ((pub)->_cac)
+
+#define COEX_ACTIVE(wlc) 0
+#define COEX_ENAB(pub) 0
+
+#define RXIQEST_ENAB(pub) (0)
+
+#define EDCF_ENAB(pub) (WME_ENAB(pub))
+#define QOS_ENAB(pub) (WME_ENAB(pub) || N_ENAB(pub))
+
+#define PRIOFC_ENAB(pub) ((pub)->_priofc)
+
+#define MONITOR_ENAB(wlc) ((wlc)->monitor != 0)
+
+#define PROMISC_ENAB(wlc_pub) (wlc_pub)->promisc
+
+#define WLC_SENDUP_MGMT_ENAB(cfg) 0
+
+ #define TOE_ENAB(pub) (0)
+
+ #define ARPOE_SUPPORT(pub) (0)
+ #define ARPOE_ENAB(pub) (0)
+#define ICMPOE_ENAB(pub) 0
+
+ #define NWOE_ENAB(pub) (0)
+
+#define TRAFFIC_MGMT_ENAB(pub) 0
+
+ #define L2_FILTER_ENAB(pub) (0)
+
+#define NET_DETECT_ENAB(pub) 0
+
+#ifdef PACKET_FILTER
+#define PKT_FILTER_ENAB(pub) ((pub)->_pkt_filter)
+#else
+#define PKT_FILTER_ENAB(pub) 0
+#endif
+
+#ifdef P2PO
+ #if defined(WL_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
+ #define P2PO_ENAB(pub) ((pub)->_p2po)
+ #elif defined(P2PO_DISABLED)
+ #define P2PO_ENAB(pub) (0)
+ #else
+ #define P2PO_ENAB(pub) (1)
+ #endif
+#else
+ #define P2PO_ENAB(pub) 0
+#endif
+
+#ifdef ANQPO
+ #if defined(WL_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
+ #define ANQPO_ENAB(pub) ((pub)->_anqpo)
+ #elif defined(ANQPO_DISABLED)
+ #define ANQPO_ENAB(pub) (0)
+ #else
+ #define ANQPO_ENAB(pub) (1)
+ #endif
+#else
+ #define ANQPO_ENAB(pub) 0
+#endif
+
+#define ASSOC_RECREATE_ENAB(pub) 0
+
+#define WLFBT_ENAB(pub) (0)
+
+#if 0 && (NDISVER >= 0x0620)
+#define WIN7_AND_UP_OS(pub) ((pub)->_ndis_cap)
+#else
+#define WIN7_AND_UP_OS(pub) 0
+#endif
+
+ #define NDOE_ENAB(pub) (0)
+
+ #define WLEXTSTA_ENAB(pub) 0
+
+ #define IBSS_PEER_GROUP_KEY_ENAB(pub) (0)
+
+ #define IBSS_PEER_DISCOVERY_EVENT_ENAB(pub) (0)
+
+ #define IBSS_PEER_MGMT_ENAB(pub) (0)
+
+ #if defined(WL_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
+ #define WLEIND_ENAB(pub) ((pub)->_wleind)
+ #elif defined(WLEIND_DISABLED)
+ #define WLEIND_ENAB(pub) (0)
+ #else
+ #define WLEIND_ENAB(pub) (1)
+ #endif
+
+ #define CCX_ENAB(pub) 0
+
+ #define BCMAUTH_PSK_ENAB(pub) 0
+
+ #if defined(WL_ENAB_RUNTIME_CHECK) || !defined(DONGLEBUILD)
+ #define SUP_ENAB(pub) ((pub)->_sup_enab)
+ #elif defined(BCMSUP_PSK_DISABLED)
+ #define SUP_ENAB(pub) (0)
+ #else
+ #define SUP_ENAB(pub) (1)
+ #endif
+
+#define WLC_PREC_BMP_ALL MAXBITVAL(WLC_PREC_COUNT)
+
+#define WLC_PREC_BMP_AC_BE (NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_BE)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_BE)) | \
+ NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_EE)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_EE)))
+#define WLC_PREC_BMP_AC_BK (NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_BK)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_BK)) | \
+ NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_NONE)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_NONE)))
+#define WLC_PREC_BMP_AC_VI (NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_CL)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_CL)) | \
+ NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_VI)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_VI)))
+#define WLC_PREC_BMP_AC_VO (NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_VO)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_VO)) | \
+ NBITVAL(WLC_PRIO_TO_PREC(PRIO_8021D_NC)) | \
+ NBITVAL(WLC_PRIO_TO_HI_PREC(PRIO_8021D_NC)))
+
+#define WME_ENAB(pub) ((pub)->_wme != OFF)
+#define WME_AUTO(wlc) ((wlc)->pub->_wme == AUTO)
+
+#ifdef WLCNTRY
+#define WLC_AUTOCOUNTRY_ENAB(wlc) ((wlc)->pub->_autocountry)
+#else
+#define WLC_AUTOCOUNTRY_ENAB(wlc) FALSE
+#endif
+
+#define WL11D_ENAB(wlc) ((wlc)->pub->_11d)
+
+#define WL11H_ENAB(wlc) ((wlc)->pub->_11h)
+
+#define WL11U_ENAB(wlc) FALSE
+
+#define WLPROBRESP_SW_ENAB(wlc) FALSE
+
+#define LPC_ENAB(wlc) (FALSE)
+
+#if defined(WLOLPC)
+#define OLPC_ENAB(wlc) ((wlc)->pub->_olpc)
+#else
+#define OLPC_ENAB(wlc) (FALSE)
+#endif
+
+#ifdef WL_RELMCAST
+ #if defined(WL_ENAB_RUNTIME_CHECK)
+ #define RMC_SUPPORT(pub) ((pub)->_relmcast_support)
+ #define RMC_ENAB(pub) ((pub)->_relmcast)
+ #elif defined(WL_RELMCAST_DISABLED)
+ #define RMC_SUPPORT(pub) (0)
+ #define RMC_ENAB(pub) (0)
+ #else
+ #define RMC_SUPPORT(pub) (1)
+ #define RMC_ENAB(pub) ((pub)->_relmcast)
+ #endif
+#else
+ #define RMC_SUPPORT(pub) (0)
+ #define RMC_ENAB(pub) (0)
+#endif
+
+#define WLC_USE_COREFLAGS 0xffffffff
+
+#define WLC_UPDATE_STATS(wlc) 1
+#define WLCNTINCR(a) ((a)++)
+#define WLCNTCONDINCR(c, a) do { if (c) (a)++; } while (0)
+#define WLCNTDECR(a) ((a)--)
+#define WLCNTADD(a,delta) ((a) += (delta))
+#define WLCNTSET(a,value) ((a) = (value))
+#define WLCNTVAL(a) (a)
+
+#if !defined(RXCHAIN_PWRSAVE) && !defined(RADIO_PWRSAVE)
+#define WLPWRSAVERXFADD(wlc, v)
+#define WLPWRSAVERXFINCR(wlc)
+#define WLPWRSAVETXFINCR(wlc)
+#define WLPWRSAVERXFVAL(wlc) 0
+#define WLPWRSAVETXFVAL(wlc) 0
+#endif
+
+struct wlc_dpc_info {
+ uint processed;
+};
+
+extern void *wlc_attach(void *wl, uint16 vendor, uint16 device, uint unit, bool piomode,
+ osl_t *osh, void *regsva, uint bustype, void *btparam, uint *perr);
+extern uint wlc_detach(struct wlc_info *wlc);
+extern int wlc_up(struct wlc_info *wlc);
+extern uint wlc_down(struct wlc_info *wlc);
+
+extern int wlc_set(struct wlc_info *wlc, int cmd, int arg);
+extern int wlc_get(struct wlc_info *wlc, int cmd, int *arg);
+extern int wlc_iovar_getint(struct wlc_info *wlc, const char *name, int *arg);
+extern int wlc_iovar_setint(struct wlc_info *wlc, const char *name, int arg);
+extern bool wlc_chipmatch(uint16 vendor, uint16 device);
+extern void wlc_init(struct wlc_info *wlc);
+extern void wlc_reset(struct wlc_info *wlc);
+#ifdef MCAST_REGEN
+extern int32 wlc_mcast_reverse_translation(struct ether_header *eh);
+#endif
+
+extern void wlc_intrson(struct wlc_info *wlc);
+extern uint32 wlc_intrsoff(struct wlc_info *wlc);
+extern void wlc_intrsrestore(struct wlc_info *wlc, uint32 macintmask);
+extern bool wlc_intrsupd(struct wlc_info *wlc);
+extern bool wlc_isr(struct wlc_info *wlc, bool *wantdpc);
+extern bool wlc_dpc(struct wlc_info *wlc, bool bounded, struct wlc_dpc_info *dpc);
+
+extern bool wlc_sendpkt(struct wlc_info *wlc, void *sdu, struct wlc_if *wlcif);
+extern bool wlc_send80211_specified(wlc_info_t *wlc, void *sdu, uint32 rspec, struct wlc_if *wlcif);
+extern bool wlc_send80211_raw(struct wlc_info *wlc, wlc_if_t *wlcif, void *p, uint ac);
+extern int wlc_iovar_op(struct wlc_info *wlc, const char *name, void *params, int p_len, void *arg,
+ int len, bool set, struct wlc_if *wlcif);
+extern int wlc_ioctl(struct wlc_info *wlc, int cmd, void *arg, int len, struct wlc_if *wlcif);
+
+extern void wlc_statsupd(struct wlc_info *wlc);
+
+extern wlc_pub_t *wlc_pub(void *wlc);
+
+extern void tcm_sem_enter(wlc_info_t *wlc);
+extern void tcm_sem_exit(wlc_info_t *wlc);
+extern void tcm_sem_cleanup(wlc_info_t *wlc);
+
+extern int wlc_module_register(wlc_pub_t *pub, const bcm_iovar_t *iovars,
+ const char *name, void *hdl, iovar_fn_t iovar_fn,
+ watchdog_fn_t watchdog_fn, up_fn_t up_fn, down_fn_t down_fn);
+extern int wlc_module_unregister(wlc_pub_t *pub, const char *name, void *hdl);
+extern int wlc_module_add_ioctl_fn(wlc_pub_t *pub, void *hdl,
+ wlc_ioctl_fn_t ioctl_fn,
+ int num_cmds, const wlc_ioctl_cmd_t *ioctls);
+extern int wlc_module_remove_ioctl_fn(wlc_pub_t *pub, void *hdl);
+
+#define WLC_RPCTX_PARAMS 32
+
+extern void wlc_wlcif_stats_get(wlc_info_t *wlc, wlc_if_t *wlcif, wlc_if_stats_t *wlcif_stats);
+extern wlc_if_t *wlc_wlcif_get_by_index(wlc_info_t *wlc, uint idx);
+
+#if defined(BCMDBG)
+
+#define WLC_PERF_STATS_ISR 0x01
+#define WLC_PERF_STATS_DPC 0x02
+#define WLC_PERF_STATS_TMR_DPC 0x04
+#define WLC_PERF_STATS_PRB_REQ 0x08
+#define WLC_PERF_STATS_PRB_RESP 0x10
+#define WLC_PERF_STATS_BCN_ISR 0x20
+#define WLC_PERF_STATS_BCNS 0x40
+
+void wlc_update_perf_stats(wlc_info_t *wlc, uint32 mask);
+void wlc_update_isr_stats(wlc_info_t *wlc, uint32 macintstatus);
+#endif
+
+#define WLC_REPLAY_CNTRS_VALUE WPA_CAP_4_REPLAY_CNTRS
+
+#if WLC_REPLAY_CNTRS_VALUE == WPA_CAP_16_REPLAY_CNTRS
+#define PRIO2IVIDX(prio) (prio)
+#elif WLC_REPLAY_CNTRS_VALUE == WPA_CAP_4_REPLAY_CNTRS
+#define PRIO2IVIDX(prio) WME_PRIO2AC(prio)
+#else
+#error "Neither WPA_CAP_4_REPLAY_CNTRS nor WPA_CAP_16_REPLAY_CNTRS is used"
+#endif
+
+#define GPIO_2_PA_CTRL_5G_0 0x4
+
+#ifdef WL_INTERRUPTSTATS
+typedef enum {
+ nMI_MACSSPNDD = 0,
+ nMI_BCNTPL,
+ nMI_TBTT,
+ nMI_BCNSUCCESS,
+ nMI_BCNCANCLD,
+ nMI_ATIMWINEND,
+ nMI_PMQ,
+ nMI_NSPECGEN_0,
+ nMI_NSPECGEN_1,
+ nMI_MACTXERR,
+ nMI_NSPECGEN_3,
+ nMI_PHYTXERR,
+ nMI_PME,
+ nMI_GP0,
+ nMI_GP1,
+ nMI_DMAINT,
+ nMI_TXSTOP,
+ nMI_CCA,
+ nMI_BG_NOISE,
+ nMI_DTIM_TBTT,
+ nMI_PRQ,
+ nMI_PWRUP,
+ nMI_BT_RFACT_STUCK,
+ nMI_BT_PRED_REQ,
+ nMI_NOTUSED,
+ nMI_P2P,
+ nMI_DMATX,
+ nMI_TSSI_LIMIT,
+ nMI_RFDISABLE,
+ nMI_TFS,
+ nMI_PHYCHANGED,
+ nMI_TO
+} intr_enum;
+
+#define WLCINC_INTRCNT(intr) (wlc->pub->intr_cnt[(intr)]++)
+#else
+#define WLCINC_INTRCNT(intr)
+#endif
+
+#if defined(CONFIG_WL) || defined(CONFIG_WL_MODULE)
+#define WL_RTR() TRUE
+#else
+#define WL_RTR() FALSE
+#endif
+
+#endif