efi: fix pointer width on non-64-bit platforms

Change-Id: I041238af87df3e1e3a967216685413801fd49877
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2450
Reviewed-by: Adrien Destugues <[email protected]>
Reviewed-by: Fredrik Holmqvist <[email protected]>
This commit is contained in:
Alexander von Gluck IV
2020-09-17 13:58:55 +00:00
committed by Adrien Destugues
parent df63c15b9b
commit 0558674126
5 changed files with 19 additions and 20 deletions
+2 -2
View File
@@ -28,8 +28,8 @@ extern status_t platform_init_heap(struct stage2_args *args, void **_base, void
extern status_t platform_allocate_region(void **_virtualAddress, size_t size,
uint8 protection, bool exactAddress);
extern status_t platform_free_region(void *address, size_t size);
extern status_t platform_bootloader_address_to_kernel_address(void *address, uint64_t *_result);
extern status_t platform_kernel_address_to_bootloader_address(uint64_t address, void **_result);
extern status_t platform_bootloader_address_to_kernel_address(void *address, addr_t *_result);
extern status_t platform_kernel_address_to_bootloader_address(addr_t address, void **_result);
/* boot options */
#define BOOT_OPTION_MENU 1
+2 -2
View File
@@ -398,7 +398,7 @@ kernel_args_malloc(size_t size)
}
#ifdef _BOOT_PLATFORM_EFI
uint64 translated_block;
addr_t translated_block;
platform_bootloader_address_to_kernel_address(block, &translated_block);
if (add_kernel_args_range((void *)translated_block, size) != B_OK)
#else
@@ -419,7 +419,7 @@ kernel_args_malloc(size_t size)
sLast = block;
sFree = kChunkSize - size;
#ifdef _BOOT_PLATFORM_EFI
uint64 translated_block;
addr_t translated_block;
platform_bootloader_address_to_kernel_address(block, &translated_block);
if (add_kernel_args_range((void *)translated_block, kChunkSize) != B_OK)
#else
+8 -9
View File
@@ -27,8 +27,8 @@
struct allocated_memory_region {
allocated_memory_region *next;
uint64_t vaddr;
uint64_t paddr;
addr_t vaddr;
phys_addr_t paddr;
size_t size;
bool released;
};
@@ -46,7 +46,7 @@ static addr_t sNextVirtualAddress = KERNEL_LOAD_BASE + 32 * 1024 * 1024;
static allocated_memory_region *allocated_memory_regions = NULL;
extern "C" uint64_t
extern "C" phys_addr_t
mmu_allocate_page()
{
TRACE("%s: called\n", __func__);
@@ -130,7 +130,7 @@ platform_allocate_region(void **_address, size_t size, uint8 /* protection */,
region->released = false;
if (*_address != NULL) {
region->vaddr = (uint64_t)*_address;
region->vaddr = (addr_t)*_address;
}
//dprintf("Allocated region %#lx (requested %p) %#lx %lu\n", region->vaddr, *_address, region->paddr, region->size);
@@ -196,7 +196,7 @@ get_region(void *address, size_t size)
for (allocated_memory_region *region = allocated_memory_regions; region;
region = region->next) {
if (region->paddr == (uint64_t)address && region->size == size) {
if (region->paddr == (phys_addr_t)address && region->size == size) {
return region;
}
}
@@ -241,15 +241,14 @@ convert_physical_ranges()
extern "C" status_t
platform_bootloader_address_to_kernel_address(void *address,
uint64_t *_result)
platform_bootloader_address_to_kernel_address(void *address, addr_t *_result)
{
TRACE("%s: called\n", __func__);
// Convert any physical ranges prior to looking up address
convert_physical_ranges();
uint64_t addr = (uint64_t)address;
phys_addr_t addr = (phys_addr_t)address;
for (allocated_memory_region *region = allocated_memory_regions; region;
region = region->next) {
@@ -270,7 +269,7 @@ platform_bootloader_address_to_kernel_address(void *address,
extern "C" status_t
platform_kernel_address_to_bootloader_address(uint64_t address, void **_result)
platform_kernel_address_to_bootloader_address(addr_t address, void **_result)
{
TRACE("%s: called\n", __func__);
+6 -6
View File
@@ -34,18 +34,18 @@ extern addr_t get_current_virtual_address();
extern void mmu_init();
extern uint64_t mmu_allocate_page();
extern phys_addr_t mmu_allocate_page();
extern addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
uint32 flags);
extern void mmu_free(void *virtualAddress, size_t size);
extern status_t platform_kernel_address_to_bootloader_address(uint64_t address,
extern status_t platform_kernel_address_to_bootloader_address(addr_t address,
void **_result);
extern status_t platform_bootloader_address_to_kernel_address(void *address,
uint64_t *_result);
addr_t *_result);
#ifdef __cplusplus
}
@@ -53,10 +53,10 @@ extern status_t platform_bootloader_address_to_kernel_address(void *address,
/*! Convert a 32-bit address to a 64-bit address. */
inline uint64
fix_address(uint64 address)
inline addr_t
fix_address(addr_t address)
{
uint64 result;
addr_t result;
if (platform_bootloader_address_to_kernel_address((void *)address, &result)
!= B_OK) {
return address;
+1 -1
View File
@@ -161,7 +161,7 @@ platform_start_kernel(void)
!= B_OK) {
panic("Unabled to allocate a stack");
}
gKernelArgs.cpu_kstack[0].start = fix_address((uint64_t)stack_address);
gKernelArgs.cpu_kstack[0].start = fix_address((addr_t)stack_address);
gKernelArgs.cpu_kstack[0].size = KERNEL_STACK_SIZE
+ KERNEL_STACK_GUARD_PAGES * B_PAGE_SIZE;
dprintf("Kernel stack at %#lx\n", gKernelArgs.cpu_kstack[0].start);