~ubuntu-branches/ubuntu/lucid/linux-rt/lucid

« back to all changes in this revision

Viewing changes to drivers/staging/vt6655/80211hdr.h

  • Committer: Bazaar Package Importer
  • Author(s): Luke Yelavich
  • Date: 2009-08-05 23:00:52 UTC
  • Revision ID: james.westby@ubuntu.com-20090805230052-7xedvqcyk9dnnxb2
Tags: 2.6.31-1.1
New upstream release

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc.
 
3
 * All rights reserved.
 
4
 *
 
5
 * This program is free software; you can redistribute it and/or modify
 
6
 * it under the terms of the GNU General Public License as published by
 
7
 * the Free Software Foundation; either version 2 of the License, or
 
8
 * (at your option) any later version.
 
9
 *
 
10
 * This program is distributed in the hope that it will be useful,
 
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
13
 * GNU General Public License for more details.
 
14
 *
 
15
 * You should have received a copy of the GNU General Public License along
 
16
 * with this program; if not, write to the Free Software Foundation, Inc.,
 
17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 
18
 *
 
19
 * File: 80211hdr.h
 
20
 *
 
21
 * Purpose: Defines the macros, types, and functions for dealing
 
22
 *          with 802.11 MAC headers.
 
23
 *
 
24
 * Author: Lyndon Chen
 
25
 *
 
26
 * Date: Apr 8, 2002
 
27
 *
 
28
 */
 
29
 
 
30
 
 
31
 
 
32
#ifndef __80211HDR_H__
 
33
#define __80211HDR_H__
 
34
 
 
35
 
 
36
#if !defined(__TTYPE_H__)
 
37
#include "ttype.h"
 
38
#endif
 
39
 
 
40
/*---------------------  Export Definitions -------------------------*/
 
41
// bit type
 
42
#define BIT0    0x00000001
 
43
#define BIT1    0x00000002
 
44
#define BIT2    0x00000004
 
45
#define BIT3    0x00000008
 
46
#define BIT4    0x00000010
 
47
#define BIT5    0x00000020
 
48
#define BIT6    0x00000040
 
49
#define BIT7    0x00000080
 
50
#define BIT8    0x00000100
 
51
#define BIT9    0x00000200
 
52
#define BIT10   0x00000400
 
53
#define BIT11   0x00000800
 
54
#define BIT12   0x00001000
 
55
#define BIT13   0x00002000
 
56
#define BIT14   0x00004000
 
57
#define BIT15   0x00008000
 
58
#define BIT16   0x00010000
 
59
#define BIT17   0x00020000
 
60
#define BIT18   0x00040000
 
61
#define BIT19   0x00080000
 
62
#define BIT20   0x00100000
 
63
#define BIT21   0x00200000
 
64
#define BIT22   0x00400000
 
65
#define BIT23   0x00800000
 
66
#define BIT24   0x01000000
 
67
#define BIT25   0x02000000
 
68
#define BIT26   0x04000000
 
69
#define BIT27   0x08000000
 
70
#define BIT28   0x10000000
 
71
#define BIT29   0x20000000
 
72
#define BIT30   0x40000000
 
73
#define BIT31   0x80000000
 
74
 
 
75
// 802.11 frame related, defined as 802.11 spec
 
76
#define WLAN_ADDR_LEN               6
 
77
#define WLAN_CRC_LEN                4
 
78
#define WLAN_CRC32_LEN              4
 
79
#define WLAN_FCS_LEN                4
 
80
#define WLAN_BSSID_LEN              6
 
81
#define WLAN_BSS_TS_LEN             8
 
82
#define WLAN_HDR_ADDR2_LEN          16
 
83
#define WLAN_HDR_ADDR3_LEN          24
 
84
#define WLAN_HDR_ADDR4_LEN          30
 
85
#define WLAN_IEHDR_LEN              2
 
86
#define WLAN_SSID_MAXLEN            32
 
87
//#define WLAN_RATES_MAXLEN           255
 
88
#define WLAN_RATES_MAXLEN           16
 
89
#define WLAN_RATES_MAXLEN_11B       4
 
90
#define WLAN_RSN_MAXLEN             32
 
91
#define WLAN_DATA_MAXLEN            2312
 
92
#define WLAN_A3FR_MAXLEN            (WLAN_HDR_ADDR3_LEN + WLAN_DATA_MAXLEN + WLAN_CRC_LEN)
 
93
 
 
94
 
 
95
#define WLAN_BEACON_FR_MAXLEN       WLAN_A3FR_MAXLEN
 
96
#define WLAN_ATIM_FR_MAXLEN         (WLAN_HDR_ADDR3_LEN + 0)
 
97
#define WLAN_NULLDATA_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 0)
 
98
#define WLAN_DISASSOC_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 2)
 
99
#define WLAN_ASSOCREQ_FR_MAXLEN     WLAN_A3FR_MAXLEN
 
100
#define WLAN_ASSOCRESP_FR_MAXLEN    WLAN_A3FR_MAXLEN
 
101
#define WLAN_REASSOCREQ_FR_MAXLEN   WLAN_A3FR_MAXLEN
 
102
#define WLAN_REASSOCRESP_FR_MAXLEN  WLAN_A3FR_MAXLEN
 
103
#define WLAN_PROBEREQ_FR_MAXLEN     WLAN_A3FR_MAXLEN
 
104
#define WLAN_PROBERESP_FR_MAXLEN    WLAN_A3FR_MAXLEN
 
105
#define WLAN_AUTHEN_FR_MAXLEN       WLAN_A3FR_MAXLEN
 
106
#define WLAN_DEAUTHEN_FR_MAXLEN     (WLAN_HDR_ADDR3_LEN + 2)
 
107
 
 
108
 
 
109
#define WLAN_WEP_NKEYS              4
 
110
#define WLAN_WEP40_KEYLEN           5
 
111
#define WLAN_WEP104_KEYLEN          13
 
112
#define WLAN_WEP232_KEYLEN          29
 
113
//#define WLAN_WEPMAX_KEYLEN          29
 
114
#define WLAN_WEPMAX_KEYLEN          32
 
115
#define WLAN_CHALLENGE_IE_MAXLEN    255
 
116
#define WLAN_CHALLENGE_IE_LEN       130
 
117
#define WLAN_CHALLENGE_LEN          128
 
118
#define WLAN_WEP_IV_LEN             4
 
119
#define WLAN_WEP_ICV_LEN            4
 
120
#define WLAN_FRAGS_MAX              16
 
121
 
 
122
// Frame Type
 
123
#define WLAN_TYPE_MGR 0x00
 
124
#define WLAN_TYPE_CTL  0x01
 
125
#define WLAN_TYPE_DATA 0x02
 
126
 
 
127
#define WLAN_FTYPE_MGMT 0x00
 
128
#define WLAN_FTYPE_CTL  0x01
 
129
#define WLAN_FTYPE_DATA 0x02
 
130
 
 
131
 
 
132
// Frame Subtypes
 
133
#define WLAN_FSTYPE_ASSOCREQ        0x00
 
134
#define WLAN_FSTYPE_ASSOCRESP       0x01
 
135
#define WLAN_FSTYPE_REASSOCREQ      0x02
 
136
#define WLAN_FSTYPE_REASSOCRESP     0x03
 
137
#define WLAN_FSTYPE_PROBEREQ        0x04
 
138
#define WLAN_FSTYPE_PROBERESP       0x05
 
139
#define WLAN_FSTYPE_BEACON          0x08
 
140
#define WLAN_FSTYPE_ATIM            0x09
 
141
#define WLAN_FSTYPE_DISASSOC        0x0a
 
142
#define WLAN_FSTYPE_AUTHEN          0x0b
 
143
#define WLAN_FSTYPE_DEAUTHEN        0x0c
 
144
#define WLAN_FSTYPE_ACTION          0x0d
 
145
 
 
146
// Control
 
147
#define WLAN_FSTYPE_PSPOLL          0x0a
 
148
#define WLAN_FSTYPE_RTS             0x0b
 
149
#define WLAN_FSTYPE_CTS             0x0c
 
150
#define WLAN_FSTYPE_ACK             0x0d
 
151
#define WLAN_FSTYPE_CFEND           0x0e
 
152
#define WLAN_FSTYPE_CFENDCFACK      0x0f
 
153
 
 
154
// Data
 
155
#define WLAN_FSTYPE_DATAONLY        0x00
 
156
#define WLAN_FSTYPE_DATA_CFACK      0x01
 
157
#define WLAN_FSTYPE_DATA_CFPOLL     0x02
 
158
#define WLAN_FSTYPE_DATA_CFACK_CFPOLL   0x03
 
159
#define WLAN_FSTYPE_NULL            0x04
 
160
#define WLAN_FSTYPE_CFACK           0x05
 
161
#define WLAN_FSTYPE_CFPOLL          0x06
 
162
#define WLAN_FSTYPE_CFACK_CFPOLL    0x07
 
163
 
 
164
 
 
165
#ifdef __BIG_ENDIAN
 
