⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zdapi.h

📁 ZD1211LnxDrv_2_3_1_0無線網卡ZD1211
💻 H
字号:
#ifndef _ZDAPI_H_
#define _ZDAPI_H_

#include "zdtypes.h"
#include "zdsorts.h"
//#define HMAC_DEBUG

#ifdef HMAC_DEBUG
#define FPRINT(string)			printk(KERN_DEBUG "%s\n", string)
#define FPRINT_V(string, i)		printk(KERN_DEBUG "%s = %x\n", string, i)
#else
#define FPRINT(string)
#define FPRINT_V(string, i)
#define VerAssert(x)	printk("Maybe Unsupport mode in %s(%d)",__FILE__,__LINE__);
#define LongPrint(x,y)	{int i;for(i=0;i<100*y;i++) printk("%s",x);}
#endif


//#define ZD_DEBUG 	//debug protocol stack

#ifdef ZD_DEBUG
#define ZDEBUG(string)			FPRINT(string)
#define ZDEBUG_V(string, i)		FPRINT_V(string, i)
#else
#define ZDEBUG(string) 			//do {} while (0)
#define ZDEBUG_V(string, i)		//do {} while (0)
#endif

//#define PS_DEBUG		//debug power save function


#ifdef PS_DEBUG
#define PSDEBUG(string)			FPRINT(string)
#define PSDEBUG_V(string, i)	FPRINT_V(string, i)
#else
#define PSDEBUG(string) 		//do {} while (0)
#define PSDEBUG_V(string, i)	//do {} while (0)
#endif


//#define HASH_DEBUG	//debug hash function

#ifdef HASH_DEBUG
#define HSDEBUG(string)			FPRINT(string)
#define HSDEBUG_V(string, i)	FPRINT_V(string, i)
#else
#define HSDEBUG(string) 		//do {} while (0)
#define HSDEBUG_V(string, i)	//do {} while (0)
#endif

//#define RATE_DEBUG	//debug rate adaption function

#ifdef RATE_DEBUG
#define RATEDEBUG(string)		FPRINT(string)
#define RATEDEBUG_V(string, i)	FPRINT_V(string, i)
#else
#define RATEDEBUG(string) 		//do {} while (0)
#define RATEDEBUG_V(string, i)	//do {} while (0)
#endif


//#define DEFRAG_DEBUG	//debug defrag function

#ifdef DEFRAG_DEBUG
#define DFDEBUG(string)			FPRINT(string)
#define DFDEBUG_V(string, i)	FPRINT_V(string, i)
#else
#define DFDEBUG(string) 		//do {} while (0)
#define DFDEBUG_V(string, i)	//do {} while (0)
#endif


#if 0  //host is big endian
    #define zd_cpu_to_le32(x)	(((x & 0xff000000) >> 24) | \
							 ((x & 0x00ff0000) >> 8)  | \
							 ((x & 0x0000ff00) << 8)  | \
							 ((x & 0x000000ff) << 24))
							 
    #define zd_le32_to_cpu(x)	(((x & 0xff000000) >> 24) | \
							 ((x & 0x00ff0000) >> 8)  | \
							 ((x & 0x0000ff00) << 8)  | \
							 ((x & 0x000000ff) << 24))							 
#else   //host is little endian
    #define zd_cpu_to_le32(x)   (x)
    #define zd_le32_to_cpu(x)   (x)
#endif                       

#define CMD_RESET_80211			0x0001	//parm1: zd_80211Obj_t *
#define CMD_ENABLE				0x0002	//parm1: None
#define CMD_DISASOC				0x0003	//parm1: U8 *MacAddress, parm2: reasonCode
#define CMD_DEAUTH				0x0004	//parm1: U8 *MacAddress, parm2: reasonCode
#define CMD_PS_POLL				0x0005	//parm1: U8 *MacHeader
#define CMD_PASSIVE_SCAN		0x0006	//parm1: None
#define CMD_DISASOC_ALL			0x0007	//parm1: U8 *MacAddress, parm2: reasonCode
#define CMD_CONNECT				0x0008	//parm1: None, parm2: BssIndex		
#define CMD_PROBE_REQ			0x0009	//parm1: None, parm2: WithSSID
#define CMD_DIS_CONNECT			0x000A
#define	CMD_FLUSH_QUEUE			0x000B
#define	CMD_ROAMING             0x000C


