#ifndef __WINBOND_MLME_H
#define __WINBOND_MLME_H

#include <linux/types.h>
#include <linux/spinlock.h>

#include "mac_structures.h"
#include "mds_s.h"

/*
 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 *	Mlme.h
 *		Define the related definitions of MLME module
 *
 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 */

#define AUTH_REJECT_REASON_CHALLENGE_FAIL	1

/* the state of MLME module */
#define INACTIVE		0x0
#define IDLE_SCAN		0x1

/* the state of MLME/ESS module */
#define STATE_1			0x2
#define AUTH_REQ		0x3
#define AUTH_WEP		0x4
#define STATE_2			0x5
#define ASSOC_REQ		0x6
#define STATE_3			0x7

/* the state of MLME/IBSS module */
#define IBSS_JOIN_SYNC		0x8
#define IBSS_AUTH_REQ		0x9
#define IBSS_AUTH_CHANLGE	0xa
#define IBSS_AUTH_WEP		0xb
#define IBSS_AUTH_IND		0xc
#define IBSS_STATE_2		0xd



/*
 * =========================================
 * depend on D5C(MAC timing control 03 register):
 * MaxTxMSDULifeTime default 0x80000us
 */
#define AUTH_FAIL_TIMEOUT	550
#define ASSOC_FAIL_TIMEOUT	550
#define REASSOC_FAIL_TIMEOUT	550

/* MLME task global CONSTANTS, STRUCTURE, variables */

/* =========================================
 * enum_ResultCode --
 * Result code returned from MLME to SME.
 * =========================================
 */
#define MLME_SUCCESS			0	/* follow spec. */
#define	INVALID_PARAMETERS		1	/* Not following spec. */
#define	NOT_SUPPPORTED			2
#define	TIMEOUT				3
#define	TOO_MANY_SIMULTANEOUS_REQUESTS	4
#define REFUSED				5
#define	BSS_ALREADY_STARTED_OR_JOINED	6
#define	TRANSMIT_FRAME_FAIL		7
#define	NO_BSS_FOUND			8
#define RETRY				9
#define GIVE_UP				10


#define OPEN_AUTH			0
#define SHARE_AUTH			1
#define ANY_AUTH			2
#define WPA_AUTH			3	/* for WPA */
#define WPAPSK_AUTH			4
#define WPANONE_AUTH			5
#ifdef _WPA2_
#define WPA2_AUTH			6	/* for WPA2 */
#define WPA2PSK_AUTH			7
#endif /* end def _WPA2_ */

/*
 * =========================================
 * define the msg type of MLME module
 * =========================================
 */

/* from SME */
#define MLMEMSG_AUTH_REQ		0x0b
#define MLMEMSG_DEAUTH_REQ		0x0c
#define MLMEMSG_ASSOC_REQ		0x0d
#define MLMEMSG_REASSOC_REQ		0x0e
#define MLMEMSG_DISASSOC_REQ		0x0f
#define MLMEMSG_START_IBSS_REQ		0x10
#define MLMEMSG_IBSS_NET_CFM		0x11

/* from RX */
#define MLMEMSG_RCV_MLMEFRAME		0x20
#define MLMEMSG_RCV_ASSOCRSP		0x22
#define MLMEMSG_RCV_REASSOCRSP		0x24
#define MLMEMSG_RCV_DISASSOC		0x2b
#define MLMEMSG_RCV_AUTH		0x2c
#define MLMEMSG_RCV_DEAUTH		0x2d


/* from TX callback */
#define MLMEMSG_TX_CALLBACK		0x40
#define MLMEMSG_ASSOCREQ_CALLBACK	0x41
#define MLMEMSG_REASSOCREQ_CALLBACK	0x43
#define MLMEMSG_DISASSOC_CALLBACK	0x4a
#define MLMEMSG_AUTH_CALLBACK		0x4c
#define MLMEMSG_DEAUTH_CALLBACK		0x4d

#define MLMEMSG_TIMEOUT			0x50

/*
 * ==============================================
 * Global data structures
 * ==============================================
 */
#define MAX_NUM_TX_MMPDU		2
#define MAX_MMPDU_SIZE			1512
#define MAX_NUM_RX_MMPDU		6


/*
 * ==============================================
 * MACRO
 * ==============================================
 */
#define boMLME_InactiveState(_AA_)	(_AA_->wState == INACTIVE)
#define boMLME_IdleScanState(_BB_)	(_BB_->wState == IDLE_SCAN)
#define boMLME_FoundSTAinfo(_CC_)	(_CC_->wState >= IDLE_SCAN)

typedef struct _MLME_FRAME {
	s8		*pMMPDU;
	u16		len;
	u8		DataType;
	u8		IsInUsed;

	spinlock_t	MLMESpinLock;

	u8		TxMMPDU[MAX_NUM_TX_MMPDU][MAX_MMPDU_SIZE];
	u8		TxMMPDUInUse[(MAX_NUM_TX_MMPDU + 3) & ~0x03];

	u16		wNumTxMMPDU;
	u16		wNumTxMMPDUDiscarded;

	u8		RxMMPDU[MAX_NUM_RX_MMPDU][MAX_MMPDU_SIZE];
	u8		SaveRxBufSlotInUse[(MAX_NUM_RX_MMPDU + 3) & ~0x03];

	u16		wNumRxMMPDU;
	u16		wNumRxMMPDUDiscarded;

	u16		wNumRxMMPDUInMLME;	/* Number of the Rx MMPDU */
	u16		reserved_1;		/*  in MLME. */
						/*  excluding the discarded */
} MLME_FRAME, *psMLME_FRAME;

typedef struct _AUTHREQ {

	u8		peerMACaddr[MAC_ADDR_LENGTH];
	u16		wAuthAlgorithm;
} MLME_AUTHREQ_PARA, *psMLME_AUTHREQ_PARA;

typedef struct _ASSOCREQ {
	u8		PeerSTAAddr[MAC_ADDR_LENGTH];
	u16		CapabilityInfo;
	u16		ListenInterval;
} __attribute__ ((packed)) MLME_ASSOCREQ_PARA, *psMLME_ASSOCREQ_PARA;

typedef struct _REASSOCREQ {
	u8		NewAPAddr[MAC_ADDR_LENGTH];
	u16		CapabilityInfo;
	u16		ListenInterval;
} __attribute__ ((packed)) MLME_REASSOCREQ_PARA, *psMLME_REASSOCREQ_PARA;

typedef struct _MLMECALLBACK {
	u8		*psFramePtr;
	u8		bResult;
} MLME_TXCALLBACK, *psMLME_TXCALLBACK;

typedef struct _RXDATA {
	s32		FrameLength;
	u8		__attribute__ ((packed)) *pbFramePtr;
} __attribute__ ((packed)) RXDATA, *psRXDATA;

#endif
