Staging: rt2860: prepare for rt28[67]0/sta/*.[ch] merge
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
							parent
							
								
									371abf6def
								
							
						
					
					
						commit
						5f5d2df8ab
					
				| @ -454,6 +454,11 @@ VOID MlmeAssocReqAction( | ||||
| 				RSNIe = IE_WPA2; | ||||
| 			} | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| #ifdef SIOCSIWGENIE | ||||
| 			if (pAd->StaCfg.WpaSupplicantUP != 1) | ||||
| #endif // SIOCSIWGENIE //
 | ||||
| #endif | ||||
|             RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0); | ||||
| 
 | ||||
|             // Check for WPA PMK cache list
 | ||||
| @ -480,6 +485,17 @@ VOID MlmeAssocReqAction( | ||||
| 				} | ||||
| 			} | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| #ifdef SIOCSIWGENIE | ||||
| 			if (pAd->StaCfg.WpaSupplicantUP == 1) | ||||
| 			{ | ||||
| 				MakeOutgoingFrame(pOutBuffer + FrameLen,    		&tmp, | ||||
| 		                        	pAd->StaCfg.RSNIE_Len,			pAd->StaCfg.RSN_IE, | ||||
| 		                        	END_OF_ARGS); | ||||
| 			} | ||||
| 			else | ||||
| #endif | ||||
| #endif | ||||
| 			{ | ||||
| 				MakeOutgoingFrame(pOutBuffer + FrameLen,    		&tmp, | ||||
| 				              		1,                              &RSNIe, | ||||
| @ -490,6 +506,11 @@ VOID MlmeAssocReqAction( | ||||
| 
 | ||||
| 			FrameLen += tmp; | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| #ifdef SIOCSIWGENIE | ||||
| 			if (pAd->StaCfg.WpaSupplicantUP != 1) | ||||
| #endif | ||||
| #endif | ||||
| 			{ | ||||
| 	            // Append Variable IE
 | ||||
| 	            NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1); | ||||
| @ -882,6 +903,7 @@ VOID PeerAssocRspAction( | ||||
| 			RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled); | ||||
| 			if(Status == MLME_SUCCESS) | ||||
| 			{ | ||||
| #ifdef RT2860 | ||||
| 				// go to procedure listed on page 376
 | ||||
| 				AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, | ||||
| 					&EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); | ||||
| @ -895,7 +917,29 @@ VOID PeerAssocRspAction( | ||||
|                     wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); | ||||
| 
 | ||||
|                 } | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 				UCHAR			MaxSupportedRateIn500Kbps = 0; | ||||
| 				UCHAR			idx; | ||||
| 
 | ||||
| 				// supported rates array may not be sorted. sort it and find the maximum rate
 | ||||
| 			    for (idx=0; idx<SupRateLen; idx++) | ||||
|                 { | ||||
| 			        if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f)) | ||||
| 			            MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f; | ||||
| 			    } | ||||
| 
 | ||||
| 				for (idx=0; idx<ExtRateLen; idx++) | ||||
| 			    { | ||||
| 			        if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f)) | ||||
| 			            MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f; | ||||
|                 } | ||||
| 				// go to procedure listed on page 376
 | ||||
| 				AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen, | ||||
| 					&EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo); | ||||
| 
 | ||||
| 				StaAddMacTableEntry(pAd, &pAd->MacTab.Content[BSSID_WCID], MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo); | ||||
| #endif | ||||
| 				pAd->StaCfg.CkipFlag = CkipFlag; | ||||
| 				if (CkipFlag & 0x18) | ||||
| 				{ | ||||
| @ -1485,3 +1529,227 @@ int wext_notify_event_assoc( | ||||
| 	return 0; | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| BOOLEAN StaAddMacTableEntry( | ||||
| 	IN  PRTMP_ADAPTER		pAd, | ||||
| 	IN  PMAC_TABLE_ENTRY	pEntry, | ||||
| 	IN  UCHAR				MaxSupportedRateIn500Kbps, | ||||
| 	IN  HT_CAPABILITY_IE	*pHtCapability, | ||||
| 	IN  UCHAR				HtCapabilityLen, | ||||
| 	IN  USHORT        		CapabilityInfo) | ||||
| { | ||||
| 	UCHAR            MaxSupportedRate = RATE_11; | ||||
| 
 | ||||
| 	if (ADHOC_ON(pAd)) | ||||
| 		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); | ||||
| 
 | ||||
| 	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; | ||||
|     } | ||||
| 
 | ||||
|     if ((pAd->CommonCfg.PhyMode == PHY_11G) && (MaxSupportedRate < RATE_FIRST_OFDM_RATE)) | ||||
|         return FALSE; | ||||
| 
 | ||||
| 	// 11n only
 | ||||
| 	if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))&& (HtCapabilityLen == 0)) | ||||
| 		return FALSE; | ||||
| 
 | ||||
| 	if (!pEntry) | ||||
|         return FALSE; | ||||
| 
 | ||||
| 	NdisAcquireSpinLock(&pAd->MacTabLock); | ||||
| 	if (pEntry) | ||||
| 	{ | ||||
| 		pEntry->PortSecured = WPA_802_1X_PORT_SECURED; | ||||
| 		if ((MaxSupportedRate < RATE_FIRST_OFDM_RATE) || | ||||
| 			(pAd->CommonCfg.PhyMode == PHY_11B)) | ||||
| 		{ | ||||
| 			pEntry->RateLen = 4; | ||||
| 			if (MaxSupportedRate >= RATE_FIRST_OFDM_RATE) | ||||
| 				MaxSupportedRate = RATE_11; | ||||
| 		} | ||||
| 		else | ||||
| 			pEntry->RateLen = 12; | ||||
| 
 | ||||
| 		pEntry->MaxHTPhyMode.word = 0; | ||||
| 		pEntry->MinHTPhyMode.word = 0; | ||||
| 		pEntry->HTPhyMode.word = 0; | ||||
| 		pEntry->MaxSupportedRate = 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->CapabilityInfo = CapabilityInfo; | ||||
| 		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE); | ||||
| 		CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE); | ||||
| 	} | ||||
| 
 | ||||
| 	// 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    i; | ||||
| 
 | ||||
| 		if (ADHOC_ON(pAd)) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE); | ||||
| 		if ((pHtCapability->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 ((pHtCapability->HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth)) | ||||
| 		{ | ||||
| 			pEntry->MaxHTPhyMode.field.BW= BW_40; | ||||
| 			pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40)); | ||||
| 		} | ||||
| 		else | ||||
| 		{ | ||||
| 			pEntry->MaxHTPhyMode.field.BW = BW_20; | ||||
| 			pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(pHtCapability->HtCapInfo.ShortGIfor20)); | ||||
| 			pAd->MacTab.fAnyStation20Only = TRUE; | ||||
| 		} | ||||
| 
 | ||||
| 		// 3*3
 | ||||
| 		if (pAd->MACVersion >= RALINK_2883_VERSION && pAd->MACVersion < RALINK_3070_VERSION) | ||||
| 			pEntry->MaxHTPhyMode.field.TxBF = pAd->CommonCfg.RegTransmitSetting.field.TxBF; | ||||
| 
 | ||||
| 		// find max fixed rate
 | ||||
| 		for (i=23; i>=0; i--) // 3*3
 | ||||
| 		{ | ||||
| 			j = i/8; | ||||
| 			bitmask = (1<<(i-(j*8))); | ||||
| 			if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) && (pHtCapability->MCSSet[j] & bitmask)) | ||||
| 			{ | ||||
| 				pEntry->MaxHTPhyMode.field.MCS = i; | ||||
| 				break; | ||||
| 			} | ||||
| 			if (i==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 = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC)); | ||||
| 		pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity; | ||||
| 		pEntry->MaxRAmpduFactor = pHtCapability->HtCapParm.MaxRAmpduFactor; | ||||
| 		pEntry->MmpsMode = (UCHAR)pHtCapability->HtCapInfo.MimoPs; | ||||
| 		pEntry->AMsduSize = (UCHAR)pHtCapability->HtCapInfo.AMsduSize; | ||||
| 		pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; | ||||
| 
 | ||||
| 		if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE)) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED); | ||||
| 		if (pHtCapability->HtCapInfo.ShortGIfor20) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE); | ||||
| 		if (pHtCapability->HtCapInfo.ShortGIfor40) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE); | ||||
| 		if (pHtCapability->HtCapInfo.TxSTBC) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE); | ||||
| 		if (pHtCapability->HtCapInfo.RxSTBC) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE); | ||||
| 		if (pHtCapability->ExtHtCapInfo.PlusHTC) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE); | ||||
| 		if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE); | ||||
| 		if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03) | ||||
| 			CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE); | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		pAd->MacTab.fAnyStationIsLegacy = TRUE; | ||||
| 	} | ||||
| 
 | ||||
| 	NdisMoveMemory(&pEntry->HTCapability, pHtCapability, sizeof(HT_CAPABILITY_IE)); | ||||
| 
 | ||||
| 	pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word; | ||||
| 	pEntry->CurrTxRate = pEntry->MaxSupportedRate; | ||||
| 
 | ||||
| 	// Set asic auto fall back
 | ||||
| 	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; | ||||
| 
 | ||||
| 		// If the legacy mode is set, overwrite the transmit setting of this entry.
 | ||||
| 		RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry); | ||||
| 	} | ||||
| 
 | ||||
| 	pEntry->PortSecured = WPA_802_1X_PORT_SECURED; | ||||
| 	pEntry->Sst = SST_ASSOC; | ||||
| 	pEntry->AuthState = AS_AUTH_OPEN; | ||||
| 	pEntry->AuthMode = pAd->StaCfg.AuthMode; | ||||
| 	pEntry->WepStatus = pAd->StaCfg.WepStatus; | ||||
| 
 | ||||
| 	NdisReleaseSpinLock(&pAd->MacTabLock); | ||||
| 
 | ||||
|     { | ||||
|         union iwreq_data    wrqu; | ||||
|         wext_notify_event_assoc(pAd); | ||||
| 
 | ||||
|         memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); | ||||
|         memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN); | ||||
|         wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); | ||||
| 
 | ||||
|     } | ||||
| 	return TRUE; | ||||
| } | ||||
| #endif /* RT2870 */ | ||||
|  | ||||
| @ -188,6 +188,38 @@ VOID MlmeCntlMachinePerformAction( | ||||
| 				pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; | ||||
| 			} | ||||
| 			break; | ||||
| #ifdef RT2870 | ||||
| 		//
 | ||||
