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:
commit
e17f08b5fb
@ -76,7 +76,7 @@ static void release_tpm(Object *obj, const char *name, void *opaque)
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_tpm = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "ID of a tpm to use as a backend",
|
||||
.get = get_tpm,
|
||||
.set = set_tpm,
|
||||
|
@ -101,7 +101,7 @@ Python runtime
|
||||
option of the ``configure`` script to point QEMU to a supported
|
||||
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
|
||||
Some of QEMU's build dependencies are written in Python. Usually these
|
||||
|
@ -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
|
||||
example above, the generator maps 'MyEnum' to MY_ENUM and 'value1' to
|
||||
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
|
||||
QAPI schema order), where N is the number of values. There is an
|
||||
|
@ -661,8 +661,8 @@ invalid:
|
||||
* https://xenbits.xen.org/docs/unstable/man/xen-vbd-interface.7.html
|
||||
*/
|
||||
static const PropertyInfo xen_block_prop_vdev = {
|
||||
.name = "str",
|
||||
.description = "Virtual Disk specifier: d*p*/xvd*/hd*/sd*",
|
||||
.type = "str",
|
||||
.description = "Virtual Disk specifier (d*p*/xvd*/hd*/sd*)",
|
||||
.get = xen_block_get_vdev,
|
||||
.set = xen_block_set_vdev,
|
||||
};
|
||||
|
@ -235,7 +235,7 @@ static void release_drive(Object *obj, const char *name, void *opaque)
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_drive = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Node name or ID of a block device to use as a backend",
|
||||
.realized_set_allowed = true,
|
||||
.get = get_drive,
|
||||
@ -244,7 +244,7 @@ const PropertyInfo qdev_prop_drive = {
|
||||
};
|
||||
|
||||
const PropertyInfo qdev_prop_drive_iothread = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Node name or ID of a block device to use as a backend",
|
||||
.realized_set_allowed = true,
|
||||
.get = get_drive,
|
||||
@ -312,7 +312,7 @@ static void release_chr(Object *obj, const char *name, void *opaque)
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_chr = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "ID of a chardev to use as a backend",
|
||||
.get = get_chr,
|
||||
.set = set_chr,
|
||||
@ -386,7 +386,7 @@ inval:
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_macaddr = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Ethernet 6-byte MAC Address, example: 52:54:00:12:34:56",
|
||||
.get = get_mac,
|
||||
.set = set_mac,
|
||||
@ -474,7 +474,7 @@ out:
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_netdev = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "ID of a netdev to use as a backend",
|
||||
.get = get_netdev,
|
||||
.set = set_netdev,
|
||||
@ -512,7 +512,7 @@ static void set_audiodev(Object *obj, Visitor *v, const char* name,
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_audiodev = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "ID of an audiodev to use as a backend",
|
||||
/* release done on shutdown */
|
||||
.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));
|
||||
|
||||
const PropertyInfo qdev_prop_losttickpolicy = {
|
||||
.name = "LostTickPolicy",
|
||||
.type = "LostTickPolicy",
|
||||
.description = "Policy for handling lost ticks (discard/delay/slew)",
|
||||
.enum_table = &LostTickPolicy_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.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 = {
|
||||
.name = "size",
|
||||
.type = "size",
|
||||
.description = "A power of two between " MIN_BLOCK_SIZE_STR
|
||||
" and " MAX_BLOCK_SIZE_STR,
|
||||
.get = qdev_propinfo_get_size32,
|
||||
@ -641,9 +642,8 @@ const PropertyInfo qdev_prop_blocksize = {
|
||||
QEMU_BUILD_BUG_ON(sizeof(BlockdevOnError) != sizeof(int));
|
||||
|
||||
const PropertyInfo qdev_prop_blockdev_on_error = {
|
||||
.name = "BlockdevOnError",
|
||||
.description = "Error handling policy, "
|
||||
"report/ignore/enospc/stop/auto",
|
||||
.type = "BlockdevOnError",
|
||||
.description = "Error handling policy (report/ignore/enospc/stop/auto)",
|
||||
.enum_table = &BlockdevOnError_lookup,
|
||||
.get = qdev_propinfo_get_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));
|
||||
|
||||
const PropertyInfo qdev_prop_bios_chs_trans = {
|
||||
.name = "BiosAtaTranslation",
|
||||
.description = "Logical CHS translation algorithm, "
|
||||
"auto/none/lba/large/rechs",
|
||||
.type = "BiosAtaTranslation",
|
||||
.description = "Logical CHS translation algorithm "
|
||||
" (auto/none/lba/large/rechs)",
|
||||
.enum_table = &BiosAtaTranslation_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -667,9 +667,8 @@ const PropertyInfo qdev_prop_bios_chs_trans = {
|
||||
/* --- FDC default drive types */
|
||||
|
||||
const PropertyInfo qdev_prop_fdc_drive_type = {
|
||||
.name = "FdcDriveType",
|
||||
.description = "FDC drive type, "
|
||||
"144/288/120/none/auto",
|
||||
.type = "FloppyDriveType",
|
||||
.description = "Floppy drive type (144/288/120/none/auto)",
|
||||
.enum_table = &FloppyDriveType_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -679,9 +678,9 @@ const PropertyInfo qdev_prop_fdc_drive_type = {
|
||||
/* --- MultiFDCompression --- */
|
||||
|
||||
const PropertyInfo qdev_prop_multifd_compression = {
|
||||
.name = "MultiFDCompression",
|
||||
.description = "multifd_compression values, "
|
||||
"none/zlib/zstd/qpl/uadk/qatzip",
|
||||
.type = "MultiFDCompression",
|
||||
.description = "multifd_compression values"
|
||||
" (none/zlib/zstd/qpl/uadk/qatzip)",
|
||||
.enum_table = &MultiFDCompression_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -693,9 +692,8 @@ const PropertyInfo qdev_prop_multifd_compression = {
|
||||
QEMU_BUILD_BUG_ON(sizeof(MigMode) != sizeof(int));
|
||||
|
||||
const PropertyInfo qdev_prop_mig_mode = {
|
||||
.name = "MigMode",
|
||||
.description = "mig_mode values, "
|
||||
"normal,cpr-reboot",
|
||||
.type = "MigMode",
|
||||
.description = "Migration mode (normal/cpr-reboot)",
|
||||
.enum_table = &MigMode_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -707,9 +705,8 @@ const PropertyInfo qdev_prop_mig_mode = {
|
||||
QEMU_BUILD_BUG_ON(sizeof(GranuleMode) != sizeof(int));
|
||||
|
||||
const PropertyInfo qdev_prop_granule_mode = {
|
||||
.name = "GranuleMode",
|
||||
.description = "granule_mode values, "
|
||||
"4k, 8k, 16k, 64k, host",
|
||||
.type = "GranuleMode",
|
||||
.description = "Granule page size (4k/8k/16k/64k/host)",
|
||||
.enum_table = &GranuleMode_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -717,9 +714,8 @@ const PropertyInfo qdev_prop_granule_mode = {
|
||||
};
|
||||
|
||||
const PropertyInfo qdev_prop_zero_page_detection = {
|
||||
.name = "ZeroPageDetection",
|
||||
.description = "zero_page_detection values, "
|
||||
"none,legacy,multifd",
|
||||
.type = "ZeroPageDetection",
|
||||
.description = "Zero page detection (none/legacy/multifd)",
|
||||
.enum_table = &ZeroPageDetection_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
.set = qdev_propinfo_set_enum,
|
||||
@ -801,7 +797,7 @@ out:
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_reserved_region = {
|
||||
.name = "reserved_region",
|
||||
.type = "str",
|
||||
.description = "Reserved Region, example: 0xFEE00000:0xFEEFFFFF:0",
|
||||
.get = get_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 = {
|
||||
.name = "int32",
|
||||
.type = "str",
|
||||
.description = "Slot and optional function number, example: 06.0 or 06",
|
||||
.print = print_pci_devfn,
|
||||
.get = qdev_propinfo_get_int32,
|
||||
@ -988,8 +984,8 @@ inval:
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_pci_host_devaddr = {
|
||||
.name = "str",
|
||||
.description = "Address (bus/device/function) of "
|
||||
.type = "str",
|
||||
.description = "Address (bus:device.function) of "
|
||||
"the host device, example: 04:10.0",
|
||||
.get = get_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 --- */
|
||||
|
||||
const PropertyInfo qdev_prop_off_auto_pcibar = {
|
||||
.name = "OffAutoPCIBAR",
|
||||
.type = "OffAutoPCIBAR",
|
||||
.description = "off/auto/bar0/bar1/bar2/bar3/bar4/bar5",
|
||||
.enum_table = &OffAutoPCIBAR_lookup,
|
||||
.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 = {
|
||||
.name = "PCIELinkSpeed",
|
||||
.type = "PCIELinkSpeed",
|
||||
.description = "2_5/5/8/16/32/64",
|
||||
.enum_table = &PCIELinkSpeed_lookup,
|
||||
.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 = {
|
||||
.name = "PCIELinkWidth",
|
||||
.type = "PCIELinkWidth",
|
||||
.description = "1/2/4/8/12/16/32",
|
||||
.enum_table = &PCIELinkWidth_lookup,
|
||||
.get = get_prop_pcielinkwidth,
|
||||
@ -1218,7 +1214,7 @@ static void set_default_uuid_auto(ObjectProperty *op, const Property *prop)
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_uuid = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "UUID (aka GUID) or \"" UUID_VALUE_AUTO
|
||||
"\" for random value (default)",
|
||||
.get = get_uuid,
|
||||
@ -1231,8 +1227,8 @@ const PropertyInfo qdev_prop_uuid = {
|
||||
QEMU_BUILD_BUG_ON(sizeof(S390CpuEntitlement) != sizeof(int));
|
||||
|
||||
const PropertyInfo qdev_prop_cpus390entitlement = {
|
||||
.name = "S390CpuEntitlement",
|
||||
.description = "low/medium (default)/high",
|
||||
.type = "S390CpuEntitlement",
|
||||
.description = "auto/low/medium/high (default medium)",
|
||||
.enum_table = &S390CpuEntitlement_lookup,
|
||||
.get = qdev_propinfo_get_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 = {
|
||||
.name = "IOThreadVirtQueueMappingList",
|
||||
.type = "IOThreadVirtQueueMappingList",
|
||||
.description = "IOThread virtqueue mapping list [{\"iothread\":\"<id>\", "
|
||||
"\"vqs\":[1,2,3,...]},...]",
|
||||
.get = get_iothread_vq_mapping_list,
|
||||
@ -1287,7 +1283,7 @@ const PropertyInfo qdev_prop_iothread_vq_mapping_list = {
|
||||
/* --- Endian modes */
|
||||
|
||||
const PropertyInfo qdev_prop_endian_mode = {
|
||||
.name = "EndianMode",
|
||||
.type = "EndianMode",
|
||||
.description = "Endian mode, big/little/unspecified",
|
||||
.enum_table = &EndianMode_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
@ -1296,7 +1292,7 @@ const PropertyInfo qdev_prop_endian_mode = {
|
||||
};
|
||||
|
||||
const PropertyInfo qdev_prop_vmapple_virtio_blk_variant = {
|
||||
.name = "VMAppleVirtioBlkVariant",
|
||||
.type = "VMAppleVirtioBlkVariant",
|
||||
.description = "unspecified/root/aux",
|
||||
.enum_table = &VMAppleVirtioBlkVariant_lookup,
|
||||
.get = qdev_propinfo_get_enum,
|
||||
|
@ -122,13 +122,6 @@ void qdev_propinfo_set_default_value_enum(ObjectProperty *op,
|
||||
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 */
|
||||
|
||||
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 = {
|
||||
.name = "bool",
|
||||
.type = "bool",
|
||||
.description = "on/off",
|
||||
.get = prop_get_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 = {
|
||||
.name = "bool",
|
||||
.type = "bool",
|
||||
.description = "on/off",
|
||||
.get = prop_get_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 = {
|
||||
.name = "bool",
|
||||
.type = "bool",
|
||||
.description = "on/off",
|
||||
.get = get_bool,
|
||||
.set = set_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 = {
|
||||
.name = "uint8",
|
||||
.type = "uint8",
|
||||
.get = get_uint8,
|
||||
.set = set_uint8,
|
||||
.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 = {
|
||||
.name = "uint16",
|
||||
.type = "uint16",
|
||||
.get = get_uint16,
|
||||
.set = set_uint16,
|
||||
.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 = {
|
||||
.name = "uint32",
|
||||
.type = "uint32",
|
||||
.get = get_uint32,
|
||||
.set = set_uint32,
|
||||
.set_default_value = qdev_propinfo_set_default_value_uint,
|
||||
};
|
||||
|
||||
const PropertyInfo qdev_prop_int32 = {
|
||||
.name = "int32",
|
||||
.type = "int32",
|
||||
.get = qdev_propinfo_get_int32,
|
||||
.set = set_int32,
|
||||
.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 = {
|
||||
.name = "uint64",
|
||||
.type = "uint64",
|
||||
.get = get_uint64,
|
||||
.set = set_uint64,
|
||||
.set_default_value = qdev_propinfo_set_default_value_uint,
|
||||
};
|
||||
|
||||
const PropertyInfo qdev_prop_int64 = {
|
||||
.name = "int64",
|
||||
.type = "int64",
|
||||
.get = get_int64,
|
||||
.set = set_int64,
|
||||
.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 = {
|
||||
.name = "uint64",
|
||||
.type = "uint64",
|
||||
.get = get_uint64,
|
||||
.set = set_uint64_checkmask,
|
||||
};
|
||||
@ -485,7 +479,7 @@ static void set_string(Object *obj, Visitor *v, const char *name,
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_string = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.release = release_string,
|
||||
.get = get_string,
|
||||
.set = set_string,
|
||||
@ -494,7 +488,7 @@ const PropertyInfo qdev_prop_string = {
|
||||
/* --- on/off/auto --- */
|
||||
|
||||
const PropertyInfo qdev_prop_on_off_auto = {
|
||||
.name = "OnOffAuto",
|
||||
.type = "OnOffAuto",
|
||||
.description = "on/off/auto",
|
||||
.enum_table = &OnOffAuto_lookup,
|
||||
.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 = {
|
||||
.name = "size",
|
||||
.type = "size",
|
||||
.get = qdev_propinfo_get_size32,
|
||||
.set = set_size32,
|
||||
.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 = {
|
||||
.name = "list",
|
||||
.type = "list",
|
||||
.get = get_prop_array,
|
||||
.set = set_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 = {
|
||||
.name = "size",
|
||||
.type = "size",
|
||||
.get = get_size,
|
||||
.set = set_size,
|
||||
.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 = {
|
||||
.name = "link",
|
||||
.type = "link",
|
||||
.create = create_link_property,
|
||||
};
|
||||
|
||||
@ -973,7 +967,7 @@ void qdev_property_add_static(DeviceState *dev, const Property *prop)
|
||||
|
||||
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_setter(prop->info),
|
||||
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);
|
||||
} else {
|
||||
op = object_class_property_add(oc,
|
||||
name, prop->info->name,
|
||||
name, prop->info->type,
|
||||
field_prop_getter(prop->info),
|
||||
field_prop_setter(prop->info),
|
||||
prop->info->release,
|
||||
|
@ -871,7 +871,7 @@ separator_error:
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_apple_gfx_display_mode = {
|
||||
.name = "display_mode",
|
||||
.type = "display_mode",
|
||||
.description =
|
||||
"Display mode in pixels and Hertz, as <width>x<height>@<refresh-rate> "
|
||||
"Example: 3840x2160@60",
|
||||
|
@ -652,7 +652,7 @@ static void trng_prop_fault_event_set(Object *obj, Visitor *v,
|
||||
}
|
||||
|
||||
static const PropertyInfo trng_prop_fault_events = {
|
||||
.name = "uint32:bits",
|
||||
.type = "uint32",
|
||||
.description = "Set to trigger TRNG fault events",
|
||||
.set = trng_prop_fault_event_set,
|
||||
.realized_set_allowed = true,
|
||||
|
@ -179,7 +179,7 @@ static void set_nguid(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_nguid = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description =
|
||||
"NGUID or \"" NGUID_VALUE_AUTO "\" for random value",
|
||||
.get = get_nguid,
|
||||
|
@ -502,7 +502,7 @@ static void bbram_prop_release_drive(Object *obj, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo bbram_prop_drive = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Node name or ID of a block device to use as BBRAM backend",
|
||||
.realized_set_allowed = true,
|
||||
.get = bbram_prop_get_drive,
|
||||
|
@ -257,7 +257,7 @@ static void efuse_prop_release_drive(Object *obj, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo efuse_prop_drive = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Node name or ID of a block device to use as eFUSE backend",
|
||||
.realized_set_allowed = true,
|
||||
.get = efuse_prop_get_drive,
|
||||
|
@ -77,7 +77,7 @@ static void prop_pci_busnr_get(Object *obj, Visitor *v, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo prop_pci_busnr = {
|
||||
.name = "busnr",
|
||||
.type = "busnr",
|
||||
.get = prop_pci_busnr_get,
|
||||
};
|
||||
|
||||
|
@ -74,9 +74,9 @@ static void ccw_device_set_loadparm(Object *obj, Visitor *v,
|
||||
}
|
||||
|
||||
const PropertyInfo ccw_loadparm = {
|
||||
.name = "ccw_loadparm",
|
||||
.description = "Up to 8 chars in set of [A-Za-z0-9. ] to pass"
|
||||
" to the guest loader/kernel",
|
||||
.type = "str",
|
||||
.description = "Up to 8 chars in set of [A-Za-z0-9. ] to select"
|
||||
" a guest kernel",
|
||||
.get = ccw_device_get_loadparm,
|
||||
.set = ccw_device_set_loadparm,
|
||||
};
|
||||
|
@ -2523,7 +2523,7 @@ out:
|
||||
}
|
||||
|
||||
const PropertyInfo css_devid_propinfo = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Identifier of an I/O device in the channel "
|
||||
"subsystem, example: fe.1.23ab",
|
||||
.get = get_css_devid,
|
||||
@ -2531,7 +2531,7 @@ const PropertyInfo css_devid_propinfo = {
|
||||
};
|
||||
|
||||
const PropertyInfo css_devid_ro_propinfo = {
|
||||
.name = "str",
|
||||
.type = "str",
|
||||
.description = "Read-only identifier of an I/O device in the channel "
|
||||
"subsystem, example: fe.1.23ab",
|
||||
.get = get_css_devid,
|
||||
|
@ -1495,7 +1495,8 @@ static void s390_pci_set_fid(Object *obj, Visitor *v, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo s390_pci_fid_propinfo = {
|
||||
.name = "zpci_fid",
|
||||
.type = "uint32",
|
||||
.description = "zpci_fid",
|
||||
.get = s390_pci_get_fid,
|
||||
.set = s390_pci_set_fid,
|
||||
};
|
||||
|
@ -1480,7 +1480,7 @@ static void set_nv_gpudirect_clique_id(Object *obj, Visitor *v,
|
||||
}
|
||||
|
||||
const PropertyInfo qdev_prop_nv_gpudirect_clique = {
|
||||
.name = "uint4",
|
||||
.type = "uint8",
|
||||
.description = "NVIDIA GPUDirect Clique ID (0 - 15)",
|
||||
.get = get_nv_gpudirect_clique_id,
|
||||
.set = set_nv_gpudirect_clique_id,
|
||||
|
@ -30,7 +30,7 @@ struct Property {
|
||||
};
|
||||
|
||||
struct PropertyInfo {
|
||||
const char *name;
|
||||
const char *type;
|
||||
const char *description;
|
||||
const QEnumLookup *enum_table;
|
||||
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_bit64;
|
||||
extern const PropertyInfo qdev_prop_bool;
|
||||
extern const PropertyInfo qdev_prop_enum;
|
||||
extern const PropertyInfo qdev_prop_uint8;
|
||||
extern const PropertyInfo qdev_prop_uint16;
|
||||
extern const PropertyInfo qdev_prop_uint32;
|
||||
|
@ -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.
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass
|
||||
from typing import (
|
||||
Any,
|
||||
Dict,
|
||||
@ -79,19 +80,16 @@ SchemaInfoCommand = Dict[str, object]
|
||||
_ValueT = TypeVar('_ValueT', bound=_Value)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Annotated(Generic[_ValueT]):
|
||||
"""
|
||||
Annotated generally contains a SchemaInfo-like type (as a dict),
|
||||
But it also used to wrap comments/ifconds around scalar leaf values,
|
||||
for the benefit of features and enums.
|
||||
"""
|
||||
# TODO: Remove after Python 3.7 adds @dataclass:
|
||||
# pylint: disable=too-few-public-methods
|
||||
def __init__(self, value: _ValueT, ifcond: QAPISchemaIfCond,
|
||||
comment: Optional[str] = None):
|
||||
self.value = value
|
||||
self.comment: Optional[str] = comment
|
||||
self.ifcond = ifcond
|
||||
value: _ValueT
|
||||
ifcond: QAPISchemaIfCond
|
||||
comment: Optional[str] = None
|
||||
|
||||
|
||||
def _tree_to_qlit(obj: JSONValue,
|
||||
|
@ -14,7 +14,6 @@
|
||||
# This work is licensed under the terms of the GNU GPL, version 2.
|
||||
# See the COPYING file in the top-level directory.
|
||||
|
||||
from collections import OrderedDict
|
||||
import os
|
||||
import re
|
||||
from typing import (
|
||||
@ -154,7 +153,7 @@ class QAPISchemaParser:
|
||||
"value of 'include' must be a string")
|
||||
incl_fname = os.path.join(os.path.dirname(self._fname),
|
||||
include)
|
||||
self._add_expr(OrderedDict({'include': incl_fname}), info)
|
||||
self._add_expr({'include': incl_fname}, info)
|
||||
exprs_include = self._include(include, info, incl_fname,
|
||||
self._included)
|
||||
if exprs_include:
|
||||
@ -355,7 +354,7 @@ class QAPISchemaParser:
|
||||
raise QAPIParseError(self, "stray '%s'" % match.group(0))
|
||||
|
||||
def get_members(self) -> Dict[str, object]:
|
||||
expr: Dict[str, object] = OrderedDict()
|
||||
expr: Dict[str, object] = {}
|
||||
if self.tok == '}':
|
||||
self.accept()
|
||||
return expr
|
||||
|
@ -19,7 +19,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from abc import ABC, abstractmethod
|
||||
from collections import OrderedDict
|
||||
import os
|
||||
import re
|
||||
from typing import (
|
||||
@ -557,7 +556,7 @@ class QAPISchemaObjectType(QAPISchemaType):
|
||||
super().check(schema)
|
||||
assert self._checked and not self._check_complete
|
||||
|
||||
seen = OrderedDict()
|
||||
seen = {}
|
||||
if self._base_name:
|
||||
self.base = schema.resolve_type(self._base_name, self.info,
|
||||
"'base'")
|
||||
@ -1141,10 +1140,10 @@ class QAPISchema:
|
||||
self.docs = parser.docs
|
||||
self._entity_list: List[QAPISchemaEntity] = []
|
||||
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
|
||||
# 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.
|
||||
# Rely on dict iteration order matching insertion order so that
|
||||
@ -1454,7 +1453,7 @@ class QAPISchema:
|
||||
ifcond = QAPISchemaIfCond(expr.get('if'))
|
||||
info = expr.info
|
||||
features = self._make_features(expr.get('features'), info)
|
||||
if isinstance(data, OrderedDict):
|
||||
if isinstance(data, dict):
|
||||
data = self._make_implicit_object_type(
|
||||
name, info, ifcond,
|
||||
'arg', self._make_members(data, info))
|
||||
@ -1473,7 +1472,7 @@ class QAPISchema:
|
||||
ifcond = QAPISchemaIfCond(expr.get('if'))
|
||||
info = expr.info
|
||||
features = self._make_features(expr.get('features'), info)
|
||||
if isinstance(data, OrderedDict):
|
||||
if isinstance(data, dict):
|
||||
data = self._make_implicit_object_type(
|
||||
name, info, ifcond,
|
||||
'arg', self._make_members(data, info))
|
||||
|
@ -1816,7 +1816,8 @@ static void prop_pmu_num_get(Object *obj, Visitor *v, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo prop_pmu_num = {
|
||||
.name = "pmu-num",
|
||||
.type = "int8",
|
||||
.description = "pmu-num",
|
||||
.get = prop_pmu_num_get,
|
||||
.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 = {
|
||||
.name = "pmu-mask",
|
||||
.type = "int8",
|
||||
.description = "pmu-mask",
|
||||
.get = prop_pmu_mask_get,
|
||||
.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 = {
|
||||
.name = "mmu",
|
||||
.type = "bool",
|
||||
.description = "mmu",
|
||||
.get = prop_mmu_get,
|
||||
.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 = {
|
||||
.name = "pmp",
|
||||
.type = "bool",
|
||||
.description = "pmp",
|
||||
.get = prop_pmp_get,
|
||||
.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 = {
|
||||
.name = "priv_spec",
|
||||
.type = "str",
|
||||
.description = "priv_spec",
|
||||
/* FIXME enum? */
|
||||
.get = prop_priv_spec_get,
|
||||
.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 = {
|
||||
.name = "vext_spec",
|
||||
.type = "str",
|
||||
.description = "vext_spec",
|
||||
/* FIXME enum? */
|
||||
.get = prop_vext_spec_get,
|
||||
.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 = {
|
||||
.name = "vlen",
|
||||
.type = "uint16",
|
||||
.description = "vlen",
|
||||
.get = prop_vlen_get,
|
||||
.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 = {
|
||||
.name = "elen",
|
||||
.type = "uint16",
|
||||
.description = "elen",
|
||||
.get = prop_elen_get,
|
||||
.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 = {
|
||||
.name = "cbom_blocksize",
|
||||
.type = "uint16",
|
||||
.description = "cbom_blocksize",
|
||||
.get = prop_cbom_blksize_get,
|
||||
.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 = {
|
||||
.name = "cbop_blocksize",
|
||||
.type = "uint16",
|
||||
.description = "cbop_blocksize",
|
||||
.get = prop_cbop_blksize_get,
|
||||
.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 = {
|
||||
.name = "cboz_blocksize",
|
||||
.type = "uint16",
|
||||
.description = "cboz_blocksize",
|
||||
.get = prop_cboz_blksize_get,
|
||||
.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 = {
|
||||
.name = "mvendorid",
|
||||
.type = "uint32",
|
||||
.description = "mvendorid",
|
||||
.get = prop_mvendorid_get,
|
||||
.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 = {
|
||||
.name = "mimpid",
|
||||
.type = "uint64",
|
||||
.description = "mimpid",
|
||||
.get = prop_mimpid_get,
|
||||
.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 = {
|
||||
.name = "marchid",
|
||||
.type = "uint64",
|
||||
.description = "marchid",
|
||||
.get = prop_marchid_get,
|
||||
.set = prop_marchid_set,
|
||||
};
|
||||
|
@ -938,7 +938,8 @@ static void sparc_set_nwindows(Object *obj, Visitor *v, const char *name,
|
||||
}
|
||||
|
||||
static const PropertyInfo qdev_prop_nwindows = {
|
||||
.name = "int",
|
||||
.type = "int",
|
||||
.description = "Number of register windows",
|
||||
.get = sparc_get_nwindows,
|
||||
.set = sparc_set_nwindows,
|
||||
};
|
||||
|
@ -96,17 +96,8 @@ class QAPISchemaTestVisitor(QAPISchemaVisitor):
|
||||
|
||||
@staticmethod
|
||||
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():
|
||||
print('%sif %s' % (' ' * indent, _massage(ifcond.ifcond)))
|
||||
print('%sif %s' % (' ' * indent, ifcond.ifcond))
|
||||
|
||||
@classmethod
|
||||
def _print_features(cls, features, indent=4):
|
||||
|
Loading…
x
Reference in New Issue
Block a user