mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'mips-20220611' of https://github.com/philmd/qemu into staging
MIPS patches queue - Various TCG fixes (Marcin Nowakowski, Ni Hui, Stefan Pejic, Stefan Pejic) - Sysbus floppy controller fix (Peter Maydell) - QOM'ification of PIIX southbridge (Mark Cave-Ayland, Bernhard Beschow) - Various fixes on ISA devices commonly used by x86/mips machines (Bernhard) - Few cleanups in accel/tcg & documentation (Bernhard) # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCAAdFiEE+qvnXhKRciHc/Wuy4+MsLN6twN4FAmKkbtEACgkQ4+MsLN6t # wN7uPg/+K4TawuNb5CFPa67gdP+7QqOQJF7ADJm4jDgJN0qRg8uDDE1/cSvtD1xn # ttWfy/AHCtuCwLWTJ5T3QCIXJBrEmfqu/RkGoljnIDWZBKcnrzsTmBOBylDbO8zC # ZuNiOr0CUzSoCJsQ297U8tYW+2hDMSLvJrwbT97vqoSETsoTbBX/fFqQ7zdOqU5d # e0CDiJNIinjObtylCKWe0JP1pRyWRexWX4jEPeEYR2eCE49EoZi47JJmGFtQJB5j # wtVO48bN1Wn97mqeML6JEGXfgNa672bgh82Gulfyrx+g9fBM1Al8nEy/mmbUkgd6 # Imrt0jxp2Cqtl6ENC6CB8mT5ZjMKPsG5rzvNvaQAoM1jhZbZQXx3l1V/pSU5cnf5 # miVbkjepl9NVvFZ4bJ4oHOCA9l7BaZoUmRa5W0XOZW9y8Ph2H4kUZDI+g4Rif136 # Wgf5EqbFi/tJlC11S3vLwDZJmw2a3LM1esldJom3/EgA0e8t5o2xY/9lGee8WDAe # dn+t8etpK4WMQ/694WAR051BHiH2XP2DvsX6Ioi82aYOqL6NgGJYAI+/CP8Mhteg # Rmqg+p+7jRGqtH1QH3i/77TYJB/J0QqXp8lBHwfdCAyCzt3BkA/e5nXF5Ez0Am3m # i160SjSRejVaLc5bxTXiKLvZHUekea0PNtajWFjv42BxwlbgmEY= # =KtFC # -----END PGP SIGNATURE----- # gpg: Signature made Sat 11 Jun 2022 03:30:41 AM PDT # gpg: using RSA key FAABE75E12917221DCFD6BB2E3E32C2CDEADC0DE # gpg: Good signature from "Philippe Mathieu-Daudé (F4BUG) <f4bug@amsat.org>" [full] * tag 'mips-20220611' of https://github.com/philmd/qemu: (49 commits) docs/devel: Fix link to developer mailing lists accel/tcg: Inline dump_opcount_info() and remove it accel/tcg/cpu-exec: Unexport dump_drift_info() hw/net/fsl_etsec/etsec: Remove obsolete and unused etsec_create() hw/i386/pc: Remove orphan declarations hw/i386/pc: Unexport functions used only internally hw/i386/pc: Unexport PC_CPU_MODEL_IDS macro hw/audio/cs4231a: Const'ify global tables hw: Reuse TYPE_I8042 define hw/rtc/mc146818rtc: QOM'ify io_base offset hw/i386/microvm-dt: Determine mc146818rtc's IRQ number from QOM property hw/i386/microvm-dt: Force explicit failure if retrieving QOM property fails hw/isa/piix3: Inline and remove piix3_create() hw/isa/piix3: Factor out ISABus retrieval from piix3_create() hw/isa/piix3: QOM'ify PCI device creation and wiring hw/isa/piix3: Move pci_map_irq_fn near pci_set_irq_fn hw/isa/piix4: Inline and remove piix4_create() hw/isa/piix4: QOM'ify PIIX4 PM creation hw/isa/piix4: Factor out ISABus retrieval from piix4_create() hw/isa/piix4: QOM'ify PCI device creation and wiring ... Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
+2
-1
@@ -246,7 +246,8 @@ F: docs/system/cpu-models-mips.rst.inc
|
||||
F: tests/tcg/mips/
|
||||
|
||||
MIPS TCG CPUs (nanoMIPS ISA)
|
||||
S: Orphan
|
||||
M: Stefan Pejic <stefan.pejic@syrmia.com>
|
||||
S: Maintained
|
||||
F: disas/nanomips.*
|
||||
F: target/mips/tcg/*nanomips*
|
||||
|
||||
|
||||
@@ -1048,7 +1048,7 @@ void tcg_exec_unrealizefn(CPUState *cpu)
|
||||
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
|
||||
void dump_drift_info(GString *buf)
|
||||
static void dump_drift_info(GString *buf)
|
||||
{
|
||||
if (!icount_enabled()) {
|
||||
return;
|
||||
@@ -1091,7 +1091,7 @@ HumanReadableText *qmp_x_query_opcount(Error **errp)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
dump_opcount_info(buf);
|
||||
tcg_dump_op_count(buf);
|
||||
|
||||
return human_readable_text_from_str(buf);
|
||||
}
|
||||
|
||||
@@ -2124,11 +2124,6 @@ void dump_exec_info(GString *buf)
|
||||
tcg_dump_info(buf);
|
||||
}
|
||||
|
||||
void dump_opcount_info(GString *buf)
|
||||
{
|
||||
tcg_dump_op_count(buf);
|
||||
}
|
||||
|
||||
#else /* CONFIG_USER_ONLY */
|
||||
|
||||
void cpu_interrupt(CPUState *cpu, int mask)
|
||||
|
||||
@@ -213,17 +213,6 @@ MIPS ``Trap-and-Emul`` KVM support (since 6.0)
|
||||
The MIPS ``Trap-and-Emul`` KVM host and guest support has been removed
|
||||
from Linux upstream kernel, declare it deprecated.
|
||||
|
||||
System emulator CPUS
|
||||
--------------------
|
||||
|
||||
MIPS ``I7200`` CPU Model (since 5.2)
|
||||
''''''''''''''''''''''''''''''''''''
|
||||
|
||||
The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
|
||||
(the ISA has never been upstreamed to a compiler toolchain). Therefore
|
||||
this CPU is also deprecated.
|
||||
|
||||
|
||||
QEMU API (QAPI) events
|
||||
----------------------
|
||||
|
||||
@@ -337,16 +326,6 @@ The above, converted to the current supported format::
|
||||
|
||||
json:{"file.driver":"rbd", "file.pool":"rbd", "file.image":"name"}
|
||||
|
||||
linux-user mode CPUs
|
||||
--------------------
|
||||
|
||||
MIPS ``I7200`` CPU (since 5.2)
|
||||
''''''''''''''''''''''''''''''
|
||||
|
||||
The ``I7200`` guest CPU relies on the nanoMIPS ISA, which is deprecated
|
||||
(the ISA has never been upstreamed to a compiler toolchain). Therefore
|
||||
this CPU is also deprecated.
|
||||
|
||||
Backwards compatibility
|
||||
-----------------------
|
||||
|
||||
@@ -376,15 +355,6 @@ versions, aliases will point to newer CPU model versions
|
||||
depending on the machine type, so management software must
|
||||
resolve CPU model aliases before starting a virtual machine.
|
||||
|
||||
Guest Emulator ISAs
|
||||
-------------------
|
||||
|
||||
nanoMIPS ISA
|
||||
''''''''''''
|
||||
|
||||
The ``nanoMIPS`` ISA has never been upstreamed to any compiler toolchain.
|
||||
As it is hard to generate binaries for it, declare it deprecated.
|
||||
|
||||
Tools
|
||||
-----
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ one-shot fix, the bare minimum we ask is that:
|
||||
<http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/SubmittingPatches?id=f6f94e2ab1b33f0082ac22d71f66385a60d8157f#n297>`__
|
||||
policy.) ``git commit -s`` or ``git format-patch -s`` will add one.
|
||||
- All contributions to QEMU must be **sent as patches** to the
|
||||
qemu-devel `mailing list <MailingLists>`__. Patch contributions
|
||||
should not be posted on the bug tracker, posted on forums, or
|
||||
externally hosted and linked to. (We have other mailing lists too,
|
||||
qemu-devel `mailing list <https://wiki.qemu.org/Contribute/MailingLists>`__.
|
||||
Patch contributions should not be posted on the bug tracker, posted on
|
||||
forums, or externally hosted and linked to. (We have other mailing lists too,
|
||||
but all patches must go to qemu-devel, possibly with a Cc: to another
|
||||
list.) ``git send-email`` (`step-by-step setup
|
||||
guide <https://git-send-email.io/>`__ and `hints and
|
||||
|
||||
+12
-65
@@ -28,6 +28,8 @@
|
||||
#include "hw/pci/pci.h"
|
||||
#include "hw/qdev-properties.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "hw/acpi/pcihp.h"
|
||||
#include "hw/acpi/piix4.h"
|
||||
#include "sysemu/runstate.h"
|
||||
#include "sysemu/sysemu.h"
|
||||
#include "sysemu/xen.h"
|
||||
@@ -56,47 +58,6 @@ struct pci_status {
|
||||
uint32_t down;
|
||||
};
|
||||
|
||||
struct PIIX4PMState {
|
||||
/*< private >*/
|
||||
PCIDevice parent_obj;
|
||||
/*< public >*/
|
||||
|
||||
MemoryRegion io;
|
||||
uint32_t io_base;
|
||||
|
||||
MemoryRegion io_gpe;
|
||||
ACPIREGS ar;
|
||||
|
||||
APMState apm;
|
||||
|
||||
PMSMBus smb;
|
||||
uint32_t smb_io_base;
|
||||
|
||||
qemu_irq irq;
|
||||
qemu_irq smi_irq;
|
||||
int smm_enabled;
|
||||
bool smm_compat;
|
||||
Notifier machine_ready;
|
||||
Notifier powerdown_notifier;
|
||||
|
||||
AcpiPciHpState acpi_pci_hotplug;
|
||||
bool use_acpi_hotplug_bridge;
|
||||
bool use_acpi_root_pci_hotplug;
|
||||
bool not_migrate_acpi_index;
|
||||
|
||||
uint8_t disable_s3;
|
||||
uint8_t disable_s4;
|
||||
uint8_t s4_val;
|
||||
|
||||
bool cpu_hotplug_legacy;
|
||||
AcpiCpuHotplug gpe_cpu;
|
||||
CPUHotplugState cpuhp_state;
|
||||
|
||||
MemHotplugState acpi_memory_hotplug;
|
||||
};
|
||||
|
||||
OBJECT_DECLARE_SIMPLE_TYPE(PIIX4PMState, PIIX4_PM)
|
||||
|
||||
static void piix4_acpi_system_hot_add_init(MemoryRegion *parent,
|
||||
PCIBus *bus, PIIX4PMState *s);
|
||||
|
||||
@@ -525,6 +486,10 @@ static void piix4_pm_realize(PCIDevice *dev, Error **errp)
|
||||
s->machine_ready.notify = piix4_pm_machine_ready;
|
||||
qemu_add_machine_init_done_notifier(&s->machine_ready);
|
||||
|
||||
if (xen_enabled()) {
|
||||
s->use_acpi_hotplug_bridge = false;
|
||||
}
|
||||
|
||||
piix4_acpi_system_hot_add_init(pci_address_space_io(dev),
|
||||
pci_get_bus(dev), s);
|
||||
qbus_set_hotplug_handler(BUS(pci_get_bus(dev)), OBJECT(s));
|
||||
@@ -532,32 +497,12 @@ static void piix4_pm_realize(PCIDevice *dev, Error **errp)
|
||||
piix4_pm_add_properties(s);
|
||||
}
|
||||
|
||||
I2CBus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
|
||||
qemu_irq sci_irq, qemu_irq smi_irq,
|
||||
int smm_enabled, DeviceState **piix4_pm)
|
||||
static void piix4_pm_init(Object *obj)
|
||||
{
|
||||
PCIDevice *pci_dev;
|
||||
DeviceState *dev;
|
||||
PIIX4PMState *s;
|
||||
PIIX4PMState *s = PIIX4_PM(obj);
|
||||
|
||||
pci_dev = pci_new(devfn, TYPE_PIIX4_PM);
|
||||
dev = DEVICE(pci_dev);
|
||||
qdev_prop_set_uint32(dev, "smb_io_base", smb_io_base);
|
||||
if (piix4_pm) {
|
||||
*piix4_pm = dev;
|
||||
}
|
||||
|
||||
s = PIIX4_PM(dev);
|
||||
s->irq = sci_irq;
|
||||
s->smi_irq = smi_irq;
|
||||
s->smm_enabled = smm_enabled;
|
||||
if (xen_enabled()) {
|
||||
s->use_acpi_hotplug_bridge = false;
|
||||
}
|
||||
|
||||
pci_realize_and_unref(pci_dev, bus, &error_fatal);
|
||||
|
||||
return s->smb.smbus;
|
||||
qdev_init_gpio_out(DEVICE(obj), &s->irq, 1);
|
||||
qdev_init_gpio_out_named(DEVICE(obj), &s->smi_irq, "smi-irq", 1);
|
||||
}
|
||||
|
||||
static uint64_t gpe_readb(void *opaque, hwaddr addr, unsigned width)
|
||||
@@ -663,6 +608,7 @@ static Property piix4_pm_properties[] = {
|
||||
DEFINE_PROP_BOOL("memory-hotplug-support", PIIX4PMState,
|
||||
acpi_memory_hotplug.is_enabled, true),
|
||||
DEFINE_PROP_BOOL("smm-compat", PIIX4PMState, smm_compat, false),
|
||||
DEFINE_PROP_BOOL("smm-enabled", PIIX4PMState, smm_enabled, false),
|
||||
DEFINE_PROP_BOOL("x-not-migrate-acpi-index", PIIX4PMState,
|
||||
not_migrate_acpi_index, false),
|
||||
DEFINE_PROP_END_OF_LIST(),
|
||||
@@ -703,6 +649,7 @@ static void piix4_pm_class_init(ObjectClass *klass, void *data)
|
||||
static const TypeInfo piix4_pm_info = {
|
||||
.name = TYPE_PIIX4_PM,
|
||||
.parent = TYPE_PCI_DEVICE,
|
||||
.instance_init = piix4_pm_init,
|
||||
.instance_size = sizeof(PIIX4PMState),
|
||||
.class_init = piix4_pm_class_init,
|
||||
.interfaces = (InterfaceInfo[]) {
|
||||
|
||||
+4
-4
@@ -84,7 +84,7 @@ struct CSState {
|
||||
int transferred;
|
||||
int aci_counter;
|
||||
SWVoiceOut *voice;
|
||||
int16_t *tab;
|
||||
const int16_t *tab;
|
||||
};
|
||||
|
||||
#define MODE2 (1 << 6)
|
||||
@@ -142,13 +142,13 @@ enum {
|
||||
Capture_Lower_Base_Count
|
||||
};
|
||||
|
||||
static int freqs[2][8] = {
|
||||
static const int freqs[2][8] = {
|
||||
{ 8000, 16000, 27420, 32000, -1, -1, 48000, 9000 },
|
||||
{ 5510, 11025, 18900, 22050, 37800, 44100, 33075, 6620 }
|
||||
};
|
||||
|
||||
/* Tables courtesy http://hazelware.luggle.com/tutorials/mulawcompression.html */
|
||||
static int16_t MuLawDecompressTable[256] =
|
||||
static const int16_t MuLawDecompressTable[256] =
|
||||
{
|
||||
-32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,
|
||||
-23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,
|
||||
@@ -184,7 +184,7 @@ static int16_t MuLawDecompressTable[256] =
|
||||
56, 48, 40, 32, 24, 16, 8, 0
|
||||
};
|
||||
|
||||
static int16_t ALawDecompressTable[256] =
|
||||
static const int16_t ALawDecompressTable[256] =
|
||||
{
|
||||
-5504, -5248, -6016, -5760, -4480, -4224, -4992, -4736,
|
||||
-7552, -7296, -8064, -7808, -6528, -6272, -7040, -6784,
|
||||
|
||||
+11
-5
@@ -94,18 +94,14 @@ static void fdctrl_handle_tc(void *opaque, int irq, int level)
|
||||
trace_fdctrl_tc_pulse(level);
|
||||
}
|
||||
|
||||
void fdctrl_init_sysbus(qemu_irq irq, int dma_chann,
|
||||
hwaddr mmio_base, DriveInfo **fds)
|
||||
void fdctrl_init_sysbus(qemu_irq irq, hwaddr mmio_base, DriveInfo **fds)
|
||||
{
|
||||
FDCtrl *fdctrl;
|
||||
DeviceState *dev;
|
||||
SysBusDevice *sbd;
|
||||
FDCtrlSysBus *sys;
|
||||
|
||||
dev = qdev_new("sysbus-fdc");
|
||||
sys = SYSBUS_FDC(dev);
|
||||
fdctrl = &sys->state;
|
||||
fdctrl->dma_chann = dma_chann; /* FIXME */
|
||||
sbd = SYS_BUS_DEVICE(dev);
|
||||
sysbus_realize_and_unref(sbd, &error_fatal);
|
||||
sysbus_connect_irq(sbd, 0, irq);
|
||||
@@ -138,6 +134,16 @@ static void sysbus_fdc_common_instance_init(Object *obj)
|
||||
FDCtrlSysBus *sys = SYSBUS_FDC(obj);
|
||||
FDCtrl *fdctrl = &sys->state;
|
||||
|
||||
/*
|
||||
* DMA is not currently supported for sysbus floppy controllers.
|
||||
* If we wanted to add support then probably the best approach is
|
||||
* to have a QOM link property 'dma-controller' which the board
|
||||
* code can set to an instance of IsaDmaClass, and an integer
|
||||
* property 'dma-channel', so that we can set fdctrl->dma and
|
||||
* fdctrl->dma_chann accordingly.
|
||||
*/
|
||||
fdctrl->dma_chann = -1;
|
||||
|
||||
qdev_set_legacy_instance_id(dev, 0 /* io */, 2); /* FIXME */
|
||||
|
||||
memory_region_init_io(&fdctrl->iomem, obj,
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "hw/acpi/tpm.h"
|
||||
#include "hw/acpi/vmgenid.h"
|
||||
#include "hw/acpi/erst.h"
|
||||
#include "hw/acpi/piix4.h"
|
||||
#include "sysemu/tpm_backend.h"
|
||||
#include "hw/rtc/mc146818rtc_regs.h"
|
||||
#include "migration/vmstate.h"
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
*/
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/cutils.h"
|
||||
#include "qapi/error.h"
|
||||
#include "sysemu/device_tree.h"
|
||||
#include "hw/char/serial.h"
|
||||
#include "hw/i386/fw_cfg.h"
|
||||
@@ -187,8 +188,8 @@ static void dt_add_ioapic(MicrovmMachineState *mms, SysBusDevice *dev)
|
||||
static void dt_add_isa_serial(MicrovmMachineState *mms, ISADevice *dev)
|
||||
{
|
||||
const char compat[] = "ns16550";
|
||||
uint32_t irq = object_property_get_int(OBJECT(dev), "irq", NULL);
|
||||
hwaddr base = object_property_get_int(OBJECT(dev), "iobase", NULL);
|
||||
uint32_t irq = object_property_get_int(OBJECT(dev), "irq", &error_fatal);
|
||||
hwaddr base = object_property_get_int(OBJECT(dev), "iobase", &error_fatal);
|
||||
hwaddr size = 8;
|
||||
char *nodename;
|
||||
|
||||
@@ -208,8 +209,8 @@ static void dt_add_isa_serial(MicrovmMachineState *mms, ISADevice *dev)
|
||||
static void dt_add_isa_rtc(MicrovmMachineState *mms, ISADevice *dev)
|
||||
{
|
||||
const char compat[] = "motorola,mc146818";
|
||||
uint32_t irq = RTC_ISA_IRQ;
|
||||
hwaddr base = RTC_ISA_BASE;
|
||||
uint32_t irq = object_property_get_uint(OBJECT(dev), "irq", &error_fatal);
|
||||
hwaddr base = object_property_get_uint(OBJECT(dev), "iobase", &error_fatal);
|
||||
hwaddr size = 8;
|
||||
char *nodename;
|
||||
|
||||
|
||||
+13
-4
@@ -98,6 +98,15 @@
|
||||
#include "trace.h"
|
||||
#include CONFIG_DEVICES
|
||||
|
||||
/*
|
||||
* Helper for setting model-id for CPU models that changed model-id
|
||||
* depending on QEMU versions up to QEMU 2.4.
|
||||
*/
|
||||
#define PC_CPU_MODEL_IDS(v) \
|
||||
{ "qemu32-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
|
||||
{ "qemu64-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },\
|
||||
{ "athlon-" TYPE_X86_CPU, "model-id", "QEMU Virtual CPU version " v, },
|
||||
|
||||
GlobalProperty pc_compat_7_0[] = {};
|
||||
const size_t pc_compat_7_0_len = G_N_ELEMENTS(pc_compat_7_0);
|
||||
|
||||
@@ -563,7 +572,7 @@ static const char * const fdc_container_path[] = {
|
||||
* Locate the FDC at IO address 0x3f0, in order to configure the CMOS registers
|
||||
* and ACPI objects.
|
||||
*/
|
||||
ISADevice *pc_find_fdc0(void)
|
||||
static ISADevice *pc_find_fdc0(void)
|
||||
{
|
||||
int i;
|
||||
Object *container;
|
||||
@@ -707,7 +716,7 @@ static const int ne2000_io[NE2000_NB_MAX] = { 0x300, 0x320, 0x340, 0x360,
|
||||
0x280, 0x380 };
|
||||
static const int ne2000_irq[NE2000_NB_MAX] = { 9, 10, 11, 3, 4, 5 };
|
||||
|
||||
void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd)
|
||||
static void pc_init_ne2k_isa(ISABus *bus, NICInfo *nd)
|
||||
{
|
||||
static int nb_ne2k = 0;
|
||||
|
||||
@@ -1097,7 +1106,7 @@ static void pc_superio_init(ISABus *isa_bus, bool create_fdctrl,
|
||||
return;
|
||||
}
|
||||
|
||||
i8042 = isa_create_simple(isa_bus, "i8042");
|
||||
i8042 = isa_create_simple(isa_bus, TYPE_I8042);
|
||||
if (!no_vmport) {
|
||||
isa_create_simple(isa_bus, TYPE_VMPORT);
|
||||
vmmouse = isa_try_new("vmmouse");
|
||||
@@ -1105,7 +1114,7 @@ static void pc_superio_init(ISABus *isa_bus, bool create_fdctrl,
|
||||
vmmouse = NULL;
|
||||
}
|
||||
if (vmmouse) {
|
||||
object_property_set_link(OBJECT(vmmouse), "i8042", OBJECT(i8042),
|
||||
object_property_set_link(OBJECT(vmmouse), TYPE_I8042, OBJECT(i8042),
|
||||
&error_abort);
|
||||
isa_realize_and_unref(vmmouse, isa_bus, &error_fatal);
|
||||
}
|
||||
|
||||
+17
-6
@@ -47,6 +47,7 @@
|
||||
#include "hw/xen/xen-x86.h"
|
||||
#include "exec/memory.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "hw/acpi/piix4.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/error-report.h"
|
||||
#include "sysemu/xen.h"
|
||||
@@ -196,6 +197,9 @@ static void pc_init1(MachineState *machine,
|
||||
|
||||
if (pcmc->pci_enabled) {
|
||||
PIIX3State *piix3;
|
||||
PCIDevice *pci_dev;
|
||||
const char *type = xen_enabled() ? TYPE_PIIX3_XEN_DEVICE
|
||||
: TYPE_PIIX3_DEVICE;
|
||||
|
||||
pci_bus = i440fx_init(host_type,
|
||||
pci_type,
|
||||
@@ -206,9 +210,11 @@ static void pc_init1(MachineState *machine,
|
||||
pci_memory, ram_memory);
|
||||
pcms->bus = pci_bus;
|
||||
|
||||
piix3 = piix3_create(pci_bus, &isa_bus);
|
||||
pci_dev = pci_create_simple_multifunction(pci_bus, -1, true, type);
|
||||
piix3 = PIIX3_PCI_DEVICE(pci_dev);
|
||||
piix3->pic = x86ms->gsi;
|
||||
piix3_devfn = piix3->dev.devfn;
|
||||
isa_bus = ISA_BUS(qdev_get_child_bus(DEVICE(piix3), "isa.0"));
|
||||
} else {
|
||||
pci_bus = NULL;
|
||||
i440fx_state = NULL;
|
||||
@@ -280,14 +286,19 @@ static void pc_init1(MachineState *machine,
|
||||
}
|
||||
|
||||
if (pcmc->pci_enabled && x86_machine_is_acpi_enabled(X86_MACHINE(pcms))) {
|
||||
DeviceState *piix4_pm;
|
||||
PCIDevice *piix4_pm;
|
||||
|
||||
smi_irq = qemu_allocate_irq(pc_acpi_smi_interrupt, first_cpu, 0);
|
||||
piix4_pm = pci_new(piix3_devfn + 3, TYPE_PIIX4_PM);
|
||||
qdev_prop_set_uint32(DEVICE(piix4_pm), "smb_io_base", 0xb100);
|
||||
qdev_prop_set_bit(DEVICE(piix4_pm), "smm-enabled",
|
||||
x86_machine_is_smm_enabled(x86ms));
|
||||
pci_realize_and_unref(piix4_pm, pci_bus, &error_fatal);
|
||||
|
||||
qdev_connect_gpio_out(DEVICE(piix4_pm), 0, x86ms->gsi[9]);
|
||||
qdev_connect_gpio_out_named(DEVICE(piix4_pm), "smi-irq", 0, smi_irq);
|
||||
pcms->smbus = I2C_BUS(qdev_get_child_bus(DEVICE(piix4_pm), "i2c"));
|
||||
/* TODO: Populate SPD eeprom data. */
|
||||
pcms->smbus = piix4_pm_init(pci_bus, piix3_devfn + 3, 0xb100,
|
||||
x86ms->gsi[9], smi_irq,
|
||||
x86_machine_is_smm_enabled(x86ms),
|
||||
&piix4_pm);
|
||||
smbus_eeprom_init(pcms->smbus, 8, NULL, 0);
|
||||
|
||||
object_property_add_link(OBJECT(machine), PC_MACHINE_ACPI_DEVICE_PROP,
|
||||
|
||||
+52
-46
@@ -24,6 +24,7 @@
|
||||
|
||||
#include "qemu/osdep.h"
|
||||
#include "qemu/range.h"
|
||||
#include "qapi/error.h"
|
||||
#include "hw/southbridge/piix.h"
|
||||
#include "hw/irq.h"
|
||||
#include "hw/isa/isa.h"
|
||||
@@ -36,9 +37,6 @@
|
||||
|
||||
#define XEN_PIIX_NUM_PIRQS 128ULL
|
||||
|
||||
#define TYPE_PIIX3_DEVICE "PIIX3"
|
||||
#define TYPE_PIIX3_XEN_DEVICE "PIIX3-xen"
|
||||
|
||||
static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq)
|
||||
{
|
||||
qemu_set_irq(piix3->pic[pic_irq],
|
||||
@@ -82,6 +80,17 @@ static void piix3_set_irq(void *opaque, int pirq, int level)
|
||||
piix3_set_irq_level(piix3, pirq, level);
|
||||
}
|
||||
|
||||
/*
|
||||
* Return the global irq number corresponding to a given device irq
|
||||
* pin. We could also use the bus number to have a more precise mapping.
|
||||
*/
|
||||
static int pci_slot_get_pirq(PCIDevice *pci_dev, int pci_intx)
|
||||
{
|
||||
int slot_addend;
|
||||
slot_addend = PCI_SLOT(pci_dev->devfn) - 1;
|
||||
return (pci_intx + slot_addend) & 3;
|
||||
}
|
||||
|
||||
static PCIINTxRoute piix3_route_intx_pin_to_irq(void *opaque, int pin)
|
||||
{
|
||||
PIIX3State *piix3 = opaque;
|
||||
@@ -270,7 +279,7 @@ static const MemoryRegionOps rcr_ops = {
|
||||
.endianness = DEVICE_LITTLE_ENDIAN
|
||||
};
|
||||
|
||||
static void piix3_realize(PCIDevice *dev, Error **errp)
|
||||
static void pci_piix3_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
PIIX3State *d = PIIX3_PCI_DEVICE(dev);
|
||||
|
||||
@@ -309,7 +318,6 @@ static void pci_piix3_class_init(ObjectClass *klass, void *data)
|
||||
dc->desc = "ISA bridge";
|
||||
dc->vmsd = &vmstate_piix3;
|
||||
dc->hotpluggable = false;
|
||||
k->realize = piix3_realize;
|
||||
k->vendor_id = PCI_VENDOR_ID_INTEL;
|
||||
/* 82371SB PIIX3 PCI-to-ISA bridge (Step A1) */
|
||||
k->device_id = PCI_DEVICE_ID_INTEL_82371SB_0;
|
||||
@@ -335,11 +343,28 @@ static const TypeInfo piix3_pci_type_info = {
|
||||
},
|
||||
};
|
||||
|
||||
static void piix3_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
PIIX3State *piix3 = PIIX3_PCI_DEVICE(dev);
|
||||
PCIBus *pci_bus = pci_get_bus(dev);
|
||||
|
||||
pci_piix3_realize(dev, errp);
|
||||
if (*errp) {
|
||||
return;
|
||||
}
|
||||
|
||||
pci_bus_irqs(pci_bus, piix3_set_irq, pci_slot_get_pirq,
|
||||
piix3, PIIX_NUM_PIRQS);
|
||||
pci_bus_set_route_irq_fn(pci_bus, piix3_route_intx_pin_to_irq);
|
||||
};
|
||||
|
||||
static void piix3_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->config_write = piix3_write_config;
|
||||
k->realize = piix3_realize;
|
||||
}
|
||||
|
||||
static const TypeInfo piix3_info = {
|
||||
@@ -348,11 +373,33 @@ static const TypeInfo piix3_info = {
|
||||
.class_init = piix3_class_init,
|
||||
};
|
||||
|
||||
static void piix3_xen_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
ERRP_GUARD();
|
||||
PIIX3State *piix3 = PIIX3_PCI_DEVICE(dev);
|
||||
PCIBus *pci_bus = pci_get_bus(dev);
|
||||
|
||||
pci_piix3_realize(dev, errp);
|
||||
if (*errp) {
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Xen supports additional interrupt routes from the PCI devices to
|
||||
* the IOAPIC: the four pins of each PCI device on the bus are also
|
||||
* connected to the IOAPIC directly.
|
||||
* These additional routes can be discovered through ACPI.
|
||||
*/
|
||||
pci_bus_irqs(pci_bus, xen_piix3_set_irq, xen_pci_slot_get_pirq,
|
||||
piix3, XEN_PIIX_NUM_PIRQS);
|
||||
};
|
||||
|
||||
static void piix3_xen_class_init(ObjectClass *klass, void *data)
|
||||
{
|
||||
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
|
||||
|
||||
k->config_write = piix3_write_config_xen;
|
||||
k->realize = piix3_xen_realize;
|
||||
};
|
||||
|
||||
static const TypeInfo piix3_xen_info = {
|
||||
@@ -369,44 +416,3 @@ static void piix3_register_types(void)
|
||||
}
|
||||
|
||||
type_init(piix3_register_types)
|
||||
|
||||
/*
|
||||
* Return the global irq number corresponding to a given device irq
|
||||
* pin. We could also use the bus number to have a more precise mapping.
|
||||
*/
|
||||
static int pci_slot_get_pirq(PCIDevice *pci_dev, int pci_intx)
|
||||
{
|
||||
int slot_addend;
|
||||
slot_addend = PCI_SLOT(pci_dev->devfn) - 1;
|
||||
return (pci_intx + slot_addend) & 3;
|
||||
}
|
||||
|
||||
PIIX3State *piix3_create(PCIBus *pci_bus, ISABus **isa_bus)
|
||||
{
|
||||
PIIX3State *piix3;
|
||||
PCIDevice *pci_dev;
|
||||
|
||||
/*
|
||||
* Xen supports additional interrupt routes from the PCI devices to
|
||||
* the IOAPIC: the four pins of each PCI device on the bus are also
|
||||
* connected to the IOAPIC directly.
|
||||
* These additional routes can be discovered through ACPI.
|
||||
*/
|
||||
if (xen_enabled()) {
|
||||
pci_dev = pci_create_simple_multifunction(pci_bus, -1, true,
|
||||
TYPE_PIIX3_XEN_DEVICE);
|
||||
piix3 = PIIX3_PCI_DEVICE(pci_dev);
|
||||
pci_bus_irqs(pci_bus, xen_piix3_set_irq, xen_pci_slot_get_pirq,
|
||||
piix3, XEN_PIIX_NUM_PIRQS);
|
||||
} else {
|
||||
pci_dev = pci_create_simple_multifunction(pci_bus, -1, true,
|
||||
TYPE_PIIX3_DEVICE);
|
||||
piix3 = PIIX3_PCI_DEVICE(pci_dev);
|
||||
pci_bus_irqs(pci_bus, piix3_set_irq, pci_slot_get_pirq,
|
||||
piix3, PIIX_NUM_PIRQS);
|
||||
pci_bus_set_route_irq_fn(pci_bus, piix3_route_intx_pin_to_irq);
|
||||
}
|
||||
*isa_bus = ISA_BUS(qdev_get_child_bus(DEVICE(piix3), "isa.0"));
|
||||
|
||||
return piix3;
|
||||
}
|
||||
|
||||
+60
-56
@@ -34,6 +34,8 @@
|
||||
#include "hw/timer/i8254.h"
|
||||
#include "hw/rtc/mc146818rtc.h"
|
||||
#include "hw/ide/pci.h"
|
||||
#include "hw/acpi/piix4.h"
|
||||
#include "hw/usb/hcd-uhci.h"
|
||||
#include "migration/vmstate.h"
|
||||
#include "sysemu/reset.h"
|
||||
#include "sysemu/runstate.h"
|
||||
@@ -45,6 +47,9 @@ struct PIIX4State {
|
||||
qemu_irq *isa;
|
||||
|
||||
RTCState rtc;
|
||||
PCIIDEState ide;
|
||||
UHCIState uhci;
|
||||
PIIX4PMState pm;
|
||||
/* Reset Control Register */
|
||||
MemoryRegion rcr_mem;
|
||||
uint8_t rcr;
|
||||
@@ -73,6 +78,31 @@ static void piix4_set_irq(void *opaque, int irq_num, int level)
|
||||
}
|
||||
}
|
||||
|
||||
static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num)
|
||||
{
|
||||
int slot;
|
||||
|
||||
slot = PCI_SLOT(pci_dev->devfn);
|
||||
|
||||
switch (slot) {
|
||||
/* PIIX4 USB */
|
||||
case 10:
|
||||
return 3;
|
||||
/* AMD 79C973 Ethernet */
|
||||
case 11:
|
||||
return 1;
|
||||
/* Crystal 4281 Sound */
|
||||
case 12:
|
||||
return 2;
|
||||
/* PCI slot 1 to 4 */
|
||||
case 18 ... 21:
|
||||
return ((slot - 18) + irq_num) & 0x03;
|
||||
/* Unknown device, don't do any translation */
|
||||
default:
|
||||
return irq_num;
|
||||
}
|
||||
}
|
||||
|
||||
static void piix4_isa_reset(DeviceState *dev)
|
||||
{
|
||||
PIIX4State *d = PIIX4_PCI_DEVICE(dev);
|
||||
@@ -179,6 +209,7 @@ static const MemoryRegionOps piix4_rcr_ops = {
|
||||
static void piix4_realize(PCIDevice *dev, Error **errp)
|
||||
{
|
||||
PIIX4State *s = PIIX4_PCI_DEVICE(dev);
|
||||
PCIBus *pci_bus = pci_get_bus(dev);
|
||||
ISABus *isa_bus;
|
||||
qemu_irq *i8259_out_irq;
|
||||
|
||||
@@ -217,13 +248,41 @@ static void piix4_realize(PCIDevice *dev, Error **errp)
|
||||
return;
|
||||
}
|
||||
s->rtc.irq = isa_get_irq(ISA_DEVICE(&s->rtc), s->rtc.isairq);
|
||||
|
||||
/* IDE */
|
||||
qdev_prop_set_int32(DEVICE(&s->ide), "addr", dev->devfn + 1);
|
||||
if (!qdev_realize(DEVICE(&s->ide), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
pci_ide_create_devs(PCI_DEVICE(&s->ide));
|
||||
|
||||
/* USB */
|
||||
qdev_prop_set_int32(DEVICE(&s->uhci), "addr", dev->devfn + 2);
|
||||
if (!qdev_realize(DEVICE(&s->uhci), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
|
||||
/* ACPI controller */
|
||||
qdev_prop_set_int32(DEVICE(&s->pm), "addr", dev->devfn + 3);
|
||||
if (!qdev_realize(DEVICE(&s->pm), BUS(pci_bus), errp)) {
|
||||
return;
|
||||
}
|
||||
qdev_connect_gpio_out(DEVICE(&s->pm), 0, s->isa[9]);
|
||||
|
||||
pci_bus_irqs(pci_bus, piix4_set_irq, pci_slot_get_pirq, s, PIIX_NUM_PIRQS);
|
||||
}
|
||||
|
||||
static void piix4_init(Object *obj)
|
||||
{
|
||||
PIIX4State *s = PIIX4_PCI_DEVICE(obj);
|
||||
|
||||
object_initialize(&s->rtc, sizeof(s->rtc), TYPE_MC146818_RTC);
|
||||
object_initialize_child(obj, "rtc", &s->rtc, TYPE_MC146818_RTC);
|
||||
object_initialize_child(obj, "ide", &s->ide, "piix4-ide");
|
||||
object_initialize_child(obj, "uhci", &s->uhci, "piix4-usb-uhci");
|
||||
|
||||
object_initialize_child(obj, "pm", &s->pm, TYPE_PIIX4_PM);
|
||||
qdev_prop_set_uint32(DEVICE(&s->pm), "smb_io_base", 0x1100);
|
||||
qdev_prop_set_bit(DEVICE(&s->pm), "smm-enabled", 0);
|
||||
}
|
||||
|
||||
static void piix4_class_init(ObjectClass *klass, void *data)
|
||||
@@ -264,58 +323,3 @@ static void piix4_register_types(void)
|
||||
}
|
||||
|
||||
type_init(piix4_register_types)
|
||||
|
||||
static int pci_slot_get_pirq(PCIDevice *pci_dev, int irq_num)
|
||||
{
|
||||
int slot;
|
||||
|
||||
slot = PCI_SLOT(pci_dev->devfn);
|
||||
|
||||
switch (slot) {
|
||||
/* PIIX4 USB */
|
||||
case 10:
|
||||
return 3;
|
||||
/* AMD 79C973 Ethernet */
|
||||
case 11:
|
||||
return 1;
|
||||
/* Crystal 4281 Sound */
|
||||
case 12:
|
||||
return 2;
|
||||
/* PCI slot 1 to 4 */
|
||||
case 18 ... 21:
|
||||
return ((slot - 18) + irq_num) & 0x03;
|
||||
/* Unknown device, don't do any translation */
|
||||
default:
|
||||
return irq_num;
|
||||
}
|
||||
}
|
||||
|
||||
DeviceState *piix4_create(PCIBus *pci_bus, ISABus **isa_bus, I2CBus **smbus)
|
||||
{
|
||||
PIIX4State *s;
|
||||
PCIDevice *pci;
|
||||
DeviceState *dev;
|
||||
int devfn = PCI_DEVFN(10, 0);
|
||||
|
||||
pci = pci_create_simple_multifunction(pci_bus, devfn, true,
|
||||
TYPE_PIIX4_PCI_DEVICE);
|
||||
dev = DEVICE(pci);
|
||||
s = PIIX4_PCI_DEVICE(pci);
|
||||
if (isa_bus) {
|
||||
*isa_bus = ISA_BUS(qdev_get_child_bus(dev, "isa.0"));
|
||||
}
|
||||
|
||||
pci = pci_create_simple(pci_bus, devfn + 1, "piix4-ide");
|
||||
pci_ide_create_devs(pci);
|
||||
|
||||
pci_create_simple(pci_bus, devfn + 2, "piix4-usb-uhci");
|
||||
if (smbus) {
|
||||
*smbus = piix4_pm_init(pci_bus, devfn + 3, 0x1100,
|
||||
qdev_get_gpio_in_named(dev, "isa", 9),
|
||||
NULL, 0, NULL);
|
||||
}
|
||||
|
||||
pci_bus_irqs(pci_bus, piix4_set_irq, pci_slot_get_pirq, s, PIIX_NUM_PIRQS);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
+1
-1
@@ -353,7 +353,7 @@ static void mips_jazz_init(MachineState *machine,
|
||||
fds[n] = drive_get(IF_FLOPPY, 0, n);
|
||||
}
|
||||
/* FIXME: we should enable DMA with a custom IsaDma device */
|
||||
fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), -1, 0x80003000, fds);
|
||||
fdctrl_init_sysbus(qdev_get_gpio_in(rc4030, 1), 0x80003000, fds);
|
||||
|
||||
/* Real time clock */
|
||||
mc146818_rtc_init(isa_bus, 1980, NULL);
|
||||
|
||||
+8
-1
@@ -1237,7 +1237,9 @@ void mips_malta_init(MachineState *machine)
|
||||
int fl_idx = 0;
|
||||
int be;
|
||||
MaltaState *s;
|
||||
PCIDevice *piix4;
|
||||
DeviceState *dev;
|
||||
DeviceState *pm_dev;
|
||||
|
||||
s = MIPS_MALTA(qdev_new(TYPE_MIPS_MALTA));
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(s), &error_fatal);
|
||||
@@ -1399,7 +1401,12 @@ void mips_malta_init(MachineState *machine)
|
||||
empty_slot_init("GT64120", 0, 0x20000000);
|
||||
|
||||
/* Southbridge */
|
||||
dev = piix4_create(pci_bus, &isa_bus, &smbus);
|
||||
piix4 = pci_create_simple_multifunction(pci_bus, PCI_DEVFN(10, 0), true,
|
||||
TYPE_PIIX4_PCI_DEVICE);
|
||||
dev = DEVICE(piix4);
|
||||
isa_bus = ISA_BUS(qdev_get_child_bus(dev, "isa.0"));
|
||||
pm_dev = DEVICE(object_resolve_path_component(OBJECT(dev), "pm"));
|
||||
smbus = I2C_BUS(qdev_get_child_bus(pm_dev, "i2c"));
|
||||
|
||||
/* Interrupt controller */
|
||||
qdev_connect_gpio_out_named(dev, "intr", 0, i8259_irq);
|
||||
|
||||
@@ -443,26 +443,3 @@ static void etsec_register_types(void)
|
||||
}
|
||||
|
||||
type_init(etsec_register_types)
|
||||
|
||||
DeviceState *etsec_create(hwaddr base,
|
||||
MemoryRegion * mr,
|
||||
NICInfo * nd,
|
||||
qemu_irq tx_irq,
|
||||
qemu_irq rx_irq,
|
||||
qemu_irq err_irq)
|
||||
{
|
||||
DeviceState *dev;
|
||||
|
||||
dev = qdev_new("eTSEC");
|
||||
qdev_set_nic_properties(dev, nd);
|
||||
sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal);
|
||||
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 0, tx_irq);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 1, rx_irq);
|
||||
sysbus_connect_irq(SYS_BUS_DEVICE(dev), 2, err_irq);
|
||||
|
||||
memory_region_add_subregion(mr, base,
|
||||
SYS_BUS_DEVICE(dev)->mmio[0].memory);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
@@ -155,13 +155,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(eTSEC, ETSEC_COMMON)
|
||||
#define eTSEC_TRANSMIT 1
|
||||
#define eTSEC_RECEIVE 2
|
||||
|
||||
DeviceState *etsec_create(hwaddr base,
|
||||
MemoryRegion *mr,
|
||||
NICInfo *nd,
|
||||
qemu_irq tx_irq,
|
||||
qemu_irq rx_irq,
|
||||
qemu_irq err_irq);
|
||||
|
||||
void etsec_update_irq(eTSEC *etsec);
|
||||
|
||||
void etsec_walk_tx_ring(eTSEC *etsec, int ring_nbr);
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
#define RTC_CLOCK_RATE 32768
|
||||
#define UIP_HOLD_LENGTH (8 * NANOSECONDS_PER_SECOND / 32768)
|
||||
|
||||
#define RTC_ISA_BASE 0x70
|
||||
|
||||
static void rtc_set_time(RTCState *s);
|
||||
static void rtc_update_time(RTCState *s);
|
||||
static void rtc_set_cmos(RTCState *s, const struct tm *tm);
|
||||
@@ -941,7 +943,7 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
|
||||
qemu_register_suspend_notifier(&s->suspend_notifier);
|
||||
|
||||
memory_region_init_io(&s->io, OBJECT(s), &cmos_ops, s, "rtc", 2);
|
||||
isa_register_ioport(isadev, &s->io, RTC_ISA_BASE);
|
||||
isa_register_ioport(isadev, &s->io, s->io_base);
|
||||
|
||||
/* register rtc 0x70 port for coalesced_pio */
|
||||
memory_region_set_flush_coalesced(&s->io);
|
||||
@@ -950,7 +952,7 @@ static void rtc_realizefn(DeviceState *dev, Error **errp)
|
||||
memory_region_add_subregion(&s->io, 0, &s->coalesced_io);
|
||||
memory_region_add_coalescing(&s->coalesced_io, 0, 1);
|
||||
|
||||
qdev_set_legacy_instance_id(dev, RTC_ISA_BASE, 3);
|
||||
qdev_set_legacy_instance_id(dev, s->io_base, 3);
|
||||
|
||||
object_property_add_tm(OBJECT(s), "date", rtc_get_date);
|
||||
|
||||
@@ -983,6 +985,7 @@ ISADevice *mc146818_rtc_init(ISABus *bus, int base_year, qemu_irq intercept_irq)
|
||||
|
||||
static Property mc146818rtc_properties[] = {
|
||||
DEFINE_PROP_INT32("base_year", RTCState, base_year, 1980),
|
||||
DEFINE_PROP_UINT16("iobase", RTCState, io_base, RTC_ISA_BASE),
|
||||
DEFINE_PROP_UINT8("irq", RTCState, isairq, RTC_ISA_IRQ),
|
||||
DEFINE_PROP_LOSTTICKPOLICY("lost_tick_policy", RTCState,
|
||||
lost_tick_policy, LOST_TICK_POLICY_DISCARD),
|
||||
@@ -1028,7 +1031,7 @@ static void rtc_build_aml(AcpiDevAmlIf *adev, Aml *scope)
|
||||
* does, even though qemu only responds to the first two ports.
|
||||
*/
|
||||
crs = aml_resource_template();
|
||||
aml_append(crs, aml_io(AML_DECODE16, RTC_ISA_BASE, RTC_ISA_BASE,
|
||||
aml_append(crs, aml_io(AML_DECODE16, s->io_base, s->io_base,
|
||||
0x01, 0x08));
|
||||
aml_append(crs, aml_irq_no_flags(s->isairq));
|
||||
|
||||
|
||||
+1
-1
@@ -334,7 +334,7 @@ static void ebus_realize(PCIDevice *pci_dev, Error **errp)
|
||||
parallel_hds_isa_init(s->isa_bus, MAX_PARALLEL_PORTS);
|
||||
|
||||
/* Keyboard */
|
||||
isa_create_simple(s->isa_bus, "i8042");
|
||||
isa_create_simple(s->isa_bus, TYPE_I8042);
|
||||
|
||||
/* Floppy */
|
||||
for (i = 0; i < MAX_FD; i++) {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user