diff --git a/README.md b/README.md index 0ffd9ea6a6..bd7b2f809c 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,16 @@ Missing class drivers for various classes. - virtio-netd - VirtIO net device (incomplete). - xhcid - xHCI (incomplete). +## Kernel Functions + +These are the most used kernel functions by Redox drivers. + +- `iopl` - syscall that sets the I/O privilege level. x86 has four privilege rings (0/1/2/3), of which the kernel runs in ring 0 and userspace in ring 3. IOPL can only be changed by the kernel, for obvious security reasons, and therefore the Redox kernel needs root to set it. It is unique for each process. Processes with IOPL=3 can access I/O ports, and the kernel can access them as well. +- `physalloc` - allocates physical memory frames. +- `physfree` - frees memory frames. +- `physmap` - maps physical memory frames to driver-accessible virtual memory pages. +- `irq:` - allows getting events from interrupts. It is used primarily by listening for its file descriptors using the `event:` scheme. + ## Contributing to Drivers If you want to write drivers for Redox, datasheets are preferable, when they are freely available. Be aware that datasheets are often provided under a [Non-Disclosure Agreement](https://en.wikipedia.org/wiki/Non-disclosure_agreement) from hardware vendors, which can affect the ability to create an MIT-licensed driver. @@ -63,3 +73,5 @@ If you want to write drivers for Redox, datasheets are preferable, when they are If you don't have datasheets, we recommend you to do reverse-engineering of available C code of BSD drivers. We recommend BSDs drivers because BSD license is compatible with MIT (permissive), that way we can reuse the code in other drivers. + +You can see this [example](https://gitlab.redox-os.org/redox-os/exampled) driver, read the code of the existent ones or the most close driver type for your device. \ No newline at end of file