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