summaryrefslogtreecommitdiff
path: root/src/drivers
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
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')
-rw-r--r--src/drivers/driver.c18
-rw-r--r--src/drivers/driver.h11
-rw-r--r--src/drivers/hdi/ps2/keyboard.c2
-rw-r--r--src/drivers/hdi/ps2/mouse.c2
-rw-r--r--src/drivers/net/rtl8139.c2
-rw-r--r--src/drivers/video/vga.c2
6 files changed, 31 insertions, 6 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;
+
+}
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index 38dfe64..4d5689e 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -10,13 +10,21 @@ typedef struct {
void (*print_info)( void *obj );
} driver_vtable_t;
+typedef enum {
+ DRIVER_TYPE_KEYBOARD,
+ DRIVER_TYPE_MOUSE,
+ DRIVER_TYPE_GRAPHICS,
+ DRIVER_TYPE_NETWORK
+} driver_type_t;
+
typedef struct {
driver_vtable_t const *vtable;
+ driver_type_t type;
interrupt_t *interrupt;
void *context;
} driver_t;
-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 );
void driver_activate( void *obj );
void driver_deactivate( void *obj );
void driver_deinit( void *obj );
@@ -35,5 +43,6 @@ void driver_manager_activate_all( driver_manager_t *manager );
void driver_manager_deactivate_all( driver_manager_t *manager );
void driver_manager_deinit( driver_manager_t *manager );
void driver_manager_print_info_all( driver_manager_t *manager );
+driver_t *driver_manager_find_driver( driver_manager_t *manager, driver_type_t type );
#endif // DRIVER_H
diff --git a/src/drivers/hdi/ps2/keyboard.c b/src/drivers/hdi/ps2/keyboard.c
index d4003b2..9c5a246 100644
--- a/src/drivers/hdi/ps2/keyboard.c
+++ b/src/drivers/hdi/ps2/keyboard.c
@@ -77,7 +77,7 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, inte
{
memset( keyboard, 0, sizeof( keyboard_t ) );
- driver_init( (driver_t *)keyboard, interrupt, context );
+ driver_init( (driver_t *)keyboard, DRIVER_TYPE_KEYBOARD, interrupt, context );
port8_init( &keyboard->command_port, 0x64 );
port8_init( &keyboard->data_port, 0x60 );
diff --git a/src/drivers/hdi/ps2/mouse.c b/src/drivers/hdi/ps2/mouse.c
index 66c0dea..1afd8d2 100644
--- a/src/drivers/hdi/ps2/mouse.c
+++ b/src/drivers/hdi/ps2/mouse.c
@@ -89,7 +89,7 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *int
{
memset( mouse, 0, sizeof( mouse_t ) );
- driver_init( (driver_t *)mouse, interrupt, context );
+ driver_init( (driver_t *)mouse, DRIVER_TYPE_MOUSE, interrupt, context );
// TODO: we should probe for wheel mouse and more than 3 packets
mouse->nof_packets = DEFAULT_NOF_PACKETS;
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index a5c0cd6..a325823 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -18,7 +18,7 @@ void rtl8139_init( rtl8139_t *rtl8139, interrupt_t *interrupt, void *context )
{
memset( rtl8139, 0, sizeof( rtl8139_t ) );
- driver_init( (driver_t *)rtl8139, interrupt, context );
+ driver_init( (driver_t *)rtl8139, DRIVER_TYPE_NETWORK, interrupt, context );
((driver_t *)rtl8139)->vtable = (driver_vtable_t *)&rtl8139_vtable;
}
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c
index 3db41ad..b6a07a8 100644
--- a/src/drivers/video/vga.c
+++ b/src/drivers/video/vga.c
@@ -22,7 +22,7 @@ void vga_init( vga_t *vga, interrupt_t *interrupt, void *context )
{
memset( vga, 0, sizeof( vga_t ) );
- driver_init( (driver_t *)vga, interrupt, context );
+ driver_init( (driver_t *)vga, DRIVER_TYPE_GRAPHICS, interrupt, context );
port8_init( &vga->misc_port, 0x3C2 );
port8_init( &vga->crtc_index_port, 0x3D4 );