Skip to content

Commit

Permalink
ibft: For UEFI machines actually do scan ACPI for iBFT.
Browse files Browse the repository at this point in the history
For machines with IBFT 1.03 do scan the ACPI table for 'iBFT'
or for 'IBFT'. If the machine is in UEFI mode, only do the ACPI
table scan. For all other machines (pre IBFT 1.03) do
a memory scan if not found in the ACPI tables.

Signed-off-by: Peter Jones <pjones@redhat.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad@kernel.org>
Tested-by: Mike Christie <michaelc@cs.wisc.edu>
  • Loading branch information
Konrad Rzeszutek Wilk committed May 11, 2010
1 parent 4e639fd commit 1303a35
Showing 1 changed file with 19 additions and 12 deletions.
31 changes: 19 additions & 12 deletions drivers/firmware/iscsi_ibft_find.c
Original file line number Diff line number Diff line change
Expand Up @@ -57,23 +57,12 @@ static int __init acpi_find_ibft(struct acpi_table_header *header)
}
#endif /* CONFIG_ACPI */

/*
* Routine used to find the iSCSI Boot Format Table. The logical
* kernel address is set in the ibft_addr global variable.
*/
unsigned long __init find_ibft_region(unsigned long *sizep)
static int __init find_ibft_in_mem(void)
{
unsigned long pos;
unsigned int len = 0;
void *virt;

ibft_addr = NULL;

/* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
* only use ACPI for this */
if (efi_enabled)
return 0;

for (pos = IBFT_START; pos < IBFT_END; pos += 16) {
/* The table can't be inside the VGA BIOS reserved space,
* so skip that area */
Expand All @@ -92,6 +81,17 @@ unsigned long __init find_ibft_region(unsigned long *sizep)
}
}
}
return len;
}
/*
* Routine used to find the iSCSI Boot Format Table. The logical
* kernel address is set in the ibft_addr global variable.
*/
unsigned long __init find_ibft_region(unsigned long *sizep)
{

ibft_addr = NULL;

#ifdef CONFIG_ACPI
/*
* One spec says "IBFT", the other says "iBFT". We have to check
Expand All @@ -102,6 +102,13 @@ unsigned long __init find_ibft_region(unsigned long *sizep)
if (!ibft_addr)
acpi_table_parse("iBFT", acpi_find_ibft);
#endif /* CONFIG_ACPI */

/* iBFT 1.03 section 1.4.3.1 mandates that UEFI machines will
* only use ACPI for this */

if (!ibft_addr && !efi_enabled)
find_ibft_in_mem();

if (ibft_addr) {
*sizep = PAGE_ALIGN(ibft_addr->header.length);
return (u64)isa_virt_to_bus(ibft_addr);
Expand Down

0 comments on commit 1303a35

Please sign in to comment.