|
@@ -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
|
|
|
|
-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;
|
|
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
|