| 		// This state is for that we want to connect to an AP but
 | ||||
| 		// it didn't find on BSS List table. So we need to scan the air first,
 | ||||
| 		// after that we can try to connect to the desired AP if available.
 | ||||
| 		//
 | ||||
| 		case CNTL_WAIT_SCAN_FOR_CONNECT: | ||||
| 			if(Elem->MsgType == MT2_SCAN_CONF) | ||||
| 			{ | ||||
| 				// Resume TxRing after SCANING complete. We hope the out-of-service time
 | ||||
| 				// won't be too long to let upper layer time-out the waiting frames
 | ||||
| 				RTMPResumeMsduTransmission(pAd); | ||||
| #ifdef CCX_SUPPORT | ||||
| 				if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) | ||||
| 				{ | ||||
| 					// Cisco scan request is finished, prepare beacon report
 | ||||
| 					MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_DONE, 0, NULL); | ||||
| 				} | ||||
| #endif // CCX_SUPPORT //
 | ||||
| 				pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE; | ||||
| 
 | ||||
| 				//
 | ||||
| 				// Check if we can connect to.
 | ||||
| 				//
 | ||||
| 				BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen); | ||||
| 				if (pAd->MlmeAux.SsidBssTab.BssNr > 0) | ||||
| 				{ | ||||
| 					MlmeAutoReconnectLastSSID(pAd); | ||||
| 				} | ||||
| 			} | ||||
| 			break; | ||||
| #endif // RT2870 //
 | ||||
| 		default: | ||||
| 			DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", Elem->MsgType)); | ||||
| 			break; | ||||
| @ -309,9 +341,11 @@ VOID CntlOidSsidProc( | ||||
| 	MLME_DISASSOC_REQ_STRUCT   DisassocReq; | ||||
| 	ULONG					   Now; | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	// BBP and RF are not accessible in PS mode, we has to wake them up first
 | ||||
| 	if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) | ||||
| 		AsicForceWakeup(pAd, RTMP_HALT); | ||||
| #endif | ||||
| 
 | ||||
