x86: check dsdt before find oem table for es7000, v2
v2: use __acpi_unmap_table() Signed-off-by: Yinghai Lu <yhlu.kernel@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
a32ad46267
commit
a73aaedd95
|
@ -109,6 +109,7 @@ struct oem_table {
|
||||||
};
|
};
|
||||||
|
|
||||||
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
|
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
|
||||||
|
extern void unmap_unisys_acpi_oem_table(unsigned long oem_addr);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct mip_reg {
|
struct mip_reg {
|
||||||
|
@ -243,21 +244,38 @@ parse_unisys_oem (char *oemptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
int __init
|
static unsigned long oem_addrX;
|
||||||
find_unisys_acpi_oem_table(unsigned long *oem_addr)
|
static unsigned long oem_size;
|
||||||
|
int __init find_unisys_acpi_oem_table(unsigned long *oem_addr)
|
||||||
{
|
{
|
||||||
struct acpi_table_header *header = NULL;
|
struct acpi_table_header *header = NULL;
|
||||||
int i = 0;
|
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)) {
|
if (!memcmp((char *) &header->oem_id, "UNISYS", 6)) {
|
||||||
struct oem_table *t = (struct oem_table *)header;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
early_acpi_os_unmap_memory(header, tbl_size);
|
||||||
}
|
}
|
||||||
return -1;
|
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
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -47,16 +47,26 @@ static __init int mps_oem_check(struct mp_config_table *mpc, char *oem,
|
||||||
/* Hook from generic ACPI tables.c */
|
/* Hook from generic ACPI tables.c */
|
||||||
static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
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 (!find_unisys_acpi_oem_table(&oem_addr)) {
|
||||||
if (es7000_check_dsdt())
|
if (check_dsdt)
|
||||||
return parse_unisys_oem((char *)oem_addr);
|
ret = parse_unisys_oem((char *)oem_addr);
|
||||||
else {
|
else {
|
||||||
setup_unisys();
|
setup_unisys();
|
||||||
return 1;
|
ret = 1;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* we need to unmap it
|
||||||
|
*/
|
||||||
|
unmap_unisys_acpi_oem_table(oem_addr);
|
||||||
}
|
}
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id)
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
|
|
||||||
extern int parse_unisys_oem (char *oemptr);
|
extern int parse_unisys_oem (char *oemptr);
|
||||||
extern int find_unisys_acpi_oem_table(unsigned long *oem_addr);
|
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);
|
extern void setup_unisys(void);
|
||||||
|
|
||||||
#ifndef CONFIG_X86_GENERICARCH
|
#ifndef CONFIG_X86_GENERICARCH
|
||||||
|
|
Loading…
Reference in New Issue