8f32973e225d044aecbc75a915b308668a2ad193
[akaros.git] / user / parlib / include / parlib / parlib.h
1 // Main public header file for our user-land support library,
2 // whose code lives in the lib directory.
3 // This library is roughly our OS's version of a standard C library,
4 // and is intended to be linked into all user-mode applications
5 // (NOT the kernel or boot loader).
6
7 #pragma once
8
9 #ifndef __ASSEMBLER__
10
11 #include <parlib/common.h>
12 #include <ros/memlayout.h>
13 #include <ros/syscall.h>
14 #include <ros/procinfo.h>
15 #include <ros/procdata.h>
16 #include <signal.h>
17 #include <stdint.h>
18 #include <errno.h>
19 #include <parlib/ros_debug.h>
20 #include <ros/fdtap.h>
21
22 __BEGIN_DECLS
23
24 enum {
25         PG_RDONLY = 4,
26         PG_RDWR   = 6,
27 };
28
29 int         sys_null(void);
30 size_t      sys_getpcoreid(void);
31 int         sys_proc_destroy(int pid, int exitcode);
32 void        sys_yield(bool being_nice);
33 int         sys_proc_create(const char *path, size_t path_l, char *const argv[],
34                             char *const envp[], int flags);
35 int         sys_proc_run(int pid);
36 ssize_t     sys_shared_page_alloc(void **addr, pid_t p2, 
37                                   int p1_flags, int p2_flags);
38 ssize_t     sys_shared_page_free(void *addr, pid_t p2);
39 void        sys_reboot();
40 void            *sys_mmap(void *addr, size_t length, int prot, int flags,
41                       int fd, size_t offset);
42 int                     sys_provision(int pid, unsigned int res_type, long res_val);
43 int         sys_notify(int pid, unsigned int ev_type, struct event_msg *u_msg);
44 int         sys_self_notify(uint32_t vcoreid, unsigned int ev_type,
45                             struct event_msg *u_msg, bool priv);
46 int         sys_halt_core(unsigned long usec);
47 void*           sys_init_arsc();
48 int         sys_block(unsigned long usec);
49 int         sys_change_vcore(uint32_t vcoreid, bool enable_my_notif);
50 int         sys_change_to_m(void);
51 int         sys_poke_ksched(int pid, unsigned int res_type);
52 int         sys_abort_sysc(struct syscall *sysc);
53 int         sys_abort_sysc_fd(int fd);
54 int         sys_tap_fds(struct fd_tap_req *tap_reqs, size_t nr_reqs);
55
56 void            syscall_async(struct syscall *sysc, unsigned long num, ...);
57 void        syscall_async_evq(struct syscall *sysc, struct event_queue *evq,
58                               unsigned long num, ...);
59
60 /* Control variables */
61 extern bool parlib_wants_to_be_mcp;     /* instructs the 2LS to be an MCP */
62 extern bool parlib_never_yield;         /* instructs the 2LS to not yield vcores */
63 extern bool parlib_never_vc_request;/* 2LS: do not request vcores */
64
65 /* Process Management */
66 pid_t create_child(const char *exe, int argc, char *const argv[],
67                    char *const envp[]);
68 pid_t create_child_with_stdfds(const char *exe, int argc, char *const argv[],
69                                char *const envp[]);
70
71 __END_DECLS
72
73 #endif  // !ASSEMBLER