mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-target-arm-20240913' of https://git.linaro.org/people/pmaydell/qemu-arm into staging
target-arm queue: * s390: convert s390 virtio-ccw and CPU to three-phase reset * reset: remove now-unused device_class_set_parent_reset() * reset: introduce device_class_set_legacy_reset() * reset: remove unneeded transitional machinery * kvm: Use 'unsigned long' for request argument in functions wrapping ioctl() * hvf: arm: Implement and use hvf_get_physical_address_range so VMs can have larger-than-36-bit IPA spaces when the host supports this * target/arm/tcg: refine cache descriptions with a wrapper * hw/net/can/xlnx-versal-canfd: fix various bugs * MAINTAINERS: update versal, CAN maintainer entries * hw/intc/arm_gic: fix spurious level triggered interrupts # -----BEGIN PGP SIGNATURE----- # # iQJNBAABCAA3FiEE4aXFk81BneKOgxXPPCUl7RQ2DN4FAmbkVokZHHBldGVyLm1h # eWRlbGxAbGluYXJvLm9yZwAKCRA8JSXtFDYM3pR5D/0ZJzJi7C0HIa4KYuBkcpZQ # M3iUa1uiZoCniXlWuKFt2rUBrmhbW30YHw5gQjnxoUO4VVqREkFi3e5nzUKRQmvP # FRm8dnuC36qwQJFhm+rQqUb8/AyqrVFnIaHhn7dBKLwRFm9+kbZ0v9x1Eq1DZk3S # mijBQRiOjrj+FRkmyNJLhylGpm+p9VRdnBjmUtN2Yw+2fPkHmUURRSUvhwCK4BB5 # AvKgMC0EIIsLJKLfrWzk/EsYC8ogrGitISzFt8iWLAqxuxtuhv1StstleD4mZMK8 # gH+ZH5tsls2IiTIKkHfcbUcA55efDrQHGDat7n1Q0EWqOjET0soES+GpS0Jj6IXK # uOnsDZ7MLFU/SbpckicLQ/JwNi3HiIfQgBVB2aJZ+cg8CGqaQCI5ZvWs7XFpUgkb # naA4IR5mdNgXJm7ttBKbWarPNcmdODqa/5YDjXdyHmMx3JD994k1y5LIi3o69TgI # rgHzU8ChZqaBDEvNa5KGtadQPnaSBP15Yqbp5rn2knVRKjDdyCdB94aWO5tZkmaO # ARFmNk6h5bhwXdXl2Hu67RS2Kd0/fHMFWsxyHAX4NYT+Vq+ZTjLdaPzwFdfA0yAz # wXWn0EAeYQ5M2xOPfDM/JYSc1THSzhpwy/CBrRjrCRZMDE+bx9BRC7pUXwquE8xF # CW1NUxkvZikQeiMzgEBbTA== # =u6u8 # -----END PGP SIGNATURE----- # gpg: Signature made Fri 13 Sep 2024 16:13:13 BST # gpg: using RSA key E1A5C593CD419DE28E8315CF3C2525ED14360CDE # gpg: issuer "peter.maydell@linaro.org" # gpg: Good signature from "Peter Maydell <peter.maydell@linaro.org>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@gmail.com>" [ultimate] # gpg: aka "Peter Maydell <pmaydell@chiark.greenend.org.uk>" [ultimate] # gpg: aka "Peter Maydell <peter@archaic.org.uk>" [ultimate] # Primary key fingerprint: E1A5 C593 CD41 9DE2 8E83 15CF 3C25 25ED 1436 0CDE * tag 'pull-target-arm-20240913' of https://git.linaro.org/people/pmaydell/qemu-arm: (27 commits) hw/intc/arm_gic: fix spurious level triggered interrupts MAINTAINERS: Add my-self as CAN maintainer MAINTAINERS: Update Xilinx Versal OSPI maintainer's email address MAINTAINERS: Remove Vikram Garhwal as maintainer hw/net/can/xlnx-versal-canfd: Fix FIFO issues hw/net/can/xlnx-versal-canfd: Simplify DLC conversions hw/net/can/xlnx-versal-canfd: Fix byte ordering hw/net/can/xlnx-versal-canfd: Handle flags correctly hw/net/can/xlnx-versal-canfd: Translate CAN ID registers hw/net/can/xlnx-versal-canfd: Fix CAN FD flag check hw/net/can/xlnx-versal-canfd: Fix interrupt level target/arm/tcg: refine cache descriptions with a wrapper hvf: arm: Implement and use hvf_get_physical_address_range hvf: Split up hv_vm_create logic per arch hw/boards: Add hvf_get_physical_address_range to MachineClass kvm: Use 'unsigned long' for request argument in functions wrapping ioctl() hw/core/resettable: Remove transitional_function machinery hw/core/qdev: Simplify legacy_reset handling hw: Remove device_phases_reset() hw: Rename DeviceClass::reset field to legacy_reset ... Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
+2
-3
@@ -1058,7 +1058,7 @@ F: include/hw/display/dpcd.h
|
||||
F: docs/system/arm/xlnx-versal-virt.rst
|
||||
|
||||
Xilinx Versal OSPI
|
||||
M: Francisco Iglesias <francisco.iglesias@xilinx.com>
|
||||
M: Francisco Iglesias <francisco.iglesias@amd.com>
|
||||
S: Maintained
|
||||
F: hw/ssi/xlnx-versal-ospi.c
|
||||
F: include/hw/ssi/xlnx-versal-ospi.h
|
||||
@@ -1951,7 +1951,6 @@ F: tests/qtest/intel-hda-test.c
|
||||
F: tests/qtest/fuzz-sb16-test.c
|
||||
|
||||
Xilinx CAN
|
||||
M: Vikram Garhwal <vikram.garhwal@amd.com>
|
||||
M: Francisco Iglesias <francisco.iglesias@amd.com>
|
||||
S: Maintained
|
||||
F: hw/net/can/xlnx-*
|
||||
@@ -2708,7 +2707,7 @@ F: include/hw/rx/
|
||||
|
||||
CAN bus subsystem and hardware
|
||||
M: Pavel Pisa <pisa@cmp.felk.cvut.cz>
|
||||
M: Vikram Garhwal <fnu.vikram@xilinx.com>
|
||||
M: Francisco Iglesias <francisco.iglesias@amd.com>
|
||||
S: Maintained
|
||||
W: https://canbus.pages.fel.cvut.cz/
|
||||
F: net/can/*
|
||||
|
||||
@@ -53,6 +53,7 @@
|
||||
#include "exec/address-spaces.h"
|
||||
#include "exec/exec-all.h"
|
||||
#include "gdbstub/enums.h"
|
||||
#include "hw/boards.h"
|
||||
#include "sysemu/cpus.h"
|
||||
#include "sysemu/hvf.h"
|
||||
#include "sysemu/hvf_int.h"
|
||||
@@ -61,10 +62,6 @@
|
||||
|
||||
HVFState *hvf_state;
|
||||
|
||||
#ifdef __aarch64__
|
||||
#define HV_VM_DEFAULT NULL
|
||||
#endif
|
||||
|
||||
/* Memory slots */
|
||||
|
||||
hvf_slot *hvf_find_overlap_slot(uint64_t start, uint64_t size)
|
||||
@@ -323,8 +320,17 @@ static int hvf_accel_init(MachineState *ms)
|
||||
int x;
|
||||
hv_return_t ret;
|
||||
HVFState *s;
|
||||
int pa_range = 36;
|
||||
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||
|
||||
ret = hv_vm_create(HV_VM_DEFAULT);
|
||||
if (mc->hvf_get_physical_address_range) {
|
||||
pa_range = mc->hvf_get_physical_address_range(ms);
|
||||
if (pa_range < 0) {
|
||||
return -EINVAL;
|
||||
}
|
||||
}
|
||||
|
||||
ret = hvf_arch_vm_create(ms, (uint32_t)pa_range);
|
||||
assert_hvf_ok(ret);
|
||||
|
||||
s = g_new0(HVFState, 1);
|
||||
|
||||
+4
-4
@@ -3170,7 +3170,7 @@ int kvm_cpu_exec(CPUState *cpu)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int kvm_ioctl(KVMState *s, int type, ...)
|
||||
int kvm_ioctl(KVMState *s, unsigned long type, ...)
|
||||
{
|
||||
int ret;
|
||||
void *arg;
|
||||
@@ -3188,7 +3188,7 @@ int kvm_ioctl(KVMState *s, int type, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int kvm_vm_ioctl(KVMState *s, int type, ...)
|
||||
int kvm_vm_ioctl(KVMState *s, unsigned long type, ...)
|
||||
{
|
||||
int ret;
|
||||
void *arg;
|
||||
@@ -3208,7 +3208,7 @@ int kvm_vm_ioctl(KVMState *s, int type, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int kvm_vcpu_ioctl(CPUState *cpu, int type, ...)
|
||||
int kvm_vcpu_ioctl(CPUState *cpu, unsigned long type, ...)
|
||||
{
|
||||
int ret;
|
||||
void *arg;
|
||||
@@ -3228,7 +3228,7 @@ int kvm_vcpu_ioctl(CPUState *cpu, int type, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int kvm_device_ioctl(int fd, int type, ...)
|
||||
int kvm_device_ioctl(int fd, unsigned long type, ...)
|
||||
{
|
||||
int ret;
|
||||
void *arg;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
# See docs/devel/tracing.rst for syntax documentation.
|
||||
|
||||
# kvm-all.c
|
||||
kvm_ioctl(int type, void *arg) "type 0x%x, arg %p"
|
||||
kvm_vm_ioctl(int type, void *arg) "type 0x%x, arg %p"
|
||||
kvm_vcpu_ioctl(int cpu_index, int type, void *arg) "cpu_index %d, type 0x%x, arg %p"
|
||||
kvm_ioctl(unsigned long type, void *arg) "type 0x%lx, arg %p"
|
||||
kvm_vm_ioctl(unsigned long type, void *arg) "type 0x%lx, arg %p"
|
||||
kvm_vcpu_ioctl(int cpu_index, unsigned long type, void *arg) "cpu_index %d, type 0x%lx, arg %p"
|
||||
kvm_run_exit(int cpu_index, uint32_t reason) "cpu_index %d, reason %d"
|
||||
kvm_device_ioctl(int fd, int type, void *arg) "dev fd %d, type 0x%x, arg %p"
|
||||
kvm_device_ioctl(int fd, unsigned long type, void *arg) "dev fd %d, type 0x%lx, arg %p"
|
||||
kvm_failed_reg_get(uint64_t id, const char *msg) "Warning: Unable to retrieve ONEREG %" PRIu64 " from KVM: %s"
|
||||
kvm_failed_reg_set(uint64_t id, const char *msg) "Warning: Unable to set ONEREG %" PRIu64 " to KVM: %s"
|
||||
kvm_init_vcpu(int cpu_index, unsigned long arch_cpu_id) "index: %d id: %lu"
|
||||
|
||||
@@ -44,6 +44,16 @@ The Resettable interface handles reset types with an enum ``ResetType``:
|
||||
value on each cold reset, such as RNG seed information, and which they
|
||||
must not reinitialize on a snapshot-load reset.
|
||||
|
||||
``RESET_TYPE_S390_CPU_NORMAL``
|
||||
This is only used for S390 CPU objects; it clears interrupts, stops
|
||||
processing, and clears the TLB, but does not touch register contents.
|
||||
|
||||
``RESET_TYPE_S390_CPU_INITIAL``
|
||||
This is only used for S390 CPU objects; it does everything
|
||||
``RESET_TYPE_S390_CPU_NORMAL`` does and also clears the PSW, prefix,
|
||||
FPC, timer and control registers. It does not touch gprs, fprs or acrs.
|
||||
|
||||
|
||||
Devices which implement reset methods must treat any unknown ``ResetType``
|
||||
as equivalent to ``RESET_TYPE_COLD``; this will reduce the amount of
|
||||
existing code we need to change if we add more types in future.
|
||||
|
||||
+1
-1
@@ -1030,7 +1030,7 @@ static void erst_class_init(ObjectClass *klass, void *data)
|
||||
k->device_id = PCI_DEVICE_ID_REDHAT_ACPI_ERST;
|
||||
k->revision = 0x00;
|
||||
k->class_id = PCI_CLASS_OTHERS;
|
||||
dc->reset = erst_reset;
|
||||
device_class_set_legacy_reset(dc, erst_reset);
|
||||
dc->vmsd = &erst_vmstate;
|
||||
dc->user_creatable = true;
|
||||
dc->hotpluggable = false;
|
||||
|
||||
+1
-1
@@ -633,7 +633,7 @@ static void piix4_pm_class_init(ObjectClass *klass, void *data)
|
||||
k->device_id = PCI_DEVICE_ID_INTEL_82371AB_3;
|
||||
k->revision = 0x03;
|
||||
k->class_id = PCI_CLASS_BRIDGE_OTHER;
|
||||
dc->reset = piix4_pm_reset;
|
||||
device_class_set_legacy_reset(dc, piix4_pm_reset);
|
||||
dc->desc = "PM";
|
||||
dc->vmsd = &vmstate_acpi;
|
||||
device_class_set_props(dc, piix4_pm_properties);
|
||||
|
||||
+1
-1
@@ -297,7 +297,7 @@ static void aspeed_adc_engine_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->realize = aspeed_adc_engine_realize;
|
||||
dc->reset = aspeed_adc_engine_reset;
|
||||
device_class_set_legacy_reset(dc, aspeed_adc_engine_reset);
|
||||
device_class_set_props(dc, aspeed_adc_engine_properties);
|
||||
dc->desc = "Aspeed Analog-to-Digital Engine";
|
||||
dc->vmsd = &vmstate_aspeed_adc_engine;
|
||||
|
||||
+1
-1
@@ -183,7 +183,7 @@ static void max111x_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
k->transfer = max111x_transfer;
|
||||
dc->reset = max111x_reset;
|
||||
device_class_set_legacy_reset(dc, max111x_reset);
|
||||
dc->vmsd = &vmstate_max111x;
|
||||
set_bit(DEVICE_CATEGORY_MISC, dc->categories);
|
||||
}
|
||||
|
||||
@@ -288,7 +288,7 @@ static void stm32f2xx_adc_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = stm32f2xx_adc_reset;
|
||||
device_class_set_legacy_reset(dc, stm32f2xx_adc_reset);
|
||||
dc->vmsd = &vmstate_stm32f2xx_adc;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -286,7 +286,7 @@ static void zynq_xadc_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->vmsd = &vmstate_zynq_xadc;
|
||||
dc->reset = zynq_xadc_reset;
|
||||
device_class_set_legacy_reset(dc, zynq_xadc_reset);
|
||||
}
|
||||
|
||||
static const TypeInfo zynq_xadc_info = {
|
||||
|
||||
+1
-1
@@ -1700,7 +1700,7 @@ static void armsse_class_init(ObjectClass *klass, void *data)
|
||||
dc->realize = armsse_realize;
|
||||
dc->vmsd = &armsse_vmstate;
|
||||
device_class_set_props(dc, info->props);
|
||||
dc->reset = armsse_reset;
|
||||
device_class_set_legacy_reset(dc, armsse_reset);
|
||||
iic->check = armsse_idau_check;
|
||||
asc->info = info;
|
||||
}
|
||||
|
||||
+1
-1
@@ -145,7 +145,7 @@ static void highbank_regs_class_init(ObjectClass *klass, void *data)
|
||||
|
||||
dc->desc = "Calxeda Highbank registers";
|
||||
dc->vmsd = &vmstate_highbank_regs;
|
||||
dc->reset = highbank_regs_reset;
|
||||
device_class_set_legacy_reset(dc, highbank_regs_reset);
|
||||
}
|
||||
|
||||
static const TypeInfo highbank_regs_info = {
|
||||
|
||||
+3
-3
@@ -411,7 +411,7 @@ static void mv88w8618_pic_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = mv88w8618_pic_reset;
|
||||
device_class_set_legacy_reset(dc, mv88w8618_pic_reset);
|
||||
dc->vmsd = &mv88w8618_pic_vmsd;
|
||||
}
|
||||
|
||||
@@ -605,7 +605,7 @@ static void mv88w8618_pit_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = mv88w8618_pit_reset;
|
||||
device_class_set_legacy_reset(dc, mv88w8618_pit_reset);
|
||||
dc->vmsd = &mv88w8618_pit_vmsd;
|
||||
}
|
||||
|
||||
@@ -1030,7 +1030,7 @@ static void musicpal_gpio_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = musicpal_gpio_reset;
|
||||
device_class_set_legacy_reset(dc, musicpal_gpio_reset);
|
||||
dc->vmsd = &musicpal_gpio_vmsd;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -2051,7 +2051,7 @@ static void pxa2xx_fir_class_init(ObjectClass *klass, void *data)
|
||||
dc->realize = pxa2xx_fir_realize;
|
||||
dc->vmsd = &pxa2xx_fir_vmsd;
|
||||
device_class_set_props(dc, pxa2xx_fir_properties);
|
||||
dc->reset = pxa2xx_fir_reset;
|
||||
device_class_set_legacy_reset(dc, pxa2xx_fir_reset);
|
||||
}
|
||||
|
||||
static const TypeInfo pxa2xx_fir_info = {
|
||||
@@ -2369,7 +2369,7 @@ static void pxa2xx_ssp_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = pxa2xx_ssp_reset;
|
||||
device_class_set_legacy_reset(dc, pxa2xx_ssp_reset);
|
||||
dc->vmsd = &vmstate_pxa2xx_ssp;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -1342,7 +1342,7 @@ static void strongarm_uart_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->desc = "StrongARM UART controller";
|
||||
dc->reset = strongarm_uart_reset;
|
||||
device_class_set_legacy_reset(dc, strongarm_uart_reset);
|
||||
dc->vmsd = &vmstate_strongarm_uart_regs;
|
||||
device_class_set_props(dc, strongarm_uart_properties);
|
||||
dc->realize = strongarm_uart_realize;
|
||||
@@ -1595,7 +1595,7 @@ static void strongarm_ssp_class_init(ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->desc = "StrongARM SSP controller";
|
||||
dc->reset = strongarm_ssp_reset;
|
||||
device_class_set_legacy_reset(dc, strongarm_ssp_reset);
|
||||
dc->vmsd = &vmstate_strongarm_ssp_regs;
|
||||
}
|
||||
|
||||
|
||||
+37
-1
@@ -66,6 +66,7 @@
|
||||
#include "hw/intc/arm_gicv3_its_common.h"
|
||||
#include "hw/irq.h"
|
||||
#include "kvm_arm.h"
|
||||
#include "hvf_arm.h"
|
||||
#include "hw/firmware/smbios.h"
|
||||
#include "qapi/visitor.h"
|
||||
#include "qapi/qapi-visit-common.h"
|
||||
@@ -2111,7 +2112,8 @@ static void machvirt_init(MachineState *machine)
|
||||
|
||||
/*
|
||||
* In accelerated mode, the memory map is computed earlier in kvm_type()
|
||||
* to create a VM with the right number of IPA bits.
|
||||
* for Linux, or hvf_get_physical_address_range() for macOS to create a
|
||||
* VM with the right number of IPA bits.
|
||||
*/
|
||||
if (!vms->memmap) {
|
||||
Object *cpuobj;
|
||||
@@ -3031,6 +3033,39 @@ static int virt_kvm_type(MachineState *ms, const char *type_str)
|
||||
return fixed_ipa ? 0 : requested_pa_size;
|
||||
}
|
||||
|
||||
static int virt_hvf_get_physical_address_range(MachineState *ms)
|
||||
{
|
||||
VirtMachineState *vms = VIRT_MACHINE(ms);
|
||||
|
||||
int default_ipa_size = hvf_arm_get_default_ipa_bit_size();
|
||||
int max_ipa_size = hvf_arm_get_max_ipa_bit_size();
|
||||
|
||||
/* We freeze the memory map to compute the highest gpa */
|
||||
virt_set_memmap(vms, max_ipa_size);
|
||||
|
||||
int requested_ipa_size = 64 - clz64(vms->highest_gpa);
|
||||
|
||||
/*
|
||||
* If we're <= the default IPA size just use the default.
|
||||
* If we're above the default but below the maximum, round up to
|
||||
* the maximum. hvf_arm_get_max_ipa_bit_size() conveniently only
|
||||
* returns values that are valid ARM PARange values.
|
||||
*/
|
||||
if (requested_ipa_size <= default_ipa_size) {
|
||||
requested_ipa_size = default_ipa_size;
|
||||
} else if (requested_ipa_size <= max_ipa_size) {
|
||||
requested_ipa_size = max_ipa_size;
|
||||
} else {
|
||||
error_report("-m and ,maxmem option values "
|
||||
"require an IPA range (%d bits) larger than "
|
||||
"the one supported by the host (%d bits)",
|
||||
requested_ipa_size, max_ipa_size);
|
||||
return -1;
|
||||
}
|
||||
|
||||
return requested_ipa_size;
|
||||
}
|
||||
|
||||
static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||||
{
|
||||
MachineClass *mc = MACHINE_CLASS(oc);
|
||||
@@ -3090,6 +3125,7 @@ static void virt_machine_class_init(ObjectClass *oc, void *data)
|
||||
mc->valid_cpu_types = valid_cpu_types;
|
||||
mc->get_default_cpu_node_id = virt_get_default_cpu_node_id;
|
||||
mc->kvm_type = virt_kvm_type;
|
||||
mc->hvf_get_physical_address_range = virt_hvf_get_physical_address_range;
|
||||
assert(!mc->get_hotplug_handler);
|
||||
mc->get_hotplug_handler = virt_machine_get_hotplug_handler;
|
||||
hc->pre_plug = virt_machine_device_pre_plug_cb;
|
||||
|
||||
+1
-1
@@ -1344,7 +1344,7 @@ static void ac97_class_init(ObjectClass *klass, void *data)
|
||||
dc->desc = "Intel 82801AA AC97 Audio";
|
||||
dc->vmsd = &vmstate_ac97;
|
||||
device_class_set_props(dc, ac97_properties);
|
||||
dc->reset = ac97_on_reset;
|
||||
device_class_set_legacy_reset(dc, ac97_on_reset);
|
||||
}
|
||||
|
||||
static const TypeInfo ac97_info = {
|
||||
|
||||
+1
-1
@@ -164,7 +164,7 @@ static void cs4231_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
DeviceClass *dc = DEVICE_CLASS(klass);
|
||||
|
||||
dc->reset = cs_reset;
|
||||
device_class_set_legacy_reset(dc, cs_reset);
|
||||
dc->vmsd = &vmstate_cs4231;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -702,7 +702,7 @@ static void cs4231a_class_initfn (ObjectClass *klass, void *data)
|
||||
DeviceClass *dc = DEVICE_CLASS (klass);
|
||||
|
||||
dc->realize = cs4231a_realizefn;
|
||||
dc->reset = cs4231a_reset;
|
||||
device_class_set_legacy_reset(dc, cs4231a_reset);
|
||||
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
|
||||
dc->desc = "Crystal Semiconductor CS4231A";
|
||||
dc->vmsd = &vmstate_cs4231a;
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user