[HALACPI]: Add HAL ACPI header.
authorSir Richard <sir_richard@svn.reactos.org>
Wed, 31 Mar 2010 04:26:04 +0000 (04:26 +0000)
committerSir Richard <sir_richard@svn.reactos.org>
Wed, 31 Mar 2010 04:26:04 +0000 (04:26 +0000)
svn path=/trunk/; revision=46610

reactos/hal/halx86/include/hal.h
reactos/hal/halx86/include/halacpi.h [new file with mode: 0644]

index 3eff1e7..97e8f4a 100644 (file)
@@ -48,5 +48,6 @@
 #include "halp.h"
 #include "mps.h"
 #include "ioapic.h"
+#include "halacpi.h"
 
 /* EOF */
diff --git a/reactos/hal/halx86/include/halacpi.h b/reactos/hal/halx86/include/halacpi.h
new file mode 100644 (file)
index 0000000..9d0e1b2
--- /dev/null
@@ -0,0 +1,227 @@
+#pragma once
+
+//
+// Should be shared with FreeLDR
+//
+typedef struct _ACPI_E820_ENTRY
+{
+    PHYSICAL_ADDRESS Base;
+    LARGE_INTEGER Length;
+    ULONGLONG Type;
+} ACPI_E820_ENTRY, *PACPI_E820_ENTRY;
+
+typedef struct _ACPI_BIOS_MULTI_NODE
+{
+    PHYSICAL_ADDRESS RsdtAddress;
+    ULONGLONG Count;
+    ACPI_E820_ENTRY E820Entry[1];
+} ACPI_BIOS_MULTI_NODE, *PACPI_BIOS_MULTI_NODE;
+
+//
+// ACPI Signatures
+//
+#define RSDP_SIGNATURE 0x2052545020445352       // "RSD PTR "
+#define FACS_SIGNATURE 0x53434146               // "FACS"
+#define FADT_SIGNATURE 0x50434146               // "FACP"
+#define RSDT_SIGNATURE 0x54445352               // "RSDT"
+#define APIC_SIGNATURE 0x43495041               // "APIC"
+#define DSDT_SIGNATURE 0x54445344               // "DSDT"
+#define SSDT_SIGNATURE 0x54445353               // "SSDT"
+#define PSDT_SIGNATURE 0x54445350               // "PSDT"
+#define SBST_SIGNATURE 0x54534253               // "SBST"
+#define DBGP_SIGNATURE 0x50474244               // "DBGP"
+
+//
+// FADT Flags
+//
+#define ACPI_TMR_VAL_EXT 0x100
+
+//
+// ACPI Generic Register Address
+//
+typedef struct _GEN_ADDR
+{
+    UCHAR AddressSpaceID;
+    UCHAR BitWidth;
+    UCHAR BitOffset;
+    UCHAR Reserved;
+    PHYSICAL_ADDRESS Address;
+} GEN_ADDR, *PGEN_ADDR;
+
+//
+// ACPI BIOS Structures (packed)
+//
+#include <pshpack1.h>
+typedef struct  _RSDP
+{
+    ULONGLONG Signature;
+    UCHAR Checksum;
+    UCHAR OEMID[6];
+    UCHAR Reserved[1];
+    ULONG RsdtAddress;
+} RSDP;
+typedef RSDP *PRSDP;
+
+typedef struct _DESCRIPTION_HEADER
+{
+    ULONG Signature;
+    ULONG Length;
+    UCHAR Revision;
+    UCHAR Checksum;
+    UCHAR OEMID[6];
+    UCHAR OEMTableID[8];
+    ULONG OEMRevision;
+    UCHAR CreatorID[4];
+    ULONG CreatorRev;
+} DESCRIPTION_HEADER;
+typedef DESCRIPTION_HEADER *PDESCRIPTION_HEADER;
+
+typedef struct _FACS
+{
+    ULONG Signature;
+    ULONG Length;
+    ULONG HardwareSignature;
+    ULONG pFirmwareWakingVector;
+    ULONG GlobalLock;
+    ULONG Flags;
+    PHYSICAL_ADDRESS x_FirmwareWakingVector;
+    UCHAR version;
+    UCHAR Reserved[32];
+} FACS;
+typedef FACS *PFACS;
+
+typedef struct _FADT
+{
+    DESCRIPTION_HEADER Header;
+    ULONG facs;
+    ULONG dsdt;
+    UCHAR int_model;
+    UCHAR pm_profile;
+    USHORT sci_int_vector;
+    ULONG smi_cmd_io_port;
+    UCHAR acpi_on_value;
+    UCHAR acpi_off_value;
+    UCHAR s4bios_req;
+    UCHAR pstate_control;
+    ULONG pm1a_evt_blk_io_port;
+    ULONG pm1b_evt_blk_io_port;
+    ULONG pm1a_ctrl_blk_io_port;
+    ULONG pm1b_ctrl_blk_io_port;
+    ULONG pm2_ctrl_blk_io_port;
+    ULONG pm_tmr_blk_io_port;
+    ULONG gp0_blk_io_port;
+    ULONG gp1_blk_io_port;
+    UCHAR pm1_evt_len;
+    UCHAR pm1_ctrl_len;
+    UCHAR pm2_ctrl_len;
+    UCHAR pm_tmr_len;
+    UCHAR gp0_blk_len;
+    UCHAR gp1_blk_len;
+    UCHAR gp1_base;
+    UCHAR cstate_control;
+    USHORT lvl2_latency;
+    USHORT lvl3_latency;
+    USHORT flush_size;
+    USHORT flush_stride;
+    UCHAR duty_offset;
+    UCHAR duty_width;
+    UCHAR day_alarm_index;
+    UCHAR month_alarm_index;
+    UCHAR century_alarm_index;
+    USHORT boot_arch;
+    UCHAR reserved3[1];
+    ULONG flags;
+    GEN_ADDR reset_reg;
+    UCHAR reset_val;
+    UCHAR reserved4[3];
+    PHYSICAL_ADDRESS x_firmware_ctrl;
+    PHYSICAL_ADDRESS x_dsdt;
+    GEN_ADDR x_pm1a_evt_blk;
+    GEN_ADDR x_pm1b_evt_blk;
+    GEN_ADDR x_pm1a_ctrl_blk;
+    GEN_ADDR x_pm1b_ctrl_blk;
+    GEN_ADDR x_pm2_ctrl_blk;
+    GEN_ADDR x_pm_tmr_blk;
+    GEN_ADDR x_gp0_blk;
+    GEN_ADDR x_gp1_blk;
+} FADT;
+typedef FADT *PFADT;
+
+typedef struct _DSDT
+{
+    DESCRIPTION_HEADER Header;
+    UCHAR DiffDefBlock[ANYSIZE_ARRAY];
+} DSDT;
+typedef DSDT *PDSDT;
+
+typedef struct _RSDT
+{
+    DESCRIPTION_HEADER Header;
+    ULONG Tables[ANYSIZE_ARRAY];
+} RSDT;
+typedef RSDT *PRSDT;
+
+typedef struct _XSDT
+{
+    DESCRIPTION_HEADER Header;
+    PHYSICAL_ADDRESS Tables[ANYSIZE_ARRAY];
+} XSDT;
+typedef XSDT *PXSDT;
+#include <poppack.h>
+
+//
+// Microsoft-specific (pretty much) ACPI Tables, normal MS ABI packing
+//
+typedef struct _DEBUG_PORT_TABLE
+{
+    DESCRIPTION_HEADER Header;
+    UCHAR InterfaceType;
+    UCHAR Reserved[3];
+    GEN_ADDR BaseAddress;
+} DEBUG_PORT_TABLE, *PDEBUG_PORT_TABLE;
+
+typedef struct _BOOT_TABLE
+{
+    DESCRIPTION_HEADER Header;
+    UCHAR CMOSIndex;
+    UCHAR Reserved[3];
+} BOOT_TABLE, *PBOOT_TABLE;
+
+typedef struct _ACPI_SRAT
+{
+    DESCRIPTION_HEADER Header;
+    UCHAR TableRevision;
+    ULONG Reserved[2];
+} ACPI_SRAT, *PACPI_SRAT;
+
+//
+// Internal HAL structure
+//
+typedef struct _ACPI_CACHED_TABLE
+{
+    LIST_ENTRY Links;
+    DESCRIPTION_HEADER Header;
+    // table follows
+    // ...
+} ACPI_CACHED_TABLE, *PACPI_CACHED_TABLE;
+
+NTSTATUS
+NTAPI
+HalpAcpiTableCacheInit(
+    IN PLOADER_PARAMETER_BLOCK LoaderBlock
+);
+
+PVOID
+NTAPI
+HalpAcpiGetTable(
+    IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+    IN ULONG Signature
+);
+
+NTSTATUS
+NTAPI
+HalpSetupAcpiPhase0(
+    IN PLOADER_PARAMETER_BLOCK LoaderBlock
+);
+
+/* EOF */