On Fri, Sep 12, 2025 at 12:13 PM Wilfred Mallawa
<wilfred.opensource@gmail.com> wrote:
>
> From: Wilfred Mallawa <wilfred.mallawa@wdc.com>
>
> 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 <wilfred.mallawa@wdc.com>
> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
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
>
>