summaryrefslogtreecommitdiff
path: root/src/drivers/driver.h
blob: 4d5689e5fab4a77e9988c3ca610b20ac0b433bdc (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#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