📄 rt_ate.c
字号:
RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value |= (1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Wait 10ms to wait all of the bulk-in URBs to complete. /* todo : remove this if not necessary */ NdisMSleep(10000); // Everything is ready to start normal Tx/Rx. RTUSBBulkReceive(pAd); netif_start_queue(pAd->net_dev); ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATE : ATESTOP \n")); } else if (!strcmp(arg, "TXCARR")) // Tx Carrier { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n")); pAd->ate.Mode |= ATE_TXCARR;#ifdef RT30xx for(i=0;i<ATE_BBP_REG_NUM;i++) restore_BBP[i]=0; //Record All BBP Value for(i=0;i<ATE_BBP_REG_NUM;i++) ATE_BBP_IO_READ8_BY_REG_ID(pAd,i,&restore_BBP[i]);#endif // RT30xx // // Disable Rx // May be we need not to do this, because these have been done in ATE_START mode ??? RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // QA has done the following steps if it is used. if (pAd->ate.bQATxStart == FALSE) { // Soft reset BBP. BbpSoftReset(pAd); // Carrier Test set BBP R22 bit7=1, bit6=1, bit[5~0]=0x01 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0] BbpData |= 0x000000C1; //set bit7=1, bit6=1, bit[5~0]=0x01 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); // set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1 RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value = Value | 0x00000010; RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); } } else if (!strcmp(arg, "TXCONT")) // Tx Continue { if (pAd->ate.bQATxStart == TRUE) { /* set MAC_SYS_CTRL(0x1004) bit4(Continuous Tx Production Test) and bit2(MAC TX enable) back to zero. */ RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); MacData &= 0xFFFFFFEB; RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); // set BBP R22 bit7=0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData &= 0xFFFFFF7F; //set bit7=0 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); } /* for TxCont mode. ** Step 1: Send 50 packets first then wait for a moment. ** Step 2: Send more 50 packet then start continue mode. */ ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCONT\n"));#ifdef RT30xx for(i=0;i<ATE_BBP_REG_NUM;i++) restore_BBP[i]=0; //Record All BBP Value for(i=0;i<ATE_BBP_REG_NUM;i++) ATE_BBP_IO_READ8_BY_REG_ID(pAd,i,&restore_BBP[i]);#endif // RT30xx // // Step 1: send 50 packets first. pAd->ate.Mode |= ATE_TXCONT; pAd->ate.TxCount = 50; pAd->ate.TxDoneCount = 0; // Soft reset BBP. BbpSoftReset(pAd); // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0); /* Only needed if we have to send some normal frames. */ SetJapanFilter(pAd); // Setup frame format. ATESetUpFrame(pAd, 0); // Enable Tx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value |= (1 << 2); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Disable Rx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Start Tx, RX DMA. RtmpDmaEnable(pAd, 1); InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount);#ifdef RALINK_28xx_QA if (pAd->ate.bQATxStart == TRUE) { pAd->ate.TxStatus = 1; //pAd->ate.Repeat = 0; }#endif // RALINK_28xx_QA // NdisAcquireSpinLock(&pAd->GenericLock);//0820 pAd->ContinBulkOut = FALSE; NdisReleaseSpinLock(&pAd->GenericLock); RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE); // Kick bulk out RTUSBKickBulkOut(pAd); /* To make sure all the 50 frames have been bulk out before executing step 2 */ while (atomic_read(&pAd->BulkOutRemained) > 0) { RTMPusecDelay(5000); } // Step 2: send more 50 packets then start continue mode. // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0); // Cont. TX set BBP R22 bit7=1 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData |= 0x00000080; //set bit7=1 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); pAd->ate.TxCount = 50; pAd->ate.TxDoneCount = 0; SetJapanFilter(pAd); // Setup frame format. ATESetUpFrame(pAd, 0); // Enable Tx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value |= (1 << 2); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Disable Rx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); // Start Tx, RX DMA. RtmpDmaEnable(pAd, 1); InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount);#ifdef RALINK_28xx_QA if (pAd->ate.bQATxStart == TRUE) { pAd->ate.TxStatus = 1; //pAd->ate.Repeat = 0; }#endif // RALINK_28xx_QA // NdisAcquireSpinLock(&pAd->GenericLock);//0820 pAd->ContinBulkOut = FALSE; NdisReleaseSpinLock(&pAd->GenericLock); RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE); // Kick bulk out RTUSBKickBulkOut(pAd);#if 1 RTMPusecDelay(500);#else while (atomic_read(&pAd->BulkOutRemained) > 0) { RTMPusecDelay(5000); }#endif // 1 // // Set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1. RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); MacData |= 0x00000010; RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); } else if (!strcmp(arg, "TXFRAME")) // Tx Frames { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXFRAME(Count=0x%08x)\n", pAd->ate.TxCount)); pAd->ate.Mode |= ATE_TXFRAME; // Soft reset BBP. BbpSoftReset(pAd); // Default value in BBP R22 is 0x0. BbpData = 0; 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);#ifdef RALINK_28xx_QA // add this for LoopBack mode if (pAd->ate.bQARxStart == FALSE) { // Disable Rx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); } if (pAd->ate.bQATxStart == TRUE) { pAd->ate.TxStatus = 1; //pAd->ate.Repeat = 0; }#else // Disable Rx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);#endif // RALINK_28xx_QA // // Enable Tx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value |= (1 << 2); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); SetJapanFilter(pAd); // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0); pAd->ate.TxDoneCount = 0; // Setup frame format ATESetUpFrame(pAd, 0); // Start Tx, RX DMA. RtmpDmaEnable(pAd, 1); // Check count is continuous or not yet. // // Due to the type mismatch between "pAd->BulkOutRemained"(atomic_t) and "pAd->ate.TxCount"(UINT32) // if (pAd->ate.TxCount == 0) { InterlockedExchange(&pAd->BulkOutRemained, 0); } else { InterlockedExchange(&pAd->BulkOutRemained, pAd->ate.TxCount); } ATEDBGPRINT(RT_DEBUG_TRACE, ("bulk out count = %d\n", atomic_read(&pAd->BulkOutRemained))); ASSERT((atomic_read(&pAd->BulkOutRemained) >= 0)); if (atomic_read(&pAd->BulkOutRemained) == 0) { ATEDBGPRINT(RT_DEBUG_TRACE, ("Send packet countinuously\n")); /* In 28xx, NdisAcquireSpinLock() == spin_lock_bh() */ /* NdisAcquireSpinLock only need one argument in 28xx. */ NdisAcquireSpinLock(&pAd->GenericLock); pAd->ContinBulkOut = TRUE; NdisReleaseSpinLock(&pAd->GenericLock); /* In 28xx, BULK_OUT_LOCK() == spin_lock_irqsave() */ BULK_OUT_LOCK(&pAd->BulkOutLock[0], IrqFlags);// peter : NdisAcquireSpinLock ==> BULK_OUT_LOCK pAd->BulkOutPending[0] = FALSE; BULK_OUT_UNLOCK(&pAd->BulkOutLock[0], IrqFlags);// peter : NdisAcquireSpinLock ==> BULK_OUT_LOCK } else { ATEDBGPRINT(RT_DEBUG_TRACE, ("Send packets depend on counter\n")); NdisAcquireSpinLock(&pAd->GenericLock); pAd->ContinBulkOut = FALSE; NdisReleaseSpinLock(&pAd->GenericLock); BULK_OUT_LOCK(&pAd->BulkOutLock[0], IrqFlags); pAd->BulkOutPending[0] = FALSE; BULK_OUT_UNLOCK(&pAd->BulkOutLock[0], IrqFlags); } RTUSB_SET_BULK_FLAG(pAd, fRTUSB_BULK_OUT_DATA_ATE); // Kick bulk out RTUSBKickBulkOut(pAd); }#ifdef RALINK_28xx_QA else if (!strcmp(arg, "TXSTOP")) //Enter ATE mode and set Tx/Rx Idle { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXSTOP\n")); atemode = pAd->ate.Mode; pAd->ate.Mode &= ATE_TXSTOP; pAd->ate.bQATxStart = FALSE;// pAd->ate.TxDoneCount = pAd->ate.TxCount;/*=========================================================================*/ if (atemode & ATE_TXCARR) { // No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0] ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); } else if (atemode & ATE_TXCARRSUPP) { // No Cont. TX set BBP R22 bit7=0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData &= ~(1 << 7); //set bit7=0 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); // No Carrier Suppression set BBP R24 bit0=0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData); BbpData &= 0xFFFFFFFE; //clear bit0 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData); } else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP)) { if (atemode & ATE_TXCONT) { // No Cont. TX set BBP R22 bit7=0 ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData); BbpData &= ~(1 << 7); //set bit7=0 ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData); } }/*=========================================================================*/ RTUSBRejectPendingPackets(pAd); RTUSBCleanUpDataBulkOutQueue(pAd); /* not used in RT28xx */ //RTUSBCleanUpMLMEWaitQueue(pAd); /* empty function so far */ RTUSBCleanUpMLMEBulkOutQueue(pAd);/*=========================================================================*/ // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0);/*=========================================================================*/ /* In 28xx, pAd->PendingRx is not of type atomic_t anymore */// while ((atomic_read(&pAd->PendingRx) > 0)) //pAd->BulkFlags != 0 wait bulk out finish /* peter todo : BulkInLock */ while (pAd->PendingRx > 0) {#if 1 ATE_RTUSBCancelPendingBulkInIRP(pAd);#else// NdisInterlockedDecrement(&pAd->PendingRx); pAd->PendingRx--;#endif RTMPusecDelay(500000); } while (((pAd->BulkOutPending[0] == TRUE) || (pAd->BulkOutPending[1] == TRUE) || (pAd->BulkOutPending[2] == TRUE) || (pAd->BulkOutPending[3] == TRUE)) && (pAd->BulkFlags != 0)) //pAd->BulkFlags != 0 wait bulk out finish { do { RTUSBCancelPendingBulkOutIRP(pAd); } while (FALSE); RTMPusecDelay(500000); } ASSERT(pAd->PendingRx == 0);/*=========================================================================*/ // Enable Tx, Rx DMA. RtmpDmaEnable(pAd, 1); /* task Tx status : 0 --> task is idle, 1 --> task is running */ pAd->ate.TxStatus = 0; // Soft reset BBP. BbpSoftReset(pAd); // Disable Tx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData); MacData &= (0xfffffffb); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); //Clean ATE Bulk in/out counter and continue setup InterlockedExchange(&pAd->BulkOutRemained, 0); pAd->ContinBulkOut = FALSE; } else if (!strcmp(arg, "RXSTOP")) { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXSTOP\n")); atemode = pAd->ate.Mode; // Disable Rx RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); pAd->ate.Mode &= ATE_RXSTOP; pAd->ate.bQARxStart = FALSE;// pAd->ate.TxDoneCount = pAd->ate.TxCount;/*=========================================================================*/ RTUSBRejectPendingPackets(pAd); RTUSBCleanUpDataBulkOutQueue(pAd); /* not used in RT28xx */ //RTUSBCleanUpMLMEWaitQueue(pAd); RTUSBCleanUpMLMEBulkOutQueue(pAd);/*=========================================================================*/ // Abort Tx, RX DMA. RtmpDmaEnable(pAd, 0);/*=========================================================================*/// while ((atomic_read(&pAd->PendingRx) > 0)) while (pAd->PendingRx > 0) {#if 1 ATE_RTUSBCancelPendingBulkInIRP(pAd);#else// NdisInterlockedDecrement(&pAd->PendingRx); pAd->PendingRx--;#endif RTMPusecDelay(500000); } while (((pAd->BulkOutPending[0] == TRUE) || (pAd->BulkOutPending[1] == TRUE) || (pAd->BulkOutPending[2] == TRUE) || (pAd->BulkOutPending[3] == TRUE)) && (pAd->BulkFlags != 0)) //pAd->BulkFlags != 0 wait bulk out finish { do { RTUSBCancelPendingBulkOutIRP(pAd); } while (FALSE); RTMPusecDelay(500000); } ASSERT(pAd->PendingRx == 0);/*=========================================================================*/ // Soft reset BBP. BbpSoftReset(pAd); pAd->ContinBulkIn = FALSE; }#endif // RALINK_28xx_QA // else if (!strcmp(arg, "RXFRAME")) // Rx Frames { ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXFRAME\n")); // Disable Rx of MAC block RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value); Value &= ~(1 << 3); RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value); // Default value in BBP R22 is 0x0. BbpData = 0; 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.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -