#ifndef DRIVER_H #define DRIVER_H #include "interrupts.h" typedef struct { void (*register_interrupt_handler)( void *obj, interrupt_handler_func_t handler, void *context ); void (*activate)( void *obj ); void (*deactivate)( void *obj ); void (*deinit)( void *obj ); void (*print_info)( void *obj ); } driver_vtable_t; typedef struct { driver_vtable_t const *vtable; interrupt_handler_func_t handler; void *context; } driver_t; void driver_init( driver_t *driver ); void driver_register_interrupt_handler( void *obj, interrupt_handler_func_t handler, 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 ); #endif // DRIVER_H