int hal_mm_map_physical_range(uintptr_t phys_start, uintptr_t phys_end, uint32_t flags, uintptr_t* out_virt);
+uintptr_t hal_mm_phys_to_virt(uintptr_t phys);
+uintptr_t hal_mm_virt_to_phys(uintptr_t virt);
+uintptr_t hal_mm_kernel_virt_base(void);
+
#endif
(void)out_virt;
return -1;
}
+
+uintptr_t hal_mm_phys_to_virt(uintptr_t phys) {
+ return phys;
+}
+
+uintptr_t hal_mm_virt_to_phys(uintptr_t virt) {
+ return virt;
+}
+
+uintptr_t hal_mm_kernel_virt_base(void) {
+ return 0;
+}
(void)out_virt;
return -1;
}
+
+uintptr_t hal_mm_phys_to_virt(uintptr_t phys) {
+ return phys;
+}
+
+uintptr_t hal_mm_virt_to_phys(uintptr_t virt) {
+ return virt;
+}
+
+uintptr_t hal_mm_kernel_virt_base(void) {
+ return 0;
+}
(void)out_virt;
return -1;
}
+
+uintptr_t hal_mm_phys_to_virt(uintptr_t phys) {
+ return phys;
+}
+
+uintptr_t hal_mm_virt_to_phys(uintptr_t virt) {
+ return virt;
+}
+
+uintptr_t hal_mm_kernel_virt_base(void) {
+ return 0;
+}
*out_virt = virt_base + (phys_start - phys_start_aligned);
return 0;
}
+
+#define X86_KERNEL_VIRT_BASE 0xC0000000U
+
+uintptr_t hal_mm_phys_to_virt(uintptr_t phys) {
+ return phys + X86_KERNEL_VIRT_BASE;
+}
+
+uintptr_t hal_mm_virt_to_phys(uintptr_t virt) {
+ return virt - X86_KERNEL_VIRT_BASE;
+}
+
+uintptr_t hal_mm_kernel_virt_base(void) {
+ return X86_KERNEL_VIRT_BASE;
+}
#include "slab.h"
#include "pmm.h"
+#include "hal/mm.h"
#include "uart_console.h"
#include <stddef.h>
* For now, slab pages come from pmm_alloc_page which returns
* physical addresses. We need to convert to virtual. */
- /* Use kernel virtual = phys + 0xC0000000 for higher-half */
- uint8_t* vbase = base + 0xC0000000U;
+ uint8_t* vbase = (uint8_t*)hal_mm_phys_to_virt((uintptr_t)base);
for (uint32_t i = 0; i < cache->objs_per_slab; i++) {
struct slab_free_node* node = (struct slab_free_node*)(vbase + i * cache->obj_size);