//=============================================================
// LocalPara.h -
//=============================================================
//Define the local ability

#define LOCAL_DEFAULT_BEACON_PERIOD			100		//ms
#define LOCAL_DEFAULT_ATIM_WINDOW			0
#define LOCAL_DEFAULT_ERP_CAPABILITY		0x0431	//0x0001:	ESS
													//0x0010:	Privacy
													//0x0020:	short preamble
													//0x0400:	short slot time
#define LOCAL_DEFAULT_LISTEN_INTERVAL		5

//#define LOCAL_DEFAULT_24_CHANNEL_NUM		11		// channel 1..11
#define LOCAL_DEFAULT_24_CHANNEL_NUM		13		// channel 1..13
#define LOCAL_DEFAULT_5_CHANNEL_NUM			8		// channel 36..64

#define LOCAL_USA_24_CHANNEL_NUM			11
#define LOCAL_USA_5_CHANNEL_NUM				12
#define LOCAL_EUROPE_24_CHANNEL_NUM			13
#define LOCAL_EUROPE_5_CHANNEL_NUM			19
#define LOCAL_JAPAN_24_CHANNEL_NUM			14
#define LOCAL_JAPAN_5_CHANNEL_NUM			11
#define LOCAL_UNKNOWN_24_CHANNEL_NUM		14
#define LOCAL_UNKNOWN_5_CHANNEL_NUM			34	//not include 165


#define psLOCAL			(&(Adapter->sLocalPara))

#define MODE_802_11_BG			0
#define MODE_802_11_A			1
#define MODE_802_11_ABG			2
#define MODE_802_11_BG_IBSS		3
#define MODE_802_11_B			4
#define MODE_AUTO				255

#define BAND_TYPE_DSSS			0
#define BAND_TYPE_OFDM_24		1
#define BAND_TYPE_OFDM_5		2

//refer Bitmap2RateValue table
#define LOCAL_ALL_SUPPORTED_RATES_BITMAP		0x130c1a66	//the bitmap value of all the H/W supported rates
															//1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54
#define LOCAL_OFDM_SUPPORTED_RATES_BITMAP		0x130c1240	//the bitmap value of all the H/W supported rates
															//except to non-OFDM rates
															//6, 9, 12, 18, 24, 36, 48, 54

#define LOCAL_11B_SUPPORTED_RATE_BITMAP			0x826
#define LOCAL_11B_BASIC_RATE_BITMAP				0x826
#define LOCAL_11B_OPERATION_RATE_BITMAP			0x826
#define LOCAL_11G_BASIC_RATE_BITMAP				0x826		//1, 2, 5.5, 11
#define LOCAL_11G_OPERATION_RATE_BITMAP			0x130c1240	//6, 9, 12, 18, 24, 36, 48, 54
#define LOCAL_11A_BASIC_RATE_BITMAP				0x01001040	//6, 12, 24
#define LOCAL_11A_OPERATION_RATE_BITMAP			0x120c0200	//9, 18, 36, 48, 54



#define PWR_ACTIVE		0
#define PWR_SAVE		1
#define PWR_TX_IDLE_CYCLE			6

//bPreambleMode and bSlotTimeMode
#define AUTO_MODE			0
#define LONG_MODE			1

//Region definition
#define REGION_AUTO			0xff
#define REGION_UNKNOWN		0
#define REGION_EUROPE		1	//ETSI
#define REGION_JAPAN		2	//MKK
#define REGION_USA			3	//FCC
#define	REGION_FRANCE		4	//FRANCE
#define REGION_SPAIN		5	//SPAIN
#define REGION_ISRAEL		6	//ISRAEL
//#define REGION_CANADA		7	//IC

#define MAX_BSS_DESCRIPT_ELEMENT		32
#define MAX_PMKID_CandidateList         16

