#ifndef __WINBOND_LOCALPARA_H
#define __WINBOND_LOCALPARA_H

/*
 * =============================================================
 * LocalPara.h -
 * =============================================================
 */

#include "mac_structures.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	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 */

/* 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_ALL_SUPPORTED_RATES_BITMAP	0x130c1a66
/* 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_OFDM_SUPPORTED_RATES_BITMAP	0x130c1240
#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 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

/* Due to[E id][Length][OUI][Data] may be 257 bytes */
#define MAX_IE_APPEND_SIZE			(256 + 4)

struct chan_info {
	u8	band;
	u8	ChanNo;
};

struct radio_off {
	u8	boHwRadioOff;
	u8	boSwRadioOff;
};

struct wb_local_para {
	/* read from EPROM, manufacture set for each NetCard */
	u8	PermanentAddress[MAC_ADDR_LENGTH + 2];
	/* the driver will use this one actually. */
	u8	ThisMacAddress[MAC_ADDR_LENGTH + 2];
	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 on, 1 indicates off */
	u8	ATIMmode;
	u8	ExcludeUnencrypted;
	/* Unit time count for the decision to enter PS mode */
	u16	CheckCountForPS;
	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().
					 */

	struct	radio_off RadioOffStatus;
	u8	Reserved0[2];
	u8	boMsRadioOff;		/* Ndis demands to be true when set
					 * Disassoc. OID and be false when
					 * set SSID OID.
					 */
	u8	bAntennaNo;		/* which antenna */
	u8	bConnectFlag;		/* the connect status flag for
					 * roaming task
					 */

	u8	RoamStatus;
	u8	reserved7[3];

	struct	chan_info CurrentChan;	/* Current channel no. and channel band.
					 * It may be changed by scanning.
					 */
	u8	boHandover;		/* Roaming, Handover 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;	/* Same here */
	u8	boShortSlotTime;	/* Same here */
	u8	reserved_3;

	u32	RSN_IE_Bitmap;
	u32	RSN_OUI_Type;

	/* 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;

	/* Store the valid descriptor indexes obtained from scannings */
	u8	BssListIndex[(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
	 */
	u8	JoinerInIbss[(MAX_BSS_DESCRIPT_ELEMENT + 3) & ~0x03];

	/* 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;

	struct	chan_info 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.
					 */

	u8	reserved_6[2];		/* two variables are for wep
					 * key error detection
					 */
	u32	bWepKeyError;
	u32	bToSelfPacketReceived;
	u32	WepKeyDetectTimerCount;

	u16	SignalLostTh;
	u16	SignalRoamTh;

	u8		IE_Append_data[MAX_IE_APPEND_SIZE];
	u16		IE_Append_size;
	u16		reserved_7;
};

#endif
