linux/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
<<
>>
Prefs
   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#include "fweh.h"
  27
  28/*******************************************************************************
  29 * IO codes that are interpreted by dongle firmware
  30 ******************************************************************************/
  31#define BRCMF_C_GET_VERSION                     1
  32#define BRCMF_C_UP                              2
  33#define BRCMF_C_DOWN                            3
  34#define BRCMF_C_SET_PROMISC                     10
  35#define BRCMF_C_GET_RATE                        12
  36#define BRCMF_C_GET_INFRA                       19
  37#define BRCMF_C_SET_INFRA                       20
  38#define BRCMF_C_GET_AUTH                        21
  39#define BRCMF_C_SET_AUTH                        22
  40#define BRCMF_C_GET_BSSID                       23
  41#define BRCMF_C_GET_SSID                        25
  42#define BRCMF_C_SET_SSID                        26
  43#define BRCMF_C_TERMINATED                      28
  44#define BRCMF_C_GET_CHANNEL                     29
  45#define BRCMF_C_SET_CHANNEL                     30
  46#define BRCMF_C_GET_SRL                         31
  47#define BRCMF_C_SET_SRL                         32
  48#define BRCMF_C_GET_LRL                         33
  49#define BRCMF_C_SET_LRL                         34
  50#define BRCMF_C_GET_RADIO                       37
  51#define BRCMF_C_SET_RADIO                       38
  52#define BRCMF_C_GET_PHYTYPE                     39
  53#define BRCMF_C_SET_KEY                         45
  54#define BRCMF_C_SET_PASSIVE_SCAN                49
  55#define BRCMF_C_SCAN                            50
  56#define BRCMF_C_SCAN_RESULTS                    51
  57#define BRCMF_C_DISASSOC                        52
  58#define BRCMF_C_REASSOC                         53
  59#define BRCMF_C_SET_ROAM_TRIGGER                55
  60#define BRCMF_C_SET_ROAM_DELTA                  57
  61#define BRCMF_C_GET_BCNPRD                      75
  62#define BRCMF_C_SET_BCNPRD                      76
  63#define BRCMF_C_GET_DTIMPRD                     77
  64#define BRCMF_C_SET_DTIMPRD                     78
  65#define BRCMF_C_SET_COUNTRY                     84
  66#define BRCMF_C_GET_PM                          85
  67#define BRCMF_C_SET_PM                          86
  68#define BRCMF_C_GET_CURR_RATESET                114
  69#define BRCMF_C_GET_AP                          117
  70#define BRCMF_C_SET_AP                          118
  71#define BRCMF_C_GET_RSSI                        127
  72#define BRCMF_C_GET_WSEC                        133
  73#define BRCMF_C_SET_WSEC                        134
  74#define BRCMF_C_GET_PHY_NOISE                   135
  75#define BRCMF_C_GET_BSS_INFO                    136
  76#define BRCMF_C_GET_BANDLIST                    140
  77#define BRCMF_C_SET_SCB_TIMEOUT                 158
  78#define BRCMF_C_GET_PHYLIST                     180
  79#define BRCMF_C_SET_SCAN_CHANNEL_TIME           185
  80#define BRCMF_C_SET_SCAN_UNASSOC_TIME           187
  81#define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON   201
  82#define BRCMF_C_GET_VALID_CHANNELS              217
  83#define BRCMF_C_GET_KEY_PRIMARY                 235
  84#define BRCMF_C_SET_KEY_PRIMARY                 236
  85#define BRCMF_C_SET_SCAN_PASSIVE_TIME           258
  86#define BRCMF_C_GET_VAR                         262
  87#define BRCMF_C_SET_VAR                         263
  88
  89/* phy types (returned by WLC_GET_PHYTPE) */
  90#define WLC_PHY_TYPE_A          0
  91#define WLC_PHY_TYPE_B          1
  92#define WLC_PHY_TYPE_G          2
  93#define WLC_PHY_TYPE_N          4
  94#define WLC_PHY_TYPE_LP         5
  95#define WLC_PHY_TYPE_SSN        6
  96#define WLC_PHY_TYPE_HT         7
  97#define WLC_PHY_TYPE_LCN        8
  98#define WLC_PHY_TYPE_NULL       0xf
  99
 100#define BRCMF_EVENTING_MASK_LEN 16
 101
 102#define TOE_TX_CSUM_OL          0x00000001
 103#define TOE_RX_CSUM_OL          0x00000002
 104
 105#define BRCMF_BSS_INFO_VERSION  109 /* curr ver of brcmf_bss_info_le struct */
 106
 107/* size of brcmf_scan_params not including variable length array */
 108#define BRCMF_SCAN_PARAMS_FIXED_SIZE 64
 109
 110/* masks for channel and ssid count */
 111#define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff
 112#define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16
 113
 114/* primary (ie tx) key */
 115#define BRCMF_PRIMARY_KEY       (1 << 1)
 116
 117/* For supporting multiple interfaces */
 118#define BRCMF_MAX_IFS   16
 119
 120#define DOT11_BSSTYPE_ANY                       2
 121#define DOT11_MAX_DEFAULT_KEYS  4
 122
 123#define BRCMF_ESCAN_REQ_VERSION 1
 124
 125#define WLC_BSS_RSSI_ON_CHANNEL         0x0002
 126
 127#define BRCMF_MAXRATES_IN_SET           16      /* max # of rates in rateset */
 128#define BRCMF_STA_ASSOC                 0x10            /* Associated */
 129
 130#define BRCMF_E_STATUS_SUCCESS                  0
 131#define BRCMF_E_STATUS_FAIL                     1
 132#define BRCMF_E_STATUS_TIMEOUT                  2
 133#define BRCMF_E_STATUS_NO_NETWORKS              3
 134#define BRCMF_E_STATUS_ABORT                    4
 135#define BRCMF_E_STATUS_NO_ACK                   5
 136#define BRCMF_E_STATUS_UNSOLICITED              6
 137#define BRCMF_E_STATUS_ATTEMPT                  7
 138#define BRCMF_E_STATUS_PARTIAL                  8
 139#define BRCMF_E_STATUS_NEWSCAN                  9
 140#define BRCMF_E_STATUS_NEWASSOC                 10
 141#define BRCMF_E_STATUS_11HQUIET                 11
 142#define BRCMF_E_STATUS_SUPPRESS                 12
 143#define BRCMF_E_STATUS_NOCHANS                  13
 144#define BRCMF_E_STATUS_CS_ABORT                 15
 145#define BRCMF_E_STATUS_ERROR                    16
 146
 147#define BRCMF_E_REASON_INITIAL_ASSOC            0
 148#define BRCMF_E_REASON_LOW_RSSI                 1
 149#define BRCMF_E_REASON_DEAUTH                   2
 150#define BRCMF_E_REASON_DISASSOC                 3
 151#define BRCMF_E_REASON_BCNS_LOST                4
 152#define BRCMF_E_REASON_MINTXRATE                9
 153#define BRCMF_E_REASON_TXFAIL                   10
 154
 155#define BRCMF_E_REASON_LINK_BSSCFG_DIS          4
 156#define BRCMF_E_REASON_FAST_ROAM_FAILED         5
 157#define BRCMF_E_REASON_DIRECTED_ROAM            6
 158#define BRCMF_E_REASON_TSPEC_REJECTED           7
 159#define BRCMF_E_REASON_BETTER_AP                8
 160
 161#define BRCMF_E_PRUNE_ENCR_MISMATCH             1
 162#define BRCMF_E_PRUNE_BCAST_BSSID               2
 163#define BRCMF_E_PRUNE_MAC_DENY                  3
 164#define BRCMF_E_PRUNE_MAC_NA                    4
 165#define BRCMF_E_PRUNE_REG_PASSV                 5
 166#define BRCMF_E_PRUNE_SPCT_MGMT                 6
 167#define BRCMF_E_PRUNE_RADAR                     7
 168#define BRCMF_E_RSN_MISMATCH                    8
 169#define BRCMF_E_PRUNE_NO_COMMON_RATES           9
 170#define BRCMF_E_PRUNE_BASIC_RATES               10
 171#define BRCMF_E_PRUNE_CIPHER_NA                 12
 172#define BRCMF_E_PRUNE_KNOWN_STA                 13
 173#define BRCMF_E_PRUNE_WDS_PEER                  15
 174#define BRCMF_E_PRUNE_QBSS_LOAD                 16
 175#define BRCMF_E_PRUNE_HOME_AP                   17
 176
 177#define BRCMF_E_SUP_OTHER                       0
 178#define BRCMF_E_SUP_DECRYPT_KEY_DATA            1
 179#define BRCMF_E_SUP_BAD_UCAST_WEP128            2
 180#define BRCMF_E_SUP_BAD_UCAST_WEP40             3
 181#define BRCMF_E_SUP_UNSUP_KEY_LEN               4
 182#define BRCMF_E_SUP_PW_KEY_CIPHER               5
 183#define BRCMF_E_SUP_MSG3_TOO_MANY_IE            6
 184#define BRCMF_E_SUP_MSG3_IE_MISMATCH            7
 185#define BRCMF_E_SUP_NO_INSTALL_FLAG             8
 186#define BRCMF_E_SUP_MSG3_NO_GTK                 9
 187#define BRCMF_E_SUP_GRP_KEY_CIPHER              10
 188#define BRCMF_E_SUP_GRP_MSG1_NO_GTK             11
 189#define BRCMF_E_SUP_GTK_DECRYPT_FAIL            12
 190#define BRCMF_E_SUP_SEND_FAIL                   13
 191#define BRCMF_E_SUP_DEAUTH                      14
 192
 193#define BRCMF_E_IF_ADD                          1
 194#define BRCMF_E_IF_DEL                          2
 195#define BRCMF_E_IF_CHANGE                       3
 196
 197#define BRCMF_E_IF_ROLE_STA                     0
 198#define BRCMF_E_IF_ROLE_AP                      1
 199#define BRCMF_E_IF_ROLE_WDS                     2
 200
 201#define BRCMF_E_LINK_BCN_LOSS                   1
 202#define BRCMF_E_LINK_DISASSOC                   2
 203#define BRCMF_E_LINK_ASSOC_REC                  3
 204#define BRCMF_E_LINK_BSSCFG_DIS                 4
 205
 206/* Small, medium and maximum buffer size for dcmd
 207 */
 208#define BRCMF_DCMD_SMLEN        256
 209#define BRCMF_DCMD_MEDLEN       1536
 210#define BRCMF_DCMD_MAXLEN       8192
 211
 212/* Pattern matching filter. Specifies an offset within received packets to
 213 * start matching, the pattern to match, the size of the pattern, and a bitmask
 214 * that indicates which bits within the pattern should be matched.
 215 */
 216struct brcmf_pkt_filter_pattern_le {
 217        /*
 218         * Offset within received packet to start pattern matching.
 219         * Offset '0' is the first byte of the ethernet header.
 220         */
 221        __le32 offset;
 222        /* Size of the pattern.  Bitmask must be the same size.*/
 223        __le32 size_bytes;
 224        /*
 225         * Variable length mask and pattern data. mask starts at offset 0.
 226         * Pattern immediately follows mask.
 227         */
 228        u8 mask_and_pattern[1];
 229};
 230
 231/* IOVAR "pkt_filter_add" parameter. Used to install packet filters. */
 232struct brcmf_pkt_filter_le {
 233        __le32 id;              /* Unique filter id, specified by app. */
 234        __le32 type;            /* Filter type (WL_PKT_FILTER_TYPE_xxx). */
 235        __le32 negate_match;    /* Negate the result of filter matches */
 236        union {                 /* Filter definitions */
 237                struct brcmf_pkt_filter_pattern_le pattern; /* Filter pattern */
 238        } u;
 239};
 240
 241/* IOVAR "pkt_filter_enable" parameter. */
 242struct brcmf_pkt_filter_enable_le {
 243        __le32 id;              /* Unique filter id */
 244        __le32 enable;          /* Enable/disable bool */
 245};
 246
 247/* BSS info structure
 248 * Applications MUST CHECK ie_offset field and length field to access IEs and
 249 * next bss_info structure in a vector (in struct brcmf_scan_results)
 250 */
 251struct brcmf_bss_info_le {
 252        __le32 version;         /* version field */
 253        __le32 length;          /* byte length of data in this record,
 254                                 * starting at version and including IEs
 255                                 */
 256        u8 BSSID[ETH_ALEN];
 257        __le16 beacon_period;   /* units are Kusec */
 258        __le16 capability;      /* Capability information */
 259        u8 SSID_len;
 260        u8 SSID[32];
 261        struct {
 262                __le32 count;   /* # rates in this set */
 263                u8 rates[16]; /* rates in 500kbps units w/hi bit set if basic */
 264        } rateset;              /* supported rates */
 265        __le16 chanspec;        /* chanspec for bss */
 266        __le16 atim_window;     /* units are Kusec */
 267        u8 dtim_period; /* DTIM period */
 268        __le16 RSSI;            /* receive signal strength (in dBm) */
 269        s8 phy_noise;           /* noise (in dBm) */
 270
 271        u8 n_cap;               /* BSS is 802.11N Capable */
 272        /* 802.11N BSS Capabilities (based on HT_CAP_*): */
 273        __le32 nbss_cap;
 274        u8 ctl_ch;              /* 802.11N BSS control channel number */
 275        __le32 reserved32[1];   /* Reserved for expansion of BSS properties */
 276        u8 flags;               /* flags */
 277        u8 reserved[3]; /* Reserved for expansion of BSS properties */
 278        u8 basic_mcs[MCSSET_LEN];       /* 802.11N BSS required MCS set */
 279
 280        __le16 ie_offset;       /* offset at which IEs start, from beginning */
 281        __le32 ie_length;       /* byte length of Information Elements */
 282        __le16 SNR;             /* average SNR of during frame reception */
 283        /* Add new fields here */
 284        /* variable length Information Elements */
 285};
 286
 287struct brcm_rateset_le {
 288        /* # rates in this set */
 289        __le32 count;
 290        /* rates in 500kbps units w/hi bit set if basic */
 291        u8 rates[BRCMF_MAXRATES_IN_SET];
 292};
 293
 294struct brcmf_ssid {
 295        u32 SSID_len;
 296        unsigned char SSID[32];
 297};
 298
 299struct brcmf_ssid_le {
 300        __le32 SSID_len;
 301        unsigned char SSID[32];
 302};
 303
 304struct brcmf_scan_params_le {
 305        struct brcmf_ssid_le ssid_le;   /* default: {0, ""} */
 306        u8 bssid[ETH_ALEN];     /* default: bcast */
 307        s8 bss_type;            /* default: any,
 308                                 * DOT11_BSSTYPE_ANY/INFRASTRUCTURE/INDEPENDENT
 309                                 */
 310        u8 scan_type;   /* flags, 0 use default */
 311        __le32 nprobes;   /* -1 use default, number of probes per channel */
 312        __le32 active_time;     /* -1 use default, dwell time per channel for
 313                                 * active scanning
 314                                 */
 315        __le32 passive_time;    /* -1 use default, dwell time per channel
 316                                 * for passive scanning
 317                                 */
 318        __le32 home_time;       /* -1 use default, dwell time for the
 319                                 * home channel between channel scans
 320                                 */
 321        __le32 channel_num;     /* count of channels and ssids that follow
 322                                 *
 323                                 * low half is count of channels in
 324                                 * channel_list, 0 means default (use all
 325                                 * available channels)
 326                                 *
 327                                 * high half is entries in struct brcmf_ssid
 328                                 * array that follows channel_list, aligned for
 329                                 * s32 (4 bytes) meaning an odd channel count
 330                                 * implies a 2-byte pad between end of
 331                                 * channel_list and first ssid
 332                                 *
 333                                 * if ssid count is zero, single ssid in the
 334                                 * fixed parameter portion is assumed, otherwise
 335                                 * ssid in the fixed portion is ignored
 336                                 */
 337        __le16 channel_list[1]; /* list of chanspecs */
 338};
 339
 340struct brcmf_scan_results {
 341        u32 buflen;
 342        u32 version;
 343        u32 count;
 344        struct brcmf_bss_info_le bss_info_le[];
 345};
 346
 347struct brcmf_escan_params_le {
 348        __le32 version;
 349        __le16 action;
 350        __le16 sync_id;
 351        struct brcmf_scan_params_le params_le;
 352};
 353
 354struct brcmf_escan_result_le {
 355        __le32 buflen;
 356        __le32 version;
 357        __le16 sync_id;
 358        __le16 bss_count;
 359        struct brcmf_bss_info_le bss_info_le;
 360};
 361
 362#define WL_ESCAN_RESULTS_FIXED_SIZE (sizeof(struct brcmf_escan_result_le) - \
 363        sizeof(struct brcmf_bss_info_le))
 364
 365/* used for association with a specific BSSID and chanspec list */
 366struct brcmf_assoc_params_le {
 367        /* 00:00:00:00:00:00: broadcast scan */
 368        u8 bssid[ETH_ALEN];
 369        /* 0: all available channels, otherwise count of chanspecs in
 370         * chanspec_list */
 371        __le32 chanspec_num;
 372        /* list of chanspecs */
 373        __le16 chanspec_list[1];
 374};
 375
 376/* used for join with or without a specific bssid and channel list */
 377struct brcmf_join_params {
 378        struct brcmf_ssid_le ssid_le;
 379        struct brcmf_assoc_params_le params_le;
 380};
 381
 382/* scan params for extended join */
 383struct brcmf_join_scan_params_le {
 384        u8 scan_type;           /* 0 use default, active or passive scan */
 385        __le32 nprobes;         /* -1 use default, nr of probes per channel */
 386        __le32 active_time;     /* -1 use default, dwell time per channel for
 387                                 * active scanning
 388                                 */
 389        __le32 passive_time;    /* -1 use default, dwell time per channel
 390                                 * for passive scanning
 391                                 */
 392        __le32 home_time;       /* -1 use default, dwell time for the home
 393                                 * channel between channel scans
 394                                 */
 395};
 396
 397/* extended join params */
 398struct brcmf_ext_join_params_le {
 399        struct brcmf_ssid_le ssid_le;   /* {0, ""}: wildcard scan */
 400        struct brcmf_join_scan_params_le scan_le;
 401        struct brcmf_assoc_params_le assoc_le;
 402};
 403
 404struct brcmf_wsec_key {
 405        u32 index;              /* key index */
 406        u32 len;                /* key length */
 407        u8 data[WLAN_MAX_KEY_LEN];      /* key data */
 408        u32 pad_1[18];
 409        u32 algo;       /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */
 410        u32 flags;      /* misc flags */
 411        u32 pad_2[3];
 412        u32 iv_initialized;     /* has IV been initialized already? */
 413        u32 pad_3;
 414        /* Rx IV */
 415        struct {
 416                u32 hi; /* upper 32 bits of IV */
 417                u16 lo; /* lower 16 bits of IV */
 418        } rxiv;
 419        u32 pad_4[2];
 420        u8 ea[ETH_ALEN];        /* per station */
 421};
 422
 423/*
 424 * dongle requires same struct as above but with fields in little endian order
 425 */
 426struct brcmf_wsec_key_le {
 427        __le32 index;           /* key index */
 428        __le32 len;             /* key length */
 429        u8 data[WLAN_MAX_KEY_LEN];      /* key data */
 430        __le32 pad_1[18];
 431        __le32 algo;    /* CRYPTO_ALGO_AES_CCM, CRYPTO_ALGO_WEP128, etc */
 432        __le32 flags;   /* misc flags */
 433        __le32 pad_2[3];
 434        __le32 iv_initialized;  /* has IV been initialized already? */
 435        __le32 pad_3;
 436        /* Rx IV */
 437        struct {
 438                __le32 hi;      /* upper 32 bits of IV */
 439                __le16 lo;      /* lower 16 bits of IV */
 440        } rxiv;
 441        __le32 pad_4[2];
 442        u8 ea[ETH_ALEN];        /* per station */
 443};
 444
 445/* Used to get specific STA parameters */
 446struct brcmf_scb_val_le {
 447        __le32 val;
 448        u8 ea[ETH_ALEN];
 449};
 450
 451/* channel encoding */
 452struct brcmf_channel_info_le {
 453        __le32 hw_channel;
 454        __le32 target_channel;
 455        __le32 scan_channel;
 456};
 457
 458struct brcmf_sta_info_le {
 459        __le16  ver;            /* version of this struct */
 460        __le16  len;            /* length in bytes of this structure */
 461        __le16  cap;            /* sta's advertised capabilities */
 462        __le32  flags;          /* flags defined below */
 463        __le32  idle;           /* time since data pkt rx'd from sta */
 464        u8      ea[ETH_ALEN];           /* Station address */
 465        __le32  count;                  /* # rates in this set */
 466        u8      rates[BRCMF_MAXRATES_IN_SET];   /* rates in 500kbps units */
 467                                                /* w/hi bit set if basic */
 468        __le32  in;             /* seconds elapsed since associated */
 469        __le32  listen_interval_inms; /* Min Listen interval in ms for STA */
 470        __le32  tx_pkts;        /* # of packets transmitted */
 471        __le32  tx_failures;    /* # of packets failed */
 472        __le32  rx_ucast_pkts;  /* # of unicast packets received */
 473        __le32  rx_mcast_pkts;  /* # of multicast packets received */
 474        __le32  tx_rate;        /* Rate of last successful tx frame */
 475        __le32  rx_rate;        /* Rate of last successful rx frame */
 476        __le32  rx_decrypt_succeeds;    /* # of packet decrypted successfully */
 477        __le32  rx_decrypt_failures;    /* # of packet decrypted failed */
 478};
 479
 480struct brcmf_chanspec_list {
 481        __le32  count;          /* # of entries */
 482        __le32  element[1];     /* variable length uint32 list */
 483};
 484
 485/*
 486 * WLC_E_PROBRESP_MSG
 487 * WLC_E_P2P_PROBREQ_MSG
 488 * WLC_E_ACTION_FRAME_RX
 489 */
 490struct brcmf_rx_mgmt_data {
 491        __be16  version;
 492        __be16  chanspec;
 493        __be32  rssi;
 494        __be32  mactime;
 495        __be32  rate;
 496};
 497
 498/* Bus independent dongle command */
 499struct brcmf_dcmd {
 500        uint cmd;               /* common dongle cmd definition */
 501        void *buf;              /* pointer to user buffer */
 502        uint len;               /* length of user buffer */
 503        u8 set;                 /* get or set request (optional) */
 504        uint used;              /* bytes read or written (optional) */
 505        uint needed;            /* bytes needed (optional) */
 506};
 507
 508/* Forward decls for struct brcmf_pub (see below) */
 509struct brcmf_proto;     /* device communication protocol info */
 510struct brcmf_cfg80211_dev; /* cfg80211 device info */
 511struct brcmf_fws_info; /* firmware signalling info */
 512
 513/* Common structure for module and instance linkage */
 514struct brcmf_pub {
 515        /* Linkage ponters */
 516        struct brcmf_bus *bus_if;
 517        struct brcmf_proto *prot;
 518        struct brcmf_cfg80211_info *config;
 519
 520        /* Internal brcmf items */
 521        uint hdrlen;            /* Total BRCMF header length (proto + bus) */
 522        uint rxsz;              /* Rx buffer size bus module should use */
 523        u8 wme_dp;              /* wme discard priority */
 524
 525        /* Dongle media info */
 526        unsigned long drv_version;      /* Version of dongle-resident driver */
 527        u8 mac[ETH_ALEN];               /* MAC address obtained from dongle */
 528
 529        /* Multicast data packets sent to dongle */
 530        unsigned long tx_multicast;
 531
 532        struct brcmf_if *iflist[BRCMF_MAX_IFS];
 533
 534        struct mutex proto_block;
 535        unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
 536
 537        struct brcmf_fweh_info fweh;
 538
 539        bool fw_signals;
 540        struct brcmf_fws_info *fws;
 541        spinlock_t fws_spinlock;
 542#ifdef DEBUG
 543        struct dentry *dbgfs_dir;
 544#endif
 545};
 546
 547struct brcmf_if_event {
 548        u8 ifidx;
 549        u8 action;
 550        u8 flags;
 551        u8 bssidx;
 552        u8 role;
 553};
 554
 555/* forward declarations */
 556struct brcmf_cfg80211_vif;
 557struct brcmf_fws_mac_descriptor;
 558
 559/**
 560 * enum brcmf_netif_stop_reason - reason for stopping netif queue.
 561 *
 562 * @BRCMF_NETIF_STOP_REASON_FWS_FC:
 563 *      netif stopped due to firmware signalling flow control.
 564 * @BRCMF_NETIF_STOP_REASON_BLOCK_BUS:
 565 *      netif stopped due to bus blocking.
 566 */
 567enum brcmf_netif_stop_reason {
 568        BRCMF_NETIF_STOP_REASON_FWS_FC = 1,
 569        BRCMF_NETIF_STOP_REASON_BLOCK_BUS = 2
 570};
 571
 572/**
 573 * struct brcmf_if - interface control information.
 574 *
 575 * @drvr: points to device related information.
 576 * @vif: points to cfg80211 specific interface information.
 577 * @ndev: associated network device.
 578 * @stats: interface specific network statistics.
 579 * @setmacaddr_work: worker object for setting mac address.
 580 * @multicast_work: worker object for multicast provisioning.
 581 * @fws_desc: interface specific firmware-signalling descriptor.
 582 * @ifidx: interface index in device firmware.
 583 * @bssidx: index of bss associated with this interface.
 584 * @mac_addr: assigned mac address.
 585 * @netif_stop: bitmap indicates reason why netif queues are stopped.
 586 * @netif_stop_lock: spinlock for update netif_stop from multiple sources.
 587 * @pend_8021x_cnt: tracks outstanding number of 802.1x frames.
 588 * @pend_8021x_wait: used for signalling change in count.
 589 */
 590struct brcmf_if {
 591        struct brcmf_pub *drvr;
 592        struct brcmf_cfg80211_vif *vif;
 593        struct net_device *ndev;
 594        struct net_device_stats stats;
 595        struct work_struct setmacaddr_work;
 596        struct work_struct multicast_work;
 597        struct brcmf_fws_mac_descriptor *fws_desc;
 598        int ifidx;
 599        s32 bssidx;
 600        u8 mac_addr[ETH_ALEN];
 601        u8 netif_stop;
 602        spinlock_t netif_stop_lock;
 603        atomic_t pend_8021x_cnt;
 604        wait_queue_head_t pend_8021x_wait;
 605};
 606
 607
 608extern int brcmf_netdev_wait_pend8021x(struct net_device *ndev);
 609
 610/* Return pointer to interface name */
 611extern char *brcmf_ifname(struct brcmf_pub *drvr, int idx);
 612
 613/* Query dongle */
 614extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx,
 615                                       uint cmd, void *buf, uint len);
 616extern int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,
 617                                    void *buf, uint len);
 618
 619/* Remove any protocol-specific data header. */
 620extern int brcmf_proto_hdrpull(struct brcmf_pub *drvr, bool do_fws, u8 *ifidx,
 621                               struct sk_buff *rxp);
 622
 623extern int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
 624extern struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bssidx,
 625                                     s32 ifidx, char *name, u8 *mac_addr);
 626extern void brcmf_del_if(struct brcmf_pub *drvr, s32 bssidx);
 627void brcmf_txflowblock_if(struct brcmf_if *ifp,
 628                          enum brcmf_netif_stop_reason reason, bool state);
 629extern u32 brcmf_get_chip_info(struct brcmf_if *ifp);
 630extern void brcmf_txfinalize(struct brcmf_pub *drvr, struct sk_buff *txp,
 631                             bool success);
 632
 633#endif                          /* _BRCMF_H_ */
 634