On Fri, Sep 12, 2025 at 12:13 PM Wilfred Mallawa
<[email protected]> wrote:
>
> From: Wilfred Mallawa <[email protected]>
>
> SPDM maybe used over different transports. This patch specifies the
> trasnport types as an enum with a qdev property definition such that
> a user input transport type (string) can be mapped directly into the
> respective SPDM transportenum for internal use.
>
> Signed-off-by: Wilfred Mallawa <[email protected]>
> Reviewed-by: Jonathan Cameron <[email protected]>

Reviewed-by: Alistair Francis <[email protected]>

Alistair

> ---
>  backends/spdm-socket.c       | 23 +++++++++++++++++++++++
>  include/system/spdm-socket.h | 19 +++++++++++++++----
>  2 files changed, 38 insertions(+), 4 deletions(-)
>
> diff --git a/backends/spdm-socket.c b/backends/spdm-socket.c
> index ab74a02d9c..6d8f02d3b9 100644
> --- a/backends/spdm-socket.c
> +++ b/backends/spdm-socket.c
> @@ -13,6 +13,9 @@
>  #include "qemu/osdep.h"
>  #include "system/spdm-socket.h"
>  #include "qapi/error.h"
> +#include "hw/qdev-properties.h"
> +#include "hw/qdev-properties-system.h"
> +#include "hw/core/qdev-prop-internal.h"
>
>  static bool read_bytes(const int socket, uint8_t *buffer,
>                         size_t number_of_bytes)
> @@ -246,3 +249,23 @@ void spdm_socket_close(const int socket, uint32_t 
> transport_type)
>      send_platform_data(socket, transport_type,
>                         SPDM_SOCKET_COMMAND_SHUTDOWN, NULL, 0);
>  }
> +
> +const QEnumLookup SpdmTransport_lookup = {
> +    .array = (const char *const[]) {
> +        [SPDM_SOCKET_TRANSPORT_TYPE_UNSPEC] = "unspecified",
> +        [SPDM_SOCKET_TRANSPORT_TYPE_MCTP] = "mctp",
> +        [SPDM_SOCKET_TRANSPORT_TYPE_PCI_DOE] = "doe",
> +        [SPDM_SOCKET_TRANSPORT_TYPE_SCSI] = "scsi",
> +        [SPDM_SOCKET_TRANSPORT_TYPE_NVME] = "nvme",
> +    },
> +    .size = SPDM_SOCKET_TRANSPORT_TYPE_MAX
> +};
> +
> +const PropertyInfo qdev_prop_spdm_trans = {
> +    .type = "SpdmTransportType",
> +    .description = "Spdm Transport, doe/nvme/mctp/scsi/unspecified",
> +    .enum_table = &SpdmTransport_lookup,
> +    .get = qdev_propinfo_get_enum,
> +    .set = qdev_propinfo_set_enum,
> +    .set_default_value = qdev_propinfo_set_default_value_enum,
> +};
> diff --git a/include/system/spdm-socket.h b/include/system/spdm-socket.h
> index f0c8b64d1b..9d0b85f8cc 100644
> --- a/include/system/spdm-socket.h
> +++ b/include/system/spdm-socket.h
> @@ -110,11 +110,22 @@ typedef struct {
>  #define SPDM_SOCKET_COMMAND_UNKOWN                0xFFFF
>  #define SPDM_SOCKET_COMMAND_TEST                  0xDEAD
>
> -#define SPDM_SOCKET_TRANSPORT_TYPE_MCTP           0x01
> -#define SPDM_SOCKET_TRANSPORT_TYPE_PCI_DOE        0x02
> -#define SPDM_SOCKET_TRANSPORT_TYPE_NVME           0x04
> -
>  #define SPDM_SOCKET_MAX_MESSAGE_BUFFER_SIZE       0x1200
>  #define SPDM_SOCKET_MAX_MSG_STATUS_LEN            0x02
>
> +typedef enum SpdmTransportType {
> +    SPDM_SOCKET_TRANSPORT_TYPE_UNSPEC = 0,
> +    SPDM_SOCKET_TRANSPORT_TYPE_MCTP,
> +    SPDM_SOCKET_TRANSPORT_TYPE_PCI_DOE,
> +    SPDM_SOCKET_TRANSPORT_TYPE_SCSI,
> +    SPDM_SOCKET_TRANSPORT_TYPE_NVME,
> +    SPDM_SOCKET_TRANSPORT_TYPE_MAX
> +} SpdmTransportType;
> +
> +extern const PropertyInfo qdev_prop_spdm_trans;
> +
> +#define DEFINE_PROP_SPDM_TRANS(_name, _state, _field, _default) \
> +    DEFINE_PROP_UNSIGNED(_name, _state, _field, _default, \
> +                         qdev_prop_spdm_trans, SpdmTransportType)
> +
>  #endif
> --
> 2.51.0
>
>

Reply via email to