Message ID | 20250212123659.52764-2-philmd@linaro.org |
---|---|
State | Superseded |
Headers | show |
Series | hw/microblaze: Allow running cross-endian vCPUs | expand |
Philippe Mathieu-Daudé <philmd@linaro.org> writes: > Introduce the EndianMode type and the DEFINE_PROP_ENDIAN() macros. > Endianness can be BIG, LITTLE or unspecified (default). > > Reviewed-by: Thomas Huth <thuth@redhat.com> > Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> > --- > qapi/common.json | 16 ++++++++++++++++ > include/hw/qdev-properties-system.h | 7 +++++++ > hw/core/qdev-properties-system.c | 11 +++++++++++ > 3 files changed, 34 insertions(+) > > diff --git a/qapi/common.json b/qapi/common.json > index 6ffc7a37890..33d8df19f67 100644 > --- a/qapi/common.json > +++ b/qapi/common.json > @@ -212,3 +212,19 @@ > ## > { 'struct': 'HumanReadableText', > 'data': { 'human-readable-text': 'str' } } > + > +## > +# @EndianMode: > +# > +# An enumeration of three options: little, big, and unspecified Not sure this sentence is worth its keep. It's consistent with existing practice in this file, though. > +# > +# @unspecified: Endianness not specified > +# > +# @little: Little endianness > +# > +# @big: Big endianness > +# > +# Since: 10.0 > +## > +{ 'enum': 'EndianMode', > + 'data': [ 'unspecified', 'little', 'big' ] } Acked-by: Markus Armbruster <armbru@redhat.com> [...]
diff --git a/qapi/common.json b/qapi/common.json index 6ffc7a37890..33d8df19f67 100644 --- a/qapi/common.json +++ b/qapi/common.json @@ -212,3 +212,19 @@ ## { 'struct': 'HumanReadableText', 'data': { 'human-readable-text': 'str' } } + +## +# @EndianMode: +# +# An enumeration of three options: little, big, and unspecified +# +# @unspecified: Endianness not specified +# +# @little: Little endianness +# +# @big: Big endianness +# +# Since: 10.0 +## +{ 'enum': 'EndianMode', + 'data': [ 'unspecified', 'little', 'big' ] } diff --git a/include/hw/qdev-properties-system.h b/include/hw/qdev-properties-system.h index 7ec37f6316c..ead4dfc2f02 100644 --- a/include/hw/qdev-properties-system.h +++ b/include/hw/qdev-properties-system.h @@ -30,6 +30,7 @@ extern const PropertyInfo qdev_prop_pcie_link_speed; extern const PropertyInfo qdev_prop_pcie_link_width; extern const PropertyInfo qdev_prop_cpus390entitlement; extern const PropertyInfo qdev_prop_iothread_vq_mapping_list; +extern const PropertyInfo qdev_prop_endian_mode; #define DEFINE_PROP_PCI_DEVFN(_n, _s, _f, _d) \ DEFINE_PROP_SIGNED(_n, _s, _f, _d, qdev_prop_pci_devfn, int32_t) @@ -97,4 +98,10 @@ extern const PropertyInfo qdev_prop_iothread_vq_mapping_list; DEFINE_PROP(_name, _state, _field, qdev_prop_iothread_vq_mapping_list, \ IOThreadVirtQueueMappingList *) +#define DEFINE_PROP_ENDIAN(_name, _state, _field, _default) \ + DEFINE_PROP_UNSIGNED(_name, _state, _field, _default, \ + qdev_prop_endian_mode, EndianMode) +#define DEFINE_PROP_ENDIAN_NODEFAULT(_name, _state, _field) \ + DEFINE_PROP_ENDIAN(_name, _state, _field, ENDIAN_MODE_UNSPECIFIED) + #endif diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-system.c index a96675beb0d..89f954f569e 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -1283,3 +1283,14 @@ const PropertyInfo qdev_prop_iothread_vq_mapping_list = { .set = set_iothread_vq_mapping_list, .release = release_iothread_vq_mapping_list, }; + +/* --- Endian modes */ + +const PropertyInfo qdev_prop_endian_mode = { + .name = "EndianMode", + .description = "Endian mode, big/little/unspecified", + .enum_table = &EndianMode_lookup, + .get = qdev_propinfo_get_enum, + .set = qdev_propinfo_set_enum, + .set_default_value = qdev_propinfo_set_default_value_enum, +};