Staging: rspiusb: remove the driver
[safe/jmp/linux-2.6] / drivers / staging / stlc45xx / stlc45xx_lmac.h
1 /************************************************************************
2 *  This is the LMAC API interface header file for STLC4560.             *
3 *  Copyright (C) 2007 Conexant Systems, Inc.                            *
4 *  This program is free software; you can redistribute it and/or        *
5 *  modify it under the terms of the GNU General Public License          *
6 *  as published by the Free Software Foundation; either version 2       *
7 *  of the License, or (at your option) any later version.               *
8 *                                                                       *
9 *  This program is distributed in the hope that it will be useful,      *
10 *  but WITHOUT ANY WARRANTY; without even the implied warranty of       *
11 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
12 *  GNU General Public License for more details.                         *
13 *                                                                       *
14 *  You should have received a copy of the GNU General Public License    *
15 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.*
16 *************************************************************************/
17
18 #ifndef __lmac_h__
19 #define __lmac_h__
20
21 #define LM_TOP_VARIANT      0x0506
22 #define LM_BOTTOM_VARIANT   0x0506
23
24 /*
25  * LMAC - UMAC interface definition:
26  */
27
28 #define LM_FLAG_CONTROL     0x8000
29 #define LM_FLAG_ALIGN       0x4000
30
31 #define LM_CTRL_OPSET       0x0001
32
33 #define LM_OUT_PROMISC      0x0001
34 #define LM_OUT_TIMESTAMP    0x0002
35 #define LM_OUT_SEQNR        0x0004
36 #define LM_OUT_BURST        0x0010
37 #define LM_OUT_NOCANCEL     0x0020
38 #define LM_OUT_CLEARTIM     0x0040
39 #define LM_OUT_HITCHHIKE    0x0080
40 #define LM_OUT_COMPRESS     0x0100
41 #define LM_OUT_CONCAT       0x0200
42 #define LM_OUT_PCS_ACCEPT   0x0400
43 #define LM_OUT_WAITEOSP     0x0800
44
45
46 #define LM_ALOFT_SP         0x10
47 #define LM_ALOFT_CTS        0x20
48 #define LM_ALOFT_RTS        0x40
49 #define LM_ALOFT_MASK       0x1f
50 #define LM_ALOFT_RATE       0x0f
51
52 #define LM_IN_FCS_GOOD      0x0001
53 #define LM_IN_MATCH_MAC     0x0002
54 #define LM_IN_MCBC          0x0004
55 #define LM_IN_BEACON        0x0008
56 #define LM_IN_MATCH_BSS     0x0010
57 #define LM_IN_BCAST_BSS     0x0020
58 #define LM_IN_DATA          0x0040
59 #define LM_IN_TRUNCATED     0x0080
60
61 #define LM_IN_TRANSPARENT   0x0200
62
63 #define LM_QUEUE_BEACON     0
64 #define LM_QUEUE_SCAN       1
65 #define LM_QUEUE_MGT        2
66 #define LM_QUEUE_MCBC       3
67 #define LM_QUEUE_DATA       4
68 #define LM_QUEUE_DATA0      4
69 #define LM_QUEUE_DATA1      5
70 #define LM_QUEUE_DATA2      6
71 #define LM_QUEUE_DATA3      7
72
73 #define LM_SETUP_INFRA          0x0001
74 #define LM_SETUP_IBSS           0x0002
75 #define LM_SETUP_TRANSPARENT    0x0008
76 #define LM_SETUP_PROMISCUOUS    0x0010
77 #define LM_SETUP_HIBERNATE      0x0020
78 #define LM_SETUP_NOACK          0x0040
79 #define LM_SETUP_RX_DISABLED    0x0080
80
81 #define LM_ANTENNA_0            0
82 #define LM_ANTENNA_1            1
83 #define LM_ANTENNA_DIVERSITY    2
84
85 #define LM_TX_FAILED            0x0001
86 #define LM_TX_PSM               0x0002
87 #define LM_TX_PSM_CANCELLED     0x0004
88
89 #define LM_SCAN_EXIT            0x0001
90 #define LM_SCAN_TRAP            0x0002
91 #define LM_SCAN_ACTIVE          0x0004
92 #define LM_SCAN_FILTER          0x0008
93
94 #define LM_PSM                  0x0001
95 #define LM_PSM_DTIM             0x0002
96 #define LM_PSM_MCBC             0x0004
97 #define LM_PSM_CHECKSUM         0x0008
98 #define LM_PSM_SKIP_MORE_DATA   0x0010
99 #define LM_PSM_BEACON_TIMEOUT   0x0020
100 #define LM_PSM_HFOSLEEP         0x0040
101 #define LM_PSM_AUTOSWITCH_SLEEP 0x0080
102 #define LM_PSM_LPIT             0x0100
103 #define LM_PSM_BF_UCAST_SKIP    0x0200
104 #define LM_PSM_BF_MCAST_SKIP    0x0400
105
106 /* hfosleep */
107 #define LM_PSM_SLEEP_OPTION_MASK (LM_PSM_AUTOSWITCH_SLEEP | LM_PSM_HFOSLEEP)
108 #define LM_PSM_SLEEP_OPTION_SHIFT       6
109 /* hfosleepend */
110 #define LM_PSM_BF_OPTION_MASK (LM_PSM_BF_MCAST_SKIP | LM_PSM_BF_UCAST_SKIP)
111 #define LM_PSM_BF_OPTION_SHIFT  9
112
113
114 #define LM_PRIVACC_WEP          0x01
115 #define LM_PRIVACC_TKIP         0x02
116 #define LM_PRIVACC_MICHAEL      0x04
117 #define LM_PRIVACC_CCX_KP       0x08
118 #define LM_PRIVACC_CCX_MIC      0x10
119 #define LM_PRIVACC_AES_CCMP     0x20
120
121 /* size of s_lm_descr in words */
122 #define LM_DESCR_SIZE_WORDS     11
123
124 #ifndef __ASSEMBLER__
125
126 enum {
127     LM_MODE_CLIENT = 0,
128     LM_MODE_AP
129 };
130
131 struct s_lm_descr {
132     uint16_t modes;
133     uint16_t flags;
134     uint32_t buffer_start;
135     uint32_t buffer_end;
136     uint8_t header;
137     uint8_t trailer;
138     uint8_t tx_queues;
139     uint8_t tx_depth;
140     uint8_t privacy;
141     uint8_t rx_keycache;
142     uint8_t tim_size;
143     uint8_t pad1;
144     uint8_t rates[16];
145     uint32_t link;
146         uint16_t mtu;
147 };
148
149
150 struct s_lm_control {
151     uint16_t flags;
152     uint16_t length;
153     uint32_t handle;
154     uint16_t oid;
155     uint16_t pad;
156     /* uint8_t data[]; */
157 };
158
159 enum {
160     LM_PRIV_NONE = 0,
161     LM_PRIV_WEP,
162     LM_PRIV_TKIP,
163     LM_PRIV_TKIPMICHAEL,
164     LM_PRIV_CCX_WEPMIC,
165     LM_PRIV_CCX_KPMIC,
166     LM_PRIV_CCX_KP,
167     LM_PRIV_AES_CCMP
168 };
169
170 enum {
171     LM_DECRYPT_NONE,
172     LM_DECRYPT_OK,
173     LM_DECRYPT_NOKEY,
174     LM_DECRYPT_NOMICHAEL,
175     LM_DECRYPT_NOCKIPMIC,
176     LM_DECRYPT_FAIL_WEP,
177     LM_DECRYPT_FAIL_TKIP,
178     LM_DECRYPT_FAIL_MICHAEL,
179     LM_DECRYPT_FAIL_CKIPKP,
180     LM_DECRYPT_FAIL_CKIPMIC,
181     LM_DECRYPT_FAIL_AESCCMP
182 };
183
184 struct s_lm_data_out {
185     uint16_t flags;
186     uint16_t length;
187     uint32_t handle;
188     uint16_t aid;
189     uint8_t rts_retries;
190     uint8_t retries;
191     uint8_t aloft[8];
192     uint8_t aloft_ctrl;
193     uint8_t crypt_offset;
194     uint8_t keytype;
195     uint8_t keylen;
196     uint8_t key[16];
197     uint8_t queue;
198     uint8_t backlog;
199     uint16_t durations[4];
200     uint8_t antenna;
201     uint8_t cts;
202     int16_t power;
203     uint8_t pad[2];
204     /*uint8_t data[];*/
205 };
206
207 #define LM_RCPI_INVALID         (0xff)
208
209 struct s_lm_data_in {
210     uint16_t flags;
211     uint16_t length;
212     uint16_t frequency;
213     uint8_t antenna;
214     uint8_t rate;
215     uint8_t rcpi;
216     uint8_t sq;
217     uint8_t decrypt;
218     uint8_t rssi_raw;
219     uint32_t clock[2];
220     /*uint8_t data[];*/
221 };
222
223 union u_lm_data {
224     struct s_lm_data_out out;
225     struct s_lm_data_in in;
226 };
227
228 enum {
229     LM_OID_SETUP        = 0,
230     LM_OID_SCAN         = 1,
231     LM_OID_TRAP         = 2,
232     LM_OID_EDCF         = 3,
233     LM_OID_KEYCACHE     = 4,
234     LM_OID_PSM          = 6,
235     LM_OID_TXCANCEL     = 7,
236     LM_OID_TX           = 8,
237     LM_OID_BURST        = 9,
238     LM_OID_STATS        = 10,
239     LM_OID_LED          = 13,
240     LM_OID_TIMER        = 15,
241     LM_OID_NAV          = 20,
242     LM_OID_PCS          = 22,
243     LM_OID_BT_BALANCER  = 28,
244     LM_OID_GROUP_ADDRESS_TABLE  = 30,
245     LM_OID_ARPTABLE     = 31,
246     LM_OID_BT_OPTIONS = 35
247 };
248
249 enum {
250     LM_FRONTEND_UNKNOWN = 0,
251     LM_FRONTEND_DUETTE3,
252     LM_FRONTEND_DUETTE2,
253     LM_FRONTEND_FRISBEE,
254     LM_FRONTEND_CROSSBOW,
255     LM_FRONTEND_LONGBOW
256 };
257
258
259 #define INVALID_LPF_BANDWIDTH   0xffff
260 #define INVALID_OSC_START_DELAY 0xffff
261
262 struct s_lmo_setup {
263     uint16_t flags;
264     uint8_t  macaddr[6];
265     uint8_t  bssid[6];
266     uint8_t  antenna;
267     uint8_t  rx_align;
268     uint32_t rx_buffer;
269     uint16_t rx_mtu;
270     uint16_t frontend;
271     uint16_t timeout;
272     uint16_t truncate;
273     uint32_t bratemask;
274     uint8_t  sbss_offset;
275     uint8_t  mcast_window;
276     uint8_t  rx_rssi_threshold;
277     uint8_t  rx_ed_threshold;
278     uint32_t ref_clock;
279     uint16_t lpf_bandwidth;
280     uint16_t osc_start_delay;
281 };
282
283
284 struct s_lmo_scan {
285     uint16_t flags;
286     uint16_t dwell;
287     uint8_t channel[292];
288     uint32_t bratemask;
289     uint8_t  aloft[8];
290     uint8_t  rssical[8];
291 };
292
293
294 enum {
295     LM_TRAP_SCAN = 0,
296     LM_TRAP_TIMER,
297     LM_TRAP_BEACON_TX,
298     LM_TRAP_FAA_RADIO_ON,
299     LM_TRAP_FAA_RADIO_OFF,
300     LM_TRAP_RADAR,
301     LM_TRAP_NO_BEACON,
302     LM_TRAP_TBTT,
303     LM_TRAP_SCO_ENTER,
304     LM_TRAP_SCO_EXIT
305 };
306
307 struct s_lmo_trap {
308     uint16_t event;
309     uint16_t frequency;
310 };
311
312 struct s_lmo_timer {
313     uint32_t interval;
314 };
315
316 struct s_lmo_nav {
317     uint32_t period;
318 };
319
320
321 struct s_lmo_edcf_queue;
322
323 struct s_lmo_edcf {
324     uint8_t  flags;
325     uint8_t  slottime;
326     uint8_t  sifs;
327     uint8_t  eofpad;
328     struct s_lmo_edcf_queue {
329             uint8_t  aifs;
330             uint8_t  pad0;
331             uint16_t cwmin;
332             uint16_t cwmax;
333             uint16_t txop;
334     } queues[8];
335     uint8_t  mapping[4];
336     uint16_t maxburst;
337     uint16_t round_trip_delay;
338 };
339
340 struct s_lmo_keycache {
341     uint8_t entry;
342     uint8_t keyid;
343     uint8_t address[6];
344     uint8_t pad[2];
345     uint8_t keytype;
346     uint8_t keylen;
347     uint8_t key[24];
348 };
349
350
351 struct s_lm_interval;
352
353 struct s_lmo_psm {
354     uint16_t    flags;
355     uint16_t    aid;
356     struct s_lm_interval {
357             uint16_t interval;
358             uint16_t periods;
359     } intervals[4];
360     /* uint16_t    pad; */
361     uint8_t     beacon_rcpi_skip_max;
362     uint8_t     rcpi_delta_threshold;
363     uint8_t     nr;
364     uint8_t     exclude[1];
365 };
366
367 #define MC_FILTER_ADDRESS_NUM   4
368
369 struct s_lmo_group_address_table {
370     uint16_t    filter_enable;
371     uint16_t    num_address;
372     uint8_t     macaddr_list[MC_FILTER_ADDRESS_NUM][6];
373 };
374
375 struct s_lmo_txcancel {
376     uint32_t address[1];
377 };
378
379
380 struct s_lmo_tx {
381     uint8_t  flags;
382     uint8_t  retries;
383     uint8_t  rcpi;
384     uint8_t  sq;
385     uint16_t seqctrl;
386     uint8_t  antenna;
387     uint8_t  pad;
388 };
389
390 struct s_lmo_burst {
391     uint8_t  flags;
392     uint8_t  queue;
393     uint8_t  backlog;
394     uint8_t  pad;
395     uint16_t durations[32];
396 };
397
398 struct s_lmo_stats {
399     uint32_t valid;
400     uint32_t fcs;
401     uint32_t abort;
402     uint32_t phyabort;
403     uint32_t rts_success;
404     uint32_t rts_fail;
405     uint32_t timestamp;
406     uint32_t time_tx;
407     uint32_t noisefloor;
408     uint32_t sample_noise[8];
409     uint32_t sample_cca;
410     uint32_t sample_tx;
411 };
412
413
414 struct s_lmo_led {
415     uint16_t flags;
416     uint16_t mask[2];
417     uint16_t delay/*[2]*/;
418 };
419
420
421 struct s_lmo_bt_balancer {
422     uint16_t prio_thresh;
423     uint16_t acl_thresh;
424 };
425
426
427 struct s_lmo_arp_table {
428     uint16_t    filter_enable;
429     uint32_t    ipaddr;
430 };
431
432 #endif /* __ASSEMBLER__ */
433
434 #endif /* __lmac_h__ */