1/*
2 * Copyright (c) 2009, 2011, 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, Universitaetstrasse 6, CH-8092 Zurich. Attn: Systems Group.
8 */
9
10#ifndef PS_H
11#define PS_H
12
13#include <stdbool.h>
14#include <barrelfish/barrelfish.h>
15#include <barrelfish_kpi/types.h>
16#include <barrelfish_kpi/init.h>
17
18#define MAX_DOMAINS     256
19
20enum ps_status {
21    PS_STATUS_RUNNING,
22    PS_STATUS_ZOMBIE
23};
24
25struct ps_waiter {
26    struct ps_waiter *next;
27    struct spawn_binding *binding;
28};
29
30struct ps_entry {
31    char *argv[MAX_CMDLINE_ARGS];
32    char *argbuf;
33    size_t argbytes;
34
35    domainid_t domain_id;
36
37    struct capref domain_cap;
38    uint64_t domain_cap_hash;
39
40    struct capref rootcn_cap;
41    struct capref dispframe;
42    struct capref dcb;
43    struct cnoderef rootcn;
44    uint8_t exitcode;
45    enum ps_status status;
46    struct ps_waiter *waiters;
47};
48
49errval_t ps_allocate(struct ps_entry *entry, domainid_t *domainid);
50void ps_remove(domainid_t domain_id);
51bool ps_exists(domainid_t domain_id);
52struct ps_entry *ps_get(domainid_t domain_id);
53
54errval_t ps_hash_domain(struct ps_entry *entry, struct capref domain_cap);
55errval_t ps_get_domain(struct capref domain_cap, struct ps_entry **ret_entry,
56                       uint64_t *ret_hash_key);
57errval_t ps_release_domain(struct capref domain_cap,
58                           struct ps_entry **ret_entry);
59
60#endif
61