/*----------------------------------------------------------------------------*/ VOID nicOidCmdEnterRFTestTimeout(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo) { ASSERT(prAdapter); /* 1. Remove pending TX frames */ nicTxRelease(prAdapter); /* 1.1 clear pending Security / Management Frames */ kalClearSecurityFrames(prAdapter->prGlueInfo); kalClearMgmtFrames(prAdapter->prGlueInfo); /* 1.2 clear pending TX packet queued in glue layer */ kalFlushPendingTxPackets(prAdapter->prGlueInfo); /* 2. indiate for OID failure */ kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, 0, WLAN_STATUS_FAILURE); }
/*----------------------------------------------------------------------------*/ BOOLEAN nicpmSetAcpiPowerD3 ( IN P_ADAPTER_T prAdapter ) { UINT_32 i; ASSERT(prAdapter); /* 1. MGMT - unitialization */ nicUninitMGMT(prAdapter); /* 2. Disable Interrupt */ nicDisableInterrupt(prAdapter); /* 3. emit CMD_NIC_POWER_CTRL command packet */ wlanSendNicPowerCtrlCmd(prAdapter, 1); /* 4. Clear Interrupt Status */ i = 0; while(i < CFG_IST_LOOP_COUNT && nicProcessIST(prAdapter) != WLAN_STATUS_NOT_INDICATING) { i++; }; /* 5. Remove pending TX */ nicTxRelease(prAdapter, TRUE); // 5.1 clear pending Security / Management Frames kalClearSecurityFrames(prAdapter->prGlueInfo); kalClearMgmtFrames(prAdapter->prGlueInfo); // 5.2 clear pending TX packet queued in glue layer kalFlushPendingTxPackets(prAdapter->prGlueInfo); /* 6. Set Onwership to F/W */ nicpmSetFWOwn(prAdapter, FALSE); /* 7. Set variables */ prAdapter->rAcpiState = ACPI_STATE_D3; return TRUE; }
VOID nicCmdEventEnterRfTest(IN P_ADAPTER_T prAdapter, IN P_CMD_INFO_T prCmdInfo, IN PUINT_8 pucEventBuf) { UINT_32 u4WHISR = 0, u4Value = 0; UINT_8 aucTxCount[8]; ASSERT(prAdapter); ASSERT(prCmdInfo); /* [driver-land] */ prAdapter->fgTestMode = TRUE; /* 0. always indicate disconnection */ if (kalGetMediaStateIndicated(prAdapter->prGlueInfo) != PARAM_MEDIA_STATE_DISCONNECTED) { kalIndicateStatusAndComplete(prAdapter->prGlueInfo, WLAN_STATUS_MEDIA_DISCONNECT, NULL, 0); } /* 1. Remove pending TX */ nicTxRelease(prAdapter); /* 1.1 clear pending Security / Management Frames */ kalClearSecurityFrames(prAdapter->prGlueInfo); kalClearMgmtFrames(prAdapter->prGlueInfo); /* 1.2 clear pending TX packet queued in glue layer */ kalFlushPendingTxPackets(prAdapter->prGlueInfo); /* 2. Reset driver-domain FSMs */ nicUninitMGMT(prAdapter); nicResetSystemService(prAdapter); nicInitMGMT(prAdapter, NULL); /* 3. Disable Interrupt */ HAL_INTR_DISABLE(prAdapter); /* 4. Block til firmware completed entering into RF test mode */ kalMsleep(500); while (1) { HAL_MCR_RD(prAdapter, MCR_WCIR, &u4Value); if (u4Value & WCIR_WLAN_READY) { break; } else if (kalIsCardRemoved(prAdapter->prGlueInfo) == TRUE || fgIsBusAccessFailed == TRUE) { if (prCmdInfo->fgIsOid) { /* Update Set Infomation Length */ kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, WLAN_STATUS_NOT_SUPPORTED); } return; } else kalMsleep(10); } /* 5. Clear Interrupt Status */ HAL_READ_INTR_STATUS(prAdapter, 4, (PUINT_8) & u4WHISR); if (HAL_IS_TX_DONE_INTR(u4WHISR)) { HAL_READ_TX_RELEASED_COUNT(prAdapter, aucTxCount); } /* 6. Reset TX Counter */ nicTxResetResource(prAdapter); /* 7. Re-enable Interrupt */ HAL_INTR_ENABLE(prAdapter); /* 8. completion indication */ if (prCmdInfo->fgIsOid) { /* Update Set Infomation Length */ kalOidComplete(prAdapter->prGlueInfo, prCmdInfo->fgSetQuery, prCmdInfo->u4SetInfoLen, WLAN_STATUS_SUCCESS); } #if CFG_SUPPORT_NVRAM /* 9. load manufacture data */ wlanLoadManufactureData(prAdapter, kalGetConfiguration(prAdapter->prGlueInfo)); #endif return; }