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, Universitaetstrasse 6, 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
24errval_t sys_print(const char *str, size_t length);
25struct sysret sys_yield(capaddr_t target);
26struct sysret sys_suspend(bool halt);
27struct sysret
28sys_dispatcher_setup(struct capability *to, capaddr_t cptr, uint8_t level,
29                     capaddr_t vptr, capaddr_t dptr, bool run, capaddr_t odptr);
30struct sysret
31sys_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);
35struct sysret
36sys_retype(struct capability *root, capaddr_t source_croot, capaddr_t source_cptr,
37           gensize_t offset, enum objtype type, gensize_t objsize, size_t count,
38           capaddr_t dest_cspace_ptr, capaddr_t dest_cnode_cptr,
39           uint8_t dest_level, cslot_t dest_slot,  bool from_monitor);
40struct sysret sys_create(struct capability *root, enum objtype type,
41                         size_t objsize, capaddr_t dest_cnode_cptr,
42                         uint8_t dest_level, cslot_t dest_slot);
43struct sysret
44sys_map(struct capability *ptable, cslot_t slot, capaddr_t source_root_cptr,
45        capaddr_t source_cptr, uint8_t source_level, uintptr_t flags,
46        uintptr_t offset, uintptr_t pte_count, capaddr_t mapping_crootptr,
47        capaddr_t mapping_cnptr, uint8_t mapping_cn_level, cslot_t mapping_slot);
48struct sysret
49sys_copy_remap(struct capability *ptable, cslot_t slot, capaddr_t source_cptr,
50               int source_level, uintptr_t flags, uintptr_t offset,
51               uintptr_t pte_count, capaddr_t mapping_cnptr,
52               uint8_t mapping_cn_level, cslot_t mapping_slot);
53struct sysret
54sys_copy_or_mint(struct capability *root, capaddr_t dest_cspace_cptr,
55                 capaddr_t destcn_cptr, cslot_t dest_slot, capaddr_t
56                 source_croot_ptr, capaddr_t source_cptr,
57                 uint8_t destcn_level, uint8_t source_level,
58                 uintptr_t param1, uintptr_t param2, bool mint);
59struct sysret sys_delete(struct capability *root, capaddr_t cptr, uint8_t level);
60struct sysret sys_revoke(struct capability *root, capaddr_t cptr, uint8_t level);
61struct sysret sys_get_state(struct capability *root, capaddr_t cptr, uint8_t level);
62struct sysret sys_get_size_l1cnode(struct capability *root);
63struct sysret sys_resize_l1cnode(struct capability *root, capaddr_t newroot_cptr,
64                                 capaddr_t retcn_cptr, cslot_t retslot);
65struct sysret sys_identify_cap(struct capability *root, capaddr_t cptr,
66                               uint8_t level, struct capability *out);
67struct sysret
68sys_dispatcher_setup_guest (struct capability *to,
69                            capaddr_t epp, capaddr_t vnodep,
70                            capaddr_t vmcbp, capaddr_t ctrlp);
71struct sysret sys_trace_setup(struct capability *cap, capaddr_t cptr);
72struct sysret sys_idcap_identify(struct capability *cap, idcap_id_t *id);
73struct sysret sys_monitor_spawn_core(hwid_t core_id, enum cpu_type cpu_type,
74                                     genvaddr_t entry, genpaddr_t context_id);
75
76struct sysret sys_kernel_add_kcb(struct kcb* new_kcb);
77struct sysret sys_kernel_remove_kcb(struct kcb* kcb_addr);
78struct sysret sys_kernel_suspend_kcb_sched(bool toggle);
79struct sysret sys_handle_kcb_identify(struct capability* to, struct frame_identity *fi);
80
81/*
82 * Monitor syscalls
83 */
84
85struct sysret sys_monitor_register(capaddr_t ep_caddr);
86struct sysret sys_monitor_domain_id(capaddr_t cptr, domainid_t domain_id);
87struct sysret sys_monitor_remote_relations(capaddr_t root_addr, uint8_t root_bits,
88                                           capaddr_t cptr, uint8_t bits,
89                                           uint8_t relations, uint8_t mask);
90struct sysret sys_monitor_identify_cap(struct capability *root,
91                                       capaddr_t cptr, uint8_t bits,
92                                       struct capability *retbuf);
93struct sysret sys_monitor_nullify_cap(capaddr_t cptr, uint8_t bits);
94struct sysret sys_get_cap_owner(capaddr_t root_addr, uint8_t root_bits,
95                                capaddr_t cptr, uint8_t bits);
96struct sysret sys_set_cap_owner(capaddr_t root_addr, uint8_t root_bits,
97                                capaddr_t cptr, uint8_t bits, coreid_t owner);
98struct sysret sys_cap_has_relations(capaddr_t caddr, uint8_t vbits, uint8_t mask);
99struct sysret sys_lock_cap(capaddr_t root_addr, uint8_t root_bits,
100                           capaddr_t cptr, uint8_t bits);
101struct sysret sys_unlock_cap(capaddr_t root_addr, uint8_t root_bits,
102                             capaddr_t cptr, uint8_t bits);
103struct sysret sys_monitor_copy_existing(struct capability *src,
104                                        capaddr_t croot_cptr,
105                                        capaddr_t cnode_cptr,
106                                        uint8_t cnode_level,
107                                        cslot_t slot);
108
109/*
110 * Monitor syscall for retype
111 */
112struct sysret sys_monitor_is_retypeable(struct capability *source, gensize_t offset,
113                                        gensize_t objsize, size_t count);
114
115/*
116 * Monitor syscalls for delete & revoke
117 */
118
119struct sysret sys_monitor_delete_last(capaddr_t root_addr, uint8_t root_bits,
120                                      capaddr_t target_addr, uint8_t target_bits,
121                                      capaddr_t ret_cn_addr, uint8_t ret_cn_bits,
122                                      cslot_t ret_slot);
123struct sysret sys_monitor_delete_foreigns(capaddr_t cptr, uint8_t bits);
124struct sysret sys_monitor_revoke_mark_tgt(capaddr_t root_addr,
125                                          uint8_t root_bits,
126                                          capaddr_t target_addr,
127                                          uint8_t target_bits);
128struct sysret sys_monitor_revoke_mark_rels(struct capability *base);
129struct sysret sys_monitor_delete_step(capaddr_t ret_cn_addr,
130                                      uint8_t ret_cn_bits,
131                                      cslot_t ret_slot);
132struct sysret sys_monitor_clear_step(capaddr_t ret_cn_addr,
133                                     uint8_t ret_cn_bits,
134                                     cslot_t ret_slot);
135struct sysret sys_monitor_reclaim_ram(capaddr_t retcn_addr,
136                                      uint8_t retcn_level,
137                                      cslot_t ret_slot);
138#endif
139