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

📄 action.c

📁 Linux下的RT系列无线网卡驱动,可以直接在x86平台上编译
💻 C
📖 第 1 页 / 共 2 页
字号:
	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR	Action = Elem->Msg[LENGTH_802_11+1];		switch(Action)	{		case ADDBA_REQ:			PeerAddBAReqAction(pAd,Elem);			break;		case ADDBA_RESP:			PeerAddBARspAction(pAd,Elem);			break;		case DELBA:			PeerDelBAAction(pAd,Elem);			break;	}}static VOID ReservedAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem){	UCHAR Category;	if (Elem->MsgLen <= LENGTH_802_11)	{		return;	}	Category = Elem->Msg[LENGTH_802_11];	DBGPRINT(RT_DEBUG_TRACE,("Rcv reserved category(%d) Action Frame\n", Category));	hex_dump("Reserved Action Frame", &Elem->Msg[0], Elem->MsgLen);}VOID PeerRMAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {}static VOID respond_ht_information_exchange_action(	IN PRTMP_ADAPTER pAd,	IN MLME_QUEUE_ELEM *Elem) {	PUCHAR			pOutBuffer = NULL;	NDIS_STATUS		NStatus;	ULONG			FrameLen;	FRAME_HT_INFO	HTINFOframe, *pFrame;	UCHAR   		*pAddr;	// 2. Always send back ADDBA Response 	NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);	 //Get an unused nonpaged memory	if (NStatus != NDIS_STATUS_SUCCESS)	{		DBGPRINT(RT_DEBUG_TRACE,("ACTION - respond_ht_information_exchange_action() allocate memory failed \n"));		return;	}	// get RA	pFrame = (FRAME_HT_INFO *) &Elem->Msg[0];	pAddr = pFrame->Hdr.Addr2;	NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO));	// 2-1. Prepare ADDBA Response frame.#ifdef CONFIG_STA_SUPPORT	ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);#endif // CONFIG_STA_SUPPORT //	HTINFOframe.Category = CATEGORY_HT;	HTINFOframe.Action = HT_INFORMATION_EXCHANGE_ACTION;	HTINFOframe.HT_Info.Request = 0;	HTINFOframe.HT_Info.Forty_MHz_Intolerant = pAd->CommonCfg.HtCapability.HtCapInfo.Forty_Mhz_Intolerant;	HTINFOframe.HT_Info.STA_Channel_Width	 = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth;		MakeOutgoingFrame(pOutBuffer,					&FrameLen,					  sizeof(FRAME_HT_INFO),	&HTINFOframe,					  END_OF_ARGS);	MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);	MlmeFreeMemory(pAd, pOutBuffer);}VOID PeerHTAction(	IN PRTMP_ADAPTER pAd, 	IN MLME_QUEUE_ELEM *Elem) {	UCHAR	Action = Elem->Msg[LENGTH_802_11+1];		if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE)		return;		switch(Action)	{		case Notify_BW_ACTION:			DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Notify Channel bandwidth action----> \n"));			if (Elem->Msg[LENGTH_802_11+2] == 0)	// 7.4.8.2. if value is 1, keep the same as supported channel bandwidth. 				pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0;						break;		case SMPS_ACTION:			// 7.3.1.25 			DBGPRINT(RT_DEBUG_TRACE,("ACTION - SMPS action----> \n"));			if (((Elem->Msg[LENGTH_802_11+2]&0x1) == 0))			{				pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_ENABLE;			}			else if (((Elem->Msg[LENGTH_802_11+2]&0x2) == 0))			{				pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_STATIC;			}			else			{							pAd->MacTab.Content[Elem->Wcid].MmpsMode = MMPS_DYNAMIC;			}			DBGPRINT(RT_DEBUG_TRACE,("Aid(%d) MIMO PS = %d\n", Elem->Wcid, pAd->MacTab.Content[Elem->Wcid].MmpsMode));			// rt2860c : add something for smps change.			break; 		case SETPCO_ACTION:			break;		case MIMO_CHA_MEASURE_ACTION:			break;		case HT_INFORMATION_EXCHANGE_ACTION:			{							HT_INFORMATION_OCTET	*pHT_info;				pHT_info = (HT_INFORMATION_OCTET *) &Elem->Msg[LENGTH_802_11+2];    			// 7.4.8.10    			DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Information Exchange action----> \n"));    			if (pHT_info->Request)    			{    				respond_ht_information_exchange_action(pAd, Elem);    			}			}    		break;				}}/*	==========================================================================	Description:		Retry sending ADDBA Reqest.			IRQL = DISPATCH_LEVEL		Parametrs:	p8023Header: if this is already 802.3 format, p8023Header is NULL		Return	: TRUE if put into rx reordering buffer, shouldn't indicaterxhere.				FALSE , then continue indicaterx at this moment.	========================================================================== */VOID ORIBATimerTimeout(	IN	PRTMP_ADAPTER	pAd) {	MAC_TABLE_ENTRY	*pEntry;	UCHAR			i, total;//	FRAME_BAR			FrameBar;//	ULONG			FrameLen;//	NDIS_STATUS 	NStatus;//	PUCHAR			pOutBuffer = NULL;//	USHORT			Sequence;	UCHAR			TID;	total = pAd->MacTab.Size * NUM_OF_TID;	for (i = 1; ((i <MAX_LEN_OF_BA_ORI_TABLE) && (total > 0)) ; i++)	{		if  (pAd->BATable.BAOriEntry[i].ORI_BA_Status == Originator_Done)		{			pEntry = &pAd->MacTab.Content[pAd->BATable.BAOriEntry[i].Wcid];			TID = pAd->BATable.BAOriEntry[i].TID;			ASSERT(pAd->BATable.BAOriEntry[i].Wcid < MAX_LEN_OF_MAC_TABLE);		}		total --;	}}VOID SendRefreshBAR(	IN	PRTMP_ADAPTER	pAd,	IN	MAC_TABLE_ENTRY	*pEntry) {	FRAME_BAR		FrameBar;	ULONG			FrameLen;	NDIS_STATUS 	NStatus;	PUCHAR			pOutBuffer = NULL;	USHORT			Sequence;	UCHAR			i, TID;	USHORT			idx;	BA_ORI_ENTRY	*pBAEntry;	for (i = 0; i <NUM_OF_TID; i++)	{		idx = pEntry->BAOriWcidArray[i];		if (idx == 0)		{			continue;		}		pBAEntry = &pAd->BATable.BAOriEntry[idx];		if  (pBAEntry->ORI_BA_Status == Originator_Done)		{			TID = pBAEntry->TID;			ASSERT(pBAEntry->Wcid < MAX_LEN_OF_MAC_TABLE);			NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory			if(NStatus != NDIS_STATUS_SUCCESS) 			{				DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n"));				return;			}							Sequence = pEntry->TxSeq[TID];			if (Sequence <= 3)				Sequence = 0;			else				Sequence -=3;#ifdef CONFIG_STA_SUPPORT			BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress);#endif // CONFIG_STA_SUPPORT //			FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function.			FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton.			FrameBar.BarControl.TID = TID; // make sure sequence not clear in DEL funciton.			MakeOutgoingFrame(pOutBuffer,				&FrameLen,							  sizeof(FRAME_BAR),	  &FrameBar,							  END_OF_ARGS);			if (!(CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_RALINK_CHIPSET)))			{				//MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen);				MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);				DBGPRINT_RAW(RT_DEBUG_INFO, ("BA --> NoBADataCountDown  [= %d]!!!\n", pEntry->NoBADataCountDown));				DBGPRINT(RT_DEBUG_INFO,("BA - Send BAR, Seq = 0x%x \n", Sequence));			}			MlmeFreeMemory(pAd, pOutBuffer);		}	}}VOID ActHeaderInit(    IN	PRTMP_ADAPTER	pAd,     IN OUT PHEADER_802_11 pHdr80211,     IN PUCHAR Addr1,     IN PUCHAR Addr2,    IN PUCHAR Addr3) {    NdisZeroMemory(pHdr80211, sizeof(HEADER_802_11));    pHdr80211->FC.Type = BTYPE_MGMT;    pHdr80211->FC.SubType = SUBTYPE_ACTION;    COPY_MAC_ADDR(pHdr80211->Addr1, Addr1);	COPY_MAC_ADDR(pHdr80211->Addr2, Addr2);    COPY_MAC_ADDR(pHdr80211->Addr3, Addr3);}VOID BarHeaderInit(	IN	PRTMP_ADAPTER	pAd, 	IN OUT PFRAME_BAR pCntlBar, 	IN PUCHAR pDA,	IN PUCHAR pSA) {//	USHORT	Duration;	NdisZeroMemory(pCntlBar, sizeof(FRAME_BAR));	pCntlBar->FC.Type = BTYPE_CNTL;	pCntlBar->FC.SubType = SUBTYPE_BLOCK_ACK_REQ;   	pCntlBar->BarControl.MTID = 0;	pCntlBar->BarControl.Compressed = 1;	pCntlBar->BarControl.ACKPolicy = 0;	pCntlBar->Duration = 16 + RTMPCalcDuration(pAd, RATE_1, sizeof(FRAME_BA));	COPY_MAC_ADDR(pCntlBar->Addr1, pDA);	COPY_MAC_ADDR(pCntlBar->Addr2, pSA);}

⌨️ 快捷键说明

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