//Event Notify

#define EVENT_TBCN				0x0010
#define EVENT_DTIM_NOTIFY		0x0011
#define EVENT_TX_COMPLETE		0x0012 //parm1: tx status, parm2: msgId, parm3: aid
#define EVENT_TCHAL_TIMEOUT		0x0013
#define EVENT_SCAN_TIMEOUT		0x0014
#define EVENT_UPDATE_TX_RATE	0x0015 //parm1: rate, parm2: aid
#define EVENT_SW_RESET          0x0016
#define EVENT_BUF_RELEASE       0x0017
#define EVENT_ENABLE_PROTECTION	0x0018
#define EVENT_AUTH_TIMEOUT		0x0019
#define EVENT_ASOC_TIMEOUT		0x001A
#define EVENT_PS_CHANGE			0x001B //parm1: PwrState
#define EVENT_MORE_DATA			0x001C
#define EVENT_ENABLE_BARKER     0x001D
#define EVENT_SHORT_SLOT        0x001E


#define DO_CHAL					0x0001
#define DO_SCAN					0x0002
#define DO_AUTH					0x0003
#define DO_ASOC					0x0004

#define SCAN_TIMEOUT			50   //ms
#define HOUSE_KEEPING_PERIOD	100	 //ms
#define AUTH_TIMEOUT			512  //3000 //ms
#define ASOC_TIMEOUT			512  //2000 //ms


//reason code
#define ZD_UNSPEC_REASON 		1
#define ZD_AUTH_NOT_VALID		2
#define ZD_DEAUTH_LEAVE_BSS		3

#define ZD_INACTIVITY			4
#define ZD_AP_OVERLOAD			5
#define ZD_CLASS2_ERROR			6
#define ZD_CLASS3_ERROR			7
#define ZD_DISAS_LEAVE_CSS		8
#define ZD_ASOC_NOT_AUTH		9
#define ZD_INVALID_IE			13
#define ZD_MIC_FAIL				14
#define ZD_4WAY_SHAKE_TIMEOUT	15
#define ZD_GKEY_UPDATE_TIMEOUT	16
#define ZD_IE_IMCOMPABILITY		17
#define ZD_MC_CIPHER_INVALID	18
#define ZD_UNI_CIPHER_INVALID	19
#define ZD_AKMP_INVALID			20
#define ZD_UNSUP_RSNE_VERSION	21
#define ZD_INVALID_RSNE_CAP		22
#define ZD_8021X_AUTH_FAIL		23


/* association_status_notify() <- status */
#define STA_ASOC_REQ			0x0001
#define STA_REASOC_REQ			0x0002
#define STA_ASSOCIATED			0x0003
#define STA_REASSOCIATED		0x0004
#define STA_DISASSOCIATED		0x0005
#define STA_AUTH_REQ			0x0006
#define STA_DEAUTHED			0x0007

//Tx complete event
#define ZD_TX_CONFIRM			0x0001
#define ZD_RETRY_FAILED			0x0002


//for Dymanic Key
#define DYN_KEY_WEP64			1
#define DYN_KEY_WEP128			2
#define DYN_KEY_TKIP			4
#define DYN_KEY_AES			    5


//Rate Defintion
#define RATE_1M		            0
#define	RATE_2M		            1
#define	RATE_5M		            2
#define	RATE_11M	            3
#define	RATE_16M	            4

#define	RATE_22M	            5
#define	RATE_27M	            6
#define RATE_33M		        7
#define	RATE_38M		        8
#define	RATE_44M		        9
#define	RATE_49M	            10
#define	RATE_55M	            11
#define	RATE_60M	            12

#define	RATE_6M	                0x04
#define	RATE_9M	                0x05
#define	RATE_12M	            0x06
#define	RATE_18M	            0x07
#define	RATE_24M	            0x08
#define	RATE_36M	            0x09
#define	RATE_48M	            0x0a
#define	RATE_54M	            0x0b


