int padding; /* used to be protected */
int vdu_ega;
int vdu_vga;
+ int apic_enabled; /* does the kernel use APIC or not? */
+ phys_bytes acpi_rsdp; /* where is the acpi RSDP */
};
struct io_range
if (ebda) {
ebda <<= 4;
if(platform_tbl_ptr(ebda, ebda + 0x400, 16, &acpi_rsdp,
- sizeof(acpi_rsdp), acpi_rsdp_test))
+ sizeof(acpi_rsdp), &machine.acpi_rsdp,
+ acpi_rsdp_test))
return 1;
}
/* try BIOS read only mem space */
if(platform_tbl_ptr(0xE0000, 0x100000, 16, &acpi_rsdp,
- sizeof(acpi_rsdp), acpi_rsdp_test))
+ sizeof(acpi_rsdp), &machine.acpi_rsdp,
+ acpi_rsdp_test))
return 1;
-
+
+ machine.acpi_rsdp = 0; /* RSDP cannot be found at this address therefore
+ it is a valid negative value */
return 0;
}
unsigned increment,
void * buff,
unsigned size,
+ phys_bytes * phys_addr,
int ((* cmp_f)(void *)))
{
phys_bytes addr;
for (addr = start; addr < end; addr += increment) {
phys_copy (addr, vir2phys(buff), size);
- if (cmp_f(buff))
+ if (cmp_f(buff)) {
+ if (phys_addr)
+ *phys_addr = addr;
return 1;
+ }
}
return 0;
}