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

📄 action.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
#ifdef DOT11_N_SUPPORTstatic 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	IF_DEV_CONFIG_OPMODE_ON_STA(pAd)	{		if (ADHOC_ON(pAd))			ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);		else		ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);	}#endif // CONFIG_STA_SUPPORT //	HTINFOframe.Category = CATEGORY_HT;	HTINFOframe.Action = HT_INFO_EXCHANGE;	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);}#ifdef DOT11N_DRAFT3VOID SendNotifyBWActionFrame(	IN PRTMP_ADAPTER pAd,	IN UCHAR  Wcid,	IN UCHAR apidx){	PUCHAR			pOutBuffer = NULL;	NDIS_STATUS 	NStatus;	FRAME_ACTION_HDR	Frame;	ULONG			FrameLen;	PUCHAR			pAddr1;		NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);  //Get an unused nonpaged memory	if(NStatus != NDIS_STATUS_SUCCESS) 	{		DBGPRINT(RT_DEBUG_ERROR,("ACT - SendNotifyBWAction() allocate memory failed \n"));		return;	}	if (Wcid == MCAST_WCID)		pAddr1 = &BROADCAST_ADDR[0];	else		pAddr1 = pAd->MacTab.Content[Wcid].Addr;	ActHeaderInit(pAd, &Frame.Hdr, pAddr1, pAd->ApCfg.MBSSID[apidx].Bssid, pAd->ApCfg.MBSSID[apidx].Bssid);		Frame.Category = CATEGORY_HT;	Frame.Action = NOTIFY_BW_ACTION;		MakeOutgoingFrame(pOutBuffer,				&FrameLen,				  sizeof(FRAME_ACTION_HDR),	  &Frame,				  END_OF_ARGS);	*(pOutBuffer + FrameLen) = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth;	FrameLen++;		MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);	DBGPRINT(RT_DEBUG_TRACE,("ACT - SendNotifyBWAction(NotifyBW= %d)!\n", pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth));}#endif // DOT11N_DRAFT3 //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"));#ifdef CONFIG_STA_SUPPORT			if(pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE)			{				// Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps 				// sending BW_Notify Action frame, and cause us to linkup and linkdown. 				// In legacy mode, don't need to parse HT action frame.				DBGPRINT(RT_DEBUG_TRACE,("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n", 								Elem->Msg[LENGTH_802_11+2] ));				break;			}#endif // CONFIG_STA_SUPPORT //			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_INFO_EXCHANGE:			{							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;	INT			i, total;//	FRAME_BAR			FrameBar;//	ULONG			FrameLen;//	NDIS_STATUS 	NStatus;//	PUCHAR			pOutBuffer = NULL;//	USHORT			Sequence;	UCHAR			TID;#ifdef RALINK_ATE	if (ATE_ON(pAd))		return;#endif // RALINK_ATE //	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];#ifdef CONFIG_STA_SUPPORT			IF_DEV_CONFIG_OPMODE_ON_STA(pAd)				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)))			if (1)	// Now we always send BAR.			{				//MiniportMMRequestUnlock(pAd, 0, pOutBuffer, FrameLen);				MiniportMMRequest(pAd, (MGMT_USE_QUEUE_FLAG | MapUserPriorityToAccessCategory[TID]), pOutBuffer, FrameLen);							}			MlmeFreeMemory(pAd, pOutBuffer);		}	}}#endif // DOT11_N_SUPPORT //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);}/*	==========================================================================	Description:		Insert Category and action code into the action frame.			Parametrs:		1. frame buffer pointer.		2. frame length.		3. category code of the frame.		4. action code of the frame.		Return	: None.	========================================================================== */VOID InsertActField(	IN PRTMP_ADAPTER pAd,	OUT PUCHAR pFrameBuf,	OUT PULONG pFrameLen,	IN UINT8 Category,	IN UINT8 ActCode){	ULONG TempLen;	MakeOutgoingFrame(	pFrameBuf,		&TempLen,						1,				&Category,						1,				&ActCode,						END_OF_ARGS);	*pFrameLen = *pFrameLen + TempLen;	return;}

⌨️ 快捷键说明

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