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, kraxel@redhat.com
Subject: [Qemu-devel] [PATCH v6 20/26] piix: APIs for pc guest info
Date: Sun, 29 Sep 2013 13:59:22 +0300	[thread overview]
Message-ID: <1380452123-5989-21-git-send-email-mst@redhat.com> (raw)
In-Reply-To: <1380452123-5989-1-git-send-email-mst@redhat.com>

This adds APIs that will be used to fill in guest acpi tables.
Some required information is still lacking in QOM, so we
fall back on lookups by type and returning explicit types.

Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
---
 include/hw/acpi/piix4.h |  8 ++++++++
 include/hw/i386/pc.h    |  1 +
 hw/acpi/piix4.c         | 44 ++++++++++++++++++++++++++++++++++++++++----
 hw/pci-host/piix.c      |  8 ++++++++
 4 files changed, 57 insertions(+), 4 deletions(-)
 create mode 100644 include/hw/acpi/piix4.h

diff --git a/include/hw/acpi/piix4.h b/include/hw/acpi/piix4.h
new file mode 100644
index 0000000..65e6fd7
--- /dev/null
+++ b/include/hw/acpi/piix4.h
@@ -0,0 +1,8 @@
+#ifndef HW_ACPI_PIIX4_H
+#define HW_ACPI_PIIX4_H
+
+#include "qemu/typedefs.h"
+
+Object *piix4_pm_find(void);
+
+#endif
diff --git a/include/hw/i386/pc.h b/include/hw/i386/pc.h
index f966cef..2a5d996 100644
--- a/include/hw/i386/pc.h
+++ b/include/hw/i386/pc.h
@@ -193,6 +193,7 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state, int *piix_devfn,
                     MemoryRegion *pci_memory,
                     MemoryRegion *ram_memory);
 
+PCIBus *find_i440fx(void);
 /* piix4.c */
 extern PCIDevice *piix4_dev;
 int piix4_init(PCIBus *bus, ISABus **isa_bus, int devfn);
diff --git a/hw/acpi/piix4.c b/hw/acpi/piix4.c
index 4b8c1da..3bcd890 100644
--- a/hw/acpi/piix4.c
+++ b/hw/acpi/piix4.c
@@ -29,6 +29,7 @@
 #include "exec/ioport.h"
 #include "hw/nvram/fw_cfg.h"
 #include "exec/address-spaces.h"
+#include "hw/acpi/piix4.h"
 
 //#define DEBUG
 
@@ -69,6 +70,8 @@ typedef struct PIIX4PMState {
     /*< public >*/
 
     MemoryRegion io;
+    uint32_t io_base;
+
     MemoryRegion io_gpe;
     MemoryRegion io_pci;
     MemoryRegion io_cpu;
@@ -152,14 +155,13 @@ static void apm_ctrl_changed(uint32_t val, void *arg)
 static void pm_io_space_update(PIIX4PMState *s)
 {
     PCIDevice *d = PCI_DEVICE(s);
-    uint32_t pm_io_base;
 
-    pm_io_base = le32_to_cpu(*(uint32_t *)(d->config + 0x40));
-    pm_io_base &= 0xffc0;
+    s->io_base = le32_to_cpu(*(uint32_t *)(d->config + 0x40));
+    s->io_base &= 0xffc0;
 
     memory_region_transaction_begin();
     memory_region_set_enabled(&s->io, d->config[0x80] & 1);
-    memory_region_set_address(&s->io, pm_io_base);
+    memory_region_set_address(&s->io, s->io_base);
     memory_region_transaction_commit();
 }
 
@@ -407,6 +409,28 @@ static void piix4_pm_machine_ready(Notifier *n, void *opaque)
         (memory_region_present(io_as, 0x2f8) ? 0x90 : 0);
 }
 
+static void piix4_pm_add_propeties(PIIX4PMState *s)
+{
+    static const uint8_t acpi_enable_cmd = ACPI_ENABLE;
+    static const uint8_t acpi_disable_cmd = ACPI_DISABLE;
+    static const uint32_t gpe0_blk = GPE_BASE;
+    static const uint32_t gpe0_blk_len = GPE_LEN;
+    static const uint16_t sci_int = 9;
+
+    object_property_add_uint8_ptr(OBJECT(s), ACPI_PM_PROP_ACPI_ENABLE_CMD,
+                                  &acpi_enable_cmd, NULL);
+    object_property_add_uint8_ptr(OBJECT(s), ACPI_PM_PROP_ACPI_DISABLE_CMD,
+                                  &acpi_disable_cmd, NULL);
+    object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_GPE0_BLK,
+                                  &gpe0_blk, NULL);
+    object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_GPE0_BLK_LEN,
+                                  &gpe0_blk_len, NULL);
+    object_property_add_uint16_ptr(OBJECT(s), ACPI_PM_PROP_SCI_INT,
+                                  &sci_int, NULL);
+    object_property_add_uint32_ptr(OBJECT(s), ACPI_PM_PROP_PM_IO_BASE,
+                                  &s->io_base, NULL);
+}
+
 static int piix4_pm_initfn(PCIDevice *dev)
 {
     PIIX4PMState *s = PIIX4_PM(dev);
@@ -456,9 +480,21 @@ static int piix4_pm_initfn(PCIDevice *dev)
 
     piix4_acpi_system_hot_add_init(pci_address_space_io(dev), dev->bus, s);
 
+    piix4_pm_add_propeties(s);
     return 0;
 }
 
+Object *piix4_pm_find(void)
+{
+    bool ambig;
+    Object *o = object_resolve_path_type("", TYPE_PIIX4_PM, &ambig);
+
+    if (ambig || !o) {
+        return NULL;
+    }
+    return o;
+}
+
 i2c_bus *piix4_pm_init(PCIBus *bus, int devfn, uint32_t smb_io_base,
                        qemu_irq sci_irq, qemu_irq smi_irq,
                        int kvm_enabled, FWCfgState *fw_cfg)
diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index c041149..bad3953 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -416,6 +416,14 @@ PCIBus *i440fx_init(PCII440FXState **pi440fx_state,
     return b;
 }
 
+PCIBus *find_i440fx(void)
+{
+    PCIHostState *s = OBJECT_CHECK(PCIHostState,
+                                   object_resolve_path("/machine/i440fx", NULL),
+                                   TYPE_PCI_HOST_BRIDGE);
+    return s ? s->bus : NULL;
+}
+
 /* PIIX3 PCI to ISA bridge */
 static void piix3_set_irq_pic(PIIX3State *piix3, int pic_irq)
 {
-- 
MST

  parent reply	other threads:[~2013-09-29 10:57 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-29 10:58 [Qemu-devel] [PATCH v6 00/26] qemu: generate acpi tables for the guest Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 01/26] qemu: add Error to typedefs Michael S. Tsirkin
2013-09-30 13:10   ` Igor Mammedov
2013-09-30 14:40     ` Michael S. Tsirkin
2013-09-30 15:00       ` Igor Mammedov
2013-09-30 15:10       ` Peter Maydell
2013-09-30 15:49         ` Markus Armbruster
2013-09-30 16:09           ` Michael S. Tsirkin
2013-09-30 17:38             ` Markus Armbruster
2013-09-30 15:50         ` Michael S. Tsirkin
2013-09-30 15:55           ` Andreas Färber
2013-09-30 16:09             ` Michael S. Tsirkin
2013-10-01 13:46               ` Igor Mammedov
2013-10-01 14:15                 ` Michael S. Tsirkin
2013-10-01 15:44                   ` [Qemu-devel] [PATCH] cleanup object.h: include error.h directly Igor Mammedov
2013-09-30 16:16             ` [Qemu-devel] [PATCH v6 01/26] qemu: add Error to typedefs Markus Armbruster
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 02/26] qom: pull in qemu/typedefs Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 03/26] qom: cleanup struct Error references Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 04/26] qom: add pointer to int property helpers Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 05/26] fw_cfg: interface to trigger callback on read Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 06/26] loader: support for unmapped ROM blobs Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 07/26] pcie_host: expose UNMAPPED macro Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 08/26] pcie_host: expose address format Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 09/26] q35: use macro for MCFG property name Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 10/26] q35: expose mmcfg size as a property Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 11/26] i386: add ACPI table files from seabios Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 12/26] acpi: add rules to compile ASL source Michael S. Tsirkin
2013-09-29 10:58 ` [Qemu-devel] [PATCH v6 13/26] acpi: pre-compiled ASL files Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 14/26] acpi: ssdt pcihp: updat generated file Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 15/26] loader: use file path size from fw_cfg.h Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 16/26] i386: add bios linker/loader Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 17/26] loader: allow adding ROMs in done callbacks Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 18/26] i386: define pc guest info Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 19/26] acpi/piix: add macros for acpi property names Michael S. Tsirkin
2013-09-29 10:59 ` Michael S. Tsirkin [this message]
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 21/26] ich9: APIs for pc guest info Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 22/26] pvpanic: add API to access io port Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 23/26] hpet: add API to find it Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 24/26] i386: ACPI table generation code from seabios Michael S. Tsirkin
2013-09-29 10:59 ` [Qemu-devel] [PATCH v6 25/26] ssdt: fix PBLK length Michael S. Tsirkin
2013-09-29 11:01 ` [Qemu-devel] [PATCH v6 26/26] ssdt-proc: update generated file Michael S. Tsirkin
2013-09-30  7:51 ` [Qemu-devel] [PATCH v6 00/26] qemu: generate acpi tables for the guest Gerd Hoffmann
2013-10-01 10:03 ` Igor Mammedov
2013-10-01 12:16   ` Michael S. Tsirkin
2013-10-01 12:38   ` 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=1380452123-5989-21-git-send-email-mst@redhat.com \
    --to=mst@redhat.com \
    --cc=afaerber@suse.de \
    --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).