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

📄 rtmp_main.c

📁 r73模块的无线网卡在Linux下的驱动程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			case OID_802_11_NETWORK_TYPE_IN_USE:			{				NDIS_802_11_NETWORK_TYPE	NetType = *(PNDIS_802_11_NETWORK_TYPE)(cmdqelmt->buffer);				if (NetType == Ndis802_11DS)					RTMPSetPhyMode(pAd, PHY_11B);				else if (NetType == Ndis802_11OFDM24)					RTMPSetPhyMode(pAd, PHY_11BG_MIXED);				else if (NetType == Ndis802_11OFDM5)					RTMPSetPhyMode(pAd, PHY_11A);				else					NdisStatus = NDIS_STATUS_FAILURE;				DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_NETWORK_TYPE_IN_USE (=%d)\n",NetType);            }            break;			case RT_OID_802_11_PHY_MODE:				{					ULONG	phymode = *(ULONG *)(cmdqelmt->buffer);					RTMPSetPhyMode(pAd, phymode);					DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::RT_OID_802_11_SET_PHY_MODE (=%d)\n", phymode);				}			break;#if 0			case OID_802_11_WEP_STATUS:				{					USHORT	Value;					NDIS_802_11_WEP_STATUS	WepStatus = *(PNDIS_802_11_WEP_STATUS)pData;					DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::66- OID_802_11_WEP_STATUS  \n");			break;					if (pAd->PortCfg.WepStatus != WepStatus)					{						DBGPRINT(RT_DEBUG_ERROR, "Config Changed !!status= %x  \n", WepStatus);						// Config has changed						pAd->bConfigChanged = TRUE;					}					pAd->PortCfg.WepStatus   = WepStatus;					pAd->PortCfg.PairCipher  = WepStatus;				    pAd->PortCfg.GroupCipher = WepStatus;#if 1					if ((WepStatus == Ndis802_11Encryption1Enabled) &&						(pAd->SharedKey[pAd->PortCfg.DefaultKeyId].KeyLen != 0))					{						if (pAd->SharedKey[pAd->PortCfg.DefaultKeyId].KeyLen <= 5)						{							DBGPRINT(RT_DEBUG_ERROR, "WEP64!  \n");							pAd->SharedKey[pAd->PortCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64;						}						else						{							DBGPRINT(RT_DEBUG_ERROR, "WEP128!  \n");							pAd->SharedKey[pAd->PortCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128;						}#if 0						RTUSBReadMACRegister_old(pAd, TXRX_CSR0, &Value);						Value &= 0xfe00;						Value |= ((LENGTH_802_11 << 3) | (pAd->PortCfg.CipherAlg));						RTUSBWriteMACRegister_old(pAd, TXRX_CSR0, Value);#endif					}					else if (WepStatus == Ndis802_11Encryption2Enabled)					{						DBGPRINT(RT_DEBUG_ERROR, " TKIP !!!  \n");						pAd->SharedKey[pAd->PortCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP;#if 0						RTUSBReadMACRegister_old(pAd, TXRX_CSR0, &Value);						Value &= 0xfe00;						Value |= ((LENGTH_802_11 << 3) | (pAd->PortCfg.CipherAlg));						RTUSBWriteMACRegister_old(pAd, TXRX_CSR0, Value);#endif					}					else if (WepStatus == Ndis802_11Encryption3Enabled)					{						DBGPRINT(RT_DEBUG_ERROR, " AES  !!!  \n");						pAd->SharedKey[pAd->PortCfg.DefaultKeyId].CipherAlg = CIPHER_AES;#if 0						RTUSBReadMACRegister_old(pAd, TXRX_CSR0, &Value);						Value &= 0xfe00;						Value |= ((LENGTH_802_11 << 3) | (pAd->PortCfg.CipherAlg));						RTUSBWriteMACRegister_old(pAd, TXRX_CSR0, Value);#endif					}					else if (WepStatus == Ndis802_11EncryptionDisabled)					{						DBGPRINT(RT_DEBUG_ERROR, " CIPHER_NONE  !!!  \n");						pAd->SharedKey[pAd->PortCfg.DefaultKeyId].CipherAlg = CIPHER_NONE;#if 0						RTUSBReadMACRegister_old(pAd, TXRX_CSR0, &Value);						Value &= 0xfe00;						RTUSBWriteMACRegister_old(pAd, TXRX_CSR0, Value);#endif					}else					{						DBGPRINT(RT_DEBUG_ERROR, " ERROR Cipher   !!!  \n");					}#endif				}			break;#endif			case OID_802_11_ADD_WEP:			{				ULONG	KeyIdx;				PNDIS_802_11_WEP	pWepKey;				DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_ADD_WEP\n");				pWepKey = (PNDIS_802_11_WEP)pData;				KeyIdx = pWepKey->KeyIndex & 0x0fffffff;				// it is a shared key				if ((KeyIdx >= 4) ||					((pWepKey->KeyLength != 5) && (pWepKey->KeyLength != 13)))				{					NdisStatus = NDIS_STATUS_FAILURE;					DBGPRINT(RT_DEBUG_ERROR,							"CMDHandler::OID_802_11_ADD_WEP "							"Invalid index(%d) or len(%d)\n",							KeyIdx, pWepKey->KeyLength);				}				else				{					UCHAR CipherAlg;					pAd->SharedKey[KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength;					memcpy(pAd->SharedKey[KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength);					CipherAlg = (pAd->SharedKey[KeyIdx].KeyLen == 5)? CIPHER_WEP64 : CIPHER_WEP128;					pAd->SharedKey[KeyIdx].CipherAlg = CipherAlg;					if (pWepKey->KeyIndex & 0x80000000)					{						// Default key for tx (shared key)						pAd->PortCfg.DefaultKeyId = (UCHAR) KeyIdx;					}					AsicAddSharedKeyEntry(pAd,										0,										(UCHAR)KeyIdx,										CipherAlg,										pWepKey->KeyMaterial,										NULL,										NULL);					DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_ADD_WEP (KeyIdx=%d, Len=%d-byte)\n", KeyIdx, pWepKey->KeyLength);				}			}			break;			case OID_802_11_REMOVE_WEP:			{				ULONG		KeyIdx;				KeyIdx = *(NDIS_802_11_KEY_INDEX *) pData;				if (KeyIdx & 0x80000000)				{					NdisStatus = NDIS_STATUS_FAILURE;					DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_WEP, INVALID_DATA!!\n");				}				else				{					KeyIdx = KeyIdx & 0x0fffffff;					if (KeyIdx >= 4)					{						NdisStatus = NDIS_STATUS_FAILURE;						DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_WEP, Invalid KeyIdx[=%d]!!\n", KeyIdx);					}					else					{						pAd->SharedKey[KeyIdx].KeyLen = 0;						pAd->SharedKey[KeyIdx].CipherAlg = CIPHER_NONE;						AsicRemoveSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx);						DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_REMOVE_WEP (KeyIdx=%d)\n", KeyIdx);					}				}			}			break;			case OID_802_11_ADD_KEY_WEP:			{				PNDIS_802_11_KEY		pKey;				ULONG					i, KeyIdx;				pKey = (PNDIS_802_11_KEY) pData;				KeyIdx = pKey->KeyIndex & 0x0fffffff;				// it is a shared key			    if (KeyIdx >= 4)				{			        NdisStatus = NDIS_STATUS_FAILURE;			        DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_ADD_KEY_WEP, Invalid KeyIdx[=%d]!!\n", KeyIdx);			    }			    else			    {			        UCHAR CipherAlg;			        pAd->SharedKey[KeyIdx].KeyLen = (UCHAR) pKey->KeyLength;			        memcpy(pAd->SharedKey[KeyIdx].Key, &pKey->KeyMaterial, pKey->KeyLength);			        if (pKey->KeyLength == 5)				        CipherAlg = CIPHER_WEP64;				    else				        CipherAlg = CIPHER_WEP128;				    // always expand the KEY to 16-byte here for efficiency sake. so that in case CKIP is used				    // sometime later we don't have to do key expansion for each TX in RTUSBHardTransmit().				    // However, we shouldn't change pAd->SharedKey[BSS0][KeyIdx].KeyLen				    if (pKey->KeyLength < 16)				    {				        for(i = 1; i < (16 / pKey->KeyLength); i++)				        {				            memcpy(&pAd->SharedKey[KeyIdx].Key[i * pKey->KeyLength],										   &pKey->KeyMaterial[0],										   pKey->KeyLength);				        }					    memcpy(&pAd->SharedKey[KeyIdx].Key[i * pKey->KeyLength],									   &pKey->KeyMaterial[0],									   16 - (i * pKey->KeyLength));				    }				    pAd->SharedKey[KeyIdx].CipherAlg = CipherAlg;				    if (pKey->KeyIndex & 0x80000000)					{				        // Default key for tx (shared key)					    pAd->PortCfg.DefaultKeyId = (UCHAR) KeyIdx;				    }				    AsicAddSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx, CipherAlg, pAd->SharedKey[KeyIdx].Key, NULL, NULL);				    DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_ADD_KEY_WEP (KeyIdx=%d, KeyLen=%d, CipherAlg=%d)\n",				        pAd->PortCfg.DefaultKeyId, pAd->SharedKey[KeyIdx].KeyLen, pAd->SharedKey[KeyIdx].CipherAlg);				}			}			break;			case OID_802_11_ADD_KEY:			{                PNDIS_802_11_KEY	pkey = (PNDIS_802_11_KEY)pData;				NdisStatus = RTMPWPAAddKeyProc(pAd, pkey);				RTUSBBulkReceive(pAd);				DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_ADD_KEY\n");			}			break;#if 0			case RT_OID_802_11_REMOVE_WEP:			case OID_802_11_REMOVE_WEP:			{				ULONG  KeyIdx;				KeyIdx = *(NDIS_802_11_KEY_INDEX *) pData;				if (KeyIdx & 0x80000000)				{					NdisStatus = NDIS_STATUS_FAILURE;					DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_WEP, INVALID_DATA!!\n");				}				else				{					KeyIdx = KeyIdx & 0x0fffffff;					if (KeyIdx >= 4)					{						NdisStatus = NDIS_STATUS_FAILURE;						DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_WEP, INVALID_DATA!!\n");					}						else					{					}				}			}			break;#if 0			{				//PNDIS_802_11_REMOVE_KEY  pRemoveKey;				ULONG  KeyIdx;				//pRemoveKey = (PNDIS_802_11_REMOVE_KEY) pData;				//KeyIdx = pRemoveKey->KeyIndex;				DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_WEP\n");				//if (InformationBufferLength != sizeof(NDIS_802_11_KEY_INDEX))				//	Status = NDIS_STATUS_INVALID_LENGTH;				//else				{					KeyIdx = *(NDIS_802_11_KEY_INDEX *) pData;					if (KeyIdx & 0x80000000)					{						// Should never set default bit when remove key						//Status = NDIS_STATUS_INVALID_DATA;					}					else					{						KeyIdx = KeyIdx & 0x0fffffff;						if (KeyIdx >= 4)						{							//Status = NDIS_STATUS_INVALID_DATA;						}						else						{							pAd->SharedKey[KeyIdx].KeyLen = 0;							//Status = RT2573USBEnqueueCmdFromNdis(pAd, OID_802_11_REMOVE_WEP, TRUE, pInformationBuffer, InformationBufferLength);							AsicRemoveSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx);						}					}				}			}			break;#endif#endif			case OID_802_11_REMOVE_KEY:			{				PNDIS_802_11_REMOVE_KEY  pRemoveKey;				ULONG  KeyIdx;				pRemoveKey = (PNDIS_802_11_REMOVE_KEY) pData;				if (pAd->PortCfg.AuthMode >= Ndis802_11AuthModeWPA)				{					NdisStatus = RTMPWPARemoveKeyProc(pAd, pData);					DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::RTMPWPARemoveKeyProc\n");				}				else				{					KeyIdx = pRemoveKey->KeyIndex;					if (KeyIdx & 0x80000000)					{						// Should never set default bit when remove key						NdisStatus = NDIS_STATUS_FAILURE;						DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_KEY, Invalid KeyIdx[=%d]!!\n", KeyIdx);					}					else					{						KeyIdx = KeyIdx & 0x0fffffff;						if (KeyIdx >= 4)						{							NdisStatus = NDIS_STATUS_FAILURE;							DBGPRINT(RT_DEBUG_ERROR, "CMDHandler::OID_802_11_REMOVE_KEY, Invalid KeyIdx[=%d]!!\n", KeyIdx);						}						else						{							pAd->SharedKey[KeyIdx].KeyLen = 0;							pAd->SharedKey[KeyIdx].CipherAlg = CIPHER_NONE;							AsicRemoveSharedKeyEntry(pAd, 0, (UCHAR)KeyIdx);							DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::AsicRemoveSharedKeyEntry(KeyIdx=%d)\n", KeyIdx);						}					}				}			}			break;			case OID_802_11_POWER_MODE:			{				NDIS_802_11_POWER_MODE PowerMode = *(PNDIS_802_11_POWER_MODE) pData;				DBGPRINT(RT_DEBUG_TRACE, "CMDHandler::OID_802_11_POWER_MODE (=%d)\n",PowerMode);				// save user's policy here, but not change PortCfg.Psm immediately				if (PowerMode == Ndis802_11PowerModeCAM)				{					// clear PSM bit immediately					MlmeSetPsmBit(pAd, PWR_ACTIVE);					OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);					if (pAd->PortCfg.bWindowsACCAMEnable == FALSE)						pAd->PortCfg.WindowsPowerMode = PowerMode;					pAd->PortCfg.WindowsBatteryPowerMode = PowerMode;				}				else if (PowerMode == Ndis802_11PowerModeMAX_PSP)				{					// do NOT turn on PSM bit here, wait until MlmeCheckPsmChange()					// to exclude certain situations.					//     MlmeSetPsmBit(pAd, PWR_SAVE);					if (pAd->PortCfg.bWindowsACCAMEnable == FALSE)						pAd->PortCfg.WindowsPowerMode = PowerMode;					pAd->PortCfg.WindowsBatteryPowerMode = PowerMode;					OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);					pAd->PortCfg.DefaultListenCount = 5;				}				else if (PowerMode == Ndis802_11PowerModeFast_PSP)				{					// do NOT turn on PSM bit here, wait until MlmeCheckPsmChange()					// to exclude certain situations.					//     MlmeSetPsmBit(pAd, PWR_SAVE);					OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);					if (pAd->PortCfg.bWindowsACCAMEnable == FALSE)						pAd->PortCfg.WindowsPowerMode = PowerMode;					pAd->PortCfg.WindowsBatteryPowerMode = PowerMode;					pAd->PortCfg.DefaultListenCount = 3;				}			}			break;			case RT_PERFORM_SOFT_DIVERSITY:				AsicRxAntEvalAction(pAd);			break;		    case RT_OID_FORCE_WAKE_UP:			    AsicForceWakeup(pAd);			break;		    case RT_OID_SET_PSM_BIT_ACTIVE:			    MlmeSetPsmBit(pAd, PWR_ACTIVE);		    break;			default:			break;		}		RTUSBfreeCmdQElem(cmdqelmt);	}} /* End CMDHandler () */#ifdef RT2X00DEBUGFS/* * Ethtool handlers. */#define CSR_REG_BASE			0x3000#define CSR_REG_SIZE			0x04b0#define EEPROM_BASE			0x0000#define EEPROM_SIZE			0x0100#define BBP_SIZE			0x0080#define RF_SIZE				0x0014#define CSR_OFFSET(__word)	( CSR_REG_BASE + ((__word) * sizeof(u32)) )static void rt73usb_read_csr(const struct rt2x00_dev *rt2x00dev,			     const unsigned int word, u32 *data){	RTUSBReadMACRegister(rt2x00dev->pAd, CSR_OFFSET(word), data);}static void rt73usb_write_csr(const struct rt2x00_dev *rt2x00dev,			      const unsigned int word, u32 data){	RTUSBWriteMACRegister(rt2x00dev->pAd, CSR_OFFSET(word), data);}static void rt73usb_read_eeprom(const struct rt2x00_dev *rt2x00dev,			        const unsigned int word, u16 *data){	RTUSBReadEEPROM(rt2x00dev->pAd, word * sizeof(u16), (PUCHAR)data, sizeof(u16));}static void rt73usb_write_eeprom(const struct rt2x00_dev *rt2x00dev,			         const unsigned int word, u16 data){}static void rt73usb_read_bbp(const struct rt2x00_dev *rt2x00dev,			     const unsigned int word, u8 *data){	RTUSBReadBBPRegister(rt2x00dev->pAd, word, data);}static void rt73usb_write_bbp(const struct rt2x00_dev *rt2x00dev,

⌨️ 快捷键说明

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