bwfmreg.h revision 1.2 1 1.2 jmcneill /* $NetBSD: bwfmreg.h,v 1.2 2017/10/20 23:38:56 jmcneill Exp $ */
2 1.1 jmcneill /* $OpenBSD: bwfmreg.h,v 1.4 2017/10/16 22:27:16 patrick Exp $ */
3 1.1 jmcneill /*
4 1.1 jmcneill * Copyright (c) 2010-2016 Broadcom Corporation
5 1.1 jmcneill * Copyright (c) 2016,2017 Patrick Wildt <patrick (at) blueri.se>
6 1.1 jmcneill *
7 1.1 jmcneill * Permission to use, copy, modify, and/or distribute this software for any
8 1.1 jmcneill * purpose with or without fee is hereby granted, provided that the above
9 1.1 jmcneill * copyright notice and this permission notice appear in all copies.
10 1.1 jmcneill *
11 1.1 jmcneill * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.1 jmcneill * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1 jmcneill * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.1 jmcneill * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1 jmcneill * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1 jmcneill * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.1 jmcneill * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1 jmcneill */
19 1.1 jmcneill
20 1.1 jmcneill /* SDIO registers */
21 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRLOW 0x1000A
22 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRMID 0x1000B
23 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRHIGH 0x1000C
24 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR 0x1000E
25 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ALP 0x01
26 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HT 0x02
27 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ILP 0x04
28 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL_REQ 0x08
29 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL_REQ 0x10
30 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HW_CLKREQ_OFF 0x20
31 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL 0x40
32 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL 0x80
33 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_CSR_MASK 0x1F
34 1.1 jmcneill #define BWFM_SDIO_FUNC1_SDIOPULLUP 0x1000F
35 1.1 jmcneill
36 1.1 jmcneill #define BWFM_SDIO_SB_OFT_ADDR_MASK 0x07FFF
37 1.1 jmcneill #define BWFM_SDIO_SB_ACCESS_2_4B_FLAG 0x08000
38 1.1 jmcneill
39 1.1 jmcneill /* Chip registers */
40 1.1 jmcneill #define BWFM_CHIP_BASE 0x18000000
41 1.1 jmcneill #define BWFM_CHIP_REG_CHIPID 0x00000000
42 1.1 jmcneill #define BWFM_CHIP_CHIPID_ID(x) (((x) >> 0) & 0xffff)
43 1.1 jmcneill #define BWFM_CHIP_CHIPID_REV(x) (((x) >> 16) & 0xf)
44 1.1 jmcneill #define BWFM_CHIP_CHIPID_PKG(x) (((x) >> 20) & 0xf)
45 1.1 jmcneill #define BWFM_CHIP_CHIPID_CC(x) (((x) >> 24) & 0xf)
46 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE(x) (((x) >> 28) & 0xf)
47 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE_SOCI_SB 0
48 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE_SOCI_AI 1
49 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES 0x00000004
50 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_PMU 0x10000000
51 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_EXT 0x000000AC
52 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_EXT_AOB_PRESENT 0x00000040
53 1.1 jmcneill #define BWFM_CHIP_REG_EROMPTR 0x000000FC
54 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL 0x00000600
55 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_MASK 0x00006000
56 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_SHIFT 13
57 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_RELOAD 0x2
58 1.1 jmcneill #define BWFM_CHIP_REG_PMUCAPABILITIES 0x00000604
59 1.1 jmcneill #define BWFM_CHIP_REG_PMUCAPABILITIES_REV_MASK 0x000000ff
60 1.1 jmcneill
61 1.1 jmcneill /* Agent registers */
62 1.1 jmcneill #define BWFM_AGENT_IOCTL 0x0408
63 1.1 jmcneill #define BWFM_AGENT_IOCTL_CLK 0x0001
64 1.1 jmcneill #define BWFM_AGENT_IOCTL_FGC 0x0002
65 1.1 jmcneill #define BWFM_AGENT_IOCTL_CORE_BITS 0x3FFC
66 1.1 jmcneill #define BWFM_AGENT_IOCTL_PME_EN 0x4000
67 1.1 jmcneill #define BWFM_AGENT_IOCTL_BIST_EN 0x8000
68 1.1 jmcneill #define BWFM_AGENT_RESET_CTL 0x0800
69 1.1 jmcneill #define BWFM_AGENT_RESET_CTL_RESET 0x0001
70 1.1 jmcneill
71 1.1 jmcneill /* Agent Core-IDs */
72 1.1 jmcneill #define BWFM_AGENT_CORE_CHIPCOMMON 0x800
73 1.1 jmcneill #define BWFM_AGENT_INTERNAL_MEM 0x80E
74 1.1 jmcneill #define BWFM_AGENT_CORE_80211 0x812
75 1.1 jmcneill #define BWFM_AGENT_CORE_PMU 0x827
76 1.1 jmcneill #define BWFM_AGENT_CORE_SDIO_DEV 0x829
77 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CM3 0x82A
78 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CR4 0x83E
79 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CA7 0x847
80 1.1 jmcneill
81 1.1 jmcneill /* Specific Core Bits */
82 1.1 jmcneill #define BWFM_AGENT_ARMCR4_IOCTL_CPUHALT 0x0020
83 1.1 jmcneill #define BWFM_AGENT_D11_IOCTL_PHYCLOCKEN 0x0004
84 1.1 jmcneill #define BWFM_AGENT_D11_IOCTL_PHYRESET 0x0008
85 1.1 jmcneill
86 1.1 jmcneill /* SOCRAM registers */
87 1.1 jmcneill #define BWFM_SOCRAM_BANKIDX 0x0010
88 1.1 jmcneill #define BWFM_SOCRAM_BANKPDA 0x0044
89 1.1 jmcneill
90 1.1 jmcneill /* SDPCMD registers */
91 1.1 jmcneill #define BWFM_SDPCMD_INTSTATUS 0x0020
92 1.1 jmcneill
93 1.1 jmcneill /* DMP descriptor */
94 1.1 jmcneill #define BWFM_DMP_DESC_MASK 0x0000000F
95 1.1 jmcneill #define BWFM_DMP_DESC_EMPTY 0x00000000
96 1.1 jmcneill #define BWFM_DMP_DESC_VALID 0x00000001
97 1.1 jmcneill #define BWFM_DMP_DESC_COMPONENT 0x00000001
98 1.1 jmcneill #define BWFM_DMP_DESC_MASTER_PORT 0x00000003
99 1.1 jmcneill #define BWFM_DMP_DESC_ADDRESS 0x00000005
100 1.1 jmcneill #define BWFM_DMP_DESC_ADDRSIZE_GT32 0x00000008
101 1.1 jmcneill #define BWFM_DMP_DESC_EOT 0x0000000F
102 1.1 jmcneill #define BWFM_DMP_COMP_DESIGNER 0xFFF00000
103 1.1 jmcneill #define BWFM_DMP_COMP_DESIGNER_S 20
104 1.1 jmcneill #define BWFM_DMP_COMP_PARTNUM 0x000FFF00
105 1.1 jmcneill #define BWFM_DMP_COMP_PARTNUM_S 8
106 1.1 jmcneill #define BWFM_DMP_COMP_CLASS 0x000000F0
107 1.1 jmcneill #define BWFM_DMP_COMP_CLASS_S 4
108 1.1 jmcneill #define BWFM_DMP_COMP_REVISION 0xFF000000
109 1.1 jmcneill #define BWFM_DMP_COMP_REVISION_S 24
110 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SWRAP 0x00F80000
111 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SWRAP_S 19
112 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MWRAP 0x0007C000
113 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MWRAP_S 14
114 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SPORT 0x00003E00
115 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SPORT_S 9
116 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MPORT 0x000001F0
117 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MPORT_S 4
118 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_UID 0x0000FF00
119 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_UID_S 8
120 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_NUM 0x000000F0
121 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_NUM_S 4
122 1.1 jmcneill #define BWFM_DMP_SLAVE_ADDR_BASE 0xFFFFF000
123 1.1 jmcneill #define BWFM_DMP_SLAVE_ADDR_BASE_S 12
124 1.1 jmcneill #define BWFM_DMP_SLAVE_PORT_NUM 0x00000F00
125 1.1 jmcneill #define BWFM_DMP_SLAVE_PORT_NUM_S 8
126 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE 0x000000C0
127 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_S 6
128 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_SLAVE 0
129 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_BRIDGE 1
130 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_SWRAP 2
131 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_MWRAP 3
132 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_TYPE 0x00000030
133 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_TYPE_S 4
134 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_4K 0
135 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_8K 1
136 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_16K 2
137 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_DESC 3
138 1.1 jmcneill
139 1.1 jmcneill /* Security Parameters */
140 1.1 jmcneill #define BWFM_AUTH_OPEN 0
141 1.1 jmcneill #define BWFM_AUTH_SHARED_KEY 1
142 1.1 jmcneill #define BWFM_AUTH_AUTO 2
143 1.1 jmcneill #define BWFM_MFP_NONE 0
144 1.1 jmcneill #define BWFM_MFP_CAPABLE 1
145 1.1 jmcneill #define BWFM_MFP_REQUIRED 2
146 1.1 jmcneill #define BWFM_WPA_AUTH_DISABLED (0 << 0)
147 1.1 jmcneill #define BWFM_WPA_AUTH_NONE (1 << 0)
148 1.1 jmcneill #define BWFM_WPA_AUTH_WPA_UNSPECIFIED (1 << 1)
149 1.1 jmcneill #define BWFM_WPA_AUTH_WPA_PSK (1 << 2)
150 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_UNSPECIFIED (1 << 6)
151 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_PSK (1 << 7)
152 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_1X_SHA256 (1 << 12)
153 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_PSK_SHA256 (1 << 15)
154 1.1 jmcneill #define BWFM_WSEC_NONE (0 << 0)
155 1.1 jmcneill #define BWFM_WSEC_WEP (1 << 0)
156 1.1 jmcneill #define BWFM_WSEC_TKIP (1 << 1)
157 1.1 jmcneill #define BWFM_WSEC_AES (1 << 2)
158 1.1 jmcneill
159 1.1 jmcneill /* DCMD commands */
160 1.1 jmcneill #define BWFM_C_GET_VERSION 1
161 1.1 jmcneill #define BWFM_C_UP 2
162 1.1 jmcneill #define BWFM_C_DOWN 3
163 1.1 jmcneill #define BWFM_C_SET_PROMISC 10
164 1.1 jmcneill #define BWFM_C_GET_RATE 12
165 1.1 jmcneill #define BWFM_C_GET_INFRA 19
166 1.1 jmcneill #define BWFM_C_SET_INFRA 20
167 1.1 jmcneill #define BWFM_C_GET_AUTH 21
168 1.1 jmcneill #define BWFM_C_SET_AUTH 22
169 1.1 jmcneill #define BWFM_C_GET_BSSID 23
170 1.1 jmcneill #define BWFM_C_GET_SSID 25
171 1.1 jmcneill #define BWFM_C_SET_SSID 26
172 1.1 jmcneill #define BWFM_C_TERMINATED 28
173 1.1 jmcneill #define BWFM_C_GET_CHANNEL 29
174 1.1 jmcneill #define BWFM_C_SET_CHANNEL 30
175 1.1 jmcneill #define BWFM_C_GET_SRL 31
176 1.1 jmcneill #define BWFM_C_SET_SRL 32
177 1.1 jmcneill #define BWFM_C_GET_LRL 33
178 1.1 jmcneill #define BWFM_C_SET_LRL 34
179 1.1 jmcneill #define BWFM_C_GET_RADIO 37
180 1.1 jmcneill #define BWFM_C_SET_RADIO 38
181 1.1 jmcneill #define BWFM_C_GET_PHYTYPE 39
182 1.1 jmcneill #define BWFM_C_SET_KEY 45
183 1.1 jmcneill #define BWFM_C_GET_REGULATORY 46
184 1.1 jmcneill #define BWFM_C_SET_REGULATORY 47
185 1.1 jmcneill #define BWFM_C_SET_PASSIVE_SCAN 49
186 1.1 jmcneill #define BWFM_C_SCAN 50
187 1.1 jmcneill #define BWFM_C_SCAN_RESULTS 51
188 1.1 jmcneill #define BWFM_C_DISASSOC 52
189 1.1 jmcneill #define BWFM_C_REASSOC 53
190 1.1 jmcneill #define BWFM_C_SET_ROAM_TRIGGER 55
191 1.1 jmcneill #define BWFM_C_SET_ROAM_DELTA 57
192 1.1 jmcneill #define BWFM_C_GET_BCNPRD 75
193 1.1 jmcneill #define BWFM_C_SET_BCNPRD 76
194 1.1 jmcneill #define BWFM_C_GET_DTIMPRD 77
195 1.1 jmcneill #define BWFM_C_SET_DTIMPRD 78
196 1.1 jmcneill #define BWFM_C_SET_COUNTRY 84
197 1.1 jmcneill #define BWFM_C_GET_PM 85
198 1.1 jmcneill #define BWFM_C_SET_PM 86
199 1.1 jmcneill #define BWFM_C_GET_REVINFO 98
200 1.1 jmcneill #define BWFM_C_GET_CURR_RATESET 114
201 1.1 jmcneill #define BWFM_C_GET_AP 117
202 1.1 jmcneill #define BWFM_C_SET_AP 118
203 1.1 jmcneill #define BWFM_C_SET_SCB_AUTHORIZE 121
204 1.1 jmcneill #define BWFM_C_SET_SCB_DEAUTHORIZE 122
205 1.1 jmcneill #define BWFM_C_GET_RSSI 127
206 1.1 jmcneill #define BWFM_C_GET_WSEC 133
207 1.1 jmcneill #define BWFM_C_SET_WSEC 134
208 1.1 jmcneill #define BWFM_C_GET_PHY_NOISE 135
209 1.1 jmcneill #define BWFM_C_GET_BSS_INFO 136
210 1.1 jmcneill #define BWFM_C_GET_GET_PKTCNTS 137
211 1.1 jmcneill #define BWFM_C_GET_BANDLIST 140
212 1.1 jmcneill #define BWFM_C_SET_SCB_TIMEOUT 158
213 1.1 jmcneill #define BWFM_C_GET_ASSOCLIST 159
214 1.1 jmcneill #define BWFM_C_GET_PHYLIST 180
215 1.1 jmcneill #define BWFM_C_SET_SCAN_CHANNEL_TIME 185
216 1.1 jmcneill #define BWFM_C_SET_SCAN_UNASSOC_TIME 187
217 1.1 jmcneill #define BWFM_C_SCB_DEAUTHENTICATE_FOR_REASON 201
218 1.1 jmcneill #define BWFM_C_SET_ASSOC_PREFER 205
219 1.1 jmcneill #define BWFM_C_GET_VALID_CHANNELS 217
220 1.1 jmcneill #define BWFM_C_GET_KEY_PRIMARY 235
221 1.1 jmcneill #define BWFM_C_SET_KEY_PRIMARY 236
222 1.1 jmcneill #define BWFM_C_SET_SCAN_PASSIVE_TIME 258
223 1.1 jmcneill #define BWFM_C_GET_VAR 262
224 1.1 jmcneill #define BWFM_C_SET_VAR 263
225 1.1 jmcneill #define BWFM_C_SET_WSEC_PMK 268
226 1.1 jmcneill
227 1.1 jmcneill /* Small, medium, and maximum buffer size for dcmd */
228 1.1 jmcneill #define BWFM_DCMD_SMLEN 256
229 1.1 jmcneill #define BWFM_DCMD_MEDLEN 1536
230 1.1 jmcneill #define BWFM_DCMD_MAXLEN 8192
231 1.1 jmcneill
232 1.1 jmcneill struct bwfm_proto_bcdc_dcmd {
233 1.1 jmcneill struct {
234 1.1 jmcneill uint32_t cmd;
235 1.1 jmcneill uint32_t len;
236 1.1 jmcneill uint32_t flags;
237 1.1 jmcneill #define BWFM_BCDC_DCMD_ERROR (1 << 0)
238 1.1 jmcneill #define BWFM_BCDC_DCMD_GET (0 << 1)
239 1.1 jmcneill #define BWFM_BCDC_DCMD_SET (1 << 1)
240 1.1 jmcneill #define BWFM_BCDC_DCMD_IF_GET(x) (((x) >> 12) & 0xf)
241 1.1 jmcneill #define BWFM_BCDC_DCMD_IF_SET(x) (((x) & 0xf) << 12)
242 1.1 jmcneill #define BWFM_BCDC_DCMD_ID_GET(x) (((x) >> 16) & 0xffff)
243 1.1 jmcneill #define BWFM_BCDC_DCMD_ID_SET(x) (((x) & 0xffff) << 16)
244 1.1 jmcneill uint32_t status;
245 1.1 jmcneill } hdr;
246 1.1 jmcneill char buf[8192];
247 1.1 jmcneill };
248 1.1 jmcneill
249 1.1 jmcneill struct bwfm_proto_bcdc_hdr {
250 1.1 jmcneill uint8_t flags;
251 1.1 jmcneill #define BWFM_BCDC_FLAG_PROTO_VER 2
252 1.1 jmcneill #define BWFM_BCDC_FLAG_VER(x) (((x) & 0xf) << 4)
253 1.1 jmcneill #define BWFM_BCDC_FLAG_SUM_GOOD (1 << 2) /* rx */
254 1.1 jmcneill #define BWFM_BCDC_FLAG_SUM_NEEDED (1 << 3) /* tx */
255 1.1 jmcneill uint8_t priority;
256 1.1 jmcneill #define BWFM_BCDC_PRIORITY_MASK 0x7
257 1.1 jmcneill uint8_t flags2;
258 1.1 jmcneill #define BWFM_BCDC_FLAG2_IF_MASK 0xf
259 1.1 jmcneill uint8_t data_offset;
260 1.1 jmcneill };
261 1.1 jmcneill
262 1.1 jmcneill #define BWFM_MCSSET_LEN 16
263 1.1 jmcneill #define BWFM_MAX_SSID_LEN 32
264 1.2 jmcneill #define BWFM_BSS_INFO_BUFLEN 2048
265 1.1 jmcneill struct bwfm_bss_info {
266 1.1 jmcneill uint32_t version;
267 1.1 jmcneill uint32_t length;
268 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
269 1.1 jmcneill uint16_t beacon_period;
270 1.1 jmcneill uint16_t capability;
271 1.1 jmcneill uint8_t ssid_len;
272 1.1 jmcneill uint8_t ssid[BWFM_MAX_SSID_LEN];
273 1.1 jmcneill uint32_t nrates;
274 1.1 jmcneill uint8_t rates[16];
275 1.1 jmcneill uint16_t chanspec;
276 1.1 jmcneill uint16_t atim_window;
277 1.1 jmcneill uint8_t dtim_period;
278 1.1 jmcneill uint16_t rssi;
279 1.1 jmcneill uint8_t phy_noise;
280 1.1 jmcneill uint8_t n_cap;
281 1.1 jmcneill uint32_t nbss_cap;
282 1.1 jmcneill uint8_t ctl_ch;
283 1.1 jmcneill uint32_t reserved32[1];
284 1.1 jmcneill uint8_t flags;
285 1.1 jmcneill uint8_t reserved[3];
286 1.1 jmcneill uint8_t basic_mcs[BWFM_MCSSET_LEN];
287 1.1 jmcneill uint16_t ie_offset;
288 1.1 jmcneill uint32_t ie_length;
289 1.1 jmcneill uint16_t snr;
290 1.1 jmcneill };
291 1.1 jmcneill
292 1.1 jmcneill struct bwfm_ssid {
293 1.1 jmcneill uint32_t len;
294 1.1 jmcneill uint8_t ssid[BWFM_MAX_SSID_LEN];
295 1.1 jmcneill };
296 1.1 jmcneill
297 1.1 jmcneill struct bwfm_scan_params {
298 1.1 jmcneill struct bwfm_ssid ssid;
299 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
300 1.1 jmcneill uint8_t bss_type;
301 1.1 jmcneill #define DOT11_BSSTYPE_ANY 2
302 1.1 jmcneill uint8_t scan_type;
303 1.1 jmcneill uint32_t nprobes;
304 1.1 jmcneill uint32_t active_time;
305 1.1 jmcneill uint32_t passive_time;
306 1.1 jmcneill uint32_t home_time;
307 1.1 jmcneill uint32_t channel_num;
308 1.1 jmcneill uint16_t channel_list[];
309 1.1 jmcneill };
310 1.1 jmcneill
311 1.1 jmcneill struct bwfm_scan_results {
312 1.1 jmcneill uint32_t buflen;
313 1.1 jmcneill uint32_t version;
314 1.1 jmcneill uint32_t count;
315 1.1 jmcneill struct bwfm_bss_info bss_info[];
316 1.1 jmcneill };
317 1.1 jmcneill
318 1.1 jmcneill struct bwfm_escan_params {
319 1.1 jmcneill uint32_t version;
320 1.1 jmcneill #define BWFM_ESCAN_REQ_VERSION 1
321 1.1 jmcneill uint16_t action;
322 1.1 jmcneill #define WL_ESCAN_ACTION_START 1
323 1.1 jmcneill #define WL_ESCAN_ACTION_CONTINUE 2
324 1.1 jmcneill #define WL_ESCAN_ACTION_ABORT 3
325 1.1 jmcneill uint16_t sync_id;
326 1.1 jmcneill struct bwfm_scan_params scan_params;
327 1.1 jmcneill };
328 1.1 jmcneill
329 1.1 jmcneill struct bwfm_escan_results {
330 1.1 jmcneill uint32_t buflen;
331 1.1 jmcneill uint32_t version;
332 1.1 jmcneill uint16_t sync_id;
333 1.1 jmcneill uint16_t bss_count;
334 1.1 jmcneill struct bwfm_bss_info bss_info[];
335 1.1 jmcneill };
336 1.1 jmcneill
337 1.1 jmcneill struct bwfm_assoc_params {
338 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
339 1.1 jmcneill uint32_t chanspec_num;
340 1.1 jmcneill uint16_t chanspec_list[];
341 1.1 jmcneill };
342 1.1 jmcneill
343 1.1 jmcneill struct bwfm_join_pref_params {
344 1.1 jmcneill uint8_t type;
345 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI 1
346 1.1 jmcneill #define BWFM_JOIN_PREF_WPA 2
347 1.1 jmcneill #define BWFM_JOIN_PREF_BAND 3
348 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI_DELTA 4
349 1.1 jmcneill uint8_t len;
350 1.1 jmcneill uint8_t rssi_gain;
351 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI_BOOST 8
352 1.1 jmcneill uint8_t band;
353 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_AUTO 0
354 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_5G 1
355 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_2G 2
356 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_ALL 3
357 1.1 jmcneill };
358 1.1 jmcneill
359 1.1 jmcneill struct bwfm_join_params {
360 1.1 jmcneill struct bwfm_ssid ssid;
361 1.1 jmcneill struct bwfm_assoc_params assoc;
362 1.1 jmcneill };
363 1.1 jmcneill
364 1.1 jmcneill struct bwfm_join_scan_params {
365 1.1 jmcneill uint8_t scan_type;
366 1.1 jmcneill uint32_t nprobes;
367 1.1 jmcneill uint32_t active_time;
368 1.1 jmcneill uint32_t passive_time;
369 1.1 jmcneill uint32_t home_time;
370 1.1 jmcneill };
371 1.1 jmcneill
372 1.1 jmcneill struct bwfm_ext_join_params {
373 1.1 jmcneill struct bwfm_ssid ssid;
374 1.1 jmcneill struct bwfm_join_scan_params scan;
375 1.1 jmcneill struct bwfm_assoc_params assoc;
376 1.1 jmcneill };
377 1.1 jmcneill
378 1.1 jmcneill struct bwfm_wsec_pmk {
379 1.1 jmcneill uint16_t key_len;
380 1.1 jmcneill #define BWFM_WSEC_MAX_PSK_LEN 32
381 1.1 jmcneill uint16_t flags;
382 1.1 jmcneill #define BWFM_WSEC_PASSPHRASE (1 << 0)
383 1.1 jmcneill uint8_t key[2 * BWFM_WSEC_MAX_PSK_LEN + 1];
384 1.1 jmcneill };
385 1.1 jmcneill
386 1.1 jmcneill struct bwfm_wsec_key {
387 1.1 jmcneill uint32_t index;
388 1.1 jmcneill uint32_t len;
389 1.1 jmcneill uint8_t data[32];
390 1.1 jmcneill uint32_t pad_1[18];
391 1.1 jmcneill uint32_t algo;
392 1.1 jmcneill #define BWFM_CRYPTO_ALGO_OFF 0
393 1.1 jmcneill #define BWFM_CRYPTO_ALGO_WEP1 1
394 1.1 jmcneill #define BWFM_CRYPTO_ALGO_TKIP 2
395 1.1 jmcneill #define BWFM_CRYPTO_ALGO_WEP128 3
396 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_CCM 4
397 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_RESERVED1 5
398 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_RESERVED2 6
399 1.1 jmcneill uint32_t flags;
400 1.1 jmcneill #define BWFM_PRIMARY_KEY (1 << 1)
401 1.1 jmcneill uint32_t pad_2[3];
402 1.1 jmcneill uint32_t iv_initialized;
403 1.1 jmcneill uint32_t pad_3;
404 1.1 jmcneill struct {
405 1.1 jmcneill uint32_t hi;
406 1.1 jmcneill uint16_t lo;
407 1.1 jmcneill } rxiv;
408 1.1 jmcneill uint32_t pad_4[2];
409 1.1 jmcneill uint8_t ea[IEEE80211_ADDR_LEN];
410 1.1 jmcneill };
411 1.1 jmcneill
412 1.1 jmcneill #define BWFM_BAND_5G 1
413 1.1 jmcneill #define BWFM_BAND_2G 2
414 1.1 jmcneill
415 1.1 jmcneill /* Event handling */
416 1.1 jmcneill enum bwfm_fweh_event_code {
417 1.1 jmcneill BWFM_E_SET_SSID = 0,
418 1.1 jmcneill BWFM_E_JOIN = 1,
419 1.1 jmcneill BWFM_E_START = 2,
420 1.1 jmcneill BWFM_E_AUTH = 3,
421 1.1 jmcneill BWFM_E_AUTH_IND = 4,
422 1.1 jmcneill BWFM_E_DEAUTH = 5,
423 1.1 jmcneill BWFM_E_DEAUTH_IND = 6,
424 1.1 jmcneill BWFM_E_ASSOC = 7,
425 1.1 jmcneill BWFM_E_ASSOC_IND = 8,
426 1.1 jmcneill BWFM_E_REASSOC = 9,
427 1.1 jmcneill BWFM_E_REASSOC_IND = 10,
428 1.1 jmcneill BWFM_E_DISASSOC = 11,
429 1.1 jmcneill BWFM_E_DISASSOC_IND = 12,
430 1.1 jmcneill BWFM_E_QUIET_START = 13,
431 1.1 jmcneill BWFM_E_QUIET_END = 14,
432 1.1 jmcneill BWFM_E_BEACON_RX = 15,
433 1.1 jmcneill BWFM_E_LINK = 16,
434 1.1 jmcneill BWFM_E_MIC_ERROR = 17,
435 1.1 jmcneill BWFM_E_NDIS_LINK = 18,
436 1.1 jmcneill BWFM_E_ROAM = 19,
437 1.1 jmcneill BWFM_E_TXFAIL = 20,
438 1.1 jmcneill BWFM_E_PMKID_CACHE = 21,
439 1.1 jmcneill BWFM_E_RETROGRADE_TSF = 22,
440 1.1 jmcneill BWFM_E_PRUNE = 23,
441 1.1 jmcneill BWFM_E_AUTOAUTH = 24,
442 1.1 jmcneill BWFM_E_EAPOL_MSG = 25,
443 1.1 jmcneill BWFM_E_SCAN_COMPLETE = 26,
444 1.1 jmcneill BWFM_E_ADDTS_IND = 27,
445 1.1 jmcneill BWFM_E_DELTS_IND = 28,
446 1.1 jmcneill BWFM_E_BCNSENT_IND = 29,
447 1.1 jmcneill BWFM_E_BCNRX_MSG = 30,
448 1.1 jmcneill BWFM_E_BCNLOST_MSG = 31,
449 1.1 jmcneill BWFM_E_ROAM_PREP = 32,
450 1.1 jmcneill BWFM_E_PFN_NET_FOUND = 33,
451 1.1 jmcneill BWFM_E_PFN_NET_LOST = 34,
452 1.1 jmcneill BWFM_E_RESET_COMPLETE = 35,
453 1.1 jmcneill BWFM_E_JOIN_START = 36,
454 1.1 jmcneill BWFM_E_ROAM_START = 37,
455 1.1 jmcneill BWFM_E_ASSOC_START = 38,
456 1.1 jmcneill BWFM_E_IBSS_ASSOC = 39,
457 1.1 jmcneill BWFM_E_RADIO = 40,
458 1.1 jmcneill BWFM_E_PSM_WATCHDOG = 41,
459 1.1 jmcneill BWFM_E_PROBREQ_MSG = 44,
460 1.1 jmcneill BWFM_E_SCAN_CONFIRM_IND = 45,
461 1.1 jmcneill BWFM_E_PSK_SUP = 46,
462 1.1 jmcneill BWFM_E_COUNTRY_CODE_CHANGED = 47,
463 1.1 jmcneill BWFM_E_EXCEEDED_MEDIUM_TIME = 48,
464 1.1 jmcneill BWFM_E_ICV_ERROR = 49,
465 1.1 jmcneill BWFM_E_UNICAST_DECODE_ERROR = 50,
466 1.1 jmcneill BWFM_E_MULTICAST_DECODE_ERROR = 51,
467 1.1 jmcneill BWFM_E_TRACE = 52,
468 1.1 jmcneill BWFM_E_IF = 54,
469 1.1 jmcneill BWFM_E_P2P_DISC_LISTEN_COMPLETE = 55,
470 1.1 jmcneill BWFM_E_RSSI = 56,
471 1.1 jmcneill BWFM_E_EXTLOG_MSG = 58,
472 1.1 jmcneill BWFM_E_ACTION_FRAME = 59,
473 1.1 jmcneill BWFM_E_ACTION_FRAME_COMPLETE = 60,
474 1.1 jmcneill BWFM_E_PRE_ASSOC_IND = 61,
475 1.1 jmcneill BWFM_E_PRE_REASSOC_IND = 62,
476 1.1 jmcneill BWFM_E_CHANNEL_ADOPTED = 63,
477 1.1 jmcneill BWFM_E_AP_STARTED = 64,
478 1.1 jmcneill BWFM_E_DFS_AP_STOP = 65,
479 1.1 jmcneill BWFM_E_DFS_AP_RESUME = 66,
480 1.1 jmcneill BWFM_E_ESCAN_RESULT = 69,
481 1.1 jmcneill BWFM_E_ACTION_FRAME_OFF_CHAN_COMPLETE = 70,
482 1.1 jmcneill BWFM_E_PROBERESP_MSG = 71,
483 1.1 jmcneill BWFM_E_P2P_PROBEREQ_MSG = 72,
484 1.1 jmcneill BWFM_E_DCS_REQUEST = 73,
485 1.1 jmcneill BWFM_E_FIFO_CREDIT_MAP = 74,
486 1.1 jmcneill BWFM_E_ACTION_FRAME_RX = 75,
487 1.1 jmcneill BWFM_E_TDLS_PEER_EVENT = 92,
488 1.1 jmcneill BWFM_E_BCMC_CREDIT_SUPPORT = 127,
489 1.1 jmcneill BWFM_E_LAST = 139
490 1.1 jmcneill };
491 1.1 jmcneill #define BWFM_EVENT_MASK_LEN (roundup(BWFM_E_LAST, 8) / 8)
492 1.1 jmcneill
493 1.1 jmcneill enum bwfm_fweh_event_status {
494 1.1 jmcneill BWFM_E_STATUS_SUCCESS = 0,
495 1.1 jmcneill BWFM_E_STATUS_FAIL = 1,
496 1.1 jmcneill BWFM_E_STATUS_TIMEOUT = 2,
497 1.1 jmcneill BWFM_E_STATUS_NO_NETWORKS = 3,
498 1.1 jmcneill BWFM_E_STATUS_ABORT = 4,
499 1.1 jmcneill BWFM_E_STATUS_NO_ACK = 5,
500 1.1 jmcneill BWFM_E_STATUS_UNSOLICITED = 6,
501 1.1 jmcneill BWFM_E_STATUS_ATTEMPT = 7,
502 1.1 jmcneill BWFM_E_STATUS_PARTIAL = 8,
503 1.1 jmcneill BWFM_E_STATUS_NEWSCAN = 9,
504 1.1 jmcneill BWFM_E_STATUS_NEWASSOC = 10,
505 1.1 jmcneill BWFM_E_STATUS_11HQUIET = 11,
506 1.1 jmcneill BWFM_E_STATUS_SUPPRESS = 12,
507 1.1 jmcneill BWFM_E_STATUS_NOCHANS = 13,
508 1.1 jmcneill BWFM_E_STATUS_CS_ABORT = 15,
509 1.1 jmcneill BWFM_E_STATUS_ERROR = 16,
510 1.1 jmcneill };
511 1.1 jmcneill
512 1.1 jmcneill struct bwfm_ethhdr {
513 1.1 jmcneill uint16_t subtype;
514 1.1 jmcneill uint16_t length;
515 1.1 jmcneill uint8_t version;
516 1.1 jmcneill uint8_t oui[3];
517 1.1 jmcneill #define BWFM_BRCM_OUI "\x00\x10\x18"
518 1.1 jmcneill uint16_t usr_subtype;
519 1.1 jmcneill #define BWFM_BRCM_SUBTYPE_EVENT 1
520 1.1 jmcneill };
521 1.1 jmcneill
522 1.1 jmcneill struct bwfm_event_msg {
523 1.1 jmcneill uint16_t version;
524 1.1 jmcneill uint16_t flags;
525 1.1 jmcneill uint32_t event_type;
526 1.1 jmcneill uint32_t status;
527 1.1 jmcneill uint32_t reason;
528 1.1 jmcneill uint32_t auth_type;
529 1.1 jmcneill uint32_t datalen;
530 1.1 jmcneill struct ether_addr addr;
531 1.1 jmcneill char ifname[IFNAMSIZ];
532 1.1 jmcneill uint8_t ifidx;
533 1.1 jmcneill uint8_t bsscfgidx;
534 1.1 jmcneill };
535 1.1 jmcneill
536 1.1 jmcneill struct bwfm_event {
537 1.1 jmcneill struct ether_header ehdr;
538 1.1 jmcneill #define BWFM_ETHERTYPE_LINK_CTL 0x886c
539 1.1 jmcneill struct bwfm_ethhdr hdr;
540 1.1 jmcneill struct bwfm_event_msg msg;
541 1.1 jmcneill } __packed;
542