📄 rt_ate.c
字号:
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 back to driver. // RTUSB_UNLINK_URB(pRxContext->pUrb); /* Sleep 200 microsecs to give cancellation time to work. */ NdisMSleep(200); pAd->BulkInReq = 0;// InterlockedExchange(&pAd->PendingRx, 0); pAd->PendingRx = 0; pAd->NextRxBulkInReadIndex = 0; // Next Rx Read index pAd->NextRxBulkInIndex = RX_RING_SIZE - 1; // Rx Bulk pointer 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 // RT2870 //INT Set_ATE_Proc( IN PRTMP_ADAPTER pAd, IN PUCHAR 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 PUCHAR arg){ CHAR *value; INT i; if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 return FALSE; for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) return FALSE; //Invalid#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr3[i++], 1);#endif // CONFIG_STA_SUPPORT // } if(i != 6) return FALSE; //Invalid#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 PUCHAR arg){ CHAR *value; INT i; if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 return FALSE; for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) return FALSE; //Invalid#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr2[i++], 1);#endif // CONFIG_STA_SUPPORT // } if(i != 6) return FALSE; //Invalid#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 PUCHAR arg){ CHAR *value; INT i; if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17 return FALSE; for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":")) { if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) ) return FALSE; //Invalid#ifdef CONFIG_STA_SUPPORT AtoH(value, &pAd->ate.Addr1[i++], 1);#endif // CONFIG_STA_SUPPORT // } if(i != 6) return FALSE; //Invalid#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 PUCHAR arg){ UCHAR channel; channel = simple_strtol(arg, 0, 10); if ((channel < 1) || (channel > 216))// to allow A band channel : ((channel < 1) || (channel > 14)) { 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 PUCHAR 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.5GHz { 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 PUCHAR 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 PUCHAR 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")); 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 PUCHAR 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")); 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 PUCHAR arg){ UCHAR RFFreqOffset; ULONG R4; RFFreqOffset = simple_strtol(arg, 0, 10);#ifndef RT30xx if(RFFreqOffset >= 64)#endif // RT30xx //#ifdef RT30xx//2008/08/06: KH modified the limit of offset value from 65 to 95(0x5F) if(RFFreqOffset >= 95)#endif // RT30xx // { 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;#ifdef RT30xx if(IS_RT30xx(pAd)) { // Set RF offset UCHAR RFValue; RT30xxReadRFRegister(pAd, RF_R23, (PUCHAR)&RFValue); //2008/08/06: KH modified "pAd->RFFreqOffset" to "pAd->ate.RFFreqOffset" RFValue = (RFValue & 0x80) | pAd->ate.RFFreqOffset; RT30xxWriteRFRegister(pAd, RF_R23, (UCHAR)RFValue); } else#endif // RT30xx // { R4 = pAd->ate.RFFreqOffset << 15; // shift TX power control to correct RF register bit position 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 PUCHAR 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; 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 { 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); } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -