All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Ostrovsky <boris.ostrovsky@oracle.com>
To: xen-devel@lists.xen.org
Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com,
	ian.jackson@eu.citrix.com, julien.grall@arm.com,
	jbeulich@suse.com, zhaoshenglong@huawei.com,
	boris.ostrovsky@oracle.com, roger.pau@citrix.com
Subject: [PATCH v1 02/20] acpi/hvmloader: Move acpi_info initialization out of ACPI code
Date: Tue,  5 Jul 2016 15:05:01 -0400	[thread overview]
Message-ID: <1467745519-9868-3-git-send-email-boris.ostrovsky@oracle.com> (raw)
In-Reply-To: <1467745519-9868-1-git-send-email-boris.ostrovsky@oracle.com>

acpi_info can be initialized by hvmloader itself. Now ACPI code
doesn't need to use hvmloader-private variables/routines such as
uart_exists(), lpt_exists() etc.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
---
Changes in v1:
* Create libacpi.h for libacpi interface definitions
* Move RSDP struct acpi_info pointers into struct acpi_config 

 tools/firmware/hvmloader/acpi/acpi2_0.h |   11 ----
 tools/firmware/hvmloader/acpi/build.c   |   48 +++---------------
 tools/firmware/hvmloader/acpi/libacpi.h |   80 +++++++++++++++++++++++++++++++
 tools/firmware/hvmloader/seabios.c      |    1 +
 tools/firmware/hvmloader/util.c         |   21 ++++++++-
 5 files changed, 109 insertions(+), 52 deletions(-)
 create mode 100644 tools/firmware/hvmloader/acpi/libacpi.h

