Nightloader/i386/loader/src-asm/drivers/manager.asm

48 lines
1.5 KiB
NASM

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