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