Add driver manager's setup routine

The setup_drivers routine existed locally for some time now, so now
it also exists in the repository. It has gone through two iterations:

1. The drivers are all listed in a null-terminated array of function
   pointers to initialization functions (this didn't work and the time
   for debugging just wasn't there).

2. All drivers (currently, only the PCI driver, because that's the
   only one that exists) are initialized after each other; their
   initialization functions are called manually.

It might be possible that the bug from the first iteration was due to
the memory space being offset by 128 or 256 bytes; it might be useful
to use that concept again because then, it will be easier to add new
drivers. That's not of high importance now, though.
This commit is contained in:
Eric-Paul Ickhorn 2024-07-23 01:04:35 +02:00
parent 18e5b049a4
commit 94e5e70305
Signed by: epickh
GPG Key ID: 1358818BAA38B104
1 changed files with 47 additions and 0 deletions

View File

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