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.
This commit is contained in:
Eric-Paul Ickhorn 2024-08-22 15:08:36 +02:00
parent 2ad0d26ff4
commit 21c873a8f5
1 changed files with 73 additions and 0 deletions

View File

@ -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) |