/* Routine used to find the iSCSI Boot Format Table. The logical kernel address is set in the ibft_addr global variable.  */
void __init reserve_ibft_region(void)
/* Routine used to find the iSCSI Boot Format Table. The logical kernel address is set in the ibft_addr global variable.  */
void __init reserve_ibft_region(void)
{
	unsigned long pos;
	unsigned int len = 0;
	void *virt;
	ibft_addr = NULL;
	for (pos = IBFT_START; pos < IBFT_END; pos += 16) {
		if (pos == VGA_MEM)
			pos += VGA_SIZE;
		virt = isa_bus_to_virt(pos);
		if (memcmp(virt, IBFT_SIGN, IBFT_SIGN_LEN) == 0) {
			unsigned long *addr =
			    (unsigned long *)isa_bus_to_virt(pos + 4);
			len = *addr;
			if (pos + len <= (IBFT_END-1)) {
				ibft_addr = (struct ibft_table_header *)virt;
				break;
			}
		}
	}
	if (ibft_addr)
		reserve_bootmem(pos, PAGE_ALIGN(len), BOOTMEM_DEFAULT);
}