brcmu_wifi.h 7.43 KB
Newer Older
1
// SPDX-License-Identifier: ISC
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
/*
 * Copyright (c) 2010 Broadcom Corporation
 */

#ifndef	_BRCMU_WIFI_H_
#define	_BRCMU_WIFI_H_

#include <linux/if_ether.h>		/* for ETH_ALEN */
#include <linux/ieee80211.h>		/* for WLAN_PMKID_LEN */

/*
 * A chanspec (u16) holds the channel number, band, bandwidth and control
 * sideband
 */

/* channel defines */
#define CH_UPPER_SB			0x01
#define CH_LOWER_SB			0x02
#define CH_EWA_VALID			0x04
21 22
#define CH_70MHZ_APART			14
#define CH_50MHZ_APART			10
23
#define CH_30MHZ_APART			6
24 25 26
#define CH_20MHZ_APART			4
#define CH_10MHZ_APART			2
#define CH_5MHZ_APART			1 /* 2G band channels are 5 Mhz apart */
27
#define CH_MIN_2G_CHANNEL		1
28
#define CH_MAX_2G_CHANNEL		14	/* Max channel in 2G band */
29
#define CH_MIN_5G_CHANNEL		34
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55

/* bandstate array indices */
#define BAND_2G_INDEX		0	/* wlc->bandstate[x] index */
#define BAND_5G_INDEX		1	/* wlc->bandstate[x] index */

/*
 * max # supported channels. The max channel no is 216, this is that + 1
 * rounded up to a multiple of NBBY (8). DO NOT MAKE it > 255: channels are
 * u8's all over
*/
#define	MAXCHANNEL		224

#define WL_CHANSPEC_CHAN_MASK		0x00ff
#define WL_CHANSPEC_CHAN_SHIFT		0

#define WL_CHANSPEC_CTL_SB_MASK		0x0300
#define WL_CHANSPEC_CTL_SB_SHIFT	     8
#define WL_CHANSPEC_CTL_SB_LOWER	0x0100
#define WL_CHANSPEC_CTL_SB_UPPER	0x0200
#define WL_CHANSPEC_CTL_SB_NONE		0x0300

#define WL_CHANSPEC_BW_MASK		0x0C00
#define WL_CHANSPEC_BW_SHIFT		    10
#define WL_CHANSPEC_BW_10		0x0400
#define WL_CHANSPEC_BW_20		0x0800
#define WL_CHANSPEC_BW_40		0x0C00
56
#define WL_CHANSPEC_BW_80		0x2000
57 58 59 60 61 62 63

#define WL_CHANSPEC_BAND_MASK		0xf000
#define WL_CHANSPEC_BAND_SHIFT		12
#define WL_CHANSPEC_BAND_5G		0x1000
#define WL_CHANSPEC_BAND_2G		0x2000
#define INVCHANSPEC			255

64 65 66 67 68 69 70 71 72 73 74 75 76
#define WL_CHAN_VALID_HW		(1 << 0) /* valid with current HW */
#define WL_CHAN_VALID_SW		(1 << 1) /* valid with country sett. */
#define WL_CHAN_BAND_5G			(1 << 2) /* 5GHz-band channel */
#define WL_CHAN_RADAR			(1 << 3) /* radar sensitive  channel */
#define WL_CHAN_INACTIVE		(1 << 4) /* inactive due to radar */
#define WL_CHAN_PASSIVE			(1 << 5) /* channel in passive mode */
#define WL_CHAN_RESTRICTED		(1 << 6) /* restricted use channel */

/* values for band specific 40MHz capabilities  */
#define WLC_N_BW_20ALL			0
#define WLC_N_BW_40ALL			1
#define WLC_N_BW_20IN2G_40IN5G		2

77 78 79 80 81 82 83 84 85 86 87 88 89 90
#define WLC_BW_20MHZ_BIT		BIT(0)
#define WLC_BW_40MHZ_BIT		BIT(1)
#define WLC_BW_80MHZ_BIT		BIT(2)
#define WLC_BW_160MHZ_BIT		BIT(3)

