📄 rt_ate.c
字号:
ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value); //Set BBP R69=0x16 value = 0x16; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value); //Set BBP R70=0x08 value = 0x08; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value); //Set BBP R73=0x11 value = 0x11; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value); // If Channel=14, Bandwidth=20M and Mode=CCK, Set BBP R4 bit5=1 // (Japan filter coefficients) // This segment of code will only works when ATETXMODE and ATECHANNEL // were set to MODE_CCK and 14 respectively before ATETXBW is set to 0. //===================================================================== if (pAd->ate.Channel == 14) { int TxMode = pAd->ate.TxWI.PHYMODE; if (TxMode == MODE_CCK) { // when Channel==14 && Mode==CCK && BandWidth==20M, BBP R4 bit5=1 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); value |= 0x20; //set bit5=1 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value); } } //===================================================================== // if bandwidth != 40M, RF Reg4 bit 21 = 0 pAd->LatchRfRegs.R4 &= ~0x00200000; RtmpRfIoWrite(pAd); } else if(pAd->ate.TxWI.BW == BW_40) { if(pAd->ate.Channel <= 14) { for (i=0; i<5; i++) { if (pAd->Tx40MPwrCfgGBand[i] != 0xffffffff) { RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgGBand[i]); RTMPusecDelay(5000); } } } else { for (i=0; i<5; i++) { if (pAd->Tx40MPwrCfgABand[i] != 0xffffffff) { RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgABand[i]); RTMPusecDelay(5000); } } } //Set BBP R4 bit[4:3]=1:0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); value &= (~0x18); value |= 0x10; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value); //Set BBP R66=0x3C value = 0x3C; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value); //Set BBP R69=0x1A value = 0x1A; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value); //Set BBP R70=0x0A value = 0x0A; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value); //Set BBP R73=0x16 value = 0x16; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value); // if bandwidth = 40M, RF Reg4 bit 21 = 1 pAd->LatchRfRegs.R4 |= 0x00200000; RtmpRfIoWrite(pAd); } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_BW_Proc (BBPCurrentBW = %d)\n", pAd->ate.TxWI.BW)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_BW_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx frame length Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/INT Set_ATE_TX_LENGTH_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ pAd->ate.TxLength = simple_strtol(arg, 0, 10); if((pAd->ate.TxLength < 24) || (pAd->ate.TxLength > 1500)) { pAd->ate.TxLength = 1500; DBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_LENGTH_Proc::Out of range, it should be in range of 24~1500.\n")); return FALSE; } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_LENGTH_Proc (TxLength = %ld)\n", pAd->ate.TxLength)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_LENGTH_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx frame count Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/INT Set_ATE_TX_COUNT_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ pAd->ate.TxCount = simple_strtol(arg, 0, 10); DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %ld)\n", pAd->ate.TxCount)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx frame MCS Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/INT Set_ATE_TX_MCS_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ UCHAR MCS; int result; MCS = simple_strtol(arg, 0, 10); result = checkMCSValid(pAd->ate.TxWI.PHYMODE, MCS); if (result != -1) { pAd->ate.TxWI.MCS = (UCHAR)MCS; } else { DBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MCS_Proc::Out of range, refer to rate table.\n")); return FALSE; } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MCS_Proc (MCS = %d)\n", pAd->ate.TxWI.MCS)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MCS_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx frame Mode 0: MODE_CCK 1: MODE_OFDM 2: MODE_HTMIX 3: MODE_HTGREENFIELD Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/INT Set_ATE_TX_MODE_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ pAd->ate.TxWI.PHYMODE = simple_strtol(arg, 0, 10); if(pAd->ate.TxWI.PHYMODE > 3) { pAd->ate.TxWI.PHYMODE = 0; DBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::Out of range. it should be in range of 0~3\n")); DBGPRINT(RT_DEBUG_ERROR, ("0: CCK, 1: OFDM, 2: HT_MIX, 3: HT_GREEN_FIELD.\n")); return FALSE; } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MODE_Proc (TxMode = %d)\n", pAd->ate.TxWI.PHYMODE)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MODE_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx frame GI Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/INT Set_ATE_TX_GI_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ pAd->ate.TxWI.ShortGI = simple_strtol(arg, 0, 10); if(pAd->ate.TxWI.ShortGI > 1) { pAd->ate.TxWI.ShortGI = 0; DBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_GI_Proc::Out of range\n")); return FALSE; } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_GI_Proc (GI = %d)\n", pAd->ate.TxWI.ShortGI)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_GI_Proc Success\n")); return TRUE;}/* ========================================================================== Description: ========================================================================== */INT Set_ATE_RX_FER_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ pAd->ate.bRxFer = simple_strtol(arg, 0, 10); if (pAd->ate.bRxFer == 1) { pAd->ate.RxCntPerSec = 0; pAd->ate.RxTotalCnt = 0; } DBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_FER_Proc (bRxFer = %d)\n", pAd->ate.bRxFer)); DBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_FER_Proc Success\n")); return TRUE;}INT Set_ATE_Read_RF_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ printk("R1 = %lx\n", pAd->LatchRfRegs.R1); printk("R2 = %lx\n", pAd->LatchRfRegs.R2); printk("R3 = %lx\n", pAd->LatchRfRegs.R3); printk("R4 = %lx\n", pAd->LatchRfRegs.R4); return TRUE;}INT Set_ATE_Write_RF1_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ UINT32 value = simple_strtol(arg, 0, 16); pAd->LatchRfRegs.R1 = value; RtmpRfIoWrite(pAd); return TRUE;}INT Set_ATE_Write_RF2_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ UINT32 value = simple_strtol(arg, 0, 16); pAd->LatchRfRegs.R2 = value; RtmpRfIoWrite(pAd); return TRUE;}INT Set_ATE_Write_RF3_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ UINT32 value = simple_strtol(arg, 0, 16); pAd->LatchRfRegs.R3 = value; RtmpRfIoWrite(pAd); return TRUE;}INT Set_ATE_Write_RF4_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ UINT32 value = simple_strtol(arg, 0, 16); pAd->LatchRfRegs.R4 = value; RtmpRfIoWrite(pAd); return TRUE;}INT Set_ATE_Show_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ printk("Mode=%d\n", pAd->ate.Mode); printk("TxPower0=%d\n", pAd->ate.TxPower0); printk("TxPower1=%d\n", pAd->ate.TxPower1); printk("TxAntennaSel=%d\n", pAd->ate.TxAntennaSel); printk("RxAntennaSel=%d\n", pAd->ate.RxAntennaSel); printk("BBPCurrentBW=%d\n", pAd->ate.TxWI.BW); printk("GI=%d\n", pAd->ate.TxWI.ShortGI); printk("MCS=%d\n", pAd->ate.TxWI.MCS); printk("TxMode=%d\n", pAd->ate.TxWI.PHYMODE); printk("Addr1=%02x:%02x:%02x:%02x:%02x:%02x\n", pAd->ate.Addr1[0], pAd->ate.Addr1[1], pAd->ate.Addr1[2], pAd->ate.Addr1[3], pAd->ate.Addr1[4], pAd->ate.Addr1[5]); printk("Addr2=%02x:%02x:%02x:%02x:%02x:%02x\n", pAd->ate.Addr2[0], pAd->ate.Addr2[1], pAd->ate.Addr2[2], pAd->ate.Addr2[3], pAd->ate.Addr2[4], pAd->ate.Addr2[5]); printk("Addr3=%02x:%02x:%02x:%02x:%02x:%02x\n", pAd->ate.Addr3[0], pAd->ate.Addr3[1], pAd->ate.Addr3[2], pAd->ate.Addr3[3], pAd->ate.Addr3[4], pAd->ate.Addr3[5]); printk("Channel=%d\n", pAd->ate.Channel); printk("TxLength=%ld\n", pAd->ate.TxLength); printk("TxCount=%ld\n", pAd->ate.TxCount); printk("RFFreqOffset=%ld\n", pAd->ate.RFFreqOffset); printk(KERN_EMERG "Set_ATE_Show_Proc Success\n"); return TRUE;}INT Set_ATE_Help_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ printk("ATE=ATESTART, ATESTOP, TXCONT, TXCARR, TXFRAME, RXFRAME\n"); printk("ATEDA\n"); printk("ATESA\n"); printk("ATEBSSID\n"); printk("ATECHANNEL, range:0~14\n"); printk("ATETXPOW0, set power level of antenna 1.\n"); printk("ATETXPOW1, set power level of antenna 2.\n"); printk("ATETXANT, set TX antenna. 0:all, 1:antenna one, 2:antenna two.\n"); printk("ATERXANT, set RX antenna.0:all, 1:antenna one, 2:antenna tow, 3:antenna three.\n"); printk("ATETXFREQOFFSET, set frequency offset, range 0~63\n"); printk("ATETXBW, set BandWidth, 0:20MHz, 1:40MHz.\n"); printk("ATETXLEN, set Frame length, range 24~1500\n"); printk("ATETXCNT, set how many frame going to transmit.\n"); printk("ATETXMCS, set MCS, reference to rate table.\n"); printk("ATETXMODE, set Mode 0:CCK, 1:OFDM, 2:HT-Mix, 3:GreenField, reference to rate table.\n"); printk("ATETXGI, set GI interval, 0:Long, 1:Short\n"); printk("ATERXFER, 0:disable Rx Frame error rate. 1:enable Rx Frame error rate.\n"); printk("ATERRF, show all RF registers.\n"); printk("ATEWRF1, set RF1 register.\n"); printk("ATEWRF2, set RF2 register.\n"); printk("ATEWRF3, set RF3 register.\n"); printk("ATEWRF4, set RF4 register.\n"); printk("ATESHOW, display all parameters of ATE.\n"); printk("ATEHELP, online help.\n"); return TRUE;}/* ========================================================================== Description: ========================================================================== */VOID ATEAsicSwitchChannel( IN PRTMP_ADAPTER pAd) { ULONG R3 = DEFAULT_RF_TX_POWER, R4 = 0, R2, Value; CHAR TxPwer, TxPwer2; UCHAR index, BbpValue = 0; RTMP_RF_REGS *RFRegTable; UCHAR Channel = pAd->ate.Channel;#ifdef RALINK_2860_QA if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE)) { if (pAd->ate.Channel != pAd->LatchRfRegs.Channel) { pAd->ate.Channel = pAd->LatchRfRegs.Channel; } return; } else#endif // RALINK_2860_QA // // Select antenna AsicAntennaSelect(pAd, Channel); // fill Tx power value TxPwer = pAd->ate.TxPower0; TxPwer2 = pAd->ate.TxPower1; RFRegTable = RF2850RegTable; R3 = (ULONG) TxPwer; R3 = R3 << 9; // shift TX power control to correct RF R3 bit position#if 1 switch (pAd->RfIcType) { case RFIC_2820: case RFIC_2850: for (index = 0; index < NUM_OF_2850_CHNL; index++) { if (Channel == RFRegTable[index].Channel) { R2 = RFRegTable[index].R2; if (pAd->Antenna.field.TxPath == 2) { if (pAd->ate.TxAntennaSel == 1) { R2 |= 0x4000; // If TX Antenna select is 1 , bit 14 = 1; Disable Ant 2 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); BbpValue &= 0xE7; //11100111B ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); } else if (pAd->ate.TxAntennaSel == 2) { R2 |= 0x8000; // If TX Antenna select is 2 , bit 15 = 1; Disable Ant 1 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); BbpValue &= 0xE7; BbpValue |= 0x08; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); } else { ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue); BbpValue &= 0xE7; BbpValue |= 0x10; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue); } } if (pAd->Antenna.field.RxPath == 3) { switch (pAd->ate.RxAntennaSel) { case 1: R2 |= 0x20040; ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); BbpValue &= 0xE4; BbpValue |= 0x00; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); break; case 2: R2 |= 0x10040; ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); BbpValue &= 0xE4; BbpValue |= 0x01; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); break; case 3: R2 |= 0x30000; ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); BbpValue &= 0xE4; BbpValue |= 0x02; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue); break; default: ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue); BbpValue &= 0xE4;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -