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#define B_OWNED_BY_CHIP 1 // 42#define B_OWNED_BY_HOST 0 // 43 44// 45// Bits in the RSR register 46// 47#define RSR_ADDRBROAD 0x80 // 1000 0000 48#define RSR_ADDRMULTI 0x40 // 0100 0000 49#define RSR_ADDRUNI 0x00 // 0000 0000 50#define RSR_IVLDTYP 0x20 // 0010 0000 , invalid packet type 51#define RSR_IVLDLEN 0x10 // 0001 0000 , invalid len (> 2312 byte) 52#define RSR_BSSIDOK 0x08 // 0000 1000 53#define RSR_CRCOK 0x04 // 0000 0100 54#define RSR_BCNSSIDOK 0x02 // 0000 0010 55#define RSR_ADDROK 0x01 // 0000 0001 56 57// 58// Bits in the new RSR register 59// 60#define NEWRSR_DECRYPTOK 0x10 // 0001 0000 61#define NEWRSR_CFPIND 0x08 // 0000 1000 62#define NEWRSR_HWUTSF 0x04 // 0000 0100 63#define NEWRSR_BCNHITAID 0x02 // 0000 0010 64#define NEWRSR_BCNHITAID0 0x01 // 0000 0001 65 66// 67// Bits in the TSR0 register 68// 69#define TSR0_PWRSTS1_2 0xC0 // 1100 0000 70#define TSR0_PWRSTS7 0x20 // 0010 0000 71#define TSR0_NCR 0x1F // 0001 1111 72 73// 74// Bits in the TSR1 register 75// 76#define TSR1_TERR 0x80 // 1000 0000 77#define TSR1_PWRSTS4_6 0x70 // 0111 0000 78#define TSR1_RETRYTMO 0x08 // 0000 1000 79#define TSR1_TMO 0x04 // 0000 0100 80#define TSR1_PWRSTS3 0x02 // 0000 0010 81#define ACK_DATA 0x01 // 0000 0000 82 83// 84// Bits in the TCR register 85// 86#define EDMSDU 0x04 // 0000 0100 end of sdu 87#define TCR_EDP 0x02 // 0000 0010 end of packet 88#define TCR_STP 0x01 // 0000 0001 start of packet 89 90// max transmit or receive buffer size 91#define CB_MAX_BUF_SIZE 2900U // max buffer size 92 // NOTE: must be multiple of 4 93#define CB_MAX_TX_BUF_SIZE CB_MAX_BUF_SIZE // max Tx buffer size 94#define CB_MAX_RX_BUF_SIZE_NORMAL CB_MAX_BUF_SIZE // max Rx buffer size when not use Multi-RD 95 96#define CB_BEACON_BUF_SIZE 512U // default beacon buffer size 97 98#define CB_MAX_RX_DESC 128 // max # of descriptor 99#define CB_MIN_RX_DESC 16 // min # of rx descriptor 100#define CB_MAX_TX_DESC 64 // max # of descriptor 101#define CB_MIN_TX_DESC 16 // min # of tx descriptor 102 103#define CB_MAX_RECEIVED_PACKETS 16 // max # of received packets at one time 104 // limit our receive routine to indicating 105 // this many at a time for 2 reasons: 106 // 1. driver flow control to protocol layer 107 // 2. limit the time used in ISR routine 108 109#define CB_EXTRA_RD_NUM 32 // default # of Extra RD 110#define CB_RD_NUM 32 // default # of RD 111#define CB_TD_NUM 32 // default # of TD 112 113 114// max number of physical segments 115// in a single NDIS packet. Above this threshold, the packet 116// is copied into a single physically contiguous buffer 117#define CB_MAX_SEGMENT 4 118 119#define CB_MIN_MAP_REG_NUM 4 120#define CB_MAX_MAP_REG_NUM CB_MAX_TX_DESC 121 122#define CB_PROTOCOL_RESERVED_SECTION 16 123 124 125 126// if retrys excess 15 times , tx will abort, and 127// if tx fifo underflow, tx will fail 128// we should try to resend it 129#define CB_MAX_TX_ABORT_RETRY 3 130 131#ifdef __BIG_ENDIAN 132 133// WMAC definition FIFO Control 134#define FIFOCTL_AUTO_FB_1 0x0010 // 0001 0000 0000 0000 135#define FIFOCTL_AUTO_FB_0 0x0008 // 0000 1000 0000 0000 136#define FIFOCTL_GRPACK 0x0004 // 0000 0100 0000 0000 137#define FIFOCTL_11GA 0x0003 // 0000 0011 0000 0000 138#define FIFOCTL_11GB 0x0002 // 0000 0010 0000 0000 139#define FIFOCTL_11B 0x0001 // 0000 0001 0000 0000 140#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000 141#define FIFOCTL_RTS 0x8000 // 0000 0000 1000 0000 142#define FIFOCTL_ISDMA0 0x4000 // 0000 0000 0100 0000 143#define FIFOCTL_GENINT 0x2000 // 0000 0000 0010 0000 144#define FIFOCTL_TMOEN 0x1000 // 0000 0000 0001 0000 145#define FIFOCTL_LRETRY 0x0800 // 0000 0000 0000 1000 146#define FIFOCTL_CRCDIS 0x0400 // 0000 0000 0000 0100 147#define FIFOCTL_NEEDACK 0x0200 // 0000 0000 0000 0010 148#define FIFOCTL_LHEAD 0x0100 // 0000 0000 0000 0001 149 150//WMAC definition Frag Control 151#define FRAGCTL_AES 0x0003 // 0000 0011 0000 0000 152#define FRAGCTL_TKIP 0x0002 // 0000 0010 0000 0000 153#define FRAGCTL_LEGACY 0x0001 // 0000 0001 0000 0000 154#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000 155//#define FRAGCTL_AC3 0x0C00 // 0000 0000 0000 1100 156//#define FRAGCTL_AC2 0x0800 // 0000 0000 0000 1000 157//#define FRAGCTL_AC1 0x0400 // 0000 0000 0000 0100 158//#define FRAGCTL_AC0 0x0000 // 0000 0000 0000 0000 159#define FRAGCTL_ENDFRAG 0x0300 // 0000 0000 0000 0011 160#define FRAGCTL_MIDFRAG 0x0200 // 0000 0000 0000 0010 161#define FRAGCTL_STAFRAG 0x0100 // 0000 0000 0000 0001 162#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000 163 164#else 165 166#define FIFOCTL_AUTO_FB_1 0x1000 // 0001 0000 0000 0000 167#define FIFOCTL_AUTO_FB_0 0x0800 // 0000 1000 0000 0000 168#define FIFOCTL_GRPACK 0x0400 // 0000 0100 0000 0000 169#define FIFOCTL_11GA 0x0300 // 0000 0011 0000 0000 170#define FIFOCTL_11GB 0x0200 // 0000 0010 0000 0000 171#define FIFOCTL_11B 0x0100 // 0000 0001 0000 0000 172#define FIFOCTL_11A 0x0000 // 0000 0000 0000 0000 173#define FIFOCTL_RTS 0x0080 // 0000 0000 1000 0000 174#define FIFOCTL_ISDMA0 0x0040 // 0000 0000 0100 0000 175#define FIFOCTL_GENINT 0x0020 // 0000 0000 0010 0000 176#define FIFOCTL_TMOEN 0x0010 // 0000 0000 0001 0000 177#define FIFOCTL_LRETRY 0x0008 // 0000 0000 0000 1000 178#define FIFOCTL_CRCDIS 0x0004 // 0000 0000 0000 0100 179#define FIFOCTL_NEEDACK 0x0002 // 0000 0000 0000 0010 180#define FIFOCTL_LHEAD 0x0001 // 0000 0000 0000 0001 181 182//WMAC definition Frag Control 183#define FRAGCTL_AES 0x0300 // 0000 0011 0000 0000 184#define FRAGCTL_TKIP 0x0200 // 0000 0010 0000 0000 185#define FRAGCTL_LEGACY 0x0100 // 0000 0001 0000 0000 186#define FRAGCTL_NONENCRYPT 0x0000 // 0000 0000 0000 0000 187//#define FRAGCTL_AC3 0x000C // 0000 0000 0000 1100 188//#define FRAGCTL_AC2 0x0008 // 0000 0000 0000 1000 189//#define FRAGCTL_AC1 0x0004 // 0000 0000 0000 0100 190//#define FRAGCTL_AC0 0x0000 // 0000 0000 0000 0000 191#define FRAGCTL_ENDFRAG 0x0003 // 0000 0000 0000 0011 192#define FRAGCTL_MIDFRAG 0x0002 // 0000 0000 0000 0010 193#define FRAGCTL_STAFRAG 0x0001 // 0000 0000 0000 0001 194#define FRAGCTL_NONFRAG 0x0000 // 0000 0000 0000 0000 195 196#endif // #ifdef __BIG_ENDIAN 197 198//#define TYPE_AC0DMA 0 199//#define TYPE_TXDMA0 1 200#define TYPE_TXDMA0 0 201#define TYPE_AC0DMA 1 202#define TYPE_ATIMDMA 2 203#define TYPE_SYNCDMA 3 204#define TYPE_MAXTD 2 205 206#define TYPE_BEACONDMA 4 207 208#define TYPE_RXDMA0 0 209#define TYPE_RXDMA1 1 210#define TYPE_MAXRD 2 211 212 213 214// TD_INFO flags control bit 215#define TD_FLAGS_NETIF_SKB 0x01 // check if need release skb 216#define TD_FLAGS_PRIV_SKB 0x02 // check if called from private skb(hostap) 217#define TD_FLAGS_PS_RETRY 0x04 // check if PS STA frame re-transmit 218//#define TD_FLAGS_NETIF_SKB 0x04 219 220/*--------------------- Export Types ------------------------------*/ 221 222// ref_sk_buff is used for mapping the skb structure between pre-built driver-obj & running kernel. 223// Since different kernel version (2.4x) may change skb structure, i.e. pre-built driver-obj 224// may link to older skb that leads error. 225 226typedef struct tagDEVICE_RD_INFO { 227 struct sk_buff* skb; 228 dma_addr_t skb_dma; 229 dma_addr_t curr_desc; 230} DEVICE_RD_INFO, *PDEVICE_RD_INFO; 231 232/* 233static inline PDEVICE_RD_INFO alloc_rd_info(void) { 234 PDEVICE_RD_INFO ptr; 235 ptr = kmalloc(sizeof(DEVICE_RD_INFO), GFP_ATOMIC); 236 if (ptr == NULL) 237 return NULL; 238 else { 239 memset(ptr,0,sizeof(DEVICE_RD_INFO)); 240 return ptr; 241 } 242} 243*/ 244 245/* 246typedef struct tagRDES0 { 247 unsigned short wResCount; 248 unsigned short wf1Owner ; 249// unsigned short f15Reserved : 15; 250// unsigned short f1Owner : 1; 251} __attribute__ ((__packed__)) 252SRDES0; 253*/ 254 255#ifdef __BIG_ENDIAN 256 257typedef struct tagRDES0 { 258 volatile unsigned short wResCount; 259 union { 260 volatile u16 f15Reserved; 261 struct { 262 volatile u8 f8Reserved1; 263 volatile u8 f1Owner:1; 264 volatile u8 f7Reserved:7; 265 } __attribute__ ((__packed__)); 266 } __attribute__ ((__packed__)); 267} __attribute__ ((__packed__)) 268SRDES0, *PSRDES0; 269 270#else 271 272typedef struct tagRDES0 { 273 unsigned short wResCount; 274 unsigned short f15Reserved : 15; 275 unsigned short f1Owner : 1; 276} __attribute__ ((__packed__)) 277SRDES0; 278 279 280#endif 281 282typedef struct tagRDES1 { 283 unsigned short wReqCount; 284 unsigned short wReserved; 285} __attribute__ ((__packed__)) 286SRDES1; 287 288// 289// Rx descriptor 290// 291typedef struct tagSRxDesc { 292 volatile SRDES0 m_rd0RD0; 293 volatile SRDES1 m_rd1RD1; 294 volatile u32 buff_addr; 295 volatile u32 next_desc; 296 struct tagSRxDesc *next;//4 bytes 297 volatile PDEVICE_RD_INFO pRDInfo;//4 bytes 298 volatile u32 Reserved[2];//8 bytes 299} __attribute__ ((__packed__)) 300SRxDesc, *PSRxDesc; 301typedef const SRxDesc *PCSRxDesc; 302 303#ifdef __BIG_ENDIAN 304 305/* 306typedef struct tagTDES0 { 307 volatile unsigned char byTSR0; 308 volatile unsigned char byTSR1; 309 volatile unsigned short wOwner_Txtime; 310// volatile unsigned short f15Txtime : 15; 311// volatile unsigned short f1Owner:1; 312} __attribute__ ((__packed__)) 313STDES0; 314*/ 315 316typedef struct tagTDES0 { 317 volatile unsigned char byTSR0; 318 volatile unsigned char byTSR1; 319 union { 320 volatile u16 f15Txtime; 321 struct { 322 volatile u8 f8Reserved1; 323 volatile u8 f1Owner:1; 324 volatile u8 f7Reserved:7; 325 } __attribute__ ((__packed__)); 326 } __attribute__ ((__packed__)); 327} __attribute__ ((__packed__)) 328STDES0, PSTDES0; 329 330#else 331 332typedef struct tagTDES0 { 333 volatile unsigned char byTSR0; 334 volatile unsigned char byTSR1; 335 volatile unsigned short f15Txtime : 15; 336 volatile unsigned short f1Owner:1; 337} __attribute__ ((__packed__)) 338STDES0; 339 340#endif 341 342 343typedef struct tagTDES1 { 344 volatile unsigned short wReqCount; 345 volatile unsigned char byTCR; 346 volatile unsigned char byReserved; 347} __attribute__ ((__packed__)) 348STDES1; 349 350 351typedef struct tagDEVICE_TD_INFO{ 352 struct sk_buff* skb; 353 unsigned char *buf; 354 dma_addr_t skb_dma; 355 dma_addr_t buf_dma; 356 dma_addr_t curr_desc; 357 unsigned long dwReqCount; 358 unsigned long dwHeaderLength; 359 unsigned char byFlags; 360} DEVICE_TD_INFO, *PDEVICE_TD_INFO; 361 362/* 363static inline PDEVICE_TD_INFO alloc_td_info(void) { 364 PDEVICE_TD_INFO ptr; 365 ptr = kmalloc(sizeof(DEVICE_TD_INFO),GFP_ATOMIC); 366 if (ptr == NULL) 367 return NULL; 368 else { 369 memset(ptr,0,sizeof(DEVICE_TD_INFO)); 370 return ptr; 371 } 372} 373*/ 374 375// 376// transmit descriptor 377// 378typedef struct tagSTxDesc { 379 volatile STDES0 m_td0TD0; 380 volatile STDES1 m_td1TD1; 381 volatile u32 buff_addr; 382 volatile u32 next_desc; 383 struct tagSTxDesc* next; //4 bytes 384 volatile PDEVICE_TD_INFO pTDInfo;//4 bytes 385 volatile u32 Reserved[2];//8 bytes 386} __attribute__ ((__packed__)) 387STxDesc, *PSTxDesc; 388typedef const STxDesc *PCSTxDesc; 389 390 391typedef struct tagSTxSyncDesc { 392 volatile STDES0 m_td0TD0; 393 volatile STDES1 m_td1TD1; 394 volatile u32 buff_addr; // pointer to logical buffer 395 volatile u32 next_desc; // pointer to next logical descriptor 396 volatile unsigned short m_wFIFOCtl; 397 volatile unsigned short m_wTimeStamp; 398 struct tagSTxSyncDesc* next; //4 bytes 399 volatile PDEVICE_TD_INFO pTDInfo;//4 bytes 400 volatile u32 m_dwReserved2; 401} __attribute__ ((__packed__)) 402STxSyncDesc, *PSTxSyncDesc; 403typedef const STxSyncDesc *PCSTxSyncDesc; 404 405 406// 407// RsvTime buffer header 408// 409typedef struct tagSRrvTime_gRTS { 410 unsigned short wRTSTxRrvTime_ba; 411 unsigned short wRTSTxRrvTime_aa; 412 unsigned short wRTSTxRrvTime_bb; 413 unsigned short wReserved; 414 unsigned short wTxRrvTime_b; 415 unsigned short wTxRrvTime_a; 416}__attribute__ ((__packed__)) 417SRrvTime_gRTS, *PSRrvTime_gRTS; 418typedef const SRrvTime_gRTS *PCSRrvTime_gRTS; 419 420typedef struct tagSRrvTime_gCTS { 421 unsigned short wCTSTxRrvTime_ba; 422 unsigned short wReserved; 423 unsigned short wTxRrvTime_b; 424 unsigned short wTxRrvTime_a; 425}__attribute__ ((__packed__)) 426SRrvTime_gCTS, *PSRrvTime_gCTS; 427typedef const SRrvTime_gCTS *PCSRrvTime_gCTS; 428 429typedef struct tagSRrvTime_ab { 430 unsigned short wRTSTxRrvTime; 431 unsigned short wTxRrvTime; 432}__attribute__ ((__packed__)) 433SRrvTime_ab, *PSRrvTime_ab; 434typedef const SRrvTime_ab *PCSRrvTime_ab; 435 436typedef struct tagSRrvTime_atim { 437 unsigned short wCTSTxRrvTime_ba; 438 unsigned short wTxRrvTime_a; 439}__attribute__ ((__packed__)) 440SRrvTime_atim, *PSRrvTime_atim; 441typedef const SRrvTime_atim *PCSRrvTime_atim; 442 443// 444// RTS buffer header 445// 446typedef struct tagSRTSData { 447 unsigned short wFrameControl; 448 unsigned short wDurationID; 449 unsigned char abyRA[ETH_ALEN]; 450 unsigned char abyTA[ETH_ALEN]; 451}__attribute__ ((__packed__)) 452SRTSData, *PSRTSData; 453typedef const SRTSData *PCSRTSData; 454 455typedef struct tagSRTS_g { 456 unsigned char bySignalField_b; 457 unsigned char byServiceField_b; 458 unsigned short wTransmitLength_b; 459 unsigned char bySignalField_a; 460 unsigned char byServiceField_a; 461 unsigned short wTransmitLength_a; 462 unsigned short wDuration_ba; 463 unsigned short wDuration_aa; 464 unsigned short wDuration_bb; 465 unsigned short wReserved; 466 SRTSData Data; 467}__attribute__ ((__packed__)) 468SRTS_g, *PSRTS_g; 469typedef const SRTS_g *PCSRTS_g; 470 471 472typedef struct tagSRTS_g_FB { 473 unsigned char bySignalField_b; 474 unsigned char byServiceField_b; 475 unsigned short wTransmitLength_b; 476 unsigned char bySignalField_a; 477 unsigned char byServiceField_a; 478 unsigned short wTransmitLength_a; 479 unsigned short wDuration_ba; 480 unsigned short wDuration_aa; 481 unsigned short wDuration_bb; 482 unsigned short wReserved; 483 unsigned short wRTSDuration_ba_f0; 484 unsigned short wRTSDuration_aa_f0; 485 unsigned short wRTSDuration_ba_f1; 486 unsigned short wRTSDuration_aa_f1; 487 SRTSData Data; 488}__attribute__ ((__packed__)) 489SRTS_g_FB, *PSRTS_g_FB; 490typedef const SRTS_g_FB *PCSRTS_g_FB; 491 492 493typedef struct tagSRTS_ab { 494 unsigned char bySignalField; 495 unsigned char byServiceField; 496 unsigned short wTransmitLength; 497 unsigned short wDuration; 498 unsigned short wReserved; 499 SRTSData Data; 500}__attribute__ ((__packed__)) 501SRTS_ab, *PSRTS_ab; 502typedef const SRTS_ab *PCSRTS_ab; 503 504 505typedef struct tagSRTS_a_FB { 506 unsigned char bySignalField; 507 unsigned char byServiceField; 508 unsigned short wTransmitLength; 509 unsigned short wDuration; 510 unsigned short wReserved; 511 unsigned short wRTSDuration_f0; 512 unsigned short wRTSDuration_f1; 513 SRTSData Data; 514}__attribute__ ((__packed__)) 515SRTS_a_FB, *PSRTS_a_FB; 516typedef const SRTS_a_FB *PCSRTS_a_FB; 517 518 519// 520// CTS buffer header 521// 522typedef struct tagSCTSData { 523 unsigned short wFrameControl; 524 unsigned short wDurationID; 525 unsigned char abyRA[ETH_ALEN]; 526 unsigned short wReserved; 527}__attribute__ ((__packed__)) 528SCTSData, *PSCTSData; 529 530typedef struct tagSCTS { 531 unsigned char bySignalField_b; 532 unsigned char byServiceField_b; 533 unsigned short wTransmitLength_b; 534 unsigned short wDuration_ba; 535 unsigned short wReserved; 536 SCTSData Data; 537}__attribute__ ((__packed__)) 538SCTS, *PSCTS; 539typedef const SCTS *PCSCTS; 540 541typedef struct tagSCTS_FB { 542 unsigned char bySignalField_b; 543 unsigned char byServiceField_b; 544 unsigned short wTransmitLength_b; 545 unsigned short wDuration_ba; 546 unsigned short wReserved; 547 unsigned short wCTSDuration_ba_f0; 548 unsigned short wCTSDuration_ba_f1; 549 SCTSData Data; 550}__attribute__ ((__packed__)) 551SCTS_FB, *PSCTS_FB; 552typedef const SCTS_FB *PCSCTS_FB; 553 554 555// 556// Tx FIFO header 557// 558typedef struct tagSTxBufHead { 559 u32 adwTxKey[4]; 560 unsigned short wFIFOCtl; 561 unsigned short wTimeStamp; 562 unsigned short wFragCtl; 563 unsigned char byTxPower; 564 unsigned char wReserved; 565}__attribute__ ((__packed__)) 566STxBufHead, *PSTxBufHead; 567typedef const STxBufHead *PCSTxBufHead; 568 569typedef struct tagSTxShortBufHead { 570 unsigned short wFIFOCtl; 571 unsigned short wTimeStamp; 572}__attribute__ ((__packed__)) 573STxShortBufHead, *PSTxShortBufHead; 574typedef const STxShortBufHead *PCSTxShortBufHead; 575 576// 577// Tx data header 578// 579typedef struct tagSTxDataHead_g { 580 unsigned char bySignalField_b; 581 unsigned char byServiceField_b; 582 unsigned short wTransmitLength_b; 583 unsigned char bySignalField_a; 584 unsigned char byServiceField_a; 585 unsigned short wTransmitLength_a; 586 unsigned short wDuration_b; 587 unsigned short wDuration_a; 588 unsigned short wTimeStampOff_b; 589 unsigned short wTimeStampOff_a; 590}__attribute__ ((__packed__)) 591STxDataHead_g, *PSTxDataHead_g; 592typedef const STxDataHead_g *PCSTxDataHead_g; 593 594typedef struct tagSTxDataHead_g_FB { 595 unsigned char bySignalField_b; 596 unsigned char byServiceField_b; 597 unsigned short wTransmitLength_b; 598 unsigned char bySignalField_a; 599 unsigned char byServiceField_a; 600 unsigned short wTransmitLength_a; 601 unsigned short wDuration_b; 602 unsigned short wDuration_a; 603 unsigned short wDuration_a_f0; 604 unsigned short wDuration_a_f1; 605 unsigned short wTimeStampOff_b; 606 unsigned short wTimeStampOff_a; 607}__attribute__ ((__packed__)) 608STxDataHead_g_FB, *PSTxDataHead_g_FB; 609typedef const STxDataHead_g_FB *PCSTxDataHead_g_FB; 610 611 612typedef struct tagSTxDataHead_ab { 613 unsigned char bySignalField; 614 unsigned char byServiceField; 615 unsigned short wTransmitLength; 616 unsigned short wDuration; 617 unsigned short wTimeStampOff; 618}__attribute__ ((__packed__)) 619STxDataHead_ab, *PSTxDataHead_ab; 620typedef const STxDataHead_ab *PCSTxDataHead_ab; 621 622 623typedef struct tagSTxDataHead_a_FB { 624 unsigned char bySignalField; 625 unsigned char byServiceField; 626 unsigned short wTransmitLength; 627 unsigned short wDuration; 628 unsigned short wTimeStampOff; 629 unsigned short wDuration_f0; 630 unsigned short wDuration_f1; 631}__attribute__ ((__packed__)) 632STxDataHead_a_FB, *PSTxDataHead_a_FB; 633typedef const STxDataHead_a_FB *PCSTxDataHead_a_FB; 634 635// 636// MICHDR data header 637// 638typedef struct tagSMICHDRHead { 639 u32 adwHDR0[4]; 640 u32 adwHDR1[4]; 641 u32 adwHDR2[4]; 642}__attribute__ ((__packed__)) 643SMICHDRHead, *PSMICHDRHead; 644typedef const SMICHDRHead *PCSMICHDRHead; 645 646typedef struct tagSBEACONCtl { 647 u32 BufReady : 1; 648 u32 TSF : 15; 649 u32 BufLen : 11; 650 u32 Reserved : 5; 651}__attribute__ ((__packed__)) 652SBEACONCtl; 653 654 655typedef struct tagSSecretKey { 656 u32 dwLowDword; 657 unsigned char byHighByte; 658}__attribute__ ((__packed__)) 659SSecretKey; 660 661typedef struct tagSKeyEntry { 662 unsigned char abyAddrHi[2]; 663 unsigned short wKCTL; 664 unsigned char abyAddrLo[4]; 665 u32 dwKey0[4]; 666 u32 dwKey1[4]; 667 u32 dwKey2[4]; 668 u32 dwKey3[4]; 669 u32 dwKey4[4]; 670}__attribute__ ((__packed__)) 671SKeyEntry; 672/*--------------------- Export Macros ------------------------------*/ 673 674/*--------------------- Export Classes ----------------------------*/ 675 676/*--------------------- Export Variables --------------------------*/ 677 678/*--------------------- Export Functions --------------------------*/ 679 680 681 682 683#endif // __DESC_H__ 684