diff --git a/Kernel/Devices/Device.h b/Kernel/Devices/Device.h index fd9e2a5d1d..155c5adf85 100644 --- a/Kernel/Devices/Device.h +++ b/Kernel/Devices/Device.h @@ -1,5 +1,38 @@ #pragma once +// Device is the base class of everything that lives in the /dev directory. +// +// All Devices will automatically register with the VFS. +// To expose a Device to the filesystem, simply pass two unique numbers to the constructor, +// and then mknod a file in /dev with those numbers. +// +// There are two main subclasses: +// - BlockDevice (random access) +// - CharacterDevice (sequential) +// +// The most important functions in Device are: +// +// class_name() +// - Used in the /proc filesystem to identify the type of Device. +// +// read() and write() +// - Implement reading and writing. +// - Return the number of bytes read/written, OR a negative error code. +// +// can_read() and can_write() +// +// - Used to implement blocking I/O, and the select() and poll() syscalls. +// - Return true if read() or write() would succeed, respectively. +// - Note that can_read() should return true in EOF conditions, +// and a subsequent call to read() should return 0. +// +// ioctl() +// +// - Optional. If unimplemented, ioctl() on the device will fail with -ENOTTY. +// - Can be overridden in subclasses to implement arbitrary functionality. +// - Subclasses should take care to validate incoming addresses before dereferencing. +// + #include #include #include