📄 rtmp_main.c
字号:
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 + -