/* * 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 "device.h" #include "wcmd.h" // // RTS buffer header // typedef struct tagSRTSDataF { u16 wFrameControl; u16 wDurationID; u8 abyRA[ETH_ALEN]; u8 abyTA[ETH_ALEN]; } SRTSDataF, *PSRTSDataF; // // CTS buffer header // typedef struct tagSCTSDataF { u16 wFrameControl; u16 wDurationID; u8 abyRA[ETH_ALEN]; u16 wReserved; } SCTSDataF, *PSCTSDataF; // // MICHDR data header // typedef struct tagSMICHDR { u32 adwHDR0[4]; u32 adwHDR1[4]; u32 adwHDR2[4]; } SMICHDR, *PSMICHDR; typedef struct tagSTX_NAF_G_RTS { //RsvTime u16 wRTSTxRrvTime_ba; u16 wRTSTxRrvTime_aa; u16 wRTSTxRrvTime_bb; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; //RTS u8 byRTSSignalField_b; u8 byRTSServiceField_b; u16 wRTSTransmitLength_b; u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_ba; u16 wRTSDuration_aa; u16 wRTSDuration_bb; u16 wReserved3; SRTSDataF sRTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_NAF_G_RTS, *PTX_NAF_G_RTS; typedef struct tagSTX_NAF_G_RTS_MIC { //RsvTime u16 wRTSTxRrvTime_ba; u16 wRTSTxRrvTime_aa; u16 wRTSTxRrvTime_bb; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; SMICHDR sMICHDR; //RTS u8 byRTSSignalField_b; u8 byRTSServiceField_b; u16 wRTSTransmitLength_b; u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_ba; u16 wRTSDuration_aa; u16 wRTSDuration_bb; u16 wReserved3; SRTSDataF sRTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_NAF_G_RTS_MIC, *PTX_NAF_G_RTS_MIC; typedef struct tagSTX_NAF_G_CTS { //RsvTime u16 wCTSTxRrvTime_ba; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; //CTS u8 byCTSSignalField_b; u8 byCTSServiceField_b; u16 wCTSTransmitLength_b; u16 wCTSDuration_ba; u16 wReserved3; SCTSDataF sCTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_NAF_G_CTS, *PTX_NAF_G_CTS; typedef struct tagSTX_NAF_G_CTS_MIC { //RsvTime u16 wCTSTxRrvTime_ba; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; SMICHDR sMICHDR; //CTS u8 byCTSSignalField_b; u8 byCTSServiceField_b; u16 wCTSTransmitLength_b; u16 wCTSDuration_ba; u16 wReserved3; SCTSDataF sCTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_NAF_G_CTS_MIC, *PTX_NAF_G_CTS_MIC; typedef struct tagSTX_NAF_G_BEACON { u16 wFIFOCtl; u16 wTimeStamp; //CTS u8 byCTSSignalField_b; u8 byCTSServiceField_b; u16 wCTSTransmitLength_b; u16 wCTSDuration_ba; u16 wReserved1; SCTSDataF sCTS; //Data u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_a; u16 wTimeStampOff_a; } TX_NAF_G_BEACON, *PTX_NAF_G_BEACON; typedef struct tagSTX_NAF_AB_RTS { //RsvTime u16 wRTSTxRrvTime_ab; u16 wTxRrvTime_ab; //RTS u8 byRTSSignalField_ab; u8 byRTSServiceField_ab; u16 wRTSTransmitLength_ab; u16 wRTSDuration_ab; u16 wReserved2; SRTSDataF sRTS; //Data u8 bySignalField_ab; u8 byServiceField_ab; u16 wTransmitLength_ab; u16 wDuration_ab; u16 wTimeStampOff_ab; } TX_NAF_AB_RTS, *PTX_NAF_AB_RTS; typedef struct tagSTX_NAF_AB_RTS_MIC { //RsvTime u16 wRTSTxRrvTime_ab; u16 wTxRrvTime_ab; SMICHDR sMICHDR; //RTS u8 byRTSSignalField_ab; u8 byRTSServiceField_ab; u16 wRTSTransmitLength_ab; u16 wRTSDuration_ab; u16 wReserved2; SRTSDataF sRTS; //Data u8 bySignalField_ab; u8 byServiceField_ab; u16 wTransmitLength_ab; u16 wDuration_ab; u16 wTimeStampOff_ab; } TX_NAF_AB_RTS_MIC, *PTX_NAF_AB_RTS_MIC; typedef struct tagSTX_NAF_AB_CTS { //RsvTime u16 wReserved2; u16 wTxRrvTime_ab; //Data u8 bySignalField_ab; u8 byServiceField_ab; u16 wTransmitLength_ab; u16 wDuration_ab; u16 wTimeStampOff_ab; } TX_NAF_AB_CTS, *PTX_NAF_AB_CTS; typedef struct tagSTX_NAF_AB_CTS_MIC { //RsvTime u16 wReserved2; u16 wTxRrvTime_ab; SMICHDR sMICHDR; //Data u8 bySignalField_ab; u8 byServiceField_ab; u16 wTransmitLength_ab; u16 wDuration_ab; u16 wTimeStampOff_ab; } TX_NAF_AB_CTS_MIC, *PTX_NAF_AB_CTS_MIC; typedef struct tagSTX_NAF_AB_BEACON { u16 wFIFOCtl; u16 wTimeStamp; //Data u8 bySignalField_ab; u8 byServiceField_ab; u16 wTransmitLength_ab; u16 wDuration_ab; u16 wTimeStampOff_ab; } TX_NAF_AB_BEACON, *PTX_NAF_AB_BEACON; typedef struct tagSTX_AF_G_RTS { //RsvTime u16 wRTSTxRrvTime_ba; u16 wRTSTxRrvTime_aa; u16 wRTSTxRrvTime_bb; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; //RTS u8 byRTSSignalField_b; u8 byRTSServiceField_b; u16 wRTSTransmitLength_b; u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_ba; u16 wRTSDuration_aa; u16 wRTSDuration_bb; u16 wReserved3; u16 wRTSDuration_ba_f0; u16 wRTSDuration_aa_f0; u16 wRTSDuration_ba_f1; u16 wRTSDuration_aa_f1; SRTSDataF sRTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wDuration_a_f0; u16 wDuration_a_f1; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_AF_G_RTS, *PTX_AF_G_RTS; typedef struct tagSTX_AF_G_RTS_MIC { //RsvTime u16 wRTSTxRrvTime_ba; u16 wRTSTxRrvTime_aa; u16 wRTSTxRrvTime_bb; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; SMICHDR sMICHDR; //RTS u8 byRTSSignalField_b; u8 byRTSServiceField_b; u16 wRTSTransmitLength_b; u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_ba; u16 wRTSDuration_aa; u16 wRTSDuration_bb; u16 wReserved3; u16 wRTSDuration_ba_f0; u16 wRTSDuration_aa_f0; u16 wRTSDuration_ba_f1; u16 wRTSDuration_aa_f1; SRTSDataF sRTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wDuration_a_f0; u16 wDuration_a_f1; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_AF_G_RTS_MIC, *PTX_AF_G_RTS_MIC; typedef struct tagSTX_AF_G_CTS { //RsvTime u16 wCTSTxRrvTime_ba; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; //CTS u8 byCTSSignalField_b; u8 byCTSServiceField_b; u16 wCTSTransmitLength_b; u16 wCTSDuration_ba; u16 wReserved3; u16 wCTSDuration_ba_f0; u16 wCTSDuration_ba_f1; SCTSDataF sCTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wDuration_a_f0; u16 wDuration_a_f1; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_AF_G_CTS, *PTX_AF_G_CTS; typedef struct tagSTX_AF_G_CTS_MIC { //RsvTime u16 wCTSTxRrvTime_ba; u16 wReserved2; u16 wTxRrvTime_b; u16 wTxRrvTime_a; SMICHDR sMICHDR; //CTS u8 byCTSSignalField_b; u8 byCTSServiceField_b; u16 wCTSTransmitLength_b; u16 wCTSDuration_ba; u16 wReserved3; u16 wCTSDuration_ba_f0; u16 wCTSDuration_ba_f1; SCTSDataF sCTS; //Data u8 bySignalField_b; u8 byServiceField_b; u16 wTransmitLength_b; u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_b; u16 wDuration_a; u16 wDuration_a_f0; u16 wDuration_a_f1; u16 wTimeStampOff_b; u16 wTimeStampOff_a; } TX_AF_G_CTS_MIC, *PTX_AF_G_CTS_MIC; typedef struct tagSTX_AF_A_RTS { //RsvTime u16 wRTSTxRrvTime_a; u16 wTxRrvTime_a; //RTS u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_a; u16 wReserved2; u16 wRTSDuration_a_f0; u16 wRTSDuration_a_f1; SRTSDataF sRTS; //Data u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_a; u16 wTimeStampOff_a; u16 wDuration_a_f0; u16 wDuration_a_f1; } TX_AF_A_RTS, *PTX_AF_A_RTS; typedef struct tagSTX_AF_A_RTS_MIC { //RsvTime u16 wRTSTxRrvTime_a; u16 wTxRrvTime_a; SMICHDR sMICHDR; //RTS u8 byRTSSignalField_a; u8 byRTSServiceField_a; u16 wRTSTransmitLength_a; u16 wRTSDuration_a; u16 wReserved2; u16 wRTSDuration_a_f0; u16 wRTSDuration_a_f1; SRTSDataF sRTS; //Data u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_a; u16 wTimeStampOff_a; u16 wDuration_a_f0; u16 wDuration_a_f1; } TX_AF_A_RTS_MIC, *PTX_AF_A_RTS_MIC; typedef struct tagSTX_AF_A_CTS { //RsvTime u16 wReserved2; u16 wTxRrvTime_a; //Data u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_a; u16 wTimeStampOff_a; u16 wDuration_a_f0; u16 wDuration_a_f1; } TX_AF_A_CTS, *PTX_AF_A_CTS; typedef struct tagSTX_AF_A_CTS_MIC { //RsvTime u16 wReserved2; u16 wTxRrvTime_a; SMICHDR sMICHDR; //Data u8 bySignalField_a; u8 byServiceField_a; u16 wTransmitLength_a; u16 wDuration_a; u16 wTimeStampOff_a; u16 wDuration_a_f0; u16 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 { u8 byType; u8 byPKTNO; u16 wTxByteCount; u32 adwTxKey[4]; u16 wFIFOCtl; u16 wTimeStamp; u16 wFragCtl; u16 wReserved; // Actual message TX_BUFFER_CONTAINER BufferHeader; } TX_BUFFER, *PTX_BUFFER; // // Remote NDIS message format // typedef struct tagSBEACON_BUFFER { u8 byType; u8 byPKTNO; u16 wTxByteCount; u16 wFIFOCtl; u16 wTimeStamp; // Actual message TX_BUFFER_CONTAINER BufferHeader; } BEACON_BUFFER, *PBEACON_BUFFER; void vDMA0_tx_80211(struct vnt_private *, struct sk_buff *skb); int nsDMA_tx_packet(struct vnt_private *, u32 uDMAIdx, struct sk_buff *skb); CMD_STATUS csMgmt_xmit(struct vnt_private *, struct vnt_tx_mgmt *); CMD_STATUS csBeacon_xmit(struct vnt_private *, struct vnt_tx_mgmt *); int bRelayPacketSend(struct vnt_private *, u8 *pbySkbData, u32 uDataLen, u32 uNodeIndex); #endif /* __RXTX_H__ */