cleanup
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <zinnia/init.h>
|
||||
#include <zinnia/types.h>
|
||||
|
||||
void acpi_init(struct boot_info* info);
|
||||
|
||||
extern phys_t acpi_rsdp_addr;
|
||||
@@ -0,0 +1,13 @@
|
||||
#include <zinnia/acpi.h>
|
||||
#include <zinnia/print.h>
|
||||
#include <zinnia/types.h>
|
||||
|
||||
phys_t acpi_rsdp_addr = 0;
|
||||
|
||||
void acpi_init(struct boot_info* info) {
|
||||
if (!info->rsdp) {
|
||||
log("acpi: No RSDP was passed, unable to start ACPI subsystem!\n");
|
||||
return;
|
||||
}
|
||||
acpi_rsdp_addr = info->rsdp;
|
||||
}
|
||||
+10
-9
@@ -1,15 +1,16 @@
|
||||
uacpi = subproject('uacpi')
|
||||
|
||||
kernel_sources += uacpi.get_variable('sources')
|
||||
kernel_includes += uacpi.get_variable('includes')
|
||||
kernel_c_args += [
|
||||
'-DUACPI_FORMATTED_LOGGING',
|
||||
'-DUACPI_BAREBONES_MODE', # TODO
|
||||
'-DUACPI_OVERRIDE_TYPES',
|
||||
]
|
||||
# For uacpi_types.h
|
||||
kernel_includes += include_directories('include')
|
||||
|
||||
kernel_sources += files(
|
||||
'init.c',
|
||||
'uacpi_glue.c',
|
||||
)
|
||||
|
||||
kernel_includes += uacpi.get_variable('includes')
|
||||
kernel_includes += include_directories('include')
|
||||
|
||||
kernel_c_args += [
|
||||
'-DUACPI_FORMATTED_LOGGING',
|
||||
'-DUACPI_BAREBONES_MODE', # TODO: Remove
|
||||
'-DUACPI_OVERRIDE_TYPES',
|
||||
]
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#include <zinnia/acpi.h>
|
||||
#include <zinnia/console.h>
|
||||
#include <zinnia/init.h>
|
||||
#include <zinnia/mmio.h>
|
||||
@@ -6,17 +7,22 @@
|
||||
#include <zinnia/utils.h>
|
||||
#include <zinnia/virt.h>
|
||||
#include <zinnia/vma.h>
|
||||
#include <arch/mem.h>
|
||||
#include <stdarg.h>
|
||||
#include <uacpi/kernel_api.h>
|
||||
#include <uacpi/status.h>
|
||||
#include <uacpi/types.h>
|
||||
|
||||
uacpi_status uacpi_kernel_get_rsdp(uacpi_phys_addr* out_rsdp_address) {
|
||||
*out_rsdp_address = (uacpi_phys_addr)rsdp_addr;
|
||||
*out_rsdp_address = (uacpi_phys_addr)acpi_rsdp_addr;
|
||||
return UACPI_STATUS_OK;
|
||||
}
|
||||
|
||||
void* uacpi_kernel_map(uacpi_phys_addr addr, uacpi_size len) {
|
||||
uintptr_t aligned_addr = ALIGN_DOWN(addr, arch_mem_page_size());
|
||||
uintptr_t difference = addr - aligned_addr;
|
||||
size_t aligned_len = ALIGN_UP(len + difference, arch_mem_page_size());
|
||||
|
||||
uintptr_t vaddr = vm_alloc(len);
|
||||
for (size_t i = 0; i < len; i += arch_mem_page_size()) {
|
||||
pmap_map(&kernel_vma.pmap, vaddr + i, addr + i, PROT_READ | PROT_WRITE, CACHE_ANY);
|
||||
|
||||
Reference in New Issue
Block a user