bwfmreg.h revision 1.8 1 1.8 mlelstv /* $NetBSD: bwfmreg.h,v 1.8 2022/03/14 06:40:12 mlelstv Exp $ */
2 1.3 maya /* $OpenBSD: bwfmreg.h,v 1.16 2018/02/07 21:44:09 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.7 riastrad #ifndef _DEV_IC_BWFMREG_H
21 1.7 riastrad #define _DEV_IC_BWFMREG_H
22 1.7 riastrad
23 1.7 riastrad #include <sys/param.h>
24 1.7 riastrad #include <sys/types.h>
25 1.7 riastrad
26 1.7 riastrad #include <sys/cdefs.h>
27 1.7 riastrad
28 1.7 riastrad #include <net/if.h>
29 1.7 riastrad #include <net/if_ether.h>
30 1.7 riastrad
31 1.7 riastrad #include <net80211/ieee80211.h>
32 1.7 riastrad
33 1.1 jmcneill /* SDIO registers */
34 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRLOW 0x1000A
35 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRMID 0x1000B
36 1.1 jmcneill #define BWFM_SDIO_FUNC1_SBADDRHIGH 0x1000C
37 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR 0x1000E
38 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ALP 0x01
39 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HT 0x02
40 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_ILP 0x04
41 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL_REQ 0x08
42 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL_REQ 0x10
43 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_FORCE_HW_CLKREQ_OFF 0x20
44 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_ALP_AVAIL 0x40
45 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_HT_AVAIL 0x80
46 1.1 jmcneill #define BWFM_SDIO_FUNC1_CHIPCLKCSR_CSR_MASK 0x1F
47 1.1 jmcneill #define BWFM_SDIO_FUNC1_SDIOPULLUP 0x1000F
48 1.1 jmcneill
49 1.1 jmcneill #define BWFM_SDIO_SB_OFT_ADDR_MASK 0x07FFF
50 1.1 jmcneill #define BWFM_SDIO_SB_ACCESS_2_4B_FLAG 0x08000
51 1.1 jmcneill
52 1.1 jmcneill /* Chip registers */
53 1.1 jmcneill #define BWFM_CHIP_BASE 0x18000000
54 1.1 jmcneill #define BWFM_CHIP_REG_CHIPID 0x00000000
55 1.1 jmcneill #define BWFM_CHIP_CHIPID_ID(x) (((x) >> 0) & 0xffff)
56 1.1 jmcneill #define BWFM_CHIP_CHIPID_REV(x) (((x) >> 16) & 0xf)
57 1.1 jmcneill #define BWFM_CHIP_CHIPID_PKG(x) (((x) >> 20) & 0xf)
58 1.1 jmcneill #define BWFM_CHIP_CHIPID_CC(x) (((x) >> 24) & 0xf)
59 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE(x) (((x) >> 28) & 0xf)
60 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE_SOCI_SB 0
61 1.1 jmcneill #define BWFM_CHIP_CHIPID_TYPE_SOCI_AI 1
62 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES 0x00000004
63 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_PMU 0x10000000
64 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_EXT 0x000000AC
65 1.1 jmcneill #define BWFM_CHIP_REG_CAPABILITIES_EXT_AOB_PRESENT 0x00000040
66 1.3 maya #define BWFM_CHIP_REG_WATCHDOG 0x00000080
67 1.1 jmcneill #define BWFM_CHIP_REG_EROMPTR 0x000000FC
68 1.3 maya #define BWFM_CHIP_REG_SR_CAPABILITY 0x00000500
69 1.3 maya #define BWFM_CHIP_REG_SR_CONTROL0 0x00000504
70 1.3 maya #define BWFM_CHIP_REG_SR_CONTROL1 0x00000508
71 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL 0x00000600
72 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_MASK 0x00006000
73 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_SHIFT 13
74 1.1 jmcneill #define BWFM_CHIP_REG_PMUCONTROL_RES_RELOAD 0x2
75 1.1 jmcneill #define BWFM_CHIP_REG_PMUCAPABILITIES 0x00000604
76 1.1 jmcneill #define BWFM_CHIP_REG_PMUCAPABILITIES_REV_MASK 0x000000ff
77 1.3 maya #define BWFM_CHIP_REG_PMUCAPABILITIES_EXT 0x0000064C
78 1.3 maya #define BWFM_CHIP_REG_PMUCAPABILITIES_SR_SUPP (1 << 1)
79 1.3 maya #define BWFM_CHIP_REG_CHIPCONTROL_ADDR 0x00000650
80 1.3 maya #define BWFM_CHIP_REG_CHIPCONTROL_DATA 0x00000654
81 1.3 maya #define BWFM_CHIP_REG_RETENTION_CTL 0x00000670
82 1.3 maya #define BWFM_CHIP_REG_RETENTION_CTL_MACPHY_DIS (1 << 26)
83 1.3 maya #define BWFM_CHIP_REG_RETENTION_CTL_LOGIC_DIS (1 << 27)
84 1.1 jmcneill
85 1.1 jmcneill /* Agent registers */
86 1.1 jmcneill #define BWFM_AGENT_IOCTL 0x0408
87 1.1 jmcneill #define BWFM_AGENT_IOCTL_CLK 0x0001
88 1.1 jmcneill #define BWFM_AGENT_IOCTL_FGC 0x0002
89 1.1 jmcneill #define BWFM_AGENT_IOCTL_CORE_BITS 0x3FFC
90 1.1 jmcneill #define BWFM_AGENT_IOCTL_PME_EN 0x4000
91 1.1 jmcneill #define BWFM_AGENT_IOCTL_BIST_EN 0x8000
92 1.3 maya #define BWFM_AGENT_IOCTL_ARMCR4_CPUHALT 0x0020
93 1.1 jmcneill #define BWFM_AGENT_RESET_CTL 0x0800
94 1.1 jmcneill #define BWFM_AGENT_RESET_CTL_RESET 0x0001
95 1.1 jmcneill
96 1.1 jmcneill /* Agent Core-IDs */
97 1.1 jmcneill #define BWFM_AGENT_CORE_CHIPCOMMON 0x800
98 1.1 jmcneill #define BWFM_AGENT_INTERNAL_MEM 0x80E
99 1.1 jmcneill #define BWFM_AGENT_CORE_80211 0x812
100 1.1 jmcneill #define BWFM_AGENT_CORE_PMU 0x827
101 1.1 jmcneill #define BWFM_AGENT_CORE_SDIO_DEV 0x829
102 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CM3 0x82A
103 1.3 maya #define BWFM_AGENT_CORE_PCIE2 0x83C
104 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CR4 0x83E
105 1.1 jmcneill #define BWFM_AGENT_CORE_ARM_CA7 0x847
106 1.3 maya #define BWFM_AGENT_SYS_MEM 0x849
107 1.1 jmcneill
108 1.1 jmcneill /* Specific Core Bits */
109 1.1 jmcneill #define BWFM_AGENT_ARMCR4_IOCTL_CPUHALT 0x0020
110 1.1 jmcneill #define BWFM_AGENT_D11_IOCTL_PHYCLOCKEN 0x0004
111 1.1 jmcneill #define BWFM_AGENT_D11_IOCTL_PHYRESET 0x0008
112 1.1 jmcneill
113 1.3 maya /* CR4 registers */
114 1.3 maya #define BWFM_ARMCR4_CAP 0x0004
115 1.3 maya #define BWFM_ARMCR4_CAP_TCBANB_MASK 0xf
116 1.3 maya #define BWFM_ARMCR4_CAP_TCBANB_SHIFT 0
117 1.3 maya #define BWFM_ARMCR4_CAP_TCBBNB_MASK 0xf0
118 1.3 maya #define BWFM_ARMCR4_CAP_TCBBNB_SHIFT 4
119 1.3 maya #define BWFM_ARMCR4_BANKIDX 0x0040
120 1.3 maya #define BWFM_ARMCR4_BANKINFO 0x0044
121 1.3 maya #define BWFM_ARMCR4_BANKINFO_BSZ_MASK 0x3f
122 1.3 maya #define BWFM_ARMCR4_BANKINFO_BSZ_MULT 8192
123 1.3 maya #define BWFM_ARMCR4_BANKPDA 0x004C
124 1.3 maya
125 1.1 jmcneill /* SOCRAM registers */
126 1.3 maya #define BWFM_SOCRAM_COREINFO 0x0000
127 1.3 maya #define BWFM_SOCRAM_COREINFO_SRBSZ_BASE 14
128 1.3 maya #define BWFM_SOCRAM_COREINFO_SRBSZ_MASK 0xf
129 1.3 maya #define BWFM_SOCRAM_COREINFO_SRBSZ_SHIFT 0
130 1.3 maya #define BWFM_SOCRAM_COREINFO_SRNB_MASK 0xf0
131 1.3 maya #define BWFM_SOCRAM_COREINFO_SRNB_SHIFT 4
132 1.3 maya #define BWFM_SOCRAM_COREINFO_LSS_MASK 0xf00000
133 1.3 maya #define BWFM_SOCRAM_COREINFO_LSS_SHIFT 20
134 1.1 jmcneill #define BWFM_SOCRAM_BANKIDX 0x0010
135 1.3 maya #define BWFM_SOCRAM_BANKIDX_MEMTYPE_RAM 0
136 1.3 maya #define BWFM_SOCRAM_BANKIDX_MEMTYPE_ROM 1
137 1.3 maya #define BWFM_SOCRAM_BANKIDX_MEMTYPE_DEVRAM 2
138 1.3 maya #define BWFM_SOCRAM_BANKIDX_MEMTYPE_SHIFT 8
139 1.3 maya #define BWFM_SOCRAM_BANKINFO 0x0040
140 1.3 maya #define BWFM_SOCRAM_BANKINFO_SZBASE 8192
141 1.3 maya #define BWFM_SOCRAM_BANKINFO_SZMASK 0x7f
142 1.3 maya #define BWFM_SOCRAM_BANKINFO_RETNTRAM_MASK 0x10000
143 1.1 jmcneill #define BWFM_SOCRAM_BANKPDA 0x0044
144 1.1 jmcneill
145 1.1 jmcneill /* SDPCMD registers */
146 1.1 jmcneill #define BWFM_SDPCMD_INTSTATUS 0x0020
147 1.1 jmcneill
148 1.1 jmcneill /* DMP descriptor */
149 1.1 jmcneill #define BWFM_DMP_DESC_MASK 0x0000000F
150 1.1 jmcneill #define BWFM_DMP_DESC_EMPTY 0x00000000
151 1.1 jmcneill #define BWFM_DMP_DESC_VALID 0x00000001
152 1.1 jmcneill #define BWFM_DMP_DESC_COMPONENT 0x00000001
153 1.1 jmcneill #define BWFM_DMP_DESC_MASTER_PORT 0x00000003
154 1.1 jmcneill #define BWFM_DMP_DESC_ADDRESS 0x00000005
155 1.1 jmcneill #define BWFM_DMP_DESC_ADDRSIZE_GT32 0x00000008
156 1.1 jmcneill #define BWFM_DMP_DESC_EOT 0x0000000F
157 1.1 jmcneill #define BWFM_DMP_COMP_DESIGNER 0xFFF00000
158 1.1 jmcneill #define BWFM_DMP_COMP_DESIGNER_S 20
159 1.1 jmcneill #define BWFM_DMP_COMP_PARTNUM 0x000FFF00
160 1.1 jmcneill #define BWFM_DMP_COMP_PARTNUM_S 8
161 1.1 jmcneill #define BWFM_DMP_COMP_CLASS 0x000000F0
162 1.1 jmcneill #define BWFM_DMP_COMP_CLASS_S 4
163 1.1 jmcneill #define BWFM_DMP_COMP_REVISION 0xFF000000
164 1.1 jmcneill #define BWFM_DMP_COMP_REVISION_S 24
165 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SWRAP 0x00F80000
166 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SWRAP_S 19
167 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MWRAP 0x0007C000
168 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MWRAP_S 14
169 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SPORT 0x00003E00
170 1.1 jmcneill #define BWFM_DMP_COMP_NUM_SPORT_S 9
171 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MPORT 0x000001F0
172 1.1 jmcneill #define BWFM_DMP_COMP_NUM_MPORT_S 4
173 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_UID 0x0000FF00
174 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_UID_S 8
175 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_NUM 0x000000F0
176 1.1 jmcneill #define BWFM_DMP_MASTER_PORT_NUM_S 4
177 1.1 jmcneill #define BWFM_DMP_SLAVE_ADDR_BASE 0xFFFFF000
178 1.1 jmcneill #define BWFM_DMP_SLAVE_ADDR_BASE_S 12
179 1.1 jmcneill #define BWFM_DMP_SLAVE_PORT_NUM 0x00000F00
180 1.1 jmcneill #define BWFM_DMP_SLAVE_PORT_NUM_S 8
181 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE 0x000000C0
182 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_S 6
183 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_SLAVE 0
184 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_BRIDGE 1
185 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_SWRAP 2
186 1.1 jmcneill #define BWFM_DMP_SLAVE_TYPE_MWRAP 3
187 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_TYPE 0x00000030
188 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_TYPE_S 4
189 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_4K 0
190 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_8K 1
191 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_16K 2
192 1.1 jmcneill #define BWFM_DMP_SLAVE_SIZE_DESC 3
193 1.1 jmcneill
194 1.1 jmcneill /* Security Parameters */
195 1.1 jmcneill #define BWFM_AUTH_OPEN 0
196 1.1 jmcneill #define BWFM_AUTH_SHARED_KEY 1
197 1.1 jmcneill #define BWFM_AUTH_AUTO 2
198 1.3 maya #define BWFM_CRYPTO_ALGO_OFF 0
199 1.3 maya #define BWFM_CRYPTO_ALGO_WEP1 1
200 1.3 maya #define BWFM_CRYPTO_ALGO_TKIP 2
201 1.3 maya #define BWFM_CRYPTO_ALGO_WEP128 3
202 1.3 maya #define BWFM_CRYPTO_ALGO_AES_CCM 4
203 1.3 maya #define BWFM_CRYPTO_ALGO_AES_RESERVED1 5
204 1.3 maya #define BWFM_CRYPTO_ALGO_AES_RESERVED2 6
205 1.1 jmcneill #define BWFM_MFP_NONE 0
206 1.1 jmcneill #define BWFM_MFP_CAPABLE 1
207 1.1 jmcneill #define BWFM_MFP_REQUIRED 2
208 1.1 jmcneill #define BWFM_WPA_AUTH_DISABLED (0 << 0)
209 1.1 jmcneill #define BWFM_WPA_AUTH_NONE (1 << 0)
210 1.1 jmcneill #define BWFM_WPA_AUTH_WPA_UNSPECIFIED (1 << 1)
211 1.1 jmcneill #define BWFM_WPA_AUTH_WPA_PSK (1 << 2)
212 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_UNSPECIFIED (1 << 6)
213 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_PSK (1 << 7)
214 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_1X_SHA256 (1 << 12)
215 1.1 jmcneill #define BWFM_WPA_AUTH_WPA2_PSK_SHA256 (1 << 15)
216 1.1 jmcneill #define BWFM_WSEC_NONE (0 << 0)
217 1.1 jmcneill #define BWFM_WSEC_WEP (1 << 0)
218 1.1 jmcneill #define BWFM_WSEC_TKIP (1 << 1)
219 1.1 jmcneill #define BWFM_WSEC_AES (1 << 2)
220 1.1 jmcneill
221 1.3 maya /* Channel Parameters */
222 1.3 maya #define BWFM_CHANSPEC_CHAN_MASK 0xff
223 1.3 maya #define BWFM_CHANSPEC_CHAN_SHIFT 0
224 1.3 maya #define BWFM_CHANSPEC_D11N_SB_L (0x1 << 8) /* control lower */
225 1.3 maya #define BWFM_CHANSPEC_D11N_SB_U (0x2 << 8) /* control lower */
226 1.3 maya #define BWFM_CHANSPEC_D11N_SB_N (0x3 << 8) /* none */
227 1.3 maya #define BWFM_CHANSPEC_D11N_SB_MASK (0x3 << 8)
228 1.3 maya #define BWFM_CHANSPEC_D11N_SB_SHIFT 8
229 1.3 maya #define BWFM_CHANSPEC_D11N_BW_10 (0x1 << 10)
230 1.3 maya #define BWFM_CHANSPEC_D11N_BW_20 (0x2 << 10)
231 1.3 maya #define BWFM_CHANSPEC_D11N_BW_40 (0x3 << 10)
232 1.3 maya #define BWFM_CHANSPEC_D11N_BW_MASK (0x3 << 10)
233 1.3 maya #define BWFM_CHANSPEC_D11N_BW_SHIFT 10
234 1.3 maya #define BWFM_CHANSPEC_D11N_BND_5G (0x1 << 12)
235 1.3 maya #define BWFM_CHANSPEC_D11N_BND_2G (0x2 << 12)
236 1.3 maya #define BWFM_CHANSPEC_D11N_BND_MASK (0x3 << 12)
237 1.3 maya #define BWFM_CHANSPEC_D11N_BND_SHIFT 12
238 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_LLL (0x0 << 8)
239 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_LLU (0x1 << 8)
240 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_LUL (0x2 << 8)
241 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_LUU (0x3 << 8)
242 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_ULL (0x4 << 8)
243 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_ULU (0x5 << 8)
244 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_UUL (0x6 << 8)
245 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_UUU (0x7 << 8)
246 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_MASK (0x7 << 8)
247 1.3 maya #define BWFM_CHANSPEC_D11AC_SB_SHIFT 8
248 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_5 (0x0 << 11)
249 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_10 (0x1 << 11)
250 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_20 (0x2 << 11)
251 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_40 (0x3 << 11)
252 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_80 (0x4 << 11)
253 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_160 (0x5 << 11)
254 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_8080 (0x6 << 11)
255 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_MASK (0x7 << 11)
256 1.3 maya #define BWFM_CHANSPEC_D11AC_BW_SHIFT 11
257 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_2G (0x0 << 14)
258 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_3G (0x1 << 14)
259 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_4G (0x2 << 14)
260 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_5G (0x3 << 14)
261 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_MASK (0x3 << 14)
262 1.3 maya #define BWFM_CHANSPEC_D11AC_BND_SHIFT 14
263 1.3 maya
264 1.3 maya #define BWFM_BAND_AUTO 0
265 1.3 maya #define BWFM_BAND_5G 1
266 1.3 maya #define BWFM_BAND_2G 2
267 1.3 maya #define BWFM_BAND_ALL 3
268 1.3 maya
269 1.3 maya /* Power Modes */
270 1.3 maya #define BWFM_PM_CAM 0
271 1.3 maya #define BWFM_PM_PS 1
272 1.3 maya #define BWFM_PM_FAST_PS 2
273 1.3 maya
274 1.1 jmcneill /* DCMD commands */
275 1.1 jmcneill #define BWFM_C_GET_VERSION 1
276 1.1 jmcneill #define BWFM_C_UP 2
277 1.1 jmcneill #define BWFM_C_DOWN 3
278 1.1 jmcneill #define BWFM_C_SET_PROMISC 10
279 1.1 jmcneill #define BWFM_C_GET_RATE 12
280 1.1 jmcneill #define BWFM_C_GET_INFRA 19
281 1.1 jmcneill #define BWFM_C_SET_INFRA 20
282 1.1 jmcneill #define BWFM_C_GET_AUTH 21
283 1.1 jmcneill #define BWFM_C_SET_AUTH 22
284 1.1 jmcneill #define BWFM_C_GET_BSSID 23
285 1.1 jmcneill #define BWFM_C_GET_SSID 25
286 1.1 jmcneill #define BWFM_C_SET_SSID 26
287 1.1 jmcneill #define BWFM_C_TERMINATED 28
288 1.1 jmcneill #define BWFM_C_GET_CHANNEL 29
289 1.1 jmcneill #define BWFM_C_SET_CHANNEL 30
290 1.1 jmcneill #define BWFM_C_GET_SRL 31
291 1.1 jmcneill #define BWFM_C_SET_SRL 32
292 1.1 jmcneill #define BWFM_C_GET_LRL 33
293 1.1 jmcneill #define BWFM_C_SET_LRL 34
294 1.1 jmcneill #define BWFM_C_GET_RADIO 37
295 1.1 jmcneill #define BWFM_C_SET_RADIO 38
296 1.1 jmcneill #define BWFM_C_GET_PHYTYPE 39
297 1.1 jmcneill #define BWFM_C_SET_KEY 45
298 1.1 jmcneill #define BWFM_C_GET_REGULATORY 46
299 1.1 jmcneill #define BWFM_C_SET_REGULATORY 47
300 1.1 jmcneill #define BWFM_C_SET_PASSIVE_SCAN 49
301 1.1 jmcneill #define BWFM_C_SCAN 50
302 1.1 jmcneill #define BWFM_C_SCAN_RESULTS 51
303 1.1 jmcneill #define BWFM_C_DISASSOC 52
304 1.1 jmcneill #define BWFM_C_REASSOC 53
305 1.1 jmcneill #define BWFM_C_SET_ROAM_TRIGGER 55
306 1.1 jmcneill #define BWFM_C_SET_ROAM_DELTA 57
307 1.1 jmcneill #define BWFM_C_GET_BCNPRD 75
308 1.1 jmcneill #define BWFM_C_SET_BCNPRD 76
309 1.1 jmcneill #define BWFM_C_GET_DTIMPRD 77
310 1.1 jmcneill #define BWFM_C_SET_DTIMPRD 78
311 1.1 jmcneill #define BWFM_C_SET_COUNTRY 84
312 1.1 jmcneill #define BWFM_C_GET_PM 85
313 1.1 jmcneill #define BWFM_C_SET_PM 86
314 1.1 jmcneill #define BWFM_C_GET_REVINFO 98
315 1.1 jmcneill #define BWFM_C_GET_CURR_RATESET 114
316 1.1 jmcneill #define BWFM_C_GET_AP 117
317 1.1 jmcneill #define BWFM_C_SET_AP 118
318 1.1 jmcneill #define BWFM_C_SET_SCB_AUTHORIZE 121
319 1.1 jmcneill #define BWFM_C_SET_SCB_DEAUTHORIZE 122
320 1.1 jmcneill #define BWFM_C_GET_RSSI 127
321 1.1 jmcneill #define BWFM_C_GET_WSEC 133
322 1.1 jmcneill #define BWFM_C_SET_WSEC 134
323 1.1 jmcneill #define BWFM_C_GET_PHY_NOISE 135
324 1.1 jmcneill #define BWFM_C_GET_BSS_INFO 136
325 1.1 jmcneill #define BWFM_C_GET_GET_PKTCNTS 137
326 1.1 jmcneill #define BWFM_C_GET_BANDLIST 140
327 1.1 jmcneill #define BWFM_C_SET_SCB_TIMEOUT 158
328 1.1 jmcneill #define BWFM_C_GET_ASSOCLIST 159
329 1.1 jmcneill #define BWFM_C_GET_PHYLIST 180
330 1.1 jmcneill #define BWFM_C_SET_SCAN_CHANNEL_TIME 185
331 1.1 jmcneill #define BWFM_C_SET_SCAN_UNASSOC_TIME 187
332 1.1 jmcneill #define BWFM_C_SCB_DEAUTHENTICATE_FOR_REASON 201
333 1.1 jmcneill #define BWFM_C_SET_ASSOC_PREFER 205
334 1.1 jmcneill #define BWFM_C_GET_VALID_CHANNELS 217
335 1.1 jmcneill #define BWFM_C_GET_KEY_PRIMARY 235
336 1.1 jmcneill #define BWFM_C_SET_KEY_PRIMARY 236
337 1.1 jmcneill #define BWFM_C_SET_SCAN_PASSIVE_TIME 258
338 1.1 jmcneill #define BWFM_C_GET_VAR 262
339 1.1 jmcneill #define BWFM_C_SET_VAR 263
340 1.1 jmcneill #define BWFM_C_SET_WSEC_PMK 268
341 1.1 jmcneill
342 1.1 jmcneill /* Small, medium, and maximum buffer size for dcmd */
343 1.1 jmcneill #define BWFM_DCMD_SMLEN 256
344 1.1 jmcneill #define BWFM_DCMD_MEDLEN 1536
345 1.1 jmcneill #define BWFM_DCMD_MAXLEN 8192
346 1.1 jmcneill
347 1.1 jmcneill struct bwfm_proto_bcdc_dcmd {
348 1.1 jmcneill struct {
349 1.1 jmcneill uint32_t cmd;
350 1.1 jmcneill uint32_t len;
351 1.1 jmcneill uint32_t flags;
352 1.1 jmcneill #define BWFM_BCDC_DCMD_ERROR (1 << 0)
353 1.1 jmcneill #define BWFM_BCDC_DCMD_GET (0 << 1)
354 1.1 jmcneill #define BWFM_BCDC_DCMD_SET (1 << 1)
355 1.1 jmcneill #define BWFM_BCDC_DCMD_IF_GET(x) (((x) >> 12) & 0xf)
356 1.1 jmcneill #define BWFM_BCDC_DCMD_IF_SET(x) (((x) & 0xf) << 12)
357 1.1 jmcneill #define BWFM_BCDC_DCMD_ID_GET(x) (((x) >> 16) & 0xffff)
358 1.1 jmcneill #define BWFM_BCDC_DCMD_ID_SET(x) (((x) & 0xffff) << 16)
359 1.1 jmcneill uint32_t status;
360 1.1 jmcneill } hdr;
361 1.1 jmcneill char buf[8192];
362 1.1 jmcneill };
363 1.1 jmcneill
364 1.1 jmcneill struct bwfm_proto_bcdc_hdr {
365 1.1 jmcneill uint8_t flags;
366 1.1 jmcneill #define BWFM_BCDC_FLAG_PROTO_VER 2
367 1.1 jmcneill #define BWFM_BCDC_FLAG_VER(x) (((x) & 0xf) << 4)
368 1.1 jmcneill #define BWFM_BCDC_FLAG_SUM_GOOD (1 << 2) /* rx */
369 1.1 jmcneill #define BWFM_BCDC_FLAG_SUM_NEEDED (1 << 3) /* tx */
370 1.1 jmcneill uint8_t priority;
371 1.1 jmcneill #define BWFM_BCDC_PRIORITY_MASK 0x7
372 1.1 jmcneill uint8_t flags2;
373 1.1 jmcneill #define BWFM_BCDC_FLAG2_IF_MASK 0xf
374 1.1 jmcneill uint8_t data_offset;
375 1.1 jmcneill };
376 1.1 jmcneill
377 1.1 jmcneill #define BWFM_MCSSET_LEN 16
378 1.1 jmcneill #define BWFM_MAX_SSID_LEN 32
379 1.2 jmcneill #define BWFM_BSS_INFO_BUFLEN 2048
380 1.1 jmcneill struct bwfm_bss_info {
381 1.1 jmcneill uint32_t version;
382 1.1 jmcneill uint32_t length;
383 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
384 1.1 jmcneill uint16_t beacon_period;
385 1.1 jmcneill uint16_t capability;
386 1.1 jmcneill uint8_t ssid_len;
387 1.1 jmcneill uint8_t ssid[BWFM_MAX_SSID_LEN];
388 1.6 mlelstv uint8_t pad0;
389 1.1 jmcneill uint32_t nrates;
390 1.1 jmcneill uint8_t rates[16];
391 1.1 jmcneill uint16_t chanspec;
392 1.1 jmcneill uint16_t atim_window;
393 1.1 jmcneill uint8_t dtim_period;
394 1.6 mlelstv uint8_t pad1;
395 1.1 jmcneill uint16_t rssi;
396 1.1 jmcneill uint8_t phy_noise;
397 1.1 jmcneill uint8_t n_cap;
398 1.6 mlelstv uint16_t pad2;
399 1.1 jmcneill uint32_t nbss_cap;
400 1.1 jmcneill uint8_t ctl_ch;
401 1.6 mlelstv uint8_t pad3[3];
402 1.1 jmcneill uint32_t reserved32[1];
403 1.1 jmcneill uint8_t flags;
404 1.1 jmcneill uint8_t reserved[3];
405 1.1 jmcneill uint8_t basic_mcs[BWFM_MCSSET_LEN];
406 1.1 jmcneill uint16_t ie_offset;
407 1.6 mlelstv uint16_t pad4;
408 1.1 jmcneill uint32_t ie_length;
409 1.1 jmcneill uint16_t snr;
410 1.1 jmcneill };
411 1.1 jmcneill
412 1.5 jmcneill #define BWFM_MAXRATES_IN_SET BWFM_MCSSET_LEN
413 1.5 jmcneill #define BWFM_ANT_MAX 4
414 1.5 jmcneill #define BWFM_VHT_CAP_MCS_MAP_NSS_MAX 8
415 1.5 jmcneill #define BWFM_HE_CAP_MCS_MAP_NSS_MAX BWFM_VHT_CAP_MCS_MAP_NSS_MAX
416 1.5 jmcneill
417 1.5 jmcneill struct bwfm_sta_rateset_v5 {
418 1.5 jmcneill uint32_t count;
419 1.5 jmcneill /* rates in 500kbps units w/hi bit set if basic */
420 1.5 jmcneill uint8_t rates[BWFM_MAXRATES_IN_SET];
421 1.5 jmcneill uint8_t mcs[BWFM_MCSSET_LEN];
422 1.5 jmcneill uint16_t vht_mcs[BWFM_VHT_CAP_MCS_MAP_NSS_MAX];
423 1.5 jmcneill };
424 1.5 jmcneill
425 1.5 jmcneill struct bwfm_sta_rateset_v7 {
426 1.5 jmcneill uint16_t version;
427 1.5 jmcneill uint16_t len;
428 1.5 jmcneill uint32_t count;
429 1.5 jmcneill /* rates in 500kbps units w/hi bit set if basic */
430 1.5 jmcneill uint8_t rates[BWFM_MAXRATES_IN_SET];
431 1.5 jmcneill uint8_t mcs[BWFM_MCSSET_LEN];
432 1.5 jmcneill uint16_t vht_mcs[BWFM_VHT_CAP_MCS_MAP_NSS_MAX];
433 1.5 jmcneill uint16_t he_mcs[BWFM_HE_CAP_MCS_MAP_NSS_MAX];
434 1.5 jmcneill };
435 1.5 jmcneill
436 1.5 jmcneill struct bwfm_sta_info {
437 1.5 jmcneill uint16_t ver;
438 1.5 jmcneill uint16_t len;
439 1.5 jmcneill uint16_t cap; /* sta's advertised capabilities */
440 1.5 jmcneill
441 1.5 jmcneill uint32_t flags;
442 1.5 jmcneill #define BWFM_STA_BRCM 0x00000001 /* Running a Broadcom driver */
443 1.5 jmcneill #define BWFM_STA_WME 0x00000002 /* WMM association */
444 1.5 jmcneill #define BWFM_STA_NONERP 0x00000004 /* No ERP */
445 1.5 jmcneill #define BWFM_STA_AUTHE 0x00000008 /* Authenticated */
446 1.5 jmcneill #define BWFM_STA_ASSOC 0x00000010 /* Associated */
447 1.5 jmcneill #define BWFM_STA_AUTHO 0x00000020 /* Authorized */
448 1.5 jmcneill #define BWFM_STA_WDS 0x00000040 /* Wireless Distribution System */
449 1.5 jmcneill #define BWFM_STA_WDS_LINKUP 0x00000080 /* WDS traffic/probes flowing */
450 1.5 jmcneill #define BWFM_STA_PS 0x00000100 /* STA in power save mode, says AP */
451 1.5 jmcneill #define BWFM_STA_APSD_BE 0x00000200 /* APSD for AC_BE default enabled */
452 1.5 jmcneill #define BWFM_STA_APSD_BK 0x00000400 /* APSD for AC_BK default enabled */
453 1.5 jmcneill #define BWFM_STA_APSD_VI 0x00000800 /* APSD for AC_VI default enabled */
454 1.5 jmcneill #define BWFM_STA_APSD_VO 0x00001000 /* APSD for AC_VO default enabled */
455 1.5 jmcneill #define BWFM_STA_N_CAP 0x00002000 /* STA 802.11n capable */
456 1.5 jmcneill #define BWFM_STA_SCBSTATS 0x00004000 /* Per STA debug stats */
457 1.5 jmcneill #define BWFM_STA_AMPDU_CAP 0x00008000 /* STA AMPDU capable */
458 1.5 jmcneill #define BWFM_STA_AMSDU_CAP 0x00010000 /* STA AMSDU capable */
459 1.5 jmcneill #define BWFM_STA_MIMO_PS 0x00020000 /* mimo ps mode is enabled */
460 1.5 jmcneill #define BWFM_STA_MIMO_RTS 0x00040000 /* send rts in mimo ps mode */
461 1.5 jmcneill #define BWFM_STA_RIFS_CAP 0x00080000 /* rifs enabled */
462 1.5 jmcneill #define BWFM_STA_VHT_CAP 0x00100000 /* STA VHT(11ac) capable */
463 1.5 jmcneill #define BWFM_STA_WPS 0x00200000 /* WPS state */
464 1.5 jmcneill #define BWFM_STA_DWDS_CAP 0x01000000 /* DWDS CAP */
465 1.5 jmcneill #define BWFM_STA_DWDS 0x02000000 /* DWDS active */
466 1.5 jmcneill
467 1.5 jmcneill uint32_t idle; /* time since data pkt rx'd from sta */
468 1.5 jmcneill uint8_t ea[ETHER_ADDR_LEN];
469 1.5 jmcneill uint32_t count; /* # rates in this set */
470 1.5 jmcneill uint8_t rates[BWFM_MAXRATES_IN_SET]; /* rates in 500kbps units */
471 1.5 jmcneill /* w/hi bit set if basic */
472 1.5 jmcneill uint32_t in; /* seconds elapsed since associated */
473 1.5 jmcneill uint32_t listen_interval_inms; /* Min Listen interval in ms for STA */
474 1.5 jmcneill
475 1.5 jmcneill /* Fields valid for ver >= 3 */
476 1.5 jmcneill uint32_t tx_pkts; /* # of packets transmitted */
477 1.5 jmcneill uint32_t tx_failures; /* # of packets failed */
478 1.5 jmcneill uint32_t rx_ucast_pkts; /* # of unicast packets received */
479 1.5 jmcneill uint32_t rx_mcast_pkts; /* # of multicast packets received */
480 1.5 jmcneill uint32_t tx_rate; /* Rate of last successful tx frame, in bps */
481 1.5 jmcneill uint32_t rx_rate; /* Rate of last successful rx frame, in bps */
482 1.5 jmcneill uint32_t rx_decrypt_succeeds; /* # of packet decrypted successfully */
483 1.5 jmcneill uint32_t rx_decrypt_failures; /* # of packet decrypted failed */
484 1.5 jmcneill
485 1.5 jmcneill /* Fields valid for ver >= 4 */
486 1.5 jmcneill uint32_t tx_tot_pkts; /* # of tx pkts (ucast + mcast) */
487 1.5 jmcneill uint32_t rx_tot_pkts; /* # of data packets recvd (uni + mcast) */
488 1.5 jmcneill uint32_t tx_mcast_pkts; /* # of mcast pkts txed */
489 1.5 jmcneill uint64_t tx_tot_bytes; /* data bytes txed (ucast + mcast) */
490 1.5 jmcneill uint64_t rx_tot_bytes; /* data bytes recvd (ucast + mcast) */
491 1.5 jmcneill uint64_t tx_ucast_bytes; /* data bytes txed (ucast) */
492 1.5 jmcneill uint64_t tx_mcast_bytes; /* # data bytes txed (mcast) */
493 1.5 jmcneill uint64_t rx_ucast_bytes; /* data bytes recvd (ucast) */
494 1.5 jmcneill uint64_t rx_mcast_bytes; /* data bytes recvd (mcast) */
495 1.5 jmcneill int8_t rssi[BWFM_ANT_MAX]; /* per antenna rssi */
496 1.5 jmcneill int8_t nf[BWFM_ANT_MAX]; /* per antenna noise floor */
497 1.5 jmcneill uint16_t aid; /* association ID */
498 1.5 jmcneill uint16_t ht_capabilities; /* advertised ht caps */
499 1.5 jmcneill uint16_t vht_flags; /* converted vht flags */
500 1.5 jmcneill uint32_t tx_pkts_retry_cnt; /* # of frames where a retry was
501 1.5 jmcneill * exhausted.
502 1.5 jmcneill */
503 1.5 jmcneill uint32_t tx_pkts_retry_exhausted; /* # of user frames where a retry
504 1.5 jmcneill * was exhausted
505 1.5 jmcneill */
506 1.5 jmcneill int8_t rx_lastpkt_rssi[BWFM_ANT_MAX]; /* Per antenna RSSI of last
507 1.5 jmcneill * received data frame.
508 1.5 jmcneill */
509 1.5 jmcneill /* TX WLAN retry/failure statistics:
510 1.5 jmcneill * Separated for host requested frames and locally generated frames.
511 1.5 jmcneill * Include unicast frame only where the retries/failures can be counted.
512 1.5 jmcneill */
513 1.5 jmcneill uint32_t tx_pkts_total; /* # user frames sent successfully */
514 1.5 jmcneill uint32_t tx_pkts_retries; /* # user frames retries */
515 1.5 jmcneill uint32_t tx_pkts_fw_total; /* # FW generated sent successfully */
516 1.5 jmcneill uint32_t tx_pkts_fw_retries; /* # retries for FW generated frames */
517 1.5 jmcneill uint32_t tx_pkts_fw_retry_exhausted; /* # FW generated where a retry
518 1.5 jmcneill * was exhausted
519 1.5 jmcneill */
520 1.5 jmcneill uint32_t rx_pkts_retried; /* # rx with retry bit set */
521 1.5 jmcneill uint32_t tx_rate_fallback; /* lowest fallback TX rate */
522 1.5 jmcneill
523 1.5 jmcneill union {
524 1.5 jmcneill struct {
525 1.5 jmcneill struct bwfm_sta_rateset_v5 rateset_adv;
526 1.5 jmcneill } v5;
527 1.5 jmcneill
528 1.5 jmcneill struct {
529 1.5 jmcneill uint32_t rx_dur_total; /* user RX duration (estimate) */
530 1.5 jmcneill uint16_t chanspec;
531 1.5 jmcneill uint16_t pad_1;
532 1.5 jmcneill struct bwfm_sta_rateset_v7 rateset_adv;
533 1.5 jmcneill uint16_t wpauth; /* authentication type */
534 1.5 jmcneill uint8_t algo; /* crypto alogorithm */
535 1.5 jmcneill uint8_t pad_2;
536 1.5 jmcneill uint32_t tx_rspec;/* Rate of last successful tx frame */
537 1.5 jmcneill uint32_t rx_rspec;/* Rate of last successful rx frame */
538 1.5 jmcneill uint32_t wnm_cap;
539 1.5 jmcneill } v7;
540 1.5 jmcneill };
541 1.5 jmcneill };
542 1.5 jmcneill
543 1.1 jmcneill struct bwfm_ssid {
544 1.1 jmcneill uint32_t len;
545 1.1 jmcneill uint8_t ssid[BWFM_MAX_SSID_LEN];
546 1.1 jmcneill };
547 1.1 jmcneill
548 1.1 jmcneill struct bwfm_scan_params {
549 1.1 jmcneill struct bwfm_ssid ssid;
550 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
551 1.1 jmcneill uint8_t bss_type;
552 1.1 jmcneill #define DOT11_BSSTYPE_ANY 2
553 1.1 jmcneill uint8_t scan_type;
554 1.3 maya #define BWFM_SCANTYPE_ACTIVE 0
555 1.3 maya #define BWFM_SCANTYPE_PASSIVE 1
556 1.3 maya #define BWFM_SCANTYPE_DEFAULT 0xff
557 1.1 jmcneill uint32_t nprobes;
558 1.1 jmcneill uint32_t active_time;
559 1.1 jmcneill uint32_t passive_time;
560 1.1 jmcneill uint32_t home_time;
561 1.1 jmcneill uint32_t channel_num;
562 1.1 jmcneill uint16_t channel_list[];
563 1.1 jmcneill };
564 1.1 jmcneill
565 1.1 jmcneill struct bwfm_scan_results {
566 1.1 jmcneill uint32_t buflen;
567 1.1 jmcneill uint32_t version;
568 1.1 jmcneill uint32_t count;
569 1.1 jmcneill struct bwfm_bss_info bss_info[];
570 1.1 jmcneill };
571 1.1 jmcneill
572 1.1 jmcneill struct bwfm_escan_params {
573 1.1 jmcneill uint32_t version;
574 1.1 jmcneill #define BWFM_ESCAN_REQ_VERSION 1
575 1.1 jmcneill uint16_t action;
576 1.1 jmcneill #define WL_ESCAN_ACTION_START 1
577 1.1 jmcneill #define WL_ESCAN_ACTION_CONTINUE 2
578 1.1 jmcneill #define WL_ESCAN_ACTION_ABORT 3
579 1.1 jmcneill uint16_t sync_id;
580 1.1 jmcneill struct bwfm_scan_params scan_params;
581 1.1 jmcneill };
582 1.1 jmcneill
583 1.1 jmcneill struct bwfm_escan_results {
584 1.1 jmcneill uint32_t buflen;
585 1.1 jmcneill uint32_t version;
586 1.1 jmcneill uint16_t sync_id;
587 1.1 jmcneill uint16_t bss_count;
588 1.1 jmcneill struct bwfm_bss_info bss_info[];
589 1.1 jmcneill };
590 1.1 jmcneill
591 1.1 jmcneill struct bwfm_assoc_params {
592 1.1 jmcneill uint8_t bssid[ETHER_ADDR_LEN];
593 1.6 mlelstv uint16_t pad;
594 1.1 jmcneill uint32_t chanspec_num;
595 1.1 jmcneill uint16_t chanspec_list[];
596 1.1 jmcneill };
597 1.1 jmcneill
598 1.1 jmcneill struct bwfm_join_pref_params {
599 1.1 jmcneill uint8_t type;
600 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI 1
601 1.1 jmcneill #define BWFM_JOIN_PREF_WPA 2
602 1.1 jmcneill #define BWFM_JOIN_PREF_BAND 3
603 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI_DELTA 4
604 1.1 jmcneill uint8_t len;
605 1.1 jmcneill uint8_t rssi_gain;
606 1.1 jmcneill #define BWFM_JOIN_PREF_RSSI_BOOST 8
607 1.1 jmcneill uint8_t band;
608 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_AUTO 0
609 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_5G 1
610 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_2G 2
611 1.1 jmcneill #define BWFM_JOIN_PREF_BAND_ALL 3
612 1.1 jmcneill };
613 1.1 jmcneill
614 1.1 jmcneill struct bwfm_join_params {
615 1.1 jmcneill struct bwfm_ssid ssid;
616 1.1 jmcneill struct bwfm_assoc_params assoc;
617 1.1 jmcneill };
618 1.1 jmcneill
619 1.1 jmcneill struct bwfm_join_scan_params {
620 1.1 jmcneill uint8_t scan_type;
621 1.6 mlelstv uint8_t pad[3];
622 1.1 jmcneill uint32_t nprobes;
623 1.1 jmcneill uint32_t active_time;
624 1.1 jmcneill uint32_t passive_time;
625 1.1 jmcneill uint32_t home_time;
626 1.1 jmcneill };
627 1.1 jmcneill
628 1.1 jmcneill struct bwfm_ext_join_params {
629 1.1 jmcneill struct bwfm_ssid ssid;
630 1.1 jmcneill struct bwfm_join_scan_params scan;
631 1.1 jmcneill struct bwfm_assoc_params assoc;
632 1.1 jmcneill };
633 1.1 jmcneill
634 1.1 jmcneill struct bwfm_wsec_pmk {
635 1.1 jmcneill uint16_t key_len;
636 1.1 jmcneill #define BWFM_WSEC_MAX_PSK_LEN 32
637 1.1 jmcneill uint16_t flags;
638 1.1 jmcneill #define BWFM_WSEC_PASSPHRASE (1 << 0)
639 1.1 jmcneill uint8_t key[2 * BWFM_WSEC_MAX_PSK_LEN + 1];
640 1.1 jmcneill };
641 1.1 jmcneill
642 1.1 jmcneill struct bwfm_wsec_key {
643 1.1 jmcneill uint32_t index;
644 1.1 jmcneill uint32_t len;
645 1.1 jmcneill uint8_t data[32];
646 1.1 jmcneill uint32_t pad_1[18];
647 1.1 jmcneill uint32_t algo;
648 1.1 jmcneill #define BWFM_CRYPTO_ALGO_OFF 0
649 1.1 jmcneill #define BWFM_CRYPTO_ALGO_WEP1 1
650 1.1 jmcneill #define BWFM_CRYPTO_ALGO_TKIP 2
651 1.1 jmcneill #define BWFM_CRYPTO_ALGO_WEP128 3
652 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_CCM 4
653 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_RESERVED1 5
654 1.1 jmcneill #define BWFM_CRYPTO_ALGO_AES_RESERVED2 6
655 1.1 jmcneill uint32_t flags;
656 1.6 mlelstv #define BWFM_WSEC_PRIMARY_KEY (1 << 1)
657 1.6 mlelstv #define BWFM_PRIMARY_KEY BWFM_WSEC_PRIMARY_KEY
658 1.1 jmcneill uint32_t pad_2[3];
659 1.1 jmcneill uint32_t iv_initialized;
660 1.1 jmcneill uint32_t pad_3;
661 1.6 mlelstv /* Rx IV */
662 1.1 jmcneill struct {
663 1.1 jmcneill uint32_t hi;
664 1.1 jmcneill uint16_t lo;
665 1.6 mlelstv uint16_t pad_4;
666 1.1 jmcneill } rxiv;
667 1.6 mlelstv uint32_t pad_5[2];
668 1.1 jmcneill uint8_t ea[IEEE80211_ADDR_LEN];
669 1.1 jmcneill };
670 1.1 jmcneill
671 1.1 jmcneill #define BWFM_BAND_5G 1
672 1.1 jmcneill #define BWFM_BAND_2G 2
673 1.1 jmcneill
674 1.1 jmcneill /* Event handling */
675 1.1 jmcneill enum bwfm_fweh_event_code {
676 1.1 jmcneill BWFM_E_SET_SSID = 0,
677 1.1 jmcneill BWFM_E_JOIN = 1,
678 1.1 jmcneill BWFM_E_START = 2,
679 1.1 jmcneill BWFM_E_AUTH = 3,
680 1.1 jmcneill BWFM_E_AUTH_IND = 4,
681 1.1 jmcneill BWFM_E_DEAUTH = 5,
682 1.1 jmcneill BWFM_E_DEAUTH_IND = 6,
683 1.1 jmcneill BWFM_E_ASSOC = 7,
684 1.1 jmcneill BWFM_E_ASSOC_IND = 8,
685 1.1 jmcneill BWFM_E_REASSOC = 9,
686 1.1 jmcneill BWFM_E_REASSOC_IND = 10,
687 1.1 jmcneill BWFM_E_DISASSOC = 11,
688 1.1 jmcneill BWFM_E_DISASSOC_IND = 12,
689 1.1 jmcneill BWFM_E_QUIET_START = 13,
690 1.1 jmcneill BWFM_E_QUIET_END = 14,
691 1.1 jmcneill BWFM_E_BEACON_RX = 15,
692 1.1 jmcneill BWFM_E_LINK = 16,
693 1.1 jmcneill BWFM_E_MIC_ERROR = 17,
694 1.1 jmcneill BWFM_E_NDIS_LINK = 18,
695 1.1 jmcneill BWFM_E_ROAM = 19,
696 1.1 jmcneill BWFM_E_TXFAIL = 20,
697 1.1 jmcneill BWFM_E_PMKID_CACHE = 21,
698 1.1 jmcneill BWFM_E_RETROGRADE_TSF = 22,
699 1.1 jmcneill BWFM_E_PRUNE = 23,
700 1.1 jmcneill BWFM_E_AUTOAUTH = 24,
701 1.1 jmcneill BWFM_E_EAPOL_MSG = 25,
702 1.1 jmcneill BWFM_E_SCAN_COMPLETE = 26,
703 1.1 jmcneill BWFM_E_ADDTS_IND = 27,
704 1.1 jmcneill BWFM_E_DELTS_IND = 28,
705 1.1 jmcneill BWFM_E_BCNSENT_IND = 29,
706 1.1 jmcneill BWFM_E_BCNRX_MSG = 30,
707 1.1 jmcneill BWFM_E_BCNLOST_MSG = 31,
708 1.1 jmcneill BWFM_E_ROAM_PREP = 32,
709 1.1 jmcneill BWFM_E_PFN_NET_FOUND = 33,
710 1.1 jmcneill BWFM_E_PFN_NET_LOST = 34,
711 1.1 jmcneill BWFM_E_RESET_COMPLETE = 35,
712 1.1 jmcneill BWFM_E_JOIN_START = 36,
713 1.1 jmcneill BWFM_E_ROAM_START = 37,
714 1.1 jmcneill BWFM_E_ASSOC_START = 38,
715 1.1 jmcneill BWFM_E_IBSS_ASSOC = 39,
716 1.1 jmcneill BWFM_E_RADIO = 40,
717 1.1 jmcneill BWFM_E_PSM_WATCHDOG = 41,
718 1.1 jmcneill BWFM_E_PROBREQ_MSG = 44,
719 1.1 jmcneill BWFM_E_SCAN_CONFIRM_IND = 45,
720 1.1 jmcneill BWFM_E_PSK_SUP = 46,
721 1.1 jmcneill BWFM_E_COUNTRY_CODE_CHANGED = 47,
722 1.1 jmcneill BWFM_E_EXCEEDED_MEDIUM_TIME = 48,
723 1.1 jmcneill BWFM_E_ICV_ERROR = 49,
724 1.1 jmcneill BWFM_E_UNICAST_DECODE_ERROR = 50,
725 1.1 jmcneill BWFM_E_MULTICAST_DECODE_ERROR = 51,
726 1.1 jmcneill BWFM_E_TRACE = 52,
727 1.1 jmcneill BWFM_E_IF = 54,
728 1.1 jmcneill BWFM_E_P2P_DISC_LISTEN_COMPLETE = 55,
729 1.1 jmcneill BWFM_E_RSSI = 56,
730 1.1 jmcneill BWFM_E_EXTLOG_MSG = 58,
731 1.1 jmcneill BWFM_E_ACTION_FRAME = 59,
732 1.1 jmcneill BWFM_E_ACTION_FRAME_COMPLETE = 60,
733 1.1 jmcneill BWFM_E_PRE_ASSOC_IND = 61,
734 1.1 jmcneill BWFM_E_PRE_REASSOC_IND = 62,
735 1.1 jmcneill BWFM_E_CHANNEL_ADOPTED = 63,
736 1.1 jmcneill BWFM_E_AP_STARTED = 64,
737 1.1 jmcneill BWFM_E_DFS_AP_STOP = 65,
738 1.1 jmcneill BWFM_E_DFS_AP_RESUME = 66,
739 1.1 jmcneill BWFM_E_ESCAN_RESULT = 69,
740 1.1 jmcneill BWFM_E_ACTION_FRAME_OFF_CHAN_COMPLETE = 70,
741 1.1 jmcneill BWFM_E_PROBERESP_MSG = 71,
742 1.1 jmcneill BWFM_E_P2P_PROBEREQ_MSG = 72,
743 1.1 jmcneill BWFM_E_DCS_REQUEST = 73,
744 1.1 jmcneill BWFM_E_FIFO_CREDIT_MAP = 74,
745 1.1 jmcneill BWFM_E_ACTION_FRAME_RX = 75,
746 1.1 jmcneill BWFM_E_TDLS_PEER_EVENT = 92,
747 1.1 jmcneill BWFM_E_BCMC_CREDIT_SUPPORT = 127,
748 1.1 jmcneill BWFM_E_LAST = 139
749 1.1 jmcneill };
750 1.1 jmcneill #define BWFM_EVENT_MASK_LEN (roundup(BWFM_E_LAST, 8) / 8)
751 1.1 jmcneill
752 1.1 jmcneill enum bwfm_fweh_event_status {
753 1.1 jmcneill BWFM_E_STATUS_SUCCESS = 0,
754 1.1 jmcneill BWFM_E_STATUS_FAIL = 1,
755 1.1 jmcneill BWFM_E_STATUS_TIMEOUT = 2,
756 1.1 jmcneill BWFM_E_STATUS_NO_NETWORKS = 3,
757 1.1 jmcneill BWFM_E_STATUS_ABORT = 4,
758 1.1 jmcneill BWFM_E_STATUS_NO_ACK = 5,
759 1.1 jmcneill BWFM_E_STATUS_UNSOLICITED = 6,
760 1.1 jmcneill BWFM_E_STATUS_ATTEMPT = 7,
761 1.1 jmcneill BWFM_E_STATUS_PARTIAL = 8,
762 1.1 jmcneill BWFM_E_STATUS_NEWSCAN = 9,
763 1.1 jmcneill BWFM_E_STATUS_NEWASSOC = 10,
764 1.1 jmcneill BWFM_E_STATUS_11HQUIET = 11,
765 1.1 jmcneill BWFM_E_STATUS_SUPPRESS = 12,
766 1.1 jmcneill BWFM_E_STATUS_NOCHANS = 13,
767 1.1 jmcneill BWFM_E_STATUS_CS_ABORT = 15,
768 1.1 jmcneill BWFM_E_STATUS_ERROR = 16,
769 1.1 jmcneill };
770 1.1 jmcneill
771 1.1 jmcneill struct bwfm_ethhdr {
772 1.1 jmcneill uint16_t subtype;
773 1.1 jmcneill uint16_t length;
774 1.1 jmcneill uint8_t version;
775 1.1 jmcneill uint8_t oui[3];
776 1.1 jmcneill #define BWFM_BRCM_OUI "\x00\x10\x18"
777 1.1 jmcneill uint16_t usr_subtype;
778 1.1 jmcneill #define BWFM_BRCM_SUBTYPE_EVENT 1
779 1.6 mlelstv } __packed;
780 1.1 jmcneill
781 1.1 jmcneill struct bwfm_event_msg {
782 1.1 jmcneill uint16_t version;
783 1.1 jmcneill uint16_t flags;
784 1.1 jmcneill uint32_t event_type;
785 1.1 jmcneill uint32_t status;
786 1.1 jmcneill uint32_t reason;
787 1.1 jmcneill uint32_t auth_type;
788 1.1 jmcneill uint32_t datalen;
789 1.1 jmcneill struct ether_addr addr;
790 1.1 jmcneill char ifname[IFNAMSIZ];
791 1.1 jmcneill uint8_t ifidx;
792 1.1 jmcneill uint8_t bsscfgidx;
793 1.6 mlelstv } __packed;
794 1.1 jmcneill
795 1.1 jmcneill struct bwfm_event {
796 1.1 jmcneill struct ether_header ehdr;
797 1.1 jmcneill #define BWFM_ETHERTYPE_LINK_CTL 0x886c
798 1.1 jmcneill struct bwfm_ethhdr hdr;
799 1.1 jmcneill struct bwfm_event_msg msg;
800 1.1 jmcneill } __packed;
801 1.7 riastrad
802 1.8 mlelstv struct bwfm_dload_data {
803 1.8 mlelstv uint16_t flag;
804 1.8 mlelstv #define BWFM_DLOAD_FLAG_BEGIN (1 << 1)
805 1.8 mlelstv #define BWFM_DLOAD_FLAG_END (1 << 2)
806 1.8 mlelstv #define BWFM_DLOAD_FLAG_HANDLER_VER_1 (1 << 12)
807 1.8 mlelstv #define BWFM_DLOAD_FLAG_HANDLER_VER_MASK (0xf << 12)
808 1.8 mlelstv uint16_t type;
809 1.8 mlelstv #define BWFM_DLOAD_TYPE_CLM 2
810 1.8 mlelstv uint32_t len;
811 1.8 mlelstv #define BWFM_DLOAD_MAX_LEN 1400
812 1.8 mlelstv uint32_t crc;
813 1.8 mlelstv uint8_t data[];
814 1.8 mlelstv } __packed;
815 1.8 mlelstv
816 1.7 riastrad #endif /* _DEV_IC_BWFMREG_H */
817