#ifndef _KERNEL_DEVICE_DEVICE_H #define _KERNEL_DEVICE_DEVICE_H #include #include #include #include #include #include #include struct device; typedef int (*device_op_func_t) (struct device* device, struct proc*, struct reschedule_ctx* rctx, void* a1, void* a2, void* a3, void* a4); typedef bool (*device_init_func_t) (struct device* device, void* arg); typedef void (*device_fini_func_t) (struct device* device); struct device { int id; device_op_func_t ops[32]; spin_lock_t lock; struct rb_node_link device_tree_link; device_init_func_t init; device_fini_func_t fini; void* udata; }; struct device* device_create (int id, device_op_func_t* ops, size_t ops_len, device_init_func_t init, device_fini_func_t fini, void* arg); struct device* device_find (int id); void device_delete (struct device* device); void devices_init (void); #endif // _KERNEL_DEVICE_DEVICE_H