From e927d93a48273d69aa3bdd2d40c576b0836a3230 Mon Sep 17 00:00:00 2001 From: EnderIce2 Date: Fri, 14 Feb 2025 19:57:29 +0200 Subject: [PATCH] feat(kernel): add stub device /dev/fb0 Signed-off-by: EnderIce2 --- Kernel/core/driver/daemon.cpp | 71 ++++++++++++++++++++++++++--- Kernel/include/interface/syscalls.h | 11 +++++ 2 files changed, 76 insertions(+), 6 deletions(-) diff --git a/Kernel/core/driver/daemon.cpp b/Kernel/core/driver/daemon.cpp index eb1436ff..1c9f20c5 100644 --- a/Kernel/core/driver/daemon.cpp +++ b/Kernel/core/driver/daemon.cpp @@ -45,14 +45,19 @@ namespace Driver * 4 - /dev/random * 5 - /dev/mem * 6 - /dev/kcon - * 7 - /dev/tty - * 8 - /dev/ptmx + * 7 - /dev/tty + * 8 - /dev/ptmx * * maj = 1 * min: - * 0 - /dev/input/keyboard - * 1 - /dev/input/mouse - * ..- /dev/input/eventX + * 0 - /dev/input/keyboard + * 1 - /dev/input/mouse + * ..- /dev/input/eventN + * + * maj = 2 + * min: + * 0 - /dev/fb0 + * ..- /dev/fbN */ TTY::PTMXDevice *ptmx = nullptr; @@ -205,6 +210,16 @@ namespace Driver return -ENOENT; }; } + case 2: + { + switch (Node->GetMinor()) + { + case 0: /* /dev/fb0 */ + return -EINVAL; + default: + return -ENOENT; + } + } default: { std::unordered_map &drivers = @@ -283,6 +298,16 @@ namespace Driver return -ENOENT; }; } + case 2: + { + switch (Node->GetMinor()) + { + case 0: /* /dev/fb0 */ + return -EINVAL; + default: + return -ENOENT; + } + } default: { std::unordered_map &drivers = @@ -467,6 +492,32 @@ namespace Driver return -ENOENT; }; } + case 2: + { + switch (Node->GetMinor()) + { + case 0: /* /dev/fb0 */ + { + switch (Request) + { + case FBIOGET_SCREEN_INFO: + { + FramebufferScreenInfo *info = (FramebufferScreenInfo *)Argp; + info->Width = Display->GetWidth; + info->Height = Display->GetHeight; + info->Pitch = Display->GetPitch(); + info->Bpp = Display->GetBitsPerPixel(); + info->Size = Display->GetSize; + return 0; + } + default: + return -ENOSYS; + } + } + default: + return -ENOENT; + } + } default: { std::unordered_map &drivers = @@ -870,7 +921,6 @@ namespace Driver createDevice(_dev, devNode, "ptmx", 0, MinorID++, mode); /* ------------------------------------------------------ */ - MinorID = 0; /* c rw- r-- --- */ @@ -886,5 +936,14 @@ namespace Driver S_IFCHR; createDevice(input, devInputNode, "mouse", 1, MinorID++, mode); + + /* ------------------------------------------------------ */ + MinorID = 0; + + /* c rw- r-- --- */ + mode = S_IRUSR | S_IWUSR | + S_IRGRP | + S_IFCHR; + createDevice(_dev, devNode, "fb0", 2, MinorID++, mode); } } diff --git a/Kernel/include/interface/syscalls.h b/Kernel/include/interface/syscalls.h index 48053313..157a9b50 100644 --- a/Kernel/include/interface/syscalls.h +++ b/Kernel/include/interface/syscalls.h @@ -531,6 +531,17 @@ static_assert((int)__SYS_SIG_IGN == (int)___SYS_SIG_IGN, "SIG_IGN values do not typedef int __SYS_clockid_t; typedef unsigned int __SYS_socklen_t; +typedef struct FramebufferScreenInfo +{ + __UINT32_TYPE__ Width; + __UINT32_TYPE__ Height; + __UINT32_TYPE__ Pitch; + __UINT32_TYPE__ Bpp; + __UINT32_TYPE__ Size; +} FramebufferScreenInfo; + +#define FBIOGET_SCREEN_INFO 0xf0 + /** * @brief List of syscalls *