[Skiboot] [PATCH V2 05/21] core/pldm: Encode GetTID response

Abhishek SIngh Tomar abhishek at linux.ibm.com
Wed Mar 16 22:07:53 AEDT 2022


On Fri, Mar 04, 2022 at 02:11:38PM +0100, Christophe Lombard wrote:
> A PLDM Terminus is defined as the point of communication termination for
> PLDM messages and the PLDM functions associated with those messages.
> Given a PLDM terminus, a mechanism is required that can uniquely identify
> each terminus so that the semantic information can be bound to that
> identification.
> The Terminus ID (TID) is a value that identifies a PLDM terminus.
> TIDs are used in PLDM messages when it is necessary to identify the PLDM
> terminus that is the source of the PLDM Message.
> 
> The GetTID command is used to retrieve the present Terminus ID (TID)
> setting for a PLDM Terminus.
> 
> Signed-off-by: Christophe Lombard <clombard at linux.vnet.ibm.com>
Reviewed-by: Abhishek Singh Tomar <abhishek at linux.ibm.com>
> ---
>  core/pldm/pldm-responder.c | 39 ++++++++++++++++++++++++++++++++++++++
>  core/pldm/pldm.h           |  1 +
>  2 files changed, 40 insertions(+)
> 
> diff --git a/core/pldm/pldm-responder.c b/core/pldm/pldm-responder.c
> index 12e5b2c3..76ccaab1 100644
> --- a/core/pldm/pldm-responder.c
> +++ b/core/pldm/pldm-responder.c
> @@ -78,6 +78,17 @@ static void pldm_add_type(struct pldm_type *new_type)
>  	      new_type->name, new_type->pldm_type_id);
>  }
>  
> +static void pldm_add_cmd(struct pldm_type *type, struct pldm_cmd *new_cmd)
> +{
> +	assert(new_cmd->pldm_cmd_id < 256); /* limited by GetPLDMCommands */
> +	assert(new_cmd->handler);
> +	assert(!find_cmd(type, new_cmd->pldm_cmd_id));
> +
> +	list_add_tail(&type->commands, &new_cmd->link);
> +	prlog(PR_DEBUG, "Registered command %s (%d) under %s\n",
> +		new_cmd->name, new_cmd->pldm_cmd_id, type->name);
> +}
> +
>  /*
>   * PLDM Base commands support
>   */
> @@ -88,6 +99,32 @@ static struct pldm_type pldm_base_type = {
>  	.version = { 0xF1, 0xF0, 0xF0, 0x00 },
>  };
>  
> +/*
> + * GetTID command (0x02)
> + * The GetTID command is used to retrieve the present Terminus ID (TID)
> + * setting for a PLDM Terminus.
> + */
> +static int get_tid_handler(const struct pldm_rx_data *req)
> +{
> +	char resp_buf[PKT_SIZE(struct pldm_get_tid_resp)];
> +
> +	memset(resp_buf, 0, sizeof(resp_buf));
> +
> +	encode_get_tid_resp(req->hdrinf.instance,
> +			    PLDM_SUCCESS,
> +			    HOST_TID,
> +			    (void *) resp_buf);
> +
> +	pldm_send(resp_buf, sizeof(resp_buf));
> +
> +	return OPAL_SUCCESS;
> +}
> +static struct pldm_cmd base_get_tid = {
> +	.name = "GetTid",
> +	.pldm_cmd_id = PLDM_GET_TID,
> +	.handler = get_tid_handler,
> +};
> +
>  int pldm_rx_handle_request(struct pldm_rx_data *rx)
>  {
>  	const struct pldm_type *t;
> @@ -113,5 +150,7 @@ int pldm_mctp_responder_init(void)
>  	/* Register mandatory commands we'll respond to - DSP0240 */
>  	pldm_add_type(&pldm_base_type);
>  
> +	pldm_add_cmd(&pldm_base_type, &base_get_tid);
> +
>  	return OPAL_SUCCESS;
>  }
> diff --git a/core/pldm/pldm.h b/core/pldm/pldm.h
> index 10dccc3d..74f883d6 100644
> --- a/core/pldm/pldm.h
> +++ b/core/pldm/pldm.h
> @@ -17,6 +17,7 @@ void printbuf(const char *name, const char *msg, int len);
>   * BMC EID default = 8.
>   */
>  # define BMC_EID  8
> +# define HOST_TID 9
>  
>  #define PKT_SIZE(x) (sizeof(struct pldm_msg_hdr) + sizeof(x))
>  
> -- 
> 2.35.1
> 
> _______________________________________________
> Skiboot mailing list
> Skiboot at lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/skiboot


More information about the Skiboot mailing list