1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:37:35 +00:00

Start working on virtual consoles/TTYs.

This is a mess right now, but I'd rather commit as I go.
This commit is contained in:
Andreas Kling 2018-10-30 13:59:29 +01:00
parent bd2b5327d0
commit 68739dc43e
22 changed files with 611 additions and 344 deletions

View file

@ -4,4 +4,7 @@ CharacterDevice::~CharacterDevice()
{
}
OwnPtr<FileHandle> CharacterDevice::open(int options)
{
//VirtualFileSystem::the().open()
}

View file

@ -2,16 +2,26 @@
#include <AK/Types.h>
#include "Limits.h"
#include "FileHandle.h"
class CharacterDevice {
public:
virtual ~CharacterDevice();
virtual OwnPtr<FileHandle> open(int options);
virtual bool hasDataAvailableForRead() const = 0;
virtual Unix::ssize_t read(byte* buffer, Unix::size_t bufferSize) = 0;
virtual Unix::ssize_t write(const byte* buffer, Unix::size_t bufferSize) = 0;
unsigned major() const { return m_major; }
unsigned minor() const { return m_minor; }
protected:
CharacterDevice() { }
CharacterDevice(unsigned major, unsigned minor) : m_major(major), m_minor(minor) { }
private:
unsigned m_major { 0 };
unsigned m_minor{ 0 };
};

View file

@ -5,6 +5,7 @@
#include <AK/kstdio.h>
FullDevice::FullDevice()
: CharacterDevice(1, 7)
{
}

View file

@ -4,6 +4,7 @@
#include <AK/kstdio.h>
NullDevice::NullDevice()
: CharacterDevice(1, 3)
{
}

View file

@ -3,6 +3,7 @@
#include <AK/StdLib.h>
RandomDevice::RandomDevice()
: CharacterDevice(1, 8)
{
}

View file

@ -5,15 +5,11 @@
#include <AK/kmalloc.h>
#include <AK/kstdio.h>
#include <AK/ktime.h>
#include "CharacterDevice.h"
#include "sys-errno.h"
//#define VFS_DEBUG
static dword encodedDevice(unsigned major, unsigned minor)
{
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
}
static VirtualFileSystem* s_the;
VirtualFileSystem& VirtualFileSystem::the()
@ -542,9 +538,9 @@ VirtualFileSystem::Mount::Mount(InodeIdentifier host, RetainPtr<FileSystem>&& gu
{
}
void VirtualFileSystem::registerCharacterDevice(unsigned major, unsigned minor, CharacterDevice& device)
void VirtualFileSystem::registerCharacterDevice(CharacterDevice& device)
{
m_characterDevices.set(encodedDevice(major, minor), &device);
m_characterDevices.set(encodedDevice(device.major(), device.minor()), &device);
}
void VirtualFileSystem::forEachMount(Function<void(const Mount&)> callback) const

View file

@ -22,6 +22,11 @@
class CharacterDevice;
class FileHandle;
inline constexpr dword encodedDevice(unsigned major, unsigned minor)
{
return (minor & 0xff) | (major << 8) | ((minor & ~0xff) << 12);
}
class VirtualFileSystem {
public:
static void initializeGlobals();
@ -94,7 +99,7 @@ public:
bool touch(const String&path);
void registerCharacterDevice(unsigned major, unsigned minor, CharacterDevice&);
void registerCharacterDevice(CharacterDevice&);
size_t mountCount() const { return m_mounts.size(); }
void forEachMount(Function<void(const Mount&)>) const;

View file

@ -4,6 +4,7 @@
#include <AK/kstdio.h>
ZeroDevice::ZeroDevice()
: CharacterDevice(1, 5)
{
}