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

📄 wt_mac.c

📁 mini-PCI driver for LHWT chipsets
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "wtprecomp.h"#if DBG#define _FILENUMBER     'CAMS'#endifvoid setWepBit(	PWTWLAN_TXBUF PTxBuffer,char wb);  //Have modified/***********************************************//*                                             *//*                                             *//*                                             *//*                                             *//***********************************************/void WtInitializeTimer(struct timer_list* timer, void* timer_function, IN PWT_ADAPTER Adapter){	init_timer(timer);	(*timer).function = timer_function;	(*timer).data = (unsigned long)(Adapter);	add_timer(timer);}void WtCancelTimer(struct timer_list* timer){        del_timer_sync(timer);}void TimerInitialize(IN PWT_ADAPTER Adapter){        FN_ENTER;		#ifdef WIN_PLATFORM	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.MacTimer.TBeacon), TBeaconProc, Adapter);//锟?	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TATIM, TATIMProc, Adapter);//锟絋ATIM	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TScan, TScanProc, Adapter);//锟絋Scan	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TAuth, TAuthProc, Adapter);	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TAsoc, TAsocProc, Adapter);	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TReasoc, TReAsocProc, Adapter);	NdisInitializeTimer(&Adapter->MacParameter.MacTimer.TJoin, TJoinProc, Adapter);//锟絋Join#else        WtInitializeTimer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), &TBeaconProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.ATIMProcTimer), &TATIMProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.ScanProcTimer), &TScanProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.AuthProcTimer), &TAuthProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.AsocProcTimer), &TAsocProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.ReasocProcTimer), &TReAsocProc, Adapter);	WtInitializeTimer(&(Adapter->MacParameter.MacTimer.JoinProcTimer), &TJoinProc, Adapter);#endif        FN_EXIT(0,0);}void TimerCancel(IN PWT_ADAPTER Adapter){        FN_ENTER;       del_timer_sync(&(Adapter->MacParameter.MacTimer.BeaconProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.ATIMProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.ScanProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.AuthProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.AsocProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.ReasocProcTimer));	del_timer_sync(&(Adapter->MacParameter.MacTimer.JoinProcTimer));        FN_EXIT(0,0);}#ifdef WIN_PLATFORMvoid TBeaconProc(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)#elsevoid TBeaconProc(IN PWT_ADAPTER Adapter)#endif{       	FN_ENTER;#ifdef WIN_PLATFORM	PWT_ADAPTER Adapter = (PWT_ADAPTER)FunctionContext;#endif	//printk("<0>current stat = %d\r\n",Adapter->MacParameter.CurrentState);	if(Adapter->MacParameter.CurrentState == IBSS_IDLE || Adapter->MacParameter.CurrentState == IBSS_ACTIVE)	        #ifdef WIN_PLATFORM		TBeacnIBSS(SystemSpecific1, Adapter, SystemSpecific2, SystemSpecific3);		#else		TBeacnIBSS(Adapter);		#endif	else if(Adapter->MacParameter.CurrentState == ASOC_PASS)	        #ifdef WIN_PLATFORM		TBeacnBSS(SystemSpecific1, Adapter, SystemSpecific2, SystemSpecific3);		#else		TBeacnBSS(Adapter);		#endif        FN_EXIT(0,0);	return;			}//锟絀BSS#ifdef WIN_PLATFORMvoid TBeacnIBSS(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)#elsevoid TBeacnIBSS(IN PWT_ADAPTER Adapter)#endif{	char Str[10], FrameBody[256];	USHORT BodyLen = 0;	ULONG Timeout;	#ifdef WIN_PLATFORM	PWT_ADAPTER Adapter = (PWT_ADAPTER)FunctionContext;	#endif 	PWTWLAN_TXBUF PTxBuffer;	FN_ENTER;	//printk("In TBeacn IBSS\n");		if((Adapter->MacParameter.CurrentState == IBSS_IDLE) ||  (Adapter->MacParameter.CurrentState == IBSS_ACTIVE) )	{		#ifdef WIN_PLATFORM		NdisSetTimer(&Adapter->MacParameter.MacTimer.TBeacon, 100);//usecond or msecond ???                #else		//mod_timer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), jiffies+(100/1000000)*HZ);		Timeout = (100*HZ)/1000;		mod_timer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), jiffies+Timeout);		#endif		//printk("<0>In Function %s before AllocTxMgmt\n\r",__FUNCTION__);	        AllocTxMgmt( Adapter, &PTxBuffer);                //printk("<0>In Function %s after AllocTxMgmt\n\r",__FUNCTION__);		if( PTxBuffer == NULL )			return;					#ifdef WIN_PLATFORM		NdisZeroMemory( &PTxBuffer->TXHwBuf.pHwTxBuf->TxAUXBuf, sizeof(WTWLAN_TAUXB));		NdisZeroMemory( &PTxBuffer->TXHwBuf.pHwTxBuf->dot11Head, Adapter->MacHwCfg.HeadLen);		#else		memset(&(PTxBuffer->TXHwBuf.pHwTxBuf->TxAUXBuf), 0, (sizeof(WTWLAN_TAUXB)));		memset(&(PTxBuffer->TXHwBuf.pHwTxBuf->dot11Head), 0, (Adapter->MacHwCfg.HeadLen));		#endif		//TimeStamp		memset(FrameBody, 0, 8);		BodyLen +=8;				memcpy(FrameBody + BodyLen, int16ToS((int16)(Adapter->MacParameter.mBcnInterval & 0xFFFF), Str), 2);		BodyLen +=2;				Adapter->MacParameter.mCap = 2 ;//edited by hk 2004.11.12		if(Adapter->MacParameter.mEncryptMode)		{			Adapter->MacParameter.mCap |= 0x10;		}		memcpy(FrameBody + BodyLen, int16ToS(Adapter->MacParameter.mCap, Str), 2);		BodyLen +=2;		//SSID		FrameBody[BodyLen] = eSsId;BodyLen+=1;		FrameBody[BodyLen] = (UCHAR)Adapter->MacParameter.mSsId.SsidLength;BodyLen+=1;		memcpy(FrameBody + BodyLen, Adapter->MacParameter.mSsId.Ssid, Adapter->MacParameter.mSsId.SsidLength);		BodyLen += (USHORT)(Adapter->MacParameter.mSsId.SsidLength );		//edited by hk 2005.6.13		//Supported rates		//memcpy(FrameBody + BodyLen, mkElem(eSupRates, Str, Adapter->dot11Mib.dot11OperationalRateSet,8), 10);		//BodyLen += 10;		switch ( Adapter->Ndis80211Parameter.ABGMode)		{		case IEEE80211A_ONLY:			{				//eSupRate				Str[0] = eSupRates ;				Str[1] = 8  ;				//just for test				Str[2] = 0x0c;				Str[3] = 0x12;				Str[4] = 0x18;				Str[5] = 0x24;				Str[6] = 0x30;				Str[7] = 0x48;				Str[8] = 0x60;				Str[9] = 0x6c;				memcpy( FrameBody + BodyLen, Str, 10);		BodyLen += 10;			}			break;		case IEEE80211B_AND_G:		case IEEE80211B_ONLY:			{				//eSupRate				Str[0] = eSupRates ;				Str[1] = 4  ;				/*memcpy( tmpelement+2, Adapter->MacParameter.mBrates, 8);*/				//just for test				Str[2] = 0x82;				Str[3] = 0x84;				Str[4] = 0x8b;								Str[5] = 0x96;				memcpy( FrameBody + BodyLen, Str, 6);				BodyLen += 6;			}			break;		case IEEE80211G_ONLY:			{				Str[0] = eSupRates ;				Str[1] = 8;				//just for test				Str[2] = 0x82;				Str[3] = 0x84;				Str[4] = 0x8b;				Str[5] = 0x96;				Str[6] = 0x8c;				Str[7] = 0x98;				Str[8] = 0xb0;				Str[9] = 0x48;				memcpy( FrameBody + BodyLen, Str, 10);				BodyLen += 10;			}			break;		default:			//DBGPRINT_RAW(WT_ERROR, (" -- failed\n")); 			//ASSERT(FALSE);			;		}		//DS Parameter Set		memcpy(FrameBody + BodyLen, mkElem(eDsParms, Str, &Adapter->MacParameter.mPhPm,1), 3);		BodyLen += 3;		//IBSS Parameter Set		//Adapter->MacParameter.mIBPm = 0x1200;		Adapter->MacParameter.mIBPm = 0x0;		memcpy(FrameBody + BodyLen,  mkElem(eIbParms, Str, int16ToS(Adapter->MacParameter.mIBPm, Str), 2), 4);		BodyLen += 4;		//Generate beacon frame		mkFrame(PTxBuffer, WLAN_FSTYPE_BEACON, Adapter->MacParameter.BcstAddr, Adapter->MacParameter.dot11MacAddress, Adapter->MacParameter.mBssid, FrameBody, BodyLen);		Adapter->MacParameter.mAtimW = TRUE;		Adapter->MacParameter.mAtimRx = FALSE;		Adapter->MacParameter.mPss = awake;				#ifdef WIN_PLATFORM		NdisSetTimer(&Adapter->MacParameter.MacTimer.TATIM, (ULONG)kUsec(now() + Adapter->MacParameter.mIBPm));		#else		Timeout = (ULONG)(div64(Adapter->MacParameter.mIBPm,1000)*HZ);		Timeout = Timeout/1000; 		//mod_timer(&(Adapter->MacParameter.MacTimer.ATIMProcTimer), (jiffies+div64(Adapter->MacParameter.mIBPm,1000)*HZ));		mod_timer(&(Adapter->MacParameter.MacTimer.ATIMProcTimer), (jiffies+Timeout));		#endif				Adapter->MacParameter.mProcState = Ibss_Active;		Wake();		TBTT();		MmRequest(Adapter,PTxBuffer);	}    		FN_EXIT(0,0);    	}#ifdef WIN_PLATFORMvoid TBeacnBSS(IN PVOID SystemSpecific1, IN PVOID FunctionContext, IN PVOID SystemSpecific2, IN PVOID SystemSpecific3)#elsevoid TBeacnBSS(IN PWT_ADAPTER Adapter)#endif{	ULONG Timeout;		FN_EXIT(0,0);    	//	Timeout = (ULONG)(div64(Adapter->MacParameter.mBcnPeriod,1000)*HZ);	Timeout = (Adapter->MacParameter.mBcnInterval*HZ)/1000; 	// mod_timer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), (jiffies+div64(Adapter->MacParameter.mBcnPeriod,1000)*HZ));	mod_timer(&(Adapter->MacParameter.MacTimer.BeaconProcTimer), (jiffies+Timeout));		if (Adapter->MacParameter.mDtimCount == 0)		Adapter->MacParameter.mDtimCount = Adapter->dot11Mib.dot11DtimPeriod - 1;	else		Adapter->MacParameter.mDtimCount = Adapter->MacParameter.mDtimCount-1;	if (Adapter->MacParameter.mDtimCount == 0)	{		if (CfpCount(Adapter->MacParameter.mCfPm) == 0)			Adapter->MacParameter.mCfPm = SetCfpCount(Adapter->MacParameter.mCfPm, (char)(CfpPeriod(Adapter->MacParameter.mCfPm) - 1));		else			Adapter->MacParameter.mCfPm = SetCfpCount(Adapter->MacParameter.mCfPm, (char)(CfpCount(Adapter->MacParameter.mCfPm) - 1));		if (CfpCount(Adapter->MacParameter.mCfPm) == 0)		{			;			//ChangeNav((Duration)CfpMaxDur(mCfPm), cfpBss);//锟斤拷锟斤拷始		}		if (Adapter->MacParameter.mLiCnt == 0)			Adapter->MacParameter.mLiCnt = Adapter->MacParameter.mListenInt -1;		else			Adapter->MacParameter.mLiCnt = Adapter->MacParameter.mLiCnt -1;		if(Adapter->dot11Mib.dot11PowerMangementMode == power_save && Adapter->MacParameter.mLiCnt == 0 && Adapter->MacParameter.mReceiveDtims)		{				Adapter->MacParameter.mPss = awake;			Wake();		}	}   		FN_EXIT(0,0);    	}void FrmBeaconProc( IN PWT_ADAPTER Adapter, PWTWLAN_RXBUF pWtRxBuf){	wlan_fr_beacon_t *frm;		FN_ENTER;		frm = &pWtRxBuf->ParseData.a.beacon;	memset( frm, 0, sizeof(wlan_fr_beacon_t));	frm->buf = (UINT8 *)pWtRxBuf;	if( FALSE == wt_mgmt_decode_beacon(frm) )	{		goto out;		}	if (Adapter->MacParameter.CurrentState == NO_BSS)	{	        //printk("<0>In Function %s just before JoinAct\n\r",__FUNCTION__);		JoinAct(Adapter, pWtRxBuf, 0, 0);	}		if( Adapter->MlmeParameter.bScanOngoing )	{		ScanListen( Adapter,pWtRxBuf );	}out:		FN_EXIT(0,0);	return;	}//IBSS锟斤拷锟斤拷锟?void FrmIBSSBeacon( IN PWT_ADAPTER Adapter, PWTWLAN_RXBUF PDU,Time REnd,Time tstr){	FrameElement Ele;	INT64 TStamp,TStampTmp;	FN_ENTER;	memset(&Ele, 0, sizeof(Ele));	if (Adapter->MacParameter.mProcState != Ibss_Active &&  Adapter->MacParameter.mProcState != Ibss_Idle)	{		if (capA(PDU->RXHwBuf.pHwRxBuf->Buffer, cIbss) &&  memcmp(Adapter->MacParameter.mSsId.Ssid, PDU->ParseData.a.beacon.ssid->ssid, Adapter->MacParameter.mSsId.SsidLength) == 0)		{			memcpy(&TStampTmp, PDU->RXHwBuf.pHwRxBuf + 30, 8 );			TStamp = ieee2host64(TStampTmp);			if (TStamp > TSF(Adapter, 0, FALSE));			{				TSF(Adapter,TStamp + (now() - tstr), TRUE);				Adapter->MacParameter.mProcState = Ibss_Idle;				Cancel();			}		}	}   

⌨️ 快捷键说明

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