limine: Document internal modules
diff --git a/PROTOCOL.md b/PROTOCOL.md
index 7ab3298a..3a107d68 100644
--- a/PROTOCOL.md
+++ b/PROTOCOL.md
@@ -894,13 +894,41 @@ ID:
Request:
```c
+#define LIMINE_INTERNAL_MODULE_REQUIRED (1 << 0)
+
+struct limine_internal_module {
+ const char *path;
+ const char *cmdline;
+ uint64_t flags;
+};
+
struct limine_module_request {
uint64_t id[4];
uint64_t revision;
struct limine_module_response *response;
+
+ /* Revision 1 */
+ uint64_t internal_module_count;
+ struct limine_internal_module **internal_modules;
};
```
+* `internal_module_count` - How many internal modules are passed by the kernel.
+* `internal_modules` - Pointer to an array of `internal_module_count` pointers to
+`struct limine_internal_module` structures.
+
+As part of `struct limine_internal_module`:
+
+* `path` - Path to the module to load. This path is *relative* to the location of
+the kernel.
+* `cmdline` - Command line for the given module.
+* `flags` - Flags changing module loading behaviour:
+ - `LIMINE_INTERNAL_MODULE_REQUIRED`: Fail if the requested module is not found.
+
+Internal Limine modules are guaranteed to be loaded *before* user-specified
+(configuration) modules, and thus they are guaranteed to appear before user-specified
+modules in the `modules` array in the response.
+
Response:
```c
struct limine_module_response {
