Загрузка данных


static uint32_t s_modeSel = 0U;
static uint8_t s_lmState[SM_NUM_LM];
static int32_t s_lmError[SM_NUM_LM];
static lmm_rst_rec_t s_lmBootReason[SM_NUM_LM];
static lmm_rst_rec_t s_lmShutdownReason[SM_NUM_LM];
static uint32_t s_cpuLm[SM_NUM_CPU];

/* Global variables */

const lmm_rst_rec_t g_swReason = DEV_SM_RST_REC_SW;
static const lmm_startstop_t s_lmmStart[SM_LM_NUM_START] =
{
    SM_LM_START_DATA
};
static const lmm_startstop_t s_lmmStop[SM_LM_NUM_STOP] =
{
    SM_LM_STOP_DATA
};

/* Local functions */

static int32_t LMM_DoBoot(lmm_rpc_trigger_t *trigger,
    const lmm_rst_rec_t *bootRec);
static int32_t LMM_DoShutdown(lmm_rpc_trigger_t *trigger,
    const lmm_rst_rec_t *shutdownRec);
static int32_t LM_ProcessStart(uint32_t lmId, uint32_t start, bool cpu);
static int32_t LM_ProcessStop(uint32_t lmId, uint32_t stop);
static int32_t LM_ClockStart(uint32_t lmId, uint32_t rsrc, uint32_t numArg,
    const uint64_t *arg);

/*--------------------------------------------------------------------------*/
/* Init LMM system                                                          */
/*--------------------------------------------------------------------------*/
int32_t LMM_SystemInit(void)
{
    int32_t status = SM_ERR_SUCCESS;
    lmm_rst_rec_t bootRec, shutdownRec;

    /* Get system reset reason */
    LM_SystemReason(0U, &bootRec, &shutdownRec);

    /* Default for SM LM */
    s_lmBootReason[0] = bootRec;
    s_lmShutdownReason[0] = shutdownRec;

    /* Default for all LM */
    for (uint32_t lmId = 0U; lmId < SM_NUM_LM; lmId++)
    {
        s_lmShutdownReason[lmId] = shutdownRec;
    }

    /* Return status */
    return status;
}

/*--------------------------------------------------------------------------*/
/* Set mode select                                                          */
/*--------------------------------------------------------------------------*/
int32_t LMM_SystemModeSelSet(uint32_t mSel)
{
    int32_t status = SM_ERR_SUCCESS;

    /* Check mSel*/
    if (mSel < SM_LM_NUM_MSEL)
    {
        s_modeSel = mSel;

        /* Loop over stop list to map CPUs to LM */
        for (uint32_t idx = 0U; idx < SM_LM_NUM_STOP; idx++)
        {
            if ((s_lmmStop[idx].mSel == s_modeSel)
                && (s_lmmStop[idx].ss == LMM_SS_CPU))
            {
                s_cpuLm[s_lmmStop[idx].rsrc] = s_lmmStop[idx].lmId;
            }
        }
    }
    else
    {
        status = SM_ERR_INVALID_PARAMETERS;
    }

    /* Return status */
    return status;
}

/*--------------------------------------------------------------------------*/
/* Return reset reason name                                                 */
/*--------------------------------------------------------------------------*/
int32_t LMM_SystemReasonNameGet(uint32_t lmId, uint32_t resetReason,
    string *reasonNameAddr, int32_t *len)
{
    /* Just passthru to board/device */
    return SM_SYSTEMREASONNAMEGET(resetReason, reasonNameAddr, len);
}

/*--------------------------------------------------------------------------*/
/* Complete system reset handling                                           */
/*--------------------------------------------------------------------------*/
int32_t LMM_SystemRstComp(const lmm_rst_rec_t *resetRec)
{
    int32_t status;

    status = LMM_SystemReset(0U, 0U, false, resetRec);

    /* Return status */
    return status;
}