QAPI patches patches for 2025-03-06

-----BEGIN PGP SIGNATURE-----
 
 iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmfJa/4SHGFybWJydUBy
 ZWRoYXQuY29tAAoJEDhwtADrkYZTOnsP/3DE/9D1JVBbAEU3i1qc5qvZXFLtQykh
 mqMptxOrQ1KQm0abgXv8gS4rd++RycS+48fqnLWdxNYCbW5YEH9a2hlPefrhHRQS
 GF4eMvJIECFXFyLWLO9aHDdUQc1fng8QDn8DFGkHaO3veGADJsX0HKGWit0vVc5k
 uL61XOAd/Iu2z4BcgpdL29FEnlumIpDe8m8yyQcCLQ6EE7/FNSKPr1MSglk1Ky/1
 bwb+HK6nE5+6LznGimpcQhgh0CWv+hECPpmEy90iRMUSmEv2f0bB69e7pTFqOP9g
 9Vm07NEA93K/oCFDa79MK606n/sPQAn2bfr0aCCw4r3FKtvqe4+/RSSE4J/4/nlJ
 rYn+RkKbgRKmuTqSlWwuBa8/THpPFzX6IO1LiAP5b4LR1IZd9YuBa3alc6xMehMF
 iZ4tUFsUxjIMLxpcYY/yjEruqFutkig6nzCqxfHT7DplKNX6Ow3mv0fC+raC1jvv
 Mdy5Cb6vZa1Ho9JvBLVmn8ASeDBYMqdTohB4QqgJWciLdeFCJxmGk3MgIgDRksSL
 abSTqPKjott7K1CQPio/imkT4o4ulXTi0jWtb4eLnER/f7T14npr9+w4UK4iBXyd
 pqq/++hgCFDGuQjzn9WWkbyYHhCCmMkf5WMn6Ycc+HIZvuOULUU+y5Ed01gufgb8
 pWpLO2IPupbp
 =VfRB
 -----END PGP SIGNATURE-----

Merge tag 'pull-qapi-2025-03-06' of https://repo.or.cz/qemu/armbru into staging

QAPI patches patches for 2025-03-06

# -----BEGIN PGP SIGNATURE-----
#
# iQJGBAABCAAwFiEENUvIs9frKmtoZ05fOHC0AOuRhlMFAmfJa/4SHGFybWJydUBy
# ZWRoYXQuY29tAAoJEDhwtADrkYZTOnsP/3DE/9D1JVBbAEU3i1qc5qvZXFLtQykh
# mqMptxOrQ1KQm0abgXv8gS4rd++RycS+48fqnLWdxNYCbW5YEH9a2hlPefrhHRQS
# GF4eMvJIECFXFyLWLO9aHDdUQc1fng8QDn8DFGkHaO3veGADJsX0HKGWit0vVc5k
# uL61XOAd/Iu2z4BcgpdL29FEnlumIpDe8m8yyQcCLQ6EE7/FNSKPr1MSglk1Ky/1
# bwb+HK6nE5+6LznGimpcQhgh0CWv+hECPpmEy90iRMUSmEv2f0bB69e7pTFqOP9g
# 9Vm07NEA93K/oCFDa79MK606n/sPQAn2bfr0aCCw4r3FKtvqe4+/RSSE4J/4/nlJ
# rYn+RkKbgRKmuTqSlWwuBa8/THpPFzX6IO1LiAP5b4LR1IZd9YuBa3alc6xMehMF
# iZ4tUFsUxjIMLxpcYY/yjEruqFutkig6nzCqxfHT7DplKNX6Ow3mv0fC+raC1jvv
# Mdy5Cb6vZa1Ho9JvBLVmn8ASeDBYMqdTohB4QqgJWciLdeFCJxmGk3MgIgDRksSL
# abSTqPKjott7K1CQPio/imkT4o4ulXTi0jWtb4eLnER/f7T14npr9+w4UK4iBXyd
# pqq/++hgCFDGuQjzn9WWkbyYHhCCmMkf5WMn6Ycc+HIZvuOULUU+y5Ed01gufgb8
# pWpLO2IPupbp
# =VfRB
# -----END PGP SIGNATURE-----
# gpg: Signature made Thu 06 Mar 2025 17:33:50 HKT
# gpg:                using RSA key 354BC8B3D7EB2A6B68674E5F3870B400EB918653
# gpg:                issuer "armbru@redhat.com"
# gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" [full]
# gpg:                 aka "Markus Armbruster <armbru@pond.sub.org>" [full]
# Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867  4E5F 3870 B400 EB91 8653

* tag 'pull-qapi-2025-03-06' of https://repo.or.cz/qemu/armbru:
  docs/devel/qapi-code-gen: Discourage use of 'prefix'
  qdev: Improve a few more PropertyInfo @description members
  qdev: Improve PropertyInfo member @description for enum properties
  qdev: Change values of PropertyInfo member @type to be QAPI types
  qdev: Rename PropertyInfo member @name to @type
  qdev: Change qdev_prop_pci_devfn member @name from "int32" to "str"
  qdev: Delete unused qdev_prop_enum
  qapi/introspect: Use @dataclass to simplify
  qapi: Eliminate OrderedDict
  docs/about/build-platforms: Correct minimum supported Python version

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2025-03-07 07:38:55 +08:00
commit e17f08b5fb
23 changed files with 123 additions and 128 deletions

View File

