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,
|
extern status_t platform_allocate_region(void **_virtualAddress, size_t size,
|
||||||
uint8 protection, bool exactAddress);
|
uint8 protection, bool exactAddress);
|
||||||
extern status_t platform_free_region(void *address, size_t size);
|
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_bootloader_address_to_kernel_address(void *address, addr_t *_result);
|
||||||
extern status_t platform_kernel_address_to_bootloader_address(uint64_t address, void **_result);
|
extern status_t platform_kernel_address_to_bootloader_address(addr_t address, void **_result);
|
||||||
|
|
||||||
/* boot options */
|
/* boot options */
|
||||||
#define BOOT_OPTION_MENU 1
|
#define BOOT_OPTION_MENU 1
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ kernel_args_malloc(size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _BOOT_PLATFORM_EFI
|
#ifdef _BOOT_PLATFORM_EFI
|
||||||
uint64 translated_block;
|
addr_t translated_block;
|
||||||
platform_bootloader_address_to_kernel_address(block, &translated_block);
|
platform_bootloader_address_to_kernel_address(block, &translated_block);
|
||||||
if (add_kernel_args_range((void *)translated_block, size) != B_OK)
|
if (add_kernel_args_range((void *)translated_block, size) != B_OK)
|
||||||
#else
|
#else
|
||||||
@@ -419,7 +419,7 @@ kernel_args_malloc(size_t size)
|
|||||||
sLast = block;
|
sLast = block;
|
||||||
sFree = kChunkSize - size;
|
sFree = kChunkSize - size;
|
||||||
#ifdef _BOOT_PLATFORM_EFI
|
#ifdef _BOOT_PLATFORM_EFI
|
||||||
uint64 translated_block;
|
addr_t translated_block;
|
||||||
platform_bootloader_address_to_kernel_address(block, &translated_block);
|
platform_bootloader_address_to_kernel_address(block, &translated_block);
|
||||||
if (add_kernel_args_range((void *)translated_block, kChunkSize) != B_OK)
|
if (add_kernel_args_range((void *)translated_block, kChunkSize) != B_OK)
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -27,8 +27,8 @@
|
|||||||
|
|
||||||
struct allocated_memory_region {
|
struct allocated_memory_region {
|
||||||
allocated_memory_region *next;
|
allocated_memory_region *next;
|
||||||
uint64_t vaddr;
|
addr_t vaddr;
|
||||||
uint64_t paddr;
|
phys_addr_t paddr;
|
||||||
size_t size;
|
size_t size;
|
||||||
bool released;
|
bool released;
|
||||||
};
|
};
|
||||||
@@ -46,7 +46,7 @@ static addr_t sNextVirtualAddress = KERNEL_LOAD_BASE + 32 * 1024 * 1024;
|
|||||||
static allocated_memory_region *allocated_memory_regions = NULL;
|
static allocated_memory_region *allocated_memory_regions = NULL;
|
||||||
|
|
||||||
|
|
||||||
extern "C" uint64_t
|
extern "C" phys_addr_t
|
||||||
mmu_allocate_page()
|
mmu_allocate_page()
|
||||||
{
|
{
|
||||||
TRACE("%s: called\n", __func__);
|
TRACE("%s: called\n", __func__);
|
||||||
@@ -130,7 +130,7 @@ platform_allocate_region(void **_address, size_t size, uint8 /* protection */,
|
|||||||
region->released = false;
|
region->released = false;
|
||||||
|
|
||||||
if (*_address != NULL) {
|
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);
|
//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;
|
for (allocated_memory_region *region = allocated_memory_regions; region;
|
||||||
region = region->next) {
|
region = region->next) {
|
||||||
if (region->paddr == (uint64_t)address && region->size == size) {
|
if (region->paddr == (phys_addr_t)address && region->size == size) {
|
||||||
return region;
|
return region;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -241,15 +241,14 @@ convert_physical_ranges()
|
|||||||
|
|
||||||
|
|
||||||
extern "C" status_t
|
extern "C" status_t
|
||||||
platform_bootloader_address_to_kernel_address(void *address,
|
platform_bootloader_address_to_kernel_address(void *address, addr_t *_result)
|
||||||
uint64_t *_result)
|
|
||||||
{
|
{
|
||||||
TRACE("%s: called\n", __func__);
|
TRACE("%s: called\n", __func__);
|
||||||
|
|
||||||
// Convert any physical ranges prior to looking up address
|
// Convert any physical ranges prior to looking up address
|
||||||
convert_physical_ranges();
|
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;
|
for (allocated_memory_region *region = allocated_memory_regions; region;
|
||||||
region = region->next) {
|
region = region->next) {
|
||||||
@@ -270,7 +269,7 @@ platform_bootloader_address_to_kernel_address(void *address,
|
|||||||
|
|
||||||
|
|
||||||
extern "C" status_t
|
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__);
|
TRACE("%s: called\n", __func__);
|
||||||
|
|
||||||
|
|||||||
@@ -34,18 +34,18 @@ extern addr_t get_current_virtual_address();
|
|||||||
|
|
||||||
extern void mmu_init();
|
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,
|
extern addr_t mmu_map_physical_memory(addr_t physicalAddress, size_t size,
|
||||||
uint32 flags);
|
uint32 flags);
|
||||||
|
|
||||||
extern void mmu_free(void *virtualAddress, size_t size);
|
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);
|
void **_result);
|
||||||
|
|
||||||
extern status_t platform_bootloader_address_to_kernel_address(void *address,
|
extern status_t platform_bootloader_address_to_kernel_address(void *address,
|
||||||
uint64_t *_result);
|
addr_t *_result);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#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. */
|
/*! Convert a 32-bit address to a 64-bit address. */
|
||||||
inline uint64
|
inline addr_t
|
||||||
fix_address(uint64 address)
|
fix_address(addr_t address)
|
||||||
{
|
{
|
||||||
uint64 result;
|
addr_t result;
|
||||||
if (platform_bootloader_address_to_kernel_address((void *)address, &result)
|
if (platform_bootloader_address_to_kernel_address((void *)address, &result)
|
||||||
!= B_OK) {
|
!= B_OK) {
|
||||||
return address;
|
return address;
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ platform_start_kernel(void)
|
|||||||
!= B_OK) {
|
!= B_OK) {
|
||||||
panic("Unabled to allocate a stack");
|
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
|
gKernelArgs.cpu_kstack[0].size = KERNEL_STACK_SIZE
|
||||||
+ KERNEL_STACK_GUARD_PAGES * B_PAGE_SIZE;
|
+ KERNEL_STACK_GUARD_PAGES * B_PAGE_SIZE;
|
||||||
dprintf("Kernel stack at %#lx\n", gKernelArgs.cpu_kstack[0].start);
|
dprintf("Kernel stack at %#lx\n", gKernelArgs.cpu_kstack[0].start);
|
||||||
|
|||||||
Reference in New Issue
Block a user