#ifndef _KERNEL_PROC_RESOURCE_H #define _KERNEL_PROC_RESOURCE_H #include #include #include #include #include #include #define PR_MEM 0 #define PR_MUTEX 1 struct proc; struct procgroup; struct proc_resource { int type; int rid; atomic_int refs; spin_lock_t lock; struct rb_node_link resource_tree_link; union { struct proc_resource_mem mem; struct proc_mutex mutex; } u; struct { void (*cleanup) (struct proc_resource* resource); } ops; }; struct proc_resource* proc_find_resource (struct procgroup* procgroup, int rid); struct proc_resource* proc_create_resource_mem (struct procgroup* procgroup, int rid, size_t pages, uintptr_t paddr, bool managed); struct proc_resource* proc_create_resource_mutex (struct procgroup* procgroup, int rid); void proc_resource_unlink (struct proc_resource* resource); #endif // _KERNEL_PROC_RESOURCE_H