; 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"