| 	// Step 1. record the desired user settings to MlmeAux
 | ||||
| 	NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID); | ||||
| @ -1024,6 +1058,44 @@ VOID CntlWaitReassocProc( | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| VOID	AdhocTurnOnQos( | ||||
| 	IN  PRTMP_ADAPTER pAd) | ||||
| { | ||||
| #define AC0_DEF_TXOP		0 | ||||
| #define AC1_DEF_TXOP		0 | ||||
| #define AC2_DEF_TXOP		94 | ||||
| #define AC3_DEF_TXOP		47 | ||||
| 
 | ||||
| 	// Turn on QOs if use HT rate.
 | ||||
| 	if (pAd->CommonCfg.APEdcaParm.bValid == FALSE) | ||||
| 	{ | ||||
| 		pAd->CommonCfg.APEdcaParm.bValid = TRUE; | ||||
| 		pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3; | ||||
| 		pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7; | ||||
| 		pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1; | ||||
| 		pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1; | ||||
| 
 | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2; | ||||
| 
 | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmax[0] = 10; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmax[1] = 6; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4; | ||||
| 		pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3; | ||||
| 
 | ||||
| 		pAd->CommonCfg.APEdcaParm.Txop[0]  = 0; | ||||
| 		pAd->CommonCfg.APEdcaParm.Txop[1]  = 0; | ||||
| 		pAd->CommonCfg.APEdcaParm.Txop[2]  = AC2_DEF_TXOP; | ||||
| 		pAd->CommonCfg.APEdcaParm.Txop[3]  = AC3_DEF_TXOP; | ||||
| 	} | ||||
| 	AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); | ||||
| } | ||||
| #endif /* RT2870 */ | ||||
| 
 | ||||
| /*
 | ||||
| 	========================================================================== | ||||
| 	Description: | ||||
| @ -1042,12 +1114,14 @@ VOID LinkUp( | ||||
| 	UCHAR	Value = 0, idx; | ||||
| 	MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry; | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND)) | ||||
| 	{ | ||||
| 		RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_HALT); | ||||
| 		RTMPusecDelay(6000); | ||||
| 		pAd->bPCIclkOff = FALSE; | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	pEntry = &pAd->MacTab.Content[BSSID_WCID]; | ||||
| 
 | ||||
| @ -1072,6 +1146,7 @@ VOID LinkUp( | ||||
| 	//rt2860b. Don't know why need this
 | ||||
| 	SwitchBetweenWepAndCkip(pAd); | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	// Before power save before link up function, We will force use 1R.
 | ||||
| 	// So after link up, check Rx antenna # again.
 | ||||
| 	RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); | ||||
| @ -1089,12 +1164,31 @@ VOID LinkUp( | ||||
| 	} | ||||
| 	RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); | ||||
| 	pAd->StaCfg.BBPR3 = Value; | ||||
| #endif /* RT2860 */ | ||||
| 
 | ||||
| 	if (BssType == BSS_ADHOC) | ||||
| 	{ | ||||
| 		OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON); | ||||
| 		OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON); | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| 		if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth  == BW_40) && | ||||
| 			(pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE)) | ||||
| 		{ | ||||
| 			pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2; | ||||
| 		} | ||||
| 		else if ((pAd->CommonCfg.Channel > 2) && | ||||
| 				 (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth  == BW_40) && | ||||
| 				 (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW)) | ||||
| 		{ | ||||
| 			pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2; | ||||
| 		} | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 		if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) | ||||
| 			AdhocTurnOnQos(pAd); | ||||
| #endif | ||||
| 
 | ||||
| 		DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" )); | ||||
| 	} | ||||
| 	else | ||||
| @ -1129,7 +1223,9 @@ VOID LinkUp( | ||||
| 		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); | ||||
| 		Value &= (~0x20); | ||||
| 		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); | ||||
| #ifdef RT2860 | ||||
|         pAd->StaCfg.BBPR3 = Value; | ||||
| #endif | ||||
| 
 | ||||
| 		RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data); | ||||
| 		Data &= 0xfffffffe; | ||||
| @ -1164,7 +1260,9 @@ VOID LinkUp( | ||||
| 		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); | ||||
| 	    Value |= (0x20); | ||||
| 		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); | ||||
| #ifdef RT2860 | ||||
|         pAd->StaCfg.BBPR3 = Value; | ||||
| #endif | ||||
| 
 | ||||
| 		if (pAd->MACVersion == 0x28600100) | ||||
| 		{ | ||||
| @ -1194,7 +1292,9 @@ VOID LinkUp( | ||||
| 		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value); | ||||
| 		Value &= (~0x20); | ||||
| 		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value); | ||||
| #ifdef RT2860 | ||||
|         pAd->StaCfg.BBPR3 = Value; | ||||
| #endif | ||||
| 
 | ||||
| 		if (pAd->MACVersion == 0x28600100) | ||||
| 		{ | ||||
| @ -1384,7 +1484,9 @@ VOID LinkUp( | ||||
| 			IV |= (pAd->StaCfg.DefaultKeyId << 30); | ||||
| 			AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0); | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 			RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); | ||||
| #endif | ||||
| 		} | ||||
| 		// NOTE:
 | ||||
| 		// the decision of using "short slot time" or not may change dynamically due to
 | ||||
| @ -1465,9 +1567,14 @@ VOID LinkUp( | ||||
| 		{ | ||||
| 			pAd->IndicateMediaState = NdisMediaStateConnected; | ||||
| 			pAd->ExtraInfo = GENERAL_LINK_UP; | ||||
| #ifdef RT2870 | ||||
| 			RTMP_IndicateMediaState(pAd); | ||||
| #endif | ||||
| 		} | ||||
|         // --
 | ||||
| #ifdef RT2860 | ||||
| 		RTMP_IndicateMediaState(pAd); | ||||
| #endif | ||||
| 
 | ||||
| 		// Add BSSID in my MAC Table.
 | ||||
|         NdisAcquireSpinLock(&pAd->MacTabLock); | ||||
| @ -1478,6 +1585,9 @@ VOID LinkUp( | ||||
| 		pAd->MacTab.Size = 1;	// infra mode always set MACtab size =1.
 | ||||
| 		pAd->MacTab.Content[BSSID_WCID].Sst = SST_ASSOC; | ||||
| 		pAd->MacTab.Content[BSSID_WCID].AuthState = SST_ASSOC; | ||||
| #ifdef RT30xx | ||||
| 		pAd->MacTab.Content[BSSID_WCID].AuthMode = pAd->StaCfg.AuthMode; | ||||
| #endif | ||||
| 		pAd->MacTab.Content[BSSID_WCID].WepStatus = pAd->StaCfg.WepStatus; | ||||
|         NdisReleaseSpinLock(&pAd->MacTabLock); | ||||
| 
 | ||||
| @ -1601,8 +1711,15 @@ VOID LinkUp( | ||||
| 	// Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable
 | ||||
| 	//
 | ||||
| 	// if 1. Legacy AP WMM on,  or 2. 11n AP, AMPDU disable.  Force turn off burst no matter what bEnableTxBurst is.
 | ||||
| #ifdef RT30xx | ||||
| 	if (!((pAd->CommonCfg.RxStream == 1)&&(pAd->CommonCfg.TxStream == 1)) && | ||||
| 		(((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) | ||||
| 		|| ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))) | ||||
| #endif | ||||
| #ifndef RT30xx | ||||
| 	if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))) | ||||
| 		|| ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE))) | ||||
| #endif | ||||
| 	{ | ||||
| 		RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data); | ||||
| 		Data  &= 0xFFFFFF00; | ||||
| @ -1684,7 +1801,9 @@ VOID LinkUp( | ||||
| 	} | ||||
| 
 | ||||
| 	RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); | ||||
| #ifdef RT2860 | ||||
| 	RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
| @ -1717,17 +1836,21 @@ VOID LinkDown( | ||||
| 	IN  BOOLEAN      IsReqFromAP) | ||||
| { | ||||
| 	UCHAR			    i, ByteValue = 0; | ||||
| #ifdef RT2860 | ||||
| 	BOOLEAN		Cancelled; | ||||
| #endif | ||||
| 
 | ||||
| 	// Do nothing if monitor mode is on
 | ||||
| 	if (MONITOR_ON(pAd)) | ||||
| 		return; | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); | ||||
| 	RTMPCancelTimer(&pAd->Mlme.PsPollTimer,		&Cancelled); | ||||
| 
 | ||||
| 	// Not allow go to sleep within linkdown function.
 | ||||
| 	RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); | ||||
| #endif | ||||
| 
 | ||||
|     if (pAd->CommonCfg.bWirelessEvent) | ||||
| 	{ | ||||
| @ -1737,6 +1860,7 @@ VOID LinkDown( | ||||
| 	DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n")); | ||||
| 	OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED); | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
|     if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) | ||||
|     { | ||||
| 	    BOOLEAN Cancelled; | ||||
| @ -1753,6 +1877,7 @@ VOID LinkDown( | ||||
|     } | ||||
| 
 | ||||
|     pAd->bPCIclkOff = FALSE; | ||||
| #endif | ||||
| 	if (ADHOC_ON(pAd))		// Adhoc mode link down
 | ||||
| 	{ | ||||
| 		DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n")); | ||||
| @ -1898,13 +2023,18 @@ VOID LinkDown( | ||||
| 	// Update extra information to link is up
 | ||||
| 	pAd->ExtraInfo = GENERAL_LINK_DOWN; | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
|     pAd->StaCfg.AdhocBOnlyJoined = FALSE; | ||||
| 	pAd->StaCfg.AdhocBGJoined = FALSE; | ||||
| 	pAd->StaCfg.Adhoc20NJoined = FALSE; | ||||
| #endif | ||||
|     pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE; | ||||
| 
 | ||||
| 	// Reset the Current AP's IP address
 | ||||
| 	NdisZeroMemory(pAd->StaCfg.AironetIPAddress, 4); | ||||
| #ifdef RT2870 | ||||
| 	pAd->bUsbTxBulkAggre = FALSE; | ||||
| #endif // RT2870 //
 | ||||
| 
 | ||||
| 	// Clean association information
 | ||||
| 	NdisZeroMemory(&pAd->StaCfg.AssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION)); | ||||
| @ -1960,14 +2090,32 @@ VOID LinkDown( | ||||
| 	RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x1fff); | ||||
| 	RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS); | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	// Allow go to sleep after linkdown steps.
 | ||||
| 	RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP); | ||||
| #endif | ||||
| 
 | ||||
| 	{ | ||||
| 		union iwreq_data    wrqu; | ||||
| 		memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN); | ||||
| 		wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL); | ||||
| 	} | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| 	if (IS_RT3090(pAd)) | ||||
| 	{ | ||||
| 		UINT32				macdata; | ||||
| 		// disable MMPS BBP control register
 | ||||
| 		RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &ByteValue); | ||||
| 		ByteValue &= ~(0x04);	//bit 2
 | ||||
| 		RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, ByteValue); | ||||
| 
 | ||||
| 		// disable MMPS MAC control register
 | ||||
| 		RTMP_IO_READ32(pAd, 0x1210, &macdata); | ||||
| 		macdata &= ~(0x09);	//bit 0, 3
 | ||||
| 		RTMP_IO_WRITE32(pAd, 0x1210, macdata); | ||||
| 	} | ||||
| #endif // RT30xx //
 | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
| @ -2173,21 +2321,61 @@ VOID AuthParmFill( | ||||
| 
 | ||||
| 	========================================================================== | ||||
|  */ | ||||
| 
 | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| 
 | ||||
| VOID MlmeCntlConfirm( | ||||
| 	IN PRTMP_ADAPTER pAd, | ||||
| 	IN ULONG MsgType, | ||||
| 	IN USHORT Msg) | ||||
| { | ||||
| 	MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| VOID ComposePsPoll( | ||||
| 	IN PRTMP_ADAPTER pAd) | ||||
| { | ||||
| #ifdef RT2870 | ||||
| 	PTXINFO_STRUC		pTxInfo; | ||||
| 	PTXWI_STRUC		pTxWI; | ||||
| 
 | ||||
| 	DBGPRINT(RT_DEBUG_TRACE, ("ComposePsPoll\n")); | ||||
| #endif | ||||
| 	NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| 	pAd->PsPollFrame.FC.PwrMgmt = 0; | ||||
| #endif | ||||
| 	pAd->PsPollFrame.FC.Type = BTYPE_CNTL; | ||||
| 	pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL; | ||||
| 	pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000; | ||||
| 	COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid); | ||||
| 	COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress); | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| 	RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0], 100); | ||||
| 	pTxInfo = (PTXINFO_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0]; | ||||
| 	RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(PSPOLL_FRAME)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE,  FALSE); | ||||
| 	pTxWI = (PTXWI_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE]; | ||||
| 	RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(PSPOLL_FRAME)), | ||||
| 		0,  0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); | ||||
| 	RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->PsPollFrame, sizeof(PSPOLL_FRAME)); | ||||
| 	// Append 4 extra zero bytes.
 | ||||
| 	pAd->PsPollContext.BulkOutSize =  TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| // IRQL = DISPATCH_LEVEL
 | ||||
| VOID ComposeNullFrame( | ||||
| 	IN PRTMP_ADAPTER pAd) | ||||
| { | ||||
| #ifdef RT2870 | ||||
| 	PTXINFO_STRUC		pTxInfo; | ||||
| 	PTXWI_STRUC		pTxWI; | ||||
| #endif | ||||
| 
 | ||||
| 	NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11)); | ||||
| 	pAd->NullFrame.FC.Type = BTYPE_DATA; | ||||
| 	pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC; | ||||
| @ -2195,6 +2383,16 @@ VOID ComposeNullFrame( | ||||
| 	COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid); | ||||
| 	COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress); | ||||
| 	COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid); | ||||
| #ifdef RT2870 | ||||
| 	RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[0], 100); | ||||
| 	pTxInfo = (PTXINFO_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[0]; | ||||
| 	RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE,  FALSE); | ||||
| 	pTxWI = (PTXWI_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE]; | ||||
| 	RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)), | ||||
| 		0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit); | ||||
| 	RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11)); | ||||
| 	pAd->NullContext.BulkOutSize =  TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4; | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
|  | ||||
| @ -74,6 +74,7 @@ VOID STARxEAPOLFrameIndicate( | ||||
| 
 | ||||
|                     if (pAd->StaCfg.DesireSharedKey[idx].KeyLen > 0) | ||||
|     				{ | ||||
| #ifdef RT2860 | ||||
| 						MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[BSSID_WCID]; | ||||
| 
 | ||||
| 						// Set key material and cipherAlg to Asic
 | ||||
| @ -87,6 +88,32 @@ VOID STARxEAPOLFrameIndicate( | ||||
| 
 | ||||
|                         pAd->IndicateMediaState = NdisMediaStateConnected; | ||||
|                         pAd->ExtraInfo = GENERAL_LINK_UP; | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 						union | ||||
| 						{ | ||||
| 							char buf[sizeof(NDIS_802_11_WEP)+MAX_LEN_OF_KEY- 1]; | ||||
| 							NDIS_802_11_WEP keyinfo; | ||||
| 						}  WepKey; | ||||
| 						int len; | ||||
| 
 | ||||
| 
 | ||||
| 						NdisZeroMemory(&WepKey, sizeof(WepKey)); | ||||
| 						len =pAd->StaCfg.DesireSharedKey[idx].KeyLen; | ||||
| 
 | ||||
| 						NdisMoveMemory(WepKey.keyinfo.KeyMaterial, | ||||
| 							pAd->StaCfg.DesireSharedKey[idx].Key, | ||||
| 							pAd->StaCfg.DesireSharedKey[idx].KeyLen); | ||||
| 
 | ||||
| 						WepKey.keyinfo.KeyIndex = 0x80000000 + idx; | ||||
| 						WepKey.keyinfo.KeyLength = len; | ||||
| 						pAd->SharedKey[BSS0][idx].KeyLen =(UCHAR) (len <= 5 ? 5 : 13); | ||||
| 
 | ||||
| 						pAd->IndicateMediaState = NdisMediaStateConnected; | ||||
| 						pAd->ExtraInfo = GENERAL_LINK_UP; | ||||
| 						// need to enqueue cmd to thread
 | ||||
| 						RTUSBEnqueueCmdFromNdis(pAd, OID_802_11_ADD_WEP, TRUE, &WepKey, sizeof(WepKey.keyinfo) + len - 1); | ||||
| #endif // RT2870 //
 | ||||
| 						// For Preventing ShardKey Table is cleared by remove key procedure.
 | ||||
|     					pAd->SharedKey[BSS0][idx].CipherAlg = CipherAlg; | ||||
| 						pAd->SharedKey[BSS0][idx].KeyLen = pAd->StaCfg.DesireSharedKey[idx].KeyLen; | ||||
| @ -548,7 +575,13 @@ VOID STAHandleRxMgmtFrame( | ||||
| 	{ | ||||
| 
 | ||||
| 		// We should collect RSSI not only U2M data but also my beacon
 | ||||
| #ifdef RT30xx | ||||
| 		if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)) | ||||
| 			&& (pAd->RxAnt.EvaluatePeriod == 0)) | ||||
| #endif | ||||
| #ifndef RT30xx | ||||
| 		if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2))) | ||||
| #endif | ||||
| 		{ | ||||
| 			Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI); | ||||
| 
 | ||||
| @ -556,6 +589,18 @@ VOID STAHandleRxMgmtFrame( | ||||
| 			pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1); | ||||
| 		} | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| 		// collect rssi information for antenna diversity
 | ||||
| 		if (pAd->NicConfig2.field.AntDiversity) | ||||
| 		{ | ||||
| 			if ((pRxD->U2M) || ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)))) | ||||
| 			{ | ||||
| 					COLLECT_RX_ANTENNA_AVERAGE_RSSI(pAd, ConvertToRssi(pAd, (UCHAR)pRxWI->RSSI0, RSSI_0), 0); //Note: RSSI2 not used on RT73
 | ||||
| 					pAd->StaCfg.NumOfAvgRssiSample ++; | ||||
| 			} | ||||
| 		} | ||||
| #endif // RT30xx //
 | ||||
| 
 | ||||
| 		// First check the size, it MUST not exceed the mlme queue size
 | ||||
