summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/drivers/driver.c7
-rw-r--r--src/drivers/driver.h2
-rw-r--r--src/drivers/hdi/keyboard.c28
-rw-r--r--src/drivers/hdi/keyboard.h1
-rw-r--r--src/drivers/hdi/mouse.c29
-rw-r--r--src/drivers/hdi/mouse.h4
-rw-r--r--src/drivers/hdi/ps2/ps2keyboard.c8
-rw-r--r--src/drivers/hdi/ps2/ps2keyboard.h1
-rw-r--r--src/drivers/hdi/ps2/ps2mouse.c10
-rw-r--r--src/drivers/hdi/ps2/ps2mouse.h1
-rw-r--r--src/drivers/net/network.c28
-rw-r--r--src/drivers/net/network.h4
-rw-r--r--src/drivers/net/rtl8139.c32
-rw-r--r--src/drivers/net/rtl8139.h3
-rw-r--r--src/drivers/video/vga.c8
-rw-r--r--src/drivers/video/vga.h1
-rw-r--r--src/drivers/video/video.c29
-rw-r--r--src/drivers/video/video.h4
18 files changed, 76 insertions, 124 deletions
diff --git a/src/drivers/driver.c b/src/drivers/driver.c
index b38c11e..c7ec1db 100644
--- a/src/drivers/driver.c
+++ b/src/drivers/driver.c
@@ -8,6 +8,7 @@ static driver_vtable_t const driver_vtable = {
driver_activate,
driver_deactivate,
driver_deinit,
+ driver_print_name,
driver_print_info
};
@@ -37,6 +38,11 @@ void driver_deinit( void *obj )
// nothing to be done
}
+void driver_print_name( void *obj )
+{
+ kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
+}
+
void driver_print_info( void *obj )
{
kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
@@ -96,6 +102,7 @@ void driver_manager_print_info_all( driver_manager_t *manager )
{
for( int i = 0; i < manager->nof_drivers; i++ ) {
driver_t *driver = (driver_t *)manager->driver[i];
+ driver->vtable->print_name( driver );
driver->vtable->print_info( driver );
}
}
diff --git a/src/drivers/driver.h b/src/drivers/driver.h
index f39103d..7404ebb 100644
--- a/src/drivers/driver.h
+++ b/src/drivers/driver.h
@@ -7,6 +7,7 @@ typedef struct {
void (*activate)( void *obj );
void (*deactivate)( void *obj );
void (*deinit)( void *obj );
+ void (*print_name)( void *obj );
void (*print_info)( void *obj );
} driver_vtable_t;
@@ -28,6 +29,7 @@ void driver_init( driver_t *driver, driver_type_t type, interrupt_t *interrupt,
void driver_activate( void *obj );
void driver_deactivate( void *obj );
void driver_deinit( void *obj );
+void driver_print_name( void *obj );
void driver_print_info( void *obj );
#define MAX_NOF_DRIVERS 256
diff --git a/src/drivers/hdi/keyboard.c b/src/drivers/hdi/keyboard.c
index 9b9c337..c96b554 100644
--- a/src/drivers/hdi/keyboard.c
+++ b/src/drivers/hdi/keyboard.c
@@ -5,10 +5,10 @@
static keyboard_vtable_t const keyboard_vtable = {
{
- keyboard_activate,
- keyboard_deactivate,
- keyboard_deinit,
- keyboard_print_info
+ driver_activate,
+ driver_deactivate,
+ driver_deinit,
+ driver_print_info
}
};
@@ -22,23 +22,3 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, inte
((driver_t *)keyboard)->vtable = (driver_vtable_t *)&keyboard_vtable;
}
-
-void keyboard_deinit( void *obj )
-{
- // nothing to be done
-}
-
-void keyboard_activate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void keyboard_deactivate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void keyboard_print_info( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
diff --git a/src/drivers/hdi/keyboard.h b/src/drivers/hdi/keyboard.h
index aab7383..4577a61 100644
--- a/src/drivers/hdi/keyboard.h
+++ b/src/drivers/hdi/keyboard.h
@@ -50,6 +50,7 @@ void keyboard_init( keyboard_t *keyboard, keyboard_event_handler_t handler, inte
void keyboard_activate( void *obj );
void keyboard_deactivate( void *obj );
void keyboard_deinit( void *obj );
+void keyboard_print_name( void *obj );
void keyboard_print_info( void *obj );
#endif // KEYBOARD_H
diff --git a/src/drivers/hdi/mouse.c b/src/drivers/hdi/mouse.c
index a0b62f9..c48dba6 100644
--- a/src/drivers/hdi/mouse.c
+++ b/src/drivers/hdi/mouse.c
@@ -5,10 +5,11 @@
static mouse_vtable_t const mouse_vtable = {
{
- mouse_activate,
- mouse_deactivate,
- mouse_deinit,
- mouse_print_info
+ driver_activate,
+ driver_deactivate,
+ driver_deinit,
+ driver_print_name,
+ driver_print_info
},
mouse_set_resolution,
mouse_set_position
@@ -25,26 +26,6 @@ void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *int
((driver_t *)mouse)->vtable = (driver_vtable_t *)&mouse_vtable;
}
-void mouse_deinit( void *obj )
-{
- // nothing to be done
-}
-
-void mouse_activate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void mouse_deactivate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void mouse_print_info( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
void mouse_set_resolution( void *obj, const uint32_t res_x, const uint32_t res_y )
{
mouse_t *mouse = (mouse_t *)obj;
diff --git a/src/drivers/hdi/mouse.h b/src/drivers/hdi/mouse.h
index 5b3d08f..e89fa5e 100644
--- a/src/drivers/hdi/mouse.h
+++ b/src/drivers/hdi/mouse.h
@@ -42,10 +42,6 @@ typedef struct {
} mouse_vtable_t;
void mouse_init( mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *interrupt, void *context );
-void mouse_activate( void *obj );
-void mouse_deactivate( void *obj );
-void mouse_deinit( void *obj );
-void mouse_print_info( void *obj );
void mouse_set_resolution( void *obj, const uint32_t x, const uint32_t y );
void mouse_set_position( void *obj, const uint32_t x, const uint32_t y );
diff --git a/src/drivers/hdi/ps2/ps2keyboard.c b/src/drivers/hdi/ps2/ps2keyboard.c
index 4151c56..6fa6caa 100644
--- a/src/drivers/hdi/ps2/ps2keyboard.c
+++ b/src/drivers/hdi/ps2/ps2keyboard.c
@@ -69,6 +69,7 @@ static keyboard_vtable_t const ps2keyboard_vtable = {
ps2keyboard_activate,
ps2keyboard_deactivate,
ps2keyboard_deinit,
+ ps2keyboard_print_name,
ps2keyboard_print_info
}
};
@@ -325,7 +326,12 @@ uint32_t ps2keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t es
return esp;
}
-void ps2keyboard_print_info( void *obj )
+void ps2keyboard_print_name( void *obj )
{
puts( "PS/2 keyboard driver" );
}
+
+void ps2keyboard_print_info( void *obj )
+{
+ // TODO print type of keyboard, IRQ, etc.
+}
diff --git a/src/drivers/hdi/ps2/ps2keyboard.h b/src/drivers/hdi/ps2/ps2keyboard.h
index a5b66ca..a0650e3 100644
--- a/src/drivers/hdi/ps2/ps2keyboard.h
+++ b/src/drivers/hdi/ps2/ps2keyboard.h
@@ -26,6 +26,7 @@ void ps2keyboard_init( ps2keyboard_t *ps2keyboard, keyboard_event_handler_t hand
void ps2keyboard_activate( void *obj );
void ps2keyboard_deactivate( void *obj );
void ps2keyboard_deinit( void *obj );
+void ps2keyboard_print_name( void *obj );
void ps2keyboard_print_info( void *obj );
uint32_t ps2keyboard_handle_interrupt( interrupt_handler_t *handler, uint32_t esp );
diff --git a/src/drivers/hdi/ps2/ps2mouse.c b/src/drivers/hdi/ps2/ps2mouse.c
index 9f0fcae..766e737 100644
--- a/src/drivers/hdi/ps2/ps2mouse.c
+++ b/src/drivers/hdi/ps2/ps2mouse.c
@@ -81,7 +81,8 @@ static ps2mouse_vtable_t const ps2mouse_vtable = {
{
ps2mouse_activate,
ps2mouse_deactivate,
- mouse_deinit,
+ driver_deinit,
+ ps2mouse_print_name,
ps2mouse_print_info
},
mouse_set_resolution,
@@ -239,8 +240,13 @@ uint32_t ps2mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
return esp;
}
-void ps2mouse_print_info( void *obj )
+void ps2mouse_print_name( void *obj )
{
puts( "PS/2 mouse driver" );
}
+void ps2mouse_print_info( void *obj )
+{
+ // TODO: print IRQ, mouse type, wheel, buttons, etc.
+}
+
diff --git a/src/drivers/hdi/ps2/ps2mouse.h b/src/drivers/hdi/ps2/ps2mouse.h
index 4c59089..581b8d2 100644
--- a/src/drivers/hdi/ps2/ps2mouse.h
+++ b/src/drivers/hdi/ps2/ps2mouse.h
@@ -28,6 +28,7 @@ typedef struct {
void ps2mouse_init( ps2mouse_t *mouse, mouse_event_handler_t handler, interrupt_t *interrupt, void *context );
void ps2mouse_activate( void *obj );
void ps2mouse_deactivate( void *obj );
+void ps2mouse_print_name( void *obj );
void ps2mouse_print_info( void *obj );
uint32_t ps2mouse_handle_interrupt( interrupt_handler_t *handler, uint32_t esp );
diff --git a/src/drivers/net/network.c b/src/drivers/net/network.c
index fe7ecc1..46a3295 100644
--- a/src/drivers/net/network.c
+++ b/src/drivers/net/network.c
@@ -7,10 +7,10 @@
static network_vtable_t const network_vtable = {
{
- network_activate,
- network_deactivate,
- network_deinit,
- network_print_info
+ driver_activate,
+ driver_deactivate,
+ driver_deinit,
+ driver_print_info
}
};
@@ -23,26 +23,6 @@ void network_init( network_t *network, interrupt_t *interrupt, void *context )
((driver_t *)network)->vtable = (driver_vtable_t *)&network_vtable;
}
-void network_activate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void network_deactivate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void network_deinit( void *obj )
-{
- // nothing to be done
-}
-
-void network_print_info( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen )
{
snprintf( buf, buflen, "%X:%X:%X:%X:%X:%X",
diff --git a/src/drivers/net/network.h b/src/drivers/net/network.h
index 0621ebf..8ec17cb 100644
--- a/src/drivers/net/network.h
+++ b/src/drivers/net/network.h
@@ -20,10 +20,6 @@ typedef struct {
} network_vtable_t;
void network_init( network_t *network, interrupt_t *interrupt, void *context );
-void network_activate( void *obj );
-void network_deactivate( void *obj );
-void network_deinit( void *obj );
-void network_print_info( void *obj );
char *network_mac_to_string( network_mac_address_t mac, char *buf, size_t buflen );
diff --git a/src/drivers/net/rtl8139.c b/src/drivers/net/rtl8139.c
index 297f89d..0f561b2 100644
--- a/src/drivers/net/rtl8139.c
+++ b/src/drivers/net/rtl8139.c
@@ -19,6 +19,7 @@ static rtl8139_vtable_t const rtl8139_vtable = {
rtl8139_activate,
rtl8139_deactivate,
rtl8139_deinit,
+ rtl8139_print_name,
rtl8139_print_info
}
};
@@ -70,6 +71,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte
network_init( (network_t *)rtl8139, interrupt, context );
+ rtl8139->pci_descriptor = *descriptor;
+
puts( "Initializing driver for Realtek 8139 network card.." );
for( int i = 0; i < NOF_MAC_REGISTERS; i++ ) {
@@ -93,8 +96,8 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte
port8_write( &rtl8139->CMD_port, CMD_RECEIVER_ENABLE | CMD_TRANSMITTER_ENABLE );
// get model
- uint32_t model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM );
- switch( model_id ) {
+ rtl8139->model_id = port32_read( &rtl8139->TCR_port ) & ( TCR_MODEL_VERSION_AM | TCR_MODEL_VERSION_BM );
+ switch( rtl8139->model_id ) {
case TCR_MODEL_VERSION_RTL8139:
rtl8139->model = "RTL8139";
@@ -152,15 +155,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte
*/
-#ifdef DEBUG
- char buf[20];
- char buf2[30];
- snprintf( buf2, 30, "unknown submodel 0x%X", model_id );
- network_mac_to_string( rtl8139->base.mac_address, buf, 20 );
- printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n",
- ( rtl8139->model != NULL ) ? rtl8139->model : buf2,
- descriptor->port_base, descriptor->interrupt, buf );
-#endif
+ rtl8139_print_info( rtl8139 );
interrupt_handler_init( &rtl8139->interrupt_handler, IRQ_BASE + descriptor->interrupt, interrupt, rtl8139_handle_interrupt, rtl8139 );
interrupts_register_interrupt_handler( rtl8139->interrupt_handler );
@@ -198,7 +193,20 @@ uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp )
return esp;
}
-void rtl8139_print_info( void *obj )
+void rtl8139_print_name( void *obj )
{
puts( "Realtek 8139 network card driver" );
}
+
+void rtl8139_print_info( void *obj )
+{
+ rtl8139_t *rtl8139 = (rtl8139_t *)obj;
+
+ char buf[20];
+ char buf2[30];
+ snprintf( buf2, 30, "unknown submodel 0x%X", rtl8139->model_id );
+ network_mac_to_string( rtl8139->base.mac_address, buf, 20 );
+ printf( "rtl8139 NIC type %s\n at I/O base 0x%X, interrupt 0x%X, MAC: %s\n",
+ ( rtl8139->model != NULL ) ? rtl8139->model : buf2,
+ rtl8139->pci_descriptor.port_base, rtl8139->pci_descriptor.interrupt, buf );
+}
diff --git a/src/drivers/net/rtl8139.h b/src/drivers/net/rtl8139.h
index 034b85b..5743205 100644
--- a/src/drivers/net/rtl8139.h
+++ b/src/drivers/net/rtl8139.h
@@ -13,6 +13,8 @@ typedef struct {
port8_t CMD_port;
port32_t TCR_port;
port32_t RCR_port;
+ pci_device_descriptor_t pci_descriptor;
+ uint32_t model_id;
const char *model;
interrupt_handler_t interrupt_handler;
} rtl8139_t;
@@ -25,6 +27,7 @@ void rtl8139_init( rtl8139_t *rtl8139, pci_device_descriptor_t *descriptor, inte
void rtl8139_activate( void *obj );
void rtl8139_deactivate( void *obj );
void rtl8139_deinit( void *obj );
+void rtl8139_print_name( void *obj );
void rtl8139_print_info( void *obj );
uint32_t rtl8139_handle_interrupt( interrupt_handler_t *handler, uint32_t esp );
diff --git a/src/drivers/video/vga.c b/src/drivers/video/vga.c
index 670df02..3ce0e86 100644
--- a/src/drivers/video/vga.c
+++ b/src/drivers/video/vga.c
@@ -15,6 +15,7 @@ static vga_vtable_t const vga_vtable = {
vga_activate,
vga_deactivate,
vga_deinit,
+ vga_print_name,
vga_print_info
},
video_register_mode,
@@ -146,11 +147,16 @@ void vga_deinit( void *obj )
}
}
-void vga_print_info( void *obj )
+void vga_print_name( void *obj )
{
puts( "Generic VGA video driver" );
}
+void vga_print_info( void *obj )
+{
+ // TODO: print avaiable modes, colors, resolutions
+}
+
static void write_registers( vga_t *vga, uint8_t *regs )
{
// misc
diff --git a/src/drivers/video/vga.h b/src/drivers/video/vga.h
index faafd8e..26b66cd 100644
--- a/src/drivers/video/vga.h
+++ b/src/drivers/video/vga.h
@@ -48,6 +48,7 @@ void vga_init( vga_t *vga, interrupt_t *interrupt, void *context );
void vga_activate( void *obj );
void vga_deactivate( void *obj );
void vga_deinit( void *obj );
+void vga_print_name( void *obj );
void vga_print_info( void *obj );
bool vga_switch_mode( void *obj, const video_mode_t *mode );
diff --git a/src/drivers/video/video.c b/src/drivers/video/video.c
index 064a1f6..6169714 100644
--- a/src/drivers/video/video.c
+++ b/src/drivers/video/video.c
@@ -7,10 +7,11 @@
static video_vtable_t const video_vtable = {
{
- video_activate,
- video_deactivate,
- video_deinit,
- video_print_info
+ driver_activate,
+ driver_deactivate,
+ driver_deinit,
+ driver_print_name,
+ driver_print_info
}
};
@@ -25,26 +26,6 @@ void video_init( video_t *video, interrupt_t *interrupt, void *context )
((driver_t *)video)->vtable = (driver_vtable_t *)&video_vtable;
}
-void video_activate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void video_deactivate( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
-void video_deinit( void *obj )
-{
- // nothing to be done
-}
-
-void video_print_info( void *obj )
-{
- kernel_panic( "Calling abstract method in file %s at line %d.", __FILE__, __LINE__ );
-}
-
video_mode_t video_make_mode( const video_mode_type_t mode_type, const int x, const int y, const int color_depth )
{
video_mode_t mode;
diff --git a/src/drivers/video/video.h b/src/drivers/video/video.h
index 8cfebb3..037d703 100644
--- a/src/drivers/video/video.h
+++ b/src/drivers/video/video.h
@@ -48,10 +48,6 @@ typedef struct {
} video_vtable_t;
void video_init( video_t *video, interrupt_t *interrupt, void *context );
-void video_activate( void *obj );
-void video_deactivate( void *obj );
-void video_deinit( void *obj );
-void video_print_info( void *obj );
video_mode_t video_make_mode( const video_mode_type_t mode_type, const int x, const int y, const int color_depth );