Harmonize ieee1275's grub_available_iterate() with the generic
grub_machine_mmap_iterate() interface (fixes a recently-introduced build problem on i386-ieee1275): * kern/ieee1275/openfw.c (grub_available_iterate): Moved from here ... * kern/ieee1275/mmap.c (grub_machine_mmap_iterate): ... here. Add third parameter `type'. Update all users of this function. * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Add `kern/ieee1275/mmap.c'. * kern/ieee1275/init.c * include/grub/ieee1275/ieee1275.h (grub_available_iterate): Replace with ... (grub_machine_mmap_iterate): ... this. * include/grub/i386/pc/memory.h (grub_machine_mmap_iterate): Change return type to `grub_err_t'. Update all implementations of this function prototype. * include/grub/i386/coreboot/memory.h (grub_machine_mmap_iterate): Likewise.
This commit is contained in:
parent
40f9faa4de
commit
79d29fd7b8
12 changed files with 124 additions and 67 deletions
|
@ -147,55 +147,6 @@ nextprop:
|
|||
return 0;
|
||||
}
|
||||
|
||||
grub_err_t grub_available_iterate (int NESTED_FUNC_ATTR (*hook) (grub_uint64_t, grub_uint64_t))
|
||||
{
|
||||
grub_ieee1275_phandle_t root;
|
||||
grub_ieee1275_phandle_t memory;
|
||||
grub_uint32_t available[32];
|
||||
grub_ssize_t available_size;
|
||||
grub_uint32_t address_cells = 1;
|
||||
grub_uint32_t size_cells = 1;
|
||||
int i;
|
||||
|
||||
/* Determine the format of each entry in `available'. */
|
||||
grub_ieee1275_finddevice ("/", &root);
|
||||
grub_ieee1275_get_integer_property (root, "#address-cells", &address_cells,
|
||||
sizeof address_cells, 0);
|
||||
grub_ieee1275_get_integer_property (root, "#size-cells", &size_cells,
|
||||
sizeof size_cells, 0);
|
||||
|
||||
/* Load `/memory/available'. */
|
||||
if (grub_ieee1275_finddevice ("/memory", &memory))
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
"Couldn't find /memory node");
|
||||
if (grub_ieee1275_get_integer_property (memory, "available", available,
|
||||
sizeof available, &available_size))
|
||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||
"Couldn't examine /memory/available property");
|
||||
|
||||
/* Decode each entry and call `hook'. */
|
||||
i = 0;
|
||||
available_size /= sizeof (grub_uint32_t);
|
||||
while (i < available_size)
|
||||
{
|
||||
grub_uint64_t address;
|
||||
grub_uint64_t size;
|
||||
|
||||
address = available[i++];
|
||||
if (address_cells == 2)
|
||||
address = (address << 32) | available[i++];
|
||||
|
||||
size = available[i++];
|
||||
if (size_cells == 2)
|
||||
size = (size << 32) | available[i++];
|
||||
|
||||
if (hook (address, size))
|
||||
break;
|
||||
}
|
||||
|
||||
return grub_errno;
|
||||
}
|
||||
|
||||
/* Call the "map" method of /chosen/mmu. */
|
||||
static int
|
||||
grub_map (grub_addr_t phys, grub_addr_t virt, grub_uint32_t size,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue