📄 rt_ate.c
字号:
for (i=0; i<5; i++) { if (pAd->Tx20MPwrCfgABand[i] != 0xffffffff) { RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgABand[i]); RTMPusecDelay(5000); } } } // Set BBP R4 bit[4:3]=0:0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value); value &= (~0x18); 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 R68=0x0B // to improve Rx sensitivity. value = 0x0B; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, 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 (to set 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); } } // set BW = 20 MHz { pAd->LatchRfRegs.R4 &= ~0x00200000; RtmpRfIoWrite(pAd); } } // If bandwidth = 40M, set RF Reg4 bit 21 = 0. 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); } } #ifdef DOT11_N_SUPPORT if ((pAd->ate.TxWI.PHYMODE >= MODE_HTMIX) && (pAd->ate.TxWI.MCS == 7)) { value = 0x28; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R67, value); }#endif // DOT11_N_SUPPORT // } // 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 R68=0x0C // to improve Rx sensitivity value = 0x0C; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, 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, set RF Reg4 bit 21 = 1. // set BW = 40 MHz { pAd->LatchRfRegs.R4 |= 0x00200000; RtmpRfIoWrite(pAd); } } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_BW_Proc (BBPCurrentBW = %d)\n", pAd->ate.TxWI.BW)); ATEDBGPRINT(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 PSTRING arg){ pAd->ate.TxLength = simple_strtol(arg, 0, 10); if ((pAd->ate.TxLength < 24) || (pAd->ate.TxLength > (MAX_FRAME_SIZE - 34/* == 2312 */))) { pAd->ate.TxLength = (MAX_FRAME_SIZE - 34/* == 2312 */); ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_LENGTH_Proc::Out of range, it should be in range of 24~%d.\n", (MAX_FRAME_SIZE - 34/* == 2312 */))); return FALSE; } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_LENGTH_Proc (TxLength = %d)\n", pAd->ate.TxLength)); ATEDBGPRINT(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 PSTRING arg){ pAd->ate.TxCount = simple_strtol(arg, 0, 10); ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAd->ate.TxCount)); ATEDBGPRINT(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 PSTRING arg){ UCHAR MCS; INT result; MCS = simple_strtol(arg, 0, 10); result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS); /* RT35xx ATE will reuse this code segment. */ if (result != -1) { pAd->ate.TxWI.MCS = (UCHAR)MCS; } else { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MCS_Proc::Out of range, refer to rate table.\n")); return FALSE; } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MCS_Proc (MCS = %d)\n", pAd->ate.TxWI.MCS)); ATEDBGPRINT(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 PSTRING arg){ UCHAR BbpData = 0; pAd->ate.TxWI.PHYMODE = simple_strtol(arg, 0, 10); if (pAd->ate.TxWI.PHYMODE > 3) { pAd->ate.TxWI.PHYMODE = 0; ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::Out of range.\nIt should be in range of 0~3\n")); ATEDBGPRINT(RT_DEBUG_ERROR, ("0: CCK, 1: OFDM, 2: HT_MIX, 3: HT_GREEN_FIELD.\n")); return FALSE; } // Turn on BBP 20MHz mode by request here. if (pAd->ate.TxWI.PHYMODE == MODE_CCK) { ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BbpData); BbpData &= (~0x18); ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BbpData); ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::CCK Only support 20MHZ. Switch to 20MHZ.\n")); } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MODE_Proc (TxMode = %d)\n", pAd->ate.TxWI.PHYMODE)); ATEDBGPRINT(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 PSTRING arg){ pAd->ate.TxWI.ShortGI = simple_strtol(arg, 0, 10); if (pAd->ate.TxWI.ShortGI > 1) { pAd->ate.TxWI.ShortGI = 0; ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_GI_Proc::Out of range\n")); return FALSE; } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_GI_Proc (GI = %d)\n", pAd->ate.TxWI.ShortGI)); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_GI_Proc Success\n")); return TRUE;}INT Set_ATE_RX_FER_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ pAd->ate.bRxFER = simple_strtol(arg, 0, 10); if (pAd->ate.bRxFER == 1) { pAd->ate.RxCntPerSec = 0; pAd->ate.RxTotalCnt = 0; } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_FER_Proc (bRxFER = %d)\n", pAd->ate.bRxFER)); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_FER_Proc Success\n")); return TRUE;}INT Set_ATE_Read_RF_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ { ate_print(KERN_EMERG "R1 = %lx\n", pAd->LatchRfRegs.R1); ate_print(KERN_EMERG "R2 = %lx\n", pAd->LatchRfRegs.R2); ate_print(KERN_EMERG "R3 = %lx\n", pAd->LatchRfRegs.R3); ate_print(KERN_EMERG "R4 = %lx\n", pAd->LatchRfRegs.R4); } return TRUE;}INT Set_ATE_Write_RF1_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ UINT32 value = (UINT32) simple_strtol(arg, 0, 16); { pAd->LatchRfRegs.R1 = value; RtmpRfIoWrite(pAd); } return TRUE;}INT Set_ATE_Write_RF2_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ UINT32 value = (UINT32) simple_strtol(arg, 0, 16); { pAd->LatchRfRegs.R2 = value; RtmpRfIoWrite(pAd); } return TRUE;}INT Set_ATE_Write_RF3_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING 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 PSTRING arg){ UINT32 value = (UINT32) simple_strtol(arg, 0, 16); { pAd->LatchRfRegs.R4 = value; RtmpRfIoWrite(pAd); } return TRUE;}/* ========================================================================== Description: Load and Write EEPROM from a binary file prepared in advance. Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/#if defined(LINUX) || defined(VXWORKS)INT Set_ATE_Load_E2P_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ BOOLEAN ret = FALSE; PSTRING src = EEPROM_BIN_FILE_NAME; RTMP_OS_FD srcf; INT32 retval; USHORT WriteEEPROM[(EEPROM_SIZE/2)]; INT FileLength = 0; UINT32 value = (UINT32) simple_strtol(arg, 0, 10); RTMP_OS_FS_INFO osFSInfo; ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __FUNCTION__, value)); if (value > 0) { /* zero the e2p buffer */ NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE); RtmpOSFSInfoChange(&osFSInfo, TRUE); do { /* open the bin file */ srcf = RtmpOSFileOpen(src, O_RDONLY, 0); if (IS_FILE_OPEN_ERR(srcf)) { ate_print("%s - Error opening file %s\n", __FUNCTION__, src); break; } /* read the firmware from the file *.bin */ FileLength = RtmpOSFileRead(srcf, (PSTRING)WriteEEPROM, EEPROM_SIZE); if (FileLength != EEPROM_SIZE) { ate_print("%s: error file length (=%d) in e2p.bin\n", __FUNCTION__, FileLength); break; } else { /* write the content of .bin file to EEPROM */ rt_ee_write_all(pAd, WriteEEPROM); ret = TRUE; } break; } while(TRUE); /* close firmware file */ if (IS_FILE_OPEN_ERR(srcf)) { ; } else { retval = RtmpOSFileClose(srcf); if (retval) { ATEDBGPRINT(RT_DEBUG_ERROR, ("--> Error %d closing %s\n", -retval, src)); } } /* restore */ RtmpOSFSInfoChange(&osFSInfo, FALSE); } ATEDBGPRINT(RT_DEBUG_ERROR, ("<=== %s (ret=%d)\n", __FUNCTION__, ret)); return ret; }#endif // defined(LINUX) || defined(VXWORKS) //#ifdef UCOSINT Set_ATE_Load_E2P_Proc( IN PRTMP_ADAPTER pAd, IN PCHAR arg){ USHORT WriteEEPROM[(EEPROM_SIZE/2)]; struct iwreq *wrq = (struct iwreq *)arg; ATEDBGPRINT(RT_DEBUG_TRACE, ("===> %s (wrq->u.data.length = %d)\n\n", __FUNCTION__, wrq->u.data.length)); if (wrq->u.data.length != EEPROM_SIZE) { ate_print("%s: error length (=%d) from host\n", __FUNCTION__, wrq->u.data.length); return FALSE; } else/* (wrq->u.data.length == EEPROM_SIZE) */ { /* zero the e2p buffer */ NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE); /* fill the local buffer */ NdisMoveMemory((PUCHAR)WriteEEPROM, wrq->u.data.pointer, wrq->u.data.length); do { /* write the content of .bin file to EEPROM */ rt_ee_write_all(pAd, WriteEEPROM); } while(FALSE); } ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== %s\n", __FUNCTION__)); return TRUE; }#endif // UCOS //INT Set_ATE_Read_E2P_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ USHORT buffer[EEPROM_SIZE/2]; USHORT *p; int i; rt_ee_read_all(pAd, (USHORT *)b
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -