blob: f90de42d7abef545837ac90e0ca44998ee9bde1e [file] [log] [blame]
/*
* 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);
NTSTATUS 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__ */