#define NO_WEP                  0x0
#define AES                     0x4
#define WEP64                   0x1
#define WEP128                  0x5
#define WEP256                  0x6
#define TKIP                    0x2



#define	NUM_SUPPORTED_RATE	    32

// pfrmDesc->ConfigSet
#define INTRA_BSS_SET			0x01
#define EAPOL_FRAME_SET			0x02
#define FORCE_WEP_SET			0x04

//BssType
#define INDEPENDENT_BSS			0x0
#define INFRASTRUCTURE_BSS		0x1
#define PSEUDO_IBSS				0x3
#define	AP_BSS					0x4

//RxFilter
#define AP_RX_FILTER			0x0400feff
#define STA_RX_FILTER			0x0000ffff

//pSetting->MacMode
#define MIXED_MODE		        0x01
#define PURE_G_MODE		        0x02
#define PURE_B_MODE 	        0x03
#define PURE_A_MODE				0x04



#define CW_SHORT_SLOT		    0x7f043f
#define CW_NORMAL_SLOT		    0xff043f
#define CW_LONG_SLOT            0x7f047f
    


//for Rate Adaption
#define RISE_CONDITION_THRESHOLD	5
#define DOWN_CONDITION_THRESHOLD	3
#define	LINE1				100
#define	LINE2				10
#define	LINE3				5


//for CAM
#define CAM_VAP_START_AID	33	
#define CAM_VAP_END_AID		39	


#define HW_MIC_FINISH		0x55555555
#define CAM_ADDR_NOT_MATCH	40

#define PURE_B_AP       0
#define MIXED_AP        1
#define PURE_G_AP       2
#define PURE_A_AP			3


enum Operation_Mode {
	CAM_IBSS = 0,
	CAM_AP,
	CAM_STA,
	CAM_AP_WDS,
	CAM_AP_CLIENT,
	CAM_AP_VAP
};


typedef struct card_Setting_s
{
	U8		EncryOnOff;		//0: encryption off, 1: encryption on
	U8		OperationMode;	//0: IBSS, 1: AP, 2: STA, 3: WDS, 4: AP Client, 5: Virtual AP
	U8		PreambleType;	//0: long preamble, 1: short preamble
	U8		TxRate;			//0: 1M, 1: 2M, 2: 5.5M, 3: 11M, 4: 16.5M
	U8		FixedRate;		// fixed Tx Rate
	U8		CurrTxRate;		//
	U8		AuthMode;		//0: open system only, 1: shared key only, 2: auto
	U8		HiddenSSID;		//0: disable, 1:enable
	U8		LimitedUser;	//limited client number max to 32 user
	U8		RadioOn;		//0: radio off, 1: radio on
	U8		BlockBSS;		//0: don't block intra-bss traffic, 1: block
	U8		TxPowerLevel;	//0: 17dbm, 1: 14dbm, 2: 11dbm
	U8		BasicRate;		//
	U8		EncryMode;		//0: no wep, 2: wep63, 3:wep128
	U8		EncryKeyId;		//encryption key id
	U8		BcKeyId;		//broadcast key id for dynamic key
	U8		SwCipher;		//
	U8		WepKeyLen;		//WEP key length
	U8		BcKeyLen;		//Broadcast key length
	U8		DynKeyMode;		//Dynamic key mode, 1: WEP64, 2: WEP128, 4:TKIP
	U16		Channel;		//channel number
	U16		FragThreshold;	//fragment threshold, from 256~2432
	U16		RTSThreshold;	//RTS threshold, from 256~2432

	U16		BeaconInterval;	//default 100 ms
	U16		DtimPeriod;		//default 1
	U8		MacAddr[8];
	// ElementID(1), Len(1), SSID
	U8		Info_SSID[36];	//include element ID, element Length, and element content
	// ElementID(1), Len(1), SupportedRates(1-8)
	U8		Info_SupportedRates[NUM_SUPPORTED_RATE];	//include element ID, element Length, and element content
	U8		keyVector[4][32];
	U8		BcKeyVector[16];
	U8		WPAIe[128];
	U8		WPAIeLen;
	U8		WPASupport;
	U8		Rate275;
	U8		WpaBcKeyLen;
	U8		BssType;
	U16		ATIMWindow;

	//added for G
	U8		Ext_SupportedRates[NUM_SUPPORTED_RATE];
	U8		MacMode;
	U8		ShortSlotTime;
	U8		BarkerPreamble;
	// for UART support
	//U8		UartEnable;
	//U8		BaudRate;

	U8		LastSentTxRate;
	U8		ap_scan;	
#ifdef OFDM
	U8		HighestTxRate;
#endif

} card_Setting_t;


