1/*
2 * Copyright (c) 2010, 2011, 2012, ETH Zurich.
3 * All rights reserved.
4 *
5 * This file is distributed under the terms in the attached LICENSE file.
6 * If you do not find this file, copies can be found by writing to:
7 * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#ifndef BARRELFISH_SPAWN_CLIENT_H
11#define BARRELFISH_SPAWN_CLIENT_H
12
13#include <sys/cdefs.h>
14#include <barrelfish_kpi/types.h>
15#include <spawndomain/spawndomain.h>
16__BEGIN_DECLS
17
18struct spawn_ps_entry {
19    uint8_t status;
20};
21
22
23
24/* Inherit CNode, layout convention #spawn_program_with_caps expects */
25#define INHERITCN_SLOT_FDSPAGE   1  ///< cap for inherited file descriptors
26#define INHERITCN_SLOT_SESSIONID 2  ///< Session ID domain belongs to
27#define INHERITCN_SLOT_KERNELCAP 3     ///< Kernel capability for core boot
28
29struct proc_mgmt_lmp_binding;
30
31
32/* XXX: duplicate of proc_mgmt_bind_continuation_fn in generated code */
33typedef void proc_mgmt_bind_continuation_fn(void *st, errval_t err,
34                                            struct proc_mgmt_binding *_binding);
35
36errval_t proc_mgmt_client_lmp_accept(struct proc_mgmt_lmp_binding *lmpb,
37                                     struct waitset *ws,
38                                     size_t lmp_buflen_words);
39errval_t proc_mgmt_client_lmp_bind(struct proc_mgmt_lmp_binding *lmpb,
40                                   struct capref ep,
41                                   proc_mgmt_bind_continuation_fn *cont,
42                                   void *st,
43                                   struct waitset *ws,
44                                   size_t lmp_buflen_words);
45errval_t proc_mgmt_bind_client(void);
46
47errval_t proc_mgmt_add_spawnd(iref_t iref, coreid_t core_id);
48errval_t spawn_program_with_caps(coreid_t coreid, const char *path,
49                                 char *const argv[], char *const envp[],
50                                 struct capref inheritcn_cap,
51                                 struct capref argcn_cap, spawn_flags_t flags,
52                                 struct capref *ret_domain_cap);
53errval_t spawn_arrakis_program(coreid_t coreid, const char *path,
54                                 char *const argv[], char *const envp[],
55                                 struct capref inheritcn_cap,
56                                 struct capref argcn_cap, spawn_flags_t flags,
57                                 domainid_t* domainid);
58errval_t spawn_program(coreid_t coreid, const char *path,
59                       char *const argv[], char *const envp[],
60                       spawn_flags_t flags, struct capref *ret_domain_cap);
61errval_t spawn_program_on_all_cores(bool same_core, const char *path,
62                                    char *const argv[], char *const envp[],
63                                    spawn_flags_t flags, struct capref *ret_domain_cap,
64                                    coreid_t* spawn_count);
65errval_t spawn_span(coreid_t core_id);
66errval_t spawn_kill(struct capref domain_cap);
67errval_t spawn_exit(uint8_t exitcode);
68errval_t spawn_wait_coreid(coreid_t coreid, struct capref domain_cap, uint8_t *exitcode, bool nohang);
69errval_t spawn_wait(struct capref domain_cap, uint8_t *exitcode, bool nohang);
70errval_t spawn_wait_core(coreid_t coreid, struct capref domainid,
71                         uint8_t *exitcode, bool nohang);
72errval_t spawn_binding(coreid_t coreid, struct spawn_binding **ret_client);
73errval_t spawn_bind_iref(iref_t iref, struct spawn_binding **ret_client);
74errval_t spawn_get_domain_list(bool sorted, domainid_t **domains, size_t *len);
75errval_t spawn_get_status(domainid_t domain_id, struct spawn_ps_entry *pse,
76                          char **argbuf, size_t *arglen, errval_t *reterr);
77
78errval_t alloc_inheritcn_with_caps(struct capref *inheritcn_capp,
79                                   struct capref fdcap,
80                                   struct capref sidcap,
81                                   struct capref kernelcap);
82
83// definitions for compatibility reasons (_poxsixcompat and unimplemented in proc_mgmt)
84errval_t spawn_wait_compat(uint8_t domaind, uint8_t *exitcode, bool nohang);
85errval_t spawn_dump_capabilities_compat(domainid_t domainid);
86__END_DECLS
87
88#endif // BARRELFISH_SPAWN_CLIENT_H
89