Add parlib/common.h
[akaros.git] / user / parlib / include / 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 #ifndef PARLIB_PARLIB_H
8 #define PARLIB_PARLIB_H
9
10 #ifndef __ASSEMBLER__
11
12 #include <parlib/common.h>
13 #include <ros/memlayout.h>
14 #include <ros/syscall.h>
15 #include <ros/procinfo.h>
16 #include <ros/procdata.h>
17 #include <signal.h>
18 #include <stdint.h>
19 #include <errno.h>
20 #include <parlib/ros_debug.h>
21 #include <ros/fdtap.h>
22
23 __BEGIN_DECLS
24
25 enum {
26         PG_RDONLY = 4,
27         PG_RDWR   = 6,
28 };
29
30 ssize_t     sys_cputs(const uint8_t *s, size_t len);
31 uint16_t    sys_cgetc(void);
32 int         sys_null(void);
33 size_t      sys_getpcoreid(void);
34 /* Process Management */
35 int         sys_getpid(void);
36 int         sys_proc_destroy(int pid, int exitcode);
37 void        sys_yield(bool being_nice);
38 int         sys_proc_create(char *path, size_t path_l, char *argv[],
39                             char *envp[], int flags);
40 int         sys_proc_run(int pid);
41 ssize_t     sys_shared_page_alloc(void **addr, pid_t p2, 
42                                   int p1_flags, int p2_flags);
43 ssize_t     sys_shared_page_free(void *addr, pid_t p2);
44 void        sys_reboot();
45 void            *sys_mmap(void *addr, size_t length, int prot, int flags,
46                       int fd, size_t offset);
47 int                     sys_provision(int pid, unsigned int res_type, long res_val);
48 int         sys_notify(int pid, unsigned int ev_type, struct event_msg *u_msg);
49 int         sys_self_notify(uint32_t vcoreid, unsigned int ev_type,
50                             struct event_msg *u_msg, bool priv);
51 int         sys_halt_core(unsigned int usec);
52 void*           sys_init_arsc();
53 int         sys_block(unsigned int usec);
54 int         sys_change_vcore(uint32_t vcoreid, bool enable_my_notif);
55 int         sys_change_to_m(void);
56 int         sys_poke_ksched(int pid, unsigned int res_type);
57 int         sys_abort_sysc(struct syscall *sysc);
58 int         sys_abort_sysc_fd(int fd);
59 int         sys_tap_fds(struct fd_tap_req *tap_reqs, size_t nr_reqs);
60
61 long            syscall_async(struct syscall *sysc, unsigned long num, ...);
62
63 /* Posix signal related stuff */
64 struct sigdata {
65         struct user_context u_ctx;
66         struct ancillary_state as;
67         struct siginfo info;
68         void *stack;
69 };
70 /* This is the set of global function pointers that a 2LS using signals needs
71  * to implement.  Subject to grow over time. */
72 struct signal_ops {
73         int (*sigprocmask)(int, __const sigset_t *__restrict, sigset_t *__restrict);
74 };
75 extern struct signal_ops *signal_ops;
76 void init_posix_signals(void);
77 struct sigdata *alloc_sigdata();
78 void free_sigdata(struct sigdata *sigdata);
79 void trigger_posix_signal(int sig_nr, struct siginfo *info, void *aux);
80
81 /* Control variables */
82 extern bool parlib_wants_to_be_mcp;     /* instructs the 2LS to be an MCP */
83
84 __END_DECLS
85
86 #endif  // !ASSEMBLER
87
88 #endif /* PARLIB_PARLIB_H */