summaryrefslogtreecommitdiff
path: root/src/drivers/driver.c
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-16 09:21:36 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-16 09:21:36 +0200
commit8183f17368ea6944c8b36d7cb7564b33d2a0503a (patch)
treefc9ea3df698cab447dcee86cf94e047db037e9b6 /src/drivers/driver.c
parent1e8bad98827b651009a8ad4b8134d8a72a004be3 (diff)
downloadabaos-8183f17368ea6944c8b36d7cb7564b33d2a0503a.tar.gz
abaos-8183f17368ea6944c8b36d7cb7564b33d2a0503a.tar.bz2
introduced classes of driver types (graphics, mouse, keyboard, network, etc.)
removed direct vga_init from kernel.c, using pci for this now, get the driver of type graphics from driver_manager
Diffstat (limited to 'src/drivers/driver.c')
-rw-r--r--src/drivers/driver.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/src/drivers/driver.c b/src/drivers/driver.c
index fae54e7..829262e 100644
--- a/src/drivers/driver.c
+++ b/src/drivers/driver.c
@@ -12,10 +12,11 @@ static driver_vtable_t const driver_vtable = {
driver_print_info
};
-void driver_init( driver_t *driver, interrupt_t *interrupt, void *context )
+void driver_init( driver_t *driver, driver_type_t type, interrupt_t *interrupt, void *context )
{
memset( driver, 0, sizeof( driver_t ) );
+ driver->type = type;
driver->interrupt = interrupt;
driver->context = context;
@@ -96,3 +97,18 @@ void driver_manager_print_info_all( driver_manager_t *manager )
driver->vtable->print_info( driver );
}
}
+
+driver_t *driver_manager_find_driver( driver_manager_t *manager, driver_type_t type )
+{
+ driver_t *driver;
+
+ for( int i = 0; i < manager->nof_drivers; i++ ) {
+ driver_t *driver = (driver_t *)manager->driver[i];
+ if( driver->type == type ) {
+ return driver;
+ }
+ }
+
+ return NULL;
+
+}