Kernel: Start making device numbers unique for each device

This commit is contained in:
2024-02-22 15:53:48 +02:00
parent 7a4ec7f7a3
commit 9594ee8e47
22 changed files with 92 additions and 57 deletions

View File

@@ -1,14 +1,17 @@
#include <kernel/Device/DebugDevice.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/Process.h>
#include <kernel/Timer/Timer.h>
#include <sys/sysmacros.h>
namespace Kernel
{
BAN::ErrorOr<BAN::RefPtr<DebugDevice>> DebugDevice::create(mode_t mode, uid_t uid, gid_t gid)
{
auto* result = new DebugDevice(mode, uid, gid, DevFileSystem::get().get_next_dev());
static uint32_t minor = 0;
auto* result = new DebugDevice(mode, uid, gid, makedev(DeviceNumber::Debug, minor++));
if (result == nullptr)
return BAN::Error::from_errno(ENOMEM);
return BAN::RefPtr<DebugDevice>::adopt(result);

View File

@@ -1,10 +1,12 @@
#include <kernel/BootInfo.h>
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/Device/FramebufferDevice.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <kernel/Memory/Heap.h>
#include <sys/framebuffer.h>
#include <sys/mman.h>
#include <sys/sysmacros.h>
namespace Kernel
{
@@ -23,7 +25,7 @@ namespace Kernel
return BAN::Error::from_errno(ENOTSUP);
auto* device_ptr = new FramebufferDevice(
0660, 0, 900,
DevFileSystem::get().get_next_dev(),
makedev(DeviceNumber::Framebuffer, get_framebuffer_device_index()),
g_boot_info.framebuffer.address,
g_boot_info.framebuffer.width,
g_boot_info.framebuffer.height,
@@ -39,7 +41,7 @@ namespace Kernel
FramebufferDevice::FramebufferDevice(mode_t mode, uid_t uid, gid_t gid, dev_t rdev, paddr_t paddr, uint32_t width, uint32_t height, uint32_t pitch, uint8_t bpp)
: CharacterDevice(mode, uid, gid)
, m_name(BAN::String::formatted("fb{}", get_framebuffer_device_index()))
, m_name(BAN::String::formatted("fb{}", minor(rdev)))
, m_rdev(rdev)
, m_video_memory_paddr(paddr)
, m_width(width)

View File

@@ -1,12 +1,15 @@
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/Device/NullDevice.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <sys/sysmacros.h>
namespace Kernel
{
BAN::ErrorOr<BAN::RefPtr<NullDevice>> NullDevice::create(mode_t mode, uid_t uid, gid_t gid)
{
auto* result = new NullDevice(mode, uid, gid, DevFileSystem::get().get_next_dev());
static uint32_t minor = 0;
auto* result = new NullDevice(mode, uid, gid, makedev(DeviceNumber::Null, minor++));
if (result == nullptr)
return BAN::Error::from_errno(ENOMEM);
return BAN::RefPtr<NullDevice>::adopt(result);

View File

@@ -1,12 +1,15 @@
#include <kernel/Device/DeviceNumbers.h>
#include <kernel/Device/ZeroDevice.h>
#include <kernel/FS/DevFS/FileSystem.h>
#include <sys/sysmacros.h>
namespace Kernel
{
BAN::ErrorOr<BAN::RefPtr<ZeroDevice>> ZeroDevice::create(mode_t mode, uid_t uid, gid_t gid)
{
auto* result = new ZeroDevice(mode, uid, gid, DevFileSystem::get().get_next_dev());
static uint32_t minor = 0;
auto* result = new ZeroDevice(mode, uid, gid, makedev(DeviceNumber::Zero, minor++));
if (result == nullptr)
return BAN::Error::from_errno(ENOMEM);
return BAN::RefPtr<ZeroDevice>::adopt(result);