Create "ProcessManager" and "Domain" capabilities.
[barrelfish] / include / barrelfish / domain.h
1 /**
2  * \file
3  * \brief
4  */
5
6 /*
7  * Copyright (c) 2009, 2010, 2011, 2012, ETH Zurich.
8  * All rights reserved.
9  *
10  * This file is distributed under the terms in the attached LICENSE file.
11  * If you do not find this file, copies can be found by writing to:
12  * ETH Zurich D-INFK, CAB F.78, Universitaetstr. 6, CH-8092 Zurich,
13  * Attn: Systems Group.
14  */
15
16 #ifndef BARRELFISH_DOMAIN_H
17 #define BARRELFISH_DOMAIN_H
18
19 #include <sys/cdefs.h>
20 #include <barrelfish/threads.h>
21
22 __BEGIN_DECLS
23
24 typedef void (*domain_spanned_callback_t)(void *arg, errval_t err);
25
26 struct mem_binding;
27 struct octopus_binding;
28 struct monitor_binding;
29 struct monitor_blocking_binding;
30 struct waitset;
31 struct spawn_binding;
32 struct arrakis_binding;
33 struct proc_mgmt_binding;
34
35 struct waitset *get_default_waitset(void);
36 void disp_set_core_id(coreid_t core_id);
37 coreid_t disp_get_core_id(void);
38 coreid_t disp_get_current_core_id(void);
39 void disp_get_eh_frame(lvaddr_t *eh_frame, size_t *eh_frame_size);
40 void disp_get_eh_frame_hdr(lvaddr_t *eh_frame_hdr, size_t *eh_frame_hdr_size);
41 domainid_t disp_get_domain_id(void);
42 coreid_t disp_handle_get_core_id(dispatcher_handle_t handle);
43 void set_monitor_binding(struct monitor_binding *b);
44 struct monitor_binding *get_monitor_binding(void);
45 struct waitset_chanstate *get_monitor_binding_chanstate(void);
46 void set_monitor_blocking_binding(struct monitor_blocking_binding *st);
47 struct monitor_blocking_binding *get_monitor_blocking_binding(void);
48 void set_mem_client(struct mem_binding *st);
49 struct mem_binding *get_mem_client(void);
50 struct pinned_state *get_current_pinned_state(void);
51 struct vspace *get_current_vspace(void);
52 struct pmap *get_current_pmap(void);
53 struct morecore_state *get_morecore_state(void);
54 struct ram_alloc_state *get_ram_alloc_state(void);
55 void set_octopus_binding(struct octopus_binding *st);
56 struct octopus_binding *get_octopus_binding(void);
57 void set_spawn_binding(coreid_t core, struct spawn_binding *st);
58 void set_arrakis_binding(coreid_t core, struct arrakis_binding *st);
59 struct spawn_binding *get_spawn_binding(coreid_t core);
60 struct arrakis_binding *get_arrakis_binding(coreid_t core);
61 struct terminal_state *get_terminal_state(void);
62 void set_terminal_state(struct terminal_state *st);
63 struct domain_state *get_domain_state(void);
64 void set_domain_state(struct domain_state *st);
65 struct spawn_state *get_spawn_state(void);
66 void set_spawn_state(struct spawn_state *st);
67 struct slot_alloc_state *get_slot_alloc_state(void);
68 struct skb_state *get_skb_state(void);
69 struct proc_mgmt_binding *get_proc_mgmt_binding(void);
70 void set_proc_mgmt_binding(struct proc_mgmt_binding *st);
71
72 errval_t domain_init(void);
73 errval_t domain_new_dispatcher(coreid_t core_id,
74                                domain_spanned_callback_t callback,
75                                void *callback_arg);
76 errval_t domain_thread_create_on(coreid_t core_id, thread_func_t start_func,
77                                  void *arg, struct thread **newthread);
78 errval_t domain_thread_create_on_varstack(coreid_t core_id,
79                                           thread_func_t start_func,
80                                           void *arg, size_t stacksize,
81                                           struct thread **newthread);
82 errval_t domain_thread_join(struct thread *thread, int *retval);
83 errval_t domain_send_cap(coreid_t core_id, struct capref cap);
84 errval_t domain_wakeup_on(dispatcher_handle_t disp, struct thread *thread);
85 errval_t domain_wakeup_on_disabled(dispatcher_handle_t disp,
86                                    struct thread *thread,
87                                    dispatcher_handle_t mydisp);
88 errval_t domain_thread_move_to(struct thread *thread, coreid_t core_id);
89
90 __END_DECLS
91
92 #endif