#define ZD_MAX_FRAG_NUM		8

typedef struct fragInfo_s{
	U8	*macHdr[ZD_MAX_FRAG_NUM];
	U8	*macBody[ZD_MAX_FRAG_NUM];
	U32	bodyLen[ZD_MAX_FRAG_NUM];
	U32	nextBodyLen[ZD_MAX_FRAG_NUM];
	U8	hdrLen;
	U8	totalFrag;
	U8	bIntraBss;
	U8	msgID;
	U8	rate;
	U8	preamble;
	U8	encryType;
	U8	burst;
	U16 	vapId;
	U16 	aid;
	U8 	CalSwMic[MIC_LNG+1];
	//U8	keyInstalled;
	//U8	bWaitingMIC;
	//U8	bSwCalcMIC;
	//U32	HwMicPhys;


	void *buf;	

} fragInfo_t;


typedef struct rxInfo_s{
	U8	rate;
	U8	bDataFrm;
	U8	SaIndex;
	U8	signalStrength;
    U8	signalQuality;
   	U8	bSwCheckMIC;
} rxInfo_t;	


typedef struct bss_info_s {
	U8	bssid[6];
	U16	beaconInterval;
	U16	cap;
	U16	atimWindow;
	U8	ssid[36];
	U8	supRates[NUM_SUPPORTED_RATE];
	U8	extRates[NUM_SUPPORTED_RATE];
	U8	WPAIe[128];
	U8	RSNIe[128];
	U8	channel;
	U8	signalStrength;
	U8 	signalQuality;
	U8	apMode;
} bss_info_t;


//for pdot11Obj->QueueFlag 
#define TX_QUEUE_SET				0x01
#define MGT_QUEUE_SET				0x02
#define	AWAKE_QUEUE_SET				0x04


//for mRequestFlag
#define CONNECT_TOUT_SET			0x0001
#define DIS_CONNECT_SET				0x0002
#define BSS_CONNECT_SET             0x0004
#define CHANNEL_SCAN_SET            0x0008
#define PS_CHANGE_SET				0x0010
#define PS_POLL_SET					0x0020
#define IBSS_CONNECT_SET			0x0040
#define ROAMING_SET                 0x0080


//for pdot11Obj->ConfigFlag 
#define ENABLE_PROTECTION_SET 		0x0001
#define BARKER_PREAMBLE_SET 		0x0002
#define SHORT_SLOT_TIME_SET         0x0004
#define NON_ERP_PRESENT_SET         0x0008
#define PASSIVE_CHANNEL_SCAN_SET	0x0010
#define ACTIVE_CHANNEL_SCAN_SET		0x0020
#define IBSS_CHANNEL_SCAN_SET		0x0040
#define SCAN_AND_CONNECT_SET        0x0080
#define JUST_CHANNEL_SCAN           0x1000

// Feature Bit Map
#define	FBM_ANTTENA_DIVERSITY		0x00000001
#define	FBM_802_11D					0x00000002
#define	FBM_27_5_MBPS				0x00000004
#define	FBM_SINGLE_LED				0x00000008

// Define debug command
#define DBG_CMD_BEACON				0x0001

