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

📄 dls.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
						{								pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;							pAd->MacTab.fAnyStationNonGF = TRUE;							pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;						}						if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))						{							pEntry->MaxHTPhyMode.field.BW= BW_40;							pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40));						}						else						{								pEntry->MaxHTPhyMode.field.BW = BW_20;							pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20));							pAd->MacTab.fAnyStation20Only = TRUE;						}						// find max fixed rate						for (ii=15; ii>=0; ii--)						{								j = ii/8;								bitmask = (1<<(ii-(j*8)));							if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask))							{								pEntry->MaxHTPhyMode.field.MCS = ii;								break;							}							if (ii==0)								break;						}						 						if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)						{							DBGPRINT(RT_DEBUG_OFF, ("@@@ pAd->CommonCfg.RegTransmitSetting.field.MCS = %d\n",										pAd->StaCfg.DesiredTransmitSetting.field.MCS));							if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)							{								// Fix MCS as HT Duplicated Mode								pEntry->MaxHTPhyMode.field.BW = 1;								pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;								pEntry->MaxHTPhyMode.field.STBC = 0;								pEntry->MaxHTPhyMode.field.ShortGI = 0;								pEntry->MaxHTPhyMode.field.MCS = 32;							}							else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)							{								// STA supports fixed MCS 								pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;							}						}						pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));						pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity;						pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor;						pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs;						pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize;										pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;						if (HtCapability.HtCapInfo.ShortGIfor20)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);						if (HtCapability.HtCapInfo.ShortGIfor40)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);						if (HtCapability.HtCapInfo.TxSTBC)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);						if (HtCapability.HtCapInfo.RxSTBC)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);						if (HtCapability.ExtHtCapInfo.PlusHTC)											CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);						if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport)											CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);							if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03)							CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);								NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE));					}#endif // DOT11_N_SUPPORT //					pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;					pEntry->CurrTxRate = pEntry->MaxSupportedRate;					CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);					if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)					{						PUCHAR pTable;						UCHAR TableSize = 0;						MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);						pEntry->bAutoTxRateSwitch = TRUE;					}					else					{						pEntry->HTPhyMode.field.MODE	= pAd->StaCfg.HTPhyMode.field.MODE;						pEntry->HTPhyMode.field.MCS	= pAd->StaCfg.HTPhyMode.field.MCS;						pEntry->bAutoTxRateSwitch = FALSE;						RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);					}					pEntry->RateLen = SupportedRatesLen;					break;				}			}		}		StatusCode = MLME_SUCCESS;		// can not find in table, create a new one		if (i < 0)		{			StatusCode = MLME_QOS_UNSPECIFY;			DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsReqAction() DLSEntry table full(only can support %d DLS session) \n", MAX_NUM_OF_DLS_ENTRY - MAX_NUM_OF_INIT_DLS_ENTRY));		}		else		{			DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() use entry(%d) %02x:%02x:%02x:%02x:%02x:%02x\n",				i, SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));		}	}	ActHeaderInit(pAd, &DlsRspHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid);			// Build basic frame first	if (StatusCode == MLME_SUCCESS)	{		MakeOutgoingFrame(pOutBuffer,				&FrameLen,						sizeof(HEADER_802_11),		&DlsRspHdr,						1,							&Category,						1,							&Action,						2,							&StatusCode,						6,							SA,						6,							pAd->CurrentAddress,						2,							&pAd->StaActive.CapabilityInfo,						1,							&SupRateIe,						1,							&pAd->MlmeAux.SupRateLen,						pAd->MlmeAux.SupRateLen,	pAd->MlmeAux.SupRate,						END_OF_ARGS);		if (pAd->MlmeAux.ExtRateLen != 0)		{			MakeOutgoingFrame(pOutBuffer + FrameLen,	&tmp,							  1,						&ExtRateIe,							  1,						&pAd->MlmeAux.ExtRateLen,							  pAd->MlmeAux.ExtRateLen, 	pAd->MlmeAux.ExtRate,							  END_OF_ARGS);			FrameLen += tmp;		}#ifdef DOT11_N_SUPPORT		if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))		{			UCHAR HtLen;#ifdef RT_BIG_ENDIAN			HT_CAPABILITY_IE HtCapabilityTmp;#endif			// add HT Capability IE 			HtLen = sizeof(HT_CAPABILITY_IE);#ifndef RT_BIG_ENDIAN			MakeOutgoingFrame(pOutBuffer + FrameLen,	&tmp,								1,						&HtCapIe,								1,						&HtLen,								HtLen,					&pAd->CommonCfg.HtCapability, 								END_OF_ARGS);#else			NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen);								*(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));								*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));			MakeOutgoingFrame(pOutBuffer + FrameLen,	&tmp,								1,						&HtCapIe,								1,						&HtLen,								HtLen,					&HtCapabilityTmp, 								END_OF_ARGS);#endif			FrameLen = FrameLen + tmp;		}#endif // DOT11_N_SUPPORT //		if (pDLS && (pDLS->Status != DLS_FINISH))		{			RTMPCancelTimer(&pDLS->Timer, &TimerCancelled);			Timeout = DLS_TIMEOUT;			RTMPSetTimer(&pDLS->Timer, Timeout);		}	}	else	{		MakeOutgoingFrame(pOutBuffer,				&FrameLen,						sizeof(HEADER_802_11),		&DlsRspHdr,						1,							&Category,						1,							&Action,						2,							&StatusCode,						6,							SA,						6,							pAd->CurrentAddress,						END_OF_ARGS);	}	MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);	MlmeFreeMemory(pAd, pOutBuffer);}/*    ==========================================================================    Description:        	IRQL = DISPATCH_LEVEL    ========================================================================== */VOID PeerDlsRspAction(    IN PRTMP_ADAPTER pAd,     IN MLME_QUEUE_ELEM *Elem) {	USHORT		CapabilityInfo;	UCHAR		DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];	USHORT		StatusCode;	SHORT		i;	BOOLEAN		TimerCancelled;	UCHAR		MaxSupportedRateIn500Kbps = 0;    UCHAR		SupportedRatesLen;    UCHAR		SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];	UCHAR		HtCapabilityLen;	HT_CAPABILITY_IE	HtCapability;	if (!pAd->CommonCfg.bDLSCapable)		return;	if (!INFRA_ON(pAd))		return;	if (!PeerDlsRspSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &CapabilityInfo, &StatusCode,							&SupportedRatesLen, &SupportedRates[0], &HtCapabilityLen, &HtCapability)) 		return;    // supported rates array may not be sorted. sort it and find the maximum rate    for (i=0; i<SupportedRatesLen; i++)    {        if (MaxSupportedRateIn500Kbps < (SupportedRates[i] & 0x7f))             MaxSupportedRateIn500Kbps = SupportedRates[i] & 0x7f;    }	DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x with StatusCode=%d, CapabilityInfo=0x%x\n",		SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], StatusCode, CapabilityInfo));	for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++)	{		if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))		{			if (StatusCode == MLME_SUCCESS)			{				MAC_TABLE_ENTRY *pEntry;				UCHAR MaxSupportedRate = RATE_11;				pEntry = MacTableInsertDlsEntry(pAd, SA, i);				switch (MaxSupportedRateIn500Kbps)				{					case 108: MaxSupportedRate = RATE_54;   break;					case 96:  MaxSupportedRate = RATE_48;   break;					case 72:  MaxSupportedRate = RATE_36;   break;					case 48:  MaxSupportedRate = RATE_24;   break;					case 36:  MaxSupportedRate = RATE_18;   break;					case 24:  MaxSupportedRate = RATE_12;   break;					case 18:  MaxSupportedRate = RATE_9;    break;					case 12:  MaxSupportedRate = RATE_6;    break;					case 22:  MaxSupportedRate = RATE_11;   break;					case 11:  MaxSupportedRate = RATE_5_5;  break;					case 4:   MaxSupportedRate = RATE_2;    break;					case 2:   MaxSupportedRate = RATE_1;    break;					default:  MaxSupportedRate = RATE_11;   break;				}				pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate);				if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)				{					pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;					pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;					pEntry->MinHTPhyMode.field.MODE = MODE_CCK;					pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;					pEntry->HTPhyMode.field.MODE = MODE_CCK;					pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;				}				else				{					pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;					pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];					pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;					pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];					pEntry->HTPhyMode.field.MODE = MODE_OFDM;					pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];				}				pEntry->MaxHTPhyMode.field.BW = BW_20;				pEntry->MinHTPhyMode.field.BW = BW_20;				#ifdef DOT11_N_SUPPORT				pEntry->HTCapability.MCSSet[0] = 0;				pEntry->HTCapability.MCSSet[1] = 0;				// If this Entry supports 802.11n, upgrade to HT rate. 				if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))				{					UCHAR	j, bitmask; //k,bitmask;					CHAR    ii;					DBGPRINT(RT_DEBUG_OFF, ("DLS - PeerDlsRspAction Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n",								SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));					if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))					{						pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;					}					else					{							pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;						pAd->MacTab.fAnyStationNonGF = TRUE;						pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;					}					if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))					{						pEntry->MaxHTPhyMode.field.BW= BW_40;						pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40));					}					else					{							pEntry->MaxHTPhyMode.field.BW = BW_20;						pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20));						pAd->MacTab.fAnyStation20Only = TRUE;					}					// find max fixed rate					for (ii=15; ii>=0; ii--)					{							j = ii/8;							bitmask = (1<<(ii-(j*8)));						if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask))						{							pEntry->MaxHTPhyMode.field.MCS = ii;							break;						}						if (ii==0)							break;					}	 					if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)					{						if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)						{							// Fix MCS as HT Duplicated Mode							pEntry->MaxHTPhyMode.field.BW = 1;							pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;							pEntry->MaxHTPhyMode.field.STBC = 0;							pEntry->MaxHTPhyMode.field.ShortGI = 0;							pEntry->MaxHTPhyMode.field.MCS = 32;						}						else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)						{							// STA supports fixed MCS 							pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;						}					}					pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));					pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity;					pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor;

⌨️ 快捷键说明

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