Make driver initialization easier in manager.asm
With this change, the driver's setup function only has to be added to the 'driver_init_functions'-array and it will be called once 'setup_drivers' is called.
This commit is contained in:
parent
6e8e022937
commit
0d16e3e35a
|
@ -26,13 +26,41 @@ setup_drivers:
|
|||
mov [esi + (64 - 16)], edx
|
||||
mov [esi + (64 - 20)], edi
|
||||
|
||||
; [esi + 8]: Pointer to the current driver init function
|
||||
; [esi + 12]L Pointer to current driver slot
|
||||
; ecx: Driver slot index
|
||||
|
||||
xor ecx, ecx
|
||||
|
||||
.driver_setup_loop:
|
||||
cmp ecx, DRIVER_SLOT_COUNT
|
||||
jae .epilog
|
||||
|
||||
mov ebx, ecx
|
||||
shl ebx, 2
|
||||
add ebx, driver_init_functions
|
||||
mov eax, [ebx]
|
||||
mov [esi + 8], eax
|
||||
|
||||
cmp eax, 0
|
||||
je .epilog
|
||||
|
||||
mov eax, ecx
|
||||
mov edx, DRIVER_SLOT_SIZE
|
||||
mul edx
|
||||
mov [esi + 12], eax
|
||||
|
||||
push ebp
|
||||
mov ebp, esp
|
||||
push dword DRIVER_MEMORY_AREA
|
||||
call initialize_pci_driver
|
||||
push dword [esi + 12]
|
||||
mov eax, [esi + 8]
|
||||
call eax
|
||||
mov esp, ebp
|
||||
pop ebp
|
||||
|
||||
inc ecx
|
||||
jmp .driver_setup_loop
|
||||
|
||||
.epilog:
|
||||
mov eax, [esi + (64 - 4)]
|
||||
mov ebx, [esi + (64 - 8)]
|
||||
|
@ -45,3 +73,4 @@ setup_drivers:
|
|||
ret
|
||||
|
||||
%include "drivers/pci/driver.asm"
|
||||
%include "drivers/acpi/driver.asm"
|
||||
|
|
Loading…
Reference in New Issue