diff --git a/i386/loader/src-asm/drivers/manager.asm b/i386/loader/src-asm/drivers/manager.asm new file mode 100644 index 0000000..1f7a589 --- /dev/null +++ b/i386/loader/src-asm/drivers/manager.asm @@ -0,0 +1,47 @@ + +; Start with the driver data at 1 MiB, continue for 2 MiB +DRIVER_MEMORY_AREA equ 0x100000 +DRIVER_SLOT_SIZE equ 65536 +DRIVER_SLOT_COUNT equ 32 + +; Functions of all drivers which get initialized (in the order of +; initialization); the last entry must be a zero, but at 32 entries, +; the end is forced by the main initialization function. +driver_init_functions: + dd initialize_pci_driver + ; Ending Entry + dd 0 + +; [Furthest from EBP] +; -- No Arguments -- +; [Nearest to EBP] +setup_drivers: + push dword esi + sub esp, 64 + mov esi, esp + + mov [esi + (64 - 4)], eax + mov [esi + (64 - 8)], ebx + mov [esi + (64 - 12)], ecx + mov [esi + (64 - 16)], edx + mov [esi + (64 - 20)], edi + + push ebp + mov ebp, esp + push dword DRIVER_MEMORY_AREA + call initialize_pci_driver + mov esp, ebp + pop ebp + +.epilog: + mov eax, [esi + (64 - 4)] + mov ebx, [esi + (64 - 8)] + mov ecx, [esi + (64 - 12)] + mov edx, [esi + (64 - 16)] + mov edi, [esi + (64 - 20)] + + add esp, 64 + pop dword esi + ret + +%include "drivers/pci/driver.asm"