summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libacpica/acpi_init.c23
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