📄 rt_ate.c
字号:
//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 // (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.#ifdef RT30xx // Set BW if(IS_RT30xx(pAd)) RT30xxWriteRFRegister(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW20RfR24); else#endif // RT30xx // { 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); } } #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.#ifdef RT30xx // Set BW if(IS_RT30xx(pAd)) RT30xxWriteRFRegister(pAd, RF_R24, (UCHAR) pAd->Mlme.CaliBW40RfR24); else#endif // RT30xx // { 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 PUCHAR 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 PUCHAR 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 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 { 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 PUCHAR arg){ 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. it 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; } 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 PUCHAR 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;}/* ========================================================================== 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; } 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 PUCHAR arg){#ifdef RT30xx//2008/07/10:KH add to support RT30xx ATE<-- if(IS_RT30xx(pAd)) { /* modify by WY for Read RF Reg. error */ UCHAR RFValue; INT index=0; for (index = 0; index < 32; index++) { RT30xxReadRFRegister(pAd, index, (PUCHAR)&RFValue); printk("R%d=%d\n",index,RFValue); } } else//2008/07/10:KH add to support RT30xx ATE-->#endif // RT30xx // { 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 PUCHAR arg){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<-- if(IS_RT30xx(pAd)) { printk("Warning!! RT30xx Don't Support\n"); return FALSE; } else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx // { 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){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<-- if(IS_RT30xx(pAd)) { printk("Warning!! RT30xx Don't Support\n"); return FALSE; } else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx // { 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){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<-- if(IS_RT30xx(pAd)) { printk("Warning!! RT30xx Don't Support\n"); return FALSE; } else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx // { 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){#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<-- if(IS_RT30xx(pAd)) { printk("Warning!! RT30xx Don't Support\n"); return FALSE; } else//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx // { UINT32 value = simple_strtol(arg, 0, 16); pAd->LatchRfRegs.R4 = value; RtmpRfIoWrite(pAd); } return TRUE;}#ifdef RT30xx//2008/07/10:KH add to support 3070 ATE<--INT SET_ATE_3070RF_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ CHAR *this_char; CHAR *value; UINT32 Reg,RFValue; if(IS_RT30xx(pAd)) { printk("SET_ATE_3070RF_Proc=%s\n",arg); this_char =arg; if ((value = strchr(this_char, ':')) != NULL) *value++ = 0; Reg= simple_strtol(this_char, 0, 16); RFValue= simple_strtol(value, 0, 16); printk("RF Reg[%d]=%d\n",Reg,RFValue); RT30xxWriteRFRegister(pAd, Reg,RFValue); } else printk("Warning!! Only 3070 Support\n"); return TRUE;}//2008/07/10:KH add to support 3070 ATE-->#endif // RT30xx ///* ========================================================================== Description: Load and Write EEPROM from a binary file prepared in advance. Return: TRUE if all parameters are OK, FALSE otherwise ==========================================================================*/#ifndef UCOSINT Set_ATE_Load_E2P_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR arg){ BOOLEAN ret = FALSE; PUCHAR src = EEPROM_BIN_FILE_NAME; struct file *srcf; INT32 retval, orgfsuid, orgfsgid; mm_segment_t orgfs; USHORT WriteEEPROM[(EEPROM_SIZE/2)]; UINT32 FileLength = 0; UINT32 value = simple_strtol(arg, 0, 10); ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __FUNCTION__, value)); if (value > 0) { /* zero the e2p buffer */ NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE); /* save uid and gid used for filesystem access. ** set user and group to 0 (root) */ orgfsuid = current->fsuid; orgfsgid = current->fsgid; /* as root */ current->fsuid = current->fsgid = 0; orgfs = get_fs(); set_fs(KERNEL_DS); do { /* open the bin file */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -