• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/staging/vt6656/
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: desc.h
20 *
21 * Purpose:The header file of descriptor
22 *
23 * Revision History:
24 *
25 * Author: Tevin Chen
26 *
27 * Date: May 21, 1996
28 *
29 */
30
31#ifndef __DESC_H__
32#define __DESC_H__
33
34#include <linux/types.h>
35#include <linux/mm.h>
36#include "ttype.h"
37#include "tether.h"
38
39/*---------------------  Export Definitions -------------------------*/
40
41// max transmit or receive buffer size
42#define CB_MAX_BUF_SIZE     2900U       // max buffer size
43                                        // NOTE: must be multiple of 4
44
45#define CB_MAX_TX_BUF_SIZE          CB_MAX_BUF_SIZE // max Tx buffer size
46#define CB_MAX_RX_BUF_SIZE_NORMAL   CB_MAX_BUF_SIZE // max Rx buffer size when not use Multi-RD
47
48#define CB_BEACON_BUF_SIZE  512U        // default beacon buffer size
49
50#define MAX_TOTAL_SIZE_WITH_ALL_HEADERS CB_MAX_BUF_SIZE
51
52#define MAX_INTERRUPT_SIZE              32
53
54#define RX_BLOCKS           64          // form 0x60 to 0xA0
55#define TX_BLOCKS           32          // from 0xA0 to 0xC0
56
57#define CB_MAX_RX_DESC      128         // max # of descriptor
58#define CB_MIN_RX_DESC      16          // min # of rx descriptor
59#define CB_MAX_TX_DESC      128         // max # of descriptor
60#define CB_MIN_TX_DESC      16          // min # of tx descriptor
61
62#define CB_RD_NUM           64          // default # of RD
63#define CB_TD_NUM           64          // default # of TD
64
65//
66// Bits in the RSR register
67//
68#define RSR_ADDRBROAD       0x80        // 1000 0000
69#define RSR_ADDRMULTI       0x40        // 0100 0000
70#define RSR_ADDRUNI         0x00        // 0000 0000
71#define RSR_IVLDTYP         0x20        // 0010 0000 , invalid packet type
72#define RSR_IVLDLEN         0x10        // 0001 0000 , invalid len (> 2312 byte)
73#define RSR_BSSIDOK         0x08        // 0000 1000
74#define RSR_CRCOK           0x04        // 0000 0100
75#define RSR_BCNSSIDOK       0x02        // 0000 0010
76#define RSR_ADDROK          0x01        // 0000 0001
77
78//
79// Bits in the new RSR register
80//
81#define NEWRSR_DECRYPTOK    0x10        // 0001 0000
82#define NEWRSR_CFPIND       0x08        // 0000 1000
83#define NEWRSR_HWUTSF       0x04        // 0000 0100
84#define NEWRSR_BCNHITAID    0x02        // 0000 0010
85#define NEWRSR_BCNHITAID0   0x01        // 0000 0001
86
87//
88// Bits in the TSR register
89//
90#define TSR_RETRYTMO        0x08        // 0000 1000
91#define TSR_TMO             0x04        // 0000 0100
92#define TSR_ACKDATA         0x02        // 0000 0010
93#define TSR_VALID           0x01        // 0000 0001
94
95#define CB_PROTOCOL_RESERVED_SECTION    16
96
97// if retrys excess 15 times , tx will abort, and
98// if tx fifo underflow, tx will fail
99// we should try to resend it
100#define CB_MAX_TX_ABORT_RETRY   3
101
102#define FIFOCTL_AUTO_FB_1   0x1000 // 0001 0000 0000 0000
103#define FIFOCTL_AUTO_FB_0   0x0800 // 0000 1000 0000 0000
104#define FIFOCTL_GRPACK      0x0400 // 0000 0100 0000 0000
105#define FIFOCTL_11GA        0x0300 // 0000 0011 0000 0000
106#define FIFOCTL_11GB        0x0200 // 0000 0010 0000 0000
107#define FIFOCTL_11B         0x0100 // 0000 0001 0000 0000
108#define FIFOCTL_11A         0x0000 // 0000 0000 0000 0000
109#define FIFOCTL_RTS         0x0080 // 0000 0000 1000 0000
110#define FIFOCTL_ISDMA0      0x0040 // 0000 0000 0100 0000
111#define FIFOCTL_GENINT      0x0020 // 0000 0000 0010 0000
112#define FIFOCTL_TMOEN       0x0010 // 0000 0000 0001 0000
113#define FIFOCTL_LRETRY      0x0008 // 0000 0000 0000 1000
114#define FIFOCTL_CRCDIS      0x0004 // 0000 0000 0000 0100
115#define FIFOCTL_NEEDACK     0x0002 // 0000 0000 0000 0010
116#define FIFOCTL_LHEAD       0x0001 // 0000 0000 0000 0001
117
118//WMAC definition Frag Control
119#define FRAGCTL_AES         0x0300 // 0000 0011 0000 0000
120#define FRAGCTL_TKIP        0x0200 // 0000 0010 0000 0000
121#define FRAGCTL_LEGACY      0x0100 // 0000 0001 0000 0000
122#define FRAGCTL_NONENCRYPT  0x0000 // 0000 0000 0000 0000
123//#define FRAGCTL_AC3         0x000C // 0000 0000 0000 1100
124//#define FRAGCTL_AC2         0x0008 // 0000 0000 0000 1000
125//#define FRAGCTL_AC1         0x0004 // 0000 0000 0000 0100
126//#define FRAGCTL_AC0         0x0000 // 0000 0000 0000 0000
127#define FRAGCTL_ENDFRAG     0x0003 // 0000 0000 0000 0011
128#define FRAGCTL_MIDFRAG     0x0002 // 0000 0000 0000 0010
129#define FRAGCTL_STAFRAG     0x0001 // 0000 0000 0000 0001
130#define FRAGCTL_NONFRAG     0x0000 // 0000 0000 0000 0000
131
132//#define TYPE_AC0DMA     0
133//#define TYPE_TXDMA0     1
134#define TYPE_TXDMA0     0
135#define TYPE_AC0DMA     1
136#define TYPE_ATIMDMA    2
137#define TYPE_SYNCDMA    3
138#define TYPE_MAXTD      2
139
140#define TYPE_BEACONDMA  4
141
142#define TYPE_RXDMA0     0
143#define TYPE_RXDMA1     1
144#define TYPE_MAXRD      2
145
146// TD_INFO flags control bit
147#define TD_FLAGS_NETIF_SKB               0x01       // check if need release skb
148#define TD_FLAGS_PRIV_SKB                0x02       // check if called from private skb(hostap)
149#define TD_FLAGS_PS_RETRY                0x04       // check if PS STA frame re-transmit
150//#define TD_FLAGS_NETIF_SKB                0x04
151
152/*---------------------  Export Types  ------------------------------*/
153
154//
155// RsvTime buffer header
156//
157typedef struct tagSRrvTime_gRTS {
158    WORD        wRTSTxRrvTime_ba;
159    WORD        wRTSTxRrvTime_aa;
160    WORD        wRTSTxRrvTime_bb;
161    WORD        wReserved;
162    WORD        wTxRrvTime_b;
163    WORD        wTxRrvTime_a;
164} __attribute__ ((__packed__))
165SRrvTime_gRTS, *PSRrvTime_gRTS;
166
167typedef const SRrvTime_gRTS *PCSRrvTime_gRTS;
168
169typedef struct tagSRrvTime_gCTS {
170    WORD        wCTSTxRrvTime_ba;
171    WORD        wReserved;
172    WORD        wTxRrvTime_b;
173    WORD        wTxRrvTime_a;
174} __attribute__ ((__packed__))
175SRrvTime_gCTS, *PSRrvTime_gCTS;
176
177typedef const SRrvTime_gCTS *PCSRrvTime_gCTS;
178
179typedef struct tagSRrvTime_ab {
180    WORD        wRTSTxRrvTime;
181    WORD        wTxRrvTime;
182} __attribute__ ((__packed__))
183SRrvTime_ab, *PSRrvTime_ab;
184
185typedef const SRrvTime_ab *PCSRrvTime_ab;
186
187typedef struct tagSRrvTime_atim {
188    WORD        wCTSTxRrvTime_ba;
189    WORD        wTxRrvTime_a;
190} __attribute__ ((__packed__))
191SRrvTime_atim, *PSRrvTime_atim;
192
193typedef const SRrvTime_atim *PCSRrvTime_atim;
194
195//
196// RTS buffer header
197//
198typedef struct tagSRTSData {
199    WORD    wFrameControl;
200    WORD    wDurationID;
201    BYTE    abyRA[ETH_ALEN];
202    BYTE    abyTA[ETH_ALEN];
203} __attribute__ ((__packed__))
204SRTSData, *PSRTSData;
205
206typedef const SRTSData *PCSRTSData;
207
208typedef struct tagSRTS_g {
209    BYTE        bySignalField_b;
210    BYTE        byServiceField_b;
211    WORD        wTransmitLength_b;
212    BYTE        bySignalField_a;
213    BYTE        byServiceField_a;
214    WORD        wTransmitLength_a;
215    WORD        wDuration_ba;
216    WORD        wDuration_aa;
217    WORD        wDuration_bb;
218    WORD        wReserved;
219    SRTSData    Data;
220} __attribute__ ((__packed__))
221SRTS_g, *PSRTS_g;
222typedef const SRTS_g *PCSRTS_g;
223
224typedef struct tagSRTS_g_FB {
225    BYTE        bySignalField_b;
226    BYTE        byServiceField_b;
227    WORD        wTransmitLength_b;
228    BYTE        bySignalField_a;
229    BYTE        byServiceField_a;
230    WORD        wTransmitLength_a;
231    WORD        wDuration_ba;
232    WORD        wDuration_aa;
233    WORD        wDuration_bb;
234    WORD        wReserved;
235    WORD        wRTSDuration_ba_f0;
236    WORD        wRTSDuration_aa_f0;
237    WORD        wRTSDuration_ba_f1;
238    WORD        wRTSDuration_aa_f1;
239    SRTSData    Data;
240} __attribute__ ((__packed__))
241SRTS_g_FB, *PSRTS_g_FB;
242
243typedef const SRTS_g_FB *PCSRTS_g_FB;
244
245typedef struct tagSRTS_ab {
246    BYTE        bySignalField;
247    BYTE        byServiceField;
248    WORD        wTransmitLength;
249    WORD        wDuration;
250    WORD        wReserved;
251    SRTSData    Data;
252} __attribute__ ((__packed__))
253SRTS_ab, *PSRTS_ab;
254
255typedef const SRTS_ab *PCSRTS_ab;
256
257typedef struct tagSRTS_a_FB {
258    BYTE        bySignalField;
259    BYTE        byServiceField;
260    WORD        wTransmitLength;
261    WORD        wDuration;
262    WORD        wReserved;
263    WORD        wRTSDuration_f0;
264    WORD        wRTSDuration_f1;
265    SRTSData    Data;
266} __attribute__ ((__packed__))
267SRTS_a_FB, *PSRTS_a_FB;
268
269typedef const SRTS_a_FB *PCSRTS_a_FB;
270
271
272//
273// CTS buffer header
274//
275typedef struct tagSCTSData {
276    WORD    wFrameControl;
277    WORD    wDurationID;
278    BYTE    abyRA[ETH_ALEN];
279    WORD    wReserved;
280} __attribute__ ((__packed__))
281SCTSData, *PSCTSData;
282
283typedef struct tagSCTS {
284    BYTE        bySignalField_b;
285    BYTE        byServiceField_b;
286    WORD        wTransmitLength_b;
287    WORD        wDuration_ba;
288    WORD        wReserved;
289    SCTSData    Data;
290} __attribute__ ((__packed__))
291SCTS, *PSCTS;
292
293typedef const SCTS *PCSCTS;
294
295typedef struct tagSCTS_FB {
296    BYTE        bySignalField_b;
297    BYTE        byServiceField_b;
298    WORD        wTransmitLength_b;
299    WORD        wDuration_ba;
300    WORD        wReserved;
301    WORD        wCTSDuration_ba_f0;
302    WORD        wCTSDuration_ba_f1;
303    SCTSData    Data;
304} __attribute__ ((__packed__))
305SCTS_FB, *PSCTS_FB;
306
307typedef const SCTS_FB *PCSCTS_FB;
308
309//
310// Tx FIFO header
311//
312typedef struct tagSTxBufHead {
313    DWORD   adwTxKey[4];
314    WORD    wFIFOCtl;
315    WORD    wTimeStamp;
316    WORD    wFragCtl;
317    WORD    wReserved;
318} __attribute__ ((__packed__))
319STxBufHead, *PSTxBufHead;
320typedef const STxBufHead *PCSTxBufHead;
321
322typedef struct tagSTxShortBufHead {
323    WORD    wFIFOCtl;
324    WORD    wTimeStamp;
325} __attribute__ ((__packed__))
326STxShortBufHead, *PSTxShortBufHead;
327typedef const STxShortBufHead *PCSTxShortBufHead;
328
329//
330// Tx data header
331//
332typedef struct tagSTxDataHead_g {
333    BYTE    bySignalField_b;
334    BYTE    byServiceField_b;
335    WORD    wTransmitLength_b;
336    BYTE    bySignalField_a;
337    BYTE    byServiceField_a;
338    WORD    wTransmitLength_a;
339    WORD    wDuration_b;
340    WORD    wDuration_a;
341    WORD    wTimeStampOff_b;
342    WORD    wTimeStampOff_a;
343} __attribute__ ((__packed__))
344STxDataHead_g, *PSTxDataHead_g;
345
346typedef const STxDataHead_g *PCSTxDataHead_g;
347
348typedef struct tagSTxDataHead_g_FB {
349    BYTE    bySignalField_b;
350    BYTE    byServiceField_b;
351    WORD    wTransmitLength_b;
352    BYTE    bySignalField_a;
353    BYTE    byServiceField_a;
354    WORD    wTransmitLength_a;
355    WORD    wDuration_b;
356    WORD    wDuration_a;
357    WORD    wDuration_a_f0;
358    WORD    wDuration_a_f1;
359    WORD    wTimeStampOff_b;
360    WORD    wTimeStampOff_a;
361} __attribute__ ((__packed__))
362STxDataHead_g_FB, *PSTxDataHead_g_FB;
363typedef const STxDataHead_g_FB *PCSTxDataHead_g_FB;
364
365typedef struct tagSTxDataHead_ab {
366    BYTE    bySignalField;
367    BYTE    byServiceField;
368    WORD    wTransmitLength;
369    WORD    wDuration;
370    WORD    wTimeStampOff;
371} __attribute__ ((__packed__))
372STxDataHead_ab, *PSTxDataHead_ab;
373typedef const STxDataHead_ab *PCSTxDataHead_ab;
374
375typedef struct tagSTxDataHead_a_FB {
376    BYTE    bySignalField;
377    BYTE    byServiceField;
378    WORD    wTransmitLength;
379    WORD    wDuration;
380    WORD    wTimeStampOff;
381    WORD    wDuration_f0;
382    WORD    wDuration_f1;
383} __attribute__ ((__packed__))
384STxDataHead_a_FB, *PSTxDataHead_a_FB;
385typedef const STxDataHead_a_FB *PCSTxDataHead_a_FB;
386
387//
388// MICHDR data header
389//
390typedef struct tagSMICHDRHead {
391    DWORD   adwHDR0[4];
392    DWORD   adwHDR1[4];
393    DWORD   adwHDR2[4];
394} __attribute__ ((__packed__))
395SMICHDRHead, *PSMICHDRHead;
396
397typedef const SMICHDRHead *PCSMICHDRHead;
398
399typedef struct tagSBEACONCtl {
400    DWORD   BufReady : 1;
401    DWORD   TSF : 15;
402    DWORD   BufLen : 11;
403    DWORD   Reserved : 5;
404} __attribute__ ((__packed__))
405SBEACONCtl;
406
407typedef struct tagSSecretKey {
408    DWORD   dwLowDword;
409    BYTE    byHighByte;
410} __attribute__ ((__packed__))
411SSecretKey;
412
413typedef struct tagSKeyEntry {
414    BYTE  abyAddrHi[2];
415    WORD  wKCTL;
416    BYTE  abyAddrLo[4];
417    DWORD dwKey0[4];
418    DWORD dwKey1[4];
419    DWORD dwKey2[4];
420    DWORD dwKey3[4];
421    DWORD dwKey4[4];
422} __attribute__ ((__packed__))
423SKeyEntry;
424/*---------------------  Export Macros ------------------------------*/
425
426/*---------------------  Export Classes  ----------------------------*/
427
428/*---------------------  Export Variables  --------------------------*/
429
430/*---------------------  Export Functions  --------------------------*/
431
432#endif /* __DESC_H__ */
433