| 		if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE) | ||||
| 		{ | ||||
| @ -643,12 +688,14 @@ BOOLEAN STARxDoneInterruptHandle( | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 		if (RxProcessed++ > MAX_RX_PROCESS_CNT) | ||||
| 		{ | ||||
| 			// need to reschedule rx handle
 | ||||
| 			bReschedule = TRUE; | ||||
| 			break; | ||||
| 		} | ||||
| #endif | ||||
| 
 | ||||
| 		RxProcessed ++; // test
 | ||||
| 
 | ||||
| @ -738,6 +785,7 @@ BOOLEAN STARxDoneInterruptHandle( | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 	// fRTMP_PS_GO_TO_SLEEP_NOW is set if receiving beacon.
 | ||||
| 	if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW) && (INFRA_ON(pAd))) | ||||
| 	{ | ||||
| @ -745,6 +793,7 @@ BOOLEAN STARxDoneInterruptHandle( | ||||
| 		AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp); | ||||
| 		bReschedule = FALSE; | ||||
| 	} | ||||
| #endif | ||||
| 	return bReschedule; | ||||
| } | ||||
| 
 | ||||
| @ -762,7 +811,12 @@ BOOLEAN STARxDoneInterruptHandle( | ||||
| VOID	RTMPHandleTwakeupInterrupt( | ||||
| 	IN PRTMP_ADAPTER pAd) | ||||
| { | ||||
| #ifdef RT2860 | ||||
| 	AsicForceWakeup(pAd, DOT11POWERSAVE); | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 	AsicForceWakeup(pAd, FALSE); | ||||
| #endif | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
| @ -1011,7 +1065,13 @@ NDIS_STATUS STASendPacket( | ||||
| 	//
 | ||||
| 	UserPriority = 0; | ||||
| 	QueIdx		 = QID_AC_BE; | ||||
| #ifdef RT2860 | ||||
| 	if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)) | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 	if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && | ||||
| 		CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE)) | ||||
| #endif | ||||
| 	{ | ||||
| 		USHORT Protocol; | ||||
| 		UCHAR  LlcSnapLen = 0, Byte0, Byte1; | ||||
| @ -1075,7 +1135,12 @@ NDIS_STATUS STASendPacket( | ||||
| 	RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags); | ||||
| 
 | ||||
|     if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&& | ||||
| #ifdef RT2860 | ||||
|         (pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE)) | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
|         IS_HT_STA(pEntry)) | ||||
| #endif | ||||
| 	{ | ||||
| 		if (((pEntry->TXBAbitmap & (1<<UserPriority)) == 0) && | ||||
|             ((pEntry->BADeclineBitmap & (1<<UserPriority)) == 0) && | ||||
| @ -1119,14 +1184,27 @@ NDIS_STATUS STASendPacket( | ||||
| 
 | ||||
| 	======================================================================== | ||||
| */ | ||||
| 
 | ||||
| #ifdef RT2870 | ||||
| /*
 | ||||
| 	Actually, this function used to check if the TxHardware Queue still has frame need to send. | ||||
| 	If no frame need to send, go to sleep, else, still wake up. | ||||
| */ | ||||
| #endif | ||||
| NDIS_STATUS RTMPFreeTXDRequest( | ||||
| 	IN		PRTMP_ADAPTER	pAd, | ||||
| 	IN		UCHAR			QueIdx, | ||||
| 	IN		UCHAR			NumberRequired, | ||||
| 	IN		PUCHAR			FreeNumberIs) | ||||
| { | ||||
| #ifdef RT2860 | ||||
| 	ULONG		FreeNumber = 0; | ||||
| #endif | ||||
| 	NDIS_STATUS 	Status = NDIS_STATUS_FAILURE; | ||||
| #ifdef RT2870 | ||||
| 	unsigned long   IrqFlags; | ||||
| 	HT_TX_CONTEXT	*pHTTXContext; | ||||
| #endif | ||||
| 
 | ||||
| 	switch (QueIdx) | ||||
| 	{ | ||||
| @ -1135,6 +1213,7 @@ NDIS_STATUS RTMPFreeTXDRequest( | ||||
| 		case QID_AC_VI: | ||||
| 		case QID_AC_VO: | ||||
| 		case QID_HCCA: | ||||
| #ifdef RT2860 | ||||
| 			if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx) | ||||
| 				FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1; | ||||
| 			else | ||||
| @ -1142,9 +1221,27 @@ NDIS_STATUS RTMPFreeTXDRequest( | ||||
| 
 | ||||
| 			if (FreeNumber >= NumberRequired) | ||||
| 				Status = NDIS_STATUS_SUCCESS; | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 			{ | ||||
| 				pHTTXContext = &pAd->TxContext[QueIdx]; | ||||
| 				RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); | ||||
| 				if ((pHTTXContext->CurWritePosition != pHTTXContext->ENextBulkOutPosition) || | ||||
| 					(pHTTXContext->IRPPending == TRUE)) | ||||
| 				{ | ||||
| 					Status = NDIS_STATUS_FAILURE; | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| 					Status = NDIS_STATUS_SUCCESS; | ||||
| 				} | ||||
| 				RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags); | ||||
| 			} | ||||
| #endif | ||||
| 			break; | ||||
| 
 | ||||
| 		case QID_MGMT: | ||||
| #ifdef RT2860 | ||||
| 			if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx) | ||||
| 				FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1; | ||||
| 			else | ||||
| @ -1152,13 +1249,22 @@ NDIS_STATUS RTMPFreeTXDRequest( | ||||
| 
 | ||||
| 			if (FreeNumber >= NumberRequired) | ||||
| 				Status = NDIS_STATUS_SUCCESS; | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 			if (pAd->MgmtRing.TxSwFreeIdx != MGMT_RING_SIZE) | ||||
| 				Status = NDIS_STATUS_FAILURE; | ||||
| 			else | ||||
| 				Status = NDIS_STATUS_SUCCESS; | ||||
| #endif | ||||
| 			break; | ||||
| 
 | ||||
| 		default: | ||||
| 			DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx)); | ||||
| 			break; | ||||
| 	} | ||||
| #ifdef RT2860 | ||||
| 	*FreeNumberIs = (UCHAR)FreeNumber; | ||||
| #endif | ||||
| 
 | ||||
| 	return (Status); | ||||
| } | ||||
| @ -1689,7 +1795,9 @@ VOID STA_AMPDU_Frame_Tx( | ||||
| 		//
 | ||||
| 		// Kick out Tx
 | ||||
| 		//
 | ||||
| #ifdef RT2860 | ||||
| 		if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) | ||||
| #endif | ||||
| 			HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); | ||||
| 
 | ||||