diff --git a/tools/firmware/hvmloader/acpi/acpi2_0.h b/tools/firmware/hvmloader/acpi/acpi2_0.h
index 78eb43d..ddcee74 100644
--- a/tools/firmware/hvmloader/acpi/acpi2_0.h
+++ b/tools/firmware/hvmloader/acpi/acpi2_0.h
@@ -449,17 +449,6 @@ struct acpi_20_slit {
 #define ACPI_2_0_SRAT_REVISION 0x01
 #define ACPI_2_0_SLIT_REVISION 0x01
 
-#pragma pack ()
-
-struct acpi_config {
-    unsigned char *dsdt_anycpu;
-    int dsdt_anycpu_len;
-    unsigned char *dsdt_15cpu;
-    int dsdt_15cpu_len;
-};
-
-void acpi_build_tables(struct acpi_config *config, unsigned int physical);
-
 #endif /* _ACPI_2_0_H_ */
 
 /*
diff --git a/tools/firmware/hvmloader/acpi/build.c b/tools/firmware/hvmloader/acpi/build.c
index 1f7103e..1092b4e 100644
--- a/tools/firmware/hvmloader/acpi/build.c
+++ b/tools/firmware/hvmloader/acpi/build.c
@@ -16,6 +16,7 @@
  */
 
 #include "acpi2_0.h"
+#include "libacpi.h"
 #include "ssdt_s3.h"
 #include "ssdt_s4.h"
 #include "ssdt_tpm.h"
@@ -38,24 +39,6 @@ extern struct acpi_20_fadt Fadt;
 extern struct acpi_20_facs Facs;
 extern struct acpi_20_waet Waet;
 
-/*
- * Located at ACPI_INFO_PHYSICAL_ADDRESS.
- *
- * This must match the Field("BIOS"....) definition in the DSDT.
- */
-struct acpi_info {
-    uint8_t  com1_present:1;    /* 0[0] - System has COM1? */
-    uint8_t  com2_present:1;    /* 0[1] - System has COM2? */
-    uint8_t  lpt1_present:1;    /* 0[2] - System has LPT1? */
-    uint8_t  hpet_present:1;    /* 0[3] - System has HPET? */
-    uint16_t nr_cpus;           /* 2    - Number of CPUs */
-    uint32_t pci_min, pci_len;  /* 4, 8 - PCI I/O hole boundaries */
-    uint32_t madt_csum_addr;    /* 12   - Address of MADT checksum */
-    uint32_t madt_lapic0_addr;  /* 16   - Address of first MADT LAPIC struct */
-    uint32_t vm_gid_addr;       /* 20   - Address of VM generation id buffer */
-    uint64_t pci_hi_min, pci_hi_len; /* 24, 32 - PCI I/O hole boundaries */
-};
-
 static void set_checksum(
     void *table, uint32_t checksum_offset, uint32_t length)
 {
@@ -358,7 +341,7 @@ static int construct_secondary_tables(unsigned long *table_ptrs,
     }
 
     /* HPET. */
-    if ( hpet_exists(ACPI_HPET_ADDRESS) )
+    if ( info->hpet_present )
     {
         hpet = construct_hpet();
         if (!hpet) return -1;
@@ -493,9 +476,8 @@ static int new_vm_gid(struct acpi_info *acpi_info)
     return 1;
 }
 
-void acpi_build_tables(struct acpi_config *config, unsigned int physical)
+void acpi_build_tables(struct acpi_config *config)
 {
-    struct acpi_info *acpi_info;
     struct acpi_20_rsdp *rsdp;
     struct acpi_20_rsdt *rsdt;
     struct acpi_20_xsdt *xsdt;
@@ -506,11 +488,6 @@ void acpi_build_tables(struct acpi_config *config, unsigned int physical)
     unsigned long        secondary_tables[ACPI_MAX_SECONDARY_TABLES];
     int                  nr_secondaries, i;
 
-    /* Allocate and initialise the acpi info area. */
-    mem_hole_populate_ram(ACPI_INFO_PHYSICAL_ADDRESS >> PAGE_SHIFT, 1);
-    acpi_info = (struct acpi_info *)ACPI_INFO_PHYSICAL_ADDRESS;
-    memset(acpi_info, 0, sizeof(*acpi_info));
-
     /*
      * Fill in high-memory data structures, starting at @buf.
      */
@@ -570,7 +547,8 @@ void acpi_build_tables(struct acpi_config *config, unsigned int physical)
                  offsetof(struct acpi_header, checksum),
                  sizeof(struct acpi_20_fadt));
 
-    nr_secondaries = construct_secondary_tables(secondary_tables, acpi_info);
+    nr_secondaries = construct_secondary_tables(secondary_tables,
+                                                &config->ainfo);
     if ( nr_secondaries < 0 )
         goto oom;
 
@@ -603,7 +581,7 @@ void acpi_build_tables(struct acpi_config *config, unsigned int physical)
     /*
      * Fill in low-memory data structures: acpi_info and RSDP.
      */
-    rsdp = (struct acpi_20_rsdp *)physical;
+    rsdp = (struct acpi_20_rsdp *)config->rsdp;
 
     memcpy(rsdp, &Rsdp, sizeof(struct acpi_20_rsdp));
     rsdp->rsdt_address = (unsigned long)rsdt;
@@ -615,20 +593,10 @@ void acpi_build_tables(struct acpi_config *config, unsigned int physical)
                  offsetof(struct acpi_20_rsdp, extended_checksum),
                  sizeof(struct acpi_20_rsdp));
 
-    if ( !new_vm_gid(acpi_info) )
+    if ( !new_vm_gid(&config->ainfo) )
         goto oom;
 
-    acpi_info->com1_present = uart_exists(0x3f8);
-    acpi_info->com2_present = uart_exists(0x2f8);
-    acpi_info->lpt1_present = lpt_exists(0x378);
-    acpi_info->hpet_present = hpet_exists(ACPI_HPET_ADDRESS);
-    acpi_info->pci_min = pci_mem_start;
-    acpi_info->pci_len = pci_mem_end - pci_mem_start;
-    if ( pci_hi_mem_end > pci_hi_mem_start )
-    {
-        acpi_info->pci_hi_min = pci_hi_mem_start;
-        acpi_info->pci_hi_len = pci_hi_mem_end - pci_hi_mem_start;
-    }
+    *(struct acpi_info *)config->ainfop = config->ainfo;
 
     return;
 
diff --git a/tools/firmware/hvmloader/acpi/libacpi.h b/tools/firmware/hvmloader/acpi/libacpi.h
new file mode 100644
index 0000000..098eee1
--- /dev/null
+++ b/tools/firmware/hvmloader/acpi/libacpi.h
@@ -0,0 +1,80 @@
+/******************************************************************************
+ * libacpi.h
+ * 
+ * libacpi interfaces
+ * 
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved.
+ */
+
+
+#ifndef __LIBACPI_H__
+#define __LIBACPI_H__
+
+#pragma pack ()
+
+/*
+ * This must match the Field("BIOS"....) definition in the DSDT.
+ */
+struct acpi_info {
+    uint8_t  com1_present:1;    /* 0[0] - System has COM1? */
+    uint8_t  com2_present:1;    /* 0[1] - System has COM2? */
+    uint8_t  lpt1_present:1;    /* 0[2] - System has LPT1? */
+    uint8_t  hpet_present:1;    /* 0[3] - System has HPET? */
+    uint16_t nr_cpus;           /* 2    - Number of CPUs */
+    uint32_t pci_min, pci_len;  /* 4, 8 - PCI I/O hole boundaries */
+    uint32_t madt_csum_addr;    /* 12   - Address of MADT checksum */
+    uint32_t madt_lapic0_addr;  /* 16   - Address of first MADT LAPIC struct */
+    uint32_t vm_gid_addr;       /* 20   - Address of VM generation id buffer */
+    uint64_t pci_hi_min, pci_hi_len; /* 24, 32 - PCI I/O hole boundaries */
+};
+
+struct acpi_config {
+    const unsigned char *dsdt_anycpu;
+    unsigned int dsdt_anycpu_len;
+    const unsigned char *dsdt_15cpu;
+    unsigned int dsdt_15cpu_len;
+
+    /* May have some fields updated by acpi_build_table() */
+    struct acpi_info ainfo;
+    /*
+     * Address where acpi_info should be placed.
+     * This must match the OperationRegion(BIOS, SystemMemory, ....)
+     * definition in the DSDT
+     */
+    unsigned int ainfop;
+
+    /* RSDP address */
+    unsigned int rsdp;
+};
+
+void acpi_build_tables(struct acpi_config *config);
+
+#endif /* __LIBACPI_H__ */
+
+/*
+ * Local variables:
+ * mode: C
+ * c-file-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff --git a/tools/firmware/hvmloader/seabios.c b/tools/firmware/hvmloader/seabios.c
index 9f66a79..2fbc3af 100644
--- a/tools/firmware/hvmloader/seabios.c
+++ b/tools/firmware/hvmloader/seabios.c
@@ -26,6 +26,7 @@
 
 #include "smbios_types.h"
 #include "acpi/acpi2_0.h"
+#include "acpi/libacpi.h"
 
 #define ROM_INCLUDE_SEABIOS
 #include "roms.inc"
diff --git a/tools/firmware/hvmloader/util.c b/tools/firmware/hvmloader/util.c
index 9af29b1..4293efa 100644
--- a/tools/firmware/hvmloader/util.c
+++ b/tools/firmware/hvmloader/util.c
@@ -22,6 +22,7 @@
 #include "hypercall.h"
 #include "ctype.h"
 #include "acpi/acpi2_0.h"
+#include "acpi/libacpi.h"
 #include <stdint.h>
 #include <xen/xen.h>
 #include <xen/memory.h>
@@ -860,7 +861,25 @@ int hpet_exists(unsigned long hpet_base)
 void hvmloader_acpi_build_tables(struct acpi_config *config,
                                  unsigned int physical)
 {
-    acpi_build_tables(config, physical);
+    /* Allocate and initialise the acpi info area. */
+    mem_hole_populate_ram(ACPI_INFO_PHYSICAL_ADDRESS >> PAGE_SHIFT, 1);
+
+    config->ainfo.com1_present = uart_exists(0x3f8);
+    config->ainfo.com2_present = uart_exists(0x2f8);
+    config->ainfo.lpt1_present = lpt_exists(0x378);
+    config->ainfo.hpet_present = hpet_exists(ACPI_HPET_ADDRESS);
+    config->ainfo.pci_min = pci_mem_start;
+    config->ainfo.pci_len = pci_mem_end - pci_mem_start;
+    if ( pci_hi_mem_end > pci_hi_mem_start )
+    {
+        config->ainfo.pci_hi_min = pci_hi_mem_start;
+        config->ainfo.pci_hi_len = pci_hi_mem_end - pci_hi_mem_start;
+    }
+
+    config->rsdp = physical;
+    config->ainfop = ACPI_INFO_PHYSICAL_ADDRESS;
+
+    acpi_build_tables(config);
 }
 
 /*
-- 
1.7.1


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

  parent reply	other threads:[~2016-07-05 19:05 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-05 19:04 [PATCH v1 00/20] Make ACPI builder available to components other than hvmloader Boris Ostrovsky
2016-07-05 19:05 ` [PATCH v1 01/20] hvmloader: Provide hvmloader_acpi_build_tables() Boris Ostrovsky
2016-07-06 14:47   ` Konrad Rzeszutek Wilk
2016-07-08  9:52   ` Jan Beulich
2016-07-05 19:05 ` Boris Ostrovsky [this message]
2016-07-07 16:58   ` [PATCH v1 02/20] acpi/hvmloader: Move acpi_info initialization out of ACPI code Ian Jackson
2016-07-07 17:09     ` Boris Ostrovsky
2016-07-07 17:15       ` Wei Liu
2016-07-07 17:45         ` Boris Ostrovsky
2016-07-08 15:06           ` Konrad Rzeszutek Wilk
2016-07-08 15:50             ` Ian Jackson
2016-07-08 15:57               ` Boris Ostrovsky
2016-07-08 16:21                 ` Ian Jackson
2016-07-11 12:10                 ` Wei Liu
2016-07-11 14:47                   ` Lars Kurth
2016-07-11 14:54                     ` Konrad Rzeszutek Wilk
2016-07-11 15:06                       ` Boris Ostrovsky
2016-07-11 15:38                         ` Ian Jackson
2016-07-11 15:47                           ` Ian Jackson
2016-07-11 16:07                           ` Boris Ostrovsky
2016-07-08 10:10   ` Jan Beulich
2016-07-08 14:39     ` Boris Ostrovsky
2016-07-08 15:11       ` Jan Beulich
2016-07-08 16:14         ` Boris Ostrovsky
2016-08-01 10:09           ` Jan Beulich
2016-08-01 14:06             ` Boris Ostrovsky
2016-08-01 14:18               ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 03/20] acpi/hvmloader: Initialize vm_gid data outside " Boris Ostrovsky
2016-07-08 10:18   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 04/20] acpi/hvmloader: Decide which SSDTs to install in hvmloader Boris Ostrovsky
2016-07-08 10:27   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 05/20] acpi/hvmloader: Move passthrough initialization from ACPI code Boris Ostrovsky
2016-07-08 10:46   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 06/20] acpi/hvmloader: Collect processor and NUMA info in hvmloader Boris Ostrovsky
2016-07-08 13:36   ` Jan Beulich
2016-07-08 15:08     ` Boris Ostrovsky
2016-07-08 15:14       ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 07/20] acpi/hvmloader: Set TIS header address " Boris Ostrovsky
2016-07-08 13:38   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 08/20] acpi/hvmloader: Make providing IOAPIC in MADT optional Boris Ostrovsky
2016-07-08 13:41   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 09/20] acpi/hvmloader: Build WAET optionally Boris Ostrovsky
2016-07-08 13:42   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 10/20] acpi/hvmloader: Replace mem_alloc() and virt_to_phys() with memory ops Boris Ostrovsky
2016-07-08 13:58   ` Jan Beulich
2016-07-08 15:23     ` Boris Ostrovsky
2016-07-08 15:35       ` Jan Beulich
2016-07-08 16:19         ` Boris Ostrovsky
2016-07-19  9:11           ` Jan Beulich
2016-07-19 14:08             ` Boris Ostrovsky
2016-07-05 19:05 ` [PATCH v1 11/20] acpi/hvmloader: Translate all addresses when assigning addresses in ACPI tables Boris Ostrovsky
2016-07-08 14:31   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 12/20] acpi/hvmloader: Link ACPI object files directly Boris Ostrovsky
2016-07-08 14:51   ` Jan Beulich
2016-07-08 15:41     ` Boris Ostrovsky
2016-07-05 19:05 ` [PATCH v1 13/20] acpi/hvmloader: Include file/paths adjustments Boris Ostrovsky
2016-07-08 15:51   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 14/20] acpi: Move ACPI code to tools/libacpi Boris Ostrovsky
2016-08-03 16:00   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 15/20] x86: Add more checks verifying that PIT/PIC/IOAPIC are emulated Boris Ostrovsky
2016-08-03 16:04   ` Jan Beulich
2016-07-05 19:05 ` [PATCH v1 16/20] x86: Allow LAPIC-only emulation_flags for HVM guests Boris Ostrovsky
2016-08-03 16:11   ` Jan Beulich
2016-08-03 16:15     ` Andrew Cooper
2016-07-05 19:05 ` [PATCH v1 17/20] libacpi: Build DSDT for PVH guests Boris Ostrovsky
2016-07-05 19:05 ` [PATCH v1 18/20] libxl/acpi: Add ACPI e820 entry Boris Ostrovsky
2016-07-06 10:00   ` Julien Grall
2016-07-06 15:43     ` Boris Ostrovsky
2016-07-05 19:05 ` [PATCH v1 19/20] libxl/pvhv2: Include APIC page in MMIO hole for PVHv2 guests Boris Ostrovsky
2016-07-07 16:47   ` Wei Liu
2016-07-07 17:02     ` Boris Ostrovsky
2016-07-07 17:16       ` Wei Liu
2016-07-05 19:05 ` [PATCH v1 20/20] libxl/acpi: Build ACPI tables for HVMlite guests Boris Ostrovsky
2016-07-06 11:05   ` Julien Grall
2016-07-06 15:50     ` Boris Ostrovsky
2016-07-06 16:04       ` Julien Grall
2016-07-06 16:30         ` Boris Ostrovsky
2016-07-06 17:03           ` Julien Grall
2016-07-06 17:33             ` Boris Ostrovsky
2016-07-07  8:38               ` Jan Beulich
2016-07-07 15:08                 ` Boris Ostrovsky
2016-07-07 15:12                   ` Julien Grall
2016-07-07 15:24                     ` Jan Beulich
2016-07-08 10:55   ` Wei Liu
2016-07-08 14:48     ` Boris Ostrovsky
2016-07-08 16:07       ` Wei Liu
2016-07-08 17:20         ` Boris Ostrovsky
2016-07-11 10:47           ` Wei Liu
2016-07-11 13:33             ` Boris Ostrovsky
2016-07-11 13:39               ` Julien Grall
2016-07-11 13:42                 ` Wei Liu
2016-07-11 13:58                   ` Julien Grall
2016-07-11 13:41               ` Wei Liu
2016-07-11 14:40                 ` Boris Ostrovsky
2016-07-12 14:30                   ` Wei Liu
2016-07-11 14:00               ` Anthony PERARD
2016-07-06 16:04 ` [PATCH v1 00/20] Make ACPI builder available to components other than hvmloader Roger Pau Monné
2016-07-06 16:32   ` Boris Ostrovsky
2016-07-07  8:35     ` Jan Beulich
2016-07-07  9:14       ` Julien Grall
2016-07-07  9:20         ` Jan Beulich
2016-07-07  9:29           ` Julien Grall
2016-07-07 15:04       ` Boris Ostrovsky
2016-07-07 15:10         ` Jan Beulich

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=1467745519-9868-3-git-send-email-boris.ostrovsky@oracle.com \
    --to=boris.ostrovsky@oracle.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=ian.jackson@eu.citrix.com \
    --cc=jbeulich@suse.com \
    --cc=julien.grall@arm.com \
    --cc=roger.pau@citrix.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    --cc=zhaoshenglong@huawei.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.