166
 
 
167
// GET & SET Frame Control bit
 
168
#define WLAN_GET_FC_PRVER(n)    ((((WORD)(n) >> 8) & (BIT0 | BIT1))
 
169
#define WLAN_GET_FC_FTYPE(n)    ((((WORD)(n) >> 8) & (BIT2 | BIT3)) >> 2)
 
170
#define WLAN_GET_FC_FSTYPE(n)   ((((WORD)(n) >> 8) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
 
171
#define WLAN_GET_FC_TODS(n)     ((((WORD)(n) << 8) & (BIT8)) >> 8)
 
172
#define WLAN_GET_FC_FROMDS(n)   ((((WORD)(n) << 8) & (BIT9)) >> 9)
 
173
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n) << 8) & (BIT10)) >> 10)
 
174
#define WLAN_GET_FC_RETRY(n)    ((((WORD)(n) << 8) & (BIT11)) >> 11)
 
175
#define WLAN_GET_FC_PWRMGT(n)   ((((WORD)(n) << 8) & (BIT12)) >> 12)
 
176
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n) << 8) & (BIT13)) >> 13)
 
177
#define WLAN_GET_FC_ISWEP(n)    ((((WORD)(n) << 8) & (BIT14)) >> 14)
 
178
#define WLAN_GET_FC_ORDER(n)    ((((WORD)(n) << 8) & (BIT15)) >> 15)
 
179
 
 
180
// Sequence Field bit
 
181
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n) >> 8) & (BIT0|BIT1|BIT2|BIT3))
 
182
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n) >> 8) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)
 
183
 
 
184
 
 
185
// Capability Field bit
 
186
#define WLAN_GET_CAP_INFO_ESS(n)           (((n) >> 8) & BIT0)
 
187
#define WLAN_GET_CAP_INFO_IBSS(n)          ((((n) >> 8) & BIT1) >> 1)
 
188
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n)    ((((n) >> 8) & BIT2) >> 2)
 
189
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n)     ((((n) >> 8) & BIT3) >> 3)
 
190
#define WLAN_GET_CAP_INFO_PRIVACY(n)       ((((n) >> 8) & BIT4) >> 4)
 
191
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) ((((n) >> 8) & BIT5) >> 5)
 
192
#define WLAN_GET_CAP_INFO_PBCC(n)          ((((n) >> 8) & BIT6) >> 6)
 
193
#define WLAN_GET_CAP_INFO_AGILITY(n)       ((((n) >> 8) & BIT7) >> 7)
 
194
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n)   ((((n))      & BIT8) >> 10)
 
195
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) ((((n))      & BIT10) >> 10)
 
196
#define WLAN_GET_CAP_INFO_DSSSOFDM(n)      ((((n))      & BIT13) >> 13)
 
197
#define WLAN_GET_CAP_INFO_GRPACK(n)        ((((n))      & BIT14) >> 14)
 
198
 
 
199
 
 
200
#else
 
201
 
 
202
// GET & SET Frame Control bit
 
203
#define WLAN_GET_FC_PRVER(n)    (((WORD)(n)) & (BIT0 | BIT1))
 
204
#define WLAN_GET_FC_FTYPE(n)    ((((WORD)(n)) & (BIT2 | BIT3)) >> 2)
 
205
#define WLAN_GET_FC_FSTYPE(n)   ((((WORD)(n)) & (BIT4|BIT5|BIT6|BIT7)) >> 4)
 
206
#define WLAN_GET_FC_TODS(n)     ((((WORD)(n)) & (BIT8)) >> 8)
 
207
#define WLAN_GET_FC_FROMDS(n)   ((((WORD)(n)) & (BIT9)) >> 9)
 
208
#define WLAN_GET_FC_MOREFRAG(n) ((((WORD)(n)) & (BIT10)) >> 10)
 
209
#define WLAN_GET_FC_RETRY(n)    ((((WORD)(n)) & (BIT11)) >> 11)
 
210
#define WLAN_GET_FC_PWRMGT(n)   ((((WORD)(n)) & (BIT12)) >> 12)
 
211
#define WLAN_GET_FC_MOREDATA(n) ((((WORD)(n)) & (BIT13)) >> 13)
 
212
#define WLAN_GET_FC_ISWEP(n)    ((((WORD)(n)) & (BIT14)) >> 14)
 
213
#define WLAN_GET_FC_ORDER(n)    ((((WORD)(n)) & (BIT15)) >> 15)
 
214
 
 
215
 
 
216
// Sequence Field bit
 