| 		pAd->RalinkCounters.KickTxCount++; | ||||
| @ -1820,7 +1928,9 @@ VOID STA_AMSDU_Frame_Tx( | ||||
| 	//
 | ||||
| 	// Kick out Tx
 | ||||
| 	//
 | ||||
| #ifdef RT2860 | ||||
| 	if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) | ||||
| #endif | ||||
| 		HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); | ||||
| } | ||||
| 
 | ||||
| @ -1940,7 +2050,9 @@ VOID STA_Legacy_Frame_Tx( | ||||
| 	//
 | ||||
| 	// Kick out Tx
 | ||||
| 	//
 | ||||
| #ifdef RT2860 | ||||
| 	if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) | ||||
| #endif | ||||
| 		HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); | ||||
| } | ||||
| 
 | ||||
| @ -2051,7 +2163,9 @@ VOID STA_ARalink_Frame_Tx( | ||||
| 	//
 | ||||
| 	// Kick out Tx
 | ||||
| 	//
 | ||||
| #ifdef RT2860 | ||||
| 	if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX)) | ||||
| #endif | ||||
| 		HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx); | ||||
| 
 | ||||
| } | ||||
| @ -2320,7 +2434,12 @@ NDIS_STATUS STAHardTransmit( | ||||
| 	if ((pAd->StaCfg.Psm == PWR_SAVE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) | ||||
| 	{ | ||||
| 	    DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicForceWakeup At HardTx\n")); | ||||
| #ifdef RT2860 | ||||
| 		AsicForceWakeup(pAd, FROM_TX); | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 		AsicForceWakeup(pAd, TRUE); | ||||
| #endif | ||||
| 	} | ||||
| 
 | ||||
| 	// It should not change PSM bit, when APSD turn on.
 | ||||
|  | ||||
| @ -37,6 +37,7 @@ | ||||
| */ | ||||
| #include "../rt_config.h" | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| #define AC0_DEF_TXOP		0 | ||||
| #define AC1_DEF_TXOP		0 | ||||
| #define AC2_DEF_TXOP		94 | ||||
| @ -71,6 +72,10 @@ VOID	AdhocTurnOnQos( | ||||
| 	} | ||||
| 	AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm); | ||||
| } | ||||
| #endif /* RT2860 */ | ||||
| #ifdef RT2870 | ||||
| #define ADHOC_ENTRY_BEACON_LOST_TIME	(2*OS_HZ)	// 2 sec
 | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
| 	========================================================================== | ||||
| @ -226,6 +231,7 @@ VOID MlmeScanReqAction( | ||||
| 	// Increase the scan retry counters.
 | ||||
| 	pAd->StaCfg.ScanCnt++; | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
|     if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && | ||||
|         (IDLE_ON(pAd)) && | ||||
| 		(pAd->StaCfg.bRadio == TRUE) && | ||||
| @ -233,6 +239,7 @@ VOID MlmeScanReqAction( | ||||
| 	{ | ||||
| 		RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	// first check the parameter sanity
 | ||||
| 	if (MlmeScanReqSanity(pAd, | ||||
| @ -345,6 +352,7 @@ VOID MlmeJoinReqAction( | ||||
| 
 | ||||
| 	DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx)); | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
|     if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) && | ||||
|         (IDLE_ON(pAd)) && | ||||
| 		(pAd->StaCfg.bRadio == TRUE) && | ||||
| @ -352,6 +360,7 @@ VOID MlmeJoinReqAction( | ||||
| 	{ | ||||
| 		RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE); | ||||
| 	} | ||||
| #endif | ||||
| 
 | ||||
| 	// reset all the timers
 | ||||
| 	RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled); | ||||
| @ -1107,6 +1116,10 @@ VOID PeerBeacon( | ||||
| 			// Add the safeguard against the mismatch of adhoc wep status
 | ||||
| 			if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus) | ||||
| 			{ | ||||
| #ifdef RT30xx | ||||
| 				DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Not matched wep status %d %d\n", pAd->StaCfg.WepStatus, pAd->ScanTab.BssEntry[Bssidx].WepStatus)); | ||||
| 				DBGPRINT(RT_DEBUG_TRACE, ("bssid=%s\n", pAd->ScanTab.BssEntry[Bssidx].Bssid)); | ||||
| #endif | ||||
| 				return; | ||||
| 			} | ||||
| 
 | ||||
| @ -1170,11 +1183,14 @@ VOID PeerBeacon( | ||||
| 				pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault; | ||||
| 			} | ||||
| 
 | ||||
| #ifdef RT2860 | ||||
| 			// at least one 11b peer joined. downgrade the MaxTxRate to 11Mbps
 | ||||
| 			// after last 11b peer left for several seconds, we'll auto switch back to 11G rate
 | ||||
| 			// in MlmePeriodicExec()
 | ||||
| #endif | ||||
| 			if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo))) | ||||
| 			{ | ||||
| #ifdef RT2860 | ||||
| 				BOOLEAN	bRestart; | ||||
|                 BOOLEAN	bnRestart; | ||||
| 
 | ||||
| @ -1359,6 +1375,79 @@ VOID PeerBeacon( | ||||
| 						} | ||||
| 					} | ||||
| 				} | ||||
| #endif /* RT2860 */ | ||||
| #ifdef RT2870 | ||||
| 				UCHAR			MaxSupportedRateIn500Kbps = 0; | ||||
| 				UCHAR			idx; | ||||
| 				MAC_TABLE_ENTRY *pEntry; | ||||
| 
 | ||||
| 				// supported rates array may not be sorted. sort it and find the maximum rate
 | ||||
| 			    for (idx=0; idx<SupRateLen; idx++) | ||||
| 			    { | ||||
| 			        if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f)) | ||||
| 			            MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f; | ||||
| 			    } | ||||
| 
 | ||||
| 				for (idx=0; idx<ExtRateLen; idx++) | ||||
| 			    { | ||||
| 			        if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f)) | ||||
| 			            MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f; | ||||
| 			    } | ||||
| 
 | ||||
| 				// look up the existing table
 | ||||
| 				pEntry = MacTableLookup(pAd, Addr2); | ||||
| 
 | ||||
| 				// Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon.
 | ||||
| 				// To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station.
 | ||||
