From b6bf26430d388c7f947d58734c389eba19bd384b Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 17 Feb 2019 10:38:07 +0100 Subject: [PATCH] Kernel: Have devices automagically register themselves with the VFS. --- Kernel/Device.cpp | 8 ++++++++ Kernel/Device.h | 2 +- Kernel/SlavePTY.cpp | 2 -- Kernel/init.cpp | 23 ++--------------------- 4 files changed, 11 insertions(+), 24 deletions(-) diff --git a/Kernel/Device.cpp b/Kernel/Device.cpp index 62a2482468..226cbcc2c5 100644 --- a/Kernel/Device.cpp +++ b/Kernel/Device.cpp @@ -1,8 +1,16 @@ #include "CharacterDevice.h" #include +Device::Device(unsigned major, unsigned minor) + : m_major(major) + , m_minor(minor) +{ + VFS::the().register_device(*this); +} + Device::~Device() { + VFS::the().unregister_device(*this); } RetainPtr Device::open(int& error, int options) diff --git a/Kernel/Device.h b/Kernel/Device.h index 52dbf10c13..9c68d5602c 100644 --- a/Kernel/Device.h +++ b/Kernel/Device.h @@ -39,7 +39,7 @@ public: virtual bool is_character_device() const { return false; } protected: - Device(unsigned major, unsigned minor) : m_major(major), m_minor(minor) { } + Device(unsigned major, unsigned minor); void set_uid(uid_t uid) { m_uid = uid; } void set_gid(gid_t gid) { m_gid = gid; } diff --git a/Kernel/SlavePTY.cpp b/Kernel/SlavePTY.cpp index 04c7ea2bb5..266b726600 100644 --- a/Kernel/SlavePTY.cpp +++ b/Kernel/SlavePTY.cpp @@ -10,7 +10,6 @@ SlavePTY::SlavePTY(MasterPTY& master, unsigned index) { set_uid(current->uid()); set_gid(current->gid()); - VFS::the().register_device(*this); DevPtsFS::the().register_slave_pty(*this); set_size(80, 25); } @@ -19,7 +18,6 @@ SlavePTY::~SlavePTY() { dbgprintf("~SlavePTY(%u)\n", m_index); DevPtsFS::the().unregister_slave_pty(*this); - VFS::the().unregister_device(*this); } String SlavePTY::tty_name() const diff --git a/Kernel/init.cpp b/Kernel/init.cpp index e47897cb2d..c4ec14780c 100644 --- a/Kernel/init.cpp +++ b/Kernel/init.cpp @@ -66,28 +66,9 @@ VFS* vfs; Syscall::initialize(); auto dev_zero = make(); - vfs->register_device(*dev_zero); - - vfs->register_device(*dev_null); - auto dev_full = make(); - vfs->register_device(*dev_full); - auto dev_random = make(); - vfs->register_device(*dev_random); - auto dev_ptmx = make(); - vfs->register_device(*dev_ptmx); - - vfs->register_device(*keyboard); - vfs->register_device(*ps2mouse); - vfs->register_device(*tty0); - vfs->register_device(*tty1); - vfs->register_device(*tty2); - vfs->register_device(*tty3); - - vfs->register_device(BXVGADevice::the()); - auto dev_hd0 = IDEDiskDevice::create(); auto e2fs = Ext2FS::create(dev_hd0.copy_ref()); e2fs->initialize(); @@ -145,6 +126,8 @@ VFS* vfs; kmalloc_init(); init_ksyms(); + vfs = new VFS; + auto console = make(); RTC::initialize(); @@ -152,8 +135,6 @@ VFS* vfs; gdt_init(); idt_init(); - vfs = new VFS; - keyboard = new KeyboardDevice; ps2mouse = new PS2MouseDevice; dev_null = new NullDevice;