From 7d89c6af5062ec609e2b2f081639a27c34467754 Mon Sep 17 00:00:00 2001 From: Damien Zammit Date: Sun, 13 Feb 2022 08:25:54 +1100 Subject: fix up offsets --- libacpica/acpi_init.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/libacpica/acpi_init.c b/libacpica/acpi_init.c index 0214498c..6daf194d 100644 --- a/libacpica/acpi_init.c +++ b/libacpica/acpi_init.c @@ -163,11 +163,13 @@ acpi_physical_address acpi_os_get_root_pointer(void) { int err; - uintptr_t pa_root = (uintptr_t)0; + //uintptr_t pa_root = (uintptr_t)0; uintptr_t pa_sdt = (uintptr_t)0; bool is_64bit = false; - err = acpi_get_root_table_pointer(&pa_root, &pa_sdt, &is_64bit); + acpi_physical_address pa_root; + //err = acpi_get_root_table_pointer(&pa_root, &pa_sdt, &is_64bit); + err = acpi_find_root_pointer(&pa_root); if (err) acpi_os_printf("Can't find root table ptr\n"); return (acpi_physical_address)pa_root; @@ -192,9 +194,11 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size) mach_port_t device_master; device_t mem_device; mach_port_t memobj; - void *virt_addr; - uintptr_t pa_offset = phys & ~(sysconf(_SC_PAGE_SIZE) - 1); - uintptr_t pa_start = phys - pa_offset; + vm_address_t vaddr = 0; + uint32_t pa_offset = phys % sysconf(_SC_PAGE_SIZE); + uint32_t pa_start = phys - pa_offset; + + size = round_page(size + pa_offset); err = get_privileged_ports (0, &device_master); if (err) { @@ -210,17 +214,16 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size) } err = - device_map (mem_device, VM_PROT_READ | VM_PROT_WRITE, pa_offset, size + pa_start, &memobj, 0); + device_map (mem_device, VM_PROT_READ | VM_PROT_WRITE, pa_start, size, &memobj, 0); mach_port_deallocate (mach_task_self (), mem_device); if (! err) { - virt_addr = 0; err = - vm_map (mach_task_self (), (vm_address_t *)&virt_addr, size + pa_start, 0, 1, + vm_map (mach_task_self (), &vaddr, size, 0, 1, memobj, 0, 0, VM_PROT_READ | VM_PROT_WRITE, VM_PROT_READ | VM_PROT_WRITE, - VM_INHERIT_NONE); + VM_INHERIT_SHARE); mach_port_deallocate (mach_task_self (), memobj); } @@ -229,7 +232,7 @@ acpi_os_map_memory(acpi_physical_address phys, acpi_size size) return (void *)-1; } - return virt_addr + pa_start; + return (void *)(vaddr + pa_offset); } acpi_status -- cgit v1.2.3