2 * Copyright (c) 2017 Jakub Jermar
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 /** @addtogroup generic
41 #include <adt/hash_table.h>
43 #include <synch/mutex.h>
46 typedef int cap_handle_t
;
65 typedef struct kobject_ops
{
66 bool (*reclaim
)(struct kobject
*);
67 void (*destroy
)(void *);
71 * Everything in kobject_t except for the atomic reference count is imutable.
73 typedef struct kobject
{
87 * A cap_t may only be accessed under the protection of the cap_info_t lock.
95 /* Link to the task's capabilities of the same kobject type. */
100 /* The underlying kernel object. */
104 typedef struct cap_info
{
107 list_t type_list
[KOBJECT_TYPE_MAX
];
113 extern void caps_task_alloc(struct task
*);
114 extern void caps_task_free(struct task
*);
115 extern void caps_task_init(struct task
*);
116 extern bool caps_apply_to_kobject_type(struct task
*, kobject_type_t
,
117 bool (*)(cap_t
*, void *), void *);
119 extern cap_handle_t
cap_alloc(struct task
*);
120 extern void cap_publish(struct task
*, cap_handle_t
, kobject_t
*);
121 extern kobject_t
*cap_unpublish(struct task
*, cap_handle_t
, kobject_type_t
);
122 extern void cap_free(struct task
*, cap_handle_t
);
124 extern void kobject_initialize(kobject_t
*, kobject_type_t
, void *,
126 extern kobject_t
*kobject_get(struct task
*, cap_handle_t
, kobject_type_t
);
127 extern void kobject_add_ref(kobject_t
*);
128 extern void kobject_put(kobject_t
*);