diff --git a/i386/docs/drivers/slot-structure.md b/i386/docs/drivers/slot-structure.md new file mode 100644 index 0000000..5651933 --- /dev/null +++ b/i386/docs/drivers/slot-structure.md @@ -0,0 +1,73 @@ +# Nightloader Driver Structure + +This documentation file explains the format of a native driver slot +for the Nightloader on the i386 architecture. + +| Offset | Length | Name of Field | +| ------ | --------- | --------------------------------- | +| 0 | 8 | Driver Identifier | +| 8 | 2 | Format Version | +| 10 | 2 | Driver Version | +| 12 | 2 | Number of Functionalities | +| 16 | 4 | Functionality Table Offset | + +1. Driver Identifier + The driver identifier is used to uniquely identify a driver. It can + be chosen by a driver's developer, but should suggest what kind of + driver is contained in that slot, for the sake of clarity. + +2. Format Version + The version of the driver slot's standardized structures such as + the rest of the header, the functionality table and others that + the future might bring. + The first byte of this structure tells the major version, the + second one tells the minor version. No version patches are needed. + +3. Driver Version + Version of the driver, as seen by the driver's developer. + The first byte of this structure should be the major version, the + second one the minor version. No version patches are needed. + +4. Number of Functionalities + How many entries the functionality table contains. The table of + functionalities contains functions with standardized arguments, + actions and return types for interfacing with the driver. + +5. Functionality Table Offset + Offset *from the start of the driver slot* to the functionality + table. It may be wise to keep this a bit further away from the + header to prevent the need for more changes if the header structure + changes in a future version. + +## Functionality Structure + +Functionalities in the functionality table have a structure defined in +the following table: + +| Offset | Length | Name of Field | +| ------ | --------- | --------------------------------- | +| 0 | 2 | Function Category | +| 2 | 2 | Exact Function | +| 4 | 4 | Function Pointer | + +> The functionality table as it is found in any correct driver is a +> tightly packed array of those structures with as many elements as +> were promised in the corresponding header field. + +## Driver Functionality Categories + +The table below contains links to the driver functionality categories: + +| Id | Category | +| ------ | --------------------------------------------- | +| 0x1 | [Basic Text](./textwriter-functions.md) | +| 0x2 | [Text Window](./window-functions.md) | +| 0x3 | [Logger](./logger-functions.md) | +| 0x4 | [Pixel Graphics](./graphic-functions.md) | +| 0x5 | [Pixel Fonts](./pixel-font-functions.md) | +| 0x10 | [PCI](./pci-functions.md) | +| 0x11 | [PCIe](./pcie-functions.md) | +| 0x12 | [NVMe](./pcie-functions.md) | +| 0x20 | [USB](.usb/-functions.md) | +| 0x30 | [Storage](./storage-functions.md) | +| 0x40 | [Filesystem](./filesystem-functions.md) |