| 				if ((ADHOC_ON(pAd) && (Elem->Wcid == RESERVED_WCID)) || | ||||
| 					(pEntry && ((pEntry->LastBeaconRxTime + ADHOC_ENTRY_BEACON_LOST_TIME) < Now))) | ||||
| 				{ | ||||
| 					if (pEntry == NULL) | ||||
| 						// Another adhoc joining, add to our MAC table.
 | ||||
| 						pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE); | ||||
| 
 | ||||
| 					if (StaAddMacTableEntry(pAd, pEntry, MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo) == FALSE) | ||||
| 					{ | ||||
| 						DBGPRINT(RT_DEBUG_TRACE, ("ADHOC - Add Entry failed.\n")); | ||||
| 						return; | ||||
| 					} | ||||
| 
 | ||||
| 					if (pEntry && | ||||
| 						(Elem->Wcid == RESERVED_WCID)) | ||||
| 					{ | ||||
| 						idx = pAd->StaCfg.DefaultKeyId; | ||||
| 						RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry); | ||||
| 					} | ||||
| 				} | ||||
| 
 | ||||
| 				if (pEntry && pEntry->ValidAsCLI) | ||||
| 					pEntry->LastBeaconRxTime = Now; | ||||
| 
 | ||||
| 				// At least another peer in this IBSS, declare MediaState as CONNECTED
 | ||||
| 				if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)) | ||||
| 				{ | ||||
| 					OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED); | ||||
| 
 | ||||
| 					pAd->IndicateMediaState = NdisMediaStateConnected; | ||||
| 					RTMP_IndicateMediaState(pAd); | ||||
| 	                pAd->ExtraInfo = GENERAL_LINK_UP; | ||||
| 					AsicSetBssid(pAd, pAd->CommonCfg.Bssid); | ||||
| 
 | ||||
| 					// 2003/03/12 - john
 | ||||
| 					// Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that
 | ||||
| 					// "site survey" result should always include the current connected network.
 | ||||
| 					//
 | ||||
| 					Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel); | ||||
| 					if (Bssidx == BSS_NOT_FOUND) | ||||
| 					{ | ||||
| 						Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod, | ||||
| 									&CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability, | ||||
| 									&AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0, | ||||
| 									&EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE); | ||||
| 					} | ||||
| 					DBGPRINT(RT_DEBUG_TRACE, ("ADHOC  fOP_STATUS_MEDIA_STATE_CONNECTED.\n")); | ||||
| 				} | ||||
| #endif /* RT2870 */ | ||||
| 			} | ||||
| 
 | ||||
| 			if (INFRA_ON(pAd)) | ||||
| @ -1447,10 +1536,12 @@ VOID PeerBeacon( | ||||
| 				//  5. otherwise, put PHY back to sleep to save battery.
 | ||||
| 				if (MessageToMe) | ||||
| 				{ | ||||
| #ifdef RT2860 | ||||
| 					if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) | ||||
| 					{ | ||||
| 						RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); | ||||
| 					} | ||||
| #endif | ||||
| 					if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable && | ||||
| 						pAd->CommonCfg.bAPSDAC_BE && pAd->CommonCfg.bAPSDAC_BK && pAd->CommonCfg.bAPSDAC_VI && pAd->CommonCfg.bAPSDAC_VO) | ||||
| 					{ | ||||
| @ -1461,10 +1552,12 @@ VOID PeerBeacon( | ||||
| 				} | ||||
| 				else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM)) | ||||
| 				{ | ||||
| #ifdef RT2860 | ||||
| 					if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) | ||||
| 					{ | ||||
| 						RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); | ||||
| 					} | ||||
| #endif | ||||
| 				} | ||||
| 				else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0)													|| | ||||
| 						(pAd->TxSwQueue[QID_AC_BE].Number != 0)														|| | ||||
| @ -1478,10 +1571,12 @@ VOID PeerBeacon( | ||||
| 				{ | ||||
| 					// TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme
 | ||||
| 					// can we cheat here (i.e. just check MGMT & AC_BE) for better performance?
 | ||||
| #ifdef RT2860 | ||||
| 					if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) | ||||
| 					{ | ||||
| 						RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3); | ||||
| 					} | ||||
| #endif | ||||
| 				} | ||||
| 				else | ||||
| 				{ | ||||
| @ -1496,9 +1591,14 @@ VOID PeerBeacon( | ||||
| 
 | ||||
| 					if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)) | ||||
| 					{ | ||||
| #ifdef RT2860 | ||||
| 						// Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode.
 | ||||
| 						RTMP_SET_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW); | ||||
| 						pAd->ThisTbttNumToNextWakeUp = TbttNumToNextWakeUp; | ||||
| #endif | ||||
| #ifdef RT2870 | ||||
| 						AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp); | ||||
| #endif | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
|  | ||||
| @ -1384,10 +1384,12 @@ VOID	WpaGroupMsg1Action( | ||||
| 			pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; | ||||
| 		else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) | ||||
| 			pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; | ||||
| #ifndef RT30xx | ||||
| 		else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) | ||||
| 			pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64; | ||||
| 		else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) | ||||
| 			pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128; | ||||
| #endif | ||||
| 
 | ||||
|     	//hex_dump("Group Key :", pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, LEN_TKIP_EK);
 | ||||
| 	} | ||||
| @ -1764,7 +1766,12 @@ BOOLEAN ParseKeyData( | ||||
| 	// Get GTK length - refer to IEEE 802.11i-2004 p.82
 | ||||
| 	GTKLEN = pKDE->Len -6; | ||||
| 
 | ||||
| #ifdef RT30xx | ||||
| 	if (GTKLEN < LEN_AES_KEY) | ||||
| #endif | ||||
| #ifndef RT30xx | ||||
| 	if (GTKLEN < MIN_LEN_OF_GTK) | ||||
| #endif | ||||
| 	{ | ||||
| 		DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN)); | ||||
|         return FALSE; | ||||
| @ -1790,10 +1797,12 @@ BOOLEAN ParseKeyData( | ||||
| 		pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP; | ||||
| 	else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled) | ||||
| 		pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES; | ||||
| #ifndef RT30xx | ||||
| 	else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled) | ||||
| 		pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64; | ||||
| 	else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled) | ||||
| 		pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128; | ||||
| #endif | ||||
| 
 | ||||
| 	return TRUE; | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user