T191: Implement prototype for new retype
[barrelfish] / kernel / include / syscall.h
1 /**
2  * \file
3  * \brief Arch-generic system calls implementation.
4  */
5
6 /*
7  * Copyright (c) 2007, 2008, 2009, 2010, 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, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
13  */
14
15 #ifndef KERNEL_SYSCALL_H
16 #define KERNEL_SYSCALL_H
17
18 #include <kernel.h>
19 #include <barrelfish_kpi/cpu.h>
20 #include <barrelfish_kpi/dispatcher_shared_target.h>
21 #include <barrelfish_kpi/types.h>
22 #include <capabilities.h>
23
24 errval_t sys_print(const char *str, size_t length);
25 struct sysret sys_yield(capaddr_t target);
26 struct sysret sys_suspend(bool halt);
27 struct sysret
28 sys_dispatcher_setup(struct capability *to, capaddr_t cptr, int depth,
29                      capaddr_t vptr, capaddr_t dptr, bool run, capaddr_t odptr);
30 struct sysret
31 sys_dispatcher_properties(struct capability *to,
32                           enum task_type type, unsigned long deadline,
33                           unsigned long wcet, unsigned long period,
34                           unsigned long release, unsigned short weight);
35 struct sysret
36 sys_retype(struct capability *root, capaddr_t source_cptr, enum objtype type,
37            uint8_t objbits, capaddr_t dest_cnode_cptr, cslot_t dest_slot,
38            uint8_t dest_vbits, bool from_monitor);
39 struct sysret
40 sys_retype2(struct capability *root, capaddr_t source_cptr, gensize_t offset,
41             enum objtype type, gensize_t objsize, size_t count,
42             capaddr_t dest_cnode_cptr, cslot_t dest_slot,
43             uint8_t dest_vbits, bool from_monitor);
44 struct sysret sys_create(struct capability *root, enum objtype type,
45                          uint8_t objbits, capaddr_t dest_cnode_cptr,
46                          cslot_t dest_slot, int dest_vbits);
47 struct sysret
48 sys_map(struct capability *ptable, cslot_t slot, capaddr_t source_cptr,
49         int source_vbits, uintptr_t flags, uintptr_t offset,
50         uintptr_t pte_count, capaddr_t mapping_cnptr, int mapping_cnvbits,
51         cslot_t mapping_slot);
52 struct sysret
53 sys_copy_or_mint(struct capability *root, capaddr_t destcn_cptr, cslot_t dest_slot,
54                  capaddr_t source_cptr, int destcn_vbits, int source_vbits,
55                  uintptr_t param1, uintptr_t param2, bool mint);
56 struct sysret sys_delete(struct capability *root, capaddr_t cptr, uint8_t bits);
57 struct sysret sys_revoke(struct capability *root, capaddr_t cptr, uint8_t bits);
58 struct sysret sys_get_state(struct capability *root, capaddr_t cptr, uint8_t bits);
59 struct sysret
60 sys_dispatcher_setup_guest (struct capability *to,
61                             capaddr_t epp, capaddr_t vnodep,
62                             capaddr_t vmcbp, capaddr_t ctrlp);
63 struct sysret sys_trace_setup(struct capability *cap, capaddr_t cptr);
64 struct sysret sys_idcap_identify(struct capability *cap, idcap_id_t *id);
65 struct sysret sys_monitor_spawn_core(coreid_t core_id, enum cpu_type cpu_type,
66                                      genvaddr_t entry);
67
68 struct sysret sys_kernel_add_kcb(struct kcb* new_kcb);
69 struct sysret sys_kernel_remove_kcb(struct kcb* kcb_addr);
70 struct sysret sys_kernel_suspend_kcb_sched(bool toggle);
71 struct sysret sys_handle_kcb_identify(struct capability* to, struct frame_identity *fi);
72 struct sysret sys_get_absolute_time(void);
73
74 /*
75  * Monitor syscalls
76  */
77
78 struct sysret sys_monitor_register(capaddr_t ep_caddr);
79 struct sysret sys_monitor_domain_id(capaddr_t cptr, domainid_t domain_id);
80 struct sysret sys_monitor_remote_relations(capaddr_t root_addr, uint8_t root_bits,
81                                            capaddr_t cptr, uint8_t bits,
82                                            uint8_t relations, uint8_t mask);
83 struct sysret sys_monitor_identify_cap(struct capability *root,
84                                        capaddr_t cptr, uint8_t bits,
85                                        struct capability *retbuf);
86 struct sysret sys_monitor_nullify_cap(capaddr_t cptr, uint8_t bits);
87 struct sysret sys_get_cap_owner(capaddr_t root_addr, uint8_t root_bits,
88                                 capaddr_t cptr, uint8_t bits);
89 struct sysret sys_set_cap_owner(capaddr_t root_addr, uint8_t root_bits,
90                                 capaddr_t cptr, uint8_t bits, coreid_t owner);
91 struct sysret sys_cap_has_relations(capaddr_t caddr, uint8_t vbits, uint8_t mask);
92 struct sysret sys_lock_cap(capaddr_t root_addr, uint8_t root_bits,
93                            capaddr_t cptr, uint8_t bits);
94 struct sysret sys_unlock_cap(capaddr_t root_addr, uint8_t root_bits,
95                              capaddr_t cptr, uint8_t bits);
96 struct sysret sys_monitor_copy_existing(struct capability *src,
97                                         capaddr_t cnode_cptr,
98                                         uint8_t cnode_vbits,
99                                         cslot_t slot);
100
101 /*
102  * Monitor syscalls for delete & revoke
103  */
104
105 struct sysret sys_monitor_delete_last(capaddr_t root_addr, uint8_t root_bits,
106                                       capaddr_t target_addr, uint8_t target_bits,
107                                       capaddr_t ret_cn_addr, uint8_t ret_cn_bits,
108                                       cslot_t ret_slot);
109 struct sysret sys_monitor_delete_foreigns(capaddr_t cptr, uint8_t bits);
110 struct sysret sys_monitor_revoke_mark_tgt(capaddr_t root_addr,
111                                           uint8_t root_bits,
112                                           capaddr_t target_addr,
113                                           uint8_t target_bits);
114 struct sysret sys_monitor_revoke_mark_rels(struct capability *base);
115 struct sysret sys_monitor_delete_step(capaddr_t ret_cn_addr,
116                                       uint8_t ret_cn_bits,
117                                       cslot_t ret_slot);
118 struct sysret sys_monitor_clear_step(capaddr_t ret_cn_addr,
119                                      uint8_t ret_cn_bits,
120                                      cslot_t ret_slot);
121
122 #endif