Added demand paging support
[akaros.git] / kern / include / frontend.h
1 #ifndef ROS_FRONTEND_H
2 #define ROS_FRONTEND_H
3
4 #include <ros/common.h>
5
6 #ifdef ROS_KERNEL
7
8 #include <env.h>
9 #include <process.h>
10
11 // for now, this is where struct file lives
12 struct file {
13         int fd; // all it contains is an appserver fd (for pid 0, aka kernel)
14         int refcnt;
15         spinlock_t lock;
16 };
17
18 // Default APPSERVER_ETH_TYPE if not defined externally
19 #ifndef APPSERVER_ETH_TYPE
20 #define APPSERVER_ETH_TYPE 0x8888
21 #endif
22
23 void frontend_proc_init(struct proc* p);
24 void frontend_proc_free(struct proc* p);
25
26 int32_t frontend_syscall(pid_t pid, int32_t syscall_num, 
27                          uint32_t arg0, uint32_t arg1, uint32_t arg2, 
28                          uint32_t arg3, int32_t* errno);
29
30 int frontend_syscall_errno(struct proc* p, int n, int a0, 
31                            int a1, int a2, int a3);
32
33 void* user_memdup(struct proc* p, const void* va, int len);
34 void* user_memdup_errno(struct proc* p, const void* va, int len);
35 void user_memdup_free(struct proc* p, void* va);
36 char* user_strdup(struct proc* p, const char* va0, int max);
37 char* user_strdup_errno(struct proc* p, const char* va, int max);
38 int memcpy_to_user_errno(struct proc* p, void* dst, const void* src, int len);
39 void* kmalloc_errno(int len);
40
41 void file_init(void);
42 error_t file_read_page(struct file* f, physaddr_t pa, size_t pgoff);
43 struct file* file_open(const char* path, int oflag, int mode);
44 struct file* file_open_from_fd(struct proc* p, int fd);
45 void file_incref(struct file* f);
46 void file_decref(struct file* f);
47
48 #endif
49
50 #define APPSERVER_MAXPATH            1024
51
52 #define APPSERVER_SYSCALL_exit          1
53 #define APPSERVER_SYSCALL_read          3
54 #define APPSERVER_SYSCALL_write         4
55 #define APPSERVER_SYSCALL_open          5
56 #define APPSERVER_SYSCALL_close         6
57 #define APPSERVER_SYSCALL_link          9
58 #define APPSERVER_SYSCALL_unlink       10
59 #define APPSERVER_SYSCALL_chdir        12
60 #define APPSERVER_SYSCALL_chmod        15
61 #define APPSERVER_SYSCALL_brk          17
62 #define APPSERVER_SYSCALL_stat         18
63 #define APPSERVER_SYSCALL_lseek        19
64 #define APPSERVER_SYSCALL_fstat        28
65 #define APPSERVER_SYSCALL_utime        30
66 #define APPSERVER_SYSCALL_access       33
67 #define APPSERVER_SYSCALL_dup          41
68 #define APPSERVER_SYSCALL_umask        60
69 #define APPSERVER_SYSCALL_fcntl        62
70 #define APPSERVER_SYSCALL_kdup         87
71 #define APPSERVER_SYSCALL_lstat        88
72 #define APPSERVER_SYSCALL_tcgetattr    89
73 #define APPSERVER_SYSCALL_tcsetattr    90
74 #define APPSERVER_SYSCALL_closedir     91
75 #define APPSERVER_SYSCALL_rewinddir    92
76 #define APPSERVER_SYSCALL_readdir      93
77 #define APPSERVER_SYSCALL_opendir      94
78 #define APPSERVER_SYSCALL_dup2         95
79 #define APPSERVER_SYSCALL_proc_free    96
80 #define APPSERVER_SYSCALL_proc_init    97
81 #define APPSERVER_SYSCALL_time         98
82 #define APPSERVER_SYSCALL_pread       173
83 #define APPSERVER_SYSCALL_pwrite      174
84 #define APPSERVER_SYSCALL_getcwd      229
85
86 #endif /* !ROS_FRONTEND_H */