📄 rt_ate.c
字号:
RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); // Clean bit4 to stop continuous Tx production test. MacData &= 0xFFFFFFEF; ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); pAd->ate.Mode |= ATE_RXFRAME; // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0); // Disable TX of MAC block RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 2); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Reset Rx RING. for ( i = 0; i < (RX_RING_SIZE); i++) { PRX_CONTEXT pRxContext = &(pAd->RxContext[i]); pRxContext->InUse = FALSE; pRxContext->IRPPending = FALSE; pRxContext->Readable = FALSE; /* Get the URB from kernel(i.e., host control driver) back to driver. */ RTUSB_UNLINK_URB(pRxContext->pUrb); /* Sleep 200 microsecs to give cancellation time to work. */ RTMPusecDelay(200); pAd->BulkInReq = 0;// InterlockedExchange(&pAd->PendingRx, 0); pAd->PendingRx = 0; // Next Rx Read index pAd->NextRxBulkInReadIndex = 0; // Rx Bulk pointer pAd->NextRxBulkInIndex = RX_RING_SIZE - 1; pAd->NextRxBulkInPosition = 0; } // read to clear counters RTUSBReadMACRegister(pAd, RX_STA_CNT0, &temp); // RX PHY & RX CRC count RTUSBReadMACRegister(pAd, RX_STA_CNT1, &temp); // RX PLCP error count & CCA false alarm count RTUSBReadMACRegister(pAd, RX_STA_CNT2, &temp); // RX FIFO overflow frame count & RX duplicated filtered frame count pAd->ContinBulkIn = TRUE; // Enable Tx, RX DMA. RtmpDmaEnable(pAd, 1); // Enable RX of MAC block RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value |= (1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Kick bulk in RTUSBBulkReceive(pAd); } else { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: Invalid arg!\n")); return FALSE; } RTMPusecDelay(5000); ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATECmdHandler()\n")); return TRUE;}#endif // RTMP_MAC_USB //INT Set_ATE_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ if (ATECmdHandler(pAd, arg)) { ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Success\n")); return TRUE; } else { ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Failed\n")); return FALSE; }}/* ========================================================================== Description: Set ATE ADDR1=DA for TxFrame(AP : To DS = 0 ; From DS = 1) or Set ATE ADDR3=DA for TxFrame(STA : To DS = 1 ; From DS = 0) Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_DA_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ PSTRING value; INT i; // Mac address acceptable format 01:02:03:04:05:06 length 17 if (strlen(arg) != 17) return FALSE; for (i = 0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { /* sanity check */ if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) { return FALSE; }#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr3[i++], 1);#endif // CONFIG_STA_SUPPORT // } /* sanity check */ if (i != 6) { return FALSE; }#ifdef CONFIG_STA_SUPPORT ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_DA_Proc (DA = %2X:%2X:%2X:%2X:%2X:%2X)\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]));#endif // CONFIG_STA_SUPPORT // ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_DA_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE ADDR3=SA for TxFrame(AP : To DS = 0 ; From DS = 1) or Set ATE ADDR2=SA for TxFrame(STA : To DS = 1 ; From DS = 0) Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_SA_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ PSTRING value; INT i; // Mac address acceptable format 01:02:03:04:05:06 length 17 if (strlen(arg) != 17) return FALSE; for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { /* sanity check */ if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) { return FALSE; }#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr2[i++], 1);#endif // CONFIG_STA_SUPPORT // } /* sanity check */ if (i != 6) { return FALSE; }#ifdef CONFIG_STA_SUPPORT ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_SA_Proc (SA = %2X:%2X:%2X:%2X:%2X:%2X)\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]));#endif // CONFIG_STA_SUPPORT // ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_SA_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE ADDR2=BSSID for TxFrame(AP : To DS = 0 ; From DS = 1) or Set ATE ADDR1=BSSID for TxFrame(STA : To DS = 1 ; From DS = 0) Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_BSSID_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ PSTRING value; INT i; // Mac address acceptable format 01:02:03:04:05:06 length 17 if (strlen(arg) != 17) return FALSE; for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { /* sanity check */ if ((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1)))) { return FALSE; }#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr1[i++], 1);#endif // CONFIG_STA_SUPPORT // } /* sanity check */ if(i != 6) { return FALSE; }#ifdef CONFIG_STA_SUPPORT ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_BSSID_Proc (BSSID = %2X:%2X:%2X:%2X:%2X:%2X)\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]));#endif // CONFIG_STA_SUPPORT // ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_BSSID_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx Channel Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_CHANNEL_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ UCHAR channel; channel = simple_strtol(arg, 0, 10); // to allow A band channel : ((channel < 1) || (channel > 14)) if ((channel < 1) || (channel > 216)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_CHANNEL_Proc::Out of range, it should be in range of 1~14.\n")); return FALSE; } pAd->ate.Channel = channel; ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_CHANNEL_Proc (ATE Channel = %d)\n", pAd->ate.Channel)); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_CHANNEL_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx Power0 Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_TX_POWER0_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ CHAR TxPower; TxPower = simple_strtol(arg, 0, 10); if (pAd->ate.Channel <= 14) { if ((TxPower > 31) || (TxPower < 0)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower)); return FALSE; } } else/* 5.5 GHz */ { if ((TxPower > 15) || (TxPower < -7)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower)); return FALSE; } } pAd->ate.TxPower0 = TxPower; ATETxPwrHandler(pAd, 0); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER0_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx Power1 Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_TX_POWER1_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ CHAR TxPower; TxPower = simple_strtol(arg, 0, 10); if (pAd->ate.Channel <= 14) { if ((TxPower > 31) || (TxPower < 0)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower)); return FALSE; } } else { if ((TxPower > 15) || (TxPower < -7)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower)); return FALSE; } } pAd->ate.TxPower1 = TxPower; ATETxPwrHandler(pAd, 1); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER1_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE Tx Antenna Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_TX_Antenna_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ CHAR value; value = simple_strtol(arg, 0, 10); if ((value > 2) || (value < 0)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_Antenna_Proc::Out of range (Value=%d)\n", value)); return FALSE; } pAd->ate.TxAntennaSel = value; ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_Antenna_Proc (Antenna = %d)\n", pAd->ate.TxAntennaSel)); ATEDBGPRINT(RT_DEBUG_TRACE,("Ralink: Set_ATE_TX_Antenna_Proc Success\n")); // calibration power unbalance issues, merged from Arch Team ATEAsicSwitchChannel(pAd); return TRUE;}/* ========================================================================== Description: Set ATE Rx Antenna Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_RX_Antenna_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ CHAR value; value = simple_strtol(arg, 0, 10); if ((value > 3) || (value < 0)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_RX_Antenna_Proc::Out of range (Value=%d)\n", value)); return FALSE; } pAd->ate.RxAntennaSel = value; ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_Antenna_Proc (Antenna = %d)\n", pAd->ate.RxAntennaSel)); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_Antenna_Proc Success\n")); // calibration power unbalance issues, merged from Arch Team ATEAsicSwitchChannel(pAd); return TRUE;}/* ========================================================================== Description: Set ATE RF frequence offset Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_TX_FREQOFFSET_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ UCHAR RFFreqOffset = 0; ULONG R4 = 0; RFFreqOffset = simple_strtol(arg, 0, 10); if (RFFreqOffset >= 64) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_FREQOFFSET_Proc::Out of range, it should be in range of 0~63.\n")); return FALSE; } pAd->ate.RFFreqOffset = RFFreqOffset; { // RT28xx // shift TX power control to correct RF register bit position R4 = pAd->ate.RFFreqOffset << 15; R4 |= (pAd->LatchRfRegs.R4 & ((~0x001f8000))); pAd->LatchRfRegs.R4 = R4; RtmpRfIoWrite(pAd); } ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_FREQOFFSET_Proc (RFFreqOffset = %d)\n", pAd->ate.RFFreqOffset)); ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_FREQOFFSET_Proc Success\n")); return TRUE;}/* ========================================================================== Description: Set ATE RF BW Return: TRUE if all parameters are OK, FALSE otherwise==========================================================================*/INT Set_ATE_TX_BW_Proc( IN PRTMP_ADAPTER pAd, IN PSTRING arg){ INT i; UCHAR value = 0; UCHAR BBPCurrentBW; BBPCurrentBW = simple_strtol(arg, 0, 10); if ((BBPCurrentBW == 0) ) { pAd->ate.TxWI.BW = BW_20; } else { pAd->ate.TxWI.BW = BW_40; } /* RT35xx ATE will reuse this code segment. */ // Fix the error spectrum of CCK-40MHZ // Turn on BBP 20MHz mode by request here. if ((pAd->ate.TxWI.PHYMODE == MODE_CCK) && (pAd->ate.TxWI.BW == BW_40)) { ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_BW_Proc!! Warning!! CCK only supports 20MHZ!!\nBandwidth switch to 20\n")); pAd->ate.TxWI.BW = BW_20; } if (pAd->ate.TxWI.BW == BW_20) { if (pAd->ate.Channel <= 14) { for (i=0; i<5; i++) { if (pAd->Tx20MPwrCfgGBand[i] != 0xffffffff) { RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgGBand[i]); RTMPusecDelay(5000); } } } else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -