diff mbox

[v4,05/15] acpi/x86: Define ACPI IO registers for PVH guests

Message ID 1480433602-13290-6-git-send-email-boris.ostrovsky@oracle.com (mailing list archive)
State New, archived
Headers show

Commit Message

Boris Ostrovsky Nov. 29, 2016, 3:33 p.m. UTC
Define VCPU available map address (used by AML's PRSC method)
and GPE0 CPU hotplug event number. Use these definitions in mk_dsdt
instead hardcoded values.

These definitions will later be used by both the hypervisor and
the toolstack (initially for PVH guests only), thus they are
placed in public headers.

Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
---
Changes in v4:
* Macros for registers length and offset stay in static_tables.c,
  a comment statig that they should not change without corresponding
  change to struct hvm_hw_acpi is added
* Definitions of EN_ACPI_CPU_MAP* and  XEN_GPE0_CPUHP_BIT are
  moved to include/public/arch-x86/xen.h

 tools/libacpi/mk_dsdt.c           | 7 +++++--
 tools/libacpi/static_tables.c     | 4 ++++
 xen/include/public/arch-x86/xen.h | 7 +++++++
 3 files changed, 16 insertions(+), 2 deletions(-)

Comments

Jan Beulich Dec. 1, 2016, 3:57 p.m. UTC | #1
>>> On 29.11.16 at 16:33, <boris.ostrovsky@oracle.com> wrote:
> --- a/xen/include/public/arch-x86/xen.h
> +++ b/xen/include/public/arch-x86/xen.h
> @@ -291,6 +291,13 @@ struct xen_arch_domainconfig {
>                                       XEN_X86_EMU_PIT)
>      uint32_t emulation_flags;
>  };
> +
> +/* Location of online VCPU bitmap. */
> +#define XEN_ACPI_CPU_MAP             0xaf00
> +#define XEN_ACPI_CPU_MAP_LEN         ((HVM_MAX_VCPUS + 7) / 8)
> +
> +/* GPE0 bit set during CPU hotplug */
> +#define XEN_GPE0_CPUHP_BIT           2

Here I'm unsure - isn't this an ACPI specific register? If so, the name
would better be XEN_ACPI_GPE0_CPUHP_BIT.

With that (or with a good reason why the current name is better)
Reviewed-by: Jan Beulich <jbeulich@suse.com>
but the patch needs re-basing afaict.

Jan
Boris Ostrovsky Dec. 1, 2016, 4:30 p.m. UTC | #2
On 12/01/2016 10:57 AM, Jan Beulich wrote:
>>>> On 29.11.16 at 16:33, <boris.ostrovsky@oracle.com> wrote:
>> --- a/xen/include/public/arch-x86/xen.h
>> +++ b/xen/include/public/arch-x86/xen.h
>> @@ -291,6 +291,13 @@ struct xen_arch_domainconfig {
>>                                       XEN_X86_EMU_PIT)
>>      uint32_t emulation_flags;
>>  };
>> +
>> +/* Location of online VCPU bitmap. */
>> +#define XEN_ACPI_CPU_MAP             0xaf00
>> +#define XEN_ACPI_CPU_MAP_LEN         ((HVM_MAX_VCPUS + 7) / 8)
>> +
>> +/* GPE0 bit set during CPU hotplug */
>> +#define XEN_GPE0_CPUHP_BIT           2
> Here I'm unsure - isn't this an ACPI specific register? If so, the name
> would better be XEN_ACPI_GPE0_CPUHP_BIT.
>
> With that (or with a good reason why the current name is better)

No, it should have "ACPI".

-boris


> Reviewed-by: Jan Beulich <jbeulich@suse.com>
> but the patch needs re-basing afaict.
>
> Jan
>
diff mbox

Patch

diff --git a/tools/libacpi/mk_dsdt.c b/tools/libacpi/mk_dsdt.c
index 5765822..606e7a0 100644
--- a/tools/libacpi/mk_dsdt.c
+++ b/tools/libacpi/mk_dsdt.c
@@ -18,6 +18,7 @@ 
 #include <stdlib.h>
 #include <stdbool.h>
 #if defined(__i386__) || defined(__x86_64__)
+#include <xen/arch-x86/xen.h>
 #include <xen/hvm/hvm_info_table.h>
 #elif defined(__aarch64__)
 #include <xen/arch-arm.h>
@@ -244,7 +245,8 @@  int main(int argc, char **argv)
 #endif
 
     /* Operation Region 'PRST': bitmask of online CPUs. */
-    stmt("OperationRegion", "PRST, SystemIO, 0xaf00, 32");
+    stmt("OperationRegion", "PRST, SystemIO, %#x, %d",
+        XEN_ACPI_CPU_MAP, XEN_ACPI_CPU_MAP_LEN);
     push_block("Field", "PRST, ByteAcc, NoLock, Preserve");
     indent(); printf("PRS, %u\n", max_cpus);
     pop_block();
@@ -283,7 +285,8 @@  int main(int argc, char **argv)
     /* Define GPE control method. */
     push_block("Scope", "\\_GPE");
     push_block("Method",
-               dm_version == QEMU_XEN_TRADITIONAL ? "_L02" : "_E02");
+               dm_version == QEMU_XEN_TRADITIONAL ? "_L%02d" : "_E%02d",
+               XEN_GPE0_CPUHP_BIT);
     stmt("\\_SB.PRSC ()", NULL);
     pop_block();
     pop_block();
diff --git a/tools/libacpi/static_tables.c b/tools/libacpi/static_tables.c
index 617bf68..f48b954 100644
--- a/tools/libacpi/static_tables.c
+++ b/tools/libacpi/static_tables.c
@@ -31,6 +31,10 @@  struct acpi_20_facs Facs = {
  * Fixed ACPI Description Table (FADT).
  */
 
+/*
+ * These values must match register definitions in struct hvm_hw_acpi
+ * (in xen/include/public/arch-x86/hvm/save.h).
+ */
 #define ACPI_PM1A_EVT_BLK_BIT_WIDTH         0x20
 #define ACPI_PM1A_EVT_BLK_BIT_OFFSET        0x00
 #define ACPI_PM1A_CNT_BLK_BIT_WIDTH         0x10
diff --git a/xen/include/public/arch-x86/xen.h b/xen/include/public/arch-x86/xen.h
index cdd93c1..0e3a3df 100644
--- a/xen/include/public/arch-x86/xen.h
+++ b/xen/include/public/arch-x86/xen.h
@@ -291,6 +291,13 @@  struct xen_arch_domainconfig {
                                      XEN_X86_EMU_PIT)
     uint32_t emulation_flags;
 };
+
+/* Location of online VCPU bitmap. */
+#define XEN_ACPI_CPU_MAP             0xaf00
+#define XEN_ACPI_CPU_MAP_LEN         ((HVM_MAX_VCPUS + 7) / 8)
+
+/* GPE0 bit set during CPU hotplug */
+#define XEN_GPE0_CPUHP_BIT           2
 #endif
 
 #endif /* !__ASSEMBLY__ */