Loading arch/x86/kernel/es7000_32.c +23 −5 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ struct oem_table { }; extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr); #endif struct mip_reg { Loading Loading @@ -243,21 +244,38 @@ parse_unisys_oem (char *oemptr) } #ifdef CONFIG_ACPI int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) static unsigned long oem_addrX; static unsigned long oem_size; int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) { struct acpi_table_header *header = NULL; int i = 0; while (ACPI_SUCCESS(acpi_get_table("OEM1", i++, &header))) { acpi_size tbl_size; while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) { if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) { struct oem_table *t = (struct oem_table *)header; *oem_addr = (unsigned long)__acpi_map_table(t->OEMTableAddr, t->OEMTableSize); oem_addrX = t->OEMTableAddr; oem_size = t->OEMTableSize; early_acpi_os_unmap_memory(header, tbl_size); *oem_addr = (unsigned long)__acpi_map_table(oem_addrX, oem_size); return 0; } early_acpi_os_unmap_memory(header, tbl_size); } return -1; } void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr) { if (!oem_addr) return; __acpi_unmap_table((char *)oem_addr, oem_size); } #endif static void Loading arch/x86/mach-generic/es7000.c +15 −5 Original line number Diff line number Diff line Loading @@ -47,16 +47,26 @@ static __init int mps_oem_check(struct mp_config_table *mpc, char *oem, /* Hook from generic ACPI tables.c */ static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) { unsigned long oem_addr; unsigned long oem_addr = 0; int check_dsdt; int ret = 0; /* check dsdt at first to avoid clear fix_map for oem_addr */ check_dsdt = es7000_check_dsdt(); if (!find_unisys_acpi_oem_table(&oem_addr)) { if (es7000_check_dsdt()) return parse_unisys_oem((char *)oem_addr); if (check_dsdt) ret = parse_unisys_oem((char *)oem_addr); else { setup_unisys(); return 1; ret = 1; } /* * we need to unmap it */ unmap_unisys_acpi_oem_table(oem_addr); } return 0; return ret; } #else static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) Loading include/asm-x86/es7000/mpparse.h +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ extern int parse_unisys_oem (char *oemptr); extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr); extern void setup_unisys(void); #ifndef CONFIG_X86_GENERICARCH Loading Loading
arch/x86/kernel/es7000_32.c +23 −5 Original line number Diff line number Diff line Loading @@ -109,6 +109,7 @@ struct oem_table { }; extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr); #endif struct mip_reg { Loading Loading @@ -243,21 +244,38 @@ parse_unisys_oem (char *oemptr) } #ifdef CONFIG_ACPI int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) static unsigned long oem_addrX; static unsigned long oem_size; int __init find_unisys_acpi_oem_table(unsigned long *oem_addr) { struct acpi_table_header *header = NULL; int i = 0; while (ACPI_SUCCESS(acpi_get_table("OEM1", i++, &header))) { acpi_size tbl_size; while (ACPI_SUCCESS(acpi_get_table_with_size("OEM1", i++, &header, &tbl_size))) { if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) { struct oem_table *t = (struct oem_table *)header; *oem_addr = (unsigned long)__acpi_map_table(t->OEMTableAddr, t->OEMTableSize); oem_addrX = t->OEMTableAddr; oem_size = t->OEMTableSize; early_acpi_os_unmap_memory(header, tbl_size); *oem_addr = (unsigned long)__acpi_map_table(oem_addrX, oem_size); return 0; } early_acpi_os_unmap_memory(header, tbl_size); } return -1; } void __init unmap_unisys_acpi_oem_table(unsigned long oem_addr) { if (!oem_addr) return; __acpi_unmap_table((char *)oem_addr, oem_size); } #endif static void Loading
arch/x86/mach-generic/es7000.c +15 −5 Original line number Diff line number Diff line Loading @@ -47,16 +47,26 @@ static __init int mps_oem_check(struct mp_config_table *mpc, char *oem, /* Hook from generic ACPI tables.c */ static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) { unsigned long oem_addr; unsigned long oem_addr = 0; int check_dsdt; int ret = 0; /* check dsdt at first to avoid clear fix_map for oem_addr */ check_dsdt = es7000_check_dsdt(); if (!find_unisys_acpi_oem_table(&oem_addr)) { if (es7000_check_dsdt()) return parse_unisys_oem((char *)oem_addr); if (check_dsdt) ret = parse_unisys_oem((char *)oem_addr); else { setup_unisys(); return 1; ret = 1; } /* * we need to unmap it */ unmap_unisys_acpi_oem_table(oem_addr); } return 0; return ret; } #else static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) Loading
include/asm-x86/es7000/mpparse.h +1 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ extern int parse_unisys_oem (char *oemptr); extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr); extern void setup_unisys(void); #ifndef CONFIG_X86_GENERICARCH Loading