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:
committed by
Adrien Destugues
parent
df63c15b9b
commit
0558674126
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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__);
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user