1 /* 2 * Copyright (c) 2010 Broadcom Corporation 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17 /**************** 18 * Common types * 19 */ 20 21 #ifndef _BRCMF_H_ 22 #define _BRCMF_H_ 23 24 #define BRCMF_VERSION_STR "4.218.248.5" 25 26 /******************************************************************************* 27 * IO codes that are interpreted by dongle firmware 28 ******************************************************************************/ 29 #define BRCMF_C_UP 2 30 #define BRCMF_C_SET_PROMISC 10 31 #define BRCMF_C_GET_RATE 12 32 #define BRCMF_C_GET_INFRA 19 33 #define BRCMF_C_SET_INFRA 20 34 #define BRCMF_C_GET_AUTH 21 35 #define BRCMF_C_SET_AUTH 22 36 #define BRCMF_C_GET_BSSID 23 37 #define BRCMF_C_GET_SSID 25 38 #define BRCMF_C_SET_SSID 26 39 #define BRCMF_C_GET_CHANNEL 29 40 #define BRCMF_C_GET_SRL 31 41 #define BRCMF_C_GET_LRL 33 42 #define BRCMF_C_GET_RADIO 37 43 #define BRCMF_C_SET_RADIO 38 44 #define BRCMF_C_GET_PHYTYPE 39 45 #define BRCMF_C_SET_KEY 45 46 #define BRCMF_C_SET_PASSIVE_SCAN 49 47 #define BRCMF_C_SCAN 50 48 #define BRCMF_C_SCAN_RESULTS 51 49 #define BRCMF_C_DISASSOC 52 50 #define BRCMF_C_REASSOC 53 51 #define BRCMF_C_SET_ROAM_TRIGGER 55 52 #define BRCMF_C_SET_ROAM_DELTA 57 53 #define BRCMF_C_GET_DTIMPRD 77 54 #define BRCMF_C_SET_COUNTRY 84 55 #define BRCMF_C_GET_PM 85 56 #define BRCMF_C_SET_PM 86 57 #define BRCMF_C_GET_AP 117 58 #define BRCMF_C_SET_AP 118 59 #define BRCMF_C_GET_RSSI 127 60 #define BRCMF_C_GET_WSEC 133 61 #define BRCMF_C_SET_WSEC 134 62 #define BRCMF_C_GET_PHY_NOISE 135 63 #define BRCMF_C_GET_BSS_INFO 136 64 #define BRCMF_C_SET_SCAN_CHANNEL_TIME 185 65 #define BRCMF_C_SET_SCAN_UNASSOC_TIME 187 66 #define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON 201 67 #define BRCMF_C_GET_VALID_CHANNELS 217 68 #define BRCMF_C_GET_KEY_PRIMARY 235 69 #define BRCMF_C_SET_KEY_PRIMARY 236 70 #define BRCMF_C_SET_SCAN_PASSIVE_TIME 258 71 #define BRCMF_C_GET_VAR 262 72 #define BRCMF_C_SET_VAR 263 73 74 /* phy types (returned by WLC_GET_PHYTPE) */ 75 #define WLC_PHY_TYPE_A 0 76 #define WLC_PHY_TYPE_B 1 77 #define WLC_PHY_TYPE_G 2 78 #define WLC_PHY_TYPE_N 4 79 #define WLC_PHY_TYPE_LP 5 80 #define WLC_PHY_TYPE_SSN 6 81 #define WLC_PHY_TYPE_HT 7 82 #define WLC_PHY_TYPE_LCN 8 83 #define WLC_PHY_TYPE_NULL 0xf 84 85 #define BRCMF_EVENTING_MASK_LEN 16 86 87 #define TOE_TX_CSUM_OL 0x00000001 88 #define TOE_RX_CSUM_OL 0x00000002 89 90 #define BRCMF_BSS_INFO_VERSION 109 /* curr ver of brcmf_bss_info_le struct */ 91 92 /* size of brcmf_scan_params not including variable length array */ 93 #define BRCMF_SCAN_PARAMS_FIXED_SIZE 64 94 95 /* masks for channel and ssid count */ 96 #define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff 97 #define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16 98 99 #define BRCMF_SCAN_ACTION_START 1 100 #define BRCMF_SCAN_ACTION_CONTINUE 2 101 #define WL_SCAN_ACTION_ABORT 3 102 103 #define BRCMF_ISCAN_REQ_VERSION 1 104 105 /* brcmf_iscan_results status values */ 106 #define BRCMF_SCAN_RESULTS_SUCCESS 0 107 #define BRCMF_SCAN_RESULTS_PARTIAL 1 108 #define BRCMF_SCAN_RESULTS_PENDING 2 109 #define BRCMF_SCAN_RESULTS_ABORTED 3 110 #define BRCMF_SCAN_RESULTS_NO_MEM 4 111 112 /* Indicates this key is using soft encrypt */ 113 #define WL_SOFT_KEY (1 << 0) 114 /* primary (ie tx) key */ 115 #define BRCMF_PRIMARY_KEY (1 << 1) 116 /* Reserved for backward compat */ 117 #define WL_KF_RES_4 (1 << 4) 118 /* Reserved for backward compat */ 119 #define WL_KF_RES_5 (1 << 5) 120 /* Indicates a group key for a IBSS PEER */ 121 #define WL_IBSS_PEER_GROUP_KEY (1 << 6) 122 123 /* For supporting multiple interfaces */ 124 #define BRCMF_MAX_IFS 16 125 126 #define DOT11_BSSTYPE_ANY 2 127 #define DOT11_MAX_DEFAULT_KEYS 4 128 129 #define BRCMF_EVENT_MSG_LINK 0x01 130 #define BRCMF_EVENT_MSG_FLUSHTXQ 0x02 131 #define BRCMF_EVENT_MSG_GROUP 0x04 132 133 struct brcmf_event_msg { 134 __be16 version; 135 __be16 flags; 136 __be32 event_type; 137 __be32 status; 138 __be32 reason; 139 __be32 auth_type; 140 __be32 datalen; 141 u8 addr[ETH_ALEN]; 142 char ifname[IFNAMSIZ]; 143 } __packed; 144 145 struct brcm_ethhdr { 146 u16 subtype; 147 u16 length; 148 u8 version; 149 u8 oui[3]; 150 u16 usr_subtype; 151 } __packed; 152 153 struct brcmf_event { 154 struct ethhdr eth; 155 struct brcm_ethhdr hdr; 156 struct brcmf_event_msg msg; 157 } __packed; 158 159 /* event codes sent by the dongle to this driver */ 160 #define BRCMF_E_SET_SSID 0 161 #define BRCMF_E_JOIN 1 162 #define BRCMF_E_START 2 163 #define BRCMF_E_AUTH 3 164 #define BRCMF_E_AUTH_IND 4 165 #define BRCMF_E_DEAUTH 5 166 #define BRCMF_E_DEAUTH_IND 6 167 #define BRCMF_E_ASSOC 7 168 #define BRCMF_E_ASSOC_IND 8 169 #define BRCMF_E_REASSOC 9 170 #define BRCMF_E_REASSOC_IND 10 171 #define BRCMF_E_DISASSOC 11 172 #define BRCMF_E_DISASSOC_IND 12 173 #define BRCMF_E_QUIET_START 13 174 #define BRCMF_E_QUIET_END 14 175 #define BRCMF_E_BEACON_RX 15 176 #define BRCMF_E_LINK 16 177 #define BRCMF_E_MIC_ERROR 17 178 #define BRCMF_E_NDIS_LINK 18 179 #define BRCMF_E_ROAM 19 180 #define BRCMF_E_TXFAIL 20 181 #define BRCMF_E_PMKID_CACHE 21 182 #define BRCMF_E_RETROGRADE_TSF 22 183 #define BRCMF_E_PRUNE 23 184 #define BRCMF_E_AUTOAUTH 24 185 #define BRCMF_E_EAPOL_MSG 25 186 #define BRCMF_E_SCAN_COMPLETE 26 187 #define BRCMF_E_ADDTS_IND 27 188 #define BRCMF_E_DELTS_IND 28 189 #define BRCMF_E_BCNSENT_IND 29 190 #define BRCMF_E_BCNRX_MSG 30 191 #define BRCMF_E_BCNLOST_MSG 31 192 #define BRCMF_E_ROAM_PREP 32 193 #define BRCMF_E_PFN_NET_FOUND 33 194 #define BRCMF_E_PFN_NET_LOST 34 195 #define BRCMF_E_RESET_COMPLETE 35 196 #define BRCMF_E_JOIN_START 36 197 #define BRCMF_E_ROAM_START 37 198 #define BRCMF_E_ASSOC_START 38 199 #define BRCMF_E_IBSS_ASSOC 39 200 #define BRCMF_E_RADIO 40 201 #define BRCMF_E_PSM_WATCHDOG 41 202 #define BRCMF_E_PROBREQ_MSG 44 203 #define BRCMF_E_SCAN_CONFIRM_IND 45 204 #define BRCMF_E_PSK_SUP 46 205 #define BRCMF_E_COUNTRY_CODE_CHANGED 47 206 #define BRCMF_E_EXCEEDED_MEDIUM_TIME 48 207 #define BRCMF_E_ICV_ERROR 49 208 #define BRCMF_E_UNICAST_DECODE_ERROR 50 209 #define BRCMF_E_MULTICAST_DECODE_ERROR 51 210 #define BRCMF_E_TRACE 52 211 #define BRCMF_E_IF 54 212 #define BRCMF_E_RSSI 56 213 #define BRCMF_E_PFN_SCAN_COMPLETE 57 214 #define BRCMF_E_EXTLOG_MSG 58 215 #define BRCMF_E_ACTION_FRAME 59 216 #define BRCMF_E_ACTION_FRAME_COMPLETE 60 217 #define BRCMF_E_PRE_ASSOC_IND 61 218 #define BRCMF_E_PRE_REASSOC_IND 62 219 #define BRCMF_E_CHANNEL_ADOPTED 63 220 #define BRCMF_E_AP_STARTED 64 221 #define BRCMF_E_DFS_AP_STOP 65 222 #define BRCMF_E_DFS_AP_RESUME 66 223 #define BRCMF_E_RESERVED1 67 224 #define BRCMF_E_RESERVED2 68 225 #define BRCMF_E_ESCAN_RESULT 69 226 #define BRCMF_E_ACTION_FRAME_OFF_CHAN_COMPLETE 70 227 #define BRCMF_E_DCS_REQUEST 73 228 229 #define BRCMF_E_FIFO_CREDIT_MAP 74 230 231 #define BRCMF_E_LAST 75 232 233 #define BRCMF_E_STATUS_SUCCESS 0 234 #define BRCMF_E_STATUS_FAIL 1 235 #define BRCMF_E_STATUS_TIMEOUT 2 236 #define BRCMF_E_STATUS_NO_NETWORKS 3 237 #define BRCMF_E_STATUS_ABORT 4 238 #define BRCMF_E_STATUS_NO_ACK 5 239 #define BRCMF_E_STATUS_UNSOLICITED 6 240 #define BRCMF_E_STATUS_ATTEMPT 7 241 #define BRCMF_E_STATUS_PARTIAL 8 242 #define BRCMF_E_STATUS_NEWSCAN 9 243 #define BRCMF_E_STATUS_NEWASSOC 10 244 #define BRCMF_E_STATUS_11HQUIET 11 245 #define BRCMF_E_STATUS_SUPPRESS 12 246 #define BRCMF_E_STATUS_NOCHANS 13 247 #define BRCMF_E_STATUS_CS_ABORT 15 248 #define BRCMF_E_STATUS_ERROR 16 249 250 #define BRCMF_E_REASON_INITIAL_ASSOC 0 251 #define BRCMF_E_REASON_LOW_RSSI 1 252 #define BRCMF_E_REASON_DEAUTH 2 253 #define BRCMF_E_REASON_DISASSOC 3 254 #define BRCMF_E_REASON_BCNS_LOST 4 255 #define BRCMF_E_REASON_MINTXRATE 9 256 #define BRCMF_E_REASON_TXFAIL 10 257 258 #define BRCMF_E_REASON_FAST_ROAM_FAILED 5 259 #define BRCMF_E_REASON_DIRECTED_ROAM 6 260 #define BRCMF_E_REASON_TSPEC_REJECTED 7 261 #define BRCMF_E_REASON_BETTER_AP 8 262 263 #define BRCMF_E_PRUNE_ENCR_MISMATCH 1 264 #define BRCMF_E_PRUNE_BCAST_BSSID 2 265 #define BRCMF_E_PRUNE_MAC_DENY 3 266 #define BRCMF_E_PRUNE_MAC_NA 4 267 #define BRCMF_E_PRUNE_REG_PASSV 5 268 #define BRCMF_E_PRUNE_SPCT_MGMT 6 269 #define BRCMF_E_PRUNE_RADAR 7 270 #define BRCMF_E_RSN_MISMATCH 8 271 #define BRCMF_E_PRUNE_NO_COMMON_RATES 9 272 #define BRCMF_E_PRUNE_BASIC_RATES 10 273 #define BRCMF_E_PRUNE_CIPHER_NA 12 274 #define BRCMF_E_PRUNE_KNOWN_STA 13 275 #define BRCMF_E_PRUNE_WDS_PEER 15 276 #define BRCMF_E_PRUNE_QBSS_LOAD 16 277 #define BRCMF_E_PRUNE_HOME_AP 17 278 279 #define BRCMF_E_SUP_OTHER 0 280 #define BRCMF_E_SUP_DECRYPT_KEY_DATA 1 281 #define BRCMF_E_SUP_BAD_UCAST_WEP128 2 282 #define BRCMF_E_SUP_BAD_UCAST_WEP40 3 283 #define BRCMF_E_SUP_UNSUP_KEY_LEN 4 284 #define BRCMF_E_SUP_PW_KEY_CIPHER 5 285 #define BRCMF_E_SUP_MSG3_TOO_MANY_IE 6 286 #define BRCMF_E_SUP_MSG3_IE_MISMATCH 7 287 #define BRCMF_E_SUP_NO_INSTALL_FLAG 8 288 #define BRCMF_E_SUP_MSG3_NO_GTK 9 289 #define BRCMF_E_SUP_GRP_KEY_CIPHER 10 290 #define BRCMF_E_SUP_GRP_MSG1_NO_GTK 11 291 #define BRCMF_E_SUP_GTK_DECRYPT_FAIL 12 292 #define BRCMF_E_SUP_SEND_FAIL 13 293 #define BRCMF_E_SUP_DEAUTH 14 294 295 #define BRCMF_E_IF_ADD 1 296 #define BRCMF_E_IF_DEL 2 297 #define BRCMF_E_IF_CHANGE 3 298 299 #define BRCMF_E_IF_ROLE_STA 0 300 #define BRCMF_E_IF_ROLE_AP 1 301 #define BRCMF_E_IF_ROLE_WDS 2 302 303 #define BRCMF_E_LINK_BCN_LOSS 1 304 #define BRCMF_E_LINK_DISASSOC 2 305 #define BRCMF_E_LINK_ASSOC_REC 3 306 #define BRCMF_E_LINK_BSSCFG_DIS 4 307 308 /* Pattern matching filter. Specifies an offset within received packets to 309 * start matching, the pattern to match, the size of the pattern, and a bitmask 310 * that indicates which bits within the pattern should be matched. 311 */ 312 struct brcmf_pkt_filter_pattern_le { 313 /* 314 * Offset within received packet to start pattern matching. 315 * Offset '0' is the first byte of the ethernet header. 316 */ 317 __le32 offset; 318 /* Size of the pattern. Bitmask must be the same size.*/ 319 __le32 size_bytes; 320 /* 321 * Variable length mask and pattern data. mask starts at offset 0. 322 * Pattern immediately follows mask. 323 */ 324 u8 mask_and_pattern[1]; 325 }; 326 327 /* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */ 328 struct brcmf_pkt_filter_le { 329 __le32 id; /* Unique filter id, specified by app. */ 330 __le32 type; /* Filter type (WL_PKT_FILTER_TYPE_xxx). */ 331 __le32 negate_match; /* Negate the result of filter matches */ 332 union { /* Filter definitions */ 333 struct brcmf_pkt_filter_pattern_le pattern; /* Filter pattern */ 334 } u; 335 }; 336 337 /* IOVAR "pkt_filter_enable" parameter. */ 338 struct brcmf_pkt_filter_enable_le { 339 __le32 id; /* Unique filter id */ 340 __le32 enable; /* Enable/disable bool */ 341 }; 342 343 /* BSS info structure 344 * Applications MUST CHECK ie_offset field and length field to access IEs and 345 * next bss_info structure in a vector (in struct brcmf_scan_results) 346 */ 347 struct brcmf_bss_info_le { 348 __le32 version; /* version field */ 349 __le32 length; /* byte length of data in this record, 350 * starting at version and including IEs 351 */ 352 u8 BSSID[ETH_ALEN]; 353 __le16 beacon_period; /* units are Kusec */ 354 __le16 capability; /* Capability information */ 355 u8 SSID_len; 356 u8 SSID[32]; 357 struct { 358 __le32 count; /* # rates in this set */ 359 u8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */ 360 } rateset; /* supported rates */ 361 __le16 chanspec; /* chanspec for bss */ 362 __le16 atim_window; /* units are Kusec */ 363 u8 dtim_period; /* DTIM period */ 364 __le16 RSSI; /* receive signal strength (in dBm) */ 365 s8 phy_noise; /* noise (in dBm) */ 366 367 u8 n_cap; /* BSS is 802.11N Capable */ 368 /* 802.11N BSS Capabilities (based on HT_CAP_*): */ 369 __le32 nbss_cap; 370 u8 ctl_ch; /* 802.11N BSS control channel number */ 371 __le32 reserved32[1]; /* Reserved for expansion of BSS properties */ 372 u8 flags; /* flags */ 373 u8 reserved[3]; /* Reserved for expansion of BSS properties */ 374 u8 basic_mcs[MCSSET_LEN]; /* 802.11N BSS required MCS set */ 375 376 __le16 ie_offset; /* offset at which IEs start, from beginning */ 377 __le32 ie_length; /* byte length of Information Elements */ 378 __le16 SNR; /* average SNR of during frame reception */ 379 /* Add new fields here */ 380 /* variable length Information Elements */ 381 }; 382 383 struct brcm_rateset_le { 384 /* # rates in this set */ 385 __le32 count; 386 /* rates in 500kbps units w/hi bit set if basic */ 387 u8 rates[WL_NUMRATES]; 388 }; 389 390 struct brcmf_ssid { 391 u32 SSID_len; 392 unsigned char SSID[32]; 393 }; 394 395 struct brcmf_ssid_le { 396 __le32 SSID_len; 397 unsigned char SSID[32]; 398 }; 399 400 struct brcmf_scan_params_le { 401 struct brcmf_ssid_le ssid_le; /* default: {0, ""} */ 402 u8 bssid[ETH_ALEN]; /* default: bcast */ 403 s8 bss_type; /* default: any, 404 * DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT 405 */ 406 u8 scan_type; /* flags, 0 use default */ 407 __le32 nprobes; /* -1 use default, number of probes per channel */ 408 __le32 active_time; /* -1 use default, dwell time per channel for 409 * active scanning 410 */ 411 __le32 passive_time; /* -1 use default, dwell time per channel 412 * for passive scanning 413 */ 414 __le32 home_time; /* -1 use default, dwell time for the 415 * home channel between channel scans 416 */ 417 __le32 channel_num; /* count of channels and ssids that follow 418 * 419 * low half is count of channels in 420 * channel_list, 0 means default (use all 421 * available channels) 422 * 423 * high half is entries in struct brcmf_ssid 424 * array that follows channel_list, aligned for 425 * s32 (4 bytes) meaning an odd channel count 426 * implies a 2-byte pad between end of 427 * channel_list and first ssid 428 * 429 * if ssid count is zero, single ssid in the 430 * fixed parameter portion is assumed, otherwise 431 * ssid in the fixed portion is ignored 432 */ 433 __le16 channel_list[1]; /* list of chanspecs */ 434 }; 435 436 /* incremental scan struct */ 437 struct brcmf_iscan_params_le { 438 __le32 version; 439 __le16 action; 440 __le16 scan_duration; 441 struct brcmf_scan_params_le params_le; 442 }; 443 444 struct brcmf_scan_results { 445 u32 buflen; 446 u32 version; 447 u32 count; 448 struct brcmf_bss_info_le bss_info_le[]; 449 }; 450 451 struct brcmf_scan_results_le { 452 __le32 buflen; 453 __le32 version; 454 __le32 count; 455 }; 456 457 /* used for association with a specific BSSID and chanspec list */ 458 struct brcmf_assoc_params_le { 459 /* 00:00:00:00:00:00: broadcast scan */ 460 u8 bssid[ETH_ALEN]; 461 /* 0: all available channels, otherwise count of chanspecs in 462 * chanspec_list */ 463 __le32 chanspec_num; 464 /* list of chanspecs */ 465 __le16 chanspec_list[1]; 466 }; 467 468 /* used for join with or without a specific bssid and channel list */ 469 struct brcmf_join_params { 470 struct brcmf_ssid_le ssid_le; 471 struct brcmf_assoc_params_le params_le; 472 }; 473 474 /* incremental scan results struct */ 475 struct brcmf_iscan_results { 476 union { 477 u32 status; 478 __le32 status_le; 479 }; 480 union { 481 struct brcmf_scan_results results; 482 struct brcmf_scan_results_le results_le; 483 }; 484 }; 485 486 /* size of brcmf_iscan_results not including variable length array */ 487 #define BRCMF_ISCAN_RESULTS_FIXED_SIZE \ 488 (sizeof(struct brcmf_scan_results) + \ 489 offsetof(struct brcmf_iscan_results, results)) 490 491 struct brcmf_wsec_key { 492 u32 index; /* key index */ 493 u32 len; /* key length */ 494 u8 data[WLAN_MAX_KEY_LEN]; /* key data */ 495 u32 pad_1[18]; 496 u32 algo; /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */ 497 u32 flags; /* misc flags */ 498 u32 pad_2[3]; 499 u32 iv_initialized; /* has IV been initialized already? */ 500 u32 pad_3; 501 /* Rx IV */ 502 struct { 503 u32 hi; /* upper 32 bits of IV */ 504 u16 lo; /* lower 16 bits of IV */ 505 } rxiv; 506 u32 pad_4[2]; 507 u8 ea[ETH_ALEN]; /* per station */ 508 }; 509 510 /* 511 * dongle requires same struct as above but with fields in little endian order 512 */ 513 struct brcmf_wsec_key_le { 514 __le32 index; /* key index */ 515 __le32 len; /* key length */ 516 u8 data[WLAN_MAX_KEY_LEN]; /* key data */ 517 __le32 pad_1[18]; 518 __le32 algo; /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */ 519 __le32 flags; /* misc flags */ 520 __le32 pad_2[3]; 521 __le32 iv_initialized; /* has IV been initialized already? */ 522 __le32 pad_3; 523 /* Rx IV */ 524 struct { 525 __le32 hi; /* upper 32 bits of IV */ 526 __le16 lo; /* lower 16 bits of IV */ 527 } rxiv; 528 __le32 pad_4[2]; 529 u8 ea[ETH_ALEN]; /* per station */ 530 }; 531 532 /* Used to get specific STA parameters */ 533 struct brcmf_scb_val_le { 534 __le32 val; 535 u8 ea[ETH_ALEN]; 536 }; 537 538 /* channel encoding */ 539 struct brcmf_channel_info_le { 540 __le32 hw_channel; 541 __le32 target_channel; 542 __le32 scan_channel; 543 }; 544 545 /* Bus independent dongle command */ 546 struct brcmf_dcmd { 547 uint cmd; /* common dongle cmd definition */ 548 void *buf; /* pointer to user buffer */ 549 uint len; /* length of user buffer */ 550 u8 set; /* get or set request (optional) */ 551 uint used; /* bytes read or written (optional) */ 552 uint needed; /* bytes needed (optional) */ 553 }; 554 555 /* Forward decls for struct brcmf_pub (see below) */ 556 struct brcmf_proto; /* device communication protocol info */ 557 struct brcmf_cfg80211_dev; /* cfg80211 device info */ 558 559 /* Common structure for module and instance linkage */ 560 struct brcmf_pub { 561 /* Linkage ponters */ 562 struct brcmf_bus *bus_if; 563 struct brcmf_proto *prot; 564 struct brcmf_cfg80211_dev *config; 565 struct device *dev; /* fullmac dongle device pointer */ 566 567 /* Internal brcmf items */ 568 uint hdrlen; /* Total BRCMF header length (proto + bus) */ 569 uint rxsz; /* Rx buffer size bus module should use */ 570 u8 wme_dp; /* wme discard priority */ 571 572 /* Dongle media info */ 573 bool iswl; /* Dongle-resident driver is wl */ 574 unsigned long drv_version; /* Version of dongle-resident driver */ 575 u8 mac[ETH_ALEN]; /* MAC address obtained from dongle */ 576 577 /* Additional stats for the bus level */ 578 579 /* Multicast data packets sent to dongle */ 580 unsigned long tx_multicast; 581 /* Packets flushed due to unscheduled sendup thread */ 582 unsigned long rx_flushed; 583 /* Number of times dpc scheduled by watchdog timer */ 584 unsigned long wd_dpc_sched; 585 586 /* Number of flow control pkts recvd */ 587 unsigned long fc_packets; 588 589 /* Last error return */ 590 int bcmerror; 591 592 /* Last error from dongle */ 593 int dongle_error; 594 595 /* Suspend disable flag flag */ 596 int suspend_disable_flag; /* "1" to disable all extra powersaving 597 during suspend */ 598 int in_suspend; /* flag set to 1 when early suspend called */ 599 int dtim_skip; /* dtim skip , default 0 means wake each dtim */ 600 601 /* Pkt filter defination */ 602 char *pktfilter[100]; 603 int pktfilter_count; 604 605 u8 country_code[BRCM_CNTRY_BUF_SZ]; 606 char eventmask[BRCMF_EVENTING_MASK_LEN]; 607 608 struct brcmf_if *iflist[BRCMF_MAX_IFS]; 609 610 struct mutex proto_block; 611 612 struct work_struct setmacaddr_work; 613 struct work_struct multicast_work; 614 u8 macvalue[ETH_ALEN]; 615 atomic_t pend_8021x_cnt; 616 }; 617 618 struct brcmf_if_event { 619 u8 ifidx; 620 u8 action; 621 u8 flags; 622 u8 bssidx; 623 }; 624 625 struct bcmevent_name { 626 uint event; 627 const char *name; 628 }; 629 630 extern const struct bcmevent_name bcmevent_names[]; 631 632 extern uint brcmf_c_mkiovar(char *name, char *data, uint datalen, 633 char *buf, uint len); 634 635 extern int brcmf_net_attach(struct brcmf_pub *drvr, int idx); 636 extern int brcmf_netdev_wait_pend8021x(struct net_device *ndev); 637 638 extern s32 brcmf_exec_dcmd(struct net_device *dev, u32 cmd, void *arg, u32 len); 639 640 /* Return pointer to interface name */ 641 extern char *brcmf_ifname(struct brcmf_pub *drvr, int idx); 642 643 /* Query dongle */ 644 extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, 645 uint cmd, void *buf, uint len); 646 647 #ifdef DEBUG 648 extern int brcmf_write_to_file(struct brcmf_pub *drvr, const u8 *buf, int size); 649 #endif /* DEBUG */ 650 651 extern int brcmf_ifname2idx(struct brcmf_pub *drvr, char *name); 652 extern int brcmf_c_host_event(struct brcmf_pub *drvr, int *idx, 653 void *pktdata, struct brcmf_event_msg *, 654 void **data_ptr); 655 656 extern void brcmf_del_if(struct brcmf_pub *drvr, int ifidx); 657 658 /* Send packet to dongle via data channel */ 659 extern int brcmf_sendpkt(struct brcmf_pub *drvr, int ifidx,\ 660 struct sk_buff *pkt); 661 662 extern void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg); 663 extern void brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg, 664 int enable, int master_mode); 665 666 #define BRCMF_DCMD_SMLEN 256 /* "small" cmd buffer required */ 667 #define BRCMF_DCMD_MEDLEN 1536 /* "med" cmd buffer required */ 668 #define BRCMF_DCMD_MAXLEN 8192 /* max length cmd buffer required */ 669 670 #endif /* _BRCMF_H_ */ 671