/* Bandwidth capabilities */
#define WLC_BW_CAP_20MHZ		(WLC_BW_20MHZ_BIT)
#define WLC_BW_CAP_40MHZ		(WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT)
#define WLC_BW_CAP_80MHZ		(WLC_BW_80MHZ_BIT|WLC_BW_40MHZ_BIT| \
					 WLC_BW_20MHZ_BIT)
#define WLC_BW_CAP_160MHZ		(WLC_BW_160MHZ_BIT|WLC_BW_80MHZ_BIT| \
					 WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT)
#define WLC_BW_CAP_UNRESTRICTED		0xFF

91 92 93 94 95 96
/* band types */
#define	WLC_BAND_AUTO			0	/* auto-select */
#define	WLC_BAND_5G			1	/* 5 Ghz */
#define	WLC_BAND_2G			2	/* 2.4 Ghz */
#define	WLC_BAND_ALL			3	/* all bands */

97 98 99 100 101 102 103 104 105 106 107 108 109 110
#define CHSPEC_CHANNEL(chspec)	((u8)((chspec) & WL_CHANSPEC_CHAN_MASK))
#define CHSPEC_BAND(chspec)	((chspec) & WL_CHANSPEC_BAND_MASK)

#define CHSPEC_CTL_SB(chspec)	((chspec) & WL_CHANSPEC_CTL_SB_MASK)
#define CHSPEC_BW(chspec)	((chspec) & WL_CHANSPEC_BW_MASK)

