[Skiboot] [PATCH V6 11/21] core/pldm: Encode state effecter request

Christophe Lombard clombard at linux.vnet.ibm.com
Thu Apr 13 22:43:34 AEST 2023



Le 12/04/2023 à 17:25, Frederic Barrat a écrit :
>
>
> On 13/09/2022 12:26, Christophe Lombard wrote:
>> PLDM effecters provide a general mechanism for controlling or 
>> configuring a
>> state or numeric setting of an entity.
>> The entity state and numeric setting values are written into an 
>> effecter.
>>
>> PLDM commands are specified for writing the state or numeric setting 
>> to an
>> effecter. Effecters are identified by and accessed using an 
>> EffecterID that
>> is unique for each effecter within a given terminus.
>>
>> PLDM State Effecters provide a regular command structure for setting 
>> state
>> information in order to change the state of an entity.
>>
>> The SetStateEffecterStates command is used to set the state of one or 
>> more
>> effecters within a PLDM State Effecter.
>>
>> Reviewed-by: Abhishek Singh Tomar <abhishek at linux.ibm.com>
>> Signed-off-by: Christophe Lombard <clombard at linux.vnet.ibm.com>
>> ---
>>   core/pldm/pldm-platform-requests.c | 76 ++++++++++++++++++++++++++++++
>>   1 file changed, 76 insertions(+)
>>
>> diff --git a/core/pldm/pldm-platform-requests.c 
>> b/core/pldm/pldm-platform-requests.c
>> index 965820c8..93b98438 100644
>> --- a/core/pldm/pldm-platform-requests.c
>> +++ b/core/pldm/pldm-platform-requests.c
>> @@ -39,6 +39,82 @@ static void pdr_init_complete(bool success)
>>       pdr_ready = true;
>>   }
>>   +struct set_effecter_state_response {
>> +    uint8_t completion_code;
>> +};
>> +
>> +/*
>> + * Create and send a PLDM request message for SetStateEffecterStates.
>> + */
>> +static int set_state_effecter_states_req(uint16_t effecter_id,
>> +                     set_effecter_state_field *field,
>> +                     bool no_timeout)
>> +{
>> +    char request_msg[PKT_SIZE(struct 
>> pldm_set_state_effecter_states_req)];
>> +    size_t response_len, payload_len;
>> +    void *response_msg;
>> +    int rc;
>> +
>> +    struct pldm_set_state_effecter_states_req states_req = {
>> +        .effecter_id = effecter_id,
>> +        .comp_effecter_count = 1
>> +    };
>> +
>> +    struct set_effecter_state_response response;
>> +
>> +    /* Encode the state effecter states request */
>> +    rc = encode_set_state_effecter_states_req(
>> +            DEFAULT_INSTANCE_ID,
>> +            states_req.effecter_id,
>> +            states_req.comp_effecter_count,
>> +            field,
>> +            (struct pldm_msg *)request_msg);
>> +    if (rc != PLDM_SUCCESS) {
>> +        prlog(PR_ERR, "Encode SetStateEffecter Error, rc: %d\n",
>> +                  rc);
>> +        return OPAL_PARAMETER;
>> +    }
>> +
>> +    /* Send and get the response message bytes.
>> +     * It may happen that for some commands, the responder does not
>> +     * have time to respond.
>> +     */
>> +    if (no_timeout) {
>> +        rc = pldm_mctp_message_tx(BMC_EID, request_msg, 
>> sizeof(request_msg));
>> +        if (rc)
>> +            prlog(PR_ERR, "Failed to send SetStateEffecter request, 
>> rc = %d\n", rc);
>> +
>> +        return rc;
>> +    }
>> +
>> +    /* Send and get the response message bytes */
>> +    rc = pldm_requester_queue_and_wait(request_msg, 
>> sizeof(request_msg),
>> +                       &response_msg, &response_len);
>> +    if (rc) {
>> +        prlog(PR_ERR, "Communication Error, req: SetStateEffecter, 
>> rc: %d\n", rc);
>> +            free(response_msg);
>
> No need to call 'free(response_msg)' in that path (unlike below)
>
>   Fred

That's correct. Thanks


More information about the Skiboot mailing list