mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 23:18:21 +00:00
fb: map as WC
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
#define _TERM_H
|
#define _TERM_H
|
||||||
|
|
||||||
void term_init();
|
void term_init();
|
||||||
|
void term_update_framebuffer(void *fb);
|
||||||
void term_putchar(char c);
|
void term_putchar(char c);
|
||||||
void term_write(char *str, size_t count);
|
void term_write(char *str, size_t count);
|
||||||
void term_getsize(size_t *x, size_t *y, size_t *fbx, size_t *fby);
|
void term_getsize(size_t *x, size_t *y, size_t *fbx, size_t *fby);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#define ARCH_MMU_FLAGS_WB 0
|
#define ARCH_MMU_FLAGS_WB 0
|
||||||
#define ARCH_MMU_FLAGS_WT (1 << 3)
|
#define ARCH_MMU_FLAGS_WT (1 << 3)
|
||||||
#define ARCH_MMU_FLAGS_UC (1 << 4)
|
#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
|
#define ARCH_MMU_REQUIRED_FLAGS ARCH_MMU_FLAGS_READ
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <arch/cpu.h>
|
#include <arch/cpu.h>
|
||||||
#include <kernel/pmm.h>
|
#include <kernel/pmm.h>
|
||||||
#include <kernel/usercopy.h>
|
#include <kernel/usercopy.h>
|
||||||
|
#include <kernel/term.h>
|
||||||
#include <kernel/init.h>
|
#include <kernel/init.h>
|
||||||
|
|
||||||
typedef struct bitfield_t {
|
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);
|
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);
|
INIT_ROUTINE_DEFINE(fb, INIT_ROUTINE_FLAGS_NONE, fb_init, devfs);
|
||||||
|
|||||||
@@ -71,4 +71,8 @@ void term_init() {
|
|||||||
logging_sethook(term_putchar);
|
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);
|
||||||
|
|||||||
Reference in New Issue
Block a user