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