#ifndef DRIVER_H #define DRIVER_H #include "interrupts.h" typedef struct { void (*activate)( void *obj ); void (*deactivate)( void *obj ); void (*deinit)( void *obj ); 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, driver_type_t type, interrupt_t *interrupt, void *context ); void driver_activate( void *obj ); void driver_deactivate( void *obj ); void driver_deinit( void *obj ); void driver_print_info( void *obj ); #define MAX_NOF_DRIVERS 256 typedef struct { int nof_drivers; driver_t *driver[MAX_NOF_DRIVERS]; } driver_manager_t; void driver_manager_init( driver_manager_t *manager ); void driver_manager_add_driver( driver_manager_t *manager, driver_t *driver ); 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