diff options
author | Damien Zammit <damien@zamaudio.com> | 2022-02-13 08:25:54 +1100 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2022-02-13 08:25:54 +1100 |
commit | 7d89c6af5062ec609e2b2f081639a27c34467754 (patch) | |
tree | d022f82c8e0d95c60486ff952ac6d3203b8adad9 | |
parent | 64c73eea8732cc890fce2281a234ddc0fd55750a (diff) |
fix up offsetsacpica-nothread-fixup
-rw-r--r-- | libacpica/acpi_init.c | 23 |
1 files 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 |