@ -76,7 +76,7 @@ static void release_tpm(Object *obj, const char *name, void *opaque)
} }
const PropertyInfo qdev_prop_tpm = { const PropertyInfo qdev_prop_tpm = {
.name = "str", .type = "str",
.description = "ID of a tpm to use as a backend", .description = "ID of a tpm to use as a backend",
.get = get_tpm, .get = get_tpm,
.set = set_tpm, .set = set_tpm,

View File

@ -101,7 +101,7 @@ Python runtime
option of the ``configure`` script to point QEMU to a supported option of the ``configure`` script to point QEMU to a supported
version of the Python runtime. version of the Python runtime.
As of QEMU |version|, the minimum supported version of Python is 3.7. As of QEMU |version|, the minimum supported version of Python is 3.8.
Python build dependencies Python build dependencies
Some of QEMU's build dependencies are written in Python. Usually these Some of QEMU's build dependencies are written in Python. Usually these

View File

@ -229,7 +229,8 @@ These are of the form PREFIX_NAME, where PREFIX is derived from the
enumeration type's name, and NAME from the value's name. For the enumeration type's name, and NAME from the value's name. For the
example above, the generator maps 'MyEnum' to MY_ENUM and 'value1' to example above, the generator maps 'MyEnum' to MY_ENUM and 'value1' to
VALUE1, resulting in the enumeration constant MY_ENUM_VALUE1. The VALUE1, resulting in the enumeration constant MY_ENUM_VALUE1. The
optional 'prefix' member overrides PREFIX. optional 'prefix' member overrides PREFIX. This is rarely necessary,
and should be used with restraint.
The generated C enumeration constants have values 0, 1, ..., N-1 (in The generated C enumeration constants have values 0, 1, ..., N-1 (in
QAPI schema order), where N is the number of values. There is an QAPI schema order), where N is the number of values. There is an

View File

@ -661,8 +661,8 @@ invalid:
* https://xenbits.xen.org/docs/unstable/man/xen-vbd-interface.7.html * https://xenbits.xen.org/docs/unstable/man/xen-vbd-interface.7.html
*/ */
static const PropertyInfo xen_block_prop_vdev = { static const PropertyInfo xen_block_prop_vdev = {
.name = "str", .type = "str",
.description = "Virtual Disk specifier: d*p*/xvd*/hd*/sd*", .description = "Virtual Disk specifier (d*p*/xvd*/hd*/sd*)",
.get = xen_block_get_vdev, .get = xen_block_get_vdev,
.set = xen_block_set_vdev, .set = xen_block_set_vdev,
}; };

View File

@ -235,7 +235,7 @@ static void release_drive(Object *obj, const char *name, void *opaque)
} }
const PropertyInfo qdev_prop_drive = { const PropertyInfo qdev_prop_drive = {
.name = "str", .type = "str",
.description = "Node name or ID of a block device to use as a backend", .description = "Node name or ID of a block device to use as a backend",
.realized_set_allowed = true, .realized_set_allowed = true,
.get = get_drive, .get = get_drive,
@ -244,7 +244,7 @@ const PropertyInfo qdev_prop_drive = {
}; };
const PropertyInfo qdev_prop_drive_iothread = { const PropertyInfo qdev_prop_drive_iothread = {
.name = "str", .type = "str",
.description = "Node name or ID of a block device to use as a backend", .description = "Node name or ID of a block device to use as a backend",
.realized_set_allowed = true, .realized_set_allowed = true,
.get = get_drive, .get = get_drive,
@ -312,7 +312,7 @@ static void release_chr(Object *obj, const char *name, void *opaque)
} }
const PropertyInfo qdev_prop_chr = { const PropertyInfo qdev_prop_chr = {
.name = "str", .type = "str",
.description = "ID of a chardev to use as a backend", .description = "ID of a chardev to use as a backend",
.get = get_chr, .get = get_chr,
.set = set_chr, .set = set_chr,
@ -386,7 +386,7 @@ inval:
} }
const PropertyInfo qdev_prop_macaddr = { const PropertyInfo qdev_prop_macaddr = {
.name = "str", .type = "str",
.description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56", .description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
.get = get_mac, .get = get_mac,
.set = set_mac, .set = set_mac,
@ -474,7 +474,7 @@ out:
} }
const PropertyInfo qdev_prop_netdev = { const PropertyInfo qdev_prop_netdev = {
.name = "str", .type = "str",
.description = "ID of a netdev to use as a backend", .description = "ID of a netdev to use as a backend",
.get = get_netdev, .get = get_netdev,
.set = set_netdev, .set = set_netdev,
@ -512,7 +512,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
} }
const PropertyInfo qdev_prop_audiodev = { const PropertyInfo qdev_prop_audiodev = {
.name = "str", .type = "str",
.description = "ID of an audiodev to use as a backend", .description = "ID of an audiodev to use as a backend",
/* release done on shutdown */ /* release done on shutdown */
.get = get_audiodev, .get = get_audiodev,
@ -602,7 +602,8 @@ static void qdev_propinfo_set_losttickpolicy(Object *obj, Visitor *v,
QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(LostTickPolicy) != sizeof(int));
const PropertyInfo qdev_prop_losttickpolicy = { const PropertyInfo qdev_prop_losttickpolicy = {
.name = "LostTickPolicy", .type = "LostTickPolicy",
.description = "Policy for handling lost ticks (discard/delay/slew)",
.enum_table = &LostTickPolicy_lookup, .enum_table = &LostTickPolicy_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_losttickpolicy, .set = qdev_propinfo_set_losttickpolicy,
@ -628,7 +629,7 @@ static void set_blocksize(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_blocksize = { const PropertyInfo qdev_prop_blocksize = {
.name = "size", .type = "size",
.description = "A power of two between " MIN_BLOCK_SIZE_STR .description = "A power of two between " MIN_BLOCK_SIZE_STR
" and " MAX_BLOCK_SIZE_STR, " and " MAX_BLOCK_SIZE_STR,
.get = qdev_propinfo_get_size32, .get = qdev_propinfo_get_size32,
@ -641,9 +642,8 @@ const PropertyInfo qdev_prop_blocksize = {
QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
const PropertyInfo qdev_prop_blockdev_on_error = { const PropertyInfo qdev_prop_blockdev_on_error = {
.name = "BlockdevOnError", .type = "BlockdevOnError",
.description = "Error handling policy, " .description = "Error handling policy (report/ignore/enospc/stop/auto)",
"report/ignore/enospc/stop/auto",
.enum_table = &BlockdevOnError_lookup, .enum_table = &BlockdevOnError_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -655,9 +655,9 @@ const PropertyInfo qdev_prop_blockdev_on_error = {
QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(BiosAtaTranslation) != sizeof(int));
const PropertyInfo qdev_prop_bios_chs_trans = { const PropertyInfo qdev_prop_bios_chs_trans = {
.name = "BiosAtaTranslation", .type = "BiosAtaTranslation",
.description = "Logical CHS translation algorithm, " .description = "Logical CHS translation algorithm "
"auto/none/lba/large/rechs", " (auto/none/lba/large/rechs)",
.enum_table = &BiosAtaTranslation_lookup, .enum_table = &BiosAtaTranslation_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -667,9 +667,8 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
/* --- FDC default drive types */ /* --- FDC default drive types */
const PropertyInfo qdev_prop_fdc_drive_type = { const PropertyInfo qdev_prop_fdc_drive_type = {
.name = "FdcDriveType", .type = "FloppyDriveType",
.description = "FDC drive type, " .description = "Floppy drive type (144/288/120/none/auto)",
"144/288/120/none/auto",
.enum_table = &FloppyDriveType_lookup, .enum_table = &FloppyDriveType_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -679,9 +678,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
/* --- MultiFDCompression --- */ /* --- MultiFDCompression --- */
const PropertyInfo qdev_prop_multifd_compression = { const PropertyInfo qdev_prop_multifd_compression = {
.name = "MultiFDCompression", .type = "MultiFDCompression",
.description = "multifd_compression values, " .description = "multifd_compression values"
"none/zlib/zstd/qpl/uadk/qatzip", " (none/zlib/zstd/qpl/uadk/qatzip)",
.enum_table = &MultiFDCompression_lookup, .enum_table = &MultiFDCompression_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -693,9 +692,8 @@ const PropertyInfo qdev_prop_multifd_compression = {
QEMU_BUILD_BUG_ON(sizeof(MigMode) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(MigMode) != sizeof(int));
const PropertyInfo qdev_prop_mig_mode = { const PropertyInfo qdev_prop_mig_mode = {
.name = "MigMode", .type = "MigMode",
.description = "mig_mode values, " .description = "Migration mode (normal/cpr-reboot)",
"normal,cpr-reboot",
.enum_table = &MigMode_lookup, .enum_table = &MigMode_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -707,9 +705,8 @@ const PropertyInfo qdev_prop_mig_mode = {
QEMU_BUILD_BUG_ON(sizeof(GranuleMode) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(GranuleMode) != sizeof(int));
const PropertyInfo qdev_prop_granule_mode = { const PropertyInfo qdev_prop_granule_mode = {
.name = "GranuleMode", .type = "GranuleMode",
.description = "granule_mode values, " .description = "Granule page size (4k/8k/16k/64k/host)",
"4k, 8k, 16k, 64k, host",
.enum_table = &GranuleMode_lookup, .enum_table = &GranuleMode_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -717,9 +714,8 @@ const PropertyInfo qdev_prop_granule_mode = {
}; };
const PropertyInfo qdev_prop_zero_page_detection = { const PropertyInfo qdev_prop_zero_page_detection = {
.name = "ZeroPageDetection", .type = "ZeroPageDetection",
.description = "zero_page_detection values, " .description = "Zero page detection (none/legacy/multifd)",
"none,legacy,multifd",
.enum_table = &ZeroPageDetection_lookup, .enum_table = &ZeroPageDetection_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -801,7 +797,7 @@ out:
} }
const PropertyInfo qdev_prop_reserved_region = { const PropertyInfo qdev_prop_reserved_region = {
.name = "reserved_region", .type = "str",
.description = "Reserved Region, example: 0xFEE00000:0xFEEFFFFF:0", .description = "Reserved Region, example: 0xFEE00000:0xFEEFFFFF:0",
.get = get_reserved_region, .get = get_reserved_region,
.set = set_reserved_region, .set = set_reserved_region,
@ -882,7 +878,7 @@ static int print_pci_devfn(Object *obj, const Property *prop, char *dest,
} }
const PropertyInfo qdev_prop_pci_devfn = { const PropertyInfo qdev_prop_pci_devfn = {
.name = "int32", .type = "str",
.description = "Slot and optional function number, example: 06.0 or 06", .description = "Slot and optional function number, example: 06.0 or 06",
.print = print_pci_devfn, .print = print_pci_devfn,
.get = qdev_propinfo_get_int32, .get = qdev_propinfo_get_int32,
@ -988,8 +984,8 @@ inval:
} }
const PropertyInfo qdev_prop_pci_host_devaddr = { const PropertyInfo qdev_prop_pci_host_devaddr = {
.name = "str", .type = "str",
.description = "Address (bus/device/function) of " .description = "Address (bus:device.function) of "
"the host device, example: 04:10.0", "the host device, example: 04:10.0",
.get = get_pci_host_devaddr, .get = get_pci_host_devaddr,
.set = set_pci_host_devaddr, .set = set_pci_host_devaddr,
@ -998,7 +994,7 @@ const PropertyInfo qdev_prop_pci_host_devaddr = {
/* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */ /* --- OffAutoPCIBAR off/auto/bar0/bar1/bar2/bar3/bar4/bar5 --- */
const PropertyInfo qdev_prop_off_auto_pcibar = { const PropertyInfo qdev_prop_off_auto_pcibar = {
.name = "OffAutoPCIBAR", .type = "OffAutoPCIBAR",
.description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5", .description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
.enum_table = &OffAutoPCIBAR_lookup, .enum_table = &OffAutoPCIBAR_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
@ -1080,7 +1076,7 @@ static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_pcie_link_speed = { const PropertyInfo qdev_prop_pcie_link_speed = {
.name = "PCIELinkSpeed", .type = "PCIELinkSpeed",
.description = "2_5/5/8/16/32/64", .description = "2_5/5/8/16/32/64",
.enum_table = &PCIELinkSpeed_lookup, .enum_table = &PCIELinkSpeed_lookup,
.get = get_prop_pcielinkspeed, .get = get_prop_pcielinkspeed,
@ -1168,7 +1164,7 @@ static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_pcie_link_width = { const PropertyInfo qdev_prop_pcie_link_width = {
.name = "PCIELinkWidth", .type = "PCIELinkWidth",
.description = "1/2/4/8/12/16/32", .description = "1/2/4/8/12/16/32",
.enum_table = &PCIELinkWidth_lookup, .enum_table = &PCIELinkWidth_lookup,
.get = get_prop_pcielinkwidth, .get = get_prop_pcielinkwidth,
@ -1218,7 +1214,7 @@ static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
} }
const PropertyInfo qdev_prop_uuid = { const PropertyInfo qdev_prop_uuid = {
.name = "str", .type = "str",
.description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO .description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
"\" for random value (default)", "\" for random value (default)",
.get = get_uuid, .get = get_uuid,
@ -1231,8 +1227,8 @@ const PropertyInfo qdev_prop_uuid = {
QEMU_BUILD_BUG_ON(sizeof(S390CpuEntitlement) != sizeof(int)); QEMU_BUILD_BUG_ON(sizeof(S390CpuEntitlement) != sizeof(int));
const PropertyInfo qdev_prop_cpus390entitlement = { const PropertyInfo qdev_prop_cpus390entitlement = {
.name = "S390CpuEntitlement", .type = "S390CpuEntitlement",
.description = "low/medium (default)/high", .description = "auto/low/medium/high (default medium)",
.enum_table = &S390CpuEntitlement_lookup, .enum_table = &S390CpuEntitlement_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum, .set = qdev_propinfo_set_enum,
@ -1276,7 +1272,7 @@ static void release_iothread_vq_mapping_list(Object *obj,
} }
const PropertyInfo qdev_prop_iothread_vq_mapping_list = { const PropertyInfo qdev_prop_iothread_vq_mapping_list = {
.name = "IOThreadVirtQueueMappingList", .type = "IOThreadVirtQueueMappingList",
.description = "IOThread virtqueue mapping list [{\"iothread\":\"<id>\", " .description = "IOThread virtqueue mapping list [{\"iothread\":\"<id>\", "
"\"vqs\":[1,2,3,...]},...]", "\"vqs\":[1,2,3,...]},...]",
.get = get_iothread_vq_mapping_list, .get = get_iothread_vq_mapping_list,
@ -1287,7 +1283,7 @@ const PropertyInfo qdev_prop_iothread_vq_mapping_list = {
/* --- Endian modes */ /* --- Endian modes */
const PropertyInfo qdev_prop_endian_mode = { const PropertyInfo qdev_prop_endian_mode = {
.name = "EndianMode", .type = "EndianMode",
.description = "Endian mode, big/little/unspecified", .description = "Endian mode, big/little/unspecified",
.enum_table = &EndianMode_lookup, .enum_table = &EndianMode_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
@ -1296,7 +1292,7 @@ const PropertyInfo qdev_prop_endian_mode = {
}; };
const PropertyInfo qdev_prop_vmapple_virtio_blk_variant = { const PropertyInfo qdev_prop_vmapple_virtio_blk_variant = {
.name = "VMAppleVirtioBlkVariant", .type = "VMAppleVirtioBlkVariant",
.description = "unspecified/root/aux", .description = "unspecified/root/aux",
.enum_table = &VMAppleVirtioBlkVariant_lookup, .enum_table = &VMAppleVirtioBlkVariant_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,

View File

@ -122,13 +122,6 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
qapi_enum_lookup(prop->info->enum_table, prop->defval.i)); qapi_enum_lookup(prop->info->enum_table, prop->defval.i));
} }
const PropertyInfo qdev_prop_enum = {
.name = "enum",
.get = qdev_propinfo_get_enum,
.set = qdev_propinfo_set_enum,
.set_default_value = qdev_propinfo_set_default_value_enum,
};
/* Bit */ /* Bit */
static uint32_t qdev_get_prop_mask(const Property *prop) static uint32_t qdev_get_prop_mask(const Property *prop)
@ -176,7 +169,7 @@ static void set_default_value_bool(ObjectProperty *op, const Property *prop)
} }
const PropertyInfo qdev_prop_bit = { const PropertyInfo qdev_prop_bit = {
.name = "bool", .type = "bool",
.description = "on/off", .description = "on/off",
.get = prop_get_bit, .get = prop_get_bit,
.set = prop_set_bit, .set = prop_set_bit,
@ -225,7 +218,7 @@ static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_bit64 = { const PropertyInfo qdev_prop_bit64 = {
.name = "bool", .type = "bool",
.description = "on/off", .description = "on/off",
.get = prop_get_bit64, .get = prop_get_bit64,
.set = prop_set_bit64, .set = prop_set_bit64,
@ -253,7 +246,8 @@ static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
} }
const PropertyInfo qdev_prop_bool = { const PropertyInfo qdev_prop_bool = {
.name = "bool", .type = "bool",
.description = "on/off",
.get = get_bool, .get = get_bool,
.set = set_bool, .set = set_bool,
.set_default_value = set_default_value_bool, .set_default_value = set_default_value_bool,
@ -292,7 +286,7 @@ void qdev_propinfo_set_default_value_uint(ObjectProperty *op,
} }
const PropertyInfo qdev_prop_uint8 = { const PropertyInfo qdev_prop_uint8 = {
.name = "uint8", .type = "uint8",
.get = get_uint8, .get = get_uint8,
.set = set_uint8, .set = set_uint8,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
@ -319,7 +313,7 @@ static void set_uint16(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_uint16 = { const PropertyInfo qdev_prop_uint16 = {
.name = "uint16", .type = "uint16",
.get = get_uint16, .get = get_uint16,
.set = set_uint16, .set = set_uint16,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
@ -364,14 +358,14 @@ static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
} }
const PropertyInfo qdev_prop_uint32 = { const PropertyInfo qdev_prop_uint32 = {
.name = "uint32", .type = "uint32",
.get = get_uint32, .get = get_uint32,
.set = set_uint32, .set = set_uint32,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
}; };
const PropertyInfo qdev_prop_int32 = { const PropertyInfo qdev_prop_int32 = {
.name = "int32", .type = "int32",
.get = qdev_propinfo_get_int32, .get = qdev_propinfo_get_int32,
.set = set_int32, .set = set_int32,
.set_default_value = qdev_propinfo_set_default_value_int, .set_default_value = qdev_propinfo_set_default_value_int,
@ -416,14 +410,14 @@ static void set_int64(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_uint64 = { const PropertyInfo qdev_prop_uint64 = {
.name = "uint64", .type = "uint64",
.get = get_uint64, .get = get_uint64,
.set = set_uint64, .set = set_uint64,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
}; };
const PropertyInfo qdev_prop_int64 = { const PropertyInfo qdev_prop_int64 = {
.name = "int64", .type = "int64",
.get = get_int64, .get = get_int64,
.set = set_int64, .set = set_int64,
.set_default_value = qdev_propinfo_set_default_value_int, .set_default_value = qdev_propinfo_set_default_value_int,
@ -443,7 +437,7 @@ static void set_uint64_checkmask(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_uint64_checkmask = { const PropertyInfo qdev_prop_uint64_checkmask = {
.name = "uint64", .type = "uint64",
.get = get_uint64, .get = get_uint64,
.set = set_uint64_checkmask, .set = set_uint64_checkmask,
}; };
@ -485,7 +479,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
} }
const PropertyInfo qdev_prop_string = { const PropertyInfo qdev_prop_string = {
.name = "str", .type = "str",
.release = release_string, .release = release_string,
.get = get_string, .get = get_string,
.set = set_string, .set = set_string,
@ -494,7 +488,7 @@ const PropertyInfo qdev_prop_string = {
/* --- on/off/auto --- */ /* --- on/off/auto --- */
const PropertyInfo qdev_prop_on_off_auto = { const PropertyInfo qdev_prop_on_off_auto = {
.name = "OnOffAuto", .type = "OnOffAuto",
.description = "on/off/auto", .description = "on/off/auto",
.enum_table = &OnOffAuto_lookup, .enum_table = &OnOffAuto_lookup,
.get = qdev_propinfo_get_enum, .get = qdev_propinfo_get_enum,
@ -537,7 +531,7 @@ static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
} }
const PropertyInfo qdev_prop_size32 = { const PropertyInfo qdev_prop_size32 = {
.name = "size", .type = "size",
.get = qdev_propinfo_get_size32, .get = qdev_propinfo_get_size32,
.set = set_size32, .set = set_size32,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
@ -740,7 +734,7 @@ static void default_prop_array(ObjectProperty *op, const Property *prop)
} }
const PropertyInfo qdev_prop_array = { const PropertyInfo qdev_prop_array = {
.name = "list", .type = "list",
.get = get_prop_array, .get = get_prop_array,
.set = set_prop_array, .set = set_prop_array,
.release = release_prop_array, .release = release_prop_array,
@ -944,7 +938,7 @@ static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
} }
const PropertyInfo qdev_prop_size = { const PropertyInfo qdev_prop_size = {
.name = "size", .type = "size",
.get = get_size, .get = get_size,
.set = set_size, .set = set_size,
.set_default_value = qdev_propinfo_set_default_value_uint, .set_default_value = qdev_propinfo_set_default_value_uint,
@ -962,7 +956,7 @@ static ObjectProperty *create_link_property(ObjectClass *oc, const char *name,
} }
const PropertyInfo qdev_prop_link = { const PropertyInfo qdev_prop_link = {
.name = "link", .type = "link",
.create = create_link_property, .create = create_link_property,
}; };
@ -973,7 +967,7 @@ void qdev_property_add_static(DeviceState *dev, const Property *prop)
assert(!prop->info->create); assert(!prop->info->create);
op = object_property_add(obj, prop->name, prop->info->name, op = object_property_add(obj, prop->name, prop->info->type,
field_prop_getter(prop->info), field_prop_getter(prop->info),
field_prop_setter(prop->info), field_prop_setter(prop->info),
prop->info->release, prop->info->release,
@ -1000,7 +994,7 @@ static void qdev_class_add_property(DeviceClass *klass, const char *name,
op = prop->info->create(oc, name, prop); op = prop->info->create(oc, name, prop);
} else { } else {
op = object_class_property_add(oc, op = object_class_property_add(oc,
name, prop->info->name, name, prop->info->type,
field_prop_getter(prop->info), field_prop_getter(prop->info),
field_prop_setter(prop->info), field_prop_setter(prop->info),
prop->info->release, prop->info->release,

View File

@ -871,7 +871,7 @@ separator_error:
} }
const PropertyInfo qdev_prop_apple_gfx_display_mode = { const PropertyInfo qdev_prop_apple_gfx_display_mode = {
.name = "display_mode", .type = "display_mode",
.description = .description =
"Display mode in pixels and Hertz, as <width>x<height>@<refresh-rate> " "Display mode in pixels and Hertz, as <width>x<height>@<refresh-rate> "
"Example: 3840x2160@60", "Example: 3840x2160@60",

View File

@ -652,7 +652,7 @@ static void trng_prop_fault_event_set(Object *obj, Visitor *v,
} }
static const PropertyInfo trng_prop_fault_events = { static const PropertyInfo trng_prop_fault_events = {
.name = "uint32:bits", .type = "uint32",
.description = "Set to trigger TRNG fault events", .description = "Set to trigger TRNG fault events",
.set = trng_prop_fault_event_set, .set = trng_prop_fault_event_set,
.realized_set_allowed = true, .realized_set_allowed = true,

View File

@ -179,7 +179,7 @@ static void set_nguid(Object *obj, Visitor *v, const char *name, void *opaque,
} }
const PropertyInfo qdev_prop_nguid = { const PropertyInfo qdev_prop_nguid = {
.name = "str", .type = "str",
.description = .description =
"NGUID or \"" NGUID_VALUE_AUTO "\" for random value", "NGUID or \"" NGUID_VALUE_AUTO "\" for random value",
.get = get_nguid, .get = get_nguid,

View File

@ -502,7 +502,7 @@ static void bbram_prop_release_drive(Object *obj, const char *name,
} }
static const PropertyInfo bbram_prop_drive = { static const PropertyInfo bbram_prop_drive = {
.name = "str", .type = "str",
.description = "Node name or ID of a block device to use as BBRAM backend", .description = "Node name or ID of a block device to use as BBRAM backend",
.realized_set_allowed = true, .realized_set_allowed = true,
.get = bbram_prop_get_drive, .get = bbram_prop_get_drive,

View File

@ -257,7 +257,7 @@ static void efuse_prop_release_drive(Object *obj, const char *name,
} }
static const PropertyInfo efuse_prop_drive = { static const PropertyInfo efuse_prop_drive = {
.name = "str", .type = "str",
.description = "Node name or ID of a block device to use as eFUSE backend", .description = "Node name or ID of a block device to use as eFUSE backend",
.realized_set_allowed = true, .realized_set_allowed = true,
.get = efuse_prop_get_drive, .get = efuse_prop_get_drive,

View File

@ -77,7 +77,7 @@ static void prop_pci_busnr_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_pci_busnr = { static const PropertyInfo prop_pci_busnr = {
.name = "busnr", .type = "busnr",
.get = prop_pci_busnr_get, .get = prop_pci_busnr_get,
}; };

View File

@ -74,9 +74,9 @@ static void ccw_device_set_loadparm(Object *obj, Visitor *v,
} }
const PropertyInfo ccw_loadparm = { const PropertyInfo ccw_loadparm = {
.name = "ccw_loadparm", .type = "str",
.description = "Up to 8 chars in set of [A-Za-z0-9. ] to pass" .description = "Up to 8 chars in set of [A-Za-z0-9. ] to select"
" to the guest loader/kernel", " a guest kernel",
.get = ccw_device_get_loadparm, .get = ccw_device_get_loadparm,
.set = ccw_device_set_loadparm, .set = ccw_device_set_loadparm,
}; };

View File

@ -2523,7 +2523,7 @@ out:
} }
const PropertyInfo css_devid_propinfo = { const PropertyInfo css_devid_propinfo = {
.name = "str", .type = "str",
.description = "Identifier of an I/O device in the channel " .description = "Identifier of an I/O device in the channel "
"subsystem, example: fe.1.23ab", "subsystem, example: fe.1.23ab",
.get = get_css_devid, .get = get_css_devid,
@ -2531,7 +2531,7 @@ const PropertyInfo css_devid_propinfo = {
}; };
const PropertyInfo css_devid_ro_propinfo = { const PropertyInfo css_devid_ro_propinfo = {
.name = "str", .type = "str",
.description = "Read-only identifier of an I/O device in the channel " .description = "Read-only identifier of an I/O device in the channel "
"subsystem, example: fe.1.23ab", "subsystem, example: fe.1.23ab",
.get = get_css_devid, .get = get_css_devid,

View File

@ -1495,7 +1495,8 @@ static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo s390_pci_fid_propinfo = { static const PropertyInfo s390_pci_fid_propinfo = {
.name = "zpci_fid", .type = "uint32",
.description = "zpci_fid",
.get = s390_pci_get_fid, .get = s390_pci_get_fid,
.set = s390_pci_set_fid, .set = s390_pci_set_fid,
}; };

View File

@ -1480,7 +1480,7 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
} }
const PropertyInfo qdev_prop_nv_gpudirect_clique = { const PropertyInfo qdev_prop_nv_gpudirect_clique = {
.name = "uint4", .type = "uint8",
.description = "NVIDIA GPUDirect Clique ID (0 - 15)", .description = "NVIDIA GPUDirect Clique ID (0 - 15)",
.get = get_nv_gpudirect_clique_id, .get = get_nv_gpudirect_clique_id,
.set = set_nv_gpudirect_clique_id, .set = set_nv_gpudirect_clique_id,

View File

@ -30,7 +30,7 @@ struct Property {
}; };
struct PropertyInfo { struct PropertyInfo {
const char *name; const char *type;
const char *description; const char *description;
const QEnumLookup *enum_table; const QEnumLookup *enum_table;
bool realized_set_allowed; /* allow setting property on realized device */ bool realized_set_allowed; /* allow setting property on realized device */
@ -49,7 +49,6 @@ struct PropertyInfo {
extern const PropertyInfo qdev_prop_bit; extern const PropertyInfo qdev_prop_bit;
extern const PropertyInfo qdev_prop_bit64; extern const PropertyInfo qdev_prop_bit64;
extern const PropertyInfo qdev_prop_bool; extern const PropertyInfo qdev_prop_bool;
extern const PropertyInfo qdev_prop_enum;
extern const PropertyInfo qdev_prop_uint8; extern const PropertyInfo qdev_prop_uint8;
extern const PropertyInfo qdev_prop_uint16; extern const PropertyInfo qdev_prop_uint16;
extern const PropertyInfo qdev_prop_uint32; extern const PropertyInfo qdev_prop_uint32;

View File

@ -11,6 +11,7 @@ This work is licensed under the terms of the GNU GPL, version 2.
See the COPYING file in the top-level directory. See the COPYING file in the top-level directory.
""" """
from dataclasses import dataclass
from typing import ( from typing import (
Any, Any,
Dict, Dict,
@ -79,19 +80,16 @@ SchemaInfoCommand = Dict[str, object]
_ValueT = TypeVar('_ValueT', bound=_Value) _ValueT = TypeVar('_ValueT', bound=_Value)
@dataclass
class Annotated(Generic[_ValueT]): class Annotated(Generic[_ValueT]):
""" """
Annotated generally contains a SchemaInfo-like type (as a dict), Annotated generally contains a SchemaInfo-like type (as a dict),
But it also used to wrap comments/ifconds around scalar leaf values, But it also used to wrap comments/ifconds around scalar leaf values,
for the benefit of features and enums. for the benefit of features and enums.
""" """
# TODO: Remove after Python 3.7 adds @dataclass: value: _ValueT
# pylint: disable=too-few-public-methods ifcond: QAPISchemaIfCond
def __init__(self, value: _ValueT, ifcond: QAPISchemaIfCond, comment: Optional[str] = None
comment: Optional[str] = None):
self.value = value
self.comment: Optional[str] = comment
self.ifcond = ifcond
def _tree_to_qlit(obj: JSONValue, def _tree_to_qlit(obj: JSONValue,

View File

@ -14,7 +14,6 @@
# This work is licensed under the terms of the GNU GPL, version 2. # This work is licensed under the terms of the GNU GPL, version 2.
# See the COPYING file in the top-level directory. # See the COPYING file in the top-level directory.
from collections import OrderedDict
import os import os
import re import re
from typing import ( from typing import (
@ -154,7 +153,7 @@ class QAPISchemaParser:
"value of 'include' must be a string") "value of 'include' must be a string")
incl_fname = os.path.join(os.path.dirname(self._fname), incl_fname = os.path.join(os.path.dirname(self._fname),
include) include)
self._add_expr(OrderedDict({'include': incl_fname}), info) self._add_expr({'include': incl_fname}, info)
exprs_include = self._include(include, info, incl_fname, exprs_include = self._include(include, info, incl_fname,
self._included) self._included)
if exprs_include: if exprs_include:
@ -355,7 +354,7 @@ class QAPISchemaParser:
raise QAPIParseError(self, "stray '%s'" % match.group(0)) raise QAPIParseError(self, "stray '%s'" % match.group(0))
def get_members(self) -> Dict[str, object]: def get_members(self) -> Dict[str, object]:
expr: Dict[str, object] = OrderedDict() expr: Dict[str, object] = {}
if self.tok == '}': if self.tok == '}':
self.accept() self.accept()
return expr return expr

View File

@ -19,7 +19,6 @@
from __future__ import annotations from __future__ import annotations
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from collections import OrderedDict
import os import os
import re import re
from typing import ( from typing import (
@ -557,7 +556,7 @@ class QAPISchemaObjectType(QAPISchemaType):
super().check(schema) super().check(schema)
assert self._checked and not self._check_complete assert self._checked and not self._check_complete
seen = OrderedDict() seen = {}
if self._base_name: if self._base_name:
self.base = schema.resolve_type(self._base_name, self.info, self.base = schema.resolve_type(self._base_name, self.info,
"'base'") "'base'")
@ -1141,10 +1140,10 @@ class QAPISchema:
self.docs = parser.docs self.docs = parser.docs
self._entity_list: List[QAPISchemaEntity] = [] self._entity_list: List[QAPISchemaEntity] = []
self._entity_dict: Dict[str, QAPISchemaDefinition] = {} self._entity_dict: Dict[str, QAPISchemaDefinition] = {}
self._module_dict: Dict[str, QAPISchemaModule] = OrderedDict() self._module_dict: Dict[str, QAPISchemaModule] = {}
# NB, values in the dict will identify the first encountered # NB, values in the dict will identify the first encountered
# usage of a named feature only # usage of a named feature only
self._feature_dict: Dict[str, QAPISchemaFeature] = OrderedDict() self._feature_dict: Dict[str, QAPISchemaFeature] = {}
# All schemas get the names defined in the QapiSpecialFeature enum. # All schemas get the names defined in the QapiSpecialFeature enum.
# Rely on dict iteration order matching insertion order so that # Rely on dict iteration order matching insertion order so that
@ -1454,7 +1453,7 @@ class QAPISchema:
ifcond = QAPISchemaIfCond(expr.get('if')) ifcond = QAPISchemaIfCond(expr.get('if'))
info = expr.info info = expr.info
features = self._make_features(expr.get('features'), info) features = self._make_features(expr.get('features'), info)
if isinstance(data, OrderedDict): if isinstance(data, dict):
data = self._make_implicit_object_type( data = self._make_implicit_object_type(
name, info, ifcond, name, info, ifcond,
'arg', self._make_members(data, info)) 'arg', self._make_members(data, info))
@ -1473,7 +1472,7 @@ class QAPISchema:
ifcond = QAPISchemaIfCond(expr.get('if')) ifcond = QAPISchemaIfCond(expr.get('if'))
info = expr.info info = expr.info
features = self._make_features(expr.get('features'), info) features = self._make_features(expr.get('features'), info)
if isinstance(data, OrderedDict): if isinstance(data, dict):
data = self._make_implicit_object_type( data = self._make_implicit_object_type(
name, info, ifcond, name, info, ifcond,
'arg', self._make_members(data, info)) 'arg', self._make_members(data, info))

View File

@ -1816,7 +1816,8 @@ static void prop_pmu_num_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_pmu_num = { static const PropertyInfo prop_pmu_num = {
.name = "pmu-num", .type = "int8",
.description = "pmu-num",
.get = prop_pmu_num_get, .get = prop_pmu_num_get,
.set = prop_pmu_num_set, .set = prop_pmu_num_set,
}; };
@ -1857,7 +1858,8 @@ static void prop_pmu_mask_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_pmu_mask = { static const PropertyInfo prop_pmu_mask = {
.name = "pmu-mask", .type = "int8",
.description = "pmu-mask",
.get = prop_pmu_mask_get, .get = prop_pmu_mask_get,
.set = prop_pmu_mask_set, .set = prop_pmu_mask_set,
}; };
@ -1888,7 +1890,8 @@ static void prop_mmu_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_mmu = { static const PropertyInfo prop_mmu = {
.name = "mmu", .type = "bool",
.description = "mmu",
.get = prop_mmu_get, .get = prop_mmu_get,
.set = prop_mmu_set, .set = prop_mmu_set,
}; };
@ -1919,7 +1922,8 @@ static void prop_pmp_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_pmp = { static const PropertyInfo prop_pmp = {
.name = "pmp", .type = "bool",
.description = "pmp",
.get = prop_pmp_get, .get = prop_pmp_get,
.set = prop_pmp_set, .set = prop_pmp_set,
}; };
@ -1993,7 +1997,9 @@ static void prop_priv_spec_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_priv_spec = { static const PropertyInfo prop_priv_spec = {
.name = "priv_spec", .type = "str",
.description = "priv_spec",
/* FIXME enum? */
.get = prop_priv_spec_get, .get = prop_priv_spec_get,
.set = prop_priv_spec_set, .set = prop_priv_spec_set,
}; };
@ -2024,7 +2030,9 @@ static void prop_vext_spec_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_vext_spec = { static const PropertyInfo prop_vext_spec = {
.name = "vext_spec", .type = "str",
.description = "vext_spec",
/* FIXME enum? */
.get = prop_vext_spec_get, .get = prop_vext_spec_get,
.set = prop_vext_spec_set, .set = prop_vext_spec_set,
}; };
@ -2065,7 +2073,8 @@ static void prop_vlen_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_vlen = { static const PropertyInfo prop_vlen = {
.name = "vlen", .type = "uint16",
.description = "vlen",
.get = prop_vlen_get, .get = prop_vlen_get,
.set = prop_vlen_set, .set = prop_vlen_set,
}; };
@ -2105,7 +2114,8 @@ static void prop_elen_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_elen = { static const PropertyInfo prop_elen = {
.name = "elen", .type = "uint16",
.description = "elen",
.get = prop_elen_get, .get = prop_elen_get,
.set = prop_elen_set, .set = prop_elen_set,
}; };
@ -2140,7 +2150,8 @@ static void prop_cbom_blksize_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_cbom_blksize = { static const PropertyInfo prop_cbom_blksize = {
.name = "cbom_blocksize", .type = "uint16",
.description = "cbom_blocksize",
.get = prop_cbom_blksize_get, .get = prop_cbom_blksize_get,
.set = prop_cbom_blksize_set, .set = prop_cbom_blksize_set,
}; };
@ -2175,7 +2186,8 @@ static void prop_cbop_blksize_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_cbop_blksize = { static const PropertyInfo prop_cbop_blksize = {
.name = "cbop_blocksize", .type = "uint16",
.description = "cbop_blocksize",
.get = prop_cbop_blksize_get, .get = prop_cbop_blksize_get,
.set = prop_cbop_blksize_set, .set = prop_cbop_blksize_set,
}; };
@ -2210,7 +2222,8 @@ static void prop_cboz_blksize_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_cboz_blksize = { static const PropertyInfo prop_cboz_blksize = {
.name = "cboz_blocksize", .type = "uint16",
.description = "cboz_blocksize",
.get = prop_cboz_blksize_get, .get = prop_cboz_blksize_get,
.set = prop_cboz_blksize_set, .set = prop_cboz_blksize_set,
}; };
@ -2245,7 +2258,8 @@ static void prop_mvendorid_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_mvendorid = { static const PropertyInfo prop_mvendorid = {
.name = "mvendorid", .type = "uint32",
.description = "mvendorid",
.get = prop_mvendorid_get, .get = prop_mvendorid_get,
.set = prop_mvendorid_set, .set = prop_mvendorid_set,
}; };
@ -2280,7 +2294,8 @@ static void prop_mimpid_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_mimpid = { static const PropertyInfo prop_mimpid = {
.name = "mimpid", .type = "uint64",
.description = "mimpid",
.get = prop_mimpid_get, .get = prop_mimpid_get,
.set = prop_mimpid_set, .set = prop_mimpid_set,
}; };
@ -2336,7 +2351,8 @@ static void prop_marchid_get(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo prop_marchid = { static const PropertyInfo prop_marchid = {
.name = "marchid", .type = "uint64",
.description = "marchid",
.get = prop_marchid_get, .get = prop_marchid_get,
.set = prop_marchid_set, .set = prop_marchid_set,
}; };

View File

@ -938,7 +938,8 @@ static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
} }
static const PropertyInfo qdev_prop_nwindows = { static const PropertyInfo qdev_prop_nwindows = {
.name = "int", .type = "int",
.description = "Number of register windows",
.get = sparc_get_nwindows, .get = sparc_get_nwindows,
.set = sparc_set_nwindows, .set = sparc_set_nwindows,
}; };

View File

@ -96,17 +96,8 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
@staticmethod @staticmethod
def _print_if(ifcond, indent=4): def _print_if(ifcond, indent=4):
# TODO Drop this hack after replacing OrderedDict by plain
# dict (requires Python 3.7)
def _massage(subcond):
if isinstance(subcond, str):
return subcond
if isinstance(subcond, list):
return [_massage(val) for val in subcond]
return {key: _massage(val) for key, val in subcond.items()}
if ifcond.is_present(): if ifcond.is_present():
print('%sif %s' % (' ' * indent, _massage(ifcond.ifcond))) print('%sif %s' % (' ' * indent, ifcond.ifcond))
@classmethod @classmethod
def _print_features(cls, features, indent=4): def _print_features(cls, features, indent=4):