brcmfmac: move firmware related structures to fwil_types.h
[deliverable/linux.git] / drivers / net / wireless / brcm80211 / brcmfmac / dhd.h
CommitLineData
5b435de0
AS
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
5c36b99a
AS
26#include "fweh.h"
27
5b435de0
AS
28/*******************************************************************************
29 * IO codes that are interpreted by dongle firmware
30 ******************************************************************************/
83cf17aa 31#define BRCMF_C_GET_VERSION 1
5b435de0 32#define BRCMF_C_UP 2
1a873342 33#define BRCMF_C_DOWN 3
5b435de0
AS
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
81d5f1bb 43#define BRCMF_C_TERMINATED 28
5b435de0 44#define BRCMF_C_GET_CHANNEL 29
b87e2c48 45#define BRCMF_C_SET_CHANNEL 30
5b435de0 46#define BRCMF_C_GET_SRL 31
b87e2c48 47#define BRCMF_C_SET_SRL 32
5b435de0 48#define BRCMF_C_GET_LRL 33
b87e2c48 49#define BRCMF_C_SET_LRL 34
5b435de0
AS
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
1a873342
HM
61#define BRCMF_C_GET_BCNPRD 75
62#define BRCMF_C_SET_BCNPRD 76
5b435de0 63#define BRCMF_C_GET_DTIMPRD 77
1a873342 64#define BRCMF_C_SET_DTIMPRD 78
5b435de0
AS
65#define BRCMF_C_SET_COUNTRY 84
66#define BRCMF_C_GET_PM 85
67#define BRCMF_C_SET_PM 86
b87e2c48 68#define BRCMF_C_GET_CURR_RATESET 114
5b435de0
AS
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
d48200ba 76#define BRCMF_C_GET_BANDLIST 140
d3c0b633 77#define BRCMF_C_SET_SCB_TIMEOUT 158
b87e2c48 78#define BRCMF_C_GET_PHYLIST 180
5b435de0
AS
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
5b435de0
AS
100#define TOE_TX_CSUM_OL 0x00000001
101#define TOE_RX_CSUM_OL 0x00000002
102
5b435de0
AS
103/* For supporting multiple interfaces */
104#define BRCMF_MAX_IFS 16
5b435de0 105
5b435de0
AS
106#define DOT11_MAX_DEFAULT_KEYS 4
107
5b435de0
AS
108#define BRCMF_E_STATUS_SUCCESS 0
109#define BRCMF_E_STATUS_FAIL 1
110#define BRCMF_E_STATUS_TIMEOUT 2
111#define BRCMF_E_STATUS_NO_NETWORKS 3
112#define BRCMF_E_STATUS_ABORT 4
113#define BRCMF_E_STATUS_NO_ACK 5
114#define BRCMF_E_STATUS_UNSOLICITED 6
115#define BRCMF_E_STATUS_ATTEMPT 7
116#define BRCMF_E_STATUS_PARTIAL 8
117#define BRCMF_E_STATUS_NEWSCAN 9
118#define BRCMF_E_STATUS_NEWASSOC 10
119#define BRCMF_E_STATUS_11HQUIET 11
120#define BRCMF_E_STATUS_SUPPRESS 12
121#define BRCMF_E_STATUS_NOCHANS 13
122#define BRCMF_E_STATUS_CS_ABORT 15
123#define BRCMF_E_STATUS_ERROR 16
124
125#define BRCMF_E_REASON_INITIAL_ASSOC 0
126#define BRCMF_E_REASON_LOW_RSSI 1
127#define BRCMF_E_REASON_DEAUTH 2
128#define BRCMF_E_REASON_DISASSOC 3
129#define BRCMF_E_REASON_BCNS_LOST 4
130#define BRCMF_E_REASON_MINTXRATE 9
131#define BRCMF_E_REASON_TXFAIL 10
132
5f4f9f11 133#define BRCMF_E_REASON_LINK_BSSCFG_DIS 4
5b435de0
AS
134#define BRCMF_E_REASON_FAST_ROAM_FAILED 5
135#define BRCMF_E_REASON_DIRECTED_ROAM 6
136#define BRCMF_E_REASON_TSPEC_REJECTED 7
137#define BRCMF_E_REASON_BETTER_AP 8
138
139#define BRCMF_E_PRUNE_ENCR_MISMATCH 1
140#define BRCMF_E_PRUNE_BCAST_BSSID 2
141#define BRCMF_E_PRUNE_MAC_DENY 3
142#define BRCMF_E_PRUNE_MAC_NA 4
143#define BRCMF_E_PRUNE_REG_PASSV 5
144#define BRCMF_E_PRUNE_SPCT_MGMT 6
145#define BRCMF_E_PRUNE_RADAR 7
146#define BRCMF_E_RSN_MISMATCH 8
147#define BRCMF_E_PRUNE_NO_COMMON_RATES 9
148#define BRCMF_E_PRUNE_BASIC_RATES 10
149#define BRCMF_E_PRUNE_CIPHER_NA 12
150#define BRCMF_E_PRUNE_KNOWN_STA 13
151#define BRCMF_E_PRUNE_WDS_PEER 15
152#define BRCMF_E_PRUNE_QBSS_LOAD 16
153#define BRCMF_E_PRUNE_HOME_AP 17
154
155#define BRCMF_E_SUP_OTHER 0
156#define BRCMF_E_SUP_DECRYPT_KEY_DATA 1
157#define BRCMF_E_SUP_BAD_UCAST_WEP128 2
158#define BRCMF_E_SUP_BAD_UCAST_WEP40 3
159#define BRCMF_E_SUP_UNSUP_KEY_LEN 4
160#define BRCMF_E_SUP_PW_KEY_CIPHER 5
161#define BRCMF_E_SUP_MSG3_TOO_MANY_IE 6
162#define BRCMF_E_SUP_MSG3_IE_MISMATCH 7
163#define BRCMF_E_SUP_NO_INSTALL_FLAG 8
164#define BRCMF_E_SUP_MSG3_NO_GTK 9
165#define BRCMF_E_SUP_GRP_KEY_CIPHER 10
166#define BRCMF_E_SUP_GRP_MSG1_NO_GTK 11
167#define BRCMF_E_SUP_GTK_DECRYPT_FAIL 12
168#define BRCMF_E_SUP_SEND_FAIL 13
169#define BRCMF_E_SUP_DEAUTH 14
170
171#define BRCMF_E_IF_ADD 1
172#define BRCMF_E_IF_DEL 2
173#define BRCMF_E_IF_CHANGE 3
174
2ee8382f
AS
175#define BRCMF_E_IF_FLAG_NOIF 1
176
5b435de0
AS
177#define BRCMF_E_IF_ROLE_STA 0
178#define BRCMF_E_IF_ROLE_AP 1
179#define BRCMF_E_IF_ROLE_WDS 2
180
181#define BRCMF_E_LINK_BCN_LOSS 1
182#define BRCMF_E_LINK_DISASSOC 2
183#define BRCMF_E_LINK_ASSOC_REC 3
184#define BRCMF_E_LINK_BSSCFG_DIS 4
185
81f5dcb8
HM
186/* Small, medium and maximum buffer size for dcmd
187 */
188#define BRCMF_DCMD_SMLEN 256
189#define BRCMF_DCMD_MEDLEN 1536
190#define BRCMF_DCMD_MAXLEN 8192
191
87edd891
AS
192#define BRCMF_AMPDU_RX_REORDER_MAXFLOWS 256
193
55685b8f
AS
194/* Length of firmware version string stored for
195 * ethtool driver info which uses 32 bytes as well.
196 */
197#define BRCMF_DRIVER_FIRMWARE_VERSION_LEN 32
198
5b435de0
AS
199/* Bus independent dongle command */
200struct brcmf_dcmd {
201 uint cmd; /* common dongle cmd definition */
202 void *buf; /* pointer to user buffer */
203 uint len; /* length of user buffer */
204 u8 set; /* get or set request (optional) */
205 uint used; /* bytes read or written (optional) */
206 uint needed; /* bytes needed (optional) */
207};
208
87edd891
AS
209/**
210 * struct brcmf_ampdu_rx_reorder - AMPDU receive reorder info
211 *
212 * @pktslots: dynamic allocated array for ordering AMPDU packets.
213 * @flow_id: AMPDU flow identifier.
214 * @cur_idx: last AMPDU index from firmware.
215 * @exp_idx: expected next AMPDU index.
216 * @max_idx: maximum amount of packets per AMPDU.
217 * @pend_pkts: number of packets currently in @pktslots.
218 */
219struct brcmf_ampdu_rx_reorder {
220 struct sk_buff **pktslots;
221 u8 flow_id;
222 u8 cur_idx;
223 u8 exp_idx;
224 u8 max_idx;
225 u8 pend_pkts;
226};
227
5b435de0 228/* Forward decls for struct brcmf_pub (see below) */
5b435de0 229struct brcmf_proto; /* device communication protocol info */
5b435de0 230struct brcmf_cfg80211_dev; /* cfg80211 device info */
349e7104 231struct brcmf_fws_info; /* firmware signalling info */
5b435de0
AS
232
233/* Common structure for module and instance linkage */
234struct brcmf_pub {
235 /* Linkage ponters */
8d169aa0 236 struct brcmf_bus *bus_if;
85b84133 237 struct brcmf_proto *proto;
27a68fe3 238 struct brcmf_cfg80211_info *config;
5b435de0
AS
239
240 /* Internal brcmf items */
5b435de0 241 uint hdrlen; /* Total BRCMF header length (proto + bus) */
5b435de0
AS
242 uint rxsz; /* Rx buffer size bus module should use */
243 u8 wme_dp; /* wme discard priority */
244
245 /* Dongle media info */
55685b8f 246 char fwver[BRCMF_DRIVER_FIRMWARE_VERSION_LEN];
5b435de0 247 u8 mac[ETH_ALEN]; /* MAC address obtained from dongle */
5b435de0 248
5b435de0
AS
249 /* Multicast data packets sent to dongle */
250 unsigned long tx_multicast;
5b435de0 251
d08b6a37
FL
252 struct brcmf_if *iflist[BRCMF_MAX_IFS];
253
254 struct mutex proto_block;
81f5dcb8 255 unsigned char proto_buf[BRCMF_DCMD_MAXLEN];
d08b6a37 256
5c36b99a 257 struct brcmf_fweh_info fweh;
349e7104 258
349e7104 259 struct brcmf_fws_info *fws;
87edd891
AS
260
261 struct brcmf_ampdu_rx_reorder
262 *reorder_flows[BRCMF_AMPDU_RX_REORDER_MAXFLOWS];
d319a7cf
AS
263#ifdef DEBUG
264 struct dentry *dbgfs_dir;
265#endif
5b435de0
AS
266};
267
268struct brcmf_if_event {
269 u8 ifidx;
270 u8 action;
271 u8 flags;
272 u8 bssidx;
8fdd1578 273 u8 role;
5b435de0
AS
274};
275
bb8c8063 276/* forward declarations */
3eacf866 277struct brcmf_cfg80211_vif;
bb8c8063 278struct brcmf_fws_mac_descriptor;
3eacf866 279
29e04ae3
AS
280/**
281 * enum brcmf_netif_stop_reason - reason for stopping netif queue.
282 *
283 * @BRCMF_NETIF_STOP_REASON_FWS_FC:
284 * netif stopped due to firmware signalling flow control.
285 * @BRCMF_NETIF_STOP_REASON_BLOCK_BUS:
286 * netif stopped due to bus blocking.
287 */
288enum brcmf_netif_stop_reason {
289 BRCMF_NETIF_STOP_REASON_FWS_FC = 1,
290 BRCMF_NETIF_STOP_REASON_BLOCK_BUS = 2
291};
292
1d4fd8d7
AS
293/**
294 * struct brcmf_if - interface control information.
295 *
296 * @drvr: points to device related information.
3eacf866 297 * @vif: points to cfg80211 specific interface information.
1d4fd8d7
AS
298 * @ndev: associated network device.
299 * @stats: interface specific network statistics.
bb8c8063
AS
300 * @setmacaddr_work: worker object for setting mac address.
301 * @multicast_work: worker object for multicast provisioning.
302 * @fws_desc: interface specific firmware-signalling descriptor.
2880b868 303 * @ifidx: interface index in device firmware.
1d4fd8d7
AS
304 * @bssidx: index of bss associated with this interface.
305 * @mac_addr: assigned mac address.
29e04ae3 306 * @netif_stop: bitmap indicates reason why netif queues are stopped.
df50f756 307 * @netif_stop_lock: spinlock for update netif_stop from multiple sources.
10ef7321
HM
308 * @pend_8021x_cnt: tracks outstanding number of 802.1x frames.
309 * @pend_8021x_wait: used for signalling change in count.
1d4fd8d7
AS
310 */
311struct brcmf_if {
312 struct brcmf_pub *drvr;
3eacf866 313 struct brcmf_cfg80211_vif *vif;
1d4fd8d7
AS
314 struct net_device *ndev;
315 struct net_device_stats stats;
bdf5ff51
AS
316 struct work_struct setmacaddr_work;
317 struct work_struct multicast_work;
bb8c8063 318 struct brcmf_fws_mac_descriptor *fws_desc;
2880b868 319 int ifidx;
1d4fd8d7
AS
320 s32 bssidx;
321 u8 mac_addr[ETH_ALEN];
29e04ae3 322 u8 netif_stop;
df50f756 323 spinlock_t netif_stop_lock;
10ef7321
HM
324 atomic_t pend_8021x_cnt;
325 wait_queue_head_t pend_8021x_wait;
5b435de0
AS
326};
327
87edd891
AS
328struct brcmf_skb_reorder_data {
329 u8 *reorder;
330};
1d4fd8d7 331
9bd91f3c 332int brcmf_netdev_wait_pend8021x(struct net_device *ndev);
5b435de0 333
5b435de0 334/* Return pointer to interface name */
9bd91f3c 335char *brcmf_ifname(struct brcmf_pub *drvr, int idx);
5b435de0 336
9bd91f3c
JP
337int brcmf_net_attach(struct brcmf_if *ifp, bool rtnl_locked);
338struct brcmf_if *brcmf_add_if(struct brcmf_pub *drvr, s32 bssidx, s32 ifidx,
339 char *name, u8 *mac_addr);
340void brcmf_del_if(struct brcmf_pub *drvr, s32 bssidx);
29e04ae3
AS
341void brcmf_txflowblock_if(struct brcmf_if *ifp,
342 enum brcmf_netif_stop_reason reason, bool state);
9bd91f3c
JP
343u32 brcmf_get_chip_info(struct brcmf_if *ifp);
344void brcmf_txfinalize(struct brcmf_pub *drvr, struct sk_buff *txp,
345 bool success);
5b435de0 346
f931868d
HM
347/* Sets dongle media info (drv_version, mac address). */
348int brcmf_c_preinit_dcmds(struct brcmf_if *ifp);
349
5b435de0 350#endif /* _BRCMF_H_ */
This page took 0.215642 seconds and 5 git commands to generate.