From a805f22354e66ecff0b8287b10cfe322d354a6a5 Mon Sep 17 00:00:00 2001 From: kieron Date: Wed, 4 Apr 2018 20:53:13 +0000 Subject: [PATCH] DriverManagement done? Dummy Driver loaded successfully. git-svn-id: https://spexeah.com:8443/svn/Asuro@291 6dbc8c32-bb84-406f-8558-d1cf31a0ab0c --- src/driver/PCI.pas | 14 +++++++++++++- src/driver/testdriver.pas | 31 +++++++++++++++++++++++++++++++ src/drivermanagement.pas | 2 +- src/kernel.pas | 4 +++- 4 files changed, 48 insertions(+), 3 deletions(-) create mode 100644 src/driver/testdriver.pas diff --git a/src/driver/PCI.pas b/src/driver/PCI.pas index a1f7fa10..53cb4743 100644 --- a/src/driver/PCI.pas +++ b/src/driver/PCI.pas @@ -15,7 +15,9 @@ uses util, console, drivertypes, - ATA; + ATA, + lmemorymanager, + drivermanagement; type @@ -211,6 +213,7 @@ function loadDeviceConfig(bus : uint8; slot : uint8; func : uint8) : boolean; var device : TPCI_Device; data : uint32; + DevID : PDeviceIdentifier; begin @@ -290,6 +293,13 @@ begin device.interrupt_pin := getbyte(data, 2); device.interrupt_line := getbyte(data, 3); + DevID:= PDeviceIdentifier(kalloc(sizeof(TDeviceIdentifier))); + DevID^.Bus:= biPCI; + DevID^.id0:= device.device_id; + DevID^.id1:= device.class_code; + DevID^.id2:= device.subclass_class; + DevID^.id3:= device.prog_if; + DevID^.ex:= nil; console.writestring('PCI: Found Device: '); console.writehex(device.header_type); @@ -302,6 +312,8 @@ begin console.writestring(' '); console.writehexln(device.prog_if); + drivermanagement.register_device(DevID, @device); + devices[device_count] := device; device_count := device_count + 1; diff --git a/src/driver/testdriver.pas b/src/driver/testdriver.pas new file mode 100644 index 00000000..f43a3433 --- /dev/null +++ b/src/driver/testdriver.pas @@ -0,0 +1,31 @@ +unit testdriver; + +interface + +uses + console, drivermanagement; + +procedure init; + +implementation + +function load(ptr : void) : boolean; +begin + console.writestringln('DUMMY DRIVER LOADED.') +end; + +procedure init; +var + devID : TDeviceIdentifier; + +begin + devID.bus:= biPCI; + devID.id0:= $00008086; + devID.id1:= $00000006; + devID.id2:= $00000000; + devID.id3:= $00000000; + devID.ex:= nil; + drivermanagement.register_driver(@devID, @load); +end; + +end. \ No newline at end of file diff --git a/src/drivermanagement.pas b/src/drivermanagement.pas index d0dd6124..92bc8f62 100644 --- a/src/drivermanagement.pas +++ b/src/drivermanagement.pas @@ -11,7 +11,7 @@ unit drivermanagement; interface uses - util, strings, lmemorymanager; + console, util, strings, lmemorymanager; type PDevEx = ^TDevEx; diff --git a/src/kernel.pas b/src/kernel.pas index 795f0309..6f223033 100644 --- a/src/kernel.pas +++ b/src/kernel.pas @@ -33,7 +33,8 @@ uses Terminal, strings, ATA, - USB; + USB, + testdriver; procedure kmain(mbinfo: Pmultiboot_info_t; mbmagic: uint32); stdcall; @@ -107,6 +108,7 @@ begin lmemorymanager.init(); tss.init(); scheduler.init(); + testdriver.init(); //asm INT 13 end; STI;