#ifndef __WINBOND_MDS_H
#define __WINBOND_MDS_H

#include <linux/timer.h>
#include <linux/types.h>
#include <asm/atomic.h>

#include "localpara.h"
#include "mac_structures.h"
#include "scan_s.h"

/* Preamble_Type, see <SFS-802.11G-MIB-203> */
enum {
	WLAN_PREAMBLE_TYPE_SHORT,
	WLAN_PREAMBLE_TYPE_LONG,
};

////////////////////////////////////////////////////////////////////////////////////////////////////////
#define MAX_USB_TX_DESCRIPTOR		15		// IS89C35 ability
#define MAX_USB_TX_BUFFER_NUMBER	4		// Virtual pre-buffer number of MAX_USB_TX_BUFFER
#define MAX_USB_TX_BUFFER			4096	// IS89C35 ability 4n alignment is required for hardware

#define AUTH_REQUEST_PAIRWISE_ERROR			0		// _F flag setting
#define AUTH_REQUEST_GROUP_ERROR			1		// _F flag setting

#define CURRENT_FRAGMENT_THRESHOLD		(adapter->Mds.TxFragmentThreshold & ~0x1)
#define CURRENT_PREAMBLE_MODE			psLOCAL->boShortPreamble?WLAN_PREAMBLE_TYPE_SHORT:WLAN_PREAMBLE_TYPE_LONG
#define CURRENT_TX_RATE_FOR_MNG			adapter->sLocalPara.CurrentTxRateForMng
#define CURRENT_PROTECT_MECHANISM		psLOCAL->boProtectMechanism
#define CURRENT_RTS_THRESHOLD			adapter->Mds.TxRTSThreshold

#define MIB_GS_XMIT_OK_INC				adapter->sLocalPara.GS_XMIT_OK++
#define MIB_GS_RCV_OK_INC				adapter->sLocalPara.GS_RCV_OK++
#define MIB_GS_XMIT_ERROR_INC			adapter->sLocalPara.GS_XMIT_ERROR

//---------- TX -----------------------------------
#define ETHERNET_TX_DESCRIPTORS         MAX_USB_TX_BUFFER_NUMBER

//---------- RX ------------------------------------
#define ETHERNET_RX_DESCRIPTORS			8	//It's not necessary to allocate more than 2 in sync indicate

//================================================================
// Configration default value
//================================================================
#define DEFAULT_MULTICASTLISTMAX		32 		// standard
#define DEFAULT_TX_BURSTLENGTH			3 		// 32 Longwords
#define DEFAULT_RX_BURSTLENGTH			3 		// 32 Longwords
#define DEFAULT_TX_THRESHOLD			0 		// Full Packet
#define DEFAULT_RX_THRESHOLD			0 		// Full Packet
#define DEFAULT_MAXTXRATE				6 		// 11 Mbps (Long)
#define DEFAULT_CHANNEL					3 		// Chennel 3
#define DEFAULT_RTSThreshold			2347 	// Disable RTS
//#define DEFAULT_PME						1 		// Enable
#define DEFAULT_PME						0 		// Disable
#define DEFAULT_SIFSTIME				10
#define DEFAULT_ACKTIME_1ML             304     // 148+44+112 911220 by LCC
#define DEFAULT_ACKTIME_2ML             248     // 148+44+56 911220 by LCC
#define DEFAULT_FRAGMENT_THRESHOLD      2346 	// No fragment
#define DEFAULT_PREAMBLE_LENGTH			72
#define DEFAULT_PLCPHEADERTIME_LENGTH	24

/*------------------------------------------------------------------------
 0.96 sec since time unit of the R03 for the current, W89C32 is about 60ns
 instead of 960 ns. This shall be fixed in the future W89C32
 -------------------------------------------------------------------------*/
#define DEFAULT_MAX_RECEIVE_TIME        16440000

#define RX_BUF_SIZE						2352        // 600 	// For 301 must be multiple of 8
#define MAX_RX_DESCRIPTORS              18         // Rx Layer 2


// For brand-new rx system
#define MDS_ID_IGNORE				ETHERNET_RX_DESCRIPTORS

// For Tx Packet status classify
#define PACKET_FREE_TO_USE						0
#define PACKET_COME_FROM_NDIS					0x08
#define PACKET_COME_FROM_MLME					0x80
#define PACKET_SEND_COMPLETE					0xff

struct wb35_mds {
	// For Tx usage
	u8	TxOwner[ ((MAX_USB_TX_BUFFER_NUMBER + 3) & ~0x03) ];
	u8	*pTxBuffer;
	u16	TxBufferSize[ ((MAX_USB_TX_BUFFER_NUMBER + 1) & ~0x01) ];
	u8	TxDesFrom[ ((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03) ];//931130.4.u // 1: MLME 2: NDIS control 3: NDIS data
	u8	TxCountInBuffer[ ((MAX_USB_TX_DESCRIPTOR + 3) & ~0x03) ]; // 20060928

	u8	TxFillIndex;//the next index of TxBuffer can be used
	u8	TxDesIndex;//The next index of TxDes can be used
	u8	ScanTxPause;	//data Tx pause because the scanning is progressing, but probe request Tx won't.
	u8	TxPause;//For pause the Mds_Tx modult

	atomic_t	TxThreadCount;//For thread counting 931130.4.v
//950301 delete due to HW
//	atomic_t	TxConcurrentCount;//931130.4.w

	u16	TxResult[ ((MAX_USB_TX_DESCRIPTOR + 1) & ~0x01) ];//Collect the sending result of Mpdu

	u8	MicRedundant[8]; // For tmp use
	u8	*MicWriteAddress[2]; //The start address to fill the Mic, use 2 point due to Mic maybe fragment

	u16	MicWriteSize[2]; //931130.4.x

	u16	MicAdd; // If want to add the Mic, this variable equal to 8
	u16	MicWriteIndex;//The number of MicWriteAddress 931130.4.y

	u8	TxRate[ ((MAX_USB_TX_DESCRIPTOR+1)&~0x01) ][2]; // [0] current tx rate, [1] fall back rate
	u8	TxInfo[ ((MAX_USB_TX_DESCRIPTOR+1)&~0x01) ];	//Store information for callback function

	//WKCHEN added for scanning mechanism
	u8	TxToggle;		//It is TRUE if there are tx activities in some time interval
	u8	Reserved_[3];

	//---------- for Tx Parameter
	u16	TxFragmentThreshold;    	// For frame body only
	u16	TxRTSThreshold;

	u32		MaxReceiveTime;//911220.3 Add

	// depend on OS,
	u32					MulticastListNo;
	u32					PacketFilter; // Setting by NDIS, the current packet filter in use.
	u8					MulticastAddressesArray[DEFAULT_MULTICASTLISTMAX][MAC_ADDR_LENGTH];

	//COUNTERMEASURE
	u8		bMICfailCount;
	u8		boCounterMeasureBlock;
	u8		reserved_4[2];

	u32	TxTsc; // 20060214
	u32	TxTsc_2; // 20060214

};

//
// Reveive Layer 1 Format.
//----------------------------
typedef struct _RXLAYER1
{
    u16  SequenceNumber;     // The sequence number of the last received packet.
	u16	BufferTotalSize;

	u32	InUsed;
    u32   DecryptionMethod;   // The desired defragment number of the next incoming packet.

	u8	DeFragmentNumber;
	u8	FrameType;
    u8	TypeEncapsulated;
	u8	BufferNumber;

	u32	FirstFrameArrivedTime;

	u8		LastFrameType; // 20061004 for fix intel 3945 's bug
	u8		RESERVED[3];  //@@ anson

	/////////////////////////////////////////////////////////////////////////////////////////////
	// For brand-new Rx system
	u8	ReservedBuffer[ 2400 ];//If Buffer ID is reserved one, it must copy the data into this area
	u8	*ReservedBufferPoint;// Point to the next availabe address of reserved buffer

}RXLAYER1, * PRXLAYER1;

#endif
