WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [HVMLOADER][ACPI] Move SSDT initialisatio

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [HVMLOADER][ACPI] Move SSDT initialisation to acpi/ dir.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 28 Nov 2006 20:00:16 +0000
Delivery-date: Tue, 28 Nov 2006 11:59:54 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Node ID 514ed4f0e5da6eb0b0bd8727194296434c4b5005
# Parent  6c2c7ff6265a9c47bb851c89dde5aae4ed58de02
[HVMLOADER][ACPI] Move SSDT initialisation to acpi/ dir.
This kills off a few hundred lines of unnecessary code.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
 tools/firmware/hvmloader/acpi_ssdt_tpm.asl |   29 --
 tools/firmware/hvmloader/acpi_ssdt_tpm.h   |   25 --
 tools/firmware/hvmloader/acpi_utils.c      |  318 -----------------------------
 tools/firmware/hvmloader/acpi_utils.h      |   36 ---
 tools/firmware/hvmloader/Makefile          |    4 
 tools/firmware/hvmloader/acpi/Makefile     |    8 
 tools/firmware/hvmloader/acpi/acpi2_0.h    |   17 -
 tools/firmware/hvmloader/acpi/build.c      |  118 +++++++---
 tools/firmware/hvmloader/acpi/ssdt_tpm.asl |   29 ++
 tools/firmware/hvmloader/acpi/ssdt_tpm.h   |   25 ++
 tools/firmware/hvmloader/hvmloader.c       |    9 
 tools/firmware/hvmloader/mp_tables.c       |    1 
 tools/firmware/hvmloader/util.h            |    3 
 13 files changed, 153 insertions(+), 469 deletions(-)

diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/Makefile
--- a/tools/firmware/hvmloader/Makefile Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/Makefile Tue Nov 28 15:47:52 2006 +0000
@@ -40,7 +40,7 @@ CFLAGS  += $(DEFINES) -I. $(XENINC) -fno
 CFLAGS  += $(DEFINES) -I. $(XENINC) -fno-builtin -O2 -msoft-float
 LDFLAGS  = -nostdlib -Wl,-N -Wl,-Ttext -Wl,$(LOADADDR)
 
-SRCS = hvmloader.c mp_tables.c util.c smbios.c acpi_utils.c
+SRCS = hvmloader.c mp_tables.c util.c smbios.c
 OBJS = $(patsubst %.c,%.o,$(SRCS))
 
 .PHONY: all
@@ -65,5 +65,5 @@ roms.h:       ../rombios/BIOS-bochs-latest ../
 .PHONY: clean
 clean:
        rm -f roms.h acpi.h
-       rm -f hvmloader hvmloader.tmp hvmloader.o $(OBJS)
+       rm -f hvmloader hvmloader.tmp *.o
        $(MAKE) -C acpi clean
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi/Makefile
--- a/tools/firmware/hvmloader/acpi/Makefile    Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/acpi/Makefile    Tue Nov 28 15:47:52 2006 +0000
@@ -30,12 +30,18 @@ vpath iasl $(PATH)
 vpath iasl $(PATH)
 all: acpi.a
 
+ssdt_tpm.h: ssdt_tpm.asl
+       $(MAKE) iasl
+       iasl -tc ssdt_tpm.asl
+       mv ssdt_tpm.hex ssdt_tpm.h
+       rm -f *.aml
+
 dsdt.c: dsdt.asl
        $(MAKE) iasl
        iasl -tc dsdt.asl
        mv dsdt.hex dsdt.c
        echo "int DsdtLen=sizeof(AmlCode);" >> dsdt.c
-       rm *.aml
+       rm -f *.aml
 
 iasl:
        @echo
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi/acpi2_0.h
--- a/tools/firmware/hvmloader/acpi/acpi2_0.h   Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/acpi/acpi2_0.h   Tue Nov 28 15:47:52 2006 +0000
@@ -119,7 +119,7 @@ struct acpi_20_rsdp {
  */
 struct acpi_20_rsdt {
     struct acpi_header header;
-    uint32_t entry[ACPI_MAX_NUM_TABLES];
+    uint32_t entry[1];
 };
 #define ACPI_2_0_RSDT_REVISION 0x01
 
@@ -128,20 +128,19 @@ struct acpi_20_rsdt {
  */
 struct acpi_20_xsdt {
     struct acpi_header header;
-    uint64_t entry[ACPI_MAX_NUM_TABLES];
+    uint64_t entry[1];
 };
 #define ACPI_2_0_XSDT_REVISION 0x01
 
 /*
  * TCG Hardware Interface Table (TCPA)
  */
-
-typedef struct _ACPI_2_0_TCPA_CLIENT {
-    struct acpi_header header;
-    uint16_t PlatformClass;
-    uint32_t LAML;
-    uint64_t LASA;
-} ACPI_2_0_TCPA_CLIENT;
+struct acpi_20_tcpa {
+    struct acpi_header header;
+    uint16_t platform_class;
+    uint32_t laml;
+    uint64_t lasa;
+};
 
 #define ACPI_2_0_TCPA_REVISION 0x02
 #define ACPI_2_0_TCPA_LAML_SIZE (64*1024)
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi/build.c
--- a/tools/firmware/hvmloader/acpi/build.c     Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/acpi/build.c     Tue Nov 28 15:47:52 2006 +0000
@@ -17,8 +17,12 @@
  */
 
 #include "acpi2_0.h"
+#include "ssdt_tpm.h"
 #include "../config.h"
 #include "../util.h"
+#include <xen/hvm/e820.h>
+
+#define align16(sz) (((sz) + 15) & ~15)
 
 extern struct acpi_20_rsdp Rsdp;
 extern struct acpi_20_rsdt Rsdt;
@@ -103,39 +107,85 @@ int construct_madt(struct acpi_20_madt *
     madt->header.length = offset;
     set_checksum(madt, offsetof(struct acpi_header, checksum), offset);
 
-    return offset;
-}
-
-/*
- * Copy all the ACPI table to buffer.
- * Buffer layout: FACS, DSDT, FADT, MADT, XSDT, RSDT, RSDP.
- */
+    return align16(offset);
+}
+
+int construct_secondary_tables(uint8_t *buf, unsigned long *table_ptrs)
+{
+    int offset = 0, nr_tables = 0;
+    struct acpi_20_madt *madt;
+    struct acpi_20_tcpa *tcpa;
+    static const uint16_t tis_did_vid_rid[] = {0x0001, 0x0001, 0x0001};
+
+    /* MADT. */
+    if ( (get_vcpu_nr() > 1) || get_apic_mode() )
+    {
+        madt = (struct acpi_20_madt *)&buf[offset];
+        offset += construct_madt(madt);
+        table_ptrs[nr_tables++] = (unsigned long)madt;
+    }
+
+    /* TPM TCPA and SSDT. */
+    if ( memcmp((char *)0xFED40F00, tis_did_vid_rid,
+                sizeof(tis_did_vid_rid)) == 0 ) /* Probe for TIS interface. */
+    {
+        memcpy(&buf[offset], AmlCode_TPM, sizeof(AmlCode_TPM));
+        table_ptrs[nr_tables++] = (unsigned long)&buf[offset];
+        offset += align16(sizeof(AmlCode_TPM));
+
+        tcpa = (struct acpi_20_tcpa *)&buf[offset];
+        memset(tcpa, 0, sizeof(*tcpa));
+        offset += align16(sizeof(*tcpa));
+        table_ptrs[nr_tables++] = (unsigned long)tcpa;
+
+        tcpa->header.signature = ACPI_2_0_TCPA_SIGNATURE;
+        tcpa->header.length    = sizeof(*tcpa);
+        tcpa->header.revision  = ACPI_2_0_TCPA_REVISION;
+        strncpy(tcpa->header.oem_id, "IBM   ", 6);
+        tcpa->header.oem_table_id = ASCII64(' ', ' ', ' ', ' ',
+                                            ' ', 'x', 'e', 'n');
+        tcpa->header.oem_revision = 1;
+        tcpa->header.creator_id   = ASCII32('I', 'B', 'M', ' ');
+        tcpa->header.creator_revision = 1;
+        tcpa->lasa = e820_malloc(
+            ACPI_2_0_TCPA_LAML_SIZE, E820_RESERVED, (uint32_t)~0);
+        if ( tcpa->lasa )
+        {
+            tcpa->laml = ACPI_2_0_TCPA_LAML_SIZE;
+            memset((char *)(unsigned long)tcpa->lasa, 0, tcpa->laml);
+            set_checksum(tcpa,
+                         offsetof(struct acpi_header, checksum),
+                         tcpa->header.length);
+        }
+    }
+
+    table_ptrs[nr_tables] = 0;
+    return align16(offset);
+}
+
+/* Copy all the ACPI table to buffer. */
 int acpi_build_tables(uint8_t *buf)
 {
     struct acpi_20_rsdp *rsdp;
     struct acpi_20_rsdt *rsdt;
     struct acpi_20_xsdt *xsdt;
     struct acpi_20_fadt *fadt;
-    struct acpi_20_madt *madt = 0;
     struct acpi_20_facs *facs;
     unsigned char       *dsdt;
-    int offset = 0, requires_madt;
-
-    requires_madt = ((get_vcpu_nr() > 1) || get_apic_mode());
-
-#define inc_offset(sz)  (offset = (offset + (sz) + 15) & ~15)
+    unsigned long        secondary_tables[16];
+    int                  offset = 0, i;
 
     facs = (struct acpi_20_facs *)&buf[offset];
     memcpy(facs, &Facs, sizeof(struct acpi_20_facs));
-    inc_offset(sizeof(struct acpi_20_facs));
+    offset += align16(sizeof(struct acpi_20_facs));
 
     dsdt = (unsigned char *)&buf[offset];
     memcpy(dsdt, &AmlCode, DsdtLen);
-    inc_offset(DsdtLen);
+    offset += align16(DsdtLen);
 
     fadt = (struct acpi_20_fadt *)&buf[offset];
     memcpy(fadt, &Fadt, sizeof(struct acpi_20_fadt));
-    inc_offset(sizeof(struct acpi_20_fadt));
+    offset += align16(sizeof(struct acpi_20_fadt));
     fadt->dsdt   = (unsigned long)dsdt;
     fadt->x_dsdt = (unsigned long)dsdt;
     fadt->firmware_ctrl   = (unsigned long)facs;
@@ -144,43 +194,33 @@ int acpi_build_tables(uint8_t *buf)
                  offsetof(struct acpi_header, checksum),
                  sizeof(struct acpi_20_fadt));
 
-    if ( requires_madt )
-    {
-        madt = (struct acpi_20_madt *)&buf[offset];
-        inc_offset(construct_madt(madt));
-    }
+    offset += construct_secondary_tables(&buf[offset], secondary_tables);
 
     xsdt = (struct acpi_20_xsdt *)&buf[offset];
-    memcpy(xsdt, &Xsdt, sizeof(struct acpi_20_xsdt));
-    inc_offset(sizeof(struct acpi_20_xsdt));
+    memcpy(xsdt, &Xsdt, sizeof(struct acpi_header));
     xsdt->entry[0] = (unsigned long)fadt;
-    xsdt->header.length = sizeof(struct acpi_header) + sizeof(uint64_t);
-    if ( requires_madt )
-    {
-        xsdt->entry[1] = (unsigned long)madt;
-        xsdt->header.length += sizeof(uint64_t);
-    }
+    for ( i = 0; secondary_tables[i]; i++ )
+        xsdt->entry[i+1] = secondary_tables[i];
+    xsdt->header.length = sizeof(struct acpi_header) + (i+1)*sizeof(uint64_t);
+    offset += align16(xsdt->header.length);
     set_checksum(xsdt,
                  offsetof(struct acpi_header, checksum),
                  xsdt->header.length);
 
     rsdt = (struct acpi_20_rsdt *)&buf[offset];
-    memcpy(rsdt, &Rsdt, sizeof(struct acpi_20_rsdt));
-    inc_offset(sizeof(struct acpi_20_rsdt));
+    memcpy(rsdt, &Rsdt, sizeof(struct acpi_header));
     rsdt->entry[0] = (unsigned long)fadt;
-    rsdt->header.length = sizeof(struct acpi_header) + sizeof(uint32_t);
-    if ( requires_madt )
-    {
-        rsdt->entry[1] = (unsigned long)madt;
-        rsdt->header.length += sizeof(uint32_t);
-    }
+    for ( i = 0; secondary_tables[i]; i++ )
+        rsdt->entry[i+1] = secondary_tables[i];
+    rsdt->header.length = sizeof(struct acpi_header) + (i+1)*sizeof(uint32_t);
+    offset += align16(rsdt->header.length);
     set_checksum(rsdt,
                  offsetof(struct acpi_header, checksum),
                  rsdt->header.length);
 
     rsdp = (struct acpi_20_rsdp *)&buf[offset];
     memcpy(rsdp, &Rsdp, sizeof(struct acpi_20_rsdp));
-    inc_offset(sizeof(struct acpi_20_rsdp));
+    offset += align16(sizeof(struct acpi_20_rsdp));
     rsdp->rsdt_address = (unsigned long)rsdt;
     rsdp->xsdt_address = (unsigned long)xsdt;
     set_checksum(rsdp,
@@ -189,8 +229,6 @@ int acpi_build_tables(uint8_t *buf)
     set_checksum(rsdp,
                  offsetof(struct acpi_20_rsdp, extended_checksum),
                  sizeof(struct acpi_20_rsdp));
-
-#undef inc_offset
 
     return offset;
 }
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/hvmloader.c
--- a/tools/firmware/hvmloader/hvmloader.c      Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/hvmloader.c      Tue Nov 28 15:47:52 2006 +0000
@@ -23,7 +23,6 @@
 #include "acpi/acpi2_0.h"  /* for ACPI_PHYSICAL_ADDRESS */
 #include "hypercall.h"
 #include "util.h"
-#include "acpi_utils.h"
 #include "smbios.h"
 #include "config.h"
 #include "apic_regs.h"
@@ -283,7 +282,6 @@ int main(void)
 int main(void)
 {
     int acpi_sz;
-    uint8_t *freemem;
 
     printf("HVM Loader\n");
 
@@ -318,12 +316,7 @@ int main(void)
     {
         printf("Loading ACPI ...\n");
         acpi_sz = acpi_build_tables((uint8_t *)ACPI_PHYSICAL_ADDRESS);
-        freemem = (uint8_t *)ACPI_PHYSICAL_ADDRESS + acpi_sz;
-        ASSERT(freemem <= (uint8_t *)0xF0000);
-        acpi_update((unsigned char *)ACPI_PHYSICAL_ADDRESS,
-                    freemem - (uint8_t *)ACPI_PHYSICAL_ADDRESS,
-                    (unsigned char *)0xF0000,
-                    &freemem);
+        ASSERT((ACPI_PHYSICAL_ADDRESS + acpi_sz) <= 0xF0000);
     }
 
     if ( check_amd() )
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/mp_tables.c
--- a/tools/firmware/hvmloader/mp_tables.c      Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/mp_tables.c      Tue Nov 28 15:47:52 2006 +0000
@@ -28,7 +28,6 @@
  * Place - Suite 330, Boston, MA 02111-1307 USA.
  */
 
-#include <acpi_utils.h>
 #include "config.h"
 
 /* FIXME find a header that already has types defined!!! */
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/util.h
--- a/tools/firmware/hvmloader/util.h   Tue Nov 28 15:25:26 2006 +0000
+++ b/tools/firmware/hvmloader/util.h   Tue Nov 28 15:47:52 2006 +0000
@@ -5,6 +5,9 @@
 
 #undef offsetof
 #define offsetof(t, m) ((unsigned long)&((t *)0)->m)
+
+#undef NULL
+#define NULL ((void*)0)
 
 extern void __assert_failed(char *assertion, char *file, int line)
     __attribute__((noreturn));
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi/ssdt_tpm.asl
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/acpi/ssdt_tpm.asl        Tue Nov 28 15:47:52 
2006 +0000
@@ -0,0 +1,29 @@
+//**********************************************************************//
+//*
+//* Copyright (c) 2006, IBM Corporation.
+//*
+//* This program is free software; you can redistribute it and/or modify it
+//* under the terms and conditions of the GNU General Public License,
+//* version 2, as published by the Free Software Foundation.
+//*
+//* This program is distributed in the hope it will be useful, but WITHOUT
+//* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+//* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+//* more details.
+//*
+//* You should have received a copy of the GNU General Public License along 
with
+//* this program; if not, write to the Free Software Foundation, Inc., 59 
Temple
+//* Place - Suite 330, Boston, MA 02111-1307 USA.
+
+//*  SSDT for TPM TIS Interface for Xen with Qemu device model
+
+DefinitionBlock ("SSDT_TPM.aml", "SSDT", 1, "IBM","xen", 2006)
+{
+    Device (TPM) {
+        Name (_HID, EisaId ("PNP0C31"))
+        Name (_CRS, ResourceTemplate ()
+        {
+            Memory32Fixed (ReadWrite, 0xFED40000, 0x5000,)
+        })
+    }
+}
\ No newline at end of file
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi/ssdt_tpm.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/firmware/hvmloader/acpi/ssdt_tpm.h  Tue Nov 28 15:47:52 2006 +0000
@@ -0,0 +1,25 @@
+/*
+ * 
+ * Intel ACPI Component Architecture
+ * ASL Optimizing Compiler version 20060707 [Sep 11 2006]
+ * Copyright (C) 2000 - 2006 Intel Corporation
+ * Supports ACPI Specification Revision 3.0a
+ * 
+ * Compilation of "acpi_ssdt_tpm.asl" - Mon Oct 30 11:28:27 2006
+ * 
+ * C source code output
+ *
+ */
+unsigned char AmlCode_TPM[] =
+{
+    0x53,0x53,0x44,0x54,0x4C,0x00,0x00,0x00,  /* 00000000    "SSDTL..." */
+    0x01,0x6D,0x49,0x42,0x4D,0x00,0x00,0x00,  /* 00000008    ".mIBM..." */
+    0x78,0x65,0x6E,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "xen....." */
+    0xD6,0x07,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
+    0x07,0x07,0x06,0x20,0x5B,0x82,0x26,0x54,  /* 00000020    "... [.&T" */
+    0x50,0x4D,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000028    "PM_._HID" */
+    0x0C,0x41,0xD0,0x0C,0x31,0x08,0x5F,0x43,  /* 00000030    ".A..1._C" */
+    0x52,0x53,0x11,0x11,0x0A,0x0E,0x86,0x09,  /* 00000038    "RS......" */
+    0x00,0x01,0x00,0x00,0xD4,0xFE,0x00,0x50,  /* 00000040    ".......P" */
+    0x00,0x00,0x79,0x00,
+};
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi_ssdt_tpm.asl
--- a/tools/firmware/hvmloader/acpi_ssdt_tpm.asl        Tue Nov 28 15:25:26 
2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-//**********************************************************************//
-//*
-//* Copyright (c) 2006, IBM Corporation.
-//*
-//* This program is free software; you can redistribute it and/or modify it
-//* under the terms and conditions of the GNU General Public License,
-//* version 2, as published by the Free Software Foundation.
-//*
-//* This program is distributed in the hope it will be useful, but WITHOUT
-//* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
-//* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
-//* more details.
-//*
-//* You should have received a copy of the GNU General Public License along 
with
-//* this program; if not, write to the Free Software Foundation, Inc., 59 
Temple
-//* Place - Suite 330, Boston, MA 02111-1307 USA.
-
-//*  SSDT for TPM TIS Interface for Xen with Qemu device model
-
-DefinitionBlock ("SSDT_TPM.aml", "SSDT", 1, "IBM","xen", 2006)
-{
-    Device (TPM) {
-        Name (_HID, EisaId ("PNP0C31"))
-        Name (_CRS, ResourceTemplate ()
-        {
-            Memory32Fixed (ReadWrite, 0xFED40000, 0x5000,)
-        })
-    }
-}
\ No newline at end of file
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi_ssdt_tpm.h
--- a/tools/firmware/hvmloader/acpi_ssdt_tpm.h  Tue Nov 28 15:25:26 2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-/*
- * 
- * Intel ACPI Component Architecture
- * ASL Optimizing Compiler version 20060707 [Sep 11 2006]
- * Copyright (C) 2000 - 2006 Intel Corporation
- * Supports ACPI Specification Revision 3.0a
- * 
- * Compilation of "acpi_ssdt_tpm.asl" - Mon Oct 30 11:28:27 2006
- * 
- * C source code output
- *
- */
-unsigned char AmlCode_TPM[] =
-{
-    0x53,0x53,0x44,0x54,0x4C,0x00,0x00,0x00,  /* 00000000    "SSDTL..." */
-    0x01,0x6D,0x49,0x42,0x4D,0x00,0x00,0x00,  /* 00000008    ".mIBM..." */
-    0x78,0x65,0x6E,0x00,0x00,0x00,0x00,0x00,  /* 00000010    "xen....." */
-    0xD6,0x07,0x00,0x00,0x49,0x4E,0x54,0x4C,  /* 00000018    "....INTL" */
-    0x07,0x07,0x06,0x20,0x5B,0x82,0x26,0x54,  /* 00000020    "... [.&T" */
-    0x50,0x4D,0x5F,0x08,0x5F,0x48,0x49,0x44,  /* 00000028    "PM_._HID" */
-    0x0C,0x41,0xD0,0x0C,0x31,0x08,0x5F,0x43,  /* 00000030    ".A..1._C" */
-    0x52,0x53,0x11,0x11,0x0A,0x0E,0x86,0x09,  /* 00000038    "RS......" */
-    0x00,0x01,0x00,0x00,0xD4,0xFE,0x00,0x50,  /* 00000040    ".......P" */
-    0x00,0x00,0x79,0x00,
-};
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi_utils.c
--- a/tools/firmware/hvmloader/acpi_utils.c     Tue Nov 28 15:25:26 2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,318 +0,0 @@
-/*
- * Commonly used ACPI utility functions.
- * Probing for devices and writing SSDT entries into XSDT and RSDT tables.
- *
- * Yu Ke, ke.yu@xxxxxxxxx
- * Copyright (c) 2005, Intel Corporation.
- * Copyright (c) 2006, IBM Corporation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place - Suite 330, Boston, MA 02111-1307 USA.
- */
-
-#include "acpi/acpi2_0.h"
-#include "acpi_utils.h"
-#include "util.h"
-#include <xen/hvm/e820.h>
-
-static int acpi_rsdt_add_entry_pointer(unsigned char *acpi_start,
-                                       unsigned char *entry);
-static int acpi_xsdt_add_entry_pointer(unsigned char *acpi_start,
-                                       unsigned char *entry);
-static unsigned char *acpi_xsdt_add_entry(unsigned char *acpi_start,
-                                          unsigned char **freemem,
-                                          unsigned char *limit,
-                                          unsigned char *table,
-                                          unsigned int table_size);
-
-void set_checksum(void *start, int checksum_offset, int len)
-{
-    unsigned char sum = 0;
-    unsigned char *ptr;
-
-    ptr = start;
-    ptr[checksum_offset] = 0;
-    while ( len-- )
-        sum += *ptr++;
-
-    ptr = start;
-    ptr[checksum_offset] = -sum;
-}
-
-
-#include "acpi_ssdt_tpm.h"
-static void acpi_tpm_tis_probe(unsigned char *acpi_start,
-                               unsigned char **freemem,
-                               unsigned char *limit)
-{
-    unsigned char *addr;
-    ACPI_2_0_TCPA_CLIENT *tcpa;
-    /* check TPM_DID, TPM_VID, TPM_RID in ioemu/hw/tpm_tis.c */
-    uint16_t tis_did_vid_rid[] = {0x0001, 0x0001, 0x0001};
-    static const ACPI_2_0_TCPA_CLIENT Tcpa = {
-        .header = {
-            .signature = ACPI_2_0_TCPA_SIGNATURE,
-            .length    = sizeof(ACPI_2_0_TCPA_CLIENT),
-            .revision  = ACPI_2_0_TCPA_REVISION,
-            .oem_id    = {'I', 'B', 'M', ' ', ' ', ' '},
-            .oem_table_id = ASCII64(' ', ' ', ' ', ' ', ' ', 'x', 'e', 'n'),
-            .oem_revision = 1,
-            .creator_id   = ASCII32('I', 'B', 'M', ' '),
-            .creator_revision = 1,
-        }
-    };
-
-    /* probe for TIS interface ... */
-    if ( memcmp((char *)(0xFED40000 + 0xF00),
-                tis_did_vid_rid,
-                sizeof(tis_did_vid_rid)) != 0 )
-        return;
-
-    printf("TIS is available\n");
-    addr = acpi_xsdt_add_entry(acpi_start, freemem, limit,
-                               AmlCode_TPM, sizeof(AmlCode_TPM));
-    if ( addr == NULL )
-        return;
-
-    /* legacy systems need an RSDT entry */
-    if ( acpi_rsdt_add_entry_pointer(acpi_start, addr) != 1 )
-        return;
-
-    /* add ACPI TCPA table */
-    addr = acpi_xsdt_add_entry(acpi_start, freemem, limit,
-                               (unsigned char *)&Tcpa,
-                               sizeof(Tcpa));
-    if ( addr == NULL )
-        return;
-
-    tcpa = (ACPI_2_0_TCPA_CLIENT *)addr;
-    tcpa->LASA = e820_malloc(
-        ACPI_2_0_TCPA_LAML_SIZE, E820_RESERVED, (uint32_t)~0);
-    if ( tcpa->LASA )
-    {
-        tcpa->LAML = ACPI_2_0_TCPA_LAML_SIZE;
-        memset((char *)(unsigned long)tcpa->LASA,
-               0x0,
-               tcpa->LAML);
-        set_checksum(tcpa,
-                     FIELD_OFFSET(struct acpi_header, checksum),
-                     tcpa->header.length);
-    }
-
-    if ( acpi_rsdt_add_entry_pointer(acpi_start, addr) != 1 )
-        return;
-}
-
-
-/*
- * Call functions that probe for devices and have them register their
- * SSDT entries with the XSDT and RSDT tables.
- */
-void acpi_update(unsigned char *acpi_start,
-                 unsigned long acpi_size,
-                 unsigned char *limit,
-                 unsigned char **freemem)
-{
-    acpi_tpm_tis_probe(acpi_start, freemem, limit);
-}
-
-
-/*
- * Search for the RSDP in memory below the BIOS
- */
-struct acpi_20_rsdp *acpi_rsdp_get(unsigned char *acpi_start)
-{
-    int offset = 0;
-    int found = 0;
-    static int displayed = 0;
-    struct acpi_20_rsdp *rsdp;
-
-    while ( &acpi_start[offset] < (unsigned char *)0xf0000 )
-    {
-        rsdp = (struct acpi_20_rsdp *)&acpi_start[offset];
-        if ( rsdp->signature == ACPI_2_0_RSDP_SIGNATURE )
-        {
-            found = 1;
-            break;
-        }
-        offset += 0x10;
-    }
-    
-    if ( !found )
-        rsdp = NULL;
-
-    if ( !displayed )
-    {
-        if ( rsdp )
-            printf("Found RSDP at %lx\n",(long)rsdp);
-        else
-            printf("ERROR: RSDP was not found\n");
-        displayed = 1;
-    }
-
-    return rsdp;
-}
-
-
-struct acpi_20_rsdt *acpi_rsdt_get(unsigned char *acpi_start)
-{
-    struct acpi_20_rsdp *rsdp;
-    struct acpi_20_rsdt *rsdt;
-
-    rsdp = acpi_rsdp_get(acpi_start);
-    if (!rsdp)
-        return NULL;
-
-    rsdt = (struct acpi_20_rsdt *)
-        (acpi_start + rsdp->rsdt_address - ACPI_PHYSICAL_ADDRESS);
-    if ( rsdt->header.signature != ACPI_2_0_RSDT_SIGNATURE )
-    {
-        printf("Bad RSDT signature\n");
-        return NULL;
-    }
-
-    return rsdt;
-}
-
-/*
- * Add an entry to the RSDT table given the pointer to the entry.
- */
-static int acpi_rsdt_add_entry_pointer(unsigned char *acpi_start,
-                                       unsigned char *entry)
-{
-    struct acpi_20_rsdt *rsdt = acpi_rsdt_get(acpi_start);
-    int found = 0;
-    int i = 0;
-
-    /* Find an empty slot in the RSDT table. */
-    while ( i < ACPI_MAX_NUM_TABLES )
-    {
-        if ( rsdt->entry[i] == 0 )
-        {
-            found = 1;
-            break;
-        }
-        i++;
-    }
-
-    if ( found )
-    {
-        rsdt->entry[i] = (uint64_t)(unsigned long)entry;
-        rsdt->header.length =
-            sizeof(struct acpi_header) +
-            (i + 1) * sizeof(uint64_t);
-        set_checksum(rsdt,
-                     FIELD_OFFSET(struct acpi_header, checksum),
-                     rsdt->header.length);
-    }
-
-    return found;
-}
-
-/* Get the XSDT table. */
-struct acpi_20_xsdt *acpi_xsdt_get(unsigned char *acpi_start)
-{
-    struct acpi_20_rsdp *rsdp;
-    struct acpi_20_xsdt *xsdt;
-
-    rsdp = acpi_rsdp_get(acpi_start);
-    if (!rsdp)
-        return NULL;
-
-    xsdt = (struct acpi_20_xsdt *)
-        (acpi_start + rsdp->xsdt_address - ACPI_PHYSICAL_ADDRESS);
-    if ( xsdt->header.signature != ACPI_2_0_XSDT_SIGNATURE )
-    {
-        printf("Bad XSDT signature\n");
-        return NULL;
-    }
-    return xsdt;
-}
-
-/*
- * Add an entry to the XSDT table given the pointer to the entry.
- */
-static int acpi_xsdt_add_entry_pointer(unsigned char *acpi_start,
-                                       unsigned char *entry)
-{
-    struct acpi_20_xsdt *xsdt = acpi_xsdt_get(acpi_start);
-    int found = 0;
-    int i = 0;
-
-    /* Find an empty slot in the XSDT table. */
-    while ( i < ACPI_MAX_NUM_TABLES )
-    {
-        if ( xsdt->entry[i] == 0 )
-        {
-            found = 1;
-            break;
-        }
-        i++;
-    }
-
-    if ( found )
-    {
-        xsdt->entry[i] = (uint64_t)(unsigned long)entry;
-        xsdt->header.length =
-            sizeof(struct acpi_header) +
-            (i + 1) * sizeof(uint64_t);
-        set_checksum(xsdt,
-                     FIELD_OFFSET(struct acpi_header, checksum),
-                     xsdt->header.length);
-    }
-
-    return found;
-}
-
-/*
-   add an entry to the xdst table entry pointers
-   copy the given ssdt data to the current available memory at
-   freemem, if it does not exceed the limit
- */
-static unsigned char *acpi_xsdt_add_entry(unsigned char *acpi_start,
-                                          unsigned char **freemem,
-                                          unsigned char *limit,
-                                          unsigned char *table,
-                                          unsigned int table_size)
-{
-    struct acpi_20_xsdt *xsdt = acpi_xsdt_get(acpi_start);
-    int found = 0, i = 0;
-    unsigned char *addr = NULL;
-
-    /* Check for an empty slot in the Xsdt table. */
-    while ( i < ACPI_MAX_NUM_TABLES )
-    {
-        if ( xsdt->entry[i] == 0 )
-        {
-            found = 1;
-            break;
-        }
-        i++;
-    }
-
-    if ( found )
-    {
-        /* memory below hard limit ? */
-        if ( (*freemem + table_size) <= limit )
-        {
-            addr = *freemem;
-            memcpy(addr, table, table_size);
-            printf("Copied dyn. ACPI entry to %lx\n",(long)addr);
-            *freemem += ((table_size + 0xf) & ~0xf);
-
-            acpi_xsdt_add_entry_pointer(acpi_start, addr);
-        }
-    }
-
-    return addr;
-}
diff -r 6c2c7ff6265a -r 514ed4f0e5da tools/firmware/hvmloader/acpi_utils.h
--- a/tools/firmware/hvmloader/acpi_utils.h     Tue Nov 28 15:25:26 2006 +0000
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
- * Commonly used ACPI utility functions.
- *
- * Yu Ke, ke.yu@xxxxxxxxx
- * Copyright (c) 2005, Intel Corporation.
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms and conditions of the GNU General Public License,
- * version 2, as published by the Free Software Foundation.
- *
- * This program is distributed in the hope it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place - Suite 330, Boston, MA 02111-1307 USA.
- */
-#ifndef ACPI_UTILS_H
-#define ACPI_UTILS_H
-
-#define FIELD_OFFSET(TYPE,Field) ((unsigned int)(&(((TYPE *) 0)->Field)))
-
-#define NULL ((void*)0)
-
-void set_checksum(void *start, int checksum_offset, int len);
-void acpi_update(unsigned char *acpi_start,
-                 unsigned long acpi_size,
-                 unsigned char *limit,
-                 unsigned char **freemem);
-
-struct acpi_20_rsdt *acpi_rsdt_get(unsigned char *acpi_start);
-struct acpi_20_xsdt *acpi_xsdt_get(unsigned char *acpi_start);
-
-#endif

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [HVMLOADER][ACPI] Move SSDT initialisation to acpi/ dir., Xen patchbot-unstable <=