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 > >
