From: Arun Sharma <arun.sharma@intel.com>
To: Ian Pratt <Ian.Pratt@cl.cam.ac.uk>,
Keir Fraser <Keir.Fraser@cl.cam.ac.uk>
Cc: xen-devel@lists.xensource.com
Subject: [PATCH][7/10] ACPI support for guest firmware.
Date: Wed, 29 Jun 2005 22:52:13 -0700 [thread overview]
Message-ID: <20050630055213.GA7430@intel.com> (raw)
ACPI support for guest firmware.
Signed-off-by: Ke Yu <ke.yu@intel.com>
Signed-off-by: Arun Sharma <arun.sharma@intel.com>
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/Makefile
--- a/tools/firmware/Makefile Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/Makefile Thu Jun 30 04:23:18 2005
@@ -7,6 +7,7 @@
SUBDIRS :=
SUBDIRS += rombios
SUBDIRS += vgabios
+SUBDIRS += acpi
SUBDIRS += vmxassist
.PHONY: all install clean
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/vmxassist/vmxloader.c
--- a/tools/firmware/vmxassist/vmxloader.c Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/vmxassist/vmxloader.c Thu Jun 30 04:23:18 2005
@@ -23,6 +23,12 @@
*/
#include "machine.h"
#include "roms.h"
+
+#ifdef _ACPI_
+#include "acpi.h"
+#include "../acpi/acpi2_0.h" // for ACPI_PHYSICAL_ADDRESS
+#endif
+
/*
* C runtime start off
@@ -102,6 +108,16 @@
memcpy((void *)0xC0000,
vgabios_stdvga, sizeof(vgabios_stdvga));
}
+#ifdef _ACPI_
+ puts("Loading ACPI ...\n");
+ if (ACPI_PHYSICAL_ADDRESS+sizeof(acpi) <= 0xF0000 ){
+ /* make sure acpi table does not overlap rombios
+ * currently acpi less than 8K will be OK.
+ */
+ memcpy((void *)ACPI_PHYSICAL_ADDRESS, acpi, sizeof(acpi));
+ }
+#endif
+
puts("Loading VMXAssist ...\n");
memcpy((void *)TEXTADDR, vmxassist, sizeof(vmxassist));
puts("Go ...\n");
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/vmxassist/Makefile
--- a/tools/firmware/vmxassist/Makefile Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/vmxassist/Makefile Thu Jun 30 04:23:18 2005
@@ -24,8 +24,8 @@
# The emulator code lives in ROM space
TEXTADDR=0x000D0000
-DEFINES=-DDEBUG -DTEXTADDR=${TEXTADDR}
-XENINC=-I$(XEN_ROOT)/xen/include
+DEFINES=-DDEBUG -DTEXTADDR=${TEXTADDR} -D_ACPI_
+XENINC=-I$(XEN_ROOT)/xen/include -I$(XEN_ROOT)/tools/libxc
#DEFINES=-DDEBUG -DTEST -DTEXTADDR=${TEXTADDR}
#XENINC=-I/home/leendert/xen/xeno-unstable.bk/xen/include
@@ -44,7 +44,7 @@
all: vmxloader
-vmxloader: roms.h vmxloader.c
+vmxloader: roms.h vmxloader.c acpi.h
${CC} ${CFLAGS} ${DEFINES} -c vmxloader.c
$(CC) -o vmxloader.tmp -m32 -nostdlib -Wl,-N -Wl,-Ttext -Wl,0x100000 vmxloader.o
objcopy --change-addresses=0xC0000000 vmxloader.tmp vmxloader
@@ -79,6 +79,9 @@
./mkhex vgabios_cirrusvga ../vgabios/VGABIOS-lgpl-latest.cirrus.bin >> roms.h
./mkhex vmxassist vmxassist.bin >> roms.h
+acpi.h: ../acpi/acpi.bin
+ ./mkhex acpi ../acpi/acpi.bin > acpi.h
+
offsets.h: gen
./gen > offsets.h
@@ -86,7 +89,7 @@
${CC} ${CFLAGS} -o gen gen.c
clean:
- rm -f vmxassist vmxassist.tmp vmxassist.bin vmxassist.run vmxassist.sym head.s roms.h
+ rm -f vmxassist vmxassist.tmp vmxassist.bin vmxassist.run vmxassist.sym head.s roms.h acpi.h
rm -f vmxloader vmxloader.tmp vmxloader.o ${OBJECTS}
rm -f gen gen.o offsets.h
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_madt.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_madt.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+#include "acpi_madt.h"
+
+//
+// Multiple APIC Description Table
+//
+
+ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE Madt = {
+ {
+ {
+ ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE,
+ sizeof (ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE),
+ ACPI_2_0_MADT_REVISION,
+ 0x00, // Checksum
+ ACPI_OEM_ID,
+ ACPI_OEM_TABLE_ID,
+ ACPI_OEM_REVISION,
+ ACPI_CREATOR_ID,
+ ACPI_CREATOR_REVISION,
+ },
+ ACPI_LOCAL_APIC_ADDRESS,
+ ACPI_MULTIPLE_APIC_FLAGS,
+ },
+ //
+ // LOCAL APIC Entries for 4 processors.
+ //
+ {
+ {
+ ACPI_PROCESSOR_LOCAL_APIC,
+ sizeof (ACPI_LOCAL_APIC_STRUCTURE),
+ 0x00,
+ 0x00,
+ 0x00000001,
+ },
+
+ {
+ ACPI_PROCESSOR_LOCAL_APIC,
+ sizeof (ACPI_LOCAL_APIC_STRUCTURE),
+ 0x01,
+ 0x00,
+ 0x00000000
+ },
+
+ {
+ ACPI_PROCESSOR_LOCAL_APIC,
+ sizeof (ACPI_LOCAL_APIC_STRUCTURE),
+ 0x02,
+ 0x00,
+ 0x00000000
+ },
+
+ {
+ ACPI_PROCESSOR_LOCAL_APIC,
+ sizeof (ACPI_LOCAL_APIC_STRUCTURE),
+ 0x03,
+ 0x00,
+ 0x00000000
+ }
+ }
+ ,
+
+ //
+ // IO APIC
+ //
+ {
+ {
+ ACPI_IO_APIC,
+ sizeof (ACPI_IO_APIC_STRUCTURE),
+ 0x00,
+ 0x00,
+ ACPI_IO_APIC_ADDRESS_1,
+ 0x0000
+ }
+ }
+};
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_madt.h
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_madt.h Thu Jun 30 04:23:18 2005
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004, 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 _MADT_H_
+#define _MADT_H_
+
+#include "acpi2_0.h"
+
+//
+// MADT Definitions, see ACPI 2.0 specification for details
+//
+
+#define ACPI_LOCAL_APIC_ADDRESS 0xFEE00000
+
+#define ACPI_MULTIPLE_APIC_FLAGS (ACPI_PCAT_COMPAT)
+
+#define ACPI_IO_APIC_ADDRESS_1 0xFEC00000
+
+//
+// MADT structure
+//
+#pragma pack (1)
+typedef struct {
+ ACPI_2_0_MADT Header;
+ ACPI_LOCAL_APIC_STRUCTURE LocalApic[4];
+ ACPI_IO_APIC_STRUCTURE IoApic[1];
+} ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE;
+#pragma pack ()
+
+#endif
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/README
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/README Thu Jun 30 04:23:18 2005
@@ -0,0 +1,24 @@
+ACPI Table for domain firmware
+
+
+INSTALL
+-----------------
+Simply make is OK.
+# make
+
+
+Note on DSDT Table
+------------------
+DSDT table source code is acpi_dsdt.asl
+It is already compiled and the output is acpi_dsdt.c
+Usually, user is not expected to change the acpi_dsdt.asl.
+In case that the acpi_dsdt.asl need to be updated, please
+Follow the instruction:
+
+# make acpi_dsdt.c
+
+Note:
+DSDT compiler "iasl" is needed. By default, it will be downloaded
+using wget in Makefile. if it failed, please download manually from
+http://developer.intel.com/technology/iapc/acpi/downloads.htm.
+then compile and install iasl
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_dsdt.asl
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_dsdt.asl Thu Jun 30 04:23:18 2005
@@ -0,0 +1,312 @@
+//**********************************************************************//
+//*
+//* Copyright (c) 2004, 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.
+
+//**
+//** DSDT for Xen with Qemu device model
+//**
+//**
+
+DefinitionBlock ("DSDT.aml", "DSDT", 1, "INTEL ", "XEN ", 2)
+{
+ Name (\PMBS, 0x0C00)
+ Name (\PMLN, 0x08)
+ Name (\IOB1, 0x00)
+ Name (\IOL1, 0x00)
+ Name (\APCB, 0xFEC00000)
+ Name (\APCL, 0x00010000)
+ Name (\PUID, 0x00)
+ Scope (\_PR)
+ {
+ Processor (CPU0, 0x00, 0x00000000, 0x00) {}
+ Processor (CPU1, 0x01, 0x00000000, 0x00) {}
+ Processor (CPU2, 0x02, 0x00000000, 0x00) {}
+ Processor (CPU3, 0x03, 0x00000000, 0x00) {}
+ }
+
+ Scope (\_SB)
+ {
+ Device (PCI0)
+ {
+ Name (_HID, EisaId ("PNP0A03"))
+ Name (_UID, 0x00)
+ Name (_ADR, 0x00)
+ Name (_BBN, 0x00)
+ Method (_CRS, 0, NotSerialized)
+ {
+ Name (PRT0, ResourceTemplate ()
+ {
+ /* bus number is from 0 - 255*/
+ WordBusNumber (ResourceConsumer, MinFixed, MaxFixed, SubDecode,
+ 0x0000,
+ 0x0000,
+ 0x00FF,
+ 0x0000,
+ 0x0100)
+ IO (Decode16, 0x0CF8, 0x0CF8, 0x01, 0x08)
+ WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+ 0x0000,
+ 0x0000,
+ 0x0CF7,
+ 0x0000,
+ 0x0CF8)
+ WordIO (ResourceProducer, MinFixed, MaxFixed, PosDecode, EntireRange,
+ 0x0000,
+ 0x0D00,
+ 0x0FFF,
+ 0x0000,
+ 0x0300)
+ DWordMemory (ResourceProducer, PosDecode, MinFixed, MaxFixed, Cacheable, ReadOnly,
+ 0x00000000,
+ 0x000A0000,
+ 0x000FFFFF,
+ 0x00000000,
+ 0x00060000)
+ })
+ Return (PRT0)
+ }
+
+ Name (AIR0, Package (0x06)
+ {
+ Package (0x04)
+ {
+ 0x001FFFFF,
+ 0x02,
+ 0x00,
+ 0x17
+ },
+
+ Package (0x04)
+ {
+ 0x001FFFFF,
+ 0x03,
+ 0x00,
+ 0x13
+ },
+
+ Package (0x04)
+ {
+ 0x001DFFFF,
+ 0x01,
+ 0x00,
+ 0x13
+ },
+
+ Package (0x04)
+ {
+ 0x001DFFFF,
+ 0x00,
+ 0x00,
+ 0x10
+ },
+
+ Package (0x04)
+ {
+ 0x001DFFFF,
+ 0x02,
+ 0x00,
+ 0x12
+ },
+
+ Package (0x04)
+ {
+ 0x001DFFFF,
+ 0x03,
+ 0x00,
+ 0x17
+ }
+ })
+ Method (_PRT, 0, NotSerialized)
+ {
+ Return (AIR0)
+ }
+
+ Device (ISA)
+ {
+ Name (_ADR, 0x00010000) /*TODO, device id, PCI bus num, ...*/
+
+ Device (SYSR)
+ {
+ Name (_HID, EisaId ("PNP0C02"))
+ Name (_UID, 0x01)
+ Name (CRS, ResourceTemplate ()
+ {
+ /* TODO: list hidden resources */
+ IO (Decode16, 0x0010, 0x0010, 0x00, 0x10)
+ IO (Decode16, 0x0022, 0x0022, 0x00, 0x0C)
+ IO (Decode16, 0x0030, 0x0030, 0x00, 0x10)
+ IO (Decode16, 0x0044, 0x0044, 0x00, 0x1C)
+ IO (Decode16, 0x0062, 0x0062, 0x00, 0x02)
+ IO (Decode16, 0x0065, 0x0065, 0x00, 0x0B)
+ IO (Decode16, 0x0072, 0x0072, 0x00, 0x0E)
+ IO (Decode16, 0x0080, 0x0080, 0x00, 0x01)
+ IO (Decode16, 0x0084, 0x0084, 0x00, 0x03)
+ IO (Decode16, 0x0088, 0x0088, 0x00, 0x01)
+ IO (Decode16, 0x008C, 0x008C, 0x00, 0x03)
+ IO (Decode16, 0x0090, 0x0090, 0x00, 0x10)
+ IO (Decode16, 0x00A2, 0x00A2, 0x00, 0x1C)
+ IO (Decode16, 0x00E0, 0x00E0, 0x00, 0x10)
+ IO (Decode16, 0x08A0, 0x08A0, 0x00, 0x04)
+ IO (Decode16, 0x0CC0, 0x0CC0, 0x00, 0x10)
+ IO (Decode16, 0x04D0, 0x04D0, 0x00, 0x02)
+ })
+ Method (_CRS, 0, NotSerialized)
+ {
+ Return (CRS)
+ }
+ }
+
+ Device (PIC)
+ {
+ Name (_HID, EisaId ("PNP0000"))
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0020, 0x0020, 0x01, 0x02)
+ IO (Decode16, 0x00A0, 0x00A0, 0x01, 0x02)
+ IRQNoFlags () {2}
+ })
+ }
+
+ Device (DMA0)
+ {
+ Name (_HID, EisaId ("PNP0200"))
+ Name (_CRS, ResourceTemplate ()
+ {
+ DMA (Compatibility, BusMaster, Transfer8) {4}
+ IO (Decode16, 0x0000, 0x0000, 0x00, 0x10)
+ IO (Decode16, 0x0081, 0x0081, 0x00, 0x03)
+ IO (Decode16, 0x0087, 0x0087, 0x00, 0x01)
+ IO (Decode16, 0x0089, 0x0089, 0x00, 0x03)
+ IO (Decode16, 0x008F, 0x008F, 0x00, 0x01)
+ IO (Decode16, 0x00C0, 0x00C0, 0x00, 0x20)
+ IO (Decode16, 0x0480, 0x0480, 0x00, 0x10)
+ })
+ }
+
+ Device (TMR)
+ {
+ Name (_HID, EisaId ("PNP0100"))
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0040, 0x0040, 0x00, 0x04)
+ IRQNoFlags () {0}
+ })
+ }
+
+ Device (RTC)
+ {
+ Name (_HID, EisaId ("PNP0B00"))
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0070, 0x0070, 0x00, 0x02)
+ IRQNoFlags () {8}
+ })
+ }
+
+ Device (SPKR)
+ {
+ Name (_HID, EisaId ("PNP0800"))
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0061, 0x0061, 0x00, 0x01)
+ })
+ }
+
+ Device (PS2M)
+ {
+ Name (_HID, EisaId ("PNP0F13"))
+ Name (_CID, 0x130FD041)
+ Method (_STA, 0, NotSerialized)
+ {
+ Return (0x0F)
+ }
+
+ Name (_CRS, ResourceTemplate ()
+ {
+ IRQNoFlags () {12}
+ })
+ }
+
+ Device (PS2K)
+ {
+ Name (_HID, EisaId ("PNP0303"))
+ Name (_CID, 0x0B03D041)
+ Method (_STA, 0, NotSerialized)
+ {
+ Return (0x0F)
+ }
+
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x0060, 0x0060, 0x00, 0x01)
+ IO (Decode16, 0x0064, 0x0064, 0x00, 0x01)
+ IRQNoFlags () {1}
+ })
+ }
+
+ Device (FDC0)
+ {
+ Name (_HID, EisaId ("PNP0700"))
+ Method (_STA, 0, NotSerialized)
+ {
+ Return (0x0F)
+ }
+
+ Name (_CRS, ResourceTemplate ()
+ {
+ IO (Decode16, 0x03F0, 0x03F0, 0x01, 0x06)
+ IO (Decode16, 0x03F7, 0x03F7, 0x01, 0x01)
+ IRQNoFlags () {6}
+ DMA (Compatibility, NotBusMaster, Transfer8) {2}
+ })
+ }
+
+ Device (UAR1)
+ {
+ Name (_HID, EisaId ("PNP0501"))
+ Name (_UID, 0x01)
+ Method (_STA, 0, NotSerialized)
+ {
+ Return (0x0F)
+ }
+
+ Name (_CRS, ResourceTemplate()
+ {
+ IO (Decode16, 0x03F8, 0x03F8, 0x01, 0x08)
+ IRQNoFlags () {4}
+ })
+ }
+
+ Device (UAR2)
+ {
+ Name (_HID, EisaId ("PNP0501"))
+ Name (_UID, 0x02)
+ Method (_STA, 0, NotSerialized)
+ {
+ Return (0x0F)
+ }
+
+ Name (_CRS, ResourceTemplate()
+ {
+ IO (Decode16, 0x02F8, 0x02F8, 0x01, 0x08)
+ IRQNoFlags () {3}
+ })
+ }
+ }
+ }
+ }
+}
+
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi2_0.h
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi2_0.h Thu Jun 30 04:23:18 2005
@@ -0,0 +1,317 @@
+/*
+ * Copyright (c) 2004, 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_2_0_H_
+#define _ACPI_2_0_H_
+
+#include "xc.h" // for u8, u16, u32, u64 definition
+
+#pragma pack (1)
+
+//
+// common ACPI header.
+//
+
+typedef struct {
+ u32 Signature;
+ u32 Length;
+ u8 Revision;
+ u8 Checksum;
+ u8 OemId[6];
+ u64 OemTableId;
+ u32 OemRevision;
+ u32 CreatorId;
+ u32 CreatorRevision;
+} ACPI_TABLE_HEADER;
+
+
+#define ACPI_OEM_ID {'I','N','T','E','L',' '}
+#define ACPI_OEM_TABLE_ID 0x544244 // "TBD"
+#define ACPI_OEM_REVISION 0x00000002
+#define ACPI_CREATOR_ID 0x00 // TBD
+#define ACPI_CREATOR_REVISION 0x00000002
+
+//
+// ACPI 2.0 Generic Address Space definition
+//
+typedef struct {
+ u8 AddressSpaceId;
+ u8 RegisterBitWidth;
+ u8 RegisterBitOffset;
+ u8 Reserved;
+ u64 Address;
+} ACPI_GENERIC_ADDRESS_STRUCTURE;
+
+//
+// Generic Address Space Address IDs
+//
+#define ACPI_SYSTEM_MEMORY 0
+#define ACPI_SYSTEM_IO 1
+#define ACPI_PCI_CONFIGURATION_SPACE 2
+#define ACPI_EMBEDDED_CONTROLLER 3
+#define ACPI_SMBUS 4
+#define ACPI_FUNCTIONAL_FIXED_HARDWARE 0x7F
+
+//
+// Root System Description Pointer Structure in ACPI 1.0
+//
+typedef struct {
+ u64 Signature;
+ u8 Checksum;
+ u8 OemId[6];
+ u8 Reserved;
+ u32 RsdtAddress;
+} ACPI_1_0_RSDP;
+
+
+//
+// Root System Description Pointer Structure
+//
+typedef struct {
+ u64 Signature;
+ u8 Checksum;
+ u8 OemId[6];
+ u8 Revision;
+ u32 RsdtAddress;
+ u32 Length;
+ u64 XsdtAddress;
+ u8 ExtendedChecksum;
+ u8 Reserved[3];
+} ACPI_2_0_RSDP;
+
+
+//
+// The maximum number of entrys in RSDT or XSDT
+//
+#define ACPI_MAX_NUM_TABLES 2
+
+//
+// Root System Description Table (RSDT)
+//
+
+typedef struct {
+ ACPI_TABLE_HEADER Header;
+ u32 Entry[ACPI_MAX_NUM_TABLES];
+}ACPI_2_0_RSDT;
+
+//
+// RSDT Revision (as defined in ACPI 2.0 spec.)
+//
+
+#define ACPI_2_0_RSDT_REVISION 0x01
+
+//
+// Extended System Description Table (XSDT)
+//
+
+typedef struct _ACPI_2_0_XSDT{
+ ACPI_TABLE_HEADER Header;
+ u64 Entry[ACPI_MAX_NUM_TABLES];
+}ACPI_2_0_XSDT;
+#define ACPI_2_0_XSDT_REVISION 0x01
+
+//
+// Fixed ACPI Description Table Structure (FADT)
+//
+
+typedef struct {
+ ACPI_TABLE_HEADER Header;
+ u32 FirmwareCtrl;
+ u32 Dsdt;
+ u8 Reserved0;
+ u8 PreferredPmProfile;
+ u16 SciInt;
+ u32 SmiCmd;
+ u8 AcpiEnable;
+ u8 AcpiDisable;
+ u8 S4BiosReq;
+ u8 PstateCnt;
+ u32 Pm1aEvtBlk;
+ u32 Pm1bEvtBlk;
+ u32 Pm1aCntBlk;
+ u32 Pm1bCntBlk;
+ u32 Pm2CntBlk;
+ u32 PmTmrBlk;
+ u32 Gpe0Blk;
+ u32 Gpe1Blk;
+ u8 Pm1EvtLen;
+ u8 Pm1CntLen;
+ u8 Pm2CntLen;
+ u8 PmTmrLen;
+ u8 Gpe0BlkLen;
+ u8 Gpe1BlkLen;
+ u8 Gpe1Base;
+ u8 CstCnt;
+ u16 PLvl2Lat;
+ u16 PLvl3Lat;
+ u16 FlushSize;
+ u16 FlushStride;
+ u8 DutyOffset;
+ u8 DutyWidth;
+ u8 DayAlrm;
+ u8 MonAlrm;
+ u8 Century;
+ u16 IaPcBootArch;
+ u8 Reserved1;
+ u32 Flags;
+ ACPI_GENERIC_ADDRESS_STRUCTURE ResetReg;
+ u8 ResetValue;
+ u8 Reserved2[3];
+ u64 XFirmwareCtrl;
+ u64 XDsdt;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XGpe0Blk;
+ ACPI_GENERIC_ADDRESS_STRUCTURE XGpe1Blk;
+} ACPI_2_0_FADT;
+#define ACPI_2_0_FADT_REVISION 0x03
+
+//
+// FADT Boot Architecture Flags
+//
+#define ACPI_LEGACY_DEVICES (1 << 0)
+#define ACPI_8042 (1 << 1)
+
+//
+// FADT Fixed Feature Flags
+//
+#define ACPI_WBINVD (1 << 0)
+#define ACPI_WBINVD_FLUSH (1 << 1)
+#define ACPI_PROC_C1 (1 << 2)
+#define ACPI_P_LVL2_UP (1 << 3)
+#define ACPI_PWR_BUTTON (1 << 4)
+#define ACPI_SLP_BUTTON (1 << 5)
+#define ACPI_FIX_RTC (1 << 6)
+#define ACPI_RTC_S4 (1 << 7)
+#define ACPI_TMR_VAL_EXT (1 << 8)
+#define ACPI_DCK_CAP (1 << 9)
+#define ACPI_RESET_REG_SUP (1 << 10)
+#define ACPI_SEALED_CASE (1 << 11)
+#define ACPI_HEADLESS (1 << 12)
+#define ACPI_CPU_SW_SLP (1 << 13)
+
+//
+// Firmware ACPI Control Structure (FACS)
+//
+typedef struct {
+ u32 Signature;
+ u32 Length;
+ u32 HardwareSignature;
+ u32 FirmwareWakingVector;
+ u32 GlobalLock;
+ u32 Flags;
+ u64 XFirmwareWakingVector;
+ u8 Version;
+ u8 Reserved[31];
+} ACPI_2_0_FACS;
+
+#define ACPI_2_0_FACS_VERSION 0x01
+
+//
+// Multiple APIC Description Table header definition (MADT)
+//
+typedef struct {
+ ACPI_TABLE_HEADER Header;
+ u32 LocalApicAddress;
+ u32 Flags;
+} ACPI_2_0_MADT;
+
+#define ACPI_2_0_MADT_REVISION 0x01
+
+//
+// Multiple APIC Flags
+//
+#define ACPI_PCAT_COMPAT (1 << 0)
+
+//
+// Multiple APIC Description Table APIC structure types
+//
+#define ACPI_PROCESSOR_LOCAL_APIC 0x00
+#define ACPI_IO_APIC 0x01
+#define ACPI_INTERRUPT_SOURCE_OVERRIDE 0x02
+#define ACPI_NON_MASKABLE_INTERRUPT_SOURCE 0x03
+#define ACPI_LOCAL_APIC_NMI 0x04
+#define ACPI_LOCAL_APIC_ADDRESS_OVERRIDE 0x05
+#define ACPI_IO_SAPIC 0x06
+#define ACPI_PROCESSOR_LOCAL_SAPIC 0x07
+#define ACPI_PLATFORM_INTERRUPT_SOURCES 0x08
+
+//
+// APIC Structure Definitions
+//
+
+//
+// Processor Local APIC Structure Definition
+//
+
+typedef struct {
+ u8 Type;
+ u8 Length;
+ u8 AcpiProcessorId;
+ u8 ApicId;
+ u32 Flags;
+} ACPI_LOCAL_APIC_STRUCTURE;
+
+//
+// Local APIC Flags. All other bits are reserved and must be 0.
+//
+
+#define ACPI_LOCAL_APIC_ENABLED (1 << 0)
+
+//
+// IO APIC Structure
+//
+
+typedef struct {
+ u8 Type;
+ u8 Length;
+ u8 IoApicId;
+ u8 Reserved;
+ u32 IoApicAddress;
+ u32 GlobalSystemInterruptBase;
+} ACPI_IO_APIC_STRUCTURE;
+
+// Tabel Signature
+#define ACPI_2_0_RSDP_SIGNATURE 0x2052545020445352LL // "RSD PTR "
+
+#define ACPI_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE 0x54445344 //"DSDT"
+
+#define ACPI_2_0_FACS_SIGNATURE 0x53434146 // "FACS"
+
+#define ACPI_2_0_FADT_SIGNATURE 0x50434146 // "FADT"
+
+#define ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE 0x43495041 // "APIC"
+
+#define ACPI_2_0_RSDT_SIGNATURE 0x54445352 // "RSDT"
+
+#define ACPI_2_0_XSDT_SIGNATURE 0x54445358 // "XSDT"
+
+#pragma pack ()
+
+// The physical that acpi table reside in the guest BIOS
+//#define ACPI_PHYSICAL_ADDRESS 0xE2000
+#define ACPI_PHYSICAL_ADDRESS 0xEA000
+#define ACPI_TABLE_SIZE (2*1024) //Currently 2K is enough
+
+void
+AcpiBuildTable(u8* buf);
+
+#endif
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_facs.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_facs.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+#include "acpi2_0.h"
+#include "acpi_facs.h"
+
+//
+// Firmware ACPI Control Structure
+//
+
+ACPI_2_0_FACS Facs = {
+ ACPI_2_0_FACS_SIGNATURE,
+ sizeof (ACPI_2_0_FACS),
+
+ //
+ // Hardware Signature
+ //
+ 0x00000000,
+
+ ACPI_FIRMWARE_WAKING_VECTOR,
+ ACPI_GLOBAL_LOCK,
+ ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS,
+ ACPI_X_FIRMWARE_WAKING_VECTOR,
+ ACPI_2_0_FACS_VERSION,
+ {
+ 0x00, // Reserved Fields
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ }
+};
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_facs.h
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_facs.h Thu Jun 30 04:23:18 2005
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2004, 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 _FACS_H
+#define _FACS_H
+
+//
+// FACS Definitions
+//
+
+#define ACPI_FIRMWARE_WAKING_VECTOR 0x00000000
+#define ACPI_GLOBAL_LOCK 0x00000000
+
+#define ACPI_FIRMWARE_CONTROL_STRUCTURE_FLAGS 0x00000000
+
+#define ACPI_X_FIRMWARE_WAKING_VECTOR 0x0000000000000000
+
+#endif
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_dsdt.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_dsdt.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,161 @@
+/*
+ *
+ * Intel ACPI Component Architecture
+ * ASL Optimizing Compiler / AML Disassembler version 20050513 [Jun 8 2005]
+ * Copyright (C) 2000 - 2005 Intel Corporation
+ * Supports ACPI Specification Revision 3.0
+ *
+ * Compilation of "acpi_dsdt.asl" - Wed Jun 15 09:19:49 2005
+ *
+ * C source code output
+ *
+ */
+unsigned char AmlCode[] =
+{
+ 0x44,0x53,0x44,0x54,0x87,0x04,0x00,0x00, /* 00000000 "DSDT...." */
+ 0x01,0x19,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */
+ 0x58,0x45,0x4E,0x20,0x20,0x20,0x20,0x20, /* 00000010 "XEN " */
+ 0x02,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */
+ 0x13,0x05,0x05,0x20,0x08,0x5C,0x50,0x4D, /* 00000020 "... .\PM" */
+ 0x42,0x53,0x0B,0x00,0x0C,0x08,0x5C,0x50, /* 00000028 "BS....\P" */
+ 0x4D,0x4C,0x4E,0x0A,0x08,0x08,0x5C,0x49, /* 00000030 "MLN...\I" */
+ 0x4F,0x42,0x31,0x0A,0x00,0x08,0x5C,0x49, /* 00000038 "OB1...\I" */
+ 0x4F,0x4C,0x31,0x0A,0x00,0x08,0x5C,0x41, /* 00000040 "OL1...\A" */
+ 0x50,0x43,0x42,0x0C,0x00,0x00,0xC0,0xFE, /* 00000048 "PCB....." */
+ 0x08,0x5C,0x41,0x50,0x43,0x4C,0x0C,0x00, /* 00000050 ".\APCL.." */
+ 0x00,0x01,0x00,0x08,0x5C,0x50,0x55,0x49, /* 00000058 "....\PUI" */
+ 0x44,0x0A,0x00,0x10,0x3A,0x5C,0x5F,0x50, /* 00000060 "D...:\_P" */
+ 0x52,0x5F,0x5B,0x83,0x0B,0x43,0x50,0x55, /* 00000068 "R_[..CPU" */
+ 0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x5B, /* 00000070 "0......[" */
+ 0x83,0x0B,0x43,0x50,0x55,0x31,0x01,0x00, /* 00000078 "..CPU1.." */
+ 0x00,0x00,0x00,0x00,0x5B,0x83,0x0B,0x43, /* 00000080 "....[..C" */
+ 0x50,0x55,0x32,0x02,0x00,0x00,0x00,0x00, /* 00000088 "PU2....." */
+ 0x00,0x5B,0x83,0x0B,0x43,0x50,0x55,0x33, /* 00000090 ".[..CPU3" */
+ 0x03,0x00,0x00,0x00,0x00,0x00,0x10,0x48, /* 00000098 ".......H" */
+ 0x3E,0x5C,0x5F,0x53,0x42,0x5F,0x5B,0x82, /* 000000A0 ">\_SB_[." */
+ 0x4F,0x3D,0x50,0x43,0x49,0x30,0x08,0x5F, /* 000000A8 "O=PCI0._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x0A,0x03, /* 000000B0 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x0A,0x00,0x08, /* 000000B8 "._UID..." */
+ 0x5F,0x41,0x44,0x52,0x0A,0x00,0x08,0x5F, /* 000000C0 "_ADR..._" */
+ 0x42,0x42,0x4E,0x0A,0x00,0x14,0x4A,0x06, /* 000000C8 "BBN...J." */
+ 0x5F,0x43,0x52,0x53,0x00,0x08,0x50,0x52, /* 000000D0 "_CRS..PR" */
+ 0x54,0x30,0x11,0x48,0x05,0x0A,0x54,0x88, /* 000000D8 "T0.H..T." */
+ 0x0D,0x00,0x02,0x0F,0x00,0x00,0x00,0x00, /* 000000E0 "........" */
+ 0x00,0xFF,0x00,0x00,0x00,0x00,0x01,0x47, /* 000000E8 ".......G" */
+ 0x01,0xF8,0x0C,0xF8,0x0C,0x01,0x08,0x88, /* 000000F0 "........" */
+ 0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00, /* 000000F8 "........" */
+ 0x00,0xF7,0x0C,0x00,0x00,0xF8,0x0C,0x88, /* 00000100 "........" */
+ 0x0D,0x00,0x01,0x0C,0x03,0x00,0x00,0x00, /* 00000108 "........" */
+ 0x0D,0xFF,0x0F,0x00,0x00,0x00,0x03,0x87, /* 00000110 "........" */
+ 0x17,0x00,0x00,0x0C,0x02,0x00,0x00,0x00, /* 00000118 "........" */
+ 0x00,0x00,0x00,0x0A,0x00,0xFF,0xFF,0x0F, /* 00000120 "........" */
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06, /* 00000128 "........" */
+ 0x00,0x79,0x00,0xA4,0x50,0x52,0x54,0x30, /* 00000130 ".y..PRT0" */
+ 0x08,0x41,0x49,0x52,0x30,0x12,0x47,0x05, /* 00000138 ".AIR0.G." */
+ 0x06,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1F, /* 00000140 "........" */
+ 0x00,0x0A,0x02,0x0A,0x00,0x0A,0x17,0x12, /* 00000148 "........" */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x1F,0x00,0x0A, /* 00000150 "........" */
+ 0x03,0x0A,0x00,0x0A,0x13,0x12,0x0D,0x04, /* 00000158 "........" */
+ 0x0C,0xFF,0xFF,0x1D,0x00,0x0A,0x01,0x0A, /* 00000160 "........" */
+ 0x00,0x0A,0x13,0x12,0x0D,0x04,0x0C,0xFF, /* 00000168 "........" */
+ 0xFF,0x1D,0x00,0x0A,0x00,0x0A,0x00,0x0A, /* 00000170 "........" */
+ 0x10,0x12,0x0D,0x04,0x0C,0xFF,0xFF,0x1D, /* 00000178 "........" */
+ 0x00,0x0A,0x02,0x0A,0x00,0x0A,0x12,0x12, /* 00000180 "........" */
+ 0x0D,0x04,0x0C,0xFF,0xFF,0x1D,0x00,0x0A, /* 00000188 "........" */
+ 0x03,0x0A,0x00,0x0A,0x17,0x14,0x0B,0x5F, /* 00000190 "......._" */
+ 0x50,0x52,0x54,0x00,0xA4,0x41,0x49,0x52, /* 00000198 "PRT..AIR" */
+ 0x30,0x5B,0x82,0x44,0x2E,0x49,0x53,0x41, /* 000001A0 "0[.D.ISA" */
+ 0x5F,0x08,0x5F,0x41,0x44,0x52,0x0C,0x00, /* 000001A8 "_._ADR.." */
+ 0x00,0x01,0x00,0x5B,0x82,0x47,0x0B,0x53, /* 000001B0 "...[.G.S" */
+ 0x59,0x53,0x52,0x08,0x5F,0x48,0x49,0x44, /* 000001B8 "YSR._HID" */
+ 0x0C,0x41,0xD0,0x0C,0x02,0x08,0x5F,0x55, /* 000001C0 ".A...._U" */
+ 0x49,0x44,0x0A,0x01,0x08,0x43,0x52,0x53, /* 000001C8 "ID...CRS" */
+ 0x5F,0x11,0x4E,0x08,0x0A,0x8A,0x47,0x01, /* 000001D0 "_.N...G." */
+ 0x10,0x00,0x10,0x00,0x00,0x10,0x47,0x01, /* 000001D8 "......G." */
+ 0x22,0x00,0x22,0x00,0x00,0x0C,0x47,0x01, /* 000001E0 ""."...G." */
+ 0x30,0x00,0x30,0x00,0x00,0x10,0x47,0x01, /* 000001E8 "0.0...G." */
+ 0x44,0x00,0x44,0x00,0x00,0x1C,0x47,0x01, /* 000001F0 "D.D...G." */
+ 0x62,0x00,0x62,0x00,0x00,0x02,0x47,0x01, /* 000001F8 "b.b...G." */
+ 0x65,0x00,0x65,0x00,0x00,0x0B,0x47,0x01, /* 00000200 "e.e...G." */
+ 0x72,0x00,0x72,0x00,0x00,0x0E,0x47,0x01, /* 00000208 "r.r...G." */
+ 0x80,0x00,0x80,0x00,0x00,0x01,0x47,0x01, /* 00000210 "......G." */
+ 0x84,0x00,0x84,0x00,0x00,0x03,0x47,0x01, /* 00000218 "......G." */
+ 0x88,0x00,0x88,0x00,0x00,0x01,0x47,0x01, /* 00000220 "......G." */
+ 0x8C,0x00,0x8C,0x00,0x00,0x03,0x47,0x01, /* 00000228 "......G." */
+ 0x90,0x00,0x90,0x00,0x00,0x10,0x47,0x01, /* 00000230 "......G." */
+ 0xA2,0x00,0xA2,0x00,0x00,0x1C,0x47,0x01, /* 00000238 "......G." */
+ 0xE0,0x00,0xE0,0x00,0x00,0x10,0x47,0x01, /* 00000240 "......G." */
+ 0xA0,0x08,0xA0,0x08,0x00,0x04,0x47,0x01, /* 00000248 "......G." */
+ 0xC0,0x0C,0xC0,0x0C,0x00,0x10,0x47,0x01, /* 00000250 "......G." */
+ 0xD0,0x04,0xD0,0x04,0x00,0x02,0x79,0x00, /* 00000258 "......y." */
+ 0x14,0x0B,0x5F,0x43,0x52,0x53,0x00,0xA4, /* 00000260 ".._CRS.." */
+ 0x43,0x52,0x53,0x5F,0x5B,0x82,0x2B,0x50, /* 00000268 "CRS_[.+P" */
+ 0x49,0x43,0x5F,0x08,0x5F,0x48,0x49,0x44, /* 00000270 "IC_._HID" */
+ 0x0B,0x41,0xD0,0x08,0x5F,0x43,0x52,0x53, /* 00000278 ".A.._CRS" */
+ 0x11,0x18,0x0A,0x15,0x47,0x01,0x20,0x00, /* 00000280 "....G. ." */
+ 0x20,0x00,0x01,0x02,0x47,0x01,0xA0,0x00, /* 00000288 " ...G..." */
+ 0xA0,0x00,0x01,0x02,0x22,0x04,0x00,0x79, /* 00000290 "...."..y" */
+ 0x00,0x5B,0x82,0x47,0x05,0x44,0x4D,0x41, /* 00000298 ".[.G.DMA" */
+ 0x30,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000002A0 "0._HID.A" */
+ 0xD0,0x02,0x00,0x08,0x5F,0x43,0x52,0x53, /* 000002A8 "...._CRS" */
+ 0x11,0x41,0x04,0x0A,0x3D,0x2A,0x10,0x04, /* 000002B0 ".A..=*.." */
+ 0x47,0x01,0x00,0x00,0x00,0x00,0x00,0x10, /* 000002B8 "G......." */
+ 0x47,0x01,0x81,0x00,0x81,0x00,0x00,0x03, /* 000002C0 "G......." */
+ 0x47,0x01,0x87,0x00,0x87,0x00,0x00,0x01, /* 000002C8 "G......." */
+ 0x47,0x01,0x89,0x00,0x89,0x00,0x00,0x03, /* 000002D0 "G......." */
+ 0x47,0x01,0x8F,0x00,0x8F,0x00,0x00,0x01, /* 000002D8 "G......." */
+ 0x47,0x01,0xC0,0x00,0xC0,0x00,0x00,0x20, /* 000002E0 "G...... " */
+ 0x47,0x01,0x80,0x04,0x80,0x04,0x00,0x10, /* 000002E8 "G......." */
+ 0x79,0x00,0x5B,0x82,0x25,0x54,0x4D,0x52, /* 000002F0 "y.[.%TMR" */
+ 0x5F,0x08,0x5F,0x48,0x49,0x44,0x0C,0x41, /* 000002F8 "_._HID.A" */
+ 0xD0,0x01,0x00,0x08,0x5F,0x43,0x52,0x53, /* 00000300 "...._CRS" */
+ 0x11,0x10,0x0A,0x0D,0x47,0x01,0x40,0x00, /* 00000308 "....G.@." */
+ 0x40,0x00,0x00,0x04,0x22,0x01,0x00,0x79, /* 00000310 "@..."..y" */
+ 0x00,0x5B,0x82,0x25,0x52,0x54,0x43,0x5F, /* 00000318 ".[.%RTC_" */
+ 0x08,0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0, /* 00000320 "._HID.A." */
+ 0x0B,0x00,0x08,0x5F,0x43,0x52,0x53,0x11, /* 00000328 "..._CRS." */
+ 0x10,0x0A,0x0D,0x47,0x01,0x70,0x00,0x70, /* 00000330 "...G.p.p" */
+ 0x00,0x00,0x02,0x22,0x00,0x01,0x79,0x00, /* 00000338 "..."..y." */
+ 0x5B,0x82,0x22,0x53,0x50,0x4B,0x52,0x08, /* 00000340 "[."SPKR." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x08, /* 00000348 "_HID.A.." */
+ 0x00,0x08,0x5F,0x43,0x52,0x53,0x11,0x0D, /* 00000350 ".._CRS.." */
+ 0x0A,0x0A,0x47,0x01,0x61,0x00,0x61,0x00, /* 00000358 "..G.a.a." */
+ 0x00,0x01,0x79,0x00,0x5B,0x82,0x31,0x50, /* 00000360 "..y.[.1P" */
+ 0x53,0x32,0x4D,0x08,0x5F,0x48,0x49,0x44, /* 00000368 "S2M._HID" */
+ 0x0C,0x41,0xD0,0x0F,0x13,0x08,0x5F,0x43, /* 00000370 ".A...._C" */
+ 0x49,0x44,0x0C,0x41,0xD0,0x0F,0x13,0x14, /* 00000378 "ID.A...." */
+ 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000380 "._STA..." */
+ 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x08, /* 00000388 ".._CRS.." */
+ 0x0A,0x05,0x22,0x00,0x10,0x79,0x00,0x5B, /* 00000390 ".."..y.[" */
+ 0x82,0x42,0x04,0x50,0x53,0x32,0x4B,0x08, /* 00000398 ".B.PS2K." */
+ 0x5F,0x48,0x49,0x44,0x0C,0x41,0xD0,0x03, /* 000003A0 "_HID.A.." */
+ 0x03,0x08,0x5F,0x43,0x49,0x44,0x0C,0x41, /* 000003A8 ".._CID.A" */
+ 0xD0,0x03,0x0B,0x14,0x09,0x5F,0x53,0x54, /* 000003B0 "....._ST" */
+ 0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F,0x43, /* 000003B8 "A....._C" */
+ 0x52,0x53,0x11,0x18,0x0A,0x15,0x47,0x01, /* 000003C0 "RS....G." */
+ 0x60,0x00,0x60,0x00,0x00,0x01,0x47,0x01, /* 000003C8 "`.`...G." */
+ 0x64,0x00,0x64,0x00,0x00,0x01,0x22,0x02, /* 000003D0 "d.d..."." */
+ 0x00,0x79,0x00,0x5B,0x82,0x3A,0x46,0x44, /* 000003D8 ".y.[.:FD" */
+ 0x43,0x30,0x08,0x5F,0x48,0x49,0x44,0x0C, /* 000003E0 "C0._HID." */
+ 0x41,0xD0,0x07,0x00,0x14,0x09,0x5F,0x53, /* 000003E8 "A....._S" */
+ 0x54,0x41,0x00,0xA4,0x0A,0x0F,0x08,0x5F, /* 000003F0 "TA....._" */
+ 0x43,0x52,0x53,0x11,0x1B,0x0A,0x18,0x47, /* 000003F8 "CRS....G" */
+ 0x01,0xF0,0x03,0xF0,0x03,0x01,0x06,0x47, /* 00000400 ".......G" */
+ 0x01,0xF7,0x03,0xF7,0x03,0x01,0x01,0x22, /* 00000408 "......."" */
+ 0x40,0x00,0x2A,0x04,0x00,0x79,0x00,0x5B, /* 00000410 "@.*..y.[" */
+ 0x82,0x36,0x55,0x41,0x52,0x31,0x08,0x5F, /* 00000418 ".6UAR1._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x05,0x01, /* 00000420 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x0A,0x01,0x14, /* 00000428 "._UID..." */
+ 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000430 "._STA..." */
+ 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000438 ".._CRS.." */
+ 0x0A,0x0D,0x47,0x01,0xF8,0x03,0xF8,0x03, /* 00000440 "..G....." */
+ 0x01,0x08,0x22,0x10,0x00,0x79,0x00,0x5B, /* 00000448 ".."..y.[" */
+ 0x82,0x36,0x55,0x41,0x52,0x32,0x08,0x5F, /* 00000450 ".6UAR2._" */
+ 0x48,0x49,0x44,0x0C,0x41,0xD0,0x05,0x01, /* 00000458 "HID.A..." */
+ 0x08,0x5F,0x55,0x49,0x44,0x0A,0x02,0x14, /* 00000460 "._UID..." */
+ 0x09,0x5F,0x53,0x54,0x41,0x00,0xA4,0x0A, /* 00000468 "._STA..." */
+ 0x0F,0x08,0x5F,0x43,0x52,0x53,0x11,0x10, /* 00000470 ".._CRS.." */
+ 0x0A,0x0D,0x47,0x01,0xF8,0x02,0xF8,0x02, /* 00000478 "..G....." */
+ 0x01,0x08,0x22,0x08,0x00,0x79,0x00,
+};
+int DsdtLen=sizeof(AmlCode);
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/Makefile
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/Makefile Thu Jun 30 04:23:18 2005
@@ -0,0 +1,68 @@
+#/*
+# * Copyright (c) 2004, 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.
+# *
+# */
+#
+# Compiler flag
+CFLAG=-I. -I../../libxc
+
+# Compiler tool
+CC=gcc
+
+# TARGET
+C_SRC=$(shell ls *.c)
+H_SRC=$(shell ls *.h)
+ACPI_GEN=acpigen
+ACPI_BIN=acpi.bin
+
+IASL_VER=acpica-unix-20050513
+IASL_URL=http://developer.intel.com/technology/iapc/acpi/downloads/$(IASL_VER).tar.gz
+
+vpath iasl $(PATH)
+all:$(ACPI_BIN)
+
+acpi_dsdt.c:acpi_dsdt.asl
+ $(MAKE) iasl
+ iasl -oa -tc acpi_dsdt.asl
+ mv acpi_dsdt.hex acpi_dsdt.c
+ echo "int DsdtLen=sizeof(AmlCode);" >> acpi_dsdt.c
+ rm *.aml
+
+iasl:
+ @echo
+ @echo "ACPI ASL compiler(iasl) is needed"
+ @echo "Download Intel ACPI CA"
+ @echo "If wget failed, please download and compile manually from"
+ @echo "http://developer.intel.com/technology/iapc/acpi/downloads.htm"
+ @echo
+ wget $(IASL_URL)
+ tar xzf $(IASL_VER).tar.gz
+ make -C $(IASL_VER)/compiler
+ install $(IASL_VER)/compiler/iasl /usr/bin/iasl
+
+$(ACPI_GEN):$(C_SRC) $(H_SRC) acpi_dsdt.c
+ $(CC) -o $(ACPI_GEN) $(CFLAG) $(shell ls *.c)
+
+$(ACPI_BIN):$(ACPI_GEN)
+ ./$(ACPI_GEN) $(ACPI_BIN)
+
+clean:
+ rm -rf *.o $(ACPI_GEN) $(ACPI_BIN) $(IASL_VER)
+# rm -f acpi_dsdt.c
+ rm -rf $(IASL_VER).tar.gz
+install:all
+
+
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_rsdt.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_rsdt.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+#include "acpi2_0.h"
+
+ACPI_2_0_RSDT Rsdt={
+ {
+ ACPI_2_0_RSDT_SIGNATURE,
+ sizeof (ACPI_TABLE_HEADER), // udpated later
+ ACPI_2_0_RSDT_REVISION,
+ 0x0, //Checksum, updated later
+ ACPI_OEM_ID,
+ ACPI_OEM_TABLE_ID,
+ ACPI_OEM_REVISION,
+ ACPI_CREATOR_ID,
+ ACPI_CREATOR_REVISION,
+ },
+ {0x0, 0x0}
+};
+
+ACPI_2_0_XSDT Xsdt={
+ {
+ ACPI_2_0_XSDT_SIGNATURE,
+ sizeof (ACPI_TABLE_HEADER), //update later
+ ACPI_2_0_XSDT_REVISION,
+ 0x0, //Checksum, update later
+ ACPI_OEM_ID,
+ ACPI_OEM_TABLE_ID,
+ ACPI_OEM_REVISION,
+ ACPI_CREATOR_ID,
+ ACPI_CREATOR_REVISION,
+ },
+ {0x0, 0x0},
+};
+
+
+ACPI_2_0_RSDP Rsdp={
+ ACPI_2_0_RSDP_SIGNATURE,
+ 0x00, // Checksum, updated in later
+ ACPI_OEM_ID, // OEM ID,
+ ACPI_OEM_REVISION,
+ 0x0, // RSDT address, updated later
+ sizeof (ACPI_2_0_RSDP),
+ 0x0, // XSDT address, updated later
+ 0x0, // Extended Checksum, update later
+ {
+ 0x0, // Reserved
+ 0x0, // Reserved
+ 0x0, // Reserved
+ }
+};
+
+
+
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_build.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_build.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,232 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+
+#include "acpi2_0.h"
+#include "acpi_madt.h"
+
+extern ACPI_2_0_RSDP Rsdp;
+extern ACPI_2_0_RSDT Rsdt;
+extern ACPI_2_0_XSDT Xsdt;
+extern ACPI_2_0_FADT Fadt;
+extern ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE Madt;
+extern ACPI_2_0_FACS Facs;
+extern unsigned char *AmlCode;
+extern int DsdtLen;
+
+
+typedef struct _ACPI_TABLE_ALL{
+ ACPI_2_0_RSDP *Rsdp;
+ ACPI_2_0_RSDT *Rsdt;
+ ACPI_2_0_XSDT *Xsdt;
+ ACPI_2_0_FADT *Fadt;
+ ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE *Madt;
+ ACPI_2_0_FACS *Facs;
+ unsigned char* Dsdt;
+ u32 RsdpOffset;
+ u32 RsdtOffset;
+ u32 XsdtOffset;
+ u32 FadtOffset;
+ u32 MadtOffset;
+ u32 FacsOffset;
+ u32 DsdtOffset;
+}ACPI_TABLE_ALL;
+
+static
+void
+MemCopy(void* src, void* dst, int len){
+
+ u8* src0=src;
+ u8* dst0=dst;
+
+ while(len--){
+ *(dst0++)=*(src0++);
+ }
+}
+
+static
+void
+SetCheckSum(
+ void* Table,
+ u32 ChecksumOffset,
+ u32 Length
+)
+/*
+ * Routine Description:
+ * Calculate Checksum and store the result in the checksum
+ * filed of the table
+ *
+ * INPUT:
+ * Table: Start pointer of table
+ * ChecksumOffset: Offset of checksum field in the table
+ * Length: Length of Table
+ */
+{
+ u8 Sum = 0;
+ u8 *Ptr;
+
+ Ptr=Table;
+ Ptr[ChecksumOffset]=0;
+ while (Length--) {
+ Sum = (u8)(Sum + (*Ptr++));
+ }
+
+ Ptr = Table;
+ Ptr[ChecksumOffset] = (u8) (0xff - Sum + 1);
+}
+
+//
+// FIELD_OFFSET - returns the byte offset to a field within a structure
+//
+#define FIELD_OFFSET(TYPE,Field) ((u32)(&(((TYPE *) 0)->Field)))
+
+static
+void
+UpdateTable(
+ ACPI_TABLE_ALL *table
+)
+/*
+ * Update the ACPI table:
+ * fill in the actuall physical address of RSDT, XSDT, FADT, MADT, FACS
+ * Caculate the checksum
+ */
+{
+ // RSDP Update
+ table->Rsdp->RsdtAddress = (u32)(ACPI_PHYSICAL_ADDRESS+
+ table->RsdtOffset);
+ table->Rsdp->XsdtAddress = (u64)(ACPI_PHYSICAL_ADDRESS+
+ table->XsdtOffset);
+ SetCheckSum(table->Rsdp,
+ FIELD_OFFSET(ACPI_1_0_RSDP, Checksum),
+ sizeof(ACPI_1_0_RSDP)
+ );
+ SetCheckSum(table->Rsdp,
+ FIELD_OFFSET(ACPI_2_0_RSDP,
+ ExtendedChecksum),
+ sizeof(ACPI_2_0_RSDP)
+ );
+
+
+ //RSDT Update
+ table->Rsdt->Entry[0] = (u32)(ACPI_PHYSICAL_ADDRESS +
+ table->FadtOffset);
+ table->Rsdt->Entry[1] = (u32)(ACPI_PHYSICAL_ADDRESS +
+ table->MadtOffset);
+ table->Rsdt->Header.Length = sizeof (ACPI_TABLE_HEADER) +
+ 2*sizeof(u32);
+ SetCheckSum(table->Rsdt,
+ FIELD_OFFSET(ACPI_TABLE_HEADER, Checksum),
+ table->Rsdt->Header.Length
+ );
+
+ //XSDT Update
+ table->Xsdt->Entry[0] = (u64)(ACPI_PHYSICAL_ADDRESS +
+ table->FadtOffset);
+ table->Xsdt->Entry[1] = (u64)(ACPI_PHYSICAL_ADDRESS +
+ table->MadtOffset);
+ table->Xsdt->Header.Length = sizeof (ACPI_TABLE_HEADER) +
+ 2*sizeof(u64);
+ SetCheckSum(table->Xsdt,
+ FIELD_OFFSET(ACPI_TABLE_HEADER, Checksum),
+ table->Xsdt->Header.Length
+ );
+
+ // FADT Update
+ table->Fadt->Dsdt = (u32)(ACPI_PHYSICAL_ADDRESS +
+ table->DsdtOffset);
+ table->Fadt->XDsdt = (u64)(ACPI_PHYSICAL_ADDRESS +
+ table->DsdtOffset);
+ table->Fadt->FirmwareCtrl = (u32)(ACPI_PHYSICAL_ADDRESS +
+ table->FacsOffset);
+ table->Fadt->XFirmwareCtrl = (u64)(ACPI_PHYSICAL_ADDRESS +
+ table->FacsOffset);
+ SetCheckSum(table->Fadt,
+ FIELD_OFFSET(ACPI_TABLE_HEADER, Checksum),
+ sizeof(ACPI_2_0_FADT)
+ );
+
+ // MADT update
+ SetCheckSum(table->Madt,
+ FIELD_OFFSET(ACPI_TABLE_HEADER, Checksum),
+ sizeof(ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE)
+ );
+}
+
+void
+AcpiBuildTable(u8* buf)
+/*
+ * Copy all the ACPI table to buffer
+ * Buffer Layout:
+ * FACS
+ * RSDP
+ * RSDT
+ * XSDT
+ * FADT
+ * MADT
+ * DSDT
+ *
+ */
+{
+ ACPI_TABLE_ALL table;
+ int offset=0;
+
+ // FACS: should be 64-bit alignment
+ // so it is put at the start of buffer
+ // as the buffer is 64 bit alignment
+ table.FacsOffset = offset;
+ table.Facs = (ACPI_2_0_FACS*)(&buf[offset]);
+ MemCopy(&Facs, table.Facs, sizeof(ACPI_2_0_FACS));
+ offset += sizeof(ACPI_2_0_FACS);
+
+ // RSDP
+ table.RsdpOffset = offset;
+ table.Rsdp = (ACPI_2_0_RSDP*)(&buf[offset]);
+ MemCopy(&Rsdp, table.Rsdp, sizeof(ACPI_2_0_RSDP));
+ offset+=sizeof(ACPI_2_0_RSDP);
+
+ // RSDT
+ table.RsdtOffset = offset;
+ table.Rsdt = (ACPI_2_0_RSDT*)(&buf[offset]);
+ MemCopy(&Rsdt, table.Rsdt, sizeof(ACPI_2_0_RSDT));
+ offset+=sizeof(ACPI_2_0_RSDT);
+
+ // XSDT
+ table.XsdtOffset = offset;
+ table.Xsdt = (ACPI_2_0_XSDT*)(&buf[offset]);
+ MemCopy(&Xsdt, table.Xsdt, sizeof(ACPI_2_0_XSDT));
+ offset+=sizeof(ACPI_2_0_XSDT);
+
+ // FADT
+ table.FadtOffset = offset;
+ table.Fadt = (ACPI_2_0_FADT*)(&buf[offset]);
+ MemCopy(&Fadt, table.Fadt, sizeof(ACPI_2_0_FADT));
+ offset+=sizeof(ACPI_2_0_FADT);
+
+ // MADT
+ table.MadtOffset = offset;
+ table.Madt = (ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE*)(&buf[offset]);
+ MemCopy(&Madt, table.Madt, sizeof(ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE));
+ offset+=sizeof(ACPI_MULTIPLE_APIC_DESCRIPTION_TABLE);
+
+ // DSDT
+ table.DsdtOffset = offset;
+ table.Dsdt = (unsigned char*)(&buf[offset]);
+ MemCopy(&AmlCode, table.Dsdt, DsdtLen);
+ offset+=DsdtLen;
+
+ UpdateTable(&table);
+}
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_fadt.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_fadt.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,193 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+
+#include "acpi2_0.h"
+#include "acpi_fadt.h"
+
+//
+// Fixed ACPI Description Table
+//
+
+ACPI_2_0_FADT Fadt = {
+ {
+ ACPI_2_0_FADT_SIGNATURE,
+ sizeof (ACPI_2_0_FADT),
+ ACPI_2_0_FADT_REVISION,
+ 0x00,// Checksum will be updated later
+ ACPI_OEM_ID, // OEM ID
+ ACPI_OEM_TABLE_ID, // OEM Table ID
+ ACPI_OEM_REVISION, // OEM Revision
+ ACPI_CREATOR_ID, // Creator ID
+ ACPI_CREATOR_REVISION, // Creator Revision
+ },
+ //
+ // These addresses will be updated later
+ //
+ 0x00000000, // Physical Address (0~4G) of the FACS
+ 0x00000000, // Physical Address (0~4G) of the DSDT
+
+ 0x00,
+ ACPI_PREFERRED_PM_PROFILE, // Enterprise
+ ACPI_SCI_INT, // IRQ 9
+ ACPI_SMI_CMD,
+ ACPI_ACPI_ENABLE,
+ ACPI_ACPI_DISABLE,
+ ACPI_S4_BIOS_REQ, // zero. not supported
+ ACPI_PSTATE_CNT, // not supported
+
+ ACPI_PM1A_EVT_BLK_ADDRESS, // required
+ ACPI_PM1B_EVT_BLK_ADDRESS, // not supported
+ ACPI_PM1A_CNT_BLK_ADDRESS, // required
+ ACPI_PM1B_CNT_BLK_ADDRESS, // not supported
+ ACPI_PM2_CNT_BLK_ADDRESS, // not supported
+ ACPI_PM_TMR_BLK_ADDRESS, // required
+ ACPI_GPE0_BLK_ADDRESS, // not supported
+ ACPI_GPE1_BLK_ADDRESS, // not supported
+ ACPI_PM1_EVT_LEN,
+ ACPI_PM1_CNT_LEN,
+ ACPI_PM2_CNT_LEN,
+ ACPI_PM_TMR_LEN,
+ ACPI_GPE0_BLK_LEN,
+ ACPI_GPE1_BLK_LEN,
+ ACPI_GPE1_BASE,
+
+ ACPI_CST_CNT,
+ ACPI_P_LVL2_LAT, // >100, not support C2 state
+ ACPI_P_LVL3_LAT, // >1000, not support C3 state
+ ACPI_FLUSH_SIZE, // not support
+ ACPI_FLUSH_STRIDE, // not support
+ ACPI_DUTY_OFFSET, // not support
+ ACPI_DUTY_WIDTH, // not support
+ ACPI_DAY_ALRM, // not support
+ ACPI_MON_ALRM, // not support
+ ACPI_CENTURY, // not support
+ ACPI_IAPC_BOOT_ARCH,
+ 0x00,
+ ACPI_FIXED_FEATURE_FLAGS,
+
+ //
+ // Reset Register Block
+ //
+ { ACPI_RESET_REG_ADDRESS_SPACE_ID,
+ ACPI_RESET_REG_BIT_WIDTH,
+ ACPI_RESET_REG_BIT_OFFSET,
+ 0x00,
+ ACPI_RESET_REG_ADDRESS,
+ },
+
+ ACPI_RESET_VALUE,
+ {
+ 0x00,
+ 0x00,
+ 0x00,
+ },
+ //
+ // These addresses will be updated later
+ //
+ 0x0000000000000000, // X_FIRMWARE_CTRL: 64bit physical address of the FACS.
+ 0x0000000000000000, // X_DSDT: 64bit physical address of the DSDT.
+
+ //
+ // PM1a Event Register Block
+ //
+ {
+ ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID,
+ ACPI_PM1A_EVT_BLK_BIT_WIDTH,
+ ACPI_PM1A_EVT_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM1A_EVT_BLK_ADDRESS,
+ },
+
+ //
+ // PM1b Event Register Block
+ //
+ {
+ ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID, // not support
+ ACPI_PM1B_EVT_BLK_BIT_WIDTH,
+ ACPI_PM1B_EVT_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM1B_EVT_BLK_ADDRESS,
+ },
+
+ //
+ // PM1a Control Register Block
+ //
+ {
+ ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID,
+ ACPI_PM1A_CNT_BLK_BIT_WIDTH,
+ ACPI_PM1A_CNT_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM1A_CNT_BLK_ADDRESS,
+ },
+
+ //
+ // PM1b Control Register Block
+ //
+ {
+ ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID,
+ ACPI_PM1B_CNT_BLK_BIT_WIDTH,
+ ACPI_PM1B_CNT_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM1B_CNT_BLK_ADDRESS,
+ },
+
+ //
+ // PM2 Control Register Block
+ //
+ {
+ ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID,
+ ACPI_PM2_CNT_BLK_BIT_WIDTH,
+ ACPI_PM2_CNT_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM2_CNT_BLK_ADDRESS,
+ },
+
+ //
+ // PM Timer Control Register Block
+ //
+ {
+ ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID,
+ ACPI_PM_TMR_BLK_BIT_WIDTH,
+ ACPI_PM_TMR_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_PM_TMR_BLK_ADDRESS,
+ },
+
+ //
+ // General Purpose Event 0 Register Block
+ //
+ {
+ ACPI_GPE0_BLK_ADDRESS_SPACE_ID,
+ ACPI_GPE0_BLK_BIT_WIDTH,
+ ACPI_GPE0_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_GPE0_BLK_ADDRESS,
+ },
+
+ //
+ // General Purpose Event 1 Register Block
+ //
+ {
+ ACPI_GPE1_BLK_ADDRESS_SPACE_ID,
+ ACPI_GPE1_BLK_BIT_WIDTH,
+ ACPI_GPE1_BLK_BIT_OFFSET,
+ 0x00,
+ ACPI_GPE1_BLK_ADDRESS
+ }
+
+};
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_fadt.h
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_fadt.h Thu Jun 30 04:23:18 2005
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2004, 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 _FADT_H_
+#define _FADT_H_
+
+//
+// FADT Definitions, see ACPI 2.0 specification for details.
+//
+
+#define ACPI_OEM_FADT_REVISION 0x00000000 // TBD
+
+#define ACPI_PREFERRED_PM_PROFILE 0x04
+#define ACPI_SCI_INT 0x0009
+#define ACPI_SMI_CMD 0x000000B2
+#define ACPI_ACPI_ENABLE 0x00
+#define ACPI_ACPI_DISABLE 0x00
+#define ACPI_S4_BIOS_REQ 0x00
+#define ACPI_PSTATE_CNT 0x00
+#define ACPI_GPE1_BASE 0x20
+#define ACPI_CST_CNT 0x00
+#define ACPI_P_LVL2_LAT 0x0065
+#define ACPI_P_LVL3_LAT 0X03E9
+#define ACPI_FLUSH_SIZE 0x00
+#define ACPI_FLUSH_STRIDE 0x00
+#define ACPI_DUTY_OFFSET 0x01
+#define ACPI_DUTY_WIDTH 0x00
+#define ACPI_DAY_ALRM 0x00
+#define ACPI_MON_ALRM 0x00
+#define ACPI_CENTURY 0x00
+
+//
+// IA-PC Boot Architecture Flags, see ACPI 2.0 table specification and Acpi2_0.h
+//
+#define ACPI_IAPC_BOOT_ARCH (ACPI_LEGACY_DEVICES | ACPI_8042)
+
+//
+// Fixed Feature Flags
+//
+#define ACPI_FIXED_FEATURE_FLAGS (ACPI_SLP_BUTTON| ACPI_WBINVD )
+
+//
+// PM1A Event Register Block Generic Address Information
+//
+#define ACPI_PM1A_EVT_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM1A_EVT_BLK_BIT_WIDTH 0x00
+#define ACPI_PM1A_EVT_BLK_BIT_OFFSET 0x00
+#define ACPI_PM1A_EVT_BLK_ADDRESS 0x0000000000000000
+
+//
+// PM1B Event Register Block Generic Address Information
+//
+#define ACPI_PM1B_EVT_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM1B_EVT_BLK_BIT_WIDTH 0x00
+#define ACPI_PM1B_EVT_BLK_BIT_OFFSET 0x00
+#define ACPI_PM1B_EVT_BLK_ADDRESS 0x0000000000000000
+
+//
+// PM1A Control Register Block Generic Address Information
+//
+#define ACPI_PM1A_CNT_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM1A_CNT_BLK_BIT_WIDTH 0x10
+#define ACPI_PM1A_CNT_BLK_BIT_OFFSET 0x00
+#define ACPI_PM1A_CNT_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x04)
+
+//
+// PM1B Control Register Block Generic Address Information
+//
+#define ACPI_PM1B_CNT_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM1B_CNT_BLK_BIT_WIDTH 0x00
+#define ACPI_PM1B_CNT_BLK_BIT_OFFSET 0x00
+#define ACPI_PM1B_CNT_BLK_ADDRESS 0x0000000000000000
+
+//
+// PM2 Control Register Block Generic Address Information
+//
+#define ACPI_PM2_CNT_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM2_CNT_BLK_BIT_WIDTH 0x00
+#define ACPI_PM2_CNT_BLK_BIT_OFFSET 0x00
+#define ACPI_PM2_CNT_BLK_ADDRESS 0x0000000000000000
+
+//
+// Power Management Timer Control Register Block Generic Address
+// Information
+//
+#define ACPI_PM_TMR_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_PM_TMR_BLK_BIT_WIDTH 0x20
+#define ACPI_PM_TMR_BLK_BIT_OFFSET 0x00
+#define ACPI_PM_TMR_BLK_ADDRESS (ACPI_PM1A_EVT_BLK_ADDRESS + 0x08)
+
+//
+// General Purpose Event 0 Register Block Generic Address
+// Information
+//
+
+#define ACPI_GPE0_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_GPE0_BLK_BIT_WIDTH 0x00
+#define ACPI_GPE0_BLK_BIT_OFFSET 0x00
+#define ACPI_GPE0_BLK_ADDRESS 0x00
+
+//
+// General Purpose Event 1 Register Block Generic Address
+// Information
+//
+
+#define ACPI_GPE1_BLK_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_GPE1_BLK_BIT_WIDTH 0x00
+#define ACPI_GPE1_BLK_BIT_OFFSET 0x00
+#define ACPI_GPE1_BLK_ADDRESS 0x00
+
+
+//
+// Reset Register Generic Address Information
+//
+#define ACPI_RESET_REG_ADDRESS_SPACE_ID ACPI_SYSTEM_IO
+#define ACPI_RESET_REG_BIT_WIDTH 0x08
+#define ACPI_RESET_REG_BIT_OFFSET 0x00
+#define ACPI_RESET_REG_ADDRESS 0x0000000000000CF9
+#define ACPI_RESET_VALUE 0x06
+
+//
+// Number of bytes decoded by PM1 event blocks (a and b)
+//
+#define ACPI_PM1_EVT_LEN ((ACPI_PM1A_EVT_BLK_BIT_WIDTH + ACPI_PM1B_EVT_BLK_BIT_WIDTH) / 8)
+
+//
+// Number of bytes decoded by PM1 control blocks (a and b)
+//
+#define ACPI_PM1_CNT_LEN ((ACPI_PM1A_CNT_BLK_BIT_WIDTH + ACPI_PM1B_CNT_BLK_BIT_WIDTH) / 8)
+
+//
+// Number of bytes decoded by PM2 control block
+//
+#define ACPI_PM2_CNT_LEN (ACPI_PM2_CNT_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by PM timer block
+//
+#define ACPI_PM_TMR_LEN (ACPI_PM_TMR_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by GPE0 block
+//
+#define ACPI_GPE0_BLK_LEN (ACPI_GPE0_BLK_BIT_WIDTH / 8)
+
+//
+// Number of bytes decoded by GPE1 block
+//
+#define ACPI_GPE1_BLK_LEN 0
+
+#endif
diff -r 3c25261fef1c -r 5a8399ad9309 tools/firmware/acpi/acpi_gen.c
--- /dev/null Thu Jun 30 04:18:49 2005
+++ b/tools/firmware/acpi/acpi_gen.c Thu Jun 30 04:23:18 2005
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2004, 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.
+ *
+ */
+#include "acpi2_0.h"
+#include "stdio.h"
+
+/*
+ * Generate acpi table
+ * write acpi table to binary: acpitable.bin
+ *
+ */
+
+#define USAGE "Usage: acpi_gen filename \n" \
+ " generage acpitable and write to the binary \n" \
+ " filename - the binary name\n"
+
+
+int main(int argc, char** argv){
+ char* filename;
+ char buf[ACPI_TABLE_SIZE];
+ FILE* f=NULL;
+ int i;
+
+ for (i=0; i<ACPI_TABLE_SIZE; i++){
+ buf[i]=0;
+ }
+
+ if (argc<2){
+ fprintf(stderr,"%s",USAGE);
+ exit(1);
+ }
+
+ filename = argv[1];
+
+ if(!(f=fopen(filename, "w+"))){
+ fprintf(stderr,"Can not open %s",filename);
+ exit(1);
+ }
+ AcpiBuildTable(buf);
+ if (fwrite(buf, ACPI_TABLE_SIZE, 1, f)<1){
+ fprintf(stderr,"Can not write to %s\n",filename);
+ exit(1);
+ }
+ return 0;
+}
reply other threads:[~2005-06-30 5:52 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=20050630055213.GA7430@intel.com \
--to=arun.sharma@intel.com \
--cc=Ian.Pratt@cl.cam.ac.uk \
--cc=Keir.Fraser@cl.cam.ac.uk \
--cc=xen-devel@lists.xensource.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.