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