217
#define WLAN_GET_SEQ_FRGNUM(n) (((WORD)(n)) & (BIT0|BIT1|BIT2|BIT3))
 
218
#define WLAN_GET_SEQ_SEQNUM(n) ((((WORD)(n)) & (~(BIT0|BIT1|BIT2|BIT3))) >> 4)
 
219
 
 
220
 
 
221
// Capability Field bit
 
222
#define WLAN_GET_CAP_INFO_ESS(n)           ((n) & BIT0)
 
223
#define WLAN_GET_CAP_INFO_IBSS(n)          (((n) & BIT1) >> 1)
 
224
#define WLAN_GET_CAP_INFO_CFPOLLABLE(n)    (((n) & BIT2) >> 2)
 
225
#define WLAN_GET_CAP_INFO_CFPOLLREQ(n)     (((n) & BIT3) >> 3)
 
226
#define WLAN_GET_CAP_INFO_PRIVACY(n)       (((n) & BIT4) >> 4)
 
227
#define WLAN_GET_CAP_INFO_SHORTPREAMBLE(n) (((n) & BIT5) >> 5)
 
228
#define WLAN_GET_CAP_INFO_PBCC(n)          (((n) & BIT6) >> 6)
 
229
#define WLAN_GET_CAP_INFO_AGILITY(n)       (((n) & BIT7) >> 7)
 
230
#define WLAN_GET_CAP_INFO_SPECTRUMMNG(n)   (((n) & BIT8) >> 10)
 
231
#define WLAN_GET_CAP_INFO_SHORTSLOTTIME(n) (((n) & BIT10) >> 10)
 
232
#define WLAN_GET_CAP_INFO_DSSSOFDM(n)      (((n) & BIT13) >> 13)
 
233
#define WLAN_GET_CAP_INFO_GRPACK(n)        (((n) & BIT14) >> 14)
 
234
 
 
235
 
 
236
#endif //#ifdef __BIG_ENDIAN
 
237
 
 
238
 
 
239
#define WLAN_SET_CAP_INFO_ESS(n)           (n)
 
240
#define WLAN_SET_CAP_INFO_IBSS(n)          ((n) << 1)
 
241
#define WLAN_SET_CAP_INFO_CFPOLLABLE(n)    ((n) << 2)
 
242
#define WLAN_SET_CAP_INFO_CFPOLLREQ(n)     ((n) << 3)
 
243
#define WLAN_SET_CAP_INFO_PRIVACY(n)       ((n) << 4)
 
244
#define WLAN_SET_CAP_INFO_SHORTPREAMBLE(n) ((n) << 5)
 
245
#define WLAN_SET_CAP_INFO_SPECTRUMMNG(n)   ((n) << 8)
 
246
#define WLAN_SET_CAP_INFO_PBCC(n)          ((n) << 6)
 
247
#define WLAN_SET_CAP_INFO_AGILITY(n)       ((n) << 7)
 
248
#define WLAN_SET_CAP_INFO_SHORTSLOTTIME(n) ((n) << 10)
 
249
#define WLAN_SET_CAP_INFO_DSSSOFDM(n)      ((n) << 13)
 
250
#define WLAN_SET_CAP_INFO_GRPACK(n)        ((n) << 14)
 
251
 
 
252
 
 
253
#define WLAN_SET_FC_PRVER(n)    ((WORD)(n))
 
254
#define WLAN_SET_FC_FTYPE(n)    (((WORD)(n)) << 2)
 
255
#define WLAN_SET_FC_FSTYPE(n)   (((WORD)(n)) << 4)
 
256
#define WLAN_SET_FC_TODS(n)     (((WORD)(n)) << 8)
 
257
#define WLAN_SET_FC_FROMDS(n)   (((WORD)(n)) << 9)
 
258
#define WLAN_SET_FC_MOREFRAG(n) (((WORD)(n)) << 10)
 
259
#define WLAN_SET_FC_RETRY(n)    (((WORD)(n)) << 11)
 
260
#define WLAN_SET_FC_PWRMGT(n)   (((WORD)(n)) << 12)
 
261
#define WLAN_SET_FC_MOREDATA(n) (((WORD)(n)) << 13)
 
262
#define WLAN_SET_FC_ISWEP(n)    (((WORD)(n)) << 14)
 
263
#define WLAN_SET_FC_ORDER(n)    (((WORD)(n)) << 15)
 
264
 
 
265
#define WLAN_SET_SEQ_FRGNUM(n) ((WORD)(n))
 
266
#define WLAN_SET_SEQ_SEQNUM(n) (((WORD)(n)) << 4)
 
