diff --git a/kernel/dev/dev.c b/kernel/dev/dev.c index 9a5fedb..3dafe2c 100644 --- a/kernel/dev/dev.c +++ b/kernel/dev/dev.c @@ -7,6 +7,7 @@ #include "termdev.h" #include "ps2kbdev.h" #include "serialdev.h" +#include "fbdev.h" DevTable DEVTABLE; @@ -17,4 +18,5 @@ void dev_init(void) { termdev_init(); ps2kbdev_init(); serialdev_init(); + fbdev_init(); } diff --git a/kernel/dev/fbdev.c b/kernel/dev/fbdev.c new file mode 100644 index 0000000..31d6a2d --- /dev/null +++ b/kernel/dev/fbdev.c @@ -0,0 +1,29 @@ +#include +#include +#include "fbdev.h" +#include "dev.h" +#include "sysdefs/devctl.h" +#include "hshtb.h" +#include "spinlock/spinlock.h" +#include "util/util.h" +#include "hal/hal.h" +#include "bootinfo/bootinfo.h" +#include "errors.h" + +int32_t fbdev_getinfo(uint8_t *buffer, size_t len, void *extra) { + FbDevGetInfo info = { + .w = BOOT_INFO.fb->width, + .h = BOOT_INFO.fb->height, + .margin = 20, + .fontw = 8, + .fonth = 16, + }; + hal_memcpy(buffer, &info, sizeof(info)); + return E_OK; +} + +void fbdev_init(void) { + Dev *fbdev; + HSHTB_ALLOC(DEVTABLE.devs, ident, "fbdev", fbdev); + fbdev->fns[DEV_FBDEV_GETINFO] = &fbdev_getinfo; +} diff --git a/kernel/dev/fbdev.h b/kernel/dev/fbdev.h new file mode 100644 index 0000000..9415d53 --- /dev/null +++ b/kernel/dev/fbdev.h @@ -0,0 +1,7 @@ +#ifndef DEV_FBDEV_H_ +#define DEV_FBDEV_H_ + +int32_t fbdev_getinfo(uint8_t *buffer, size_t len, void *extra); +void fbdev_init(void); + +#endif // DEV_FBDEV_H_ diff --git a/share/sysdefs/devctl.h b/share/sysdefs/devctl.h index f5ce38b..d32657b 100644 --- a/share/sysdefs/devctl.h +++ b/share/sysdefs/devctl.h @@ -12,10 +12,18 @@ #define DEV_SERIALDEV_RECVB 2 #define DEV_SERIALDEV_RECVREADY 3 +#define DEV_FBDEV_GETINFO 0 + #if !defined(__ASSEMBLER__) typedef uint64_t Dev_t; +typedef struct { + uint16_t w, h; + uint16_t margin; + uint8_t fontw, fonth; +} FbDevGetInfo; + #endif #endif // SHARE_SYSDEFS_DEVCTL_H_