//High byte : Event number,  low byte : reason
//Event definition
//-- SME/MLME event
#define EVENT_RCV_DEAUTH					0x0100
#define EVENT_JOIN_FAIL						0x0200
#define EVENT_AUTH_FAIL						0x0300
#define EVENT_ASSOC_FAIL					0x0400
#define EVENT_LOST_SIGNAL					0x0500
#define EVENT_BSS_DESCRIPT_LACK				0x0600
#define EVENT_COUNTERMEASURE				0x0700
#define EVENT_JOIN_FILTER					0x0800
//-- TX/RX event
#define EVENT_RX_BUFF_UNAVAILABLE			0x4100

#define EVENT_CONNECT						0x8100
#define EVENT_DISCONNECT					0x8200
#define EVENT_SCAN_REQ						0x8300

//Reason of Event
#define EVENT_REASON_FILTER_BASIC_RATE		0x0001
#define EVENT_REASON_FILTER_PRIVACY			0x0002
#define EVENT_REASON_FILTER_AUTH_MODE		0x0003
#define EVENT_REASON_TIMEOUT				0x00ff

// 20061108 WPS IE buffer
#define MAX_IE_APPEND_SIZE					256 + 4 // Due to [E id][Length][OUI][Data] may 257 bytes

typedef struct _EVENTLOG
{
	u16		Count;			//Total count from start
	u16		index;			//Buffer index, 0 ~ 63
	u32		EventValue[64];	//BYTE 3~2 : count, BYTE 1 : Event, BYTE 0 : reason
} Event_Log, *pEvent_Log;

typedef struct _ChanInfo
{
	u8		band;
	u8		ChanNo;
} ChanInfo, *pChanInfo;

typedef struct _CHAN_LIST
{
	u16				Count;
	ChanInfo		Channel[50]; // 100B
} CHAN_LIST, *psCHAN_LIST;

typedef struct _RadioOff
{
	u8			boHwRadioOff;
	u8			boSwRadioOff;
} RadioOff, *psRadioOff;

