This fixes a couple of issues with older Linux kernels (that expect an XSDT as
soon as there's an ACPI 2.0 or later table) * add XSDT support * add more table types This patch will break at least the kontron (and possibly some new boards I missed) Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Peter Stuge <peter@stuge.se> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@4453 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
parent
4d933dd2d6
commit
b657a3c9b7
|
@ -41,16 +41,23 @@ u8 acpi_checksum(u8 *table, u32 length)
|
||||||
* add an acpi table to rsdt structure, and recalculate checksum
|
* add an acpi table to rsdt structure, and recalculate checksum
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void acpi_add_table(acpi_rsdt_t *rsdt, void *table)
|
void acpi_add_table(acpi_rsdp_t *rsdp, void *table)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
acpi_rsdt_t *rsdt;
|
||||||
|
acpi_xsdt_t *xsdt = NULL;
|
||||||
|
|
||||||
|
rsdt = (acpi_rsdt_t *)rsdp->rsdt_address;
|
||||||
|
if (rsdp->xsdt_address) {
|
||||||
|
xsdt = (acpi_xsdt_t *)((u32)rsdp->xsdt_address);
|
||||||
|
}
|
||||||
|
|
||||||
int entries_num = ARRAY_SIZE(rsdt->entry);
|
int entries_num = ARRAY_SIZE(rsdt->entry);
|
||||||
|
|
||||||
for (i=0; i<entries_num; i++) {
|
for (i=0; i<entries_num; i++) {
|
||||||
if(rsdt->entry[i]==0) {
|
if(rsdt->entry[i]==0) {
|
||||||
rsdt->entry[i]=(u32)table;
|
rsdt->entry[i]=(u32)table;
|
||||||
/* fix length to stop kernel winging about invalid entries */
|
/* fix length to stop kernel whining about invalid entries */
|
||||||
rsdt->header.length = sizeof(acpi_header_t) + (sizeof(u32) * (i+1));
|
rsdt->header.length = sizeof(acpi_header_t) + (sizeof(u32) * (i+1));
|
||||||
/* fix checksum */
|
/* fix checksum */
|
||||||
/* hope this won't get optimized away */
|
/* hope this won't get optimized away */
|
||||||
|
@ -58,12 +65,26 @@ void acpi_add_table(acpi_rsdt_t *rsdt, void *table)
|
||||||
rsdt->header.checksum=acpi_checksum((u8 *)rsdt,
|
rsdt->header.checksum=acpi_checksum((u8 *)rsdt,
|
||||||
rsdt->header.length);
|
rsdt->header.length);
|
||||||
|
|
||||||
printk_debug("ACPI: added table %d/%d Length now %d\n",i+1, entries_num, rsdt->header.length);
|
/* And now the same thing for the XSDT. We use the same
|
||||||
|
* index as we want the XSDT and RSDT to always be in
|
||||||
|
* sync in coreboot.
|
||||||
|
*/
|
||||||
|
if (xsdt) {
|
||||||
|
xsdt->entry[i]=(u64)(u32)table;
|
||||||
|
xsdt->header.length = sizeof(acpi_header_t) +
|
||||||
|
(sizeof(u64) * (i+1));
|
||||||
|
xsdt->header.checksum=0;
|
||||||
|
xsdt->header.checksum=acpi_checksum((u8 *)xsdt,
|
||||||
|
xsdt->header.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
printk_debug("ACPI: added table %d/%d Length now %d\n",
|
||||||
|
i+1, entries_num, rsdt->header.length);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
printk_warning("ACPI: could not add ACPI table to RSDT. failed.\n");
|
printk_err("ACPI: Error: Could not add ACPI table, too many tables.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
int acpi_create_mcfg_mmconfig(acpi_mcfg_mmconfig_t *mmconfig, u32 base, u16 seg_nr, u8 start, u8 end)
|
int acpi_create_mcfg_mmconfig(acpi_mcfg_mmconfig_t *mmconfig, u32 base, u16 seg_nr, u8 start, u8 end)
|
||||||
|
@ -216,7 +237,7 @@ void acpi_create_ssdt_generator(acpi_header_t *ssdt, char *oem_table_id)
|
||||||
memcpy(&ssdt->oem_id, OEM_ID, 6);
|
memcpy(&ssdt->oem_id, OEM_ID, 6);
|
||||||
memcpy(&ssdt->oem_table_id, oem_table_id, 8);
|
memcpy(&ssdt->oem_table_id, oem_table_id, 8);
|
||||||
ssdt->oem_revision = 42;
|
ssdt->oem_revision = 42;
|
||||||
memcpy(&ssdt->asl_compiler_id, "GENAML", 4);
|
memcpy(&ssdt->asl_compiler_id, "CORE", 4);
|
||||||
ssdt->asl_compiler_revision = 42;
|
ssdt->asl_compiler_revision = 42;
|
||||||
ssdt->length = sizeof(acpi_header_t);
|
ssdt->length = sizeof(acpi_header_t);
|
||||||
|
|
||||||
|
@ -376,16 +397,47 @@ void acpi_write_rsdt(acpi_rsdt_t *rsdt)
|
||||||
|
|
||||||
/* fix checksum */
|
/* fix checksum */
|
||||||
|
|
||||||
header->checksum = acpi_checksum((void *)rsdt, sizeof(acpi_rsdt_t));
|
header->checksum = acpi_checksum((void *)rsdt, sizeof(acpi_rsdt_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
void acpi_write_rsdp(acpi_rsdp_t *rsdp, acpi_rsdt_t *rsdt)
|
void acpi_write_xsdt(acpi_xsdt_t *xsdt)
|
||||||
|
{
|
||||||
|
acpi_header_t *header=&(xsdt->header);
|
||||||
|
|
||||||
|
/* fill out header fields */
|
||||||
|
memcpy(header->signature, XSDT_NAME, 4);
|
||||||
|
memcpy(header->oem_id, OEM_ID, 6);
|
||||||
|
memcpy(header->oem_table_id, RSDT_TABLE, 8);
|
||||||
|
memcpy(header->asl_compiler_id, ASLC, 4);
|
||||||
|
|
||||||
|
header->length = sizeof(acpi_xsdt_t);
|
||||||
|
header->revision = 1;
|
||||||
|
|
||||||
|
/* fill out entries */
|
||||||
|
|
||||||
|
// entries are filled in later, we come with an empty set.
|
||||||
|
|
||||||
|
/* fix checksum */
|
||||||
|
|
||||||
|
header->checksum = acpi_checksum((void *)xsdt, sizeof(acpi_xsdt_t));
|
||||||
|
}
|
||||||
|
|
||||||
|
void acpi_write_rsdp(acpi_rsdp_t *rsdp, acpi_rsdt_t *rsdt, acpi_xsdt_t *xsdt)
|
||||||
{
|
{
|
||||||
memcpy(rsdp->signature, RSDP_SIG, 8);
|
memcpy(rsdp->signature, RSDP_SIG, 8);
|
||||||
memcpy(rsdp->oem_id, OEM_ID, 6);
|
memcpy(rsdp->oem_id, OEM_ID, 6);
|
||||||
rsdp->length = sizeof(acpi_rsdp_t);
|
rsdp->length = sizeof(acpi_rsdp_t);
|
||||||
rsdp->rsdt_address = (u32)rsdt;
|
rsdp->rsdt_address = (u32)rsdt;
|
||||||
rsdp->revision = 2;
|
/* Some OSes expect an XSDT to be present for RSD PTR
|
||||||
|
* revisions >= 2. If we don't have an ACPI XSDT, force
|
||||||
|
* ACPI 1.0 (and thus RSD PTR revision 0)
|
||||||
|
*/
|
||||||
|
if (xsdt == NULL) {
|
||||||
|
rsdp->revision = 0;
|
||||||
|
} else {
|
||||||
|
rsdp->xsdt_address = (u64)(u32)xsdt;
|
||||||
|
rsdp->revision = 2;
|
||||||
|
}
|
||||||
rsdp->checksum = acpi_checksum((void *)rsdp, 20);
|
rsdp->checksum = acpi_checksum((void *)rsdp, 20);
|
||||||
rsdp->ext_checksum = acpi_checksum((void *)rsdp, sizeof(acpi_rsdp_t));
|
rsdp->ext_checksum = acpi_checksum((void *)rsdp, sizeof(acpi_rsdp_t));
|
||||||
}
|
}
|
||||||
|
@ -415,11 +467,6 @@ void suspend_resume(void)
|
||||||
/* this is to be filled by SB code - startup value what was found */
|
/* this is to be filled by SB code - startup value what was found */
|
||||||
u8 acpi_slp_type = 0;
|
u8 acpi_slp_type = 0;
|
||||||
|
|
||||||
int acpi_get_sleep_type(void)
|
|
||||||
{
|
|
||||||
return acpi_slp_type;
|
|
||||||
}
|
|
||||||
|
|
||||||
int acpi_is_wakeup(void)
|
int acpi_is_wakeup(void)
|
||||||
{
|
{
|
||||||
return (acpi_slp_type == 3);
|
return (acpi_slp_type == 3);
|
||||||
|
|
|
@ -484,6 +484,7 @@ unsigned long write_coreboot_table(
|
||||||
|
|
||||||
#if CONFIG_HAVE_HIGH_TABLES == 1
|
#if CONFIG_HAVE_HIGH_TABLES == 1
|
||||||
printk_debug("Adding high table area\n");
|
printk_debug("Adding high table area\n");
|
||||||
|
// should this be LB_MEM_ACPI?
|
||||||
lb_add_memory_range(mem, LB_MEM_TABLE,
|
lb_add_memory_range(mem, LB_MEM_TABLE,
|
||||||
high_tables_base, high_tables_size);
|
high_tables_base, high_tables_size);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -116,7 +116,12 @@ struct lb_memory *write_tables(void)
|
||||||
acpi_start++;
|
acpi_start++;
|
||||||
}
|
}
|
||||||
if (acpi_start != high_table_end) {
|
if (acpi_start != high_table_end) {
|
||||||
acpi_write_rsdp((acpi_rsdp_t *)rom_table_end, ((acpi_rsdp_t *)acpi_start)->rsdt_address);
|
acpi_rsdp_t *low_rsdp = (acpi_rsdp_t *)rom_table_end,
|
||||||
|
*high_rsdp = (acpi_rsdp_t *)acpi_start;
|
||||||
|
|
||||||
|
acpi_write_rsdp(low_rsdp,
|
||||||
|
(acpi_rsdt_t *)(high_rsdp->rsdt_address),
|
||||||
|
(acpi_xsdt_t *)(high_rsdp->xsdt_address));
|
||||||
} else {
|
} else {
|
||||||
printk_err("ERROR: Didn't find RSDP in high table.\n");
|
printk_err("ERROR: Didn't find RSDP in high table.\n");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
/*
|
/*
|
||||||
* coreboot ACPI Support - headers and defines.
|
* coreboot ACPI Support - headers and defines.
|
||||||
*
|
*
|
||||||
* written by Stefan Reinauer <stepan@openbios.org>
|
* written by Stefan Reinauer <stepan@coresystems.de>
|
||||||
* (C) 2004 SUSE LINUX AG
|
* Copyright (C) 2004 SUSE LINUX AG
|
||||||
|
* Copyright (C) 2008-2009 coresystems GmbH
|
||||||
*
|
*
|
||||||
* The ACPI table structs are based on the Linux kernel sources.
|
* The ACPI table structs are based on the Linux kernel sources.
|
||||||
* ACPI FADT & FACS added by Nick Barker <nick.barker9@btinternet.com>
|
* ACPI FADT & FACS added by Nick Barker <nick.barker9@btinternet.com>
|
||||||
|
@ -17,41 +18,42 @@
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#if CONFIG_HAVE_ACPI_RESUME
|
#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */
|
||||||
/* 0 = S0, 1 = S1 ...*/
|
#define RSDP_NAME "RSDP"
|
||||||
extern u8 acpi_slp_type;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define RSDP_SIG "RSD PTR " /* RSDT Pointer signature */
|
#define RSDT_NAME "RSDT"
|
||||||
#define RSDP_NAME "RSDP"
|
#define HPET_NAME "HPET"
|
||||||
|
#define MADT_NAME "APIC"
|
||||||
|
#define MCFG_NAME "MCFG"
|
||||||
|
#define SRAT_NAME "SRAT"
|
||||||
|
#define SLIT_NAME "SLIT"
|
||||||
|
#define SSDT_NAME "SSDT"
|
||||||
|
#define FACS_NAME "FACS"
|
||||||
|
#define FADT_NAME "FACP"
|
||||||
|
#define XSDT_NAME "XSDT"
|
||||||
|
|
||||||
#define RSDT_NAME "RSDT"
|
// Misnomer, the NAME above is the 4 byte signature, this (TABLE) is the
|
||||||
#define HPET_NAME "HPET"
|
// OEM_TABLE_ID.
|
||||||
#define MADT_NAME "APIC"
|
//
|
||||||
#define MCFG_NAME "MCFG"
|
#define ACPI_TABLE_CREATOR "COREBOOT"
|
||||||
#define SRAT_NAME "SRAT"
|
#define RSDT_TABLE ACPI_TABLE_CREATOR
|
||||||
#define SLIT_NAME "SLIT"
|
#define HPET_TABLE ACPI_TABLE_CREATOR
|
||||||
#define SSDT_NAME "SSDT"
|
#define MCFG_TABLE ACPI_TABLE_CREATOR
|
||||||
#define FACS_NAME "FACS"
|
#define MADT_TABLE ACPI_TABLE_CREATOR
|
||||||
#define FADT_NAME "FACP"
|
#define SRAT_TABLE ACPI_TABLE_CREATOR
|
||||||
|
#define SLIT_TABLE ACPI_TABLE_CREATOR
|
||||||
|
#define XSDT_TABLE ACPI_TABLE_CREATOR
|
||||||
|
|
||||||
#define RSDT_TABLE "RSDT "
|
#define OEM_ID "CORE "
|
||||||
#define HPET_TABLE "AMD64 "
|
#define ASLC "CORE"
|
||||||
#define MCFG_TABLE "MCFG "
|
|
||||||
#define MADT_TABLE "MADT "
|
|
||||||
#define SRAT_TABLE "SRAT "
|
|
||||||
#define SLIT_TABLE "SLIT "
|
|
||||||
|
|
||||||
#define OEM_ID "CORE "
|
/* ACPI 3.0 table RSDP */
|
||||||
#define ASLC "CORE"
|
|
||||||
|
|
||||||
/* ACPI 2.0 table RSDP */
|
|
||||||
|
|
||||||
typedef struct acpi_rsdp {
|
typedef struct acpi_rsdp {
|
||||||
char signature[8]; /* RSDP signature "RSD PTR" */
|
char signature[8]; /* RSDP signature "RSD PTR" */
|
||||||
u8 checksum; /* checksum of the first 20 bytes */
|
u8 checksum; /* checksum of the first 20 bytes */
|
||||||
char oem_id[6]; /* OEM ID, "LXBIOS" */
|
char oem_id[6]; /* OEM ID, "LXBIOS" */
|
||||||
u8 revision; /* 0 for APCI 1.0, 2 for ACPI 2.0 */
|
u8 revision; /* 0 for APCI 1.0, 2 for ACPI 2.0/3.0 */
|
||||||
u32 rsdt_address; /* physical address of RSDT */
|
u32 rsdt_address; /* physical address of RSDT */
|
||||||
u32 length; /* total length of RSDP (including extended part) */
|
u32 length; /* total length of RSDP (including extended part) */
|
||||||
u64 xsdt_address; /* physical address of XSDT */
|
u64 xsdt_address; /* physical address of XSDT */
|
||||||
|
@ -85,16 +87,23 @@ typedef struct acpi_table_header /* ACPI common table header */
|
||||||
u32 asl_compiler_revision; /* ASL compiler revision number */
|
u32 asl_compiler_revision; /* ASL compiler revision number */
|
||||||
} __attribute__ ((packed)) acpi_header_t;
|
} __attribute__ ((packed)) acpi_header_t;
|
||||||
|
|
||||||
|
/* FIXME: This is very fragile:
|
||||||
|
* MCONFIG, HPET, FADT, SRAT, SLIT, MADT(APIC), SSDT, SSDTX, and SSDT for CPU
|
||||||
|
* pstate
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define MAX_ACPI_TABLES (7 + CONFIG_ACPI_SSDTX_NUM + CONFIG_MAX_CPUS)
|
||||||
|
|
||||||
/* RSDT */
|
/* RSDT */
|
||||||
typedef struct acpi_rsdt {
|
typedef struct acpi_rsdt {
|
||||||
struct acpi_table_header header;
|
struct acpi_table_header header;
|
||||||
u32 entry[7+CONFIG_ACPI_SSDTX_NUM+CONFIG_MAX_CPUS]; /* MCONFIG, HPET, FADT, SRAT, SLIT, MADT(APIC), SSDT, SSDTX, and SSDT for CPU pstate*/
|
u32 entry[MAX_ACPI_TABLES];
|
||||||
} __attribute__ ((packed)) acpi_rsdt_t;
|
} __attribute__ ((packed)) acpi_rsdt_t;
|
||||||
|
|
||||||
/* XSDT */
|
/* XSDT */
|
||||||
typedef struct acpi_xsdt {
|
typedef struct acpi_xsdt {
|
||||||
struct acpi_table_header header;
|
struct acpi_table_header header;
|
||||||
u64 entry[6+CONFIG_ACPI_SSDTX_NUM];
|
u64 entry[MAX_ACPI_TABLES];
|
||||||
} __attribute__ ((packed)) acpi_xsdt_t;
|
} __attribute__ ((packed)) acpi_xsdt_t;
|
||||||
|
|
||||||
/* HPET TIMERS */
|
/* HPET TIMERS */
|
||||||
|
@ -107,7 +116,7 @@ typedef struct acpi_hpet {
|
||||||
u8 attributes;
|
u8 attributes;
|
||||||
} __attribute__ ((packed)) acpi_hpet_t;
|
} __attribute__ ((packed)) acpi_hpet_t;
|
||||||
|
|
||||||
/* MCFG taken from include/linux/acpi.h */
|
/* MCFG */
|
||||||
typedef struct acpi_mcfg {
|
typedef struct acpi_mcfg {
|
||||||
struct acpi_table_header header;
|
struct acpi_table_header header;
|
||||||
u8 reserved[8];
|
u8 reserved[8];
|
||||||
|
@ -279,6 +288,9 @@ typedef struct acpi_fadt {
|
||||||
struct acpi_gen_regaddr x_gpe1_blk;
|
struct acpi_gen_regaddr x_gpe1_blk;
|
||||||
} __attribute__ ((packed)) acpi_fadt_t;
|
} __attribute__ ((packed)) acpi_fadt_t;
|
||||||
|
|
||||||
|
//
|
||||||
|
// FADT Feature Flags
|
||||||
|
//
|
||||||
#define ACPI_FADT_WBINVD (1 << 0)
|
#define ACPI_FADT_WBINVD (1 << 0)
|
||||||
#define ACPI_FADT_WBINVD_FLUSH (1 << 1)
|
#define ACPI_FADT_WBINVD_FLUSH (1 << 1)
|
||||||
#define ACPI_FADT_C1_SUPPORTED (1 << 2)
|
#define ACPI_FADT_C1_SUPPORTED (1 << 2)
|
||||||
|
@ -300,14 +312,27 @@ typedef struct acpi_fadt {
|
||||||
#define ACPI_FADT_APIC_CLUSTER (1 << 18)
|
#define ACPI_FADT_APIC_CLUSTER (1 << 18)
|
||||||
#define ACPI_FADT_APIC_PHYSICAL (1 << 19)
|
#define ACPI_FADT_APIC_PHYSICAL (1 << 19)
|
||||||
|
|
||||||
|
//
|
||||||
|
// FADT Boot Architecture Flags
|
||||||
|
//
|
||||||
|
#define ACPI_FADT_LEGACY_DEVICES (1 << 0)
|
||||||
|
#define ACPI_FADT_8042 (1 << 1)
|
||||||
|
#define ACPI_FADT_VGA_NOT_PRESENT (1 << 2)
|
||||||
|
#define ACPI_FADT_MSI_NOT_SUPPORTED (1 << 3)
|
||||||
|
#define ACPI_FADT_NO_PCIE_ASPM_CONTROL (1 << 4)
|
||||||
|
|
||||||
|
//
|
||||||
|
// FADT Preferred Power Management Profile
|
||||||
|
//
|
||||||
enum acpi_preferred_pm_profiles {
|
enum acpi_preferred_pm_profiles {
|
||||||
PM_UNSPECIFIED = 0,
|
PM_UNSPECIFIED = 0,
|
||||||
PM_DESKTOP = 1,
|
PM_DESKTOP = 1,
|
||||||
PM_MOBILE = 2,
|
PM_MOBILE = 2,
|
||||||
PM_WORKSTATION = 3,
|
PM_WORKSTATION = 3,
|
||||||
PM_ENTERPRISE = 4,
|
PM_ENTERPRISE_SERVER = 4,
|
||||||
PM_SOHO_SERVER = 5,
|
PM_SOHO_SERVER = 5,
|
||||||
PM_APPLIANCE_PC = 6
|
PM_APPLIANCE_PC = 6,
|
||||||
|
PM_PERFORMANCE_SERVER = 7
|
||||||
};
|
};
|
||||||
|
|
||||||
/* FACS */
|
/* FACS */
|
||||||
|
@ -324,6 +349,11 @@ typedef struct acpi_facs {
|
||||||
u8 resv[31];
|
u8 resv[31];
|
||||||
} __attribute__ ((packed)) acpi_facs_t;
|
} __attribute__ ((packed)) acpi_facs_t;
|
||||||
|
|
||||||
|
//
|
||||||
|
// FACS Flags
|
||||||
|
//
|
||||||
|
#define ACPI_FACS_S4BIOS_F (1 << 0)
|
||||||
|
|
||||||
/* These are implemented by the target port */
|
/* These are implemented by the target port */
|
||||||
unsigned long write_acpi_tables(unsigned long addr);
|
unsigned long write_acpi_tables(unsigned long addr);
|
||||||
unsigned long acpi_fill_madt(unsigned long current);
|
unsigned long acpi_fill_madt(unsigned long current);
|
||||||
|
@ -337,7 +367,8 @@ void acpi_create_fadt(acpi_fadt_t *fadt,acpi_facs_t *facs,void *dsdt);
|
||||||
/* These can be used by the target port */
|
/* These can be used by the target port */
|
||||||
u8 acpi_checksum(u8 *table, u32 length);
|
u8 acpi_checksum(u8 *table, u32 length);
|
||||||
|
|
||||||
void acpi_add_table(acpi_rsdt_t *rsdt, void *table);
|
void acpi_add_table(acpi_rsdp_t *rsdp, void *table);
|
||||||
|
|
||||||
|
|
||||||
int acpi_create_madt_lapic(acpi_madt_lapic_t *lapic, u8 cpu, u8 apic);
|
int acpi_create_madt_lapic(acpi_madt_lapic_t *lapic, u8 cpu, u8 apic);
|
||||||
int acpi_create_madt_ioapic(acpi_madt_ioapic_t *ioapic, u8 id, u32 addr,u32 gsi_base);
|
int acpi_create_madt_ioapic(acpi_madt_ioapic_t *ioapic, u8 id, u32 addr,u32 gsi_base);
|
||||||
|
@ -365,14 +396,21 @@ void acpi_create_mcfg(acpi_mcfg_t *mcfg);
|
||||||
void acpi_create_facs(acpi_facs_t *facs);
|
void acpi_create_facs(acpi_facs_t *facs);
|
||||||
|
|
||||||
void acpi_write_rsdt(acpi_rsdt_t *rsdt);
|
void acpi_write_rsdt(acpi_rsdt_t *rsdt);
|
||||||
void acpi_write_rsdp(acpi_rsdp_t *rsdp, acpi_rsdt_t *rsdt);
|
void acpi_write_xsdt(acpi_xsdt_t *xsdt);
|
||||||
|
void acpi_write_rsdp(acpi_rsdp_t *rsdp, acpi_rsdt_t *rsdt, acpi_xsdt_t *xsdt);
|
||||||
|
|
||||||
#if CONFIG_HAVE_ACPI_RESUME
|
#if CONFIG_HAVE_ACPI_RESUME
|
||||||
|
/* 0 = S0, 1 = S1 ...*/
|
||||||
|
extern u8 acpi_slp_type;
|
||||||
|
|
||||||
void suspend_resume(void);
|
void suspend_resume(void);
|
||||||
void *acpi_find_wakeup_vector(void);
|
void *acpi_find_wakeup_vector(void);
|
||||||
void *acpi_get_wakeup_rsdp(void);
|
void *acpi_get_wakeup_rsdp(void);
|
||||||
void acpi_jmp_to_realm_wakeup(u32 linear_addr);
|
void acpi_jmp_to_realm_wakeup(u32 linear_addr);
|
||||||
void acpi_jump_to_wakeup(void *wakeup_addr);
|
void acpi_jump_to_wakeup(void *wakeup_addr);
|
||||||
|
|
||||||
|
int acpi_get_sleep_type(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
unsigned long acpi_add_ssdt_pstates(acpi_rsdt_t *rsdt, unsigned long current);
|
unsigned long acpi_add_ssdt_pstates(acpi_rsdt_t *rsdt, unsigned long current);
|
||||||
|
|
|
@ -95,9 +95,13 @@ struct lb_memory_range {
|
||||||
struct lb_uint64 start;
|
struct lb_uint64 start;
|
||||||
struct lb_uint64 size;
|
struct lb_uint64 size;
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
#define LB_MEM_RAM 1 /* Memory anyone can use */
|
#define LB_MEM_RAM 1 /* Memory anyone can use */
|
||||||
#define LB_MEM_RESERVED 2 /* Don't use this memory region */
|
#define LB_MEM_RESERVED 2 /* Don't use this memory region */
|
||||||
#define LB_MEM_TABLE 16 /* Ram configuration tables are kept in */
|
#define LB_MEM_ACPI 3 /* ACPI Tables */
|
||||||
|
#define LB_MEM_NVS 4 /* ACPI NVS Memory */
|
||||||
|
#define LB_MEM_UNUSABLE 5 /* Unusable address space */
|
||||||
|
#define LB_MEM_VENDOR_RSVD 6 /* Vendor Reserved */
|
||||||
|
#define LB_MEM_TABLE 16 /* Ram configuration tables are kept in */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct lb_memory {
|
struct lb_memory {
|
||||||
|
|
|
@ -158,7 +158,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -169,13 +169,13 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
|
@ -183,14 +183,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current += slit->header.length;
|
current += slit->header.length;
|
||||||
acpi_add_table(rsdt, slit);
|
acpi_add_table(rsdp, slit);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
|
@ -199,7 +199,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum =
|
ssdtx->checksum =
|
||||||
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
||||||
acpi_add_table(rsdt, ssdtx);
|
acpi_add_table(rsdp, ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -158,7 +158,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -169,13 +169,13 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
|
@ -183,14 +183,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current += slit->header.length;
|
current += slit->header.length;
|
||||||
acpi_add_table(rsdt, slit);
|
acpi_add_table(rsdp, slit);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
|
@ -199,7 +199,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum =
|
ssdtx->checksum =
|
||||||
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
||||||
acpi_add_table(rsdt, ssdtx);
|
acpi_add_table(rsdp, ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -262,7 +262,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -221,7 +221,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -231,14 +231,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt,hpet);
|
acpi_add_table(rsdp,hpet);
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
/* If we want to use HPET Timers Linux wants an MADT */
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current+=madt->header.length;
|
current+=madt->header.length;
|
||||||
acpi_add_table(rsdt,madt);
|
acpi_add_table(rsdp,madt);
|
||||||
|
|
||||||
|
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
|
@ -246,14 +246,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current+=srat->header.length;
|
current+=srat->header.length;
|
||||||
acpi_add_table(rsdt,srat);
|
acpi_add_table(rsdp,srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
printk_debug("ACPI: * SSDT\n");
|
printk_debug("ACPI: * SSDT\n");
|
||||||
|
@ -261,7 +261,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
|
@ -297,7 +297,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
update_ssdtx((void *)ssdtx, i);
|
update_ssdtx((void *)ssdtx, i);
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
||||||
acpi_add_table(rsdt,ssdtx);
|
acpi_add_table(rsdp,ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -321,7 +321,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt,facs,dsdt);
|
acpi_create_fadt(fadt,facs,dsdt);
|
||||||
acpi_add_table(rsdt,fadt);
|
acpi_add_table(rsdp,fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -223,7 +223,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,7 +234,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt,hpet);
|
acpi_add_table(rsdp,hpet);
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
/* If we want to use HPET Timers Linux wants an MADT */
|
||||||
current = ( current + 0x07) & -0x08;
|
current = ( current + 0x07) & -0x08;
|
||||||
|
@ -242,7 +242,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current+=madt->header.length;
|
current+=madt->header.length;
|
||||||
acpi_add_table(rsdt,madt);
|
acpi_add_table(rsdp,madt);
|
||||||
|
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
current = ( current + 0x07) & -0x08;
|
current = ( current + 0x07) & -0x08;
|
||||||
|
@ -250,7 +250,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current+=srat->header.length;
|
current+=srat->header.length;
|
||||||
acpi_add_table(rsdt,srat);
|
acpi_add_table(rsdp,srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
current = ( current + 0x07) & -0x08;
|
current = ( current + 0x07) & -0x08;
|
||||||
|
@ -258,7 +258,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
current = ( current + 0x0f) & -0x10;
|
current = ( current + 0x0f) & -0x10;
|
||||||
|
@ -271,7 +271,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* recalculate checksum */
|
/* recalculate checksum */
|
||||||
ssdt->checksum = 0;
|
ssdt->checksum = 0;
|
||||||
ssdt->checksum = acpi_checksum((unsigned char *)ssdt,ssdt->length);
|
ssdt->checksum = acpi_checksum((unsigned char *)ssdt,ssdt->length);
|
||||||
acpi_add_table(rsdt,ssdt);
|
acpi_add_table(rsdp,ssdt);
|
||||||
|
|
||||||
printk_debug("ACPI: * SSDT for PState at %lx\n", current);
|
printk_debug("ACPI: * SSDT for PState at %lx\n", current);
|
||||||
current = acpi_add_ssdt_pstates(rsdt, current);
|
current = acpi_add_ssdt_pstates(rsdt, current);
|
||||||
|
@ -312,7 +312,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
update_ssdtx((void *)ssdtx, i);
|
update_ssdtx((void *)ssdtx, i);
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
||||||
acpi_add_table(rsdt,ssdtx);
|
acpi_add_table(rsdp,ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt,facs,dsdt);
|
acpi_create_fadt(fadt,facs,dsdt);
|
||||||
acpi_add_table(rsdt,fadt);
|
acpi_add_table(rsdp,fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -108,7 +108,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* Clear all table memory. */
|
/* Clear all table memory. */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/* We explicitly add these tables later on: */
|
/* We explicitly add these tables later on: */
|
||||||
|
@ -131,25 +131,25 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
/* If we want to use HPET timers Linux wants it in MADT. */
|
/* If we want to use HPET timers Linux wants it in MADT. */
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
printk_debug("ACPI: * MCFG\n");
|
printk_debug("ACPI: * MCFG\n");
|
||||||
mcfg = (acpi_mcfg_t *) current;
|
mcfg = (acpi_mcfg_t *) current;
|
||||||
acpi_create_mcfg(mcfg);
|
acpi_create_mcfg(mcfg);
|
||||||
current += mcfg->header.length;
|
current += mcfg->header.length;
|
||||||
acpi_add_table(rsdt, mcfg);
|
acpi_add_table(rsdp, mcfg);
|
||||||
|
|
||||||
printk_debug("ACPI: * SRAT\n");
|
printk_debug("ACPI: * SRAT\n");
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
printk_info("ACPI: done.\n");
|
printk_info("ACPI: done.\n");
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -119,7 +119,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* Clear all table memory. */
|
/* Clear all table memory. */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/* We explicitly add these tables later on: */
|
/* We explicitly add these tables later on: */
|
||||||
|
@ -146,39 +146,39 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
printk_debug("ACPI: * HPET\n");
|
printk_debug("ACPI: * HPET\n");
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
/* If we want to use HPET timers Linux wants an MADT. */
|
/* If we want to use HPET timers Linux wants an MADT. */
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
printk_debug("ACPI: * MCFG\n");
|
printk_debug("ACPI: * MCFG\n");
|
||||||
mcfg = (acpi_mcfg_t *) current;
|
mcfg = (acpi_mcfg_t *) current;
|
||||||
acpi_create_mcfg(mcfg);
|
acpi_create_mcfg(mcfg);
|
||||||
current += mcfg->header.length;
|
current += mcfg->header.length;
|
||||||
acpi_add_table(rsdt, mcfg);
|
acpi_add_table(rsdp, mcfg);
|
||||||
|
|
||||||
printk_debug("ACPI: * SRAT\n");
|
printk_debug("ACPI: * SRAT\n");
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
printk_debug("ACPI: * SSDT\n");
|
printk_debug("ACPI: * SSDT\n");
|
||||||
|
@ -186,7 +186,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
printk_info("ACPI: done.\n");
|
printk_info("ACPI: done.\n");
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -116,7 +116,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -128,7 +128,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current+=madt->header.length;
|
current+=madt->header.length;
|
||||||
acpi_add_table(rsdt,madt);
|
acpi_add_table(rsdp,madt);
|
||||||
|
|
||||||
printk_info("ACPI: done.\n");
|
printk_info("ACPI: done.\n");
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -224,7 +224,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -234,14 +234,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt,hpet);
|
acpi_add_table(rsdp,hpet);
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
/* If we want to use HPET Timers Linux wants an MADT */
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current+=madt->header.length;
|
current+=madt->header.length;
|
||||||
acpi_add_table(rsdt,madt);
|
acpi_add_table(rsdp,madt);
|
||||||
|
|
||||||
|
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
|
@ -249,14 +249,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current+=srat->header.length;
|
current+=srat->header.length;
|
||||||
acpi_add_table(rsdt,srat);
|
acpi_add_table(rsdp,srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
printk_debug("ACPI: * SSDT\n");
|
printk_debug("ACPI: * SSDT\n");
|
||||||
|
@ -264,7 +264,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
|
@ -302,7 +302,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
update_ssdtx((void *)ssdtx, i);
|
update_ssdtx((void *)ssdtx, i);
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
ssdtx->checksum = acpi_checksum((unsigned char *)ssdtx,ssdtx->length);
|
||||||
acpi_add_table(rsdt,ssdtx);
|
acpi_add_table(rsdp,ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt,facs,dsdt);
|
acpi_create_fadt(fadt,facs,dsdt);
|
||||||
acpi_add_table(rsdt,fadt);
|
acpi_add_table(rsdp,fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -158,7 +158,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -169,13 +169,13 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* SRAT */
|
/* SRAT */
|
||||||
|
@ -183,14 +183,14 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
printk_debug("ACPI: * SLIT\n");
|
printk_debug("ACPI: * SLIT\n");
|
||||||
slit = (acpi_slit_t *) current;
|
slit = (acpi_slit_t *) current;
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current += slit->header.length;
|
current += slit->header.length;
|
||||||
acpi_add_table(rsdt, slit);
|
acpi_add_table(rsdp, slit);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
|
@ -199,7 +199,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
#if CONFIG_ACPI_SSDTX_NUM >= 1
|
||||||
|
|
||||||
|
@ -238,7 +238,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
ssdtx->checksum = 0;
|
ssdtx->checksum = 0;
|
||||||
ssdtx->checksum =
|
ssdtx->checksum =
|
||||||
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
acpi_checksum((u8 *)ssdtx, ssdtx->length);
|
||||||
acpi_add_table(rsdt, ssdtx);
|
acpi_add_table(rsdp, ssdtx);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -261,7 +261,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
#if DUMP_ACPI_TABLES == 1
|
#if DUMP_ACPI_TABLES == 1
|
||||||
printk_debug("rsdp\n");
|
printk_debug("rsdp\n");
|
||||||
|
|
|
@ -112,7 +112,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* Clear all table memory. */
|
/* Clear all table memory. */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
current = ALIGN(current, 64);
|
current = ALIGN(current, 64);
|
||||||
|
@ -136,28 +136,28 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
/* Add FADT now that we have facs and dsdt. */
|
/* Add FADT now that we have facs and dsdt. */
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -165,7 +165,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -173,7 +173,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
printk_info("ACPI: done %p.\n", (void *)current);
|
printk_info("ACPI: done %p.\n", (void *)current);
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -112,7 +112,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* Clear all table memory. */
|
/* Clear all table memory. */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
current = ALIGN(current, 64);
|
current = ALIGN(current, 64);
|
||||||
|
@ -136,28 +136,28 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
/* Add FADT now that we have facs and dsdt. */
|
/* Add FADT now that we have facs and dsdt. */
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -165,7 +165,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -173,7 +173,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
printk_info("ACPI: done %p.\n", (void *)current);
|
printk_info("ACPI: done %p.\n", (void *)current);
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -123,7 +123,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* Clear all table memory. */
|
/* Clear all table memory. */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
current = ALIGN(current, 64);
|
current = ALIGN(current, 64);
|
||||||
|
@ -147,28 +147,28 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
|
|
||||||
/* Add FADT now that we have facs and dsdt. */
|
/* Add FADT now that we have facs and dsdt. */
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
printk_debug("ACPI: * HPET @ %p\n", hpet);
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_hpet(hpet);
|
acpi_create_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
printk_debug("ACPI: * APIC/MADT @ %p\n", madt);
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
srat = (acpi_srat_t *) current;
|
srat = (acpi_srat_t *) current;
|
||||||
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
printk_debug("ACPI: * SRAT @ %p\n", srat);
|
||||||
acpi_create_srat(srat);
|
acpi_create_srat(srat);
|
||||||
current += srat->header.length;
|
current += srat->header.length;
|
||||||
acpi_add_table(rsdt, srat);
|
acpi_add_table(rsdp, srat);
|
||||||
|
|
||||||
/* SLIT */
|
/* SLIT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -176,7 +176,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
printk_debug("ACPI: * SLIT @ %p\n", slit);
|
||||||
acpi_create_slit(slit);
|
acpi_create_slit(slit);
|
||||||
current+=slit->header.length;
|
current+=slit->header.length;
|
||||||
acpi_add_table(rsdt,slit);
|
acpi_add_table(rsdp,slit);
|
||||||
|
|
||||||
/* SSDT */
|
/* SSDT */
|
||||||
current = ALIGN(current, 16);
|
current = ALIGN(current, 16);
|
||||||
|
@ -184,7 +184,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
printk_debug("ACPI: * SSDT @ %p\n", ssdt);
|
||||||
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
acpi_create_ssdt_generator(ssdt, "DYNADATA");
|
||||||
current += ssdt->length;
|
current += ssdt->length;
|
||||||
acpi_add_table(rsdt, ssdt);
|
acpi_add_table(rsdp, ssdt);
|
||||||
|
|
||||||
printk_info("ACPI: done %p.\n", (void *)current);
|
printk_info("ACPI: done %p.\n", (void *)current);
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -63,7 +63,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *)start, 0, current - start);
|
memset((void *)start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -86,7 +86,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt,facs,dsdt);
|
acpi_create_fadt(fadt,facs,dsdt);
|
||||||
acpi_add_table(rsdt,fadt);
|
acpi_add_table(rsdp,fadt);
|
||||||
|
|
||||||
printk_info("ACPI: done.\n");
|
printk_info("ACPI: done.\n");
|
||||||
return current;
|
return current;
|
||||||
|
|
|
@ -146,7 +146,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
/* clear all table memory */
|
/* clear all table memory */
|
||||||
memset((void *) start, 0, current - start);
|
memset((void *) start, 0, current - start);
|
||||||
|
|
||||||
acpi_write_rsdp(rsdp, rsdt);
|
acpi_write_rsdp(rsdp, rsdt, NULL);
|
||||||
acpi_write_rsdt(rsdt);
|
acpi_write_rsdt(rsdt);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -158,7 +158,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
hpet = (acpi_hpet_t *) current;
|
hpet = (acpi_hpet_t *) current;
|
||||||
current += sizeof(acpi_hpet_t);
|
current += sizeof(acpi_hpet_t);
|
||||||
acpi_create_via_hpet(hpet);
|
acpi_create_via_hpet(hpet);
|
||||||
acpi_add_table(rsdt, hpet);
|
acpi_add_table(rsdp, hpet);
|
||||||
|
|
||||||
/* If we want to use HPET Timers Linux wants an MADT */
|
/* If we want to use HPET Timers Linux wants an MADT */
|
||||||
printk_debug("ACPI: * MADT\n");
|
printk_debug("ACPI: * MADT\n");
|
||||||
|
@ -166,13 +166,13 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
madt = (acpi_madt_t *) current;
|
madt = (acpi_madt_t *) current;
|
||||||
acpi_create_madt(madt);
|
acpi_create_madt(madt);
|
||||||
current += madt->header.length;
|
current += madt->header.length;
|
||||||
acpi_add_table(rsdt, madt);
|
acpi_add_table(rsdp, madt);
|
||||||
|
|
||||||
printk_debug("ACPI: * MCFG\n");
|
printk_debug("ACPI: * MCFG\n");
|
||||||
mcfg = (acpi_mcfg_t *) current;
|
mcfg = (acpi_mcfg_t *) current;
|
||||||
acpi_create_mcfg(mcfg);
|
acpi_create_mcfg(mcfg);
|
||||||
current += mcfg->header.length;
|
current += mcfg->header.length;
|
||||||
acpi_add_table(rsdt, mcfg);
|
acpi_add_table(rsdp, mcfg);
|
||||||
|
|
||||||
printk_debug("ACPI: * FACS\n");
|
printk_debug("ACPI: * FACS\n");
|
||||||
facs = (acpi_facs_t *) current;
|
facs = (acpi_facs_t *) current;
|
||||||
|
@ -195,7 +195,7 @@ unsigned long write_acpi_tables(unsigned long start)
|
||||||
current += sizeof(acpi_fadt_t);
|
current += sizeof(acpi_fadt_t);
|
||||||
|
|
||||||
acpi_create_fadt(fadt, facs, dsdt);
|
acpi_create_fadt(fadt, facs, dsdt);
|
||||||
acpi_add_table(rsdt, fadt);
|
acpi_add_table(rsdp, fadt);
|
||||||
|
|
||||||
printk_debug("ACPI: * DMI (Linux workaround)\n");
|
printk_debug("ACPI: * DMI (Linux workaround)\n");
|
||||||
memcpy((void *)0xfff80, dmi_table, DMI_TABLE_SIZE);
|
memcpy((void *)0xfff80, dmi_table, DMI_TABLE_SIZE);
|
||||||
|
|
Loading…
Reference in New Issue