diff options
author | Bin Meng <bmeng.cn@gmail.com> | 2016-05-07 07:46:21 -0700 |
---|---|---|
committer | Bin Meng <bmeng.cn@gmail.com> | 2016-05-23 15:18:00 +0800 |
commit | 8a8c0352556cb63c941d9bf1ff58d45c4d27d61d (patch) | |
tree | e623cf14d4d4c03d5f5372e173ec88edad323338 /arch/x86/lib/acpi_table.c | |
parent | f4446629c9d60cd92d2c5d3221aed7b4ce07c552 (diff) | |
download | u-boot-8a8c0352556cb63c941d9bf1ff58d45c4d27d61d.tar.gz |
x86: acpi: Various changes to acpi_table.h
- Use "U-BOOT" and "U-BOOTBL" for the OEM ID and OEM table ID.
- Do not typedef acpi_header_t, instead use struct acpi_table_hader.
- Use a shorter name aslc_id and aslc-revision.
- Change MCFG base address to use 32-bit value pairs (_l and _h).
- Apply ACPI_APIC_ prefix to MADT APIC type macros and make
their names to be more readable.
- Apply __packed to struct acpi_madt_irqoverride and struct
acpi_madt_lapic_nmi tables, as they are not naturally aligned
by the compiler which leads to wrong sizeof(struct).
- Rename model to res1 as it is reserved after ACPI spec 1.0.
- Apply ACPI_ prefix to the PM profile macros and change them
to enum.
- Add ospm_flags to FACS structure which is defined since ACPI 4.0.
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Stefan Roese <sr@denx.de>
Tested-by: Stefan Roese <sr@denx.de>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'arch/x86/lib/acpi_table.c')
-rw-r--r-- | arch/x86/lib/acpi_table.c | 71 |
1 files changed, 37 insertions, 34 deletions
diff --git a/arch/x86/lib/acpi_table.c b/arch/x86/lib/acpi_table.c index 9873cb3d80..7ade5c9d38 100644 --- a/arch/x86/lib/acpi_table.c +++ b/arch/x86/lib/acpi_table.c @@ -58,7 +58,8 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table) rsdt->entry[i] = (u32)table; /* Fix RSDT length or the kernel will assume invalid entries */ - rsdt->header.length = sizeof(acpi_header_t) + (sizeof(u32) * (i + 1)); + rsdt->header.length = sizeof(struct acpi_table_header) + + (sizeof(u32) * (i + 1)); /* Re-calculate checksum */ rsdt->header.checksum = 0; @@ -74,7 +75,7 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table) xsdt->entry[i] = (u64)(u32)table; /* Fix XSDT length */ - xsdt->header.length = sizeof(acpi_header_t) + + xsdt->header.length = sizeof(struct acpi_table_header) + (sizeof(u64) * (i + 1)); /* Re-calculate checksum */ @@ -87,7 +88,7 @@ static void acpi_add_table(struct acpi_rsdp *rsdp, void *table) static int acpi_create_madt_lapic(struct acpi_madt_lapic *lapic, u8 cpu, u8 apic) { - lapic->type = LOCALAPIC; /* Local APIC structure */ + lapic->type = ACPI_APIC_LAPIC; /* Local APIC structure */ lapic->length = sizeof(struct acpi_madt_lapic); lapic->flags = LOCAL_APIC_FLAG_ENABLED; /* Processor/LAPIC enabled */ lapic->processor_id = cpu; @@ -115,7 +116,7 @@ unsigned long acpi_create_madt_lapics(unsigned long current) int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id, u32 addr, u32 gsi_base) { - ioapic->type = IOAPIC; + ioapic->type = ACPI_APIC_IOAPIC; ioapic->length = sizeof(struct acpi_madt_ioapic); ioapic->reserved = 0x00; ioapic->gsi_base = gsi_base; @@ -128,7 +129,7 @@ int acpi_create_madt_ioapic(struct acpi_madt_ioapic *ioapic, u8 id, u32 addr, int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride, u8 bus, u8 source, u32 gsirq, u16 flags) { - irqoverride->type = IRQSOURCEOVERRIDE; + irqoverride->type = ACPI_APIC_IRQ_SRC_OVERRIDE; irqoverride->length = sizeof(struct acpi_madt_irqoverride); irqoverride->bus = bus; irqoverride->source = source; @@ -141,7 +142,7 @@ int acpi_create_madt_irqoverride(struct acpi_madt_irqoverride *irqoverride, int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi, u8 cpu, u16 flags, u8 lint) { - lapic_nmi->type = LOCALNMITYPE; + lapic_nmi->type = ACPI_APIC_LAPIC_NMI; lapic_nmi->length = sizeof(struct acpi_madt_lapic_nmi); lapic_nmi->flags = flags; lapic_nmi->processor_id = cpu; @@ -150,17 +151,18 @@ int acpi_create_madt_lapic_nmi(struct acpi_madt_lapic_nmi *lapic_nmi, return lapic_nmi->length; } -static void fill_header(acpi_header_t *header, char *signature, int length) +static void fill_header(struct acpi_table_header *header, char *signature, + int length) { memcpy(header->signature, signature, length); memcpy(header->oem_id, OEM_ID, 6); - memcpy(header->oem_table_id, ACPI_TABLE_CREATOR, 8); - memcpy(header->asl_compiler_id, ASLC, 4); + memcpy(header->oem_table_id, OEM_TABLE_ID, 8); + memcpy(header->aslc_id, ASLC_ID, 4); } static void acpi_create_madt(struct acpi_madt *madt) { - acpi_header_t *header = &(madt->header); + struct acpi_table_header *header = &(madt->header); unsigned long current = (unsigned long)madt + sizeof(struct acpi_madt); memset((void *)madt, 0, sizeof(struct acpi_madt)); @@ -173,7 +175,7 @@ static void acpi_create_madt(struct acpi_madt *madt) header->revision = ACPI_REV_ACPI_2_0; madt->lapic_addr = LAPIC_DEFAULT_BASE; - madt->flags = PCAT_COMPAT; + madt->flags = ACPI_MADT_PCAT_COMPAT; current = acpi_fill_madt(current); @@ -187,8 +189,8 @@ static int acpi_create_mcfg_mmconfig(struct acpi_mcfg_mmconfig *mmconfig, u32 base, u16 seg_nr, u8 start, u8 end) { memset(mmconfig, 0, sizeof(*mmconfig)); - mmconfig->base_address = base; - mmconfig->base_reserved = 0; + mmconfig->base_address_l = base; + mmconfig->base_address_h = 0; mmconfig->pci_segment_group_number = seg_nr; mmconfig->start_bus_number = start; mmconfig->end_bus_number = end; @@ -208,7 +210,7 @@ static unsigned long acpi_fill_mcfg(unsigned long current) /* MCFG is defined in the PCI Firmware Specification 3.0 */ static void acpi_create_mcfg(struct acpi_mcfg *mcfg) { - acpi_header_t *header = &(mcfg->header); + struct acpi_table_header *header = &(mcfg->header); unsigned long current = (unsigned long)mcfg + sizeof(struct acpi_mcfg); memset((void *)mcfg, 0, sizeof(struct acpi_mcfg)); @@ -244,7 +246,7 @@ static void acpi_create_facs(struct acpi_facs *facs) static void acpi_write_rsdt(struct acpi_rsdt *rsdt) { - acpi_header_t *header = &(rsdt->header); + struct acpi_table_header *header = &(rsdt->header); /* Fill out header fields */ fill_header(header, "RSDT", 4); @@ -262,7 +264,7 @@ static void acpi_write_rsdt(struct acpi_rsdt *rsdt) static void acpi_write_xsdt(struct acpi_xsdt *xsdt) { - acpi_header_t *header = &(xsdt->header); + struct acpi_table_header *header = &(xsdt->header); /* Fill out header fields */ fill_header(header, "XSDT", 4); @@ -309,12 +311,13 @@ static void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt, sizeof(struct acpi_rsdp)); } -static void acpi_create_ssdt_generator(acpi_header_t *ssdt, +static void acpi_create_ssdt_generator(struct acpi_table_header *ssdt, const char *oem_table_id) { - unsigned long current = (unsigned long)ssdt + sizeof(acpi_header_t); + unsigned long current = (unsigned long)ssdt + + sizeof(struct acpi_table_header); - memset((void *)ssdt, 0, sizeof(acpi_header_t)); + memset((void *)ssdt, 0, sizeof(struct acpi_table_header)); memcpy(&ssdt->signature, "SSDT", 4); /* Access size in ACPI 2.0c/3.0/4.0/5.0 */ @@ -322,9 +325,9 @@ static void acpi_create_ssdt_generator(acpi_header_t *ssdt, memcpy(&ssdt->oem_id, OEM_ID, 6); memcpy(&ssdt->oem_table_id, oem_table_id, 8); ssdt->oem_revision = OEM_REVISION; - memcpy(&ssdt->asl_compiler_id, ASLC, 4); - ssdt->asl_compiler_revision = ASL_COMPILER_REVISION; - ssdt->length = sizeof(acpi_header_t); + memcpy(&ssdt->aslc_id, ASLC_ID, 4); + ssdt->aslc_revision = ASL_COMPILER_REVISION; + ssdt->length = sizeof(struct acpi_table_header); /* (Re)calculate length and checksum */ ssdt->length = current - (unsigned long)ssdt; @@ -342,11 +345,11 @@ u32 write_acpi_tables(u32 start) struct acpi_rsdt *rsdt; struct acpi_xsdt *xsdt; struct acpi_facs *facs; - acpi_header_t *dsdt; + struct acpi_table_header *dsdt; struct acpi_fadt *fadt; struct acpi_mcfg *mcfg; struct acpi_madt *madt; - acpi_header_t *ssdt; + struct acpi_table_header *ssdt; current = start; @@ -381,14 +384,14 @@ u32 write_acpi_tables(u32 start) acpi_create_facs(facs); debug("ACPI: * DSDT\n"); - dsdt = (acpi_header_t *)current; - memcpy(dsdt, &AmlCode, sizeof(acpi_header_t)); - if (dsdt->length >= sizeof(acpi_header_t)) { - current += sizeof(acpi_header_t); + dsdt = (struct acpi_table_header *)current; + memcpy(dsdt, &AmlCode, sizeof(struct acpi_table_header)); + if (dsdt->length >= sizeof(struct acpi_table_header)) { + current += sizeof(struct acpi_table_header); memcpy((char *)current, - (char *)&AmlCode + sizeof(acpi_header_t), - dsdt->length - sizeof(acpi_header_t)); - current += dsdt->length - sizeof(acpi_header_t); + (char *)&AmlCode + sizeof(struct acpi_table_header), + dsdt->length - sizeof(struct acpi_table_header)); + current += dsdt->length - sizeof(struct acpi_table_header); /* (Re)calculate length and checksum */ dsdt->length = current - (unsigned long)dsdt; @@ -424,9 +427,9 @@ u32 write_acpi_tables(u32 start) current = ALIGN(current, 16); debug("ACPI: * SSDT\n"); - ssdt = (acpi_header_t *)current; - acpi_create_ssdt_generator(ssdt, ACPI_TABLE_CREATOR); - if (ssdt->length > sizeof(acpi_header_t)) { + ssdt = (struct acpi_table_header *)current; + acpi_create_ssdt_generator(ssdt, OEM_TABLE_ID); + if (ssdt->length > sizeof(struct acpi_table_header)) { current += ssdt->length; acpi_add_table(rsdp, ssdt); current = ALIGN(current, 16); |