📄 rtmp_init.c
字号:
t3 = ((value&0xf00)>>8)-(Apwrdelta); else t3 = 0; if (((value&0xf000)>>12) > Apwrdelta) t4 = ((value&0xf000)>>12)-(Apwrdelta); else t4 = 0; } Adata40M = t1 + (t2<<4) + (t3<<8) + (t4<<12); if (bGpwrdeltaMinus == FALSE) { t1 = (value&0xf)+(Gpwrdelta); if (t1 > 0xf) t1 = 0xf; t2 = ((value&0xf0)>>4)+(Gpwrdelta); if (t2 > 0xf) t2 = 0xf; t3 = ((value&0xf00)>>8)+(Gpwrdelta); if (t3 > 0xf) t3 = 0xf; t4 = ((value&0xf000)>>12)+(Gpwrdelta); if (t4 > 0xf) t4 = 0xf; } else { if ((value&0xf) > Gpwrdelta) t1 = (value&0xf)-(Gpwrdelta); else t1 = 0; if (((value&0xf0)>>4) > Gpwrdelta) t2 = ((value&0xf0)>>4)-(Gpwrdelta); else t2 = 0; if (((value&0xf00)>>8) > Gpwrdelta) t3 = ((value&0xf00)>>8)-(Gpwrdelta); else t3 = 0; if (((value&0xf000)>>12) > Gpwrdelta) t4 = ((value&0xf000)>>12)-(Gpwrdelta); else t4 = 0; } Gdata40M = t1 + (t2<<4) + (t3<<8) + (t4<<12); value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE + i*4 + 2); if (bApwrdeltaMinus == FALSE) { t1 = (value&0xf)+(Apwrdelta); if (t1 > 0xf) t1 = 0xf; t2 = ((value&0xf0)>>4)+(Apwrdelta); if (t2 > 0xf) t2 = 0xf; t3 = ((value&0xf00)>>8)+(Apwrdelta); if (t3 > 0xf) t3 = 0xf; t4 = ((value&0xf000)>>12)+(Apwrdelta); if (t4 > 0xf) t4 = 0xf; } else { if ((value&0xf) > Apwrdelta) t1 = (value&0xf)-(Apwrdelta); else t1 = 0; if (((value&0xf0)>>4) > Apwrdelta) t2 = ((value&0xf0)>>4)-(Apwrdelta); else t2 = 0; if (((value&0xf00)>>8) > Apwrdelta) t3 = ((value&0xf00)>>8)-(Apwrdelta); else t3 = 0; if (((value&0xf000)>>12) > Apwrdelta) t4 = ((value&0xf000)>>12)-(Apwrdelta); else t4 = 0; } Adata40M |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); if (bGpwrdeltaMinus == FALSE) { t1 = (value&0xf)+(Gpwrdelta); if (t1 > 0xf) t1 = 0xf; t2 = ((value&0xf0)>>4)+(Gpwrdelta); if (t2 > 0xf) t2 = 0xf; t3 = ((value&0xf00)>>8)+(Gpwrdelta); if (t3 > 0xf) t3 = 0xf; t4 = ((value&0xf000)>>12)+(Gpwrdelta); if (t4 > 0xf) t4 = 0xf; } else { if ((value&0xf) > Gpwrdelta) t1 = (value&0xf)-(Gpwrdelta); else t1 = 0; if (((value&0xf0)>>4) > Gpwrdelta) t2 = ((value&0xf0)>>4)-(Gpwrdelta); else t2 = 0; if (((value&0xf00)>>8) > Gpwrdelta) t3 = ((value&0xf00)>>8)-(Gpwrdelta); else t3 = 0; if (((value&0xf000)>>12) > Gpwrdelta) t4 = ((value&0xf000)>>12)-(Gpwrdelta); else t4 = 0; } Gdata40M |= ((t1<<16) + (t2<<20) + (t3<<24) + (t4<<28)); data |= (value<<16); //#ifdef WIFI_TEST // For WPA WiFi-test, suggest to downgrade tx power level. // Because high TX power results in the abnormal disconnection of Intel BG-STA. if (pAd->CommonCfg.bWiFiTest) { data = default_tx_power; Adata40M = default_tx_power; Gdata40M = default_tx_power; }//#endif // WIFI_TEST // pAd->TxPwrCfg[i] = data; pAd->Tx40MPwrCfgABand[i] = Adata40M; pAd->Tx40MPwrCfgGBand[i] = Gdata40M; if (data != 0xffffffff) RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, data); DBGPRINT_RAW(RT_DEBUG_TRACE, ("%lx, Adata40M = %lx, Gdata40M = %lx \n", data, Adata40M, Gdata40M)); } DBGPRINT(RT_DEBUG_TRACE, ("\n")); DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n"));}/* ======================================================================== Routine Description: Set default value from EEPROM Arguments: Adapter Pointer to our adapter Return Value: None IRQL = PASSIVE_LEVEL Note: ========================================================================*/VOID NICInitAsicFromEEPROM( IN PRTMP_ADAPTER pAd){#ifdef CONFIG_STA_SUPPORT ULONG data;#endif // CONFIG_STA_SUPPORT // USHORT i; EEPROM_ANTENNA_STRUC Antenna; EEPROM_NIC_CONFIG2_STRUC NicConfig2; UCHAR BBPR3 = 0; DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitAsicFromEEPROM\n")); for(i = 3; i < NUM_EEPROM_BBP_PARMS; i++) { UCHAR BbpRegIdx, BbpValue; if ((pAd->EEPROMDefaultValue[i] != 0xFFFF) && (pAd->EEPROMDefaultValue[i] != 0)) { BbpRegIdx = (UCHAR)(pAd->EEPROMDefaultValue[i] >> 8); BbpValue = (UCHAR)(pAd->EEPROMDefaultValue[i] & 0xff); RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BbpRegIdx, BbpValue); } } Antenna.word = pAd->Antenna.word; pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath; pAd->RfIcType = (UCHAR) Antenna.field.RfIcType; NicConfig2.word = pAd->EEPROMDefaultValue[1];#ifdef CONFIG_STA_SUPPORT NicConfig2.word = 0; if ((NicConfig2.word & 0x00ff) == 0xff) { NicConfig2.word &= 0xff00; } if ((NicConfig2.word >> 8) == 0xff) { NicConfig2.word &= 0x00ff; }#endif // CONFIG_STA_SUPPORT // // Save the antenna for future use pAd->NicConfig2.word = NicConfig2.word; // // Send LED Setting to MCU. // if (pAd->LedCntl.word == 0xFF) { pAd->LedCntl.word = 0x01; pAd->Led1 = 0x5555; pAd->Led2 = 0x2221; pAd->Led3 = 0xA9F8; } AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8)); AsicSendCommandToMcu(pAd, 0x53, 0xff, (UCHAR)pAd->Led2, (UCHAR)(pAd->Led2 >> 8)); AsicSendCommandToMcu(pAd, 0x54, 0xff, (UCHAR)pAd->Led3, (UCHAR)(pAd->Led3 >> 8));#ifdef CONFIG_STA_SUPPORT // Read Hardware controlled Radio state enable bit if (NicConfig2.field.HardwareRadioControl == 1) { pAd->StaCfg.bHardwareRadio = TRUE; // Read GPIO pin2 as Hardware controlled radio state RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &data); if ((data & 0x04) == 0) { pAd->StaCfg.bHwRadio = FALSE; pAd->StaCfg.bRadio = FALSE;// RTMP_IO_WRITE32(pAd, PWR_PIN_CFG, 0x00001818); RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF); } } else pAd->StaCfg.bHardwareRadio = FALSE; if (pAd->StaCfg.bRadio == FALSE) { RTMPSetLED(pAd, LED_RADIO_OFF); } else { RTMPSetLED(pAd, LED_RADIO_ON); }#endif // CONFIG_STA_SUPPORT // // Turn off patching for cardbus controller if (NicConfig2.field.CardbusAcceleration == 1) { pAd->bTest1 = TRUE; } if (NicConfig2.field.DynamicTxAgcControl == 1) pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE; else pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = FALSE; // // Since BBP has been progamed, to make sure BBP setting will be // upate inside of AsicAntennaSelect, so reset to UNKNOWN_BAND!! // pAd->CommonCfg.BandState = UNKNOWN_BAND; RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3); BBPR3 &= (~0x18); if(pAd->Antenna.field.RxPath == 3) { BBPR3 |= (0x10); } else if(pAd->Antenna.field.RxPath == 2) { BBPR3 |= (0x8); } else if(pAd->Antenna.field.RxPath == 1) { BBPR3 |= (0x0); } RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);#ifdef CONFIG_STA_SUPPORT DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", pAd->StaCfg.bHardwareRadio, pAd->StaCfg.bHardwareRadio));#endif // CONFIG_STA_SUPPORT // DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, pAd->RfIcType, pAd->LedCntl.word)); DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n"));}/* ======================================================================== Routine Description: Initialize NIC hardware Arguments: Adapter Pointer to our adapter Return Value: None IRQL = PASSIVE_LEVEL Note: ========================================================================*/NDIS_STATUS NICInitializeAdapter( IN PRTMP_ADAPTER pAd, IN BOOLEAN bHardReset){ ULONG Value; NDIS_STATUS Status = NDIS_STATUS_SUCCESS; WPDMA_GLO_CFG_STRUC GloCfg; DELAY_INT_CFG_STRUC IntCfg;// INT_MASK_CSR_STRUC IntMask; ULONG i =0; AC_TXOP_CSR0_STRUC csr0; DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAdapter\n")); // 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits: i = 0; do { RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); if ((GloCfg.field.TxDMABusy == 0) && (GloCfg.field.RxDMABusy == 0)) break; RTMPusecDelay(1000); i++; }while ( i<100); DBGPRINT(RT_DEBUG_TRACE, ("<== DMA offset 0x208 = 0x%x\n", GloCfg.word)); GloCfg.word &= 0xff0; GloCfg.field.EnTXWriteBackDDONE =1; RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); // // write all shared Ring's base address into ASIC // // asic simulation sequence put this ahead before loading firmware. // pbf hardware reset RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); // 0x10000 for reset rx, 0x3f resets all 6 tx rings. RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f); RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00); // Initialze ASIC for TX & Rx operation NICInitializeAsic(pAd , bHardReset); // Write AC_BK base address register Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR1 : 0x%lx\n", Value)); // Write AC_BE base address register Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BE].Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR0, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR0 : 0x%lx\n", Value)); // Write AC_VI base address register Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VI].Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR2, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR2 : 0x%lx\n", Value)); // Write AC_VO base address register Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%lx\n", Value)); // Write HCCA base address register Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR4 : 0x%lx\n", Value)); // Write MGMT_BASE_CSR register Value = RTMP_GetPhysicalAddressLow(pAd->MgmtRing.Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, TX_BASE_PTR5, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR5 : 0x%lx\n", Value)); // Write RX_BASE_CSR register Value = RTMP_GetPhysicalAddressLow(pAd->RxRing.Cell[0].AllocPa); RTMP_IO_WRITE32(pAd, RX_BASE_PTR, Value); DBGPRINT(RT_DEBUG_TRACE, ("--> RX_BASE_PTR : 0x%lx\n", Value)); // Init RX Ring index pointer pAd->RxRing.RxSwReadIdx = 0; pAd->RxRing.RxCpuIdx = RX_RING_SIZE-1; RTMP_IO_WRITE32(pAd, RX_CRX_IDX, pAd->RxRing.RxCpuIdx); // Init TX rings index pointer { for (i=0; i<NUM_OF_TX_RING; i++) { pAd->TxRing[i].TxSwFreeIdx = 0; pAd->TxRing[i].TxCpuIdx = 0; RTMP_IO_WRITE32(pAd, (TX_CTX_IDX0 + i * 0x10) , pAd->TxRing[i].TxCpuIdx); } } // init MGMT ring index pointer pAd->MgmtRing.TxSwFreeIdx = 0; pAd->MgmtRing.TxCpuIdx = 0; RTMP_IO_WRITE32(pAd, TX_MGMTCTX_IDX, pAd->MgmtRing.TxCpuIdx); // // set each Ring's SIZE into ASIC. Descriptor Size is fixed by design. // // Write TX_RING_CSR0 register Value = TX_RING_SIZE; RTMP_IO_WRITE32(pAd, TX_MAX_CNT0, Value); RTMP_IO_WRITE32(pAd, TX_MAX_CNT1, Value); RTMP_IO_WRITE32(pAd, TX_MAX_CNT2, Value); RTMP_IO_WRITE32(pAd, TX_MAX_CNT3, Value); RTMP_IO_WRITE32(pAd, TX_MAX_CNT4, Value); Value = MGMT_RING_SIZE; RTMP_IO_WRITE32(pAd, TX_MGMTMAX_CNT, Value); // Write RX_RING_CSR register Value = RX_RING_SIZE; RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value); // WMM parameter csr0.word = 0; RTMP_IO_WRITE32(pAd, WMM_TXOP0_CFG, csr0.word); if (pAd->CommonCfg.PhyMode == PHY_11B)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -