int32_t LMM_Boot_core(uint32_t lmid)
{
int32_t status;
uint32_t mSel = s_mSel;
//Don't call in ISR mode
/* Default out of range mSel */
if (mSel >= SM_LM_NUM_MSEL)
{
mSel = 0U;
}
s_bootLm = lmid;
s_bootSkip = g_lmmConfig[lmid].bootSkip[s_mSel];
/* Trigger SWI handler */
SWI_Trigger();
/* Collect status */
status = s_bootStatus;
/* Return status */
return status;
}
/*--------------------------------------------------------------------------*/
/* Post-boot clean-up */
/* */
/* Run any clean-up required after starting all LM */
/*--------------------------------------------------------------------------*/
int32_t LMM_PostBoot(void)
{
uint32_t lmmInitFlags = s_lmmInitFlags;
/* Just passthru to board/device */
return SM_SYSTEMPOSTBOOT(s_mSel, lmmInitFlags);
}
/*--------------------------------------------------------------------------*/
/* Return LM name */
/*--------------------------------------------------------------------------*/
int32_t LMM_LmNameGet(uint32_t lmId, uint32_t lm, string *lmNameAddr,
int32_t *len)
{
int32_t status = SM_ERR_SUCCESS;
/* Length requested? */
if (len != NULL)
{
static int32_t s_maxLen = 0;
/* Already known? */
if (s_maxLen == 0)
{
/* Loop over array */
for (uint32_t idx = 0U; idx < SM_NUM_LM; idx++)
{
/* Get max len */
s_maxLen = MAX(s_maxLen, (int32_t)
DEV_SM_StrLen(g_lmmConfig[idx].name));
}
}
/* Return result */
*len = s_maxLen;
}
/* Return pointer to name */
*lmNameAddr = g_lmmConfig[lm].name;
SM_TEST_MODE_ERR(SM_TEST_MODE_LMM_LVL2, SM_ERR_TEST)
/* Return status */
return status;
}