Opaque virtual address type
This ensures that conversions and arithmetic on virtual addresses are
explicit and not accidental due to it being a primitive integer.
Change-Id: I94dd8e82e065757ae448d98be0cb89eaa1f6542d
diff --git a/src/main.c b/src/main.c
index 72815d7..5f81a89 100644
--- a/src/main.c
+++ b/src/main.c
@@ -45,7 +45,7 @@
{
struct boot_params params;
struct boot_params_update update;
- uint64_t new_mem_end;
+ paddr_t new_mem_end;
struct memiter primary_initrd;
struct memiter cpio;
@@ -62,19 +62,19 @@
panic("unable to retrieve boot params");
}
- dlog("Memory range: 0x%x - 0x%x\n", params.mem_begin,
- params.mem_end - 1);
- dlog("Ramdisk range: 0x%x - 0x%x\n", params.initrd_begin,
- params.initrd_end - 1);
+ dlog("Memory range: 0x%x - 0x%x\n", pa_addr(params.mem_begin),
+ pa_addr(params.mem_end) - 1);
+ dlog("Ramdisk range: 0x%x - 0x%x\n", pa_addr(params.initrd_begin),
+ pa_addr(params.initrd_end) - 1);
/* Map initrd in, and initialise cpio parser. */
- if (!mm_identity_map(params.initrd_begin, params.initrd_end,
- MM_MODE_R)) {
+ if (!mm_identity_map(mm_va_from_pa(params.initrd_begin),
+ mm_va_from_pa(params.initrd_end), MM_MODE_R)) {
panic("unable to map initrd in");
}
- memiter_init(&cpio, (void *)params.initrd_begin,
- params.initrd_end - params.initrd_begin);
+ memiter_init(&cpio, mm_ptr_from_va(mm_va_from_pa(params.initrd_begin)),
+ pa_addr(params.initrd_end) - pa_addr(params.initrd_begin));
/* Load all VMs. */
new_mem_end = params.mem_end;
@@ -87,10 +87,13 @@
}
/* Prepare to run by updating bootparams as seens by primary VM. */
- update.initrd_begin = (paddr_t)primary_initrd.next;
- update.initrd_end = (paddr_t)primary_initrd.limit;
+ update.initrd_begin =
+ mm_pa_from_va(va_init((uintvaddr_t)primary_initrd.next));
+ update.initrd_end =
+ mm_pa_from_va(va_init((uintvaddr_t)primary_initrd.limit));
update.reserved_begin = new_mem_end;
- update.reserved_end = params.mem_end - new_mem_end;
+ update.reserved_end =
+ pa_init(pa_addr(params.mem_end) - pa_addr(new_mem_end));
if (!plat_update_boot_params(&update)) {
panic("plat_update_boot_params failed");
}