iscsi_ibft: Fix isa_bus_to_virt not working under ARM
[linux-2.6-microblaze.git] / drivers / firmware / iscsi_ibft.c
index 7127a04..6e97883 100644 (file)
@@ -84,9 +84,7 @@ MODULE_DESCRIPTION("sysfs interface to BIOS iBFT information");
 MODULE_LICENSE("GPL");
 MODULE_VERSION(IBFT_ISCSI_VERSION);
 
-#ifndef CONFIG_ISCSI_IBFT_FIND
-struct acpi_table_ibft *ibft_addr;
-#endif
+static struct acpi_table_ibft *ibft_addr;
 
 struct ibft_hdr {
        u8 id;
@@ -849,7 +847,21 @@ static void __init acpi_find_ibft_region(void)
 {
 }
 #endif
-
+#ifdef CONFIG_ISCSI_IBFT_FIND
+static int __init acpi_find_isa_region(void)
+{
+       if (ibft_phys_addr) {
+               ibft_addr = isa_bus_to_virt(ibft_phys_addr);
+               return 0;
+       }
+       return -ENODEV;
+}
+#else
+static int __init acpi_find_isa_region(void)
+{
+       return -ENODEV;
+}
+#endif
 /*
  * ibft_init() - creates sysfs tree entries for the iBFT data.
  */
@@ -858,11 +870,11 @@ static int __init ibft_init(void)
        int rc = 0;
 
        /*
-          As on UEFI systems the setup_arch()/find_ibft_region()
+          As on UEFI systems the setup_arch()/reserve_ibft_region()
           is called before ACPI tables are parsed and it only does
           legacy finding.
        */
-       if (!ibft_addr)
+       if (acpi_find_isa_region())
                acpi_find_ibft_region();
 
        if (ibft_addr) {