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:
parent
bd2b5327d0
commit
68739dc43e
22 changed files with 611 additions and 344 deletions
|
@ -4,4 +4,7 @@ CharacterDevice::~CharacterDevice()
|
|||
{
|
||||
}
|
||||
|
||||
|
||||
OwnPtr<FileHandle> CharacterDevice::open(int options)
|
||||
{
|
||||
//VirtualFileSystem::the().open()
|
||||
}
|
||||
|
|
|
@ -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 };
|
||||
};
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
#include <AK/kstdio.h>
|
||||
|
||||
FullDevice::FullDevice()
|
||||
: CharacterDevice(1, 7)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <AK/kstdio.h>
|
||||
|
||||
NullDevice::NullDevice()
|
||||
: CharacterDevice(1, 3)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
#include <AK/StdLib.h>
|
||||
|
||||
RandomDevice::RandomDevice()
|
||||
: CharacterDevice(1, 8)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <AK/kstdio.h>
|
||||
|
||||
ZeroDevice::ZeroDevice()
|
||||
: CharacterDevice(1, 5)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue