summaryrefslogtreecommitdiff
path: root/kernel/drivers/gpu.c
diff options
context:
space:
mode:
authorFreya Murphy <freya@freyacat.org>2025-04-20 11:26:32 -0400
committerFreya Murphy <freya@freyacat.org>2025-04-20 11:26:32 -0400
commit5e0e6240ab058c490304e0789552b45160f900be (patch)
tree82e19097301d3914f80e356710438278df24fd36 /kernel/drivers/gpu.c
parentfix code segment (retfq) on long mode edge case (kvm) (diff)
downloadcomus-5e0e6240ab058c490304e0789552b45160f900be.tar.gz
comus-5e0e6240ab058c490304e0789552b45160f900be.tar.bz2
comus-5e0e6240ab058c490304e0789552b45160f900be.zip
fix term/gpu memory OOB error, add dynamic kernel identity map with N_IDENT_PTS
Diffstat (limited to 'kernel/drivers/gpu.c')
-rw-r--r--kernel/drivers/gpu.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/kernel/drivers/gpu.c b/kernel/drivers/gpu.c
index 17e7e18..3d79b99 100644
--- a/kernel/drivers/gpu.c
+++ b/kernel/drivers/gpu.c
@@ -12,20 +12,27 @@ struct gpu *gpu_dev = NULL;
int gpu_init(void)
{
// try to get a gpu device
- if (!gpu_dev && gop_init(&gpu_dev) == SUCCESS) {
- }
- if (!gpu_dev && bochs_init(&gpu_dev) == SUCCESS) {
- }
+ if (gpu_dev == NULL)
+ gop_init(&gpu_dev);
+ if (gpu_dev == NULL)
+ bochs_init(&gpu_dev);
// if we did (yay!) resize terminal
if (gpu_dev)
- term_resize(gpu_dev->width, gpu_dev->height);
+ term_resize(gpu_dev->width / en_font.width,
+ gpu_dev->height / en_font.height);
return gpu_dev != NULL;
}
void gpu_set_pixel(uint32_t x, uint32_t y, uint32_t r, uint32_t g, uint32_t b)
{
+ if (gpu_dev == NULL)
+ return;
+
+ x %= gpu_dev->width;
+ y %= gpu_dev->height;
+
// TODO: handle other bpp
volatile uint32_t *fb = (volatile uint32_t *)gpu_dev->framebuffer;
int offset = y * gpu_dev->width + x;