From 21c873a8f57fc32c3a71b4d8413f6f419a59ac95 Mon Sep 17 00:00:00 2001 From: Eric-Paul Ickhorn Date: Thu, 22 Aug 2024 15:08:36 +0200 Subject: [PATCH] Add driver slot documentation Driver slots had a structure before, but now, it's defined how the layout should be done. The design was also changed significantly, so the PCI and ACPI drivers have to be changed now. --- i386/docs/drivers/slot-structure.md | 73 +++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 i386/docs/drivers/slot-structure.md 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) |