267
 
 
268
// ERP Field bit
 
269
 
 
270
#define WLAN_GET_ERP_NONERP_PRESENT(n)     ((n) & BIT0)
 
271
#define WLAN_GET_ERP_USE_PROTECTION(n)     (((n) & BIT1) >> 1)
 
272
#define WLAN_GET_ERP_BARKER_MODE(n)        (((n) & BIT2) >> 2)
 
273
 
 
274
#define WLAN_SET_ERP_NONERP_PRESENT(n)     (n)
 
275
#define WLAN_SET_ERP_USE_PROTECTION(n)     ((n) << 1)
 
276
#define WLAN_SET_ERP_BARKER_MODE(n)        ((n) << 2)
 
277
 
 
278
 
 
279
 
 
280
// Support & Basic Rates field
 
281
#define WLAN_MGMT_IS_BASICRATE(b)    ((b) & BIT7)
 
282
#define WLAN_MGMT_GET_RATE(b)        ((b) & ~BIT7)
 
283
 
 
284
// TIM field
 
285
#define WLAN_MGMT_IS_MULTICAST_TIM(b)   ((b) & BIT0)
 
286
#define WLAN_MGMT_GET_TIM_OFFSET(b)     (((b) & ~BIT0) >> 1)
 
287
 
 
288
// 3-Addr & 4-Addr
 
289
#define WLAN_HDR_A3_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR3_LEN)
 
290
#define WLAN_HDR_A4_DATA_PTR(p) (((PBYTE)(p)) + WLAN_HDR_ADDR4_LEN)
 
291
 
 
292
// IEEE ADDR
 
293
#define IEEE_ADDR_UNIVERSAL         0x02
 
294
#define IEEE_ADDR_GROUP             0x01
 
295
 
 
296
typedef struct {
 
297
    BYTE            abyAddr[6];
 
298
} IEEE_ADDR, *PIEEE_ADDR;
 
299
 
 
300
// 802.11 Header Format
 
301
 
 
302
typedef struct tagWLAN_80211HDR_A2 {
 
303
 
 
304
    WORD    wFrameCtl;
 
305
    WORD    wDurationID;
 
306
    BYTE    abyAddr1[WLAN_ADDR_LEN];
 
307
    BYTE    abyAddr2[WLAN_ADDR_LEN];
 
308
 
 
309
}__attribute__ ((__packed__))
 
310
WLAN_80211HDR_A2, *PWLAN_80211HDR_A2;
 
311
 
 
312
typedef struct tagWLAN_80211HDR_A3 {
 
313
 
 
314
    WORD    wFrameCtl;
 
315
    WORD    wDurationID;
 
316
    BYTE    abyAddr1[WLAN_ADDR_LEN];
 
317
    BYTE    abyAddr2[WLAN_ADDR_LEN];
 
318
    BYTE    abyAddr3[WLAN_ADDR_LEN];
 
319
    WORD    wSeqCtl;
 
320
 
 
321
}__attribute__ ((__packed__))
 
322
WLAN_80211HDR_A3, *PWLAN_80211HDR_A3;
 
323
 
 
324
typedef struct tagWLAN_80211HDR_A4 {
 
325
 
 
326
    WORD    wFrameCtl;
 
327
    WORD    wDurationID;
 
328
    BYTE    abyAddr1[WLAN_ADDR_LEN];
 
329
    BYTE    abyAddr2[WLAN_ADDR_LEN];
 
330
    BYTE    abyAddr3[WLAN_ADDR_LEN];
 
331
    WORD    wSeqCtl;
 
332
    BYTE    abyAddr4[WLAN_ADDR_LEN];
 
333
 
 
334
}__attribute__ ((__packed__))
 
335
WLAN_80211HDR_A4, *PWLAN_80211HDR_A4;
 
336
 
 
337
 
 
338
typedef union tagUWLAN_80211HDR {
 
339
 
 
340
    WLAN_80211HDR_A2        sA2;
 
341
    WLAN_80211HDR_A3        sA3;
 
342
    WLAN_80211HDR_A4        sA4;
 
343
 
 
344
} UWLAN_80211HDR, *PUWLAN_80211HDR;
 
345
 
 
346
 
 
347
/*---------------------  Export Classes  ----------------------------*/
 
348
 
 
349
/*---------------------  Export Variables  --------------------------*/
 
350
 
 
351
/*---------------------  Export Functions  --------------------------*/
 
352
 
 
353
 
 
354
 
 
355
#endif // __80211HDR_H__
 
356
 
 
357