/* * Copyright (c) 1996, 2003 VIA Networking Technologies, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * File: rxtx.h * * Purpose: * * Author: Jerry Chen * * Date: Jun. 27, 2002 * */ #ifndef __RXTX_H__ #define __RXTX_H__ #include "ttype.h" #include "device.h" #include "wcmd.h" /*--------------------- Export Definitions -------------------------*/ /*--------------------- Export Classes ----------------------------*/ // // RTS buffer header // typedef struct tagSRTSDataF { WORD wFrameControl; WORD wDurationID; BYTE abyRA[ETH_ALEN]; BYTE abyTA[ETH_ALEN]; } SRTSDataF, *PSRTSDataF; // // CTS buffer header // typedef struct tagSCTSDataF { WORD wFrameControl; WORD wDurationID; BYTE abyRA[ETH_ALEN]; WORD wReserved; } SCTSDataF, *PSCTSDataF; // // MICHDR data header // typedef struct tagSMICHDR { DWORD adwHDR0[4]; DWORD adwHDR1[4]; DWORD adwHDR2[4]; } SMICHDR, *PSMICHDR; typedef struct tagSTX_NAF_G_RTS { //RsvTime WORD wRTSTxRrvTime_ba; WORD wRTSTxRrvTime_aa; WORD wRTSTxRrvTime_bb; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; //RTS BYTE byRTSSignalField_b; BYTE byRTSServiceField_b; WORD wRTSTransmitLength_b; BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_ba; WORD wRTSDuration_aa; WORD wRTSDuration_bb; WORD wReserved3; SRTSDataF sRTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_NAF_G_RTS, *PTX_NAF_G_RTS; typedef struct tagSTX_NAF_G_RTS_MIC { //RsvTime WORD wRTSTxRrvTime_ba; WORD wRTSTxRrvTime_aa; WORD wRTSTxRrvTime_bb; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; SMICHDR sMICHDR; //RTS BYTE byRTSSignalField_b; BYTE byRTSServiceField_b; WORD wRTSTransmitLength_b; BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_ba; WORD wRTSDuration_aa; WORD wRTSDuration_bb; WORD wReserved3; SRTSDataF sRTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_NAF_G_RTS_MIC, *PTX_NAF_G_RTS_MIC; typedef struct tagSTX_NAF_G_CTS { //RsvTime WORD wCTSTxRrvTime_ba; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; //CTS BYTE byCTSSignalField_b; BYTE byCTSServiceField_b; WORD wCTSTransmitLength_b; WORD wCTSDuration_ba; WORD wReserved3; SCTSDataF sCTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_NAF_G_CTS, *PTX_NAF_G_CTS; typedef struct tagSTX_NAF_G_CTS_MIC { //RsvTime WORD wCTSTxRrvTime_ba; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; SMICHDR sMICHDR; //CTS BYTE byCTSSignalField_b; BYTE byCTSServiceField_b; WORD wCTSTransmitLength_b; WORD wCTSDuration_ba; WORD wReserved3; SCTSDataF sCTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_NAF_G_CTS_MIC, *PTX_NAF_G_CTS_MIC; typedef struct tagSTX_NAF_G_BEACON { WORD wFIFOCtl; WORD wTimeStamp; //CTS BYTE byCTSSignalField_b; BYTE byCTSServiceField_b; WORD wCTSTransmitLength_b; WORD wCTSDuration_ba; WORD wReserved1; SCTSDataF sCTS; //Data BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_a; WORD wTimeStampOff_a; } TX_NAF_G_BEACON, *PTX_NAF_G_BEACON; typedef struct tagSTX_NAF_AB_RTS { //RsvTime WORD wRTSTxRrvTime_ab; WORD wTxRrvTime_ab; //RTS BYTE byRTSSignalField_ab; BYTE byRTSServiceField_ab; WORD wRTSTransmitLength_ab; WORD wRTSDuration_ab; WORD wReserved2; SRTSDataF sRTS; //Data BYTE bySignalField_ab; BYTE byServiceField_ab; WORD wTransmitLength_ab; WORD wDuration_ab; WORD wTimeStampOff_ab; } TX_NAF_AB_RTS, *PTX_NAF_AB_RTS; typedef struct tagSTX_NAF_AB_RTS_MIC { //RsvTime WORD wRTSTxRrvTime_ab; WORD wTxRrvTime_ab; SMICHDR sMICHDR; //RTS BYTE byRTSSignalField_ab; BYTE byRTSServiceField_ab; WORD wRTSTransmitLength_ab; WORD wRTSDuration_ab; WORD wReserved2; SRTSDataF sRTS; //Data BYTE bySignalField_ab; BYTE byServiceField_ab; WORD wTransmitLength_ab; WORD wDuration_ab; WORD wTimeStampOff_ab; } TX_NAF_AB_RTS_MIC, *PTX_NAF_AB_RTS_MIC; typedef struct tagSTX_NAF_AB_CTS { //RsvTime WORD wReserved2; WORD wTxRrvTime_ab; //Data BYTE bySignalField_ab; BYTE byServiceField_ab; WORD wTransmitLength_ab; WORD wDuration_ab; WORD wTimeStampOff_ab; } TX_NAF_AB_CTS, *PTX_NAF_AB_CTS; typedef struct tagSTX_NAF_AB_CTS_MIC { //RsvTime WORD wReserved2; WORD wTxRrvTime_ab; SMICHDR sMICHDR; //Data BYTE bySignalField_ab; BYTE byServiceField_ab; WORD wTransmitLength_ab; WORD wDuration_ab; WORD wTimeStampOff_ab; } TX_NAF_AB_CTS_MIC, *PTX_NAF_AB_CTS_MIC; typedef struct tagSTX_NAF_AB_BEACON { WORD wFIFOCtl; WORD wTimeStamp; //Data BYTE bySignalField_ab; BYTE byServiceField_ab; WORD wTransmitLength_ab; WORD wDuration_ab; WORD wTimeStampOff_ab; } TX_NAF_AB_BEACON, *PTX_NAF_AB_BEACON; typedef struct tagSTX_AF_G_RTS { //RsvTime WORD wRTSTxRrvTime_ba; WORD wRTSTxRrvTime_aa; WORD wRTSTxRrvTime_bb; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; //RTS BYTE byRTSSignalField_b; BYTE byRTSServiceField_b; WORD wRTSTransmitLength_b; BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_ba; WORD wRTSDuration_aa; WORD wRTSDuration_bb; WORD wReserved3; WORD wRTSDuration_ba_f0; WORD wRTSDuration_aa_f0; WORD wRTSDuration_ba_f1; WORD wRTSDuration_aa_f1; SRTSDataF sRTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wDuration_a_f0; WORD wDuration_a_f1; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_AF_G_RTS, *PTX_AF_G_RTS; typedef struct tagSTX_AF_G_RTS_MIC { //RsvTime WORD wRTSTxRrvTime_ba; WORD wRTSTxRrvTime_aa; WORD wRTSTxRrvTime_bb; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; SMICHDR sMICHDR; //RTS BYTE byRTSSignalField_b; BYTE byRTSServiceField_b; WORD wRTSTransmitLength_b; BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_ba; WORD wRTSDuration_aa; WORD wRTSDuration_bb; WORD wReserved3; WORD wRTSDuration_ba_f0; WORD wRTSDuration_aa_f0; WORD wRTSDuration_ba_f1; WORD wRTSDuration_aa_f1; SRTSDataF sRTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wDuration_a_f0; WORD wDuration_a_f1; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_AF_G_RTS_MIC, *PTX_AF_G_RTS_MIC; typedef struct tagSTX_AF_G_CTS { //RsvTime WORD wCTSTxRrvTime_ba; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; //CTS BYTE byCTSSignalField_b; BYTE byCTSServiceField_b; WORD wCTSTransmitLength_b; WORD wCTSDuration_ba; WORD wReserved3; WORD wCTSDuration_ba_f0; WORD wCTSDuration_ba_f1; SCTSDataF sCTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wDuration_a_f0; WORD wDuration_a_f1; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_AF_G_CTS, *PTX_AF_G_CTS; typedef struct tagSTX_AF_G_CTS_MIC { //RsvTime WORD wCTSTxRrvTime_ba; WORD wReserved2; WORD wTxRrvTime_b; WORD wTxRrvTime_a; SMICHDR sMICHDR; //CTS BYTE byCTSSignalField_b; BYTE byCTSServiceField_b; WORD wCTSTransmitLength_b; WORD wCTSDuration_ba; WORD wReserved3; WORD wCTSDuration_ba_f0; WORD wCTSDuration_ba_f1; SCTSDataF sCTS; //Data BYTE bySignalField_b; BYTE byServiceField_b; WORD wTransmitLength_b; BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_b; WORD wDuration_a; WORD wDuration_a_f0; WORD wDuration_a_f1; WORD wTimeStampOff_b; WORD wTimeStampOff_a; } TX_AF_G_CTS_MIC, *PTX_AF_G_CTS_MIC; typedef struct tagSTX_AF_A_RTS { //RsvTime WORD wRTSTxRrvTime_a; WORD wTxRrvTime_a; //RTS BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_a; WORD wReserved2; WORD wRTSDuration_a_f0; WORD wRTSDuration_a_f1; SRTSDataF sRTS; //Data BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_a; WORD wTimeStampOff_a; WORD wDuration_a_f0; WORD wDuration_a_f1; } TX_AF_A_RTS, *PTX_AF_A_RTS; typedef struct tagSTX_AF_A_RTS_MIC { //RsvTime WORD wRTSTxRrvTime_a; WORD wTxRrvTime_a; SMICHDR sMICHDR; //RTS BYTE byRTSSignalField_a; BYTE byRTSServiceField_a; WORD wRTSTransmitLength_a; WORD wRTSDuration_a; WORD wReserved2; WORD wRTSDuration_a_f0; WORD wRTSDuration_a_f1; SRTSDataF sRTS; //Data BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_a; WORD wTimeStampOff_a; WORD wDuration_a_f0; WORD wDuration_a_f1; } TX_AF_A_RTS_MIC, *PTX_AF_A_RTS_MIC; typedef struct tagSTX_AF_A_CTS { //RsvTime WORD wReserved2; WORD wTxRrvTime_a; //Data BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_a; WORD wTimeStampOff_a; WORD wDuration_a_f0; WORD wDuration_a_f1; } TX_AF_A_CTS, *PTX_AF_A_CTS; typedef struct tagSTX_AF_A_CTS_MIC { //RsvTime WORD wReserved2; WORD wTxRrvTime_a; SMICHDR sMICHDR; //Data BYTE bySignalField_a; BYTE byServiceField_a; WORD wTransmitLength_a; WORD wDuration_a; WORD wTimeStampOff_a; WORD wDuration_a_f0; WORD wDuration_a_f1; } TX_AF_A_CTS_MIC, *PTX_AF_A_CTS_MIC; // // union with all of the TX Buffer Type // typedef union tagUTX_BUFFER_CONTAINER { TX_NAF_G_RTS RTS_G; TX_NAF_G_RTS_MIC RTS_G_MIC; TX_NAF_G_CTS CTS_G; TX_NAF_G_CTS_MIC CTS_G_MIC; //TX_NAF_G_BEACON Beacon_G; TX_NAF_AB_RTS RTS_AB; TX_NAF_AB_RTS_MIC RTS_AB_MIC; TX_NAF_AB_CTS CTS_AB; TX_NAF_AB_CTS_MIC CTS_AB_MIC; //TX_NAF_AB_BEACON Beacon_AB; TX_AF_G_RTS RTS_G_AutoFB; TX_AF_G_RTS_MIC RTS_G_AutoFB_MIC; TX_AF_G_CTS CTS_G_AutoFB; TX_AF_G_CTS_MIC CTS_G_AutoFB_MIC; TX_AF_A_RTS RTS_A_AutoFB; TX_AF_A_RTS_MIC RTS_A_AutoFB_MIC; TX_AF_A_CTS CTS_A_AutoFB; TX_AF_A_CTS_MIC CTS_A_AutoFB_MIC; } TX_BUFFER_CONTAINER, *PTX_BUFFER_CONTAINER; // // Remote NDIS message format // typedef struct tagSTX_BUFFER { BYTE byType; BYTE byPKTNO; WORD wTxByteCount; DWORD adwTxKey[4]; WORD wFIFOCtl; WORD wTimeStamp; WORD wFragCtl; WORD wReserved; // Actual message TX_BUFFER_CONTAINER BufferHeader; } TX_BUFFER, *PTX_BUFFER; // // Remote NDIS message format // typedef struct tagSBEACON_BUFFER { BYTE byType; BYTE byPKTNO; WORD wTxByteCount; WORD wFIFOCtl; WORD wTimeStamp; // Actual message TX_BUFFER_CONTAINER BufferHeader; } BEACON_BUFFER, *PBEACON_BUFFER; /*--------------------- Export Variables --------------------------*/ /*--------------------- Export Functions --------------------------*/ BOOL bPacketToWirelessUsb( PSDevice pDevice, BYTE byPktType, PBYTE usbPacketBuf, BOOL bNeedEncrypt, unsigned int cbPayloadSize, unsigned int uDMAIdx, PSEthernetHeader psEthHeader, PBYTE pPacket, PSKeyItem pTransmitKey, unsigned int uNodeIndex, WORD wCurrentRate, unsigned int *pcbHeaderLen, unsigned int *pcbTotalLen ); void vDMA0_tx_80211(PSDevice pDevice, struct sk_buff *skb); int nsDMA_tx_packet(PSDevice pDevice, unsigned int uDMAIdx, struct sk_buff *skb); CMD_STATUS csMgmt_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); CMD_STATUS csBeacon_xmit(PSDevice pDevice, PSTxMgmtPacket pPacket); BOOL bRelayPacketSend(PSDevice pDevice, PBYTE pbySkbData, unsigned int uDataLen, unsigned int uNodeIndex); #endif /* __RXTX_H__ */