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

📄 cmm_asic.c

📁 ralink 2870 usb无线网卡 最新驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
			// STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta			if (STA_TGN_WIFI_ON(pAd) && 				pEdcaParm->Aifsn[QID_AC_VI] == 10)			{				Ac0Cfg.field.Aifsn = 3;				Ac2Cfg.field.AcTxop = 5;			}					}#endif // CONFIG_STA_SUPPORT //		Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO];		Ac3Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VO];		Ac3Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VO];		Ac3Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VO];//#ifdef WIFI_TEST		if (pAd->CommonCfg.bWiFiTest)		{			if (Ac3Cfg.field.AcTxop == 102)			{			Ac0Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BE] ? pEdcaParm->Txop[QID_AC_BE] : 10;				Ac0Cfg.field.Aifsn  = pEdcaParm->Aifsn[QID_AC_BE]-1; /* AIFSN must >= 1 */			Ac1Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_BK];				Ac1Cfg.field.Aifsn  = pEdcaParm->Aifsn[QID_AC_BK];			Ac2Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VI];			} /* End of if */		}//#endif // WIFI_TEST //		RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Ac0Cfg.word);		RTMP_IO_WRITE32(pAd, EDCA_AC1_CFG, Ac1Cfg.word);		RTMP_IO_WRITE32(pAd, EDCA_AC2_CFG, Ac2Cfg.word);		RTMP_IO_WRITE32(pAd, EDCA_AC3_CFG, Ac3Cfg.word);		//========================================================		//      DMA Register has a copy too.		//========================================================		csr0.field.Ac0Txop = Ac0Cfg.field.AcTxop;		csr0.field.Ac1Txop = Ac1Cfg.field.AcTxop;		RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word);		csr1.field.Ac2Txop = Ac2Cfg.field.AcTxop;		csr1.field.Ac3Txop = Ac3Cfg.field.AcTxop;		RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr1.word);		CwminCsr.word = 0;		CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE];		CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK];		CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI];#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)			CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test#endif // CONFIG_STA_SUPPORT //		RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word);		CwmaxCsr.word = 0;		CwmaxCsr.field.Cwmax0 = pEdcaParm->Cwmax[QID_AC_BE];		CwmaxCsr.field.Cwmax1 = pEdcaParm->Cwmax[QID_AC_BK];		CwmaxCsr.field.Cwmax2 = pEdcaParm->Cwmax[QID_AC_VI];		CwmaxCsr.field.Cwmax3 = pEdcaParm->Cwmax[QID_AC_VO];		RTMP_IO_WRITE32(pAd, WMM_CWMAX_CFG, CwmaxCsr.word);		AifsnCsr.word = 0;		AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE];		AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK];		AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI];#ifdef INF_AMAZON_SE#endif // INF_AMAZON_SE //#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			// Tuning for Wi-Fi WMM S06			if (pAd->CommonCfg.bWiFiTest &&				pEdcaParm->Aifsn[QID_AC_VI] == 10)				AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4;			// Tuning for TGn Wi-Fi 5.2.32			// STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta			if (STA_TGN_WIFI_ON(pAd) && 				pEdcaParm->Aifsn[QID_AC_VI] == 10)			{				AifsnCsr.field.Aifsn0 = 3;				AifsnCsr.field.Aifsn2 = 7;			}			if (INFRA_ON(pAd))				CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE);		}#endif // CONFIG_STA_SUPPORT //#ifdef CONFIG_STA_SUPPORT		IF_DEV_CONFIG_OPMODE_ON_STA(pAd)		{			AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test		}#endif // CONFIG_STA_SUPPORT //		RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word);		NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM));		if (!ADHOC_ON(pAd))		{			DBGPRINT(RT_DEBUG_TRACE,("EDCA [#%d]: AIFSN CWmin CWmax  TXOP(us)  ACM\n", pEdcaParm->EdcaUpdateCount));			DBGPRINT(RT_DEBUG_TRACE,("     AC_BE      %2d     %2d     %2d      %4d     %d\n",									 pEdcaParm->Aifsn[0],									 pEdcaParm->Cwmin[0],									 pEdcaParm->Cwmax[0],									 pEdcaParm->Txop[0]<<5,									 pEdcaParm->bACM[0]));			DBGPRINT(RT_DEBUG_TRACE,("     AC_BK      %2d     %2d     %2d      %4d     %d\n",									 pEdcaParm->Aifsn[1],									 pEdcaParm->Cwmin[1],									 pEdcaParm->Cwmax[1],									 pEdcaParm->Txop[1]<<5,									 pEdcaParm->bACM[1]));			DBGPRINT(RT_DEBUG_TRACE,("     AC_VI      %2d     %2d     %2d      %4d     %d\n",									 pEdcaParm->Aifsn[2],									 pEdcaParm->Cwmin[2],									 pEdcaParm->Cwmax[2],									 pEdcaParm->Txop[2]<<5,									 pEdcaParm->bACM[2]));			DBGPRINT(RT_DEBUG_TRACE,("     AC_VO      %2d     %2d     %2d      %4d     %d\n",									 pEdcaParm->Aifsn[3],									 pEdcaParm->Cwmin[3],									 pEdcaParm->Cwmax[3],									 pEdcaParm->Txop[3]<<5,									 pEdcaParm->bACM[3]));		}	}}/*	==========================================================================	Description:	IRQL = PASSIVE_LEVEL	IRQL = DISPATCH_LEVEL		========================================================================== */VOID 	AsicSetSlotTime(	IN PRTMP_ADAPTER pAd,	IN BOOLEAN bUseShortSlotTime) {	ULONG	SlotTime;	UINT32	RegValue = 0;#ifdef CONFIG_STA_SUPPORT	if (pAd->CommonCfg.Channel > 14)		bUseShortSlotTime = TRUE;#endif // CONFIG_STA_SUPPORT //	if (bUseShortSlotTime && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED))		return;	else if ((!bUseShortSlotTime) && (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED)))		return;	if (bUseShortSlotTime)		OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED);	else		OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED);	SlotTime = (bUseShortSlotTime)? 9 : 20;#ifdef CONFIG_STA_SUPPORT	IF_DEV_CONFIG_OPMODE_ON_STA(pAd)	{		// force using short SLOT time for FAE to demo performance when TxBurst is ON		if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)))#ifdef DOT11_N_SUPPORT			|| ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE))#endif // DOT11_N_SUPPORT //			)		{			// In this case, we will think it is doing Wi-Fi test			// And we will not set to short slot when bEnableTxBurst is TRUE.		}		else if (pAd->CommonCfg.bEnableTxBurst)		{			OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED);			SlotTime = 9;		}	}#endif // CONFIG_STA_SUPPORT //	//	// For some reasons, always set it to short slot time.	// 	// ToDo: Should consider capability with 11B	//#ifdef CONFIG_STA_SUPPORT 	IF_DEV_CONFIG_OPMODE_ON_STA(pAd)	{		if (pAd->StaCfg.BssType == BSS_ADHOC)			{			OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED);			SlotTime = 20;		}	}#endif // CONFIG_STA_SUPPORT //	RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &RegValue);	RegValue = RegValue & 0xFFFFFF00;	RegValue |= SlotTime;	RTMP_IO_WRITE32(pAd, BKOFF_SLOT_CFG, RegValue);}/*	========================================================================	Description:		Add Shared key information into ASIC. 		Update shared key, TxMic and RxMic to Asic Shared key table		Update its cipherAlg to Asic Shared key Mode.		    Return:	========================================================================*/VOID AsicAddSharedKeyEntry(	IN PRTMP_ADAPTER pAd,	IN UCHAR		 BssIndex,	IN UCHAR		 KeyIdx,	IN UCHAR		 CipherAlg,	IN PUCHAR		 pKey,	IN PUCHAR		 pTxMic,	IN PUCHAR		 pRxMic){	ULONG offset; //, csr0;	SHAREDKEY_MODE_STRUC csr1;	DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx));//============================================================================================	DBGPRINT(RT_DEBUG_TRACE,("AsicAddSharedKeyEntry: %s key #%d\n", CipherName[CipherAlg], BssIndex*4 + KeyIdx));	DBGPRINT_RAW(RT_DEBUG_TRACE, (" 	Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",		pKey[0],pKey[1],pKey[2],pKey[3],pKey[4],pKey[5],pKey[6],pKey[7],pKey[8],pKey[9],pKey[10],pKey[11],pKey[12],pKey[13],pKey[14],pKey[15]));	if (pRxMic)	{		DBGPRINT_RAW(RT_DEBUG_TRACE, (" 	Rx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",			pRxMic[0],pRxMic[1],pRxMic[2],pRxMic[3],pRxMic[4],pRxMic[5],pRxMic[6],pRxMic[7]));	}	if (pTxMic)	{		DBGPRINT_RAW(RT_DEBUG_TRACE, (" 	Tx MIC Key = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",			pTxMic[0],pTxMic[1],pTxMic[2],pTxMic[3],pTxMic[4],pTxMic[5],pTxMic[6],pTxMic[7]));	}//============================================================================================	//	// fill key material - key + TX MIC + RX MIC	//#ifdef RTMP_MAC_USB{	offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE;	RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);	offset += MAX_LEN_OF_SHARE_KEY;	if (pTxMic)	{		RTUSBMultiWrite(pAd, offset, pTxMic, 8);	}	offset += 8;	if (pRxMic)	{		RTUSBMultiWrite(pAd, offset, pRxMic, 8);	}}#endif // RTMP_MAC_USB //	//	// Update cipher algorithm. WSTA always use BSS0	//	RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);	DBGPRINT(RT_DEBUG_TRACE,("Read: SHARED_KEY_MODE_BASE at this Bss[%d] KeyIdx[%d]= 0x%x \n", BssIndex,KeyIdx, csr1.word));	if ((BssIndex%2) == 0)	{		if (KeyIdx == 0)			csr1.field.Bss0Key0CipherAlg = CipherAlg;		else if (KeyIdx == 1)			csr1.field.Bss0Key1CipherAlg = CipherAlg;		else if (KeyIdx == 2)			csr1.field.Bss0Key2CipherAlg = CipherAlg;		else			csr1.field.Bss0Key3CipherAlg = CipherAlg;	}	else	{		if (KeyIdx == 0)			csr1.field.Bss1Key0CipherAlg = CipherAlg;		else if (KeyIdx == 1)			csr1.field.Bss1Key1CipherAlg = CipherAlg;		else if (KeyIdx == 2)			csr1.field.Bss1Key2CipherAlg = CipherAlg;		else			csr1.field.Bss1Key3CipherAlg = CipherAlg;	}	DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));	RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);		}//	IRQL = DISPATCH_LEVELVOID AsicRemoveSharedKeyEntry(	IN PRTMP_ADAPTER pAd,	IN UCHAR		 BssIndex,	IN UCHAR		 KeyIdx){	//ULONG SecCsr0;	SHAREDKEY_MODE_STRUC csr1;	DBGPRINT(RT_DEBUG_TRACE,("AsicRemoveSharedKeyEntry: #%d \n", BssIndex*4 + KeyIdx));	RTMP_IO_READ32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), &csr1.word);	if ((BssIndex%2) == 0)	{		if (KeyIdx == 0)			csr1.field.Bss0Key0CipherAlg = 0;		else if (KeyIdx == 1)			csr1.field.Bss0Key1CipherAlg = 0;		else if (KeyIdx == 2)			csr1.field.Bss0Key2CipherAlg = 0;		else			csr1.field.Bss0Key3CipherAlg = 0;	}	else	{		if (KeyIdx == 0)			csr1.field.Bss1Key0CipherAlg = 0;		else if (KeyIdx == 1)			csr1.field.Bss1Key1CipherAlg = 0;		else if (KeyIdx == 2)			csr1.field.Bss1Key2CipherAlg = 0;		else			csr1.field.Bss1Key3CipherAlg = 0;	}	DBGPRINT(RT_DEBUG_TRACE,("Write: SHARED_KEY_MODE_BASE at this Bss[%d] = 0x%x \n", BssIndex, csr1.word));	RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE+4*(BssIndex/2), csr1.word);	ASSERT(BssIndex < 4);	ASSERT(KeyIdx < 4);}VOID AsicUpdateWCIDAttribute(	IN PRTMP_ADAPTER pAd,	IN USHORT		WCID,	IN UCHAR		BssIndex,	IN UCHAR        CipherAlg,	IN BOOLEAN		bUsePairewiseKeyTable){	ULONG   WCIDAttri = 0, offset;	//	// Update WCID attribute.	// Only TxKey could update WCID attribute.	//	offset = MAC_WCID_ATTRIBUTE_BASE + (WCID * HW_WCID_ATTRI_SIZE);	WCIDAttri = (BssIndex << 4) | (CipherAlg << 1) | (bUsePairewiseKeyTable);	RTMP_IO_WRITE32(pAd, offset, WCIDAttri);}VOID AsicUpdateWCIDIVEIV(	IN PRTMP_ADAPTER pAd,	IN USHORT		WCID,	IN ULONG        uIV,	IN ULONG        uEIV){	ULONG	offset;	offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);	RTMP_IO_WRITE32(pAd, offset, uIV);	RTMP_IO_WRITE32(pAd, offset + 4, uEIV);}VOID AsicUpdateRxWCIDTable(	IN PRTMP_ADAPTER pAd,	IN USHORT		WCID,	IN PUCHAR        pAddr){	ULONG offset;	ULONG Addr;		offset = MAC_WCID_BASE + (WCID * HW_WCID_ENTRY_SIZE);		Addr = pAddr[0] + (pAddr[1] << 8) +(pAddr[2] << 16) +(pAddr[3] << 24);	RTMP_IO_WRITE32(pAd, offset, Addr);	Addr = pAddr[4] + (pAddr[5] << 8);	RTMP_IO_WRITE32(pAd, offset + 4, Addr);	}	/*    ========================================================================    Routine Description:        Set Cipher Key, Cipher algorithm, IV/EIV to Asic    Arguments:        pAd                     Pointer to our adapter        WCID                    WCID Entry number.        BssIndex                BSSID index, station or none multiple BSSID support                                 this value should be 0.        KeyIdx                  This KeyIdx will set to IV's KeyID if bTxKey enabled        pCipherKey              Pointer to Cipher Key.        bUsePairewiseKeyTable   TRUE means saved the key in SharedKey table,                                 otherwise PairewiseKey table        bTxKey                  This is the transmit key if enabled.    Return Value:        None     Note:        This routine will set the relative key stuff to Asic including WCID attribute,        Cipher Key, Cipher algorithm and IV/EIV.        IV/EIV will be update if this CipherKey is the transmission key because         ASIC will base on IV's KeyID value to select Cipher Key.        If bTxKey sets to FALSE, this is not the TX key, but it could be         RX key    	For AP mode bTxKey must be always set to TRUE.    ============================================================

⌨️ 快捷键说明

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