#define CHSPEC_IS10(chspec) \
	(((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_10)

#define CHSPEC_IS20(chspec) \
	(((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_20)

#define CHSPEC_IS40(chspec) \
	(((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40)
111 112 113

#define CHSPEC_IS80(chspec) \
	(((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_80)
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211

#define CHSPEC_IS5G(chspec) \
	(((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_5G)

#define CHSPEC_IS2G(chspec) \
	(((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_2G)

#define CHSPEC_SB_NONE(chspec) \
	(((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_NONE)

#define CHSPEC_SB_UPPER(chspec) \
	(((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_UPPER)

#define CHSPEC_SB_LOWER(chspec) \
	(((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_LOWER)

#define CHSPEC_CTL_CHAN(chspec) \
	((CHSPEC_SB_LOWER(chspec)) ? \
	(lower_20_sb(((chspec) & WL_CHANSPEC_CHAN_MASK))) : \
	(upper_20_sb(((chspec) & WL_CHANSPEC_CHAN_MASK))))

#define CHSPEC2BAND(chspec) (CHSPEC_IS5G(chspec) ? BRCM_BAND_5G : BRCM_BAND_2G)

#define CHANSPEC_STR_LEN    8

static inline int lower_20_sb(int channel)
{
	return channel > CH_10MHZ_APART ? (channel - CH_10MHZ_APART) : 0;
}

static inline int upper_20_sb(int channel)
{
	return (channel < (MAXCHANNEL - CH_10MHZ_APART)) ?
	       channel + CH_10MHZ_APART : 0;
}

static inline int chspec_bandunit(u16 chspec)
{
	return CHSPEC_IS5G(chspec) ? BAND_5G_INDEX : BAND_2G_INDEX;
}

static inline u16 ch20mhz_chspec(int channel)
{
	u16 rc = channel <= CH_MAX_2G_CHANNEL ?
		 WL_CHANSPEC_BAND_2G : WL_CHANSPEC_BAND_5G;

	return	(u16)((u16)channel | WL_CHANSPEC_BW_20 |
		      WL_CHANSPEC_CTL_SB_NONE | rc);
}

static inline int next_20mhz_chan(int channel)
{
	return channel < (MAXCHANNEL - CH_20MHZ_APART) ?
	       channel + CH_20MHZ_APART : 0;
}

/* defined rate in 500kbps */
#define BRCM_MAXRATE	108	/* in 500kbps units */
#define BRCM_RATE_1M	2	/* in 500kbps units */
#define BRCM_RATE_2M	4	/* in 500kbps units */
#define BRCM_RATE_5M5	11	/* in 500kbps units */
#define BRCM_RATE_11M	22	/* in 500kbps units */
#define BRCM_RATE_6M	12	/* in 500kbps units */
#define BRCM_RATE_9M	18	/* in 500kbps units */
#define BRCM_RATE_12M	24	/* in 500kbps units */
#define BRCM_RATE_18M	36	/* in 500kbps units */
#define BRCM_RATE_24M	48	/* in 500kbps units */
#define BRCM_RATE_36M	72	/* in 500kbps units */
#define BRCM_RATE_48M	96	/* in 500kbps units */
#define BRCM_RATE_54M	108	/* in 500kbps units */

#define BRCM_2G_25MHZ_OFFSET		5	/* 2.4GHz band channel offset */

#define MCSSET_LEN	16

static inline bool ac_bitmap_tst(u8 bitmap, int prec)
{
	return (bitmap & (1 << (prec))) != 0;
}

/* Enumerate crypto algorithms */
#define	CRYPTO_ALGO_OFF			0
#define	CRYPTO_ALGO_WEP1		1
#define	CRYPTO_ALGO_TKIP		2
#define	CRYPTO_ALGO_WEP128		3
#define CRYPTO_ALGO_AES_CCM		4
#define CRYPTO_ALGO_AES_RESERVED1	5
#define CRYPTO_ALGO_AES_RESERVED2	6
#define CRYPTO_ALGO_NALG		7

/* wireless security bitvec */

#define WEP_ENABLED		0x0001
#define TKIP_ENABLED		0x0002
#define AES_ENABLED		0x0004
#define WSEC_SWFLAG		0x0008
/* to go into transition mode without setting wep */
#define SES_OW_ENABLED		0x0040
212 213 214
/* MFP */
#define MFP_CAPABLE		0x0200
#define MFP_REQUIRED		0x0400
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229

/* WPA authentication mode bitvec */
#define WPA_AUTH_DISABLED	0x0000	/* Legacy (i.e., non-WPA) */
#define WPA_AUTH_NONE		0x0001	/* none (IBSS) */
#define WPA_AUTH_UNSPECIFIED	0x0002	/* over 802.1x */
#define WPA_AUTH_PSK		0x0004	/* Pre-shared key */
#define WPA_AUTH_RESERVED1	0x0008
#define WPA_AUTH_RESERVED2	0x0010

#define WPA2_AUTH_RESERVED1	0x0020
#define WPA2_AUTH_UNSPECIFIED	0x0040	/* over 802.1x */
#define WPA2_AUTH_PSK		0x0080	/* Pre-shared key */
#define WPA2_AUTH_RESERVED3	0x0200
#define WPA2_AUTH_RESERVED4	0x0400
#define WPA2_AUTH_RESERVED5	0x0800
230
#define WPA2_AUTH_1X_SHA256	0x1000  /* 1X with SHA256 key derivation */
231
#define WPA2_AUTH_FT		0x4000	/* Fast BSS Transition */
232
#define WPA2_AUTH_PSK_SHA256	0x8000	/* PSK with SHA256 key derivation */
233 234 235 236 237 238 239 240 241 242 243 244 245

#define DOT11_DEFAULT_RTS_LEN		2347
#define DOT11_DEFAULT_FRAG_LEN		2346

#define DOT11_ICV_AES_LEN		8
#define DOT11_QOS_LEN			2
#define DOT11_IV_MAX_LEN		8
#define DOT11_A4_HDR_LEN		30

#define HT_CAP_RX_STBC_NO		0x0
#define HT_CAP_RX_STBC_ONE_STREAM	0x1

#endif				/* _BRCMU_WIFI_H_ */