diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-16 09:21:36 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-16 09:21:36 +0200 |
commit | 8183f17368ea6944c8b36d7cb7564b33d2a0503a (patch) | |
tree | fc9ea3df698cab447dcee86cf94e047db037e9b6 /src/drivers/driver.c | |
parent | 1e8bad98827b651009a8ad4b8134d8a72a004be3 (diff) | |
download | abaos-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.c | 18 |
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; + +} |