//driver to provide callback functions for 802.11 protocol stack
typedef	struct zd_80211Obj_s
{
	void		*reg;			//Input
	U8		QueueFlag;		//Output
	U16		ConfigFlag; 		//Output
	U8		BasicRate;
	U8		bDeviceInSleep;
	U8		BssType;
	U8		bOverWritePhyRegFromE2P;
	U8		bIsNormalSize;
	U16		BeaconInterval;
	U16		Channel;
	U16		Aid;
	U32		rfMode;
	U32		RegionCode;
	U32		S_bit_cnt;
	U32		AllowedChannel;
	U32		dbg_cmd;
	U8		TxGainSetting;
#if fTX_GAIN_OFDM
	U8      	TxGainSetting2;     
#endif		
	U8     	CR31Flag;
	U8     	CR122Flag;
	U8     	CR203Flag;
	U8	PhyTest;
	U8	IsUSB2_0;
	U8      bContinueTx;
	U8      bChScanning;
	U16    	IntValue[14];
	U8      CurrSsid[34];
#ifdef ZD1211B
	U8		LengthDiff;
#endif
	BOOLEAN MIC_CNT;

	void	(* ReleaseBuffer)(void *buf);							// release rx buffer
	void	(* StartTimer)(U32 timeout, U32 event);					// start a chanllege timer (shared key authentication)
	void	(* StopTimer)(U32 TimerId);								// stop the challenge timer
	void	(* RxInd)(U8 *pData, U32 length, void *buf);			// rx indication
	void	(* TxCompleted)(void);									// tx completed
	BOOLEAN	(* SetupNextSend)(fragInfo_t *pFragInfo);				// send to HMAC
	void	(* SetReg)(void *reg, U32 offset, U32 value);			// set HMAC register
	U32	(* GetReg)(void *reg, U32 offset);						// get HMAC register
	U16 	(* StatusNotify)(U16 status, U8 *StaAddr);				// association notify for bridge management
	void 	(* ExitCS)(U32 flags);								// enable interrupt
	U32	(* EnterCS)(void);								// disable interrupt
	U32 	(* Vir2PhyAddr)(U32 virtAddr);							// translate virtual address to physical address
	BOOLEAN	(* CheckTCBAvail)(U8 NumOfFrag);						// check TCB available
	void	(* DelayUs)(U16 ustime);								// delay function
	void *	(* AllocBuffer)(U16 dataSize, U8 **pData);				// allocate wireless forwarding buffer

	int	(* Rand)(U32 seed);
	void    (* AcquireDoNotSleep)(void);
	void    (* ReleaseDoNotSleep)(void);

	// wpa support
	void	(* MicFailure)(unsigned char *addr);
	int	(* AssocRequest)(U8 *addr, U8* data, U16 size);
	int 	(* WpaIe)(U8 *buffer, int length);
}zd_80211Obj_t;


//802.11 export functions for driver use
extern void zd_SigProcess(void);									// protocol statck entry point
extern BOOLEAN zd_SendPkt(U8 *pEthHdr, U8 *pBody, U32 bodyLen, void *buf, U8 bEapol, void *pHash);	// tx request
extern void zd_ReceivePkt(U8 *pHdr, U32 hdrLen, U8 *pBody, U32 bodyLen, void *buf, U8 *pEthHdr, rxInfo_t *pRxInfo); // rx indication
extern BOOLEAN zd_CmdProcess(U16 CmdId, void *parm1, U32 parm2);	//command process		 
extern void zd_EventNotify(U16 EventId, U32 parm1, U32 parm2, U32 parm3);		//event notify
extern void zd_UpdateCardSetting(card_Setting_t *pSetting);
extern BOOLEAN zd_CleanupTxQ(void);
extern BOOLEAN zd_CleanupAwakeQ(void);
extern int zd_SetKeyInfo(U8 *addr, U8 encryMode, U8 keyLength, U8 KeyId, U8 *pKeyContent);
extern void zd_PerSecTimer(void);	
extern BOOLEAN zd_CheckIvSeq(U8 aid, U16 iv16, U32 iv32);
extern void zd_RateMoniter(void);
extern BOOLEAN zd_QueryStaTable(U8 *sta, void **ppHash);
extern void zd_ConnectMon(void);
extern U8 zd_GetBssList(bss_info_t *pBssList);
extern U16 zd_AidLookUp(U8 *addr);
extern void zd_makeRateInfoMAP(U8 *pRates, U16 *basicRateMap, U16 *supRateMap);
extern void zd_UpdateIbssInfo(U8 *addr, U8 maxRate, U8 preamble, U8 erpSta);
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -