📄 rtusb_init.c
字号:
DBGPRINT(RT_DEBUG_INFO, "R24HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R24HigherValue); } if ((pAdapter->EEPROMBBPTuningParameters[2] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[2] != 0)) { pAdapter->BBPTuningParameters.R25LowerValue = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[2] & 0xff); pAdapter->BBPTuningParameters.R25HigherValue = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[2] & 0xff00) >> 8); DBGPRINT(RT_DEBUG_INFO, "R25LowerValue = 0x%x\n", pAdapter->BBPTuningParameters.R25LowerValue); DBGPRINT(RT_DEBUG_INFO, "R25HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R25HigherValue); } if ((pAdapter->EEPROMBBPTuningParameters[3] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[3] != 0)) { pAdapter->BBPTuningParameters.R61LowerValue = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[3] & 0xff); pAdapter->BBPTuningParameters.R61HigherValue = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[3] & 0xff00) >> 8); DBGPRINT(RT_DEBUG_INFO, "R61LowerValue = 0x%x\n", pAdapter->BBPTuningParameters.R61LowerValue); DBGPRINT(RT_DEBUG_INFO, "R61HigherValue = 0x%x\n", pAdapter->BBPTuningParameters.R61HigherValue); } if ((pAdapter->EEPROMBBPTuningParameters[4] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[4] != 0)) { pAdapter->PortCfg.BbpTuning.VgcUpperBound = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[4] & 0xff); DBGPRINT_RAW(RT_DEBUG_INFO, "VgcUpperBound = 0x%x\n", pAdapter->PortCfg.BbpTuning.VgcUpperBound); } if ((pAdapter->EEPROMBBPTuningParameters[5] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[5] != 0)) { pAdapter->BBPTuningParameters.BBPR17LowSensitivity = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[5] & 0xff); pAdapter->BBPTuningParameters.BBPR17MidSensitivity = (UCHAR)((pAdapter->EEPROMBBPTuningParameters[5] & 0xff00) >> 8); DBGPRINT_RAW(RT_DEBUG_INFO, "BBPR17LowSensitivity = 0x%x\n", pAdapter->BBPTuningParameters.BBPR17LowSensitivity); DBGPRINT_RAW(RT_DEBUG_INFO, "BBPR17MidSensitivity = 0x%x\n", pAdapter->BBPTuningParameters.BBPR17MidSensitivity); } if ((pAdapter->EEPROMBBPTuningParameters[6] != 0xffff) && (pAdapter->EEPROMBBPTuningParameters[6] != 0)) { pAdapter->BBPTuningParameters.RSSIToDbmOffset = (UCHAR)(pAdapter->EEPROMBBPTuningParameters[6] & 0xff); DBGPRINT_RAW(RT_DEBUG_INFO, "RSSIToDbmOffset = 0x%x\n", pAdapter->BBPTuningParameters.RSSIToDbmOffset); } DBGPRINT(RT_DEBUG_TRACE,"<-- NICReadEEPROMParameters\n");}/* ======================================================================== Routine Description: Set default value from EEPROM Arguments: Adapter Pointer to our adapter Return Value: None Note: ========================================================================*/VOID NICInitAsicFromEEPROM( IN PRT2570ADAPTER pAdapter){ USHORT i, value; USHORT Value5, Value6; UCHAR TxValue,RxValue; EEPROM_ANTENNA_STRUC Antenna; EEPROM_NIC_CONFIG2_STRUC NicConfig2; DBGPRINT(RT_DEBUG_TRACE,"--> NICInitAsicFromEEPROM\n"); //Initialize BBP registers. for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++) { value = pAdapter->EEPROMDefaultValue[i]; if((value != 0xFFFF) && (value != 0)) { //blue,RTUSBWriteMACRegister(pAdapter, PHY_CSR7, value); USHORT id; id = ((value & 0xff00) >> 8); { USHORT temp; UINT j = 0; do { RTUSBReadMACRegister(pAdapter, PHY_CSR8, &temp); if (!(temp & BUSY)) break; j++; } while (j < RETRY_LIMIT); RTUSBWriteMACRegister(pAdapter, PHY_CSR7, value); } } } DBGPRINT(RT_DEBUG_INFO,"pAdapter->BBPTuningParameters.R24LowerValue = %x\n", pAdapter->BBPTuningParameters.R24LowerValue); DBGPRINT(RT_DEBUG_INFO, "pAdapter->BBPTuningParameters.R25LowerValue = %x\n", pAdapter->BBPTuningParameters.R25LowerValue); DBGPRINT(RT_DEBUG_INFO, "pAdapter->BBPTuningParameters.R61LowerValue = %x\n", pAdapter->BBPTuningParameters.R61LowerValue); RTUSBWriteBBPRegister(pAdapter, 24, pAdapter->BBPTuningParameters.R24LowerValue); RTUSBWriteBBPRegister(pAdapter, 25, pAdapter->BBPTuningParameters.R25LowerValue); RTUSBWriteBBPRegister(pAdapter, 61, pAdapter->BBPTuningParameters.R61LowerValue); //Select antennas. Antenna.word = pAdapter->EEPROMDefaultValue[0]; if ((Antenna.word == 0xFFFF) || (Antenna.field.TxDefaultAntenna > 2) || (Antenna.field.RxDefaultAntenna > 2)) { DBGPRINT(RT_DEBUG_ERROR,"E2PROM error(=0x%04x), hard code as 0x0002\n", Antenna.word); Antenna.word = 0x0002; } DBGPRINT(RT_DEBUG_TRACE,"Antenna.word = 0x%x \n", Antenna.word); pAdapter->PortCfg.NumberOfAntenna = 2; // (UCHAR)Antenna.field.NumOfAntenna; pAdapter->PortCfg.CurrentTxAntenna = (UCHAR)Antenna.field.TxDefaultAntenna; pAdapter->PortCfg.CurrentRxAntenna = (UCHAR)Antenna.field.RxDefaultAntenna; pAdapter->PortCfg.RfType = (UCHAR) Antenna.field.RfType;//blue DBGPRINT(RT_DEBUG_TRACE,"pAdapter->PortCfg.RfType = 0x%x \n", pAdapter->PortCfg.RfType); RTUSBReadBBPRegister(pAdapter, BBP_Tx_Configure, &TxValue); RTUSBReadBBPRegister(pAdapter, BBP_Rx_Configure, &RxValue); RTUSBReadMACRegister(pAdapter, PHY_CSR5, &Value5); RTUSBReadMACRegister(pAdapter, PHY_CSR6, &Value6); // Tx antenna select if(Antenna.field.TxDefaultAntenna == 1) { TxValue = (TxValue & 0xFC) | 0x00; // Antenna A Value5 = (Value5 & 0xFFFC) | 0x0000; Value6 = (Value6 & 0xFFFC) | 0x0000; } else if(Antenna.field.TxDefaultAntenna == 2) { TxValue = (TxValue & 0xFC) | 0x02; // Antenna B Value5 = (Value5 & 0xFFFC) | 0x0002; Value6 = (Value6 & 0xFFFC) | 0x0002; } else { TxValue = (TxValue & 0xFC) | 0x01; // Antenna Diversity Value5 = (Value5 & 0xFFFC) | 0x0001; Value6 = (Value6 & 0xFFFC) | 0x0001; } // Rx antenna select if(Antenna.field.RxDefaultAntenna == 1) RxValue = (RxValue & 0xFC) | 0x00; // Antenna A else if(Antenna.field.RxDefaultAntenna == 2) RxValue = (RxValue & 0xFC) | 0x02; // Antenna B else RxValue = (RxValue & 0xFC) | 0x01; // Antenna Diversity DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitAsicFromEEPROM pAdapter->PortCfg.RfType = %d\n", pAdapter->PortCfg.RfType); // RT5222 needs special treatment to swap TX I/Q if (pAdapter->PortCfg.RfType == RFIC_5222) { Value5 |= 0x0004; Value6 |= 0x0004; TxValue |= 0x04; // TX I/Q flip } // RT2525E need to flip TX I/Q but not RX I/Q else if (pAdapter->PortCfg.RfType == RFIC_2525E) { Value5 |= 0x0004; Value6 |= 0x0004; TxValue |= 0x04; // TX I/Q flip RxValue &= 0xfb; // RX I/Q no flip } RTUSBWriteMACRegister(pAdapter, PHY_CSR5, Value5); RTUSBWriteMACRegister(pAdapter, PHY_CSR6, Value6); // Change to match microsoft definition, 0xff: diversity, 0: A, 1: B pAdapter->PortCfg.CurrentTxAntenna--; pAdapter->PortCfg.CurrentRxAntenna--; RTUSBWriteBBPRegister(pAdapter, BBP_Tx_Configure, TxValue); RTUSBWriteBBPRegister(pAdapter, BBP_Rx_Configure, RxValue); //Set LED mode. if (Antenna.field.LedMode == LED_MODE_TXRX_ACTIVITY) pAdapter->PortCfg.LedMode = LED_MODE_TXRX_ACTIVITY; else if (Antenna.field.LedMode == LED_MODE_SINGLE) { pAdapter->PortCfg.LedMode = LED_MODE_SINGLE; ASIC_LED_ACT_ON(pAdapter); } else if (Antenna.field.LedMode == LED_MODE_ASUS) { pAdapter->PortCfg.LedMode = LED_MODE_ASUS; RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 0x0002); } else if (Antenna.field.LedMode == LED_MODE_ALPHA) { pAdapter->PortCfg.LedMode = LED_MODE_ALPHA; RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 1); pAdapter->PortCfg.LedCntl.fOdd = FALSE; } else pAdapter->PortCfg.LedMode = LED_MODE_DEFAULT; // Read Hardware controlled Radio state enable bit if (Antenna.field.HardwareRadioControl == 1) { pAdapter->PortCfg.bHardwareRadio = TRUE; RTUSBWriteMACRegister(pAdapter, MAC_CSR19, 0); // Read GPIO pin0 as Hardware controlled radio state RTUSBReadMACRegister(pAdapter, MAC_CSR19, &value); if ((value & 0x80) == 0) { pAdapter->PortCfg.bHwRadio = FALSE; pAdapter->PortCfg.bRadio = FALSE; RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0); RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0); RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF); DBGPRINT(RT_DEBUG_ERROR, "2Set fRTMP_ADAPTER_RADIO_OFF "); if (pAdapter->PortCfg.LedMode == LED_MODE_ASUS) { // Turn bit 17 for Radio OFF RTUSBWriteMACRegister(pAdapter, MAC_CSR20, 1); } } } else pAdapter->PortCfg.bHardwareRadio = FALSE; NicConfig2.word = pAdapter->EEPROMDefaultValue[1]; if (NicConfig2.word == 0xffff) NicConfig2.word = 0; // empty E2PROM, use default // for dynamic BBP R17:RX sensibility tuning { UCHAR r17; RTUSBReadBBPRegister(pAdapter, 17, &r17); pAdapter->PortCfg.BbpTuningEnable = (NicConfig2.field.DynamicBbpTuning==0)? 1:0; pAdapter->PortCfg.VgcLowerBound = r17; // 2004-3-4 per David's request, R7 starts at upper bound r17 = pAdapter->PortCfg.BbpTuning.VgcUpperBound; pAdapter->PortCfg.LastR17Value = r17; RTUSBWriteBBPRegister(pAdapter, 17, r17); // 2004-2-2 per David's request, lower R17 low-bound for very good quality NIC pAdapter->PortCfg.VgcLowerBound -= 6; DBGPRINT(RT_DEBUG_TRACE,"R17 tuning enable=%d, R17=0x%02x, range=<0x%02x, 0x%02x>\n", pAdapter->PortCfg.BbpTuningEnable, r17, pAdapter->PortCfg.VgcLowerBound, pAdapter->PortCfg.BbpTuning.VgcUpperBound); } AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel); DBGPRINT(RT_DEBUG_TRACE,"RF IC=%d, LED mode=%d\n", pAdapter->PortCfg.RfType, pAdapter->PortCfg.LedMode); DBGPRINT(RT_DEBUG_TRACE,"<-- NICInitAsicFromEEPROM\n");}VOID RT2570InitializeAsic( IN PRT2570ADAPTER pAdapter){ ULONG Index; UCHAR buffer[22]; USHORT temp; UCHAR Value = 0xff; UINT i; DBGPRINT(RT_DEBUG_TRACE, "--> NICInitializeAsic\n"); do { //NdisMSleep(1000); RTUSB_VendorRequest(pAdapter, 0, DEVICE_VENDOR_REQUEST_OUT, 0x1, 0x4, 0x1, NULL, 0); RTUSBSingleWrite(pAdapter, 0x308, 0xf0);//asked by MAX // Disable RX at first beginning. Before BulkInReceive, we will enable RX. RTUSBWriteMACRegister(pAdapter, TXRX_CSR2, 1); RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0x1111);//requested by Jerry RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0x1E11); RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 3); // reset MAC state machine, requested by Kevin 2003-2-11 RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 0); // reset MAC state machine, requested by Kevin 2003-2-11 RTUSBWriteMACRegister(pAdapter, TXRX_CSR5, 0x8C8D); RTUSBWriteMACRegister(pAdapter, TXRX_CSR6, 0x8B8A); RTUSBWriteMACRegister(pAdapter, TXRX_CSR7, 0x8687); RTUSBWriteMACRegister(pAdapter, TXRX_CSR8, 0x0085); RTUSBWriteMACRegister(pAdapter, TXRX_CSR21, 0xe78f); RTUSBWriteMACRegister(pAdapter, MAC_CSR9, 0xFF1D); i = 0; RTUSBReadMACRegister(pAdapter, MAC_CSR17, &temp); while (((temp & 0x01e0 ) != 0x01e0) && (i < 50)) { NdisMSleep(1000); RTUSBReadMACRegister(pAdapter, MAC_CSR17, &temp); i++; } if (i == 50) { if (RTUSB_ResetDevice(pAdapter) == FALSE) { //RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); DBGPRINT(RT_DEBUG_TRACE, "<== NICInitializeAsic ERROR\n"); return; } else continue; } RTUSBWriteMACRegister(pAdapter, MAC_CSR1, 4); RTUSBReadMACRegister(pAdapter, MAC_CSR0, &temp); if ( temp >= 3){ RTUSBReadMACRegister(pAdapter, PHY_CSR2, &temp); RTUSBWriteMACRegister(pAdapter, PHY_CSR2, temp & 0xFFFD); } else { DBGPRINT(RT_DEBUG_TRACE, "LNA 3 mode\n"); RTUSBWriteMACRegister(pAdapter, PHY_CSR2, 0x3002); // LNA 3 mode } RTUSBWriteMACRegister(pAdapter, MAC_CSR11, 2); RTUSBWriteMACRegister(pAdapter, MAC_CSR22, 0x53); RTUSBWriteMACRegister(pAdapter, MAC_CSR15, 0x01ee); RTUSBWriteMACRegister(pAdapter, MAC_CSR16, 0); RTUSBWriteMACRegister(pAdapter, MAC_CSR8, 0x0780);//steven:limit the maximum frame length RTUSBReadMACRegister(pAdapter, TXRX_CSR0, &temp); temp &= 0xe007; temp |= ((LENGTH_802_11 << 3) | (0x000f << 9)); RTUSBWriteMACRegister(pAdapter, TXRX_CSR0, temp); RTUSBWriteMACRegister(pAdapter, TXRX_CSR19, 0); RTUSBWriteMACRegister(pAdapter, MAC_CSR18, 0x5a); //set RF_LE to low when standby RTUSBReadMACRegister(pAdapter, PHY_CSR4, &temp); RTUSBWriteMACRegister(pAdapter, PHY_CSR4, temp | 1); //NdisMSleep(1);//wait for PLL to become stable i = 0; do { RTUSBReadBBPRegister(pAdapter, BBP_Version, &Value); DBGPRINT(RT_DEBUG_TRACE, "Read BBP_Version Value = %d\n", Value); i++; }while (((Value == 0xff) || (Value == 0x00)) && (i < 50)); if (i < 50)//BBP ready { break; } else { if ( RTUSB_ResetDevice(pAdapter) == FALSE) { RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_REMOVE_IN_PROGRESS); return; } } }while (1); // Initialize BBP register to default value for (Index = 0; Index < NUM_BBP_REG_PARMS; Index++) { i = 0; do { RTUSBReadMACRegister(pAdapter, PHY_CSR8, &temp); if (!(temp & BUSY)) break; i++; } while (i < RETRY_LIMIT); RTUSBWriteMACRegister(pAdapter, PHY_CSR7, BBPRegTable[Index]); } // Initialize RF register to default value AsicSwitchChannel(pAdapter, pAdapter->PortCfg.Channel); AsicLockChannel(pAdapter, pAdapter->PortCfg.Channel); // Add radio off control if (pAdapter->PortCfg.bRadio == FALSE) { RTUSBWriteMACRegister(pAdapter, MAC_CSR13, 0); RTUSBWriteMACRegister(pAdapter, MAC_CSR14, 0); RTMP_SET_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF); DBGPRINT(RT_DEBUG_ERROR, "1Set fRTMP_ADAPTER_RADIO_OFF "); } RTUSBMultiRead(pAdapter, STA_CSR0, buffer, 22); DBGPRINT(RT_DEBUG_TRACE, "<-- NICInitializeAsic\n");}/* ========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -