aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firmware')
-rw-r--r--drivers/firmware/iscsi_ibft_find.c31
1 files changed, 19 insertions, 12 deletions
diff --git a/drivers/firmware/iscsi_ibft_find.c b/drivers/firmware/iscsi_ibft_find.c
index dd85555d3296..82a7a1566290 100644
--- a/drivers/firmware/iscsi_ibft_find.c
+++ b/drivers/firmware/iscsi_ibft_find.c
@@ -57,23 +57,12 @@ static int __init acpi_find_ibft(struct acpi_table_header *header)
57} 57}
58#endif /* CONFIG_ACPI */ 58#endif /* CONFIG_ACPI */
59 59
60/* 60static int __init find_ibft_in_mem(void)
61 * Routine used to find the iSCSI Boot Format Table. The logical
62 * kernel address is set in the ibft_addr global variable.
63 */
64unsigned long __init find_ibft_region(unsigned long *sizep)
65{ 61{
66 unsigned long pos; 62 unsigned long pos;
67 unsigned int len = 0; 63 unsigned int len = 0;
68 void *virt; 64 void *virt;
69 65
70 ibft_addr = NULL;
71
72 /* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
73 * only use ACPI for this */
74 if (efi_enabled)
75 return 0;
76
77 for (pos = IBFT_START; pos < IBFT_END; pos += 16) { 66 for (pos = IBFT_START; pos < IBFT_END; pos += 16) {
78 /* The table can't be inside the VGA BIOS reserved space, 67 /* The table can't be inside the VGA BIOS reserved space,
79 * so skip that area */ 68 * so skip that area */
@@ -92,6 +81,17 @@ unsigned long __init find_ibft_region(unsigned long *sizep)
92 } 81 }
93 } 82 }
94 } 83 }
84 return len;
85}
86/*
87 * Routine used to find the iSCSI Boot Format Table. The logical
88 * kernel address is set in the ibft_addr global variable.
89 */
90unsigned long __init find_ibft_region(unsigned long *sizep)
91{
92
93 ibft_addr = NULL;
94
95#ifdef CONFIG_ACPI 95#ifdef CONFIG_ACPI
96 /* 96 /*
97 * One spec says "IBFT", the other says "iBFT". We have to check 97 * One spec says "IBFT", the other says "iBFT". We have to check
@@ -102,6 +102,13 @@ unsigned long __init find_ibft_region(unsigned long *sizep)
102 if (!ibft_addr) 102 if (!ibft_addr)
103 acpi_table_parse("iBFT", acpi_find_ibft); 103 acpi_table_parse("iBFT", acpi_find_ibft);
104#endif /* CONFIG_ACPI */ 104#endif /* CONFIG_ACPI */
105
106 /* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
107 * only use ACPI for this */
108
109 if (!ibft_addr && !efi_enabled)
110 find_ibft_in_mem();
111
105 if (ibft_addr) { 112 if (ibft_addr) {
106 *sizep = PAGE_ALIGN(ibft_addr->header.length); 113 *sizep = PAGE_ALIGN(ibft_addr->header.length);
107 return (u64)isa_virt_to_bus(ibft_addr); 114 return (u64)isa_virt_to_bus(ibft_addr);