Files
ladybird/Kernel/Device.h
Andreas Kling 799177feda Kernel: Make BochsVGADevice a BlockDevice and support mmapping it.
Currently you can only mmap the entire framebuffer.
Using this when starting up the WindowServer gets us yet another step
closer towards it moving into userspace. :^)
2019-02-16 09:57:42 +01:00

52 lines
1.4 KiB
C++

#pragma once
#include <AK/Retainable.h>
#include <AK/Types.h>
#include "Limits.h"
#include "FileDescriptor.h"
class Process;
class Device : public Retainable<Device> {
public:
virtual ~Device();
InodeMetadata metadata() const { return { }; }
virtual RetainPtr<FileDescriptor> open(int& error, int options);
virtual void close();
virtual bool can_read(Process&) const = 0;
virtual bool can_write(Process&) const = 0;
virtual ssize_t read(Process&, byte* buffer, size_t bufferSize) = 0;
virtual ssize_t write(Process&, const byte* buffer, size_t bufferSize) = 0;
unsigned major() const { return m_major; }
unsigned minor() const { return m_minor; }
virtual bool is_tty() const { return false; }
virtual bool is_master_pty() const { return false; }
virtual int ioctl(Process&, unsigned request, unsigned arg);
virtual const char* class_name() const = 0;
uid_t uid() const { return m_uid; }
uid_t gid() const { return m_gid; }
virtual bool is_block_device() const { return false; }
virtual bool is_character_device() const { return false; }
protected:
Device(unsigned major, unsigned minor) : m_major(major), m_minor(minor) { }
void set_uid(uid_t uid) { m_uid = uid; }
void set_gid(gid_t gid) { m_gid = gid; }
private:
unsigned m_major { 0 };
unsigned m_minor { 0 };
uid_t m_uid { 0 };
gid_t m_gid { 0 };
};