aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/brcm80211/brcmfmac/dhd.h')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/dhd.h256
1 files changed, 58 insertions, 198 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
index 17e7ae73e008..fd672bf53867 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
+++ b/drivers/net/wireless/brcm80211/brcmfmac/dhd.h
@@ -23,6 +23,8 @@
23 23
24#define BRCMF_VERSION_STR "4.218.248.5" 24#define BRCMF_VERSION_STR "4.218.248.5"
25 25
26#include "fweh.h"
27
26/******************************************************************************* 28/*******************************************************************************
27 * IO codes that are interpreted by dongle firmware 29 * IO codes that are interpreted by dongle firmware
28 ******************************************************************************/ 30 ******************************************************************************/
@@ -38,8 +40,11 @@
38#define BRCMF_C_GET_SSID 25 40#define BRCMF_C_GET_SSID 25
39#define BRCMF_C_SET_SSID 26 41#define BRCMF_C_SET_SSID 26
40#define BRCMF_C_GET_CHANNEL 29 42#define BRCMF_C_GET_CHANNEL 29
43#define BRCMF_C_SET_CHANNEL 30
41#define BRCMF_C_GET_SRL 31 44#define BRCMF_C_GET_SRL 31
45#define BRCMF_C_SET_SRL 32
42#define BRCMF_C_GET_LRL 33 46#define BRCMF_C_GET_LRL 33
47#define BRCMF_C_SET_LRL 34
43#define BRCMF_C_GET_RADIO 37 48#define BRCMF_C_GET_RADIO 37
44#define BRCMF_C_SET_RADIO 38 49#define BRCMF_C_SET_RADIO 38
45#define BRCMF_C_GET_PHYTYPE 39 50#define BRCMF_C_GET_PHYTYPE 39
@@ -58,6 +63,7 @@
58#define BRCMF_C_SET_COUNTRY 84 63#define BRCMF_C_SET_COUNTRY 84
59#define BRCMF_C_GET_PM 85 64#define BRCMF_C_GET_PM 85
60#define BRCMF_C_SET_PM 86 65#define BRCMF_C_SET_PM 86
66#define BRCMF_C_GET_CURR_RATESET 114
61#define BRCMF_C_GET_AP 117 67#define BRCMF_C_GET_AP 117
62#define BRCMF_C_SET_AP 118 68#define BRCMF_C_SET_AP 118
63#define BRCMF_C_GET_RSSI 127 69#define BRCMF_C_GET_RSSI 127
@@ -65,6 +71,7 @@
65#define BRCMF_C_SET_WSEC 134 71#define BRCMF_C_SET_WSEC 134
66#define BRCMF_C_GET_PHY_NOISE 135 72#define BRCMF_C_GET_PHY_NOISE 135
67#define BRCMF_C_GET_BSS_INFO 136 73#define BRCMF_C_GET_BSS_INFO 136
74#define BRCMF_C_GET_PHYLIST 180
68#define BRCMF_C_SET_SCAN_CHANNEL_TIME 185 75#define BRCMF_C_SET_SCAN_CHANNEL_TIME 185
69#define BRCMF_C_SET_SCAN_UNASSOC_TIME 187 76#define BRCMF_C_SET_SCAN_UNASSOC_TIME 187
70#define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON 201 77#define BRCMF_C_SCB_DEAUTHENTICATE_FOR_REASON 201
@@ -100,29 +107,8 @@
100#define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff 107#define BRCMF_SCAN_PARAMS_COUNT_MASK 0x0000ffff
101#define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16 108#define BRCMF_SCAN_PARAMS_NSSID_SHIFT 16
102 109
103#define BRCMF_SCAN_ACTION_START 1
104#define BRCMF_SCAN_ACTION_CONTINUE 2
105#define WL_SCAN_ACTION_ABORT 3
106
107#define BRCMF_ISCAN_REQ_VERSION 1
108
109/* brcmf_iscan_results status values */
110#define BRCMF_SCAN_RESULTS_SUCCESS 0
111#define BRCMF_SCAN_RESULTS_PARTIAL 1
112#define BRCMF_SCAN_RESULTS_PENDING 2
113#define BRCMF_SCAN_RESULTS_ABORTED 3
114#define BRCMF_SCAN_RESULTS_NO_MEM 4
115
116/* Indicates this key is using soft encrypt */
117#define WL_SOFT_KEY (1 << 0)
118/* primary (ie tx) key */ 110/* primary (ie tx) key */
119#define BRCMF_PRIMARY_KEY (1 << 1) 111#define BRCMF_PRIMARY_KEY (1 << 1)
120/* Reserved for backward compat */
121#define WL_KF_RES_4 (1 << 4)
122/* Reserved for backward compat */
123#define WL_KF_RES_5 (1 << 5)
124/* Indicates a group key for a IBSS PEER */
125#define WL_IBSS_PEER_GROUP_KEY (1 << 6)
126 112
127/* For supporting multiple interfaces */ 113/* For supporting multiple interfaces */
128#define BRCMF_MAX_IFS 16 114#define BRCMF_MAX_IFS 16
@@ -130,10 +116,6 @@
130#define DOT11_BSSTYPE_ANY 2 116#define DOT11_BSSTYPE_ANY 2
131#define DOT11_MAX_DEFAULT_KEYS 4 117#define DOT11_MAX_DEFAULT_KEYS 4
132 118
133#define BRCMF_EVENT_MSG_LINK 0x01
134#define BRCMF_EVENT_MSG_FLUSHTXQ 0x02
135#define BRCMF_EVENT_MSG_GROUP 0x04
136
137#define BRCMF_ESCAN_REQ_VERSION 1 119#define BRCMF_ESCAN_REQ_VERSION 1
138 120
139#define WLC_BSS_RSSI_ON_CHANNEL 0x0002 121#define WLC_BSS_RSSI_ON_CHANNEL 0x0002
@@ -141,108 +123,6 @@
141#define BRCMF_MAXRATES_IN_SET 16 /* max # of rates in rateset */ 123#define BRCMF_MAXRATES_IN_SET 16 /* max # of rates in rateset */
142#define BRCMF_STA_ASSOC 0x10 /* Associated */ 124#define BRCMF_STA_ASSOC 0x10 /* Associated */
143 125
144struct brcmf_event_msg {
145 __be16 version;
146 __be16 flags;
147 __be32 event_type;
148 __be32 status;
149 __be32 reason;
150 __be32 auth_type;
151 __be32 datalen;
152 u8 addr[ETH_ALEN];
153 char ifname[IFNAMSIZ];
154 u8 ifidx;
155 u8 bsscfgidx;
156} __packed;
157
158struct brcm_ethhdr {
159 u16 subtype;
160 u16 length;
161 u8 version;
162 u8 oui[3];
163 u16 usr_subtype;
164} __packed;
165
166struct brcmf_event {
167 struct ethhdr eth;
168 struct brcm_ethhdr hdr;
169 struct brcmf_event_msg msg;
170} __packed;
171
172/* event codes sent by the dongle to this driver */
173#define BRCMF_E_SET_SSID 0
174#define BRCMF_E_JOIN 1
175#define BRCMF_E_START 2
176#define BRCMF_E_AUTH 3
177#define BRCMF_E_AUTH_IND 4
178#define BRCMF_E_DEAUTH 5
179#define BRCMF_E_DEAUTH_IND 6
180#define BRCMF_E_ASSOC 7
181#define BRCMF_E_ASSOC_IND 8
182#define BRCMF_E_REASSOC 9
183#define BRCMF_E_REASSOC_IND 10
184#define BRCMF_E_DISASSOC 11
185#define BRCMF_E_DISASSOC_IND 12
186#define BRCMF_E_QUIET_START 13
187#define BRCMF_E_QUIET_END 14
188#define BRCMF_E_BEACON_RX 15
189#define BRCMF_E_LINK 16
190#define BRCMF_E_MIC_ERROR 17
191#define BRCMF_E_NDIS_LINK 18
192#define BRCMF_E_ROAM 19
193#define BRCMF_E_TXFAIL 20
194#define BRCMF_E_PMKID_CACHE 21
195#define BRCMF_E_RETROGRADE_TSF 22
196#define BRCMF_E_PRUNE 23
197#define BRCMF_E_AUTOAUTH 24
198#define BRCMF_E_EAPOL_MSG 25
199#define BRCMF_E_SCAN_COMPLETE 26
200#define BRCMF_E_ADDTS_IND 27
201#define BRCMF_E_DELTS_IND 28
202#define BRCMF_E_BCNSENT_IND 29
203#define BRCMF_E_BCNRX_MSG 30
204#define BRCMF_E_BCNLOST_MSG 31
205#define BRCMF_E_ROAM_PREP 32
206#define BRCMF_E_PFN_NET_FOUND 33
207#define BRCMF_E_PFN_NET_LOST 34
208#define BRCMF_E_RESET_COMPLETE 35
209#define BRCMF_E_JOIN_START 36
210#define BRCMF_E_ROAM_START 37
211#define BRCMF_E_ASSOC_START 38
212#define BRCMF_E_IBSS_ASSOC 39
213#define BRCMF_E_RADIO 40
214#define BRCMF_E_PSM_WATCHDOG 41
215#define BRCMF_E_PROBREQ_MSG 44
216#define BRCMF_E_SCAN_CONFIRM_IND 45
217#define BRCMF_E_PSK_SUP 46
218#define BRCMF_E_COUNTRY_CODE_CHANGED 47
219#define BRCMF_E_EXCEEDED_MEDIUM_TIME 48
220#define BRCMF_E_ICV_ERROR 49
221#define BRCMF_E_UNICAST_DECODE_ERROR 50
222#define BRCMF_E_MULTICAST_DECODE_ERROR 51
223#define BRCMF_E_TRACE 52
224#define BRCMF_E_IF 54
225#define BRCMF_E_RSSI 56
226#define BRCMF_E_PFN_SCAN_COMPLETE 57
227#define BRCMF_E_EXTLOG_MSG 58
228#define BRCMF_E_ACTION_FRAME 59
229#define BRCMF_E_ACTION_FRAME_COMPLETE 60
230#define BRCMF_E_PRE_ASSOC_IND 61
231#define BRCMF_E_PRE_REASSOC_IND 62
232#define BRCMF_E_CHANNEL_ADOPTED 63
233#define BRCMF_E_AP_STARTED 64
234#define BRCMF_E_DFS_AP_STOP 65
235#define BRCMF_E_DFS_AP_RESUME 66
236#define BRCMF_E_RESERVED1 67
237#define BRCMF_E_RESERVED2 68
238#define BRCMF_E_ESCAN_RESULT 69
239#define BRCMF_E_ACTION_FRAME_OFF_CHAN_COMPLETE 70
240#define BRCMF_E_DCS_REQUEST 73
241
242#define BRCMF_E_FIFO_CREDIT_MAP 74
243
244#define BRCMF_E_LAST 75
245
246#define BRCMF_E_STATUS_SUCCESS 0 126#define BRCMF_E_STATUS_SUCCESS 0
247#define BRCMF_E_STATUS_FAIL 1 127#define BRCMF_E_STATUS_FAIL 1
248#define BRCMF_E_STATUS_TIMEOUT 2 128#define BRCMF_E_STATUS_TIMEOUT 2
@@ -318,6 +198,12 @@ struct brcmf_event {
318#define BRCMF_E_LINK_ASSOC_REC 3 198#define BRCMF_E_LINK_ASSOC_REC 3
319#define BRCMF_E_LINK_BSSCFG_DIS 4 199#define BRCMF_E_LINK_BSSCFG_DIS 4
320 200
201/* Small, medium and maximum buffer size for dcmd
202 */
203#define BRCMF_DCMD_SMLEN 256
204#define BRCMF_DCMD_MEDLEN 1536
205#define BRCMF_DCMD_MAXLEN 8192
206
321/* Pattern matching filter. Specifies an offset within received packets to 207/* Pattern matching filter. Specifies an offset within received packets to
322 * start matching, the pattern to match, the size of the pattern, and a bitmask 208 * start matching, the pattern to match, the size of the pattern, and a bitmask
323 * that indicates which bits within the pattern should be matched. 209 * that indicates which bits within the pattern should be matched.
@@ -397,7 +283,7 @@ struct brcm_rateset_le {
397 /* # rates in this set */ 283 /* # rates in this set */
398 __le32 count; 284 __le32 count;
399 /* rates in 500kbps units w/hi bit set if basic */ 285 /* rates in 500kbps units w/hi bit set if basic */
400 u8 rates[WL_NUMRATES]; 286 u8 rates[BRCMF_MAXRATES_IN_SET];
401}; 287};
402 288
403struct brcmf_ssid { 289struct brcmf_ssid {
@@ -446,14 +332,6 @@ struct brcmf_scan_params_le {
446 __le16 channel_list[1]; /* list of chanspecs */ 332 __le16 channel_list[1]; /* list of chanspecs */
447}; 333};
448 334
449/* incremental scan struct */
450struct brcmf_iscan_params_le {
451 __le32 version;
452 __le16 action;
453 __le16 scan_duration;
454 struct brcmf_scan_params_le params_le;
455};
456
457struct brcmf_scan_results { 335struct brcmf_scan_results {
458 u32 buflen; 336 u32 buflen;
459 u32 version; 337 u32 version;
@@ -461,12 +339,6 @@ struct brcmf_scan_results {
461 struct brcmf_bss_info_le bss_info_le[]; 339 struct brcmf_bss_info_le bss_info_le[];
462}; 340};
463 341
464struct brcmf_scan_results_le {
465 __le32 buflen;
466 __le32 version;
467 __le32 count;
468};
469
470struct brcmf_escan_params_le { 342struct brcmf_escan_params_le {
471 __le32 version; 343 __le32 version;
472 __le16 action; 344 __le16 action;
@@ -502,23 +374,6 @@ struct brcmf_join_params {
502 struct brcmf_assoc_params_le params_le; 374 struct brcmf_assoc_params_le params_le;
503}; 375};
504 376
505/* incremental scan results struct */
506struct brcmf_iscan_results {
507 union {
508 u32 status;
509 __le32 status_le;
510 };
511 union {
512 struct brcmf_scan_results results;
513 struct brcmf_scan_results_le results_le;
514 };
515};
516
517/* size of brcmf_iscan_results not including variable length array */
518#define BRCMF_ISCAN_RESULTS_FIXED_SIZE \
519 (sizeof(struct brcmf_scan_results) + \
520 offsetof(struct brcmf_iscan_results, results))
521
522struct brcmf_wsec_key { 377struct brcmf_wsec_key {
523 u32 index; /* key index */ 378 u32 index; /* key index */
524 u32 len; /* key length */ 379 u32 len; /* key length */
@@ -615,7 +470,6 @@ struct brcmf_pub {
615 struct brcmf_bus *bus_if; 470 struct brcmf_bus *bus_if;
616 struct brcmf_proto *prot; 471 struct brcmf_proto *prot;
617 struct brcmf_cfg80211_info *config; 472 struct brcmf_cfg80211_info *config;
618 struct device *dev; /* fullmac dongle device pointer */
619 473
620 /* Internal brcmf items */ 474 /* Internal brcmf items */
621 uint hdrlen; /* Total BRCMF header length (proto + bus) */ 475 uint hdrlen; /* Total BRCMF header length (proto + bus) */
@@ -623,7 +477,6 @@ struct brcmf_pub {
623 u8 wme_dp; /* wme discard priority */ 477 u8 wme_dp; /* wme discard priority */
624 478
625 /* Dongle media info */ 479 /* Dongle media info */
626 bool iswl; /* Dongle-resident driver is wl */
627 unsigned long drv_version; /* Version of dongle-resident driver */ 480 unsigned long drv_version; /* Version of dongle-resident driver */
628 u8 mac[ETH_ALEN]; /* MAC address obtained from dongle */ 481 u8 mac[ETH_ALEN]; /* MAC address obtained from dongle */
629 482
@@ -651,26 +504,26 @@ struct brcmf_pub {
651 int in_suspend; /* flag set to 1 when early suspend called */ 504 int in_suspend; /* flag set to 1 when early suspend called */
652 int dtim_skip; /* dtim skip , default 0 means wake each dtim */ 505 int dtim_skip; /* dtim skip , default 0 means wake each dtim */
653 506
654 /* Pkt filter defination */
655 char *pktfilter[100];
656 int pktfilter_count;
657
658 u8 country_code[BRCM_CNTRY_BUF_SZ];
659 char eventmask[BRCMF_EVENTING_MASK_LEN];
660
661 struct brcmf_if *iflist[BRCMF_MAX_IFS]; 507 struct brcmf_if *iflist[BRCMF_MAX_IFS];
662 508
663 struct mutex proto_block; 509 struct mutex proto_block;
510 unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
664 511
665 struct work_struct setmacaddr_work;
666 struct work_struct multicast_work;
667 u8 macvalue[ETH_ALEN]; 512 u8 macvalue[ETH_ALEN];
668 atomic_t pend_8021x_cnt; 513 atomic_t pend_8021x_cnt;
514 wait_queue_head_t pend_8021x_wait;
515
516 struct brcmf_fweh_info fweh;
669#ifdef DEBUG 517#ifdef DEBUG
670 struct dentry *dbgfs_dir; 518 struct dentry *dbgfs_dir;
671#endif 519#endif
672}; 520};
673 521
522struct bcmevent_name {
523 uint event;
524 const char *name;
525};
526
674struct brcmf_if_event { 527struct brcmf_if_event {
675 u8 ifidx; 528 u8 ifidx;
676 u8 action; 529 u8 action;
@@ -678,47 +531,54 @@ struct brcmf_if_event {
678 u8 bssidx; 531 u8 bssidx;
679}; 532};
680 533
681struct bcmevent_name { 534/* forward declaration */
682 uint event; 535struct brcmf_cfg80211_vif;
683 const char *name; 536
537/**
538 * struct brcmf_if - interface control information.
539 *
540 * @drvr: points to device related information.
541 * @vif: points to cfg80211 specific interface information.
542 * @ndev: associated network device.
543 * @stats: interface specific network statistics.
544 * @idx: interface index in device firmware.
545 * @bssidx: index of bss associated with this interface.
546 * @mac_addr: assigned mac address.
547 */
548struct brcmf_if {
549 struct brcmf_pub *drvr;
550 struct brcmf_cfg80211_vif *vif;
551 struct net_device *ndev;
552 struct net_device_stats stats;
553 struct work_struct setmacaddr_work;
554 struct work_struct multicast_work;
555 int idx;
556 s32 bssidx;
557 u8 mac_addr[ETH_ALEN];
684}; 558};
685 559
686extern const struct bcmevent_name bcmevent_names[]; 560static inline s32 brcmf_ndev_bssidx(struct net_device *ndev)
561{
562 struct brcmf_if *ifp = netdev_priv(ndev);
563 return ifp->bssidx;
564}
687 565
688extern uint brcmf_c_mkiovar(char *name, char *data, uint datalen, 566extern const struct bcmevent_name bcmevent_names[];
689 char *buf, uint len);
690extern uint brcmf_c_mkiovar_bsscfg(char *name, char *data, uint datalen,
691 char *buf, uint buflen, s32 bssidx);
692 567
693extern int brcmf_netdev_wait_pend8021x(struct net_device *ndev); 568extern int brcmf_netdev_wait_pend8021x(struct net_device *ndev);
694 569
695extern s32 brcmf_exec_dcmd(struct net_device *dev, u32 cmd, void *arg, u32 len);
696extern int brcmf_netlink_dcmd(struct net_device *ndev, struct brcmf_dcmd *dcmd);
697
698/* Return pointer to interface name */ 570/* Return pointer to interface name */
699extern char *brcmf_ifname(struct brcmf_pub *drvr, int idx); 571extern char *brcmf_ifname(struct brcmf_pub *drvr, int idx);
700 572
701/* Query dongle */ 573/* Query dongle */
702extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx, 574extern int brcmf_proto_cdc_query_dcmd(struct brcmf_pub *drvr, int ifidx,
703 uint cmd, void *buf, uint len); 575 uint cmd, void *buf, uint len);
576extern int brcmf_proto_cdc_set_dcmd(struct brcmf_pub *drvr, int ifidx, uint cmd,
577 void *buf, uint len);
704 578
705#ifdef DEBUG 579extern int brcmf_net_attach(struct brcmf_if *ifp);
706extern int brcmf_write_to_file(struct brcmf_pub *drvr, const u8 *buf, int size); 580extern struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, int ifidx,
707#endif /* DEBUG */ 581 s32 bssidx, char *name, u8 *mac_addr);
708
709extern int brcmf_ifname2idx(struct brcmf_pub *drvr, char *name);
710extern int brcmf_c_host_event(struct brcmf_pub *drvr, int *idx,
711 void *pktdata, struct brcmf_event_msg *,
712 void **data_ptr);
713
714extern void brcmf_del_if(struct brcmf_pub *drvr, int ifidx); 582extern void brcmf_del_if(struct brcmf_pub *drvr, int ifidx);
715 583
716extern void brcmf_c_pktfilter_offload_set(struct brcmf_pub *drvr, char *arg);
717extern void brcmf_c_pktfilter_offload_enable(struct brcmf_pub *drvr, char *arg,
718 int enable, int master_mode);
719
720#define BRCMF_DCMD_SMLEN 256 /* "small" cmd buffer required */
721#define BRCMF_DCMD_MEDLEN 1536 /* "med" cmd buffer required */
722#define BRCMF_DCMD_MAXLEN 8192 /* max length cmd buffer required */
723
724#endif /* _BRCMF_H_ */ 584#endif /* _BRCMF_H_ */