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

📄 wlan_ccx.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 4 页
字号:
/** @file wlan_ccx.c *  @brief This file contains data structures and functions *  for CCX standard * *  Copyright (c) Marvell Semiconductor, Inc., 2003-2005  *//*********************************************************Change log:	09/27/05: add comments for Doxygen*********************************************************/#ifdef CCX#include "precomp.h"#include "wlan_ccx.h"// For WinCE +++#define u8 UCHAR#define s8 char#define u16 USHORT#define WLAN_STATUS_SUCCESS			(0)#define cpu_to_le16(x) x// For WinCE ---#pragma pack(1)// wlan_types.h +++/**  Local Power Capability */typedef struct _MrvlIEtypes_PowerCapability_t {	MrvlIEtypesHeader_t	Header;	s8 	MinPower;	s8	MaxPower;} MrvlIEtypes_PowerCapability_t;// wlan_types.h ---/**  OUI Types encoded in the CCX Vendor specific IE.  */typedef enum{    CCX_OUI_TYPE_VERSION   = 0x03,    CCX_OUI_TYPE_QOS_PARAM = 0x04,} CCX_OUI_Type_t;/**  CCX IE types that are checked for in BSS descriptions returned in scans. */typedef enum{    CCX_IE_VERSION = VENDOR_SPECIFIC_221,    CCX_IE_CELL_POWER_LIMIT = 0x96,    CCX_IE_AIRONET = 133,} CCX_IE_Id_t;/**  Generic IE Structure containing an OUI and oui type used to encapsulate  *    CCX Proprietary elements.  */typedef struct _CCX_IE_OUT_Hdr{    u8 elemId;    u8 len;    u8 oui[3];    u8 ouiType;} CCX_IE_OUI_Hdr_t;    /**  CCX Version IE *    Received in beacons/probe responses and sent out in (Re)Assocation *    requests as a vendor specific 221 element with the OUI set to 0x004096  *    and the ouiType set to 0x03. *    One octet specifying the major CCX Version supported. */    typedef struct{    CCX_IE_OUI_Hdr_t ouiHdr;    u8 version;} CCX_IE_Version_t;typedef struct{    CCX_IE_OUI_Hdr_t ouiHdr;    u8 cwMin[2];    u8 cwMax[2];    u8 flags[2];    u8 apName[16];    u8 clients;    u8 value[3];} CCX_IE_AIRONET_t;/**  CCX Cell Power Limit IE *    Received in beacon and probe responses (scans) with a Element ID of 0x96 *    with the OUI set to 0x004096 and the ouiType set to 0x00. *    One octet containing the maximum transmit power for the STA */typedef struct{    CCX_IE_OUI_Hdr_t ouiHdr;    u8 maxPower;    u8 reserved;} CCX_IE_Cell_Power_Limit_t;///crlo:fastroam ++///This is the header our firmware is using to generate our own packet which is not from TCP/IP stacktypedef struct _MRVPKT_DESC {	UCHAR dstAddr[MRVDRV_ETH_ADDR_LEN];	UCHAR srcAddr[MRVDRV_ETH_ADDR_LEN];	UCHAR protocolLen[2];			// protocol Length set to 0 can set SNAP} MRVPKTDESC, *PMRVPKTDESC;///	/* almost a macro, inline function instead *//* convert big endian bytes pointed to by pSrc to native UINT16 */_inline static OS_UINT16 GetBigEndian(OS_UINT8 *pSrc)               {                                   OS_UINT16 dest;    dest = pSrc[0];                 dest = (dest << 8) + pSrc[1];     return dest;}/* ** The following struct is used by STA to send previous AP info to new AP with** a single member in the imList field as well as messages from the AP with up ** to 30 AP in teh imList field.*/typedef struct _CCX_IAPP_HEADER_           	/// header of IAPP message{	OS_UINT16	Length;						/// Big endian length, including this field	OS_UINT8	Type;	OS_UINT8 	Func_SubType;	NDIS_802_11_MAC_ADDRESS     imDest;     /// unicast destination	NDIS_802_11_MAC_ADDRESS     imSrc;      /// source address    /// [list follows here]} CCX_IAPP_HEADER,*PCCX_IAPP_HEADER;typedef struct _CCX_DDPINFO_CONTENT_{    OS_UINT16     	imTag;   				/// 0x009b    OS_UINT16     	imIELength;        		/// Big endian length, including this field    OS_UINT8        imIEOUI[4];				/// 00 40 96 00    NDIS_802_11_MAC_ADDRESS imPreAPMac;		/// mac Addr of the previous AP     OS_UINT16      	imChannel;				/// Channel of the previous AP     OS_UINT16     	imSSIDLength;	BYTE			ssid[32];	OS_UINT16		disassocTime;			///Disconnected period} CCX_DDPINFO_CONTENT,*PCCX_DDPINF_CONTENT;typedef struct _CCX_IAPP_FRAME_{	CCX_IAPP_HEADER		iappHdr;				/// Type defined as 0x30												/// SubType defined as 0x00	CCX_DDPINFO_CONTENT	Content;} CCX_DDPINFO, *PCCX_DDPINFO;////// [S36] Radio Measurement////// Data structure of Beacon measurement report///typedef struct _CCX_BEACON_MEASURE_REPORT_    {    OS_UINT8        ChannelNumber; 	    OS_UINT8        Spare;            /* unused */            OS_UINT16       MeasureDuration; 	OS_UINT8		PhyType;	OS_UINT8		RcvSignalPower;	OS_UINT8  		BSSID[6];	OS_UINT32		ParentTSF;	OS_UINT8		TargetTSF[8];	OS_UINT16		BeaconInterval;	OS_UINT16		CapabilityInfo;///	OS_UINT8		RcvElements[1];   /* variable elements */} CCX_BEACON_MEASURE_REPORT,*PCCX_BEACON_MEASURE_REPORT;/// Header for radio measurement report elementstypedef struct _CCX_MEASURE_REPORT_ELEMENT_    {    OS_UINT16       ElementID; 				/// Element ID 39    OS_UINT16       Length;					/// Big endian length, including this field    OS_UINT16       MeasureToken;     OS_UINT8        MeasureMode;         	OS_UINT8        MeasureType;         	// Measure Reports follow (variable length) } CCX_MEASURE_REPORT_ELEMENT,*PCCX_MEASURE_REPORT_ELEMENT;/// Header fo radio measurement request element fieldstypedef struct _CCX_MEASURE_REQ_ELEMENT_    {    OS_UINT16       ElementID; 					/// Element ID 38    OS_UINT16       Length;						/// Big endian length, including this field    OS_UINT16       MeasureToken;     OS_UINT8        MeasureMode;         	OS_UINT8        MeasureType;         	CCX_MEASURE_REQUEST MeasureReq[1];			/// Measure Requests follow (variable length)} CCX_MEASURE_REQ_ELEMENT,*PCCX_MEASURE_REQ_ELEMENT;////// Header for radio measurement report message///typedef struct _CCX_MEASURE_REPORT_MSG_    {	CCX_IAPP_HEADER 	iappHdr;				/// Type defined as 0x32												/// SubType defined as 0x81	OS_UINT16			dialogToken;			/// equal to value in corresponding request frame	///CCX_MEASURE_REPORT_ELEMENT 	repElement[1];	/// Measure report elements follow (variable)} CCX_MEASURE_REPORT_MSG,*PCCX_MEASURE_REPORT_MSG;////// Header for radio measurement request message///typedef struct _CCX_MEASURE_REQ_MSG_    {	CCX_IAPP_HEADER 	iappHdr;				/// Type defined as 0x32												/// SubType defined as 0x01	OS_UINT16			dialogToken;			/// nonzero value chosen by STA	OS_UINT8			activateDelay;			/// # of TBTTs until Measurement Offset field starts	OS_UINT8			measureOffset;			/// time after activation delay	CCX_MEASURE_REQ_ELEMENT		reqElement[1];	/// Measure request elements follow (variable)} CCX_MEASURE_REQ_MSG,*PCCX_MEASURE_REQ_MSG;#ifdef CCX_CCKM/// CCKM +++typedef enum{	CCX_CCKM_START = 0,	CCX_CCKM_REQUEST,	CCX_CCKM_RESULT,	CCX_CCKM_COMPLETE} CCX_CCKM_STATES;/// CCKM ---#endif/// Element ID, /// ref: Table S36-4 of CCX specific#define ELEM_MEASURE_REQUEST		38#define ELEM_MEASUR_REPORT			39#define	ELEM_AP_TXPOWER				150#define	ELEM_RM_CAPABILITY			221/// Radio measurement request element mode/// ref: Figure S36-5#define MEASURE_MODE_REQ_PARALLEL	1			/// 0 - req starts immediately after prev req completed												/// 1 = request start as same time as prev req #define MEASURE_MODE_REQ_ENABLE		2			/// 0 - req and report bits are invalid												/// 1 - req and report bits are valid#define MEASURE_MODE_REQ_REPORT		4			/// 0 - disable autonomous report or report bit is invalid 												///	1 - enable autonomous report/// Measurement types for Measurement request element/// ref: Table S36-6#define MEASURE_REQ_UNUSED				0#define MEASURE_REQ_CHANNEL_LOAD		1#define MEASURE_REQ_NOISE_HIST			2#define MEASURE_REQ_BEACON				3#define MEASURE_REQ_FRAME				4#define MEASURE_REQ_HIDDENNODE			5/// Measurement types for Measurement report element/// ref: Table S36-6#define MEASURE_REP_UNUSED				0#define MEASURE_REP_CHANNEL_LOAD		1#define MEASURE_REP_NOISE_HIST			2#define MEASURE_REP_BEACON				3#define MEASURE_REP_FRAME				4#define MEASURE_REP_HIDDENNODE			5/// Different PHY types for mrpPhyType ( All others are undefined )/// ref: Table 36-9#define PHY_TYPE_FH 				1#define PHY_TYPE_DSS 				2				///b, b/g#define PHY_TYPE_UNUSED 			3#define PHY_TYPE_OFDM 				4				///a#define PHY_TYPE_HIGH_RATE_DSS 		5#define PHY_TYPE_ERP 				6				///g-only///Measure Report Mode/// ref: Table 36-12#define MEASURE_REPORT_MODE_PARALLEL	0x01		// 0 - req starts immediately after prev req completed													// 1 = request start as same time as prev req#define MEASURE_REPORT_MODE_INCAPABLE	0x02		// 0 - STA is capable or report is autonomous													// 1 - STA is incapable#define MEASURE_REPORT_MODE_REFUSED		0x04		// 0 - STA is not refusing or report is autonomous													// 1 - STA is refusing#define CCX_IAPP_TYPE_REPORT_INFORM   	0x30        ///Type for information reporting#define CCX_IAPP_TYPE_RADIO_MEASURE		0x32		///Type for Radio Measurement#define CCX_IAPP_SUBTYPE_REQUEST		0x01#define	CCX_IAPP_SUBTYPE_REPORT			0x81///#define CCX_IAPP_FUNCTION 	0x00        /* function for above *////#define CCX_TAG_ADJACENT_AP 0x009b      /* 16 bites *////crlo:fastroam --typedef struct _ccx_msg_t {	UCHAR dstAddr[6];	UCHAR srcAddr[6];	UCHAR protocolLen[2];			// protocol Length set to 0 can set SNAP	UCHAR snapHdr[8];	UCHAR length[2];			// 	UCHAR msgType;			// 0x40	UCHAR function;			// 0x8e	UCHAR apAddr[6];		// MAC address of destination AP	UCHAR staAddr[6];		// station MAC addr	UCHAR failcode[2];		// failure code	UCHAR rogueAddr[6];		// MAC address of Rogue AP	UCHAR rogueName[16];	// name of Rogue AP} CCX_MSG_T, *PCCX_MSG_T;#pragma pack()/********************************************************		Local Variables********************************************************//** *  Supported version included in CCX Version IE for (Re)Association requests */static u8 ccx_supported_version = 3U;/** *  Cisco OUI parsed in Vendor Specific IEs  */static u8 cisco_oui[] = { 0x00, 0x40, 0x96 };static u8 aironet_oui[] = { 0x00, 0x01, 0x6d };static ULONG ccx_flags = 0U;static ULONG ccx_EAPstate = 0U;// BSSIDstatic NDIS_802_11_SSID  ccxCurSsid;static NDIS_802_11_MAC_ADDRESS ccxCurBSSID;static NDIS_802_11_MAC_ADDRESS ccxStaMac;// Rogue AP#define CCX_ROGUE_AP_COUNT	16static FSW_CCX_ROGUE_AP_DETECTED ccxRogueAP[CCX_ROGUE_AP_COUNT];// packetstatic NDIS_HANDLE	ccxPacketPoolHandle;static NDIS_HANDLE      ccxBufferPoolHandle;static PNDIS_PACKET    pCCXPacket[CCX_ROGUE_AP_COUNT];static PNDIS_BUFFER     pCCXBuffer[CCX_ROGUE_AP_COUNT];static PVOID                 pCCXBufVM[CCX_ROGUE_AP_COUNT];static PNDIS_PACKET	pCCXCurPacket = NULL;static NDIS_HANDLE      *pMrvDrvAdapterHdl = NULL;static PMRVDRV_ADAPTER pCcxAdapter = NULL;static UCHAR ccxAssociationRequestIE[128];#ifdef CCX_TPCstatic int ifNeedTPC=0;static int ccxTPCMinPower;static int ccxTPCMaxPower;static int ccxTPCUserPower = CCX_TPC_MaxPowerValue;#endif#ifdef CCX_CCKM// CCKMstatic    CCX_CCKM_STATES  ccxCCKMState = CCX_CCKM_START;static ULONG ccxAssociationRequestIELength;static UCHAR ccxAssociationRequestIE[128];#endif/********************************************************		Global Variables********************************************************//********************************************************		Local Functions********************************************************//**  *  @brief Append a ccx version ie to the buffer and advance *  the buffer pointer by the size of the IE appended. *  Return the size appended. * *  @param ppBuffer	pointer to the buffer pointer *  @return		number of bytes appended to **ppBuffer	 */  static int append_ccx_version_ie( u8** ppBuffer ){    CCX_IE_Version_t versionIe;    /* Null checks */    if (ppBuffer == 0) return 0;    if (*ppBuffer == 0) return 0;    /* Setup OUI Header information */    versionIe.ouiHdr.elemId = CCX_IE_VERSION;    versionIe.ouiHdr.len = sizeof(CCX_IE_Version_t) - 2; /* -2 for len + id */

⌨️ 快捷键说明

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