//===========================================================================
typedef struct LOCAL_PARA
{
	u8			PermanentAddress[ MAC_ADDR_LENGTH + 2 ]; 	// read from EPROM, manufacture set for each NetCard
    u8    		ThisMacAddress[ MAC_ADDR_LENGTH + 2 ];			// the driver will use actually.

	u32			MTUsize;				// Ind to Uplayer, Max transmission unit size

	u8			region_INF;	//region setting from INF
	u8			region;		//real region setting of the device
	u8			Reserved_1[2];

    //// power-save variables
    u8  		  	iPowerSaveMode;     // 0 indicates it is on, 1 indicates it is off
	u8			ShutDowned;
	u8			ATIMmode;
	u8			ExcludeUnencrypted;

	u16			CheckCountForPS;	//Unit ime count for the decision to enter PS mode
	u8			boHasTxActivity;	//tx activity has occurred
	u8			boMacPsValid;		//Power save mode obtained from H/W is valid or not

	//// Rate
	u8			TxRateMode;				// Initial, input from Registry, may be updated by GUI
											//Tx Rate Mode: auto(DTO on), max, 1M, 2M, ..
	u8			CurrentTxRate;			// The current Tx rate
	u8			CurrentTxRateForMng;	// The current Tx rate for management frames
										// It will be decided before connection succeeds.
	u8			CurrentTxFallbackRate;

	//for Rate handler
	u8			BRateSet[32];			//basic rate set
	u8			SRateSet[32];			//support rate set

	u8			NumOfBRate;
	u8			NumOfSRate;
	u8			NumOfDsssRateInSRate;	//number of DSSS rates in supported rate set
	u8			reserved1;

	u32			dwBasicRateBitmap;		//bit map of basic rates
	u32			dwSupportRateBitmap;	//bit map of all support rates including
										//basic and operational rates

	////For SME/MLME handler
	u16			wOldSTAindex;			// valid when boHandover=TRUE, store old connected STA index
	u16			wConnectedSTAindex;		// Index of peerly connected AP or IBSS in
										// the descriptionset.
    u16			Association_ID;     	// The Association ID in the (Re)Association
            	                    	// Response frame.
    u16			ListenInterval;     	// The listen interval when SME invoking MLME_
            	                    	// (Re)Associate_Request().

	RadioOff		RadioOffStatus;
	u8			Reserved0[2];

	u8			boMsRadioOff;			// Ndis demands to be true when set Disassoc. OID and be false when set SSID OID.
	u8			boAntennaDiversity;		//TRUE/ON or FALSE/OFF
	u8			bAntennaNo;				//which antenna
	u8			bConnectFlag;			//the connect status flag for roaming task

	u8			RoamStatus;
	u8			reserved7[3];

	ChanInfo	CurrentChan;			//Current channel no. and channel band. It may be changed by scanning.
	u8			boHandover;				// Roaming, Hnadover to other AP.
	u8			boCCAbusy;

	u16			CWMax;					// It may not be the real value that H/W used
	u8			CWMin;					// 255: set according to 802.11 spec.
	u8			reserved2;

	//11G:
	u8			bMacOperationMode;		// operation in 802.11b or 802.11g
	u8			bSlotTimeMode;			//AUTO, s32
	u8			bPreambleMode;			//AUTO, s32
	u8			boNonERPpresent;

	u8			boProtectMechanism;	// H/W will take the necessary action based on this variable
	u8			boShortPreamble;	// H/W will take the necessary action based on this variable
	u8			boShortSlotTime;	// H/W will take the necessary action based on this variable
	u8			reserved_3;

	u32       	RSN_IE_Bitmap;		//added by WS
	u32      		RSN_OUI_Type;		//added by WS

	//For the BSSID
	u8			HwBssid[MAC_ADDR_LENGTH + 2];
	u32			HwBssidValid;

	//For scan list
	u8			BssListCount;							//Total count of valid descriptor indexes
	u8			boReceiveUncorrectInfo;	//important settings in beacon/probe resp. have been changed
	u8			NoOfJoinerInIbss;
	u8			reserved_4;

	u8			BssListIndex[ (MAX_BSS_DESCRIPT_ELEMENT+3) & ~0x03 ];	//Store the valid descriptor indexes obtained from scannings
	u8			JoinerInIbss[ (MAX_BSS_DESCRIPT_ELEMENT+3) & ~0x03 ];	//save the BssDescriptor index in this
														//IBSS. The index 0 is local descriptor
														//(psLOCAL->wConnectedSTAindex).
														//If CONNECTED : NoOfJoinerInIbss >=2
														//		else   : NoOfJoinerInIbss <=1

	//// General Statistics, count at Rx_handler or Tx_callback interrupt handler
    u64 	GS_XMIT_OK;				// Good Frames Transmitted
    u64 	GS_RCV_OK;				// Good Frames Received
	u32		GS_RCV_ERROR;			// Frames received with crc error
	u32		GS_XMIT_ERROR;			// Bad Frames Transmitted
	u32		GS_RCV_NO_BUFFER;		// Receive Buffer underrun
	u32		GS_XMIT_ONE_COLLISION;	// one collision
	u32		GS_XMIT_MORE_COLLISIONS;// more collisions

    //================================================================
    // Statistics (no matter whether it had done successfully) -wkchen
    //================================================================
    u32		   	_NumRxMSDU;
    u32	   		_NumTxMSDU;
    u32	   		_dot11WEPExcludedCount;
    u32	   		_dot11WEPUndecryptableCount;
    u32	   		_dot11FrameDuplicateCount;

	ChanInfo	IbssChanSetting;	// 2B. Start IBSS Channel setting by registry or WWU.
	u8		reserved_5[2];		//It may not be used after considering RF type,
									//region and modulation type.

	CHAN_LIST	sSupportChanList;	// 86B. It will be obtained according to RF type and region
	u8		reserved_6[2];		//two variables are for wep key error detection added by ws 02/02/04

    u32	      bWepKeyError;
    u32         bToSelfPacketReceived;
    u32         WepKeyDetectTimerCount;

	Event_Log	EventLog;

	u16		SignalLostTh;
	u16		SignalRoamTh;

	// 20061108 WPS IE Append
	u8		IE_Append_data[MAX_IE_APPEND_SIZE];
	u16		IE_Append_size;
	u16		reserved_7;

} WB_LOCALDESCRIPT, *PWB_LOCALDESCRIPT;


