fb: map as WC

This commit is contained in:
Matheus
2025-08-24 10:33:24 -03:00
parent c84aa086dd
commit a3f376c1d6
4 changed files with 13 additions and 1 deletions
+1
View File
@@ -2,6 +2,7 @@
#define _TERM_H
void term_init();
void term_update_framebuffer(void *fb);
void term_putchar(char c);
void term_write(char *str, size_t count);
void term_getsize(size_t *x, size_t *y, size_t *fbx, size_t *fby);
+1
View File
@@ -21,6 +21,7 @@
#define ARCH_MMU_FLAGS_WB 0
#define ARCH_MMU_FLAGS_WT (1 << 3)
#define ARCH_MMU_FLAGS_UC (1 << 4)
#define ARCH_MMU_FLAGS_WC ((1 << 12) | (1 << 3)) // PAT5 (limine sets up the 5th PAT entry as WC)
#define ARCH_MMU_REQUIRED_FLAGS ARCH_MMU_FLAGS_READ
+6
View File
@@ -7,6 +7,7 @@
#include <arch/cpu.h>
#include <kernel/pmm.h>
#include <kernel/usercopy.h>
#include <kernel/term.h>
#include <kernel/init.h>
typedef struct bitfield_t {
@@ -256,6 +257,11 @@ void fb_init() {
printf("%s: %dx%d %d bpp\n", name, fb->width, fb->height, fb->bpp);
}
void *fb_map = vmm_map(NULL, fbs[0]->pitch * fbs[0]->height, VMM_FLAGS_PHYSICAL, ARCH_MMU_FLAGS_READ | ARCH_MMU_FLAGS_WRITE | ARCH_MMU_FLAGS_NOEXEC | ARCH_MMU_FLAGS_WC, FROM_HHDM(fbs[0]->address));
__assert(fb_map);
term_update_framebuffer(fb_map);
}
INIT_ROUTINE_DEFINE(fb, INIT_ROUTINE_FLAGS_NONE, fb_init, devfs);
+5 -1
View File
@@ -71,4 +71,8 @@ void term_init() {
logging_sethook(term_putchar);
}
INIT_ROUTINE_DEFINE(term, INIT_ROUTINE_FLAGS_NONE, term_init, pmm);
void term_update_framebuffer(void *fb) {
((struct flanterm_fb_context *)fb)->framebuffer = fb;
}
INIT_ROUTINE_DEFINE(term, INIT_ROUTINE_FLAGS_NONE, term_init, vmm);