Commit | Line | Data |
---|---|---|
7e5677de | 1 | // SPDX-License-Identifier: ISC |
5b435de0 AS |
2 | /* |
3 | * Copyright (c) 2010 Broadcom Corporation | |
5b435de0 AS |
4 | */ |
5 | ||
6 | #ifndef _BRCMU_WIFI_H_ | |
7 | #define _BRCMU_WIFI_H_ | |
8 | ||
9 | #include <linux/if_ether.h> /* for ETH_ALEN */ | |
10 | #include <linux/ieee80211.h> /* for WLAN_PMKID_LEN */ | |
11 | ||
12 | /* | |
13 | * A chanspec (u16) holds the channel number, band, bandwidth and control | |
14 | * sideband | |
15 | */ | |
16 | ||
17 | /* channel defines */ | |
18 | #define CH_UPPER_SB 0x01 | |
19 | #define CH_LOWER_SB 0x02 | |
20 | #define CH_EWA_VALID 0x04 | |
330994e8 AS |
21 | #define CH_70MHZ_APART 14 |
22 | #define CH_50MHZ_APART 10 | |
4439cbcd | 23 | #define CH_30MHZ_APART 6 |
5b435de0 AS |
24 | #define CH_20MHZ_APART 4 |
25 | #define CH_10MHZ_APART 2 | |
26 | #define CH_5MHZ_APART 1 /* 2G band channels are 5 Mhz apart */ | |
d48200ba | 27 | #define CH_MIN_2G_CHANNEL 1 |
5b435de0 | 28 | #define CH_MAX_2G_CHANNEL 14 /* Max channel in 2G band */ |
d48200ba | 29 | #define CH_MIN_5G_CHANNEL 34 |
5b435de0 AS |
30 | |
31 | /* bandstate array indices */ | |
32 | #define BAND_2G_INDEX 0 /* wlc->bandstate[x] index */ | |
33 | #define BAND_5G_INDEX 1 /* wlc->bandstate[x] index */ | |
34 | ||
35 | /* | |
36 | * max # supported channels. The max channel no is 216, this is that + 1 | |
37 | * rounded up to a multiple of NBBY (8). DO NOT MAKE it > 255: channels are | |
38 | * u8's all over | |
39 | */ | |
40 | #define MAXCHANNEL 224 | |
41 | ||
42 | #define WL_CHANSPEC_CHAN_MASK 0x00ff | |
43 | #define WL_CHANSPEC_CHAN_SHIFT 0 | |
44 | ||
45 | #define WL_CHANSPEC_CTL_SB_MASK 0x0300 | |
46 | #define WL_CHANSPEC_CTL_SB_SHIFT 8 | |
47 | #define WL_CHANSPEC_CTL_SB_LOWER 0x0100 | |
48 | #define WL_CHANSPEC_CTL_SB_UPPER 0x0200 | |
49 | #define WL_CHANSPEC_CTL_SB_NONE 0x0300 | |
50 | ||
51 | #define WL_CHANSPEC_BW_MASK 0x0C00 | |
52 | #define WL_CHANSPEC_BW_SHIFT 10 | |
53 | #define WL_CHANSPEC_BW_10 0x0400 | |
54 | #define WL_CHANSPEC_BW_20 0x0800 | |
55 | #define WL_CHANSPEC_BW_40 0x0C00 | |
d48200ba | 56 | #define WL_CHANSPEC_BW_80 0x2000 |
5b435de0 AS |
57 | |
58 | #define WL_CHANSPEC_BAND_MASK 0xf000 | |
59 | #define WL_CHANSPEC_BAND_SHIFT 12 | |
60 | #define WL_CHANSPEC_BAND_5G 0x1000 | |
61 | #define WL_CHANSPEC_BAND_2G 0x2000 | |
62 | #define INVCHANSPEC 255 | |
63 | ||
d48200ba HM |
64 | #define WL_CHAN_VALID_HW (1 << 0) /* valid with current HW */ |
65 | #define WL_CHAN_VALID_SW (1 << 1) /* valid with country sett. */ | |
66 | #define WL_CHAN_BAND_5G (1 << 2) /* 5GHz-band channel */ | |
67 | #define WL_CHAN_RADAR (1 << 3) /* radar sensitive channel */ | |
68 | #define WL_CHAN_INACTIVE (1 << 4) /* inactive due to radar */ | |
69 | #define WL_CHAN_PASSIVE (1 << 5) /* channel in passive mode */ | |
70 | #define WL_CHAN_RESTRICTED (1 << 6) /* restricted use channel */ | |
71 | ||
72 | /* values for band specific 40MHz capabilities */ | |
73 | #define WLC_N_BW_20ALL 0 | |
74 | #define WLC_N_BW_40ALL 1 | |
75 | #define WLC_N_BW_20IN2G_40IN5G 2 | |
76 | ||
2375d970 AS |
77 | #define WLC_BW_20MHZ_BIT BIT(0) |
78 | #define WLC_BW_40MHZ_BIT BIT(1) | |
79 | #define WLC_BW_80MHZ_BIT BIT(2) | |
80 | #define WLC_BW_160MHZ_BIT BIT(3) | |
81 | ||
82 | /* Bandwidth capabilities */ | |
83 | #define WLC_BW_CAP_20MHZ (WLC_BW_20MHZ_BIT) | |
84 | #define WLC_BW_CAP_40MHZ (WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT) | |
85 | #define WLC_BW_CAP_80MHZ (WLC_BW_80MHZ_BIT|WLC_BW_40MHZ_BIT| \ | |
86 | WLC_BW_20MHZ_BIT) | |
87 | #define WLC_BW_CAP_160MHZ (WLC_BW_160MHZ_BIT|WLC_BW_80MHZ_BIT| \ | |
88 | WLC_BW_40MHZ_BIT|WLC_BW_20MHZ_BIT) | |
89 | #define WLC_BW_CAP_UNRESTRICTED 0xFF | |
90 | ||
d48200ba HM |
91 | /* band types */ |
92 | #define WLC_BAND_AUTO 0 /* auto-select */ | |
93 | #define WLC_BAND_5G 1 /* 5 Ghz */ | |
94 | #define WLC_BAND_2G 2 /* 2.4 Ghz */ | |
95 | #define WLC_BAND_ALL 3 /* all bands */ | |
96 | ||
5b435de0 AS |
97 | #define CHSPEC_CHANNEL(chspec) ((u8)((chspec) & WL_CHANSPEC_CHAN_MASK)) |
98 | #define CHSPEC_BAND(chspec) ((chspec) & WL_CHANSPEC_BAND_MASK) | |
99 | ||
100 | #define CHSPEC_CTL_SB(chspec) ((chspec) & WL_CHANSPEC_CTL_SB_MASK) | |
101 | #define CHSPEC_BW(chspec) ((chspec) & WL_CHANSPEC_BW_MASK) | |
102 | ||
103 | #define CHSPEC_IS10(chspec) \ | |
104 | (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_10) | |
105 | ||
106 | #define CHSPEC_IS20(chspec) \ | |
107 | (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_20) | |
108 | ||
5b435de0 AS |
109 | #define CHSPEC_IS40(chspec) \ |
110 | (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_40) | |
d48200ba HM |
111 | |
112 | #define CHSPEC_IS80(chspec) \ | |
113 | (((chspec) & WL_CHANSPEC_BW_MASK) == WL_CHANSPEC_BW_80) | |
5b435de0 AS |
114 | |
115 | #define CHSPEC_IS5G(chspec) \ | |
116 | (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_5G) | |
117 | ||
118 | #define CHSPEC_IS2G(chspec) \ | |
119 | (((chspec) & WL_CHANSPEC_BAND_MASK) == WL_CHANSPEC_BAND_2G) | |
120 | ||
121 | #define CHSPEC_SB_NONE(chspec) \ | |
122 | (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_NONE) | |
123 | ||
124 | #define CHSPEC_SB_UPPER(chspec) \ | |
125 | (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_UPPER) | |
126 | ||
127 | #define CHSPEC_SB_LOWER(chspec) \ | |
128 | (((chspec) & WL_CHANSPEC_CTL_SB_MASK) == WL_CHANSPEC_CTL_SB_LOWER) | |
129 | ||
130 | #define CHSPEC_CTL_CHAN(chspec) \ | |
131 | ((CHSPEC_SB_LOWER(chspec)) ? \ | |
132 | (lower_20_sb(((chspec) & WL_CHANSPEC_CHAN_MASK))) : \ | |
133 | (upper_20_sb(((chspec) & WL_CHANSPEC_CHAN_MASK)))) | |
134 | ||
135 | #define CHSPEC2BAND(chspec) (CHSPEC_IS5G(chspec) ? BRCM_BAND_5G : BRCM_BAND_2G) | |
136 | ||
137 | #define CHANSPEC_STR_LEN 8 | |
138 | ||
139 | static inline int lower_20_sb(int channel) | |
140 | { | |
141 | return channel > CH_10MHZ_APART ? (channel - CH_10MHZ_APART) : 0; | |
142 | } | |
143 | ||
144 | static inline int upper_20_sb(int channel) | |
145 | { | |
146 | return (channel < (MAXCHANNEL - CH_10MHZ_APART)) ? | |
147 | channel + CH_10MHZ_APART : 0; | |
148 | } | |
149 | ||
150 | static inline int chspec_bandunit(u16 chspec) | |
151 | { | |
152 | return CHSPEC_IS5G(chspec) ? BAND_5G_INDEX : BAND_2G_INDEX; | |
153 | } | |
154 | ||
155 | static inline u16 ch20mhz_chspec(int channel) | |
156 | { | |
157 | u16 rc = channel <= CH_MAX_2G_CHANNEL ? | |
158 | WL_CHANSPEC_BAND_2G : WL_CHANSPEC_BAND_5G; | |
159 | ||
160 | return (u16)((u16)channel | WL_CHANSPEC_BW_20 | | |
161 | WL_CHANSPEC_CTL_SB_NONE | rc); | |
162 | } | |
163 | ||
164 | static inline int next_20mhz_chan(int channel) | |
165 | { | |
166 | return channel < (MAXCHANNEL - CH_20MHZ_APART) ? | |
167 | channel + CH_20MHZ_APART : 0; | |
168 | } | |
169 | ||
170 | /* defined rate in 500kbps */ | |
171 | #define BRCM_MAXRATE 108 /* in 500kbps units */ | |
172 | #define BRCM_RATE_1M 2 /* in 500kbps units */ | |
173 | #define BRCM_RATE_2M 4 /* in 500kbps units */ | |
174 | #define BRCM_RATE_5M5 11 /* in 500kbps units */ | |
175 | #define BRCM_RATE_11M 22 /* in 500kbps units */ | |
176 | #define BRCM_RATE_6M 12 /* in 500kbps units */ | |
177 | #define BRCM_RATE_9M 18 /* in 500kbps units */ | |
178 | #define BRCM_RATE_12M 24 /* in 500kbps units */ | |
179 | #define BRCM_RATE_18M 36 /* in 500kbps units */ | |
180 | #define BRCM_RATE_24M 48 /* in 500kbps units */ | |
181 | #define BRCM_RATE_36M 72 /* in 500kbps units */ | |
182 | #define BRCM_RATE_48M 96 /* in 500kbps units */ | |
183 | #define BRCM_RATE_54M 108 /* in 500kbps units */ | |
184 | ||
185 | #define BRCM_2G_25MHZ_OFFSET 5 /* 2.4GHz band channel offset */ | |
186 | ||
187 | #define MCSSET_LEN 16 | |
188 | ||
189 | static inline bool ac_bitmap_tst(u8 bitmap, int prec) | |
190 | { | |
191 | return (bitmap & (1 << (prec))) != 0; | |
192 | } | |
193 | ||
5b435de0 AS |
194 | /* Enumerate crypto algorithms */ |
195 | #define CRYPTO_ALGO_OFF 0 | |
196 | #define CRYPTO_ALGO_WEP1 1 | |
197 | #define CRYPTO_ALGO_TKIP 2 | |
198 | #define CRYPTO_ALGO_WEP128 3 | |
199 | #define CRYPTO_ALGO_AES_CCM 4 | |
200 | #define CRYPTO_ALGO_AES_RESERVED1 5 | |
201 | #define CRYPTO_ALGO_AES_RESERVED2 6 | |
202 | #define CRYPTO_ALGO_NALG 7 | |
203 | ||
204 | /* wireless security bitvec */ | |
205 | ||
206 | #define WEP_ENABLED 0x0001 | |
207 | #define TKIP_ENABLED 0x0002 | |
208 | #define AES_ENABLED 0x0004 | |
209 | #define WSEC_SWFLAG 0x0008 | |
210 | /* to go into transition mode without setting wep */ | |
211 | #define SES_OW_ENABLED 0x0040 | |
87b7e9e2 DK |
212 | /* MFP */ |
213 | #define MFP_CAPABLE 0x0200 | |
214 | #define MFP_REQUIRED 0x0400 | |
5b435de0 AS |
215 | |
216 | /* WPA authentication mode bitvec */ | |
217 | #define WPA_AUTH_DISABLED 0x0000 /* Legacy (i.e., non-WPA) */ | |
218 | #define WPA_AUTH_NONE 0x0001 /* none (IBSS) */ | |
219 | #define WPA_AUTH_UNSPECIFIED 0x0002 /* over 802.1x */ | |
220 | #define WPA_AUTH_PSK 0x0004 /* Pre-shared key */ | |
221 | #define WPA_AUTH_RESERVED1 0x0008 | |
222 | #define WPA_AUTH_RESERVED2 0x0010 | |
223 | ||
224 | #define WPA2_AUTH_RESERVED1 0x0020 | |
225 | #define WPA2_AUTH_UNSPECIFIED 0x0040 /* over 802.1x */ | |
226 | #define WPA2_AUTH_PSK 0x0080 /* Pre-shared key */ | |
227 | #define WPA2_AUTH_RESERVED3 0x0200 | |
228 | #define WPA2_AUTH_RESERVED4 0x0400 | |
229 | #define WPA2_AUTH_RESERVED5 0x0800 | |
240d61a9 | 230 | #define WPA2_AUTH_1X_SHA256 0x1000 /* 1X with SHA256 key derivation */ |
4ad298da | 231 | #define WPA2_AUTH_FT 0x4000 /* Fast BSS Transition */ |
240d61a9 | 232 | #define WPA2_AUTH_PSK_SHA256 0x8000 /* PSK with SHA256 key derivation */ |
5b435de0 | 233 | |
3b1e0a7b CHH |
234 | #define WPA3_AUTH_SAE_PSK 0x40000 /* SAE with 4-way handshake */ |
235 | ||
5b435de0 AS |
236 | #define DOT11_DEFAULT_RTS_LEN 2347 |
237 | #define DOT11_DEFAULT_FRAG_LEN 2346 | |
238 | ||
239 | #define DOT11_ICV_AES_LEN 8 | |
240 | #define DOT11_QOS_LEN 2 | |
241 | #define DOT11_IV_MAX_LEN 8 | |
242 | #define DOT11_A4_HDR_LEN 30 | |
243 | ||
244 | #define HT_CAP_RX_STBC_NO 0x0 | |
245 | #define HT_CAP_RX_STBC_ONE_STREAM 0x1 | |
246 | ||
5b435de0 | 247 | #endif /* _BRCMU_WIFI_H_ */ |