qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: qemu-devel@nongnu.org
Cc: pbonzini@redhat.com, afaerber@suse.de,
	Anthony Liguori <anthony@codemonkey.ws>,
	kraxel@redhat.com
Subject: [Qemu-devel] [PATCH v7 22/27] ich9: APIs for pc guest info
Date: Wed, 2 Oct 2013 00:27:25 +0300	[thread overview]
Message-ID: <1380662727-24170-23-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1380662727-24170-1-git-send-email-mst@redhat.com>

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 <kraxel@redhat.com>
Tested-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 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

  parent reply	other threads:[~2013-10-01 21:25 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-10-01 21:26 [Qemu-devel] [PATCH v7 00/27] qemu: generate acpi tables for the guest Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 01/27] qemu: add Error to typedefs Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 02/27] qom: pull in qemu/typedefs Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 03/27] qom: cleanup struct Error references Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 04/27] qom: add pointer to int property helpers Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 05/27] pci: fix up w64 size calculation helper Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 06/27] fw_cfg: interface to trigger callback on read Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 07/27] loader: support for unmapped ROM blobs Michael S. Tsirkin
2013-10-01 21:28   ` Eric Blake
2013-10-02  5:31     ` Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 08/27] pcie_host: expose UNMAPPED macro Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 09/27] pcie_host: expose address format Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 10/27] q35: use macro for MCFG property name Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 11/27] q35: expose mmcfg size as a property Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 12/27] i386: add ACPI table files from seabios Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 13/27] acpi: add rules to compile ASL source Michael S. Tsirkin
2013-10-01 21:26 ` [Qemu-devel] [PATCH v7 14/27] acpi: pre-compiled ASL files Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 15/27] acpi: ssdt pcihp: updat generated file Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 16/27] loader: use file path size from fw_cfg.h Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 17/27] i386: add bios linker/loader Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 18/27] loader: allow adding ROMs in done callbacks Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 19/27] i386: define pc guest info Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 20/27] acpi/piix: add macros for acpi property names Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 21/27] piix: APIs for pc guest info Michael S. Tsirkin
2013-10-01 21:27 ` Michael S. Tsirkin [this message]
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 23/27] pvpanic: add API to access io port Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 24/27] hpet: add API to find it Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 25/27] i386: ACPI table generation code from seabios Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 26/27] ssdt: fix PBLK length Michael S. Tsirkin
2013-10-01 21:27 ` [Qemu-devel] [PATCH v7 27/27] ssdt-proc: update generated file Michael S. Tsirkin
2013-10-02 13:05 ` [Qemu-devel] [PATCH v7 00/27] qemu: generate acpi tables for the guest Igor Mammedov
2013-10-02 13:30   ` Michael S. Tsirkin
2013-10-02 13:52     ` Igor Mammedov
2013-10-02 14:05       ` Michael S. Tsirkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1380662727-24170-23-git-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=afaerber@suse.de \
    --cc=anthony@codemonkey.ws \
    --cc=kraxel@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).