[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v9 21/27] ich9: APIs for pc guest info
From: |
Michael S. Tsirkin |
Subject: |
[Qemu-devel] [PATCH v9 21/27] ich9: APIs for pc guest info |
Date: |
Mon, 7 Oct 2013 12:36:28 +0300 |
This adds APIs that will be used to fill in
acpi tables, implemented using QOM,
to various ich9 components.
Some information is still missing in QOM,
so we fall back on lookups by type instead.
Reviewed-by: Gerd Hoffmann <address@hidden>
Tested-by: Gerd Hoffmann <address@hidden>
Signed-off-by: Michael S. Tsirkin <address@hidden>
---
include/hw/acpi/ich9.h | 2 ++
include/hw/i386/ich9.h | 2 ++
include/hw/pci-host/q35.h | 2 ++
hw/acpi/ich9.c | 24 ++++++++++++++++++++++++
hw/isa/lpc_ich9.c | 40 ++++++++++++++++++++++++++++++++++++++++
hw/pci-host/q35.c | 10 ++++++++++
6 files changed, 80 insertions(+)
diff --git a/include/hw/acpi/ich9.h b/include/hw/acpi/ich9.h
index b1fe71f..82fcf9f 100644
--- a/include/hw/acpi/ich9.h
+++ b/include/hw/acpi/ich9.h
@@ -49,4 +49,6 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
void ich9_pm_iospace_update(ICH9LPCPMRegs *pm, uint32_t pm_io_base);
extern const VMStateDescription vmstate_ich9_pm;
+void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp);
+
#endif /* HW_ACPI_ICH9_H */
diff --git a/include/hw/i386/ich9.h b/include/hw/i386/ich9.h
index c5f637b..4a68b35 100644
--- a/include/hw/i386/ich9.h
+++ b/include/hw/i386/ich9.h
@@ -66,6 +66,8 @@ typedef struct ICH9LPCState {
qemu_irq *ioapic;
} ICH9LPCState;
+Object *ich9_lpc_find(void);
+
#define Q35_MASK(bit, ms_bit, ls_bit) \
((uint##bit##_t)(((1ULL << ((ms_bit) + 1)) - 1) & ~((1ULL << ls_bit) - 1)))
diff --git a/include/hw/pci-host/q35.h b/include/hw/pci-host/q35.h
index 6eb7ab6..f9db770 100644
--- a/include/hw/pci-host/q35.h
+++ b/include/hw/pci-host/q35.h
@@ -156,4 +156,6 @@ typedef struct Q35PCIHost {
#define MCH_PCIE_DEV 1
#define MCH_PCIE_FUNC 0
+uint64_t mch_mcfg_base(void);
+
#endif /* HW_Q35_H */
diff --git a/hw/acpi/ich9.c b/hw/acpi/ich9.c
index 3fb443d..7e0429e 100644
--- a/hw/acpi/ich9.c
+++ b/hw/acpi/ich9.c
@@ -24,6 +24,7 @@
* GNU GPL, version 2 or (at your option) any later version.
*/
#include "hw/hw.h"
+#include "qapi/visitor.h"
#include "hw/i386/pc.h"
#include "hw/pci/pci.h"
#include "qemu/timer.h"
@@ -228,3 +229,26 @@ void ich9_pm_init(PCIDevice *lpc_pci, ICH9LPCPMRegs *pm,
pm->powerdown_notifier.notify = pm_powerdown_req;
qemu_register_powerdown_notifier(&pm->powerdown_notifier);
}
+
+static void ich9_pm_get_gpe0_blk(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ ICH9LPCPMRegs *pm = opaque;
+ uint32_t value = pm->pm_io_base + ICH9_PMIO_GPE0_STS;
+
+ visit_type_uint32(v, &value, name, errp);
+}
+
+void ich9_pm_add_properties(Object *obj, ICH9LPCPMRegs *pm, Error **errp)
+{
+ static const uint32_t gpe0_len = ICH9_PMIO_GPE0_LEN;
+
+ object_property_add_uint32_ptr(obj, ACPI_PM_PROP_PM_IO_BASE,
+ &pm->pm_io_base, errp);
+ object_property_add(obj, ACPI_PM_PROP_GPE0_BLK, "uint32",
+ ich9_pm_get_gpe0_blk,
+ NULL, NULL, pm, NULL);
+ object_property_add_uint32_ptr(obj, ACPI_PM_PROP_GPE0_BLK_LEN,
+ &gpe0_len, errp);
+}
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index 5633d08..19b2198 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -29,6 +29,7 @@
*/
#include "qemu-common.h"
#include "hw/hw.h"
+#include "qapi/visitor.h"
#include "qemu/range.h"
#include "hw/isa/isa.h"
#include "hw/sysbus.h"
@@ -525,6 +526,43 @@ static const MemoryRegionOps ich9_rst_cnt_ops = {
.endianness = DEVICE_LITTLE_ENDIAN
};
+Object *ich9_lpc_find(void)
+{
+ bool ambig;
+ Object *o = object_resolve_path_type("", TYPE_ICH9_LPC_DEVICE, &ambig);
+
+ if (ambig) {
+ return NULL;
+ }
+ return o;
+}
+
+static void ich9_lpc_get_sci_int(Object *obj, Visitor *v,
+ void *opaque, const char *name,
+ Error **errp)
+{
+ ICH9LPCState *lpc = ICH9_LPC_DEVICE(obj);
+ uint32_t value = ich9_lpc_sci_irq(lpc);
+
+ visit_type_uint32(v, &value, name, errp);
+}
+
+static void ich9_lpc_add_properties(ICH9LPCState *lpc)
+{
+ static const uint8_t acpi_enable_cmd = ICH9_APM_ACPI_ENABLE;
+ static const uint8_t acpi_disable_cmd = ICH9_APM_ACPI_DISABLE;
+
+ object_property_add(OBJECT(lpc), ACPI_PM_PROP_SCI_INT, "uint32",
+ ich9_lpc_get_sci_int,
+ NULL, NULL, NULL, NULL);
+ object_property_add_uint8_ptr(OBJECT(lpc), ACPI_PM_PROP_ACPI_ENABLE_CMD,
+ &acpi_enable_cmd, NULL);
+ object_property_add_uint8_ptr(OBJECT(lpc), ACPI_PM_PROP_ACPI_DISABLE_CMD,
+ &acpi_disable_cmd, NULL);
+
+ ich9_pm_add_properties(OBJECT(lpc), &lpc->pm, NULL);
+}
+
static int ich9_lpc_initfn(PCIDevice *d)
{
ICH9LPCState *lpc = ICH9_LPC_DEVICE(d);
@@ -552,6 +590,8 @@ static int ich9_lpc_initfn(PCIDevice *d)
ICH9_RST_CNT_IOPORT, &lpc->rst_cnt_mem,
1);
+ ich9_lpc_add_properties(lpc);
+
return 0;
}
diff --git a/hw/pci-host/q35.c b/hw/pci-host/q35.c
index a051b58..50063f8 100644
--- a/hw/pci-host/q35.c
+++ b/hw/pci-host/q35.c
@@ -389,6 +389,16 @@ static int mch_init(PCIDevice *d)
return 0;
}
+uint64_t mch_mcfg_base(void)
+{
+ bool ambiguous;
+ Object *o = object_resolve_path_type("", TYPE_MCH_PCI_DEVICE, &ambiguous);
+ if (!o) {
+ return 0;
+ }
+ return MCH_HOST_BRIDGE_PCIEXBAR_DEFAULT;
+}
+
static void mch_class_init(ObjectClass *klass, void *data)
{
PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
--
MST
- [Qemu-devel] [PATCH v9 11/27] i386: add ACPI table files from seabios, (continued)
- [Qemu-devel] [PATCH v9 11/27] i386: add ACPI table files from seabios, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 12/27] acpi: add rules to compile ASL source, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 13/27] acpi: pre-compiled ASL files, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 14/27] acpi: ssdt pcihp: updat generated file, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 15/27] loader: use file path size from fw_cfg.h, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 16/27] i386: add bios linker/loader, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 17/27] loader: allow adding ROMs in done callbacks, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 18/27] i386: define pc guest info, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 19/27] acpi/piix: add macros for acpi property names, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 20/27] piix: APIs for pc guest info, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 21/27] ich9: APIs for pc guest info,
Michael S. Tsirkin <=
- [Qemu-devel] [PATCH v9 22/27] pvpanic: add API to access io port, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 23/27] hpet: add API to find it, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 24/27] i386: ACPI table generation code from seabios, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 25/27] ssdt: fix PBLK length, Michael S. Tsirkin, 2013/10/07
- [Qemu-devel] [PATCH v9 26/27] ssdt-proc: update generated file, Michael S. Tsirkin, 2013/10/07
- Re: [Qemu-devel] [PATCH v9 00/27] qemu: generate acpi tables for the guest, Igor Mammedov, 2013/10/07
- [Qemu-devel] [PATCH v9 27/27] don't post me: update bios, Michael S. Tsirkin, 2013/10/07
- Re: [Qemu-devel] [PATCH v9 00/27] qemu: generate acpi tables for the guest, Andreas Färber, 2013/10/07
- Re: [Qemu-devel] [PATCH v9 00/27] qemu: generate acpi tables for the guest, Michael S. Tsirkin, 2013/10/13