};
#define ACPI_HPET_ADDRESS 0xFED00000UL
+/*
+ * WAET Description Table
+ */
+struct acpi_20_waet {
+ struct acpi_header header;
+ uint32_t flags;
+};
+
/*
* Multiple APIC Flags.
*/
#define ACPI_2_0_XSDT_SIGNATURE ASCII32('X','S','D','T')
#define ACPI_2_0_TCPA_SIGNATURE ASCII32('T','C','P','A')
#define ACPI_2_0_HPET_SIGNATURE ASCII32('H','P','E','T')
+#define ACPI_2_0_WAET_SIGNATURE ASCII32('W','A','E','T')
/*
* Table revision numbers.
#define ACPI_2_0_XSDT_REVISION 0x01
#define ACPI_2_0_TCPA_REVISION 0x02
#define ACPI_2_0_HPET_REVISION 0x01
+#define ACPI_2_0_WAET_REVISION 0x01
#define ACPI_1_0_FADT_REVISION 0x01
#pragma pack ()
extern struct acpi_20_xsdt Xsdt;
extern struct acpi_20_fadt Fadt;
extern struct acpi_20_facs Facs;
+extern struct acpi_20_waet Waet;
/*
* Located at ACPI_INFO_PHYSICAL_ADDRESS.
return hpet;
}
+static struct acpi_20_waet *construct_waet(void)
+{
+ struct acpi_20_waet *waet;
+
+ waet = mem_alloc(sizeof(*waet), 16);
+ if (!waet) return NULL;
+
+ memcpy(waet, &Waet, sizeof(*waet));
+
+ waet->header.length = sizeof(*waet);
+ set_checksum(waet, offsetof(struct acpi_header, checksum), sizeof(*waet));
+
+ return waet;
+}
+
static int construct_secondary_tables(unsigned long *table_ptrs,
struct acpi_info *info)
{
int nr_tables = 0;
struct acpi_20_madt *madt;
struct acpi_20_hpet *hpet;
+ struct acpi_20_waet *waet;
struct acpi_20_tcpa *tcpa;
unsigned char *ssdt;
static const uint16_t tis_signature[] = {0x0001, 0x0001, 0x0001};
if (!hpet) return -1;
table_ptrs[nr_tables++] = (unsigned long)hpet;
+ /* WAET. */
+ waet = construct_waet();
+ if (!waet) return -1;
+ table_ptrs[nr_tables++] = (unsigned long)waet;
+
if ( battery_port_exists() )
{
ssdt = mem_alloc(sizeof(ssdt_pm), 16);
.length = sizeof(struct acpi_20_rsdp)
};
+#define ACPI_WAET_RTC_GOOD 0x00000001
+#define ACPI_WAET_PM_TIMER_GOOD 0x00000002
+
+#define ACPI_WAET_FLAGS (ACPI_WAET_RTC_GOOD | \
+ ACPI_WAET_PM_TIMER_GOOD)
+
+struct acpi_20_waet Waet = {
+ .header = {
+ .signature = ACPI_2_0_WAET_SIGNATURE,
+ .length = sizeof(struct acpi_20_waet),
+ .revision = ACPI_2_0_WAET_REVISION,
+ .oem_id = ACPI_OEM_ID,
+ .oem_table_id = ACPI_OEM_TABLE_ID,
+ .oem_revision = ACPI_OEM_REVISION,
+ .creator_id = ACPI_CREATOR_ID,
+ .creator_revision = ACPI_CREATOR_REVISION
+ },
+ .flags = ACPI_WAET_FLAGS
+};
+
/*
* Local variables:
* mode: C