1 1.7 andvar /* $NetBSD: if_upgtvar.h,v 1.7 2021/08/21 11:55:25 andvar Exp $ */ 2 1.1 tsutsui /* $OpenBSD: if_upgtvar.h,v 1.15 2009/08/10 20:02:19 deraadt Exp $ */ 3 1.1 tsutsui 4 1.1 tsutsui /* 5 1.1 tsutsui * Copyright (c) 2007 Marcus Glocker <mglocker (at) openbsd.org> 6 1.1 tsutsui * 7 1.1 tsutsui * Permission to use, copy, modify, and distribute this software for any 8 1.1 tsutsui * purpose with or without fee is hereby granted, provided that the above 9 1.1 tsutsui * copyright notice and this permission notice appear in all copies. 10 1.1 tsutsui * 11 1.1 tsutsui * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 1.1 tsutsui * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 1.1 tsutsui * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 1.1 tsutsui * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 1.1 tsutsui * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 1.1 tsutsui * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 1.1 tsutsui * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 1.1 tsutsui */ 19 1.1 tsutsui 20 1.1 tsutsui struct upgt_softc; 21 1.1 tsutsui 22 1.1 tsutsui /* 23 1.1 tsutsui * Radio tap. 24 1.1 tsutsui */ 25 1.1 tsutsui struct upgt_rx_radiotap_header { 26 1.1 tsutsui struct ieee80211_radiotap_header wr_ihdr; 27 1.1 tsutsui uint8_t wr_flags; 28 1.1 tsutsui uint8_t wr_rate; 29 1.1 tsutsui uint16_t wr_chan_freq; 30 1.1 tsutsui uint16_t wr_chan_flags; 31 1.1 tsutsui uint8_t wr_antsignal; 32 1.4 mrg }; 33 1.1 tsutsui 34 1.1 tsutsui #define UPGT_RX_RADIOTAP_PRESENT \ 35 1.1 tsutsui ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 36 1.1 tsutsui (1 << IEEE80211_RADIOTAP_RATE) | \ 37 1.1 tsutsui (1 << IEEE80211_RADIOTAP_CHANNEL) | \ 38 1.1 tsutsui (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL)) 39 1.1 tsutsui 40 1.1 tsutsui struct upgt_tx_radiotap_header { 41 1.1 tsutsui struct ieee80211_radiotap_header wt_ihdr; 42 1.1 tsutsui uint8_t wt_flags; 43 1.1 tsutsui uint8_t wt_rate; 44 1.1 tsutsui uint16_t wt_chan_freq; 45 1.1 tsutsui uint16_t wt_chan_flags; 46 1.4 mrg }; 47 1.1 tsutsui 48 1.1 tsutsui #define UPGT_TX_RADIOTAP_PRESENT \ 49 1.1 tsutsui ((1 << IEEE80211_RADIOTAP_FLAGS) | \ 50 1.1 tsutsui (1 << IEEE80211_RADIOTAP_RATE) | \ 51 1.1 tsutsui (1 << IEEE80211_RADIOTAP_CHANNEL)) 52 1.1 tsutsui 53 1.1 tsutsui /* 54 1.1 tsutsui * General values. 55 1.1 tsutsui */ 56 1.1 tsutsui #define UPGT_IFACE_INDEX 0 57 1.1 tsutsui #define UPGT_CONFIG_NO 1 58 1.1 tsutsui #define UPGT_USB_TIMEOUT 1000 59 1.1 tsutsui #define UPGT_FIRMWARE_TIMEOUT 10 60 1.1 tsutsui 61 1.1 tsutsui #define UPGT_MEMADDR_FIRMWARE_START 0x00020000 /* 512 bytes large */ 62 1.1 tsutsui #define UPGT_MEMSIZE_FRAME_HEAD 0x0070 63 1.1 tsutsui #define UPGT_MEMSIZE_RX 0x3500 64 1.1 tsutsui 65 1.1 tsutsui #define UPGT_TX_COUNT 6 66 1.1 tsutsui 67 1.1 tsutsui /* device flags */ 68 1.1 tsutsui #define UPGT_DEVICE_ATTACHED (1 << 0) 69 1.1 tsutsui 70 1.1 tsutsui /* leds */ 71 1.1 tsutsui #define UPGT_LED_OFF 0 72 1.1 tsutsui #define UPGT_LED_ON 1 73 1.1 tsutsui #define UPGT_LED_BLINK 2 74 1.1 tsutsui 75 1.1 tsutsui /* 76 1.1 tsutsui * USB xfers. 77 1.1 tsutsui */ 78 1.1 tsutsui struct upgt_data { 79 1.1 tsutsui struct upgt_softc *sc; 80 1.2 skrll struct usbd_xfer *xfer; 81 1.1 tsutsui uint8_t *buf; 82 1.1 tsutsui struct ieee80211_node *ni; 83 1.1 tsutsui struct mbuf *m; 84 1.1 tsutsui uint32_t addr; 85 1.1 tsutsui }; 86 1.1 tsutsui 87 1.1 tsutsui /* 88 1.1 tsutsui * Firmware. 89 1.1 tsutsui */ 90 1.1 tsutsui #define UPGT_FW_BLOCK_SIZE 512 91 1.1 tsutsui 92 1.1 tsutsui #define UPGT_BRA_FWTYPE_SIZE 4 93 1.1 tsutsui #define UPGT_BRA_FWTYPE_LM86 "LM86" 94 1.1 tsutsui #define UPGT_BRA_FWTYPE_LM87 "LM87" 95 1.1 tsutsui #define UPGT_BRA_FWTYPE_FMAC "FMAC" 96 1.1 tsutsui enum upgt_fw_type { 97 1.1 tsutsui UPGT_FWTYPE_LM86, 98 1.1 tsutsui UPGT_FWTYPE_LM87, 99 1.1 tsutsui UPGT_FWTYPE_FMAC 100 1.1 tsutsui }; 101 1.1 tsutsui 102 1.1 tsutsui #define UPGT_BRA_TYPE_FW 0x80000001 103 1.1 tsutsui #define UPGT_BRA_TYPE_VERSION 0x80000002 104 1.1 tsutsui #define UPGT_BRA_TYPE_DEPIF 0x80000003 105 1.1 tsutsui #define UPGT_BRA_TYPE_EXPIF 0x80000004 106 1.1 tsutsui #define UPGT_BRA_TYPE_DESCR 0x80000101 107 1.1 tsutsui #define UPGT_BRA_TYPE_END 0xff0000ff 108 1.1 tsutsui struct upgt_fw_bra_option { 109 1.1 tsutsui uint32_t type; 110 1.1 tsutsui uint32_t len; 111 1.1 tsutsui uint8_t data[]; 112 1.1 tsutsui } __packed; 113 1.1 tsutsui 114 1.1 tsutsui struct upgt_fw_bra_descr { 115 1.1 tsutsui uint32_t unknown1; 116 1.1 tsutsui uint32_t memaddr_space_start; 117 1.1 tsutsui uint32_t memaddr_space_end; 118 1.1 tsutsui uint32_t unknown2; 119 1.1 tsutsui uint32_t unknown3; 120 1.1 tsutsui uint8_t rates[20]; 121 1.1 tsutsui } __packed; 122 1.1 tsutsui 123 1.1 tsutsui #define UPGT_X2_SIGNATURE_SIZE 4 124 1.1 tsutsui #define UPGT_X2_SIGNATURE "x2 " 125 1.1 tsutsui struct upgt_fw_x2_header { 126 1.1 tsutsui uint8_t signature[4]; 127 1.1 tsutsui uint32_t startaddr; 128 1.1 tsutsui uint32_t len; 129 1.1 tsutsui uint32_t crc; 130 1.1 tsutsui } __packed; 131 1.1 tsutsui 132 1.1 tsutsui /* 133 1.1 tsutsui * EEPROM. 134 1.1 tsutsui */ 135 1.1 tsutsui #define UPGT_EEPROM_SIZE 8192 136 1.1 tsutsui #define UPGT_EEPROM_BLOCK_SIZE 1020 137 1.1 tsutsui 138 1.1 tsutsui struct upgt_eeprom_header { 139 1.1 tsutsui /* 14 bytes */ 140 1.1 tsutsui uint32_t magic; 141 1.1 tsutsui uint16_t pad1; 142 1.1 tsutsui uint16_t preamble_len; 143 1.1 tsutsui uint32_t pad2; 144 1.1 tsutsui /* data */ 145 1.1 tsutsui } __packed; 146 1.1 tsutsui 147 1.1 tsutsui #define UPGT_EEPROM_TYPE_END 0x0000 148 1.1 tsutsui #define UPGT_EEPROM_TYPE_NAME 0x0001 149 1.1 tsutsui #define UPGT_EEPROM_TYPE_SERIAL 0x0003 150 1.1 tsutsui #define UPGT_EEPROM_TYPE_MAC 0x0101 151 1.1 tsutsui #define UPGT_EEPROM_TYPE_HWRX 0x1001 152 1.1 tsutsui #define UPGT_EEPROM_TYPE_CHIP 0x1002 153 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ3 0x1903 154 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ4 0x1904 155 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ5 0x1905 156 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ6 0x1906 157 1.1 tsutsui #define UPGT_EEPROM_TYPE_OFF 0xffff 158 1.1 tsutsui struct upgt_eeprom_option { 159 1.1 tsutsui uint16_t len; 160 1.1 tsutsui uint16_t type; 161 1.1 tsutsui uint8_t data[]; 162 1.1 tsutsui /* data */ 163 1.1 tsutsui } __packed; 164 1.1 tsutsui 165 1.1 tsutsui #define UPGT_EEPROM_RX_CONST 0x88 166 1.1 tsutsui struct upgt_eeprom_option_hwrx { 167 1.1 tsutsui uint32_t pad1; 168 1.1 tsutsui uint8_t rxfilter; 169 1.1 tsutsui uint8_t pad2[15]; 170 1.1 tsutsui } __packed; 171 1.1 tsutsui 172 1.1 tsutsui struct upgt_eeprom_freq3_header { 173 1.1 tsutsui uint8_t flags; 174 1.1 tsutsui uint8_t elements; 175 1.1 tsutsui } __packed; 176 1.1 tsutsui 177 1.1 tsutsui struct upgt_eeprom_freq4_header { 178 1.1 tsutsui uint8_t flags; 179 1.1 tsutsui uint8_t elements; 180 1.1 tsutsui uint8_t settings; 181 1.1 tsutsui uint8_t type; 182 1.1 tsutsui } __packed; 183 1.1 tsutsui 184 1.1 tsutsui struct upgt_eeprom_freq4_1 { 185 1.1 tsutsui uint16_t freq; 186 1.1 tsutsui uint8_t data[50]; 187 1.1 tsutsui } __packed; 188 1.1 tsutsui 189 1.1 tsutsui struct upgt_eeprom_freq4_2 { 190 1.1 tsutsui uint16_t head; 191 1.1 tsutsui uint8_t subtails[4]; 192 1.1 tsutsui uint8_t tail; 193 1.1 tsutsui } __packed; 194 1.1 tsutsui 195 1.1 tsutsui /* 196 1.1 tsutsui * LMAC protocol. 197 1.1 tsutsui */ 198 1.1 tsutsui struct upgt_lmac_mem { 199 1.1 tsutsui uint32_t addr; 200 1.1 tsutsui uint32_t chksum; 201 1.1 tsutsui } __packed; 202 1.1 tsutsui 203 1.1 tsutsui #define UPGT_H1_FLAGS_TX_MGMT 0x00 /* for TX: mgmt frame */ 204 1.1 tsutsui #define UPGT_H1_FLAGS_TX_NO_CALLBACK 0x01 /* for TX: no USB callback */ 205 1.1 tsutsui #define UPGT_H1_FLAGS_TX_DATA 0x10 /* for TX: data frame */ 206 1.1 tsutsui #define UPGT_H1_TYPE_RX_DATA 0x00 /* 802.11 RX data frame */ 207 1.1 tsutsui #define UPGT_H1_TYPE_RX_DATA_MGMT 0x04 /* 802.11 RX mgmt frame */ 208 1.1 tsutsui #define UPGT_H1_TYPE_TX_DATA 0x40 /* 802.11 TX data frame */ 209 1.1 tsutsui #define UPGT_H1_TYPE_CTRL 0x80 /* control frame */ 210 1.1 tsutsui struct upgt_lmac_h1 { 211 1.1 tsutsui /* 4 bytes */ 212 1.1 tsutsui uint8_t flags; 213 1.1 tsutsui uint8_t type; 214 1.1 tsutsui uint16_t len; 215 1.1 tsutsui } __packed; 216 1.1 tsutsui 217 1.1 tsutsui #define UPGT_H2_TYPE_TX_ACK_NO 0x0000 218 1.1 tsutsui #define UPGT_H2_TYPE_TX_ACK_YES 0x0001 219 1.1 tsutsui #define UPGT_H2_TYPE_MACFILTER 0x0000 220 1.1 tsutsui #define UPGT_H2_TYPE_CHANNEL 0x0001 221 1.1 tsutsui #define UPGT_H2_TYPE_TX_DONE 0x0008 222 1.1 tsutsui #define UPGT_H2_TYPE_STATS 0x000a 223 1.1 tsutsui #define UPGT_H2_TYPE_EEPROM 0x000c 224 1.1 tsutsui #define UPGT_H2_TYPE_LED 0x000d 225 1.1 tsutsui #define UPGT_H2_FLAGS_TX_ACK_NO 0x0101 226 1.1 tsutsui #define UPGT_H2_FLAGS_TX_ACK_YES 0x0707 227 1.1 tsutsui struct upgt_lmac_h2 { 228 1.1 tsutsui /* 8 bytes */ 229 1.1 tsutsui uint32_t reqid; 230 1.1 tsutsui uint16_t type; 231 1.1 tsutsui uint16_t flags; 232 1.1 tsutsui } __packed; 233 1.1 tsutsui 234 1.1 tsutsui struct upgt_lmac_header { 235 1.1 tsutsui /* 12 bytes */ 236 1.1 tsutsui struct upgt_lmac_h1 header1; 237 1.1 tsutsui struct upgt_lmac_h2 header2; 238 1.1 tsutsui } __packed; 239 1.1 tsutsui 240 1.1 tsutsui struct upgt_lmac_eeprom { 241 1.1 tsutsui /* 16 bytes */ 242 1.1 tsutsui struct upgt_lmac_h1 header1; 243 1.1 tsutsui struct upgt_lmac_h2 header2; 244 1.1 tsutsui uint16_t offset; 245 1.1 tsutsui uint16_t len; 246 1.1 tsutsui /* data */ 247 1.1 tsutsui } __packed; 248 1.1 tsutsui 249 1.1 tsutsui #define UPGT_FILTER_TYPE_NONE 0x0000 250 1.1 tsutsui #define UPGT_FILTER_TYPE_STA 0x0001 251 1.1 tsutsui #define UPGT_FILTER_TYPE_IBSS 0x0002 252 1.1 tsutsui #define UPGT_FILTER_TYPE_HOSTAP 0x0004 253 1.1 tsutsui #define UPGT_FILTER_TYPE_MONITOR 0x0010 254 1.1 tsutsui #define UPGT_FILTER_TYPE_RESET 0x0020 255 1.1 tsutsui #define UPGT_FILTER_UNKNOWN1 0x0002 256 1.1 tsutsui #define UPGT_FILTER_UNKNOWN2 0x0ca8 257 1.1 tsutsui #define UPGT_FILTER_UNKNOWN3 0xffff 258 1.1 tsutsui struct upgt_lmac_filter { 259 1.1 tsutsui struct upgt_lmac_h1 header1; 260 1.1 tsutsui struct upgt_lmac_h2 header2; 261 1.1 tsutsui /* 32 bytes */ 262 1.1 tsutsui uint16_t type; 263 1.1 tsutsui uint8_t dst[IEEE80211_ADDR_LEN]; 264 1.1 tsutsui uint8_t src[IEEE80211_ADDR_LEN]; 265 1.1 tsutsui uint16_t unknown1; 266 1.1 tsutsui uint32_t rxaddr; 267 1.1 tsutsui uint16_t unknown2; 268 1.1 tsutsui uint32_t rxhw; 269 1.1 tsutsui uint16_t unknown3; 270 1.1 tsutsui uint32_t unknown4; 271 1.1 tsutsui } __packed; 272 1.1 tsutsui 273 1.7 andvar /* frequency 3 data */ 274 1.1 tsutsui struct upgt_lmac_freq3 { 275 1.1 tsutsui uint16_t freq; 276 1.1 tsutsui uint8_t data[6]; 277 1.1 tsutsui } __packed; 278 1.1 tsutsui 279 1.7 andvar /* frequency 4 data */ 280 1.1 tsutsui struct upgt_lmac_freq4 { 281 1.1 tsutsui struct upgt_eeprom_freq4_2 cmd; 282 1.1 tsutsui uint8_t pad; 283 1.1 tsutsui }; 284 1.1 tsutsui 285 1.7 andvar /* frequency 6 data */ 286 1.1 tsutsui struct upgt_lmac_freq6 { 287 1.1 tsutsui uint16_t freq; 288 1.1 tsutsui uint8_t data[8]; 289 1.1 tsutsui } __packed; 290 1.1 tsutsui 291 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN1 0x0001 292 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN2 0x0000 293 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN3 0x48 294 1.1 tsutsui struct upgt_lmac_channel { 295 1.1 tsutsui struct upgt_lmac_h1 header1; 296 1.1 tsutsui struct upgt_lmac_h2 header2; 297 1.1 tsutsui /* 112 bytes */ 298 1.1 tsutsui uint16_t unknown1; 299 1.1 tsutsui uint16_t unknown2; 300 1.1 tsutsui uint8_t pad1[20]; 301 1.1 tsutsui struct upgt_lmac_freq6 freq6; 302 1.1 tsutsui uint8_t settings; 303 1.1 tsutsui uint8_t unknown3; 304 1.1 tsutsui uint8_t freq3_1[4]; 305 1.1 tsutsui struct upgt_lmac_freq4 freq4[8]; 306 1.1 tsutsui uint8_t freq3_2[4]; 307 1.1 tsutsui uint32_t pad2; 308 1.1 tsutsui } __packed; 309 1.1 tsutsui 310 1.1 tsutsui #define UPGT_LED_MODE_SET 0x0003 311 1.1 tsutsui #define UPGT_LED_ACTION_OFF 0x0002 312 1.1 tsutsui #define UPGT_LED_ACTION_ON 0x0003 313 1.1 tsutsui #define UPGT_LED_ACTION_TMP_DUR 100 /* ms */ 314 1.1 tsutsui struct upgt_lmac_led { 315 1.1 tsutsui struct upgt_lmac_h1 header1; 316 1.1 tsutsui struct upgt_lmac_h2 header2; 317 1.1 tsutsui uint16_t mode; 318 1.1 tsutsui uint16_t action_fix; 319 1.1 tsutsui uint16_t action_tmp; 320 1.1 tsutsui uint16_t action_tmp_dur; 321 1.1 tsutsui } __packed; 322 1.1 tsutsui 323 1.1 tsutsui struct upgt_lmac_stats { 324 1.1 tsutsui struct upgt_lmac_h1 header1; 325 1.1 tsutsui struct upgt_lmac_h2 header2; 326 1.1 tsutsui uint8_t data[76]; 327 1.1 tsutsui } __packed; 328 1.1 tsutsui 329 1.1 tsutsui struct upgt_lmac_rx_desc { 330 1.1 tsutsui struct upgt_lmac_h1 header1; 331 1.1 tsutsui /* 16 bytes */ 332 1.1 tsutsui uint16_t freq; 333 1.1 tsutsui uint8_t unknown1; 334 1.1 tsutsui uint8_t rate; 335 1.1 tsutsui uint8_t rssi; 336 1.1 tsutsui uint8_t pad; 337 1.1 tsutsui uint16_t unknown2; 338 1.1 tsutsui uint32_t timestamp; 339 1.1 tsutsui uint32_t unknown3; 340 1.1 tsutsui uint8_t data[]; 341 1.1 tsutsui } __packed; 342 1.1 tsutsui 343 1.1 tsutsui #define UPGT_TX_DESC_KEY_EXISTS 0x01 344 1.1 tsutsui struct upgt_lmac_tx_desc_wep { 345 1.1 tsutsui uint8_t key_exists; 346 1.1 tsutsui uint8_t key_len; 347 1.1 tsutsui uint8_t key_val[16]; 348 1.1 tsutsui } __packed; 349 1.1 tsutsui 350 1.1 tsutsui #define UPGT_TX_DESC_TYPE_BEACON 0x00000000 351 1.1 tsutsui #define UPGT_TX_DESC_TYPE_PROBE 0x00000001 352 1.1 tsutsui #define UPGT_TX_DESC_TYPE_MGMT 0x00000002 353 1.1 tsutsui #define UPGT_TX_DESC_TYPE_DATA 0x00000004 354 1.1 tsutsui #define UPGT_TX_DESC_PAD3_SIZE 2 355 1.1 tsutsui struct upgt_lmac_tx_desc { 356 1.1 tsutsui struct upgt_lmac_h1 header1; 357 1.1 tsutsui struct upgt_lmac_h2 header2; 358 1.1 tsutsui uint8_t rates[8]; 359 1.1 tsutsui uint16_t pad1; 360 1.1 tsutsui struct upgt_lmac_tx_desc_wep wep_key; 361 1.1 tsutsui uint32_t type; 362 1.1 tsutsui uint32_t pad2; 363 1.1 tsutsui uint32_t unknown1; 364 1.1 tsutsui uint32_t unknown2; 365 1.1 tsutsui uint8_t pad3[2]; 366 1.1 tsutsui /* 802.11 frame data */ 367 1.1 tsutsui } __packed; 368 1.1 tsutsui 369 1.1 tsutsui #define UPGT_TX_DONE_DESC_STATUS_OK 0x0001 370 1.1 tsutsui struct upgt_lmac_tx_done_desc { 371 1.1 tsutsui struct upgt_lmac_h1 header1; 372 1.1 tsutsui struct upgt_lmac_h2 header2; 373 1.1 tsutsui uint16_t status; 374 1.1 tsutsui uint16_t rssi; 375 1.1 tsutsui uint16_t seq; 376 1.1 tsutsui uint16_t unknown; 377 1.1 tsutsui } __packed; 378 1.1 tsutsui 379 1.1 tsutsui /* 380 1.1 tsutsui * Prism memory. 381 1.1 tsutsui */ 382 1.1 tsutsui struct upgt_memory_page { 383 1.1 tsutsui uint8_t used; 384 1.1 tsutsui uint32_t addr; 385 1.1 tsutsui } __packed; 386 1.1 tsutsui 387 1.1 tsutsui #define UPGT_MEMORY_MAX_PAGES 8 388 1.1 tsutsui struct upgt_memory { 389 1.1 tsutsui uint8_t pages; 390 1.1 tsutsui struct upgt_memory_page page[UPGT_MEMORY_MAX_PAGES]; 391 1.1 tsutsui } __packed; 392 1.1 tsutsui 393 1.1 tsutsui /* 394 1.1 tsutsui * Softc. 395 1.1 tsutsui */ 396 1.1 tsutsui struct upgt_softc { 397 1.1 tsutsui device_t sc_dev; 398 1.1 tsutsui struct ethercom sc_ec; 399 1.1 tsutsui #define sc_if sc_ec.ec_if 400 1.1 tsutsui 401 1.3 maxv enum { 402 1.3 maxv UPGT_INIT_NONE, 403 1.3 maxv UPGT_INIT_INITED 404 1.3 maxv } sc_init_state; 405 1.2 skrll struct usbd_device * sc_udev; 406 1.2 skrll struct usbd_interface * sc_iface; 407 1.1 tsutsui int sc_rx_no; 408 1.1 tsutsui int sc_tx_no; 409 1.1 tsutsui struct usb_task sc_task_newstate; 410 1.1 tsutsui struct usb_task sc_task_tx; 411 1.2 skrll struct usbd_pipe * sc_rx_pipeh; 412 1.2 skrll struct usbd_pipe * sc_tx_pipeh; 413 1.1 tsutsui 414 1.1 tsutsui struct upgt_data tx_data[UPGT_TX_COUNT]; 415 1.1 tsutsui struct upgt_data rx_data; 416 1.1 tsutsui struct upgt_data cmd_data; 417 1.1 tsutsui int tx_queued; 418 1.1 tsutsui kmutex_t sc_mtx; 419 1.5 skrll kcondvar_t sc_cv; 420 1.1 tsutsui 421 1.6 thorpej kmutex_t sc_media_mtx; /* XXX */ 422 1.6 thorpej 423 1.1 tsutsui uint8_t sc_device_type; 424 1.1 tsutsui struct ieee80211com sc_ic; 425 1.1 tsutsui enum ieee80211_state sc_state; 426 1.1 tsutsui int sc_arg; 427 1.1 tsutsui int (*sc_newstate)(struct ieee80211com *, 428 1.1 tsutsui enum ieee80211_state, int); 429 1.1 tsutsui callout_t scan_to; 430 1.1 tsutsui callout_t led_to; 431 1.1 tsutsui int sc_led_blink; 432 1.1 tsutsui uint8_t sc_cur_rateset[8]; 433 1.1 tsutsui 434 1.1 tsutsui int sc_flags; 435 1.1 tsutsui uint8_t *sc_fw; 436 1.1 tsutsui size_t sc_fw_size; 437 1.1 tsutsui int sc_fw_type; 438 1.1 tsutsui 439 1.1 tsutsui /* memory addresses on device */ 440 1.1 tsutsui uint32_t sc_memaddr_frame_start; 441 1.1 tsutsui uint32_t sc_memaddr_frame_end; 442 1.1 tsutsui uint32_t sc_memaddr_rx_start; 443 1.1 tsutsui struct upgt_memory sc_memory; 444 1.1 tsutsui 445 1.1 tsutsui /* data which we found in the EEPROM */ 446 1.1 tsutsui uint8_t sc_eeprom[UPGT_EEPROM_SIZE]; 447 1.1 tsutsui uint16_t sc_eeprom_hwrx; 448 1.1 tsutsui struct upgt_lmac_freq3 sc_eeprom_freq3[IEEE80211_CHAN_MAX]; 449 1.1 tsutsui struct upgt_lmac_freq4 sc_eeprom_freq4[IEEE80211_CHAN_MAX][8]; 450 1.1 tsutsui struct upgt_lmac_freq6 sc_eeprom_freq6[IEEE80211_CHAN_MAX]; 451 1.1 tsutsui uint8_t sc_eeprom_freq6_settings; 452 1.1 tsutsui 453 1.1 tsutsui /* radio tap */ 454 1.1 tsutsui struct bpf_if *sc_drvbpf; 455 1.1 tsutsui 456 1.1 tsutsui /* RX */ 457 1.1 tsutsui union { 458 1.1 tsutsui struct upgt_rx_radiotap_header th; 459 1.1 tsutsui uint8_t pad[64]; 460 1.1 tsutsui } sc_rxtapu; 461 1.1 tsutsui #define sc_rxtap sc_rxtapu.th 462 1.1 tsutsui int sc_rxtap_len; 463 1.1 tsutsui 464 1.1 tsutsui /* TX */ 465 1.1 tsutsui union { 466 1.1 tsutsui struct upgt_tx_radiotap_header th; 467 1.1 tsutsui uint8_t pad[64]; 468 1.1 tsutsui } sc_txtapu; 469 1.1 tsutsui #define sc_txtap sc_txtapu.th 470 1.1 tsutsui int sc_txtap_len; 471 1.1 tsutsui }; 472