//------------------------------------------------------------------------------ tOplkError ctrlucal_checkKernelStack(void) { tOplkError ret; tCtrlKernelStatus kernelStatus; BOOL fExit = FALSE; int timeout = 0; UINT16 retVal; DEBUG_LVL_CTRL_TRACE("Check kernel stack...\n"); while (!fExit) { switch (kernelStatus = ctrlucal_getStatus()) { case kCtrlStatusReady: DEBUG_LVL_CTRL_TRACE("-> Kernel stack is ready\n"); fExit = TRUE; ret = kErrorOk; break; case kCtrlStatusRunning: /* try to shutdown kernel stack */ DEBUG_LVL_CTRL_TRACE("-> Try to shutdown Kernel Stack\n"); ret = ctrlucal_executeCmd(kCtrlCleanupStack, &retVal); if ((ret != kErrorOk) || ((tOplkError)retVal != kErrorOk)) { fExit = TRUE; ret = kErrorNoResource; break; } break; default: if (timeout == 0) { DEBUG_LVL_CTRL_TRACE("-> Wait for kernel stack\n"); } target_msleep(1000U); if (timeout++ >= CMD_TIMEOUT_SEC) { fExit = TRUE; ret = kErrorNoResource; } break; } } return ret; }
//------------------------------------------------------------------------------ tOplkError ctrlucal_checkKernelStack(void) { UINT16 kernelStatus; tOplkError ret; UINT16 retVal; DEBUG_LVL_CTRL_TRACE("Checking for kernel stack...\n"); kernelStatus = ctrlucal_getStatus(); switch (kernelStatus) { case kCtrlStatusReady: ret = kErrorOk; break; case kCtrlStatusRunning: /* try to shutdown kernel stack */ ret = ctrlucal_executeCmd(kCtrlCleanupStack, &retVal); if ((ret != kErrorOk) || ((tOplkError)retVal != kErrorOk)) { ret = kErrorNoResource; break; } target_msleep(1000); kernelStatus = ctrlucal_getStatus(); if (kernelStatus != kCtrlStatusReady) ret = kErrorNoResource; else ret = kErrorOk; break; default: ret = kErrorNoResource; break; } return ret; }
//------------------------------------------------------------------------------ tOplkError ctrlk_executeCmd(tCtrlCmdType cmd_p, UINT16* pRet_p, tCtrlKernelStatus* pStatus_p, BOOL* pfExit_p) { tOplkError ret = kErrorOk; tCtrlKernelStatus status; BOOL fExit; tOplkError retVal; if (instance_l.pfnExecuteCmdCb != NULL) { if (instance_l.pfnExecuteCmdCb(cmd_p, pRet_p, pStatus_p, pfExit_p)) return kErrorOk; } switch (cmd_p) { case kCtrlInitStack: DEBUG_LVL_CTRL_TRACE("Initialize kernel modules...\n"); retVal = initStack(); *pRet_p = (UINT16)retVal; status = kCtrlStatusRunning; fExit = FALSE; break; case kCtrlCleanupStack: DEBUG_LVL_CTRL_TRACE("Shutdown kernel modules...\n"); retVal = shutdownStack(); *pRet_p = (UINT16)retVal; status = kCtrlStatusReady; fExit = FALSE; break; case kCtrlShutdown: DEBUG_LVL_CTRL_TRACE("Shutdown kernel stack...\n"); retVal = shutdownStack(); *pRet_p = (UINT16)retVal; status = kCtrlStatusUnavailable; fExit = TRUE; break; case kCtrlGetVersionHigh: *pRet_p = (UINT16)(PLK_DEFINED_STACK_VERSION >> 16); status = kCtrlStatusUnchanged; fExit = FALSE; break; case kCtrlGetVersionLow: *pRet_p = (UINT16)(PLK_DEFINED_STACK_VERSION & 0xFFFF); status = kCtrlStatusUnchanged; fExit = FALSE; break; case kCtrlGetFeaturesHigh: *pRet_p = (UINT16)(instance_l.features >> 16); status = kCtrlStatusUnchanged; fExit = FALSE; break; case kCtrlGetFeaturesLow: *pRet_p = (UINT16)(instance_l.features & 0xFFFF); status = kCtrlStatusUnchanged; fExit = FALSE; break; default: DEBUG_LVL_ERROR_TRACE("%s() Unknown command %d\n", __func__, cmd_p); ret = kErrorGeneralError; status = kCtrlStatusUnavailable; fExit = TRUE; break; } if (pStatus_p != NULL) { *pStatus_p = status; } if (pfExit_p != NULL) { *pfExit_p = fExit; } return ret; }
//------------------------------------------------------------------------------ tOplkError ctrlucal_checkKernelStack(void) { tDualprocReturn dualRet; tCtrlKernelStatus kernelStatus; tOplkError ret; UINT16 magic; UINT16 retVal; UINT32 timeout = 0; BOOL fExit = FALSE; DEBUG_LVL_CTRL_TRACE("Checking for kernel stack...\n"); dualRet = dualprocshm_readDataCommon(instance_l.dualProcDrvInst, offsetof(tCtrlBuf, magic), sizeof(magic), (UINT8*)&magic); if (dualRet != kDualprocSuccessful) return kErrorGeneralError; if (magic != CTRL_MAGIC) { DEBUG_LVL_CTRL_TRACE("Kernel daemon not running! Exiting...\n"); return kErrorNoResource; } while (!fExit) { switch (kernelStatus = ctrlucal_getStatus()) { case kCtrlStatusReady: DEBUG_LVL_CTRL_TRACE("-> Kernel Stack is ready\n"); fExit = TRUE; ret = kErrorOk; break; case kCtrlStatusRunning: /* try to shutdown kernel stack */ DEBUG_LVL_CTRL_TRACE("-> Try to shutdown Kernel Stack\n"); ret = ctrlucal_executeCmd(kCtrlCleanupStack, &retVal); if ((ret != kErrorOk) || ((tOplkError)retVal != kErrorOk)) { fExit = TRUE; ret = kErrorNoResource; break; } break; default: if (timeout == 0) { DEBUG_LVL_CTRL_TRACE("-> Wait for Kernel Stack\n"); } target_msleep(1000U); if (timeout++ >= CMD_TIMEOUT_SEC) { fExit = TRUE; ret = kErrorNoResource; } break; } } return ret; }