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


/*--------------------------------------------------------------------------*/
/* Shutdown LM                                                              */
/*--------------------------------------------------------------------------*/
/* coverity[misra_c_2012_rule_17_2_violation] */
int32_t LMM_SystemLmShutdown(uint32_t lmId, uint32_t agentId,
    uint32_t shutdownLm, bool graceful, const lmm_rst_rec_t *shutdownRec)
{
    int32_t status = SM_ERR_SUCCESS;

    /* Check LM */
    if (shutdownLm >= SM_NUM_LM)
    {
        status = SM_ERR_NOT_FOUND;
    }

    /* Check LM state */
    if ((status == SM_ERR_SUCCESS)
        && (s_lmState[shutdownLm] != LMM_STATE_LM_OFF))
    {
        lmm_rpc_trigger_t trigger =
        {
            .event = LMM_TRIGGER_SYSTEM,
            .parm[0] = LMM_TRIGGER_PARM_LM_SHUTDOWN,
            .parm[1] = agentId,
            .parm[2] = shutdownLm,
            .parm[3] = graceful ? 1U : 0U
        };

        /* Notify LM via system */
        if (graceful || (lmId != shutdownLm))
        {
            (void) LMM_RpcNotificationTrigger(shutdownLm, &trigger);
        }

        /* Force shutdown? */
        if (!graceful)
        {
            /* From LM */
            trigger.parm[3] = lmId;

            status = LMM_DoShutdown(&trigger, shutdownRec);
        }
    }

    SM_TEST_MODE_ERR(SM_TEST_MODE_LMM_LVL1, SM_ERR_TEST)

    /* Return status */
    return status;
}

/*--------------------------------------------------------------------------*/
/* Reset LM                                                                 */
/*--------------------------------------------------------------------------*/
int32_t LMM_SystemLmReset(uint32_t lmId, uint32_t agentId, uint32_t resetLm,
    bool warm, bool graceful, const lmm_rst_rec_t *resetRec)
{
    int32_t status = SM_ERR_SUCCESS;

    /* Check LM */
    if (resetLm >= SM_NUM_LM)
    {
        status = SM_ERR_NOT_FOUND;
    }

    if (status == SM_ERR_SUCCESS)
    {
        lmm_rpc_trigger_t trigger =
        {
            .rpcInst = 0U,
            .event = LMM_TRIGGER_SYSTEM,
            .parm[0] = LMM_TRIGGER_PARM_LM_COLD_RESET,
            .parm[1] = agentId,
            .parm[2] = resetLm,
            .parm[3] = graceful ? 1U : 0U
        };

        /* Warm reset? */
        if (warm)
        {
            trigger.parm[0] = LMM_TRIGGER_PARM_LM_WARM_RESET;
        }

        /* Notify LM via system */
        if (graceful || (lmId != resetLm))
        {
            (void) LMM_RpcNotificationTrigger(resetLm, &trigger);
        }

        /* Force reset? */
        if (!graceful)
        {
            /* From LM */
            trigger.parm[3] = lmId;

            /* Shutdown LM */
            status = LMM_DoShutdown(&trigger, resetRec);

            /* Boot the LM */
            if (status == SM_ERR_SUCCESS)
            {
                status = LMM_DoBoot(&trigger, resetRec);
            }
        }
    }

    SM_TEST_MODE_ERR(SM_TEST_MODE_LMM_LVL1, SM_ERR_TEST)

    /* Return status */
    return status;
}