mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-09 02:24:58 -06:00
* qdev: second part of Property cleanups
* rust: second part of QOM rework * rust: callbacks wrapper * rust: pl011 bugfixes * kvm: cleanup errors in kvm_convert_memory() -----BEGIN PGP SIGNATURE----- iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmdkaEkUHHBib256aW5p QHJlZGhhdC5jb20ACgkQv/vSX3jHroN0/wgAgIJg8BrlRKfmiz14NZfph8/jarSj TOWYVxL2v4q98KBuL5pta2ucObgzwqyqSyc02S2DGSOIMQCIiBB5MaCk1iMjx+BO pmVU8gNlD8faO8SSmnnr+jDQt+G+bQ/nRgQJOAReF8oVw3O2aC/FaVKpitMzWtvv PLnJWdrqqpGq14OzX8iNCzSujxppAuyjrhT4lNlekzDoDfdTez72r+rXkvg4GzZL QC3xLYg/LrT8Rs+zgOhm/AaIyS4bOyMlkU9Du1rQ6Tyne45ey2FCwKVzBKrJdGcw sVbzEclxseLenoTbZqYK6JTzLdDoThVUbY2JwoCGUaIm+74P4NjEsUsTVg== =TuQM -----END PGP SIGNATURE----- Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging * qdev: second part of Property cleanups * rust: second part of QOM rework * rust: callbacks wrapper * rust: pl011 bugfixes * kvm: cleanup errors in kvm_convert_memory() # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmdkaEkUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroN0/wgAgIJg8BrlRKfmiz14NZfph8/jarSj # TOWYVxL2v4q98KBuL5pta2ucObgzwqyqSyc02S2DGSOIMQCIiBB5MaCk1iMjx+BO # pmVU8gNlD8faO8SSmnnr+jDQt+G+bQ/nRgQJOAReF8oVw3O2aC/FaVKpitMzWtvv # PLnJWdrqqpGq14OzX8iNCzSujxppAuyjrhT4lNlekzDoDfdTez72r+rXkvg4GzZL # QC3xLYg/LrT8Rs+zgOhm/AaIyS4bOyMlkU9Du1rQ6Tyne45ey2FCwKVzBKrJdGcw # sVbzEclxseLenoTbZqYK6JTzLdDoThVUbY2JwoCGUaIm+74P4NjEsUsTVg== # =TuQM # -----END PGP SIGNATURE----- # gpg: Signature made Thu 19 Dec 2024 13:39:05 EST # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: (42 commits) rust: pl011: simplify handling of the FIFO enabled bit in LCR rust: pl011: fix migration stream rust: pl011: extend registers to 32 bits rust: pl011: fix break errors and definition of Data struct rust: pl011: always use reset() method on registers rust: pl011: match break logic of C version rust: pl011: fix declaration of LineControl bits target/i386: Reset TSCs of parked vCPUs too on VM reset kvm: consistently return 0/-errno from kvm_convert_memory rust: qemu-api: add a module to wrap functions and zero-sized closures rust: qom: add initial subset of methods on Object rust: qom: add casting functionality rust: tests: allow writing more than one test bql: add a "mock" BQL for Rust unit tests rust: re-export C types from qemu-api submodules rust: rename qemu-api modules to follow C code a bit more rust: qom: add possibility of overriding unparent rust: qom: put class_init together from multiple ClassInitImpl<> Constify all opaque Property pointers hw/core/qdev-properties: Constify Property argument to PropertyInfo.print ... Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
commit
e3a207722b
603 changed files with 1422 additions and 1269 deletions
|
@ -437,6 +437,16 @@ int kvm_unpark_vcpu(KVMState *s, unsigned long vcpu_id)
|
||||||
return kvm_fd;
|
return kvm_fd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void kvm_reset_parked_vcpus(void *param)
|
||||||
|
{
|
||||||
|
KVMState *s = param;
|
||||||
|
struct KVMParkedVcpu *cpu;
|
||||||
|
|
||||||
|
QLIST_FOREACH(cpu, &s->kvm_parked_vcpus, node) {
|
||||||
|
kvm_arch_reset_parked_vcpu(cpu->vcpu_id, cpu->kvm_fd);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int kvm_create_vcpu(CPUState *cpu)
|
int kvm_create_vcpu(CPUState *cpu)
|
||||||
{
|
{
|
||||||
unsigned long vcpu_id = kvm_arch_vcpu_id(cpu);
|
unsigned long vcpu_id = kvm_arch_vcpu_id(cpu);
|
||||||
|
@ -2728,6 +2738,7 @@ static int kvm_init(MachineState *ms)
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_register_reset(kvm_unpoison_all, NULL);
|
qemu_register_reset(kvm_unpoison_all, NULL);
|
||||||
|
qemu_register_reset(kvm_reset_parked_vcpus, s);
|
||||||
|
|
||||||
if (s->kernel_irqchip_allowed) {
|
if (s->kernel_irqchip_allowed) {
|
||||||
kvm_irqchip_create(s);
|
kvm_irqchip_create(s);
|
||||||
|
@ -2999,17 +3010,17 @@ int kvm_convert_memory(hwaddr start, hwaddr size, bool to_private)
|
||||||
MemoryRegion *mr;
|
MemoryRegion *mr;
|
||||||
RAMBlock *rb;
|
RAMBlock *rb;
|
||||||
void *addr;
|
void *addr;
|
||||||
int ret = -1;
|
int ret = -EINVAL;
|
||||||
|
|
||||||
trace_kvm_convert_memory(start, size, to_private ? "shared_to_private" : "private_to_shared");
|
trace_kvm_convert_memory(start, size, to_private ? "shared_to_private" : "private_to_shared");
|
||||||
|
|
||||||
if (!QEMU_PTR_IS_ALIGNED(start, qemu_real_host_page_size()) ||
|
if (!QEMU_PTR_IS_ALIGNED(start, qemu_real_host_page_size()) ||
|
||||||
!QEMU_PTR_IS_ALIGNED(size, qemu_real_host_page_size())) {
|
!QEMU_PTR_IS_ALIGNED(size, qemu_real_host_page_size())) {
|
||||||
return -1;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!size) {
|
if (!size) {
|
||||||
return -1;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
section = memory_region_find(get_system_memory(), start, size);
|
section = memory_region_find(get_system_memory(), start, size);
|
||||||
|
@ -3027,7 +3038,7 @@ int kvm_convert_memory(hwaddr start, hwaddr size, bool to_private)
|
||||||
if (!to_private) {
|
if (!to_private) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return -1;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!memory_region_has_guest_memfd(mr)) {
|
if (!memory_region_has_guest_memfd(mr)) {
|
||||||
|
|
|
@ -46,7 +46,7 @@ static void get_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
TPMBackend *s, **be = object_field_prop_ptr(obj, prop);
|
TPMBackend *s, **be = object_field_prop_ptr(obj, prop);
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ static void set_tpm(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
|
|
||||||
static void release_tpm(Object *obj, const char *name, void *opaque)
|
static void release_tpm(Object *obj, const char *name, void *opaque)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
TPMBackend **be = object_field_prop_ptr(obj, prop);
|
TPMBackend **be = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
if (*be) {
|
if (*be) {
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
TARGET_ARCH=i386
|
TARGET_ARCH=i386
|
||||||
TARGET_SUPPORTS_MTTCG=y
|
TARGET_SUPPORTS_MTTCG=y
|
||||||
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
||||||
|
TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
|
||||||
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
|
TARGET_XML_FILES= gdb-xml/i386-32bit.xml
|
||||||
|
|
|
@ -2,4 +2,5 @@ TARGET_ARCH=x86_64
|
||||||
TARGET_BASE_ARCH=i386
|
TARGET_BASE_ARCH=i386
|
||||||
TARGET_SUPPORTS_MTTCG=y
|
TARGET_SUPPORTS_MTTCG=y
|
||||||
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
TARGET_KVM_HAVE_GUEST_DEBUG=y
|
||||||
|
TARGET_KVM_HAVE_RESET_PARKED_VCPU=y
|
||||||
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
|
TARGET_XML_FILES= gdb-xml/i386-64bit.xml
|
||||||
|
|
|
@ -201,7 +201,6 @@ static const Property cpu_common_props[] = {
|
||||||
DEFINE_PROP_LINK("memory", CPUState, memory, TYPE_MEMORY_REGION,
|
DEFINE_PROP_LINK("memory", CPUState, memory, TYPE_MEMORY_REGION,
|
||||||
MemoryRegion *),
|
MemoryRegion *),
|
||||||
#endif
|
#endif
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
|
|
|
@ -401,7 +401,6 @@ the old behaviour or the new behaviour::
|
||||||
DEFINE_PROP_UINT32("acpi-index", PCIDevice, acpi_index, 0),
|
DEFINE_PROP_UINT32("acpi-index", PCIDevice, acpi_index, 0),
|
||||||
+ DEFINE_PROP_BIT("x-pcie-err-unc-mask", PCIDevice, cap_present,
|
+ DEFINE_PROP_BIT("x-pcie-err-unc-mask", PCIDevice, cap_present,
|
||||||
+ QEMU_PCIE_ERR_UNC_MASK_BITNR, true),
|
+ QEMU_PCIE_ERR_UNC_MASK_BITNR, true),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Notice that we enable the feature for new machine types.
|
Notice that we enable the feature for new machine types.
|
||||||
|
|
|
@ -107,7 +107,6 @@ manually instantiated:
|
||||||
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
||||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
|
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
|
||||||
DEV_NVECTORS_UNSPECIFIED),
|
DEV_NVECTORS_UNSPECIFIED),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
static void virtio_blk_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
|
|
|
@ -246,7 +246,6 @@ static const VMStateDescription vmstate_virtio_9p = {
|
||||||
static const Property virtio_9p_properties[] = {
|
static const Property virtio_9p_properties[] = {
|
||||||
DEFINE_PROP_STRING("mount_tag", V9fsVirtioState, state.fsconf.tag),
|
DEFINE_PROP_STRING("mount_tag", V9fsVirtioState, state.fsconf.tag),
|
||||||
DEFINE_PROP_STRING("fsdev", V9fsVirtioState, state.fsconf.fsdev_id),
|
DEFINE_PROP_STRING("fsdev", V9fsVirtioState, state.fsconf.fsdev_id),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtio_9p_class_init(ObjectClass *klass, void *data)
|
static void virtio_9p_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -1016,7 +1016,6 @@ static const Property erst_properties[] = {
|
||||||
TYPE_MEMORY_BACKEND, HostMemoryBackend *),
|
TYPE_MEMORY_BACKEND, HostMemoryBackend *),
|
||||||
DEFINE_PROP_UINT32(ACPI_ERST_RECORD_SIZE_PROP, ERSTDeviceState,
|
DEFINE_PROP_UINT32(ACPI_ERST_RECORD_SIZE_PROP, ERSTDeviceState,
|
||||||
default_record_size, ERST_RECORD_SIZE),
|
default_record_size, ERST_RECORD_SIZE),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void erst_class_init(ObjectClass *klass, void *data)
|
static void erst_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -318,7 +318,6 @@ static void acpi_ged_send_event(AcpiDeviceIf *adev, AcpiEventStatusBits ev)
|
||||||
|
|
||||||
static const Property acpi_ged_properties[] = {
|
static const Property acpi_ged_properties[] = {
|
||||||
DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0),
|
DEFINE_PROP_UINT32("ged-event", AcpiGedState, ged_event_bitmap, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const VMStateDescription vmstate_memhp_state = {
|
static const VMStateDescription vmstate_memhp_state = {
|
||||||
|
|
|
@ -617,7 +617,6 @@ static const Property piix4_pm_properties[] = {
|
||||||
DEFINE_PROP_BOOL("smm-enabled", PIIX4PMState, smm_enabled, false),
|
DEFINE_PROP_BOOL("smm-enabled", PIIX4PMState, smm_enabled, false),
|
||||||
DEFINE_PROP_BOOL("x-not-migrate-acpi-index", PIIX4PMState,
|
DEFINE_PROP_BOOL("x-not-migrate-acpi-index", PIIX4PMState,
|
||||||
not_migrate_acpi_index, false),
|
not_migrate_acpi_index, false),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void piix4_pm_class_init(ObjectClass *klass, void *data)
|
static void piix4_pm_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -216,7 +216,6 @@ static void vmgenid_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
static const Property vmgenid_device_properties[] = {
|
static const Property vmgenid_device_properties[] = {
|
||||||
DEFINE_PROP_UUID(VMGENID_GUID, VmGenIdState, guid),
|
DEFINE_PROP_UUID(VMGENID_GUID, VmGenIdState, guid),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vmgenid_device_class_init(ObjectClass *klass, void *data)
|
static void vmgenid_device_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -289,7 +289,6 @@ static const VMStateDescription vmstate_aspeed_adc_engine = {
|
||||||
static const Property aspeed_adc_engine_properties[] = {
|
static const Property aspeed_adc_engine_properties[] = {
|
||||||
DEFINE_PROP_UINT32("engine-id", AspeedADCEngineState, engine_id, 0),
|
DEFINE_PROP_UINT32("engine-id", AspeedADCEngineState, engine_id, 0),
|
||||||
DEFINE_PROP_UINT32("nr-channels", AspeedADCEngineState, nr_channels, 0),
|
DEFINE_PROP_UINT32("nr-channels", AspeedADCEngineState, nr_channels, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void aspeed_adc_engine_class_init(ObjectClass *klass, void *data)
|
static void aspeed_adc_engine_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -269,7 +269,6 @@ static const VMStateDescription vmstate_npcm7xx_adc = {
|
||||||
|
|
||||||
static const Property npcm7xx_timer_properties[] = {
|
static const Property npcm7xx_timer_properties[] = {
|
||||||
DEFINE_PROP_UINT32("iref", NPCM7xxADCState, iref, NPCM7XX_ADC_DEFAULT_IREF),
|
DEFINE_PROP_UINT32("iref", NPCM7xxADCState, iref, NPCM7XX_ADC_DEFAULT_IREF),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void npcm7xx_adc_class_init(ObjectClass *klass, void *data)
|
static void npcm7xx_adc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -72,6 +72,7 @@ struct ARMSSEInfo {
|
||||||
bool has_cpu_pwrctrl;
|
bool has_cpu_pwrctrl;
|
||||||
bool has_sse_counter;
|
bool has_sse_counter;
|
||||||
bool has_tcms;
|
bool has_tcms;
|
||||||
|
uint8_t props_count;
|
||||||
const Property *props;
|
const Property *props;
|
||||||
const ARMSSEDeviceInfo *devinfo;
|
const ARMSSEDeviceInfo *devinfo;
|
||||||
const bool *irq_is_common;
|
const bool *irq_is_common;
|
||||||
|
@ -87,7 +88,6 @@ static const Property iotkit_properties[] = {
|
||||||
DEFINE_PROP_BOOL("CPU0_DSP", ARMSSE, cpu_dsp[0], true),
|
DEFINE_PROP_BOOL("CPU0_DSP", ARMSSE, cpu_dsp[0], true),
|
||||||
DEFINE_PROP_UINT32("CPU0_MPU_NS", ARMSSE, cpu_mpu_ns[0], 8),
|
DEFINE_PROP_UINT32("CPU0_MPU_NS", ARMSSE, cpu_mpu_ns[0], 8),
|
||||||
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Property sse200_properties[] = {
|
static const Property sse200_properties[] = {
|
||||||
|
@ -104,7 +104,6 @@ static const Property sse200_properties[] = {
|
||||||
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
||||||
DEFINE_PROP_UINT32("CPU1_MPU_NS", ARMSSE, cpu_mpu_ns[1], 8),
|
DEFINE_PROP_UINT32("CPU1_MPU_NS", ARMSSE, cpu_mpu_ns[1], 8),
|
||||||
DEFINE_PROP_UINT32("CPU1_MPU_S", ARMSSE, cpu_mpu_s[1], 8),
|
DEFINE_PROP_UINT32("CPU1_MPU_S", ARMSSE, cpu_mpu_s[1], 8),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Property sse300_properties[] = {
|
static const Property sse300_properties[] = {
|
||||||
|
@ -117,7 +116,6 @@ static const Property sse300_properties[] = {
|
||||||
DEFINE_PROP_BOOL("CPU0_DSP", ARMSSE, cpu_dsp[0], true),
|
DEFINE_PROP_BOOL("CPU0_DSP", ARMSSE, cpu_dsp[0], true),
|
||||||
DEFINE_PROP_UINT32("CPU0_MPU_NS", ARMSSE, cpu_mpu_ns[0], 8),
|
DEFINE_PROP_UINT32("CPU0_MPU_NS", ARMSSE, cpu_mpu_ns[0], 8),
|
||||||
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
DEFINE_PROP_UINT32("CPU0_MPU_S", ARMSSE, cpu_mpu_s[0], 8),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const ARMSSEDeviceInfo iotkit_devices[] = {
|
static const ARMSSEDeviceInfo iotkit_devices[] = {
|
||||||
|
@ -528,6 +526,7 @@ static const ARMSSEInfo armsse_variants[] = {
|
||||||
.has_sse_counter = false,
|
.has_sse_counter = false,
|
||||||
.has_tcms = false,
|
.has_tcms = false,
|
||||||
.props = iotkit_properties,
|
.props = iotkit_properties,
|
||||||
|
.props_count = ARRAY_SIZE(iotkit_properties),
|
||||||
.devinfo = iotkit_devices,
|
.devinfo = iotkit_devices,
|
||||||
.irq_is_common = sse200_irq_is_common,
|
.irq_is_common = sse200_irq_is_common,
|
||||||
},
|
},
|
||||||
|
@ -549,6 +548,7 @@ static const ARMSSEInfo armsse_variants[] = {
|
||||||
.has_sse_counter = false,
|
.has_sse_counter = false,
|
||||||
.has_tcms = false,
|
.has_tcms = false,
|
||||||
.props = sse200_properties,
|
.props = sse200_properties,
|
||||||
|
.props_count = ARRAY_SIZE(sse200_properties),
|
||||||
.devinfo = sse200_devices,
|
.devinfo = sse200_devices,
|
||||||
.irq_is_common = sse200_irq_is_common,
|
.irq_is_common = sse200_irq_is_common,
|
||||||
},
|
},
|
||||||
|
@ -570,6 +570,7 @@ static const ARMSSEInfo armsse_variants[] = {
|
||||||
.has_sse_counter = true,
|
.has_sse_counter = true,
|
||||||
.has_tcms = true,
|
.has_tcms = true,
|
||||||
.props = sse300_properties,
|
.props = sse300_properties,
|
||||||
|
.props_count = ARRAY_SIZE(sse300_properties),
|
||||||
.devinfo = sse300_devices,
|
.devinfo = sse300_devices,
|
||||||
.irq_is_common = sse300_irq_is_common,
|
.irq_is_common = sse300_irq_is_common,
|
||||||
},
|
},
|
||||||
|
@ -1699,7 +1700,7 @@ static void armsse_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
||||||
dc->realize = armsse_realize;
|
dc->realize = armsse_realize;
|
||||||
dc->vmsd = &armsse_vmstate;
|
dc->vmsd = &armsse_vmstate;
|
||||||
device_class_set_props(dc, info->props);
|
device_class_set_props_n(dc, info->props, info->props_count);
|
||||||
device_class_set_legacy_reset(dc, armsse_reset);
|
device_class_set_legacy_reset(dc, armsse_reset);
|
||||||
iic->check = armsse_idau_check;
|
iic->check = armsse_idau_check;
|
||||||
asc->info = info;
|
asc->info = info;
|
||||||
|
|
|
@ -552,7 +552,6 @@ static const Property armv7m_properties[] = {
|
||||||
DEFINE_PROP_BOOL("dsp", ARMv7MState, dsp, true),
|
DEFINE_PROP_BOOL("dsp", ARMv7MState, dsp, true),
|
||||||
DEFINE_PROP_UINT32("mpu-ns-regions", ARMv7MState, mpu_ns_regions, UINT_MAX),
|
DEFINE_PROP_UINT32("mpu-ns-regions", ARMv7MState, mpu_ns_regions, UINT_MAX),
|
||||||
DEFINE_PROP_UINT32("mpu-s-regions", ARMv7MState, mpu_s_regions, UINT_MAX),
|
DEFINE_PROP_UINT32("mpu-s-regions", ARMv7MState, mpu_s_regions, UINT_MAX),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const VMStateDescription vmstate_armv7m = {
|
static const VMStateDescription vmstate_armv7m = {
|
||||||
|
@ -635,7 +634,6 @@ static const Property bitband_properties[] = {
|
||||||
DEFINE_PROP_UINT32("base", BitBandState, base, 0),
|
DEFINE_PROP_UINT32("base", BitBandState, base, 0),
|
||||||
DEFINE_PROP_LINK("source-memory", BitBandState, source_memory,
|
DEFINE_PROP_LINK("source-memory", BitBandState, source_memory,
|
||||||
TYPE_MEMORY_REGION, MemoryRegion *),
|
TYPE_MEMORY_REGION, MemoryRegion *),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void bitband_class_init(ObjectClass *klass, void *data)
|
static void bitband_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -144,7 +144,6 @@ static const Property aspeed_soc_properties[] = {
|
||||||
MemoryRegion *),
|
MemoryRegion *),
|
||||||
DEFINE_PROP_LINK("memory", AspeedSoCState, memory, TYPE_MEMORY_REGION,
|
DEFINE_PROP_LINK("memory", AspeedSoCState, memory, TYPE_MEMORY_REGION,
|
||||||
MemoryRegion *),
|
MemoryRegion *),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void aspeed_soc_class_init(ObjectClass *oc, void *data)
|
static void aspeed_soc_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -311,7 +311,6 @@ static void fsl_imx25_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
static const Property fsl_imx25_properties[] = {
|
static const Property fsl_imx25_properties[] = {
|
||||||
DEFINE_PROP_UINT32("fec-phy-num", FslIMX25State, phy_num, 0),
|
DEFINE_PROP_UINT32("fec-phy-num", FslIMX25State, phy_num, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fsl_imx25_class_init(ObjectClass *oc, void *data)
|
static void fsl_imx25_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -483,7 +483,6 @@ static void fsl_imx6_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
static const Property fsl_imx6_properties[] = {
|
static const Property fsl_imx6_properties[] = {
|
||||||
DEFINE_PROP_UINT32("fec-phy-num", FslIMX6State, phy_num, 0),
|
DEFINE_PROP_UINT32("fec-phy-num", FslIMX6State, phy_num, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fsl_imx6_class_init(ObjectClass *oc, void *data)
|
static void fsl_imx6_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -725,7 +725,6 @@ static const Property fsl_imx6ul_properties[] = {
|
||||||
true),
|
true),
|
||||||
DEFINE_PROP_BOOL("fec2-phy-connected", FslIMX6ULState, phy_connected[1],
|
DEFINE_PROP_BOOL("fec2-phy-connected", FslIMX6ULState, phy_connected[1],
|
||||||
true),
|
true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fsl_imx6ul_class_init(ObjectClass *oc, void *data)
|
static void fsl_imx6ul_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -743,7 +743,6 @@ static const Property fsl_imx7_properties[] = {
|
||||||
true),
|
true),
|
||||||
DEFINE_PROP_BOOL("fec2-phy-connected", FslIMX7State, phy_connected[1],
|
DEFINE_PROP_BOOL("fec2-phy-connected", FslIMX7State, phy_connected[1],
|
||||||
true),
|
true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void fsl_imx7_class_init(ObjectClass *oc, void *data)
|
static void fsl_imx7_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -696,7 +696,6 @@ DEFINE_MACHINE("integratorcp", integratorcp_machine_init)
|
||||||
|
|
||||||
static const Property core_properties[] = {
|
static const Property core_properties[] = {
|
||||||
DEFINE_PROP_UINT32("memsz", IntegratorCMState, memsz, 0),
|
DEFINE_PROP_UINT32("memsz", IntegratorCMState, memsz, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void core_class_init(ObjectClass *klass, void *data)
|
static void core_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -234,7 +234,6 @@ static const Property m2sxxx_soc_properties[] = {
|
||||||
/* default divisors in Libero GUI */
|
/* default divisors in Libero GUI */
|
||||||
DEFINE_PROP_UINT8("apb0div", MSF2State, apb0div, 2),
|
DEFINE_PROP_UINT8("apb0div", MSF2State, apb0div, 2),
|
||||||
DEFINE_PROP_UINT8("apb1div", MSF2State, apb1div, 2),
|
DEFINE_PROP_UINT8("apb1div", MSF2State, apb1div, 2),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void m2sxxx_soc_class_init(ObjectClass *klass, void *data)
|
static void m2sxxx_soc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -813,7 +813,6 @@ static void npcm7xx_realize(DeviceState *dev, Error **errp)
|
||||||
static const Property npcm7xx_properties[] = {
|
static const Property npcm7xx_properties[] = {
|
||||||
DEFINE_PROP_LINK("dram-mr", NPCM7xxState, dram, TYPE_MEMORY_REGION,
|
DEFINE_PROP_LINK("dram-mr", NPCM7xxState, dram, TYPE_MEMORY_REGION,
|
||||||
MemoryRegion *),
|
MemoryRegion *),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void npcm7xx_class_init(ObjectClass *oc, void *data)
|
static void npcm7xx_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -214,7 +214,6 @@ static const Property nrf51_soc_properties[] = {
|
||||||
DEFINE_PROP_UINT32("sram-size", NRF51State, sram_size, NRF51822_SRAM_SIZE),
|
DEFINE_PROP_UINT32("sram-size", NRF51State, sram_size, NRF51822_SRAM_SIZE),
|
||||||
DEFINE_PROP_UINT32("flash-size", NRF51State, flash_size,
|
DEFINE_PROP_UINT32("flash-size", NRF51State, flash_size,
|
||||||
NRF51822_FLASH_SIZE),
|
NRF51822_FLASH_SIZE),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void nrf51_soc_class_init(ObjectClass *klass, void *data)
|
static void nrf51_soc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -938,7 +938,6 @@ static const Property smmu_dev_properties[] = {
|
||||||
DEFINE_PROP_UINT8("bus_num", SMMUState, bus_num, 0),
|
DEFINE_PROP_UINT8("bus_num", SMMUState, bus_num, 0),
|
||||||
DEFINE_PROP_LINK("primary-bus", SMMUState, primary_bus,
|
DEFINE_PROP_LINK("primary-bus", SMMUState, primary_bus,
|
||||||
TYPE_PCI_BUS, PCIBus *),
|
TYPE_PCI_BUS, PCIBus *),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void smmu_base_class_init(ObjectClass *klass, void *data)
|
static void smmu_base_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -1985,7 +1985,6 @@ static const Property smmuv3_properties[] = {
|
||||||
* Defaults to stage 1
|
* Defaults to stage 1
|
||||||
*/
|
*/
|
||||||
DEFINE_PROP_STRING("stage", SMMUv3State, stage),
|
DEFINE_PROP_STRING("stage", SMMUv3State, stage),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void smmuv3_instance_init(Object *obj)
|
static void smmuv3_instance_init(Object *obj)
|
||||||
|
|
|
@ -448,7 +448,6 @@ static const Property stellaris_sys_properties[] = {
|
||||||
DEFINE_PROP_UINT32("dc2", ssys_state, dc2, 0),
|
DEFINE_PROP_UINT32("dc2", ssys_state, dc2, 0),
|
||||||
DEFINE_PROP_UINT32("dc3", ssys_state, dc3, 0),
|
DEFINE_PROP_UINT32("dc3", ssys_state, dc3, 0),
|
||||||
DEFINE_PROP_UINT32("dc4", ssys_state, dc4, 0),
|
DEFINE_PROP_UINT32("dc4", ssys_state, dc4, 0),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stellaris_sys_instance_init(Object *obj)
|
static void stellaris_sys_instance_init(Object *obj)
|
||||||
|
|
|
@ -1334,7 +1334,6 @@ static const VMStateDescription vmstate_strongarm_uart_regs = {
|
||||||
|
|
||||||
static const Property strongarm_uart_properties[] = {
|
static const Property strongarm_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", StrongARMUARTState, chr),
|
DEFINE_PROP_CHR("chardev", StrongARMUARTState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void strongarm_uart_class_init(ObjectClass *klass, void *data)
|
static void strongarm_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -975,7 +975,6 @@ static const Property versal_properties[] = {
|
||||||
TYPE_CAN_BUS, CanBusState *),
|
TYPE_CAN_BUS, CanBusState *),
|
||||||
DEFINE_PROP_LINK("canbus1", Versal, lpd.iou.canbus[1],
|
DEFINE_PROP_LINK("canbus1", Versal, lpd.iou.canbus[1],
|
||||||
TYPE_CAN_BUS, CanBusState *),
|
TYPE_CAN_BUS, CanBusState *),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void versal_class_init(ObjectClass *klass, void *data)
|
static void versal_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -867,7 +867,6 @@ static const Property xlnx_zynqmp_props[] = {
|
||||||
CanBusState *),
|
CanBusState *),
|
||||||
DEFINE_PROP_LINK("canbus1", XlnxZynqMPState, canbus[1], TYPE_CAN_BUS,
|
DEFINE_PROP_LINK("canbus1", XlnxZynqMPState, canbus[1], TYPE_CAN_BUS,
|
||||||
CanBusState *),
|
CanBusState *),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
|
static void xlnx_zynqmp_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -1326,7 +1326,6 @@ static void ac97_exit(PCIDevice *dev)
|
||||||
|
|
||||||
static const Property ac97_properties[] = {
|
static const Property ac97_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(AC97LinkState, card),
|
DEFINE_AUDIO_PROPERTIES(AC97LinkState, card),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ac97_class_init(ObjectClass *klass, void *data)
|
static void ac97_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -301,7 +301,6 @@ static const Property adlib_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(AdlibState, card),
|
DEFINE_AUDIO_PROPERTIES(AdlibState, card),
|
||||||
DEFINE_PROP_UINT32 ("iobase", AdlibState, port, 0x220),
|
DEFINE_PROP_UINT32 ("iobase", AdlibState, port, 0x220),
|
||||||
DEFINE_PROP_UINT32 ("freq", AdlibState, freq, 44100),
|
DEFINE_PROP_UINT32 ("freq", AdlibState, freq, 44100),
|
||||||
DEFINE_PROP_END_OF_LIST (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void adlib_class_initfn (ObjectClass *klass, void *data)
|
static void adlib_class_initfn (ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -698,7 +698,6 @@ static void asc_init(Object *obj)
|
||||||
static const Property asc_properties[] = {
|
static const Property asc_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(ASCState, card),
|
DEFINE_AUDIO_PROPERTIES(ASCState, card),
|
||||||
DEFINE_PROP_UINT8("asctype", ASCState, type, ASC_TYPE_ASC),
|
DEFINE_PROP_UINT8("asctype", ASCState, type, ASC_TYPE_ASC),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void asc_class_init(ObjectClass *oc, void *data)
|
static void asc_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -694,7 +694,6 @@ static const Property cs4231a_properties[] = {
|
||||||
DEFINE_PROP_UINT32 ("iobase", CSState, port, 0x534),
|
DEFINE_PROP_UINT32 ("iobase", CSState, port, 0x534),
|
||||||
DEFINE_PROP_UINT32 ("irq", CSState, irq, 9),
|
DEFINE_PROP_UINT32 ("irq", CSState, irq, 9),
|
||||||
DEFINE_PROP_UINT32 ("dma", CSState, dma, 3),
|
DEFINE_PROP_UINT32 ("dma", CSState, dma, 3),
|
||||||
DEFINE_PROP_END_OF_LIST (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void cs4231a_class_initfn (ObjectClass *klass, void *data)
|
static void cs4231a_class_initfn (ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -870,7 +870,6 @@ static void es1370_exit(PCIDevice *dev)
|
||||||
|
|
||||||
static const Property es1370_properties[] = {
|
static const Property es1370_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(ES1370State, card),
|
DEFINE_AUDIO_PROPERTIES(ES1370State, card),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void es1370_class_init (ObjectClass *klass, void *data)
|
static void es1370_class_init (ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -296,7 +296,6 @@ static const Property gus_properties[] = {
|
||||||
DEFINE_PROP_UINT32 ("iobase", GUSState, port, 0x240),
|
DEFINE_PROP_UINT32 ("iobase", GUSState, port, 0x240),
|
||||||
DEFINE_PROP_UINT32 ("irq", GUSState, emu.gusirq, 7),
|
DEFINE_PROP_UINT32 ("irq", GUSState, emu.gusirq, 7),
|
||||||
DEFINE_PROP_UINT32 ("dma", GUSState, emu.gusdma, 3),
|
DEFINE_PROP_UINT32 ("dma", GUSState, emu.gusdma, 3),
|
||||||
DEFINE_PROP_END_OF_LIST (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void gus_class_initfn (ObjectClass *klass, void *data)
|
static void gus_class_initfn (ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -862,7 +862,6 @@ static const Property hda_audio_properties[] = {
|
||||||
DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0),
|
DEFINE_PROP_UINT32("debug", HDAAudioState, debug, 0),
|
||||||
DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, true),
|
DEFINE_PROP_BOOL("mixer", HDAAudioState, mixer, true),
|
||||||
DEFINE_PROP_BOOL("use-timer", HDAAudioState, use_timer, true),
|
DEFINE_PROP_BOOL("use-timer", HDAAudioState, use_timer, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void hda_audio_init_output(HDACodecDevice *hda, Error **errp)
|
static void hda_audio_init_output(HDACodecDevice *hda, Error **errp)
|
||||||
|
|
|
@ -39,7 +39,6 @@
|
||||||
|
|
||||||
static const Property hda_props[] = {
|
static const Property hda_props[] = {
|
||||||
DEFINE_PROP_UINT32("cad", HDACodecDevice, cad, -1),
|
DEFINE_PROP_UINT32("cad", HDACodecDevice, cad, -1),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const TypeInfo hda_codec_bus_info = {
|
static const TypeInfo hda_codec_bus_info = {
|
||||||
|
@ -1219,7 +1218,6 @@ static const Property intel_hda_properties[] = {
|
||||||
DEFINE_PROP_UINT32("debug", IntelHDAState, debug, 0),
|
DEFINE_PROP_UINT32("debug", IntelHDAState, debug, 0),
|
||||||
DEFINE_PROP_ON_OFF_AUTO("msi", IntelHDAState, msi, ON_OFF_AUTO_AUTO),
|
DEFINE_PROP_ON_OFF_AUTO("msi", IntelHDAState, msi, ON_OFF_AUTO_AUTO),
|
||||||
DEFINE_PROP_BOOL("old_msi_addr", IntelHDAState, old_msi_addr, false),
|
DEFINE_PROP_BOOL("old_msi_addr", IntelHDAState, old_msi_addr, false),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void intel_hda_class_init(ObjectClass *klass, void *data)
|
static void intel_hda_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -219,7 +219,6 @@ static const Property pcspk_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(PCSpkState, card),
|
DEFINE_AUDIO_PROPERTIES(PCSpkState, card),
|
||||||
DEFINE_PROP_UINT32("iobase", PCSpkState, iobase, 0x61),
|
DEFINE_PROP_UINT32("iobase", PCSpkState, iobase, 0x61),
|
||||||
DEFINE_PROP_BOOL("migrate", PCSpkState, migrate, true),
|
DEFINE_PROP_BOOL("migrate", PCSpkState, migrate, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pcspk_class_initfn(ObjectClass *klass, void *data)
|
static void pcspk_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -630,7 +630,6 @@ static const Property pl041_device_properties[] = {
|
||||||
/* Non-compact FIFO depth property */
|
/* Non-compact FIFO depth property */
|
||||||
DEFINE_PROP_UINT32("nc_fifo_depth", PL041State, fifo_depth,
|
DEFINE_PROP_UINT32("nc_fifo_depth", PL041State, fifo_depth,
|
||||||
DEFAULT_FIFO_DEPTH),
|
DEFAULT_FIFO_DEPTH),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pl041_device_class_init(ObjectClass *klass, void *data)
|
static void pl041_device_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -1447,7 +1447,6 @@ static const Property sb16_properties[] = {
|
||||||
DEFINE_PROP_UINT32 ("irq", SB16State, irq, 5),
|
DEFINE_PROP_UINT32 ("irq", SB16State, irq, 5),
|
||||||
DEFINE_PROP_UINT32 ("dma", SB16State, dma, 1),
|
DEFINE_PROP_UINT32 ("dma", SB16State, dma, 1),
|
||||||
DEFINE_PROP_UINT32 ("dma16", SB16State, hdma, 5),
|
DEFINE_PROP_UINT32 ("dma16", SB16State, hdma, 5),
|
||||||
DEFINE_PROP_END_OF_LIST (),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sb16_class_initfn (ObjectClass *klass, void *data)
|
static void sb16_class_initfn (ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -461,7 +461,6 @@ static void via_ac97_exit(PCIDevice *dev)
|
||||||
|
|
||||||
static const Property via_ac97_properties[] = {
|
static const Property via_ac97_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(ViaAC97State, card),
|
DEFINE_AUDIO_PROPERTIES(ViaAC97State, card),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void via_ac97_class_init(ObjectClass *klass, void *data)
|
static void via_ac97_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -31,7 +31,6 @@ static const Property virtio_snd_pci_properties[] = {
|
||||||
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
|
DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
|
||||||
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
|
||||||
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
|
DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, 2),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtio_snd_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
static void virtio_snd_pci_realize(VirtIOPCIProxy *vpci_dev, Error **errp)
|
||||||
|
|
|
@ -85,7 +85,6 @@ static const Property virtio_snd_properties[] = {
|
||||||
VIRTIO_SOUND_STREAM_DEFAULT),
|
VIRTIO_SOUND_STREAM_DEFAULT),
|
||||||
DEFINE_PROP_UINT32("chmaps", VirtIOSound, snd_conf.chmaps,
|
DEFINE_PROP_UINT32("chmaps", VirtIOSound, snd_conf.chmaps,
|
||||||
VIRTIO_SOUND_CHMAP_DEFAULT),
|
VIRTIO_SOUND_CHMAP_DEFAULT),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -708,7 +708,6 @@ void wm8750_set_bclk_in(void *opaque, int new_hz)
|
||||||
|
|
||||||
static const Property wm8750_properties[] = {
|
static const Property wm8750_properties[] = {
|
||||||
DEFINE_AUDIO_PROPERTIES(WM8750State, card),
|
DEFINE_AUDIO_PROPERTIES(WM8750State, card),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void wm8750_class_init(ObjectClass *klass, void *data)
|
static void wm8750_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -358,7 +358,6 @@ static void atmega_realize(DeviceState *dev, Error **errp)
|
||||||
static const Property atmega_props[] = {
|
static const Property atmega_props[] = {
|
||||||
DEFINE_PROP_UINT64("xtal-frequency-hz", AtmegaMcuState,
|
DEFINE_PROP_UINT64("xtal-frequency-hz", AtmegaMcuState,
|
||||||
xtal_freq_hz, 0),
|
xtal_freq_hz, 0),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void atmega_class_init(ObjectClass *oc, void *data)
|
static void atmega_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -296,7 +296,6 @@ static const Property isa_fdc_properties[] = {
|
||||||
DEFINE_PROP_SIGNED("fallback", FDCtrlISABus, state.fallback,
|
DEFINE_PROP_SIGNED("fallback", FDCtrlISABus, state.fallback,
|
||||||
FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type,
|
FLOPPY_DRIVE_TYPE_288, qdev_prop_fdc_drive_type,
|
||||||
FloppyDriveType),
|
FloppyDriveType),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void isabus_fdc_class_init(ObjectClass *klass, void *data)
|
static void isabus_fdc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -206,7 +206,6 @@ static const Property sysbus_fdc_properties[] = {
|
||||||
DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback,
|
DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback,
|
||||||
FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type,
|
FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type,
|
||||||
FloppyDriveType),
|
FloppyDriveType),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sysbus_fdc_class_init(ObjectClass *klass, void *data)
|
static void sysbus_fdc_class_init(ObjectClass *klass, void *data)
|
||||||
|
@ -230,7 +229,6 @@ static const Property sun4m_fdc_properties[] = {
|
||||||
DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback,
|
DEFINE_PROP_SIGNED("fallback", FDCtrlSysBus, state.fallback,
|
||||||
FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type,
|
FLOPPY_DRIVE_TYPE_144, qdev_prop_fdc_drive_type,
|
||||||
FloppyDriveType),
|
FloppyDriveType),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sun4m_fdc_class_init(ObjectClass *klass, void *data)
|
static void sun4m_fdc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -460,7 +460,6 @@ static const Property floppy_drive_properties[] = {
|
||||||
DEFINE_PROP_SIGNED("drive-type", FloppyDrive, type,
|
DEFINE_PROP_SIGNED("drive-type", FloppyDrive, type,
|
||||||
FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type,
|
FLOPPY_DRIVE_TYPE_AUTO, qdev_prop_fdc_drive_type,
|
||||||
FloppyDriveType),
|
FloppyDriveType),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void floppy_drive_realize(DeviceState *qdev, Error **errp)
|
static void floppy_drive_realize(DeviceState *qdev, Error **errp)
|
||||||
|
|
|
@ -1729,7 +1729,6 @@ static const Property m25p80_properties[] = {
|
||||||
DEFINE_PROP_UINT8("spansion-cr3nv", Flash, spansion_cr3nv, 0x2),
|
DEFINE_PROP_UINT8("spansion-cr3nv", Flash, spansion_cr3nv, 0x2),
|
||||||
DEFINE_PROP_UINT8("spansion-cr4nv", Flash, spansion_cr4nv, 0x10),
|
DEFINE_PROP_UINT8("spansion-cr4nv", Flash, spansion_cr4nv, 0x10),
|
||||||
DEFINE_PROP_DRIVE("drive", Flash, blk),
|
DEFINE_PROP_DRIVE("drive", Flash, blk),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static int m25p80_pre_load(void *opaque)
|
static int m25p80_pre_load(void *opaque)
|
||||||
|
|
|
@ -449,7 +449,6 @@ static const Property nand_properties[] = {
|
||||||
DEFINE_PROP_UINT8("manufacturer_id", NANDFlashState, manf_id, 0),
|
DEFINE_PROP_UINT8("manufacturer_id", NANDFlashState, manf_id, 0),
|
||||||
DEFINE_PROP_UINT8("chip_id", NANDFlashState, chip_id, 0),
|
DEFINE_PROP_UINT8("chip_id", NANDFlashState, chip_id, 0),
|
||||||
DEFINE_PROP_DRIVE("drive", NANDFlashState, blk),
|
DEFINE_PROP_DRIVE("drive", NANDFlashState, blk),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void nand_class_init(ObjectClass *klass, void *data)
|
static void nand_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -932,7 +932,6 @@ static const Property pflash_cfi01_properties[] = {
|
||||||
DEFINE_PROP_STRING("name", PFlashCFI01, name),
|
DEFINE_PROP_STRING("name", PFlashCFI01, name),
|
||||||
DEFINE_PROP_BOOL("old-multiple-chip-handling", PFlashCFI01,
|
DEFINE_PROP_BOOL("old-multiple-chip-handling", PFlashCFI01,
|
||||||
old_multiple_chip_handling, false),
|
old_multiple_chip_handling, false),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pflash_cfi01_class_init(ObjectClass *klass, void *data)
|
static void pflash_cfi01_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -959,7 +959,6 @@ static const Property pflash_cfi02_properties[] = {
|
||||||
DEFINE_PROP_UINT16("unlock-addr0", PFlashCFI02, unlock_addr0, 0),
|
DEFINE_PROP_UINT16("unlock-addr0", PFlashCFI02, unlock_addr0, 0),
|
||||||
DEFINE_PROP_UINT16("unlock-addr1", PFlashCFI02, unlock_addr1, 0),
|
DEFINE_PROP_UINT16("unlock-addr1", PFlashCFI02, unlock_addr1, 0),
|
||||||
DEFINE_PROP_STRING("name", PFlashCFI02, name),
|
DEFINE_PROP_STRING("name", PFlashCFI02, name),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pflash_cfi02_unrealize(DeviceState *dev)
|
static void pflash_cfi02_unrealize(DeviceState *dev)
|
||||||
|
|
|
@ -169,7 +169,6 @@ static const BlockDevOps swim_block_ops = {
|
||||||
static const Property swim_drive_properties[] = {
|
static const Property swim_drive_properties[] = {
|
||||||
DEFINE_PROP_INT32("unit", SWIMDrive, unit, -1),
|
DEFINE_PROP_INT32("unit", SWIMDrive, unit, -1),
|
||||||
DEFINE_BLOCK_PROPERTIES(SWIMDrive, conf),
|
DEFINE_BLOCK_PROPERTIES(SWIMDrive, conf),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void swim_drive_realize(DeviceState *qdev, Error **errp)
|
static void swim_drive_realize(DeviceState *qdev, Error **errp)
|
||||||
|
|
|
@ -581,7 +581,6 @@ static const Property vhost_user_blk_properties[] = {
|
||||||
VIRTIO_BLK_F_DISCARD, true),
|
VIRTIO_BLK_F_DISCARD, true),
|
||||||
DEFINE_PROP_BIT64("write-zeroes", VHostUserBlk, parent_obj.host_features,
|
DEFINE_PROP_BIT64("write-zeroes", VHostUserBlk, parent_obj.host_features,
|
||||||
VIRTIO_BLK_F_WRITE_ZEROES, true),
|
VIRTIO_BLK_F_WRITE_ZEROES, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void vhost_user_blk_class_init(ObjectClass *klass, void *data)
|
static void vhost_user_blk_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -2014,7 +2014,6 @@ static const Property virtio_blk_properties[] = {
|
||||||
conf.max_write_zeroes_sectors, BDRV_REQUEST_MAX_SECTORS),
|
conf.max_write_zeroes_sectors, BDRV_REQUEST_MAX_SECTORS),
|
||||||
DEFINE_PROP_BOOL("x-enable-wce-if-config-wce", VirtIOBlock,
|
DEFINE_PROP_BOOL("x-enable-wce-if-config-wce", VirtIOBlock,
|
||||||
conf.x_enable_wce_if_config_wce, true),
|
conf.x_enable_wce_if_config_wce, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtio_blk_class_init(ObjectClass *klass, void *data)
|
static void virtio_blk_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -485,7 +485,7 @@ static char *disk_to_vbd_name(unsigned int disk)
|
||||||
static void xen_block_get_vdev(Object *obj, Visitor *v, const char *name,
|
static void xen_block_get_vdev(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
|
XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
@ -545,7 +545,7 @@ static int vbd_name_to_disk(const char *name, const char **endp,
|
||||||
static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
|
static void xen_block_set_vdev(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
|
XenBlockVdev *vdev = object_field_prop_ptr(obj, prop);
|
||||||
char *str, *p;
|
char *str, *p;
|
||||||
const char *end;
|
const char *end;
|
||||||
|
@ -674,7 +674,6 @@ static const Property xen_block_props[] = {
|
||||||
props.max_ring_page_order, 4),
|
props.max_ring_page_order, 4),
|
||||||
DEFINE_PROP_LINK("iothread", XenBlockDevice, props.iothread,
|
DEFINE_PROP_LINK("iothread", XenBlockDevice, props.iothread,
|
||||||
TYPE_IOTHREAD, IOThread *),
|
TYPE_IOTHREAD, IOThread *),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void xen_block_class_init(ObjectClass *class, void *data)
|
static void xen_block_class_init(ObjectClass *class, void *data)
|
||||||
|
|
|
@ -261,7 +261,6 @@ static const MemoryRegionOps avr_usart_ops = {
|
||||||
|
|
||||||
static const Property avr_usart_properties[] = {
|
static const Property avr_usart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", AVRUsartState, chr),
|
DEFINE_PROP_CHR("chardev", AVRUsartState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void avr_usart_pr(void *opaque, int irq, int level)
|
static void avr_usart_pr(void *opaque, int irq, int level)
|
||||||
|
|
|
@ -292,7 +292,6 @@ static void bcm2835_aux_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
static const Property bcm2835_aux_props[] = {
|
static const Property bcm2835_aux_props[] = {
|
||||||
DEFINE_PROP_CHR("chardev", BCM2835AuxState, chr),
|
DEFINE_PROP_CHR("chardev", BCM2835AuxState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void bcm2835_aux_class_init(ObjectClass *oc, void *data)
|
static void bcm2835_aux_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -619,7 +619,6 @@ static const VMStateDescription vmstate_cadence_uart = {
|
||||||
|
|
||||||
static const Property cadence_uart_properties[] = {
|
static const Property cadence_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", CadenceUARTState, chr),
|
DEFINE_PROP_CHR("chardev", CadenceUARTState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void cadence_uart_class_init(ObjectClass *klass, void *data)
|
static void cadence_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -380,7 +380,6 @@ static const VMStateDescription cmsdk_apb_uart_vmstate = {
|
||||||
static const Property cmsdk_apb_uart_properties[] = {
|
static const Property cmsdk_apb_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", CMSDKAPBUART, chr),
|
DEFINE_PROP_CHR("chardev", CMSDKAPBUART, chr),
|
||||||
DEFINE_PROP_UINT32("pclk-frq", CMSDKAPBUART, pclk_frq, 0),
|
DEFINE_PROP_UINT32("pclk-frq", CMSDKAPBUART, pclk_frq, 0),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void cmsdk_apb_uart_class_init(ObjectClass *klass, void *data)
|
static void cmsdk_apb_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -118,7 +118,6 @@ static const Property debugcon_isa_properties[] = {
|
||||||
DEFINE_PROP_UINT32("iobase", ISADebugconState, iobase, 0xe9),
|
DEFINE_PROP_UINT32("iobase", ISADebugconState, iobase, 0xe9),
|
||||||
DEFINE_PROP_CHR("chardev", ISADebugconState, state.chr),
|
DEFINE_PROP_CHR("chardev", ISADebugconState, state.chr),
|
||||||
DEFINE_PROP_UINT32("readback", ISADebugconState, state.readback, 0xe9),
|
DEFINE_PROP_UINT32("readback", ISADebugconState, state.readback, 0xe9),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void debugcon_isa_class_initfn(ObjectClass *klass, void *data)
|
static void debugcon_isa_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -174,7 +174,6 @@ static const VMStateDescription vmstate_digic_uart = {
|
||||||
|
|
||||||
static const Property digic_uart_properties[] = {
|
static const Property digic_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", DigicUartState, chr),
|
DEFINE_PROP_CHR("chardev", DigicUartState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void digic_uart_class_init(ObjectClass *klass, void *data)
|
static void digic_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -1099,7 +1099,6 @@ static const Property escc_properties[] = {
|
||||||
DEFINE_PROP_CHR("chrB", ESCCState, chn[0].chr),
|
DEFINE_PROP_CHR("chrB", ESCCState, chn[0].chr),
|
||||||
DEFINE_PROP_CHR("chrA", ESCCState, chn[1].chr),
|
DEFINE_PROP_CHR("chrA", ESCCState, chn[1].chr),
|
||||||
DEFINE_PROP_STRING("chnA-sunkbd-layout", ESCCState, chn[1].sunkbd_layout),
|
DEFINE_PROP_STRING("chnA-sunkbd-layout", ESCCState, chn[1].sunkbd_layout),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void escc_class_init(ObjectClass *klass, void *data)
|
static void escc_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -709,7 +709,6 @@ static const Property exynos4210_uart_properties[] = {
|
||||||
DEFINE_PROP_UINT32("channel", Exynos4210UartState, channel, 0),
|
DEFINE_PROP_UINT32("channel", Exynos4210UartState, channel, 0),
|
||||||
DEFINE_PROP_UINT32("rx-size", Exynos4210UartState, rx.size, 16),
|
DEFINE_PROP_UINT32("rx-size", Exynos4210UartState, rx.size, 16),
|
||||||
DEFINE_PROP_UINT32("tx-size", Exynos4210UartState, tx.size, 16),
|
DEFINE_PROP_UINT32("tx-size", Exynos4210UartState, tx.size, 16),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void exynos4210_uart_class_init(ObjectClass *klass, void *data)
|
static void exynos4210_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -243,7 +243,6 @@ static const VMStateDescription vmstate_goldfish_tty = {
|
||||||
|
|
||||||
static const Property goldfish_tty_properties[] = {
|
static const Property goldfish_tty_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", GoldfishTTYState, chr),
|
DEFINE_PROP_CHR("chardev", GoldfishTTYState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void goldfish_tty_instance_init(Object *obj)
|
static void goldfish_tty_instance_init(Object *obj)
|
||||||
|
|
|
@ -279,7 +279,6 @@ static void grlib_apbuart_reset(DeviceState *d)
|
||||||
|
|
||||||
static const Property grlib_apbuart_properties[] = {
|
static const Property grlib_apbuart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chrdev", UART, chr),
|
DEFINE_PROP_CHR("chrdev", UART, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void grlib_apbuart_class_init(ObjectClass *klass, void *data)
|
static void grlib_apbuart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -510,7 +510,6 @@ static const VMStateDescription vmstate_ibex_uart = {
|
||||||
|
|
||||||
static const Property ibex_uart_properties[] = {
|
static const Property ibex_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", IbexUartState, chr),
|
DEFINE_PROP_CHR("chardev", IbexUartState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ibex_uart_init(Object *obj)
|
static void ibex_uart_init(Object *obj)
|
||||||
|
|
|
@ -440,7 +440,6 @@ static void imx_serial_init(Object *obj)
|
||||||
|
|
||||||
static const Property imx_serial_properties[] = {
|
static const Property imx_serial_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", IMXSerialState, chr),
|
DEFINE_PROP_CHR("chardev", IMXSerialState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void imx_serial_class_init(ObjectClass *klass, void *data)
|
static void imx_serial_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -567,7 +567,6 @@ static const Property ipoctal_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev5", IPOctalState, ch[5].dev),
|
DEFINE_PROP_CHR("chardev5", IPOctalState, ch[5].dev),
|
||||||
DEFINE_PROP_CHR("chardev6", IPOctalState, ch[6].dev),
|
DEFINE_PROP_CHR("chardev6", IPOctalState, ch[6].dev),
|
||||||
DEFINE_PROP_CHR("chardev7", IPOctalState, ch[7].dev),
|
DEFINE_PROP_CHR("chardev7", IPOctalState, ch[7].dev),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void ipoctal_class_init(ObjectClass *klass, void *data)
|
static void ipoctal_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -314,7 +314,6 @@ static void mcf_uart_realize(DeviceState *dev, Error **errp)
|
||||||
|
|
||||||
static const Property mcf_uart_properties[] = {
|
static const Property mcf_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", mcf_uart_state, chr),
|
DEFINE_PROP_CHR("chardev", mcf_uart_state, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mcf_uart_class_init(ObjectClass *oc, void *data)
|
static void mcf_uart_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -306,7 +306,6 @@ static const VMStateDescription nrf51_uart_vmstate = {
|
||||||
|
|
||||||
static const Property nrf51_uart_properties[] = {
|
static const Property nrf51_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", NRF51UARTState, chr),
|
DEFINE_PROP_CHR("chardev", NRF51UARTState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void nrf51_uart_class_init(ObjectClass *klass, void *data)
|
static void nrf51_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -608,7 +608,6 @@ static const Property parallel_isa_properties[] = {
|
||||||
DEFINE_PROP_UINT32("iobase", ISAParallelState, iobase, -1),
|
DEFINE_PROP_UINT32("iobase", ISAParallelState, iobase, -1),
|
||||||
DEFINE_PROP_UINT32("irq", ISAParallelState, isairq, 7),
|
DEFINE_PROP_UINT32("irq", ISAParallelState, isairq, 7),
|
||||||
DEFINE_PROP_CHR("chardev", ISAParallelState, state.chr),
|
DEFINE_PROP_CHR("chardev", ISAParallelState, state.chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void parallel_isa_class_initfn(ObjectClass *klass, void *data)
|
static void parallel_isa_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -606,7 +606,6 @@ static const VMStateDescription vmstate_pl011 = {
|
||||||
static const Property pl011_properties[] = {
|
static const Property pl011_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", PL011State, chr),
|
DEFINE_PROP_CHR("chardev", PL011State, chr),
|
||||||
DEFINE_PROP_BOOL("migrate-clk", PL011State, migrate_clk, true),
|
DEFINE_PROP_BOOL("migrate-clk", PL011State, migrate_clk, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void pl011_init(Object *obj)
|
static void pl011_init(Object *obj)
|
||||||
|
|
|
@ -322,7 +322,6 @@ static const VMStateDescription vmstate_rsci = {
|
||||||
static const Property rsci_properties[] = {
|
static const Property rsci_properties[] = {
|
||||||
DEFINE_PROP_UINT64("input-freq", RSCIState, input_freq, 0),
|
DEFINE_PROP_UINT64("input-freq", RSCIState, input_freq, 0),
|
||||||
DEFINE_PROP_CHR("chardev", RSCIState, chr),
|
DEFINE_PROP_CHR("chardev", RSCIState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void rsci_class_init(ObjectClass *klass, void *data)
|
static void rsci_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -337,7 +337,6 @@ static const Property console_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", SCLPConsoleLM, chr),
|
DEFINE_PROP_CHR("chardev", SCLPConsoleLM, chr),
|
||||||
DEFINE_PROP_UINT32("write_errors", SCLPConsoleLM, write_errors, 0),
|
DEFINE_PROP_UINT32("write_errors", SCLPConsoleLM, write_errors, 0),
|
||||||
DEFINE_PROP_BOOL("echo", SCLPConsoleLM, echo, true),
|
DEFINE_PROP_BOOL("echo", SCLPConsoleLM, echo, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void console_class_init(ObjectClass *klass, void *data)
|
static void console_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -253,7 +253,6 @@ static void console_reset(DeviceState *dev)
|
||||||
|
|
||||||
static const Property console_properties[] = {
|
static const Property console_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", SCLPConsole, chr),
|
DEFINE_PROP_CHR("chardev", SCLPConsole, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void console_class_init(ObjectClass *klass, void *data)
|
static void console_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -117,7 +117,6 @@ static const Property serial_isa_properties[] = {
|
||||||
DEFINE_PROP_UINT32("index", ISASerialState, index, -1),
|
DEFINE_PROP_UINT32("index", ISASerialState, index, -1),
|
||||||
DEFINE_PROP_UINT32("iobase", ISASerialState, iobase, -1),
|
DEFINE_PROP_UINT32("iobase", ISASerialState, iobase, -1),
|
||||||
DEFINE_PROP_UINT32("irq", ISASerialState, isairq, -1),
|
DEFINE_PROP_UINT32("irq", ISASerialState, isairq, -1),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void serial_isa_class_initfn(ObjectClass *klass, void *data)
|
static void serial_isa_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -132,7 +132,6 @@ static const Property serial_mm_properties[] = {
|
||||||
*/
|
*/
|
||||||
DEFINE_PROP_UINT8("regshift", SerialMM, regshift, 0),
|
DEFINE_PROP_UINT8("regshift", SerialMM, regshift, 0),
|
||||||
DEFINE_PROP_UINT8("endianness", SerialMM, endianness, DEVICE_NATIVE_ENDIAN),
|
DEFINE_PROP_UINT8("endianness", SerialMM, endianness, DEVICE_NATIVE_ENDIAN),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void serial_mm_class_init(ObjectClass *oc, void *data)
|
static void serial_mm_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -136,7 +136,6 @@ static const Property multi_2x_serial_pci_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev1", PCIMultiSerialState, state[0].chr),
|
DEFINE_PROP_CHR("chardev1", PCIMultiSerialState, state[0].chr),
|
||||||
DEFINE_PROP_CHR("chardev2", PCIMultiSerialState, state[1].chr),
|
DEFINE_PROP_CHR("chardev2", PCIMultiSerialState, state[1].chr),
|
||||||
DEFINE_PROP_UINT8("prog_if", PCIMultiSerialState, prog_if, 0x02),
|
DEFINE_PROP_UINT8("prog_if", PCIMultiSerialState, prog_if, 0x02),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const Property multi_4x_serial_pci_properties[] = {
|
static const Property multi_4x_serial_pci_properties[] = {
|
||||||
|
@ -145,7 +144,6 @@ static const Property multi_4x_serial_pci_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev3", PCIMultiSerialState, state[2].chr),
|
DEFINE_PROP_CHR("chardev3", PCIMultiSerialState, state[2].chr),
|
||||||
DEFINE_PROP_CHR("chardev4", PCIMultiSerialState, state[3].chr),
|
DEFINE_PROP_CHR("chardev4", PCIMultiSerialState, state[3].chr),
|
||||||
DEFINE_PROP_UINT8("prog_if", PCIMultiSerialState, prog_if, 0x02),
|
DEFINE_PROP_UINT8("prog_if", PCIMultiSerialState, prog_if, 0x02),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
|
static void multi_2x_serial_pci_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -83,7 +83,6 @@ static const VMStateDescription vmstate_pci_serial = {
|
||||||
|
|
||||||
static const Property serial_pci_properties[] = {
|
static const Property serial_pci_properties[] = {
|
||||||
DEFINE_PROP_UINT8("prog_if", PCISerialState, prog_if, 0x02),
|
DEFINE_PROP_UINT8("prog_if", PCISerialState, prog_if, 0x02),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void serial_pci_class_initfn(ObjectClass *klass, void *data)
|
static void serial_pci_class_initfn(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -968,7 +968,6 @@ static const Property serial_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", SerialState, chr),
|
DEFINE_PROP_CHR("chardev", SerialState, chr),
|
||||||
DEFINE_PROP_UINT32("baudbase", SerialState, baudbase, 115200),
|
DEFINE_PROP_UINT32("baudbase", SerialState, baudbase, 115200),
|
||||||
DEFINE_PROP_BOOL("wakeup", SerialState, wakeup, false),
|
DEFINE_PROP_BOOL("wakeup", SerialState, wakeup, false),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void serial_class_init(ObjectClass *klass, void* data)
|
static void serial_class_init(ObjectClass *klass, void* data)
|
||||||
|
|
|
@ -450,7 +450,6 @@ static void sh_serial_init(Object *obj)
|
||||||
static const Property sh_serial_properties[] = {
|
static const Property sh_serial_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", SHSerialState, chr),
|
DEFINE_PROP_CHR("chardev", SHSerialState, chr),
|
||||||
DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
|
DEFINE_PROP_UINT8("features", SHSerialState, feat, 0),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sh_serial_class_init(ObjectClass *oc, void *data)
|
static void sh_serial_class_init(ObjectClass *oc, void *data)
|
||||||
|
|
|
@ -159,7 +159,6 @@ static void shakti_uart_instance_init(Object *obj)
|
||||||
|
|
||||||
static const Property shakti_uart_properties[] = {
|
static const Property shakti_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", ShaktiUartState, chr),
|
DEFINE_PROP_CHR("chardev", ShaktiUartState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void shakti_uart_class_init(ObjectClass *klass, void *data)
|
static void shakti_uart_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -253,7 +253,6 @@ static int sifive_uart_be_change(void *opaque)
|
||||||
|
|
||||||
static const Property sifive_uart_properties[] = {
|
static const Property sifive_uart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", SiFiveUARTState, chr),
|
DEFINE_PROP_CHR("chardev", SiFiveUARTState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void sifive_uart_init(Object *obj)
|
static void sifive_uart_init(Object *obj)
|
||||||
|
|
|
@ -166,7 +166,6 @@ void spapr_vty_create(SpaprVioBus *bus, Chardev *chardev)
|
||||||
static const Property spapr_vty_properties[] = {
|
static const Property spapr_vty_properties[] = {
|
||||||
DEFINE_SPAPR_PROPERTIES(SpaprVioVty, sdev),
|
DEFINE_SPAPR_PROPERTIES(SpaprVioVty, sdev),
|
||||||
DEFINE_PROP_CHR("chardev", SpaprVioVty, chardev),
|
DEFINE_PROP_CHR("chardev", SpaprVioVty, chardev),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const VMStateDescription vmstate_spapr_vty = {
|
static const VMStateDescription vmstate_spapr_vty = {
|
||||||
|
|
|
@ -201,7 +201,6 @@ static const MemoryRegionOps stm32f2xx_usart_ops = {
|
||||||
|
|
||||||
static const Property stm32f2xx_usart_properties[] = {
|
static const Property stm32f2xx_usart_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", STM32F2XXUsartState, chr),
|
DEFINE_PROP_CHR("chardev", STM32F2XXUsartState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stm32f2xx_usart_init(Object *obj)
|
static void stm32f2xx_usart_init(Object *obj)
|
||||||
|
|
|
@ -536,7 +536,6 @@ static const MemoryRegionOps stm32l4x5_usart_base_ops = {
|
||||||
|
|
||||||
static const Property stm32l4x5_usart_base_properties[] = {
|
static const Property stm32l4x5_usart_base_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", Stm32l4x5UsartBaseState, chr),
|
DEFINE_PROP_CHR("chardev", Stm32l4x5UsartBaseState, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void stm32l4x5_usart_base_init(Object *obj)
|
static void stm32l4x5_usart_base_init(Object *obj)
|
||||||
|
|
|
@ -285,7 +285,6 @@ static int write_payload_3270(EmulatedCcw3270Device *dev, uint8_t cmd)
|
||||||
|
|
||||||
static const Property terminal_properties[] = {
|
static const Property terminal_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", Terminal3270, chr),
|
DEFINE_PROP_CHR("chardev", Terminal3270, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const VMStateDescription terminal3270_vmstate = {
|
static const VMStateDescription terminal3270_vmstate = {
|
||||||
|
|
|
@ -276,7 +276,6 @@ static const TypeInfo virtconsole_info = {
|
||||||
|
|
||||||
static const Property virtserialport_properties[] = {
|
static const Property virtserialport_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", VirtConsole, chr),
|
DEFINE_PROP_CHR("chardev", VirtConsole, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtserialport_class_init(ObjectClass *klass, void *data)
|
static void virtserialport_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -838,7 +838,6 @@ static void virtser_bus_dev_print(Monitor *mon, DeviceState *qdev, int indent);
|
||||||
static const Property virtser_props[] = {
|
static const Property virtser_props[] = {
|
||||||
DEFINE_PROP_UINT32("nr", VirtIOSerialPort, id, VIRTIO_CONSOLE_BAD_ID),
|
DEFINE_PROP_UINT32("nr", VirtIOSerialPort, id, VIRTIO_CONSOLE_BAD_ID),
|
||||||
DEFINE_PROP_STRING("name", VirtIOSerialPort, name),
|
DEFINE_PROP_STRING("name", VirtIOSerialPort, name),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtser_bus_class_init(ObjectClass *klass, void *data)
|
static void virtser_bus_class_init(ObjectClass *klass, void *data)
|
||||||
|
@ -1158,7 +1157,6 @@ static const Property virtio_serial_properties[] = {
|
||||||
31),
|
31),
|
||||||
DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features,
|
DEFINE_PROP_BIT64("emergency-write", VirtIOSerial, host_features,
|
||||||
VIRTIO_CONSOLE_F_EMERG_WRITE, true),
|
VIRTIO_CONSOLE_F_EMERG_WRITE, true),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void virtio_serial_class_init(ObjectClass *klass, void *data)
|
static void virtio_serial_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -490,7 +490,6 @@ static char *xen_console_get_frontend_path(XenDevice *xendev, Error **errp)
|
||||||
static const Property xen_console_properties[] = {
|
static const Property xen_console_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", XenConsole, chr),
|
DEFINE_PROP_CHR("chardev", XenConsole, chr),
|
||||||
DEFINE_PROP_INT32("idx", XenConsole, dev, -1),
|
DEFINE_PROP_INT32("idx", XenConsole, dev, -1),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void xen_console_class_init(ObjectClass *class, void *data)
|
static void xen_console_class_init(ObjectClass *class, void *data)
|
||||||
|
|
|
@ -178,7 +178,6 @@ static const MemoryRegionOps uart_ops = {
|
||||||
|
|
||||||
static const Property xilinx_uartlite_properties[] = {
|
static const Property xilinx_uartlite_properties[] = {
|
||||||
DEFINE_PROP_CHR("chardev", XilinxUARTLite, chr),
|
DEFINE_PROP_CHR("chardev", XilinxUARTLite, chr),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void uart_rx(void *opaque, const uint8_t *buf, int size)
|
static void uart_rx(void *opaque, const uint8_t *buf, int size)
|
||||||
|
|
|
@ -187,7 +187,6 @@ static const Property generic_loader_props[] = {
|
||||||
DEFINE_PROP_UINT32("cpu-num", GenericLoaderState, cpu_num, CPU_NONE),
|
DEFINE_PROP_UINT32("cpu-num", GenericLoaderState, cpu_num, CPU_NONE),
|
||||||
DEFINE_PROP_BOOL("force-raw", GenericLoaderState, force_raw, false),
|
DEFINE_PROP_BOOL("force-raw", GenericLoaderState, force_raw, false),
|
||||||
DEFINE_PROP_STRING("file", GenericLoaderState, file),
|
DEFINE_PROP_STRING("file", GenericLoaderState, file),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void generic_loader_class_init(ObjectClass *klass, void *data)
|
static void generic_loader_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -116,7 +116,6 @@ static const Property guest_loader_props[] = {
|
||||||
DEFINE_PROP_STRING("kernel", GuestLoaderState, kernel),
|
DEFINE_PROP_STRING("kernel", GuestLoaderState, kernel),
|
||||||
DEFINE_PROP_STRING("bootargs", GuestLoaderState, args),
|
DEFINE_PROP_STRING("bootargs", GuestLoaderState, args),
|
||||||
DEFINE_PROP_STRING("initrd", GuestLoaderState, initrd),
|
DEFINE_PROP_STRING("initrd", GuestLoaderState, initrd),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void guest_loader_class_init(ObjectClass *klass, void *data)
|
static void guest_loader_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -117,7 +117,6 @@ static const VMStateDescription vmstate_or_irq = {
|
||||||
|
|
||||||
static const Property or_irq_properties[] = {
|
static const Property or_irq_properties[] = {
|
||||||
DEFINE_PROP_UINT16("num-lines", OrIRQState, num_lines, 1),
|
DEFINE_PROP_UINT16("num-lines", OrIRQState, num_lines, 1),
|
||||||
DEFINE_PROP_END_OF_LIST(),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void or_irq_class_init(ObjectClass *klass, void *data)
|
static void or_irq_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -207,7 +207,6 @@ static void platform_bus_realize(DeviceState *dev, Error **errp)
|
||||||
static const Property platform_bus_properties[] = {
|
static const Property platform_bus_properties[] = {
|
||||||
DEFINE_PROP_UINT32("num_irqs", PlatformBusDevice, num_irqs, 0),
|
DEFINE_PROP_UINT32("num_irqs", PlatformBusDevice, num_irqs, 0),
|
||||||
DEFINE_PROP_UINT32("mmio_size", PlatformBusDevice, mmio_size, 0),
|
DEFINE_PROP_UINT32("mmio_size", PlatformBusDevice, mmio_size, 0),
|
||||||
DEFINE_PROP_END_OF_LIST()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static void platform_bus_class_init(ObjectClass *klass, void *data)
|
static void platform_bus_class_init(ObjectClass *klass, void *data)
|
||||||
|
|
|
@ -90,7 +90,7 @@ bool qdev_prop_sanitize_s390x_loadparm(uint8_t *loadparm, const char *str,
|
||||||
static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_drive(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
void **ptr = object_field_prop_ptr(obj, prop);
|
void **ptr = object_field_prop_ptr(obj, prop);
|
||||||
const char *value;
|
const char *value;
|
||||||
char *p;
|
char *p;
|
||||||
|
@ -116,7 +116,7 @@ static void set_drive_helper(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, bool iothread, Error **errp)
|
void *opaque, bool iothread, Error **errp)
|
||||||
{
|
{
|
||||||
DeviceState *dev = DEVICE(obj);
|
DeviceState *dev = DEVICE(obj);
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
void **ptr = object_field_prop_ptr(obj, prop);
|
void **ptr = object_field_prop_ptr(obj, prop);
|
||||||
char *str;
|
char *str;
|
||||||
BlockBackend *blk;
|
BlockBackend *blk;
|
||||||
|
@ -225,7 +225,7 @@ static void set_drive_iothread(Object *obj, Visitor *v, const char *name,
|
||||||
static void release_drive(Object *obj, const char *name, void *opaque)
|
static void release_drive(Object *obj, const char *name, void *opaque)
|
||||||
{
|
{
|
||||||
DeviceState *dev = DEVICE(obj);
|
DeviceState *dev = DEVICE(obj);
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
BlockBackend **ptr = object_field_prop_ptr(obj, prop);
|
BlockBackend **ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
if (*ptr) {
|
if (*ptr) {
|
||||||
|
@ -269,7 +269,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
ERRP_GUARD();
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
CharBackend *be = object_field_prop_ptr(obj, prop);
|
CharBackend *be = object_field_prop_ptr(obj, prop);
|
||||||
Chardev *s;
|
Chardev *s;
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -305,7 +305,7 @@ static void set_chr(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
|
|
||||||
static void release_chr(Object *obj, const char *name, void *opaque)
|
static void release_chr(Object *obj, const char *name, void *opaque)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
CharBackend *be = object_field_prop_ptr(obj, prop);
|
CharBackend *be = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
qemu_chr_fe_deinit(be, false);
|
qemu_chr_fe_deinit(be, false);
|
||||||
|
@ -329,7 +329,7 @@ const PropertyInfo qdev_prop_chr = {
|
||||||
static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
MACAddr *mac = object_field_prop_ptr(obj, prop);
|
MACAddr *mac = object_field_prop_ptr(obj, prop);
|
||||||
char buffer[2 * 6 + 5 + 1];
|
char buffer[2 * 6 + 5 + 1];
|
||||||
char *p = buffer;
|
char *p = buffer;
|
||||||
|
@ -344,7 +344,7 @@ static void get_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_mac(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
MACAddr *mac = object_field_prop_ptr(obj, prop);
|
MACAddr *mac = object_field_prop_ptr(obj, prop);
|
||||||
int i, pos;
|
int i, pos;
|
||||||
char *str;
|
char *str;
|
||||||
|
@ -406,7 +406,7 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name,
|
||||||
static void get_netdev(Object *obj, Visitor *v, const char *name,
|
static void get_netdev(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
|
NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
|
||||||
char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
|
char *p = g_strdup(peers_ptr->ncs[0] ? peers_ptr->ncs[0]->name : "");
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ static void get_netdev(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_netdev(Object *obj, Visitor *v, const char *name,
|
static void set_netdev(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
|
NICPeers *peers_ptr = object_field_prop_ptr(obj, prop);
|
||||||
NetClientState **ncs = peers_ptr->ncs;
|
NetClientState **ncs = peers_ptr->ncs;
|
||||||
NetClientState *peers[MAX_QUEUE_NUM];
|
NetClientState *peers[MAX_QUEUE_NUM];
|
||||||
|
@ -485,7 +485,7 @@ const PropertyInfo qdev_prop_netdev = {
|
||||||
static void get_audiodev(Object *obj, Visitor *v, const char* name,
|
static void get_audiodev(Object *obj, Visitor *v, const char* name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
|
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
|
||||||
char *p = g_strdup(audio_get_id(card));
|
char *p = g_strdup(audio_get_id(card));
|
||||||
|
|
||||||
|
@ -496,7 +496,7 @@ static void get_audiodev(Object *obj, Visitor *v, const char* name,
|
||||||
static void set_audiodev(Object *obj, Visitor *v, const char* name,
|
static void set_audiodev(Object *obj, Visitor *v, const char* name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
|
QEMUSoundCard *card = object_field_prop_ptr(obj, prop);
|
||||||
AudioState *state;
|
AudioState *state;
|
||||||
g_autofree char *str = NULL;
|
g_autofree char *str = NULL;
|
||||||
|
@ -578,7 +578,7 @@ static void qdev_propinfo_set_losttickpolicy(Object *obj, Visitor *v,
|
||||||
const char *name, void *opaque,
|
const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int *ptr = object_field_prop_ptr(obj, prop);
|
int *ptr = object_field_prop_ptr(obj, prop);
|
||||||
int value;
|
int value;
|
||||||
|
|
||||||
|
@ -614,7 +614,7 @@ const PropertyInfo qdev_prop_losttickpolicy = {
|
||||||
static void set_blocksize(Object *obj, Visitor *v, const char *name,
|
static void set_blocksize(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
|
@ -737,7 +737,7 @@ const PropertyInfo qdev_prop_zero_page_detection = {
|
||||||
static void get_reserved_region(Object *obj, Visitor *v, const char *name,
|
static void get_reserved_region(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
||||||
char buffer[64];
|
char buffer[64];
|
||||||
char *p = buffer;
|
char *p = buffer;
|
||||||
|
@ -753,7 +753,7 @@ static void get_reserved_region(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_reserved_region(Object *obj, Visitor *v, const char *name,
|
static void set_reserved_region(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
ReservedRegion *rr = object_field_prop_ptr(obj, prop);
|
||||||
const char *endptr;
|
const char *endptr;
|
||||||
uint64_t lob, upb;
|
uint64_t lob, upb;
|
||||||
|
@ -815,7 +815,7 @@ const PropertyInfo qdev_prop_reserved_region = {
|
||||||
static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
|
static void set_pci_devfn(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
g_autofree GenericAlternate *alt;
|
g_autofree GenericAlternate *alt;
|
||||||
int32_t value, *ptr = object_field_prop_ptr(obj, prop);
|
int32_t value, *ptr = object_field_prop_ptr(obj, prop);
|
||||||
unsigned int slot, fn, n;
|
unsigned int slot, fn, n;
|
||||||
|
@ -869,7 +869,7 @@ out:
|
||||||
visit_end_alternate(v, (void **) &alt);
|
visit_end_alternate(v, (void **) &alt);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int print_pci_devfn(Object *obj, Property *prop, char *dest,
|
static int print_pci_devfn(Object *obj, const Property *prop, char *dest,
|
||||||
size_t len)
|
size_t len)
|
||||||
{
|
{
|
||||||
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
@ -895,7 +895,7 @@ const PropertyInfo qdev_prop_pci_devfn = {
|
||||||
static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
|
PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
|
||||||
char buffer[] = "ffff:ff:ff.f";
|
char buffer[] = "ffff:ff:ff.f";
|
||||||
char *p = buffer;
|
char *p = buffer;
|
||||||
|
@ -921,7 +921,7 @@ static void get_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
static void set_pci_host_devaddr(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
|
PCIHostDeviceAddress *addr = object_field_prop_ptr(obj, prop);
|
||||||
char *str, *p;
|
char *str, *p;
|
||||||
char *e;
|
char *e;
|
||||||
|
@ -1011,7 +1011,7 @@ const PropertyInfo qdev_prop_off_auto_pcibar = {
|
||||||
static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
|
static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
|
PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
|
||||||
int speed;
|
int speed;
|
||||||
|
|
||||||
|
@ -1045,7 +1045,7 @@ static void get_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
|
static void set_prop_pcielinkspeed(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
|
PCIExpLinkSpeed *p = object_field_prop_ptr(obj, prop);
|
||||||
int speed;
|
int speed;
|
||||||
|
|
||||||
|
@ -1093,7 +1093,7 @@ const PropertyInfo qdev_prop_pcie_link_speed = {
|
||||||
static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
|
static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
|
PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
|
@ -1130,7 +1130,7 @@ static void get_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
|
static void set_prop_pcielinkwidth(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
|
PCIExpLinkWidth *p = object_field_prop_ptr(obj, prop);
|
||||||
int width;
|
int width;
|
||||||
|
|
||||||
|
@ -1181,7 +1181,7 @@ const PropertyInfo qdev_prop_pcie_link_width = {
|
||||||
static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
QemuUUID *uuid = object_field_prop_ptr(obj, prop);
|
QemuUUID *uuid = object_field_prop_ptr(obj, prop);
|
||||||
char buffer[UUID_STR_LEN];
|
char buffer[UUID_STR_LEN];
|
||||||
char *p = buffer;
|
char *p = buffer;
|
||||||
|
@ -1196,7 +1196,7 @@ static void get_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_uuid(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
QemuUUID *uuid = object_field_prop_ptr(obj, prop);
|
QemuUUID *uuid = object_field_prop_ptr(obj, prop);
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
|
|
@ -51,7 +51,7 @@ void qdev_prop_allow_set_link_before_realize(const Object *obj,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void *object_field_prop_ptr(Object *obj, Property *prop)
|
void *object_field_prop_ptr(Object *obj, const Property *prop)
|
||||||
{
|
{
|
||||||
void *ptr = obj;
|
void *ptr = obj;
|
||||||
ptr += prop->offset;
|
ptr += prop->offset;
|
||||||
|
@ -61,7 +61,7 @@ void *object_field_prop_ptr(Object *obj, Property *prop)
|
||||||
static void field_prop_get(Object *obj, Visitor *v, const char *name,
|
static void field_prop_get(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
return prop->info->get(obj, v, name, opaque, errp);
|
return prop->info->get(obj, v, name, opaque, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ static ObjectPropertyAccessor *field_prop_getter(const PropertyInfo *info)
|
||||||
static void field_prop_set(Object *obj, Visitor *v, const char *name,
|
static void field_prop_set(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
|
|
||||||
if (!qdev_prop_allow_set(obj, name, prop->info, errp)) {
|
if (!qdev_prop_allow_set(obj, name, prop->info, errp)) {
|
||||||
return;
|
return;
|
||||||
|
@ -100,7 +100,7 @@ static ObjectPropertyAccessor *field_prop_setter(const PropertyInfo *info)
|
||||||
void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
|
void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int *ptr = object_field_prop_ptr(obj, prop);
|
int *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
|
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
|
||||||
|
@ -109,7 +109,7 @@ void qdev_propinfo_get_enum(Object *obj, Visitor *v, const char *name,
|
||||||
void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
|
void qdev_propinfo_set_enum(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int *ptr = object_field_prop_ptr(obj, prop);
|
int *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
|
visit_type_enum(v, name, ptr, prop->info->enum_table, errp);
|
||||||
|
@ -131,13 +131,13 @@ const PropertyInfo qdev_prop_enum = {
|
||||||
|
|
||||||
/* Bit */
|
/* Bit */
|
||||||
|
|
||||||
static uint32_t qdev_get_prop_mask(Property *prop)
|
static uint32_t qdev_get_prop_mask(const Property *prop)
|
||||||
{
|
{
|
||||||
assert(prop->info == &qdev_prop_bit);
|
assert(prop->info == &qdev_prop_bit);
|
||||||
return 0x1 << prop->bitnr;
|
return 0x1 << prop->bitnr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bit_prop_set(Object *obj, Property *props, bool val)
|
static void bit_prop_set(Object *obj, const Property *props, bool val)
|
||||||
{
|
{
|
||||||
uint32_t *p = object_field_prop_ptr(obj, props);
|
uint32_t *p = object_field_prop_ptr(obj, props);
|
||||||
uint32_t mask = qdev_get_prop_mask(props);
|
uint32_t mask = qdev_get_prop_mask(props);
|
||||||
|
@ -151,7 +151,7 @@ static void bit_prop_set(Object *obj, Property *props, bool val)
|
||||||
static void prop_get_bit(Object *obj, Visitor *v, const char *name,
|
static void prop_get_bit(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *p = object_field_prop_ptr(obj, prop);
|
uint32_t *p = object_field_prop_ptr(obj, prop);
|
||||||
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
|
bool value = (*p & qdev_get_prop_mask(prop)) != 0;
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ static void prop_get_bit(Object *obj, Visitor *v, const char *name,
|
||||||
static void prop_set_bit(Object *obj, Visitor *v, const char *name,
|
static void prop_set_bit(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
bool value;
|
bool value;
|
||||||
|
|
||||||
if (!visit_type_bool(v, name, &value, errp)) {
|
if (!visit_type_bool(v, name, &value, errp)) {
|
||||||
|
@ -185,13 +185,13 @@ const PropertyInfo qdev_prop_bit = {
|
||||||
|
|
||||||
/* Bit64 */
|
/* Bit64 */
|
||||||
|
|
||||||
static uint64_t qdev_get_prop_mask64(Property *prop)
|
static uint64_t qdev_get_prop_mask64(const Property *prop)
|
||||||
{
|
{
|
||||||
assert(prop->info == &qdev_prop_bit64);
|
assert(prop->info == &qdev_prop_bit64);
|
||||||
return 0x1ull << prop->bitnr;
|
return 0x1ull << prop->bitnr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bit64_prop_set(Object *obj, Property *props, bool val)
|
static void bit64_prop_set(Object *obj, const Property *props, bool val)
|
||||||
{
|
{
|
||||||
uint64_t *p = object_field_prop_ptr(obj, props);
|
uint64_t *p = object_field_prop_ptr(obj, props);
|
||||||
uint64_t mask = qdev_get_prop_mask64(props);
|
uint64_t mask = qdev_get_prop_mask64(props);
|
||||||
|
@ -205,7 +205,7 @@ static void bit64_prop_set(Object *obj, Property *props, bool val)
|
||||||
static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
|
static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *p = object_field_prop_ptr(obj, prop);
|
uint64_t *p = object_field_prop_ptr(obj, prop);
|
||||||
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
|
bool value = (*p & qdev_get_prop_mask64(prop)) != 0;
|
||||||
|
|
||||||
|
@ -215,7 +215,7 @@ static void prop_get_bit64(Object *obj, Visitor *v, const char *name,
|
||||||
static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
|
static void prop_set_bit64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
bool value;
|
bool value;
|
||||||
|
|
||||||
if (!visit_type_bool(v, name, &value, errp)) {
|
if (!visit_type_bool(v, name, &value, errp)) {
|
||||||
|
@ -237,7 +237,7 @@ const PropertyInfo qdev_prop_bit64 = {
|
||||||
static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
bool *ptr = object_field_prop_ptr(obj, prop);
|
bool *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_bool(v, name, ptr, errp);
|
visit_type_bool(v, name, ptr, errp);
|
||||||
|
@ -246,7 +246,7 @@ static void get_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_bool(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
bool *ptr = object_field_prop_ptr(obj, prop);
|
bool *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_bool(v, name, ptr, errp);
|
visit_type_bool(v, name, ptr, errp);
|
||||||
|
@ -264,7 +264,7 @@ const PropertyInfo qdev_prop_bool = {
|
||||||
static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint8_t *ptr = object_field_prop_ptr(obj, prop);
|
uint8_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint8(v, name, ptr, errp);
|
visit_type_uint8(v, name, ptr, errp);
|
||||||
|
@ -273,7 +273,7 @@ static void get_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_uint8(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint8_t *ptr = object_field_prop_ptr(obj, prop);
|
uint8_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint8(v, name, ptr, errp);
|
visit_type_uint8(v, name, ptr, errp);
|
||||||
|
@ -303,7 +303,7 @@ const PropertyInfo qdev_prop_uint8 = {
|
||||||
static void get_uint16(Object *obj, Visitor *v, const char *name,
|
static void get_uint16(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint16_t *ptr = object_field_prop_ptr(obj, prop);
|
uint16_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint16(v, name, ptr, errp);
|
visit_type_uint16(v, name, ptr, errp);
|
||||||
|
@ -312,7 +312,7 @@ static void get_uint16(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_uint16(Object *obj, Visitor *v, const char *name,
|
static void set_uint16(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint16_t *ptr = object_field_prop_ptr(obj, prop);
|
uint16_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint16(v, name, ptr, errp);
|
visit_type_uint16(v, name, ptr, errp);
|
||||||
|
@ -330,7 +330,7 @@ const PropertyInfo qdev_prop_uint16 = {
|
||||||
static void get_uint32(Object *obj, Visitor *v, const char *name,
|
static void get_uint32(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint32(v, name, ptr, errp);
|
visit_type_uint32(v, name, ptr, errp);
|
||||||
|
@ -339,7 +339,7 @@ static void get_uint32(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_uint32(Object *obj, Visitor *v, const char *name,
|
static void set_uint32(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint32(v, name, ptr, errp);
|
visit_type_uint32(v, name, ptr, errp);
|
||||||
|
@ -348,7 +348,7 @@ static void set_uint32(Object *obj, Visitor *v, const char *name,
|
||||||
void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
|
void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_int32(v, name, ptr, errp);
|
visit_type_int32(v, name, ptr, errp);
|
||||||
|
@ -357,7 +357,7 @@ void qdev_propinfo_get_int32(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_int32(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
int32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_int32(v, name, ptr, errp);
|
visit_type_int32(v, name, ptr, errp);
|
||||||
|
@ -382,7 +382,7 @@ const PropertyInfo qdev_prop_int32 = {
|
||||||
static void get_uint64(Object *obj, Visitor *v, const char *name,
|
static void get_uint64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint64(v, name, ptr, errp);
|
visit_type_uint64(v, name, ptr, errp);
|
||||||
|
@ -391,7 +391,7 @@ static void get_uint64(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_uint64(Object *obj, Visitor *v, const char *name,
|
static void set_uint64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint64(v, name, ptr, errp);
|
visit_type_uint64(v, name, ptr, errp);
|
||||||
|
@ -400,7 +400,7 @@ static void set_uint64(Object *obj, Visitor *v, const char *name,
|
||||||
static void get_int64(Object *obj, Visitor *v, const char *name,
|
static void get_int64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int64_t *ptr = object_field_prop_ptr(obj, prop);
|
int64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_int64(v, name, ptr, errp);
|
visit_type_int64(v, name, ptr, errp);
|
||||||
|
@ -409,7 +409,7 @@ static void get_int64(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_int64(Object *obj, Visitor *v, const char *name,
|
static void set_int64(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
int64_t *ptr = object_field_prop_ptr(obj, prop);
|
int64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_int64(v, name, ptr, errp);
|
visit_type_int64(v, name, ptr, errp);
|
||||||
|
@ -432,7 +432,7 @@ const PropertyInfo qdev_prop_int64 = {
|
||||||
static void set_uint64_checkmask(Object *obj, Visitor *v, const char *name,
|
static void set_uint64_checkmask(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_uint64(v, name, ptr, errp);
|
visit_type_uint64(v, name, ptr, errp);
|
||||||
|
@ -452,14 +452,14 @@ const PropertyInfo qdev_prop_uint64_checkmask = {
|
||||||
|
|
||||||
static void release_string(Object *obj, const char *name, void *opaque)
|
static void release_string(Object *obj, const char *name, void *opaque)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
g_free(*(char **)object_field_prop_ptr(obj, prop));
|
g_free(*(char **)object_field_prop_ptr(obj, prop));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_string(Object *obj, Visitor *v, const char *name,
|
static void get_string(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
char **ptr = object_field_prop_ptr(obj, prop);
|
char **ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
if (!*ptr) {
|
if (!*ptr) {
|
||||||
|
@ -473,7 +473,7 @@ static void get_string(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_string(Object *obj, Visitor *v, const char *name,
|
static void set_string(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
char **ptr = object_field_prop_ptr(obj, prop);
|
char **ptr = object_field_prop_ptr(obj, prop);
|
||||||
char *str;
|
char *str;
|
||||||
|
|
||||||
|
@ -507,7 +507,7 @@ const PropertyInfo qdev_prop_on_off_auto = {
|
||||||
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
|
void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
uint64_t value = *ptr;
|
uint64_t value = *ptr;
|
||||||
|
|
||||||
|
@ -517,7 +517,7 @@ void qdev_propinfo_get_size32(Object *obj, Visitor *v, const char *name,
|
||||||
static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_size32(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
uint32_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
uint64_t value;
|
uint64_t value;
|
||||||
|
|
||||||
|
@ -557,7 +557,7 @@ struct ArrayElementList {
|
||||||
* specific element of the array. Arrays are backed by an uint32_t length field
|
* specific element of the array. Arrays are backed by an uint32_t length field
|
||||||
* and an element array. @elem points at an element in this element array.
|
* and an element array. @elem points at an element in this element array.
|
||||||
*/
|
*/
|
||||||
static Property array_elem_prop(Object *obj, Property *parent_prop,
|
static Property array_elem_prop(Object *obj, const Property *parent_prop,
|
||||||
const char *name, char *elem)
|
const char *name, char *elem)
|
||||||
{
|
{
|
||||||
return (Property) {
|
return (Property) {
|
||||||
|
@ -582,7 +582,7 @@ static Property array_elem_prop(Object *obj, Property *parent_prop,
|
||||||
*/
|
*/
|
||||||
static void release_prop_array(Object *obj, const char *name, void *opaque)
|
static void release_prop_array(Object *obj, const char *name, void *opaque)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
||||||
void **arrayptr = (void *)obj + prop->arrayoffset;
|
void **arrayptr = (void *)obj + prop->arrayoffset;
|
||||||
char *elem = *arrayptr;
|
char *elem = *arrayptr;
|
||||||
|
@ -609,7 +609,7 @@ static void set_prop_array(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
ERRP_GUARD();
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
||||||
void **arrayptr = (void *)obj + prop->arrayoffset;
|
void **arrayptr = (void *)obj + prop->arrayoffset;
|
||||||
ArrayElementList *list, *elem, *next;
|
ArrayElementList *list, *elem, *next;
|
||||||
|
@ -685,7 +685,7 @@ static void get_prop_array(Object *obj, Visitor *v, const char *name,
|
||||||
void *opaque, Error **errp)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
ERRP_GUARD();
|
ERRP_GUARD();
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
uint32_t *alenptr = object_field_prop_ptr(obj, prop);
|
||||||
void **arrayptr = (void *)obj + prop->arrayoffset;
|
void **arrayptr = (void *)obj + prop->arrayoffset;
|
||||||
char *elemptr = *arrayptr;
|
char *elemptr = *arrayptr;
|
||||||
|
@ -749,16 +749,13 @@ const PropertyInfo qdev_prop_array = {
|
||||||
|
|
||||||
/* --- public helpers --- */
|
/* --- public helpers --- */
|
||||||
|
|
||||||
static const Property *qdev_prop_walk(const Property *props, const char *name)
|
static const Property *qdev_prop_walk(DeviceClass *cls, const char *name)
|
||||||
{
|
{
|
||||||
if (!props) {
|
for (int i = 0, n = cls->props_count_; i < n; ++i) {
|
||||||
return NULL;
|
const Property *prop = &cls->props_[i];
|
||||||
}
|
if (strcmp(prop->name, name) == 0) {
|
||||||
while (props->name) {
|
return prop;
|
||||||
if (strcmp(props->name, name) == 0) {
|
|
||||||
return props;
|
|
||||||
}
|
}
|
||||||
props++;
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -771,7 +768,7 @@ static const Property *qdev_prop_find(DeviceState *dev, const char *name)
|
||||||
/* device properties */
|
/* device properties */
|
||||||
class = object_get_class(OBJECT(dev));
|
class = object_get_class(OBJECT(dev));
|
||||||
do {
|
do {
|
||||||
prop = qdev_prop_walk(DEVICE_CLASS(class)->props_, name);
|
prop = qdev_prop_walk(DEVICE_CLASS(class), name);
|
||||||
if (prop) {
|
if (prop) {
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
@ -931,7 +928,7 @@ void qdev_prop_set_globals(DeviceState *dev)
|
||||||
static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_size(v, name, ptr, errp);
|
visit_type_size(v, name, ptr, errp);
|
||||||
|
@ -940,7 +937,7 @@ static void get_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
static void set_size(Object *obj, Visitor *v, const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
uint64_t *ptr = object_field_prop_ptr(obj, prop);
|
||||||
|
|
||||||
visit_type_size(v, name, ptr, errp);
|
visit_type_size(v, name, ptr, errp);
|
||||||
|
@ -1023,7 +1020,7 @@ static void qdev_get_legacy_property(Object *obj, Visitor *v,
|
||||||
const char *name, void *opaque,
|
const char *name, void *opaque,
|
||||||
Error **errp)
|
Error **errp)
|
||||||
{
|
{
|
||||||
Property *prop = opaque;
|
const Property *prop = opaque;
|
||||||
|
|
||||||
char buffer[1024];
|
char buffer[1024];
|
||||||
char *ptr = buffer;
|
char *ptr = buffer;
|
||||||
|
@ -1061,12 +1058,18 @@ static void qdev_class_add_legacy_property(DeviceClass *dc, const Property *prop
|
||||||
NULL, NULL, (Property *)prop);
|
NULL, NULL, (Property *)prop);
|
||||||
}
|
}
|
||||||
|
|
||||||
void device_class_set_props(DeviceClass *dc, const Property *props)
|
void device_class_set_props_n(DeviceClass *dc, const Property *props, size_t n)
|
||||||
{
|
{
|
||||||
const Property *prop;
|
/* We used a hole in DeviceClass because that's still a lot. */
|
||||||
|
assert(n <= UINT16_MAX);
|
||||||
|
assert(n != 0);
|
||||||
|
|
||||||
dc->props_ = props;
|
dc->props_ = props;
|
||||||
for (prop = props; prop && prop->name; prop++) {
|
dc->props_count_ = n;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < n; ++i) {
|
||||||
|
const Property *prop = &props[i];
|
||||||
|
assert(prop->name);
|
||||||
qdev_class_add_legacy_property(dc, prop);
|
qdev_class_add_legacy_property(dc, prop);
|
||||||
qdev_class_add_property(dc, prop->name, prop);
|
qdev_class_add_property(dc, prop->name, prop);
|
||||||
}
|
}
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue