Blame view
arch/um/include/shared/os.h
9.81 KB
329c6e425 [PATCH] uml: head... |
1 |
/* |
ba180fd43 uml: style fixes ... |
2 |
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) |
1da177e4c Linux-2.6.12-rc2 |
3 4 5 6 7 |
* Licensed under the GPL */ #ifndef __OS_H__ #define __OS_H__ |
ba180fd43 uml: style fixes ... |
8 |
#include <stdarg.h> |
63ae2a94d [PATCH] uml: move... |
9 |
#include "irq_user.h" |
ba180fd43 uml: style fixes ... |
10 11 |
#include "longjmp.h" #include "mm_id.h" |
1da177e4c Linux-2.6.12-rc2 |
12 |
|
24fa6c083 uml: move remaini... |
13 |
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR)) |
329c6e425 [PATCH] uml: head... |
14 15 16 |
#define OS_TYPE_FILE 1 #define OS_TYPE_DIR 2 #define OS_TYPE_SYMLINK 3 |
1da177e4c Linux-2.6.12-rc2 |
17 18 19 20 21 22 23 24 25 26 27 |
#define OS_TYPE_CHARDEV 4 #define OS_TYPE_BLOCKDEV 5 #define OS_TYPE_FIFO 6 #define OS_TYPE_SOCK 7 /* os_access() flags */ #define OS_ACC_F_OK 0 /* Test for existence. */ #define OS_ACC_X_OK 1 /* Test for execute permission. */ #define OS_ACC_W_OK 2 /* Test for write permission. */ #define OS_ACC_R_OK 4 /* Test for read permission. */ #define OS_ACC_RW_OK (OS_ACC_W_OK | OS_ACC_R_OK) /* Test for RW permission */ |
0ce451acb um: fix UML_LIB_PATH |
28 29 30 31 32 |
#ifdef CONFIG_64BIT #define OS_LIB_PATH "/usr/lib64/" #else #define OS_LIB_PATH "/usr/lib/" #endif |
1da177e4c Linux-2.6.12-rc2 |
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
/* * types taken from stat_file() in hostfs_user.c * (if they are wrong here, they are wrong there...). */ struct uml_stat { int ust_dev; /* device */ unsigned long long ust_ino; /* inode */ int ust_mode; /* protection */ int ust_nlink; /* number of hard links */ int ust_uid; /* user ID of owner */ int ust_gid; /* group ID of owner */ unsigned long long ust_size; /* total size, in bytes */ int ust_blksize; /* blocksize for filesystem I/O */ unsigned long long ust_blocks; /* number of blocks allocated */ unsigned long ust_atime; /* time of last access */ unsigned long ust_mtime; /* time of last modification */ unsigned long ust_ctime; /* time of last change */ }; struct openflags { unsigned int r : 1; unsigned int w : 1; unsigned int s : 1; /* O_SYNC */ unsigned int c : 1; /* O_CREAT */ unsigned int t : 1; /* O_TRUNC */ unsigned int a : 1; /* O_APPEND */ unsigned int e : 1; /* O_EXCL */ unsigned int cl : 1; /* FD_CLOEXEC */ }; #define OPENFLAGS() ((struct openflags) { .r = 0, .w = 0, .s = 0, .c = 0, \ |
329c6e425 [PATCH] uml: head... |
64 |
.t = 0, .a = 0, .e = 0, .cl = 0 }) |
1da177e4c Linux-2.6.12-rc2 |
65 66 67 |
static inline struct openflags of_read(struct openflags flags) { |
329c6e425 [PATCH] uml: head... |
68 69 |
flags.r = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
70 71 72 73 |
} static inline struct openflags of_write(struct openflags flags) { |
329c6e425 [PATCH] uml: head... |
74 75 |
flags.w = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
76 77 78 79 |
} static inline struct openflags of_rdwr(struct openflags flags) { |
329c6e425 [PATCH] uml: head... |
80 |
return of_read(of_write(flags)); |
1da177e4c Linux-2.6.12-rc2 |
81 82 83 84 85 86 |
} static inline struct openflags of_set_rw(struct openflags flags, int r, int w) { flags.r = r; flags.w = w; |
329c6e425 [PATCH] uml: head... |
87 |
return flags; |
1da177e4c Linux-2.6.12-rc2 |
88 89 90 |
} static inline struct openflags of_sync(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
91 92 93 |
{ flags.s = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
94 95 96 |
} static inline struct openflags of_create(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
97 98 99 |
{ flags.c = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
100 |
} |
329c6e425 [PATCH] uml: head... |
101 |
|
1da177e4c Linux-2.6.12-rc2 |
102 |
static inline struct openflags of_trunc(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
103 104 105 |
{ flags.t = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
106 |
} |
329c6e425 [PATCH] uml: head... |
107 |
|
1da177e4c Linux-2.6.12-rc2 |
108 |
static inline struct openflags of_append(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
109 110 111 |
{ flags.a = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
112 |
} |
329c6e425 [PATCH] uml: head... |
113 |
|
1da177e4c Linux-2.6.12-rc2 |
114 |
static inline struct openflags of_excl(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
115 116 117 |
{ flags.e = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
118 119 120 |
} static inline struct openflags of_cloexec(struct openflags flags) |
329c6e425 [PATCH] uml: head... |
121 122 123 |
{ flags.cl = 1; return flags; |
1da177e4c Linux-2.6.12-rc2 |
124 |
} |
329c6e425 [PATCH] uml: head... |
125 |
|
cf9165a50 [PATCH] uml: oS h... |
126 |
/* file.c */ |
1da177e4c Linux-2.6.12-rc2 |
127 128 129 |
extern int os_stat_file(const char *file_name, struct uml_stat *buf); extern int os_stat_fd(const int fd, struct uml_stat *buf); extern int os_access(const char *file, int mode); |
512b6fb1c uml: userspace fi... |
130 |
extern int os_set_exec_close(int fd); |
1da177e4c Linux-2.6.12-rc2 |
131 |
extern int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg); |
1da177e4c Linux-2.6.12-rc2 |
132 133 |
extern int os_get_ifname(int fd, char *namebuf); extern int os_set_slip(int fd); |
1da177e4c Linux-2.6.12-rc2 |
134 |
extern int os_mode_fd(int fd, int mode); |
ba180fd43 uml: style fixes ... |
135 |
extern int os_seek_file(int fd, unsigned long long offset); |
c9a3072d1 uml: code tidying... |
136 |
extern int os_open_file(const char *file, struct openflags flags, int mode); |
1da177e4c Linux-2.6.12-rc2 |
137 138 |
extern int os_read_file(int fd, void *buf, int len); extern int os_write_file(int fd, const void *buf, int count); |
c9a3072d1 uml: code tidying... |
139 140 |
extern int os_file_size(const char *file, unsigned long long *size_out); extern int os_file_modtime(const char *file, unsigned long *modtime); |
1da177e4c Linux-2.6.12-rc2 |
141 |
extern int os_pipe(int *fd, int stream, int close_on_exec); |
bf8fde785 uml: miscellaneou... |
142 |
extern int os_set_fd_async(int fd); |
1da177e4c Linux-2.6.12-rc2 |
143 144 145 |
extern int os_clear_fd_async(int fd); extern int os_set_fd_block(int fd, int blocking); extern int os_accept_connection(int fd); |
c9a3072d1 uml: code tidying... |
146 |
extern int os_create_unix_socket(const char *file, int len, int close_on_exec); |
1da177e4c Linux-2.6.12-rc2 |
147 148 149 150 |
extern int os_shutdown_socket(int fd, int r, int w); extern void os_close_file(int fd); extern int os_rcv_fd(int fd, int *helper_pid_out); extern int create_unix_socket(char *file, int len, int close_on_exec); |
c9a3072d1 uml: code tidying... |
151 |
extern int os_connect_socket(const char *name); |
1da177e4c Linux-2.6.12-rc2 |
152 |
extern int os_file_type(char *file); |
c9a3072d1 uml: code tidying... |
153 |
extern int os_file_mode(const char *file, struct openflags *mode_out); |
1da177e4c Linux-2.6.12-rc2 |
154 |
extern int os_lock_file(int fd, int excl); |
cf9165a50 [PATCH] uml: oS h... |
155 156 157 158 159 160 161 162 163 |
extern void os_flush_stdout(void); extern int os_stat_filesystem(char *path, long *bsize_out, long long *blocks_out, long long *bfree_out, long long *bavail_out, long long *files_out, long long *ffree_out, void *fsid_out, int fsid_size, long *namelen_out, long *spare_out); extern int os_change_dir(char *dir); extern int os_fchange_dir(int fd); |
005a59ec7 Deal with missing... |
164 165 166 |
extern unsigned os_major(unsigned long long dev); extern unsigned os_minor(unsigned long long dev); extern unsigned long long os_makedev(unsigned major, unsigned minor); |
1da177e4c Linux-2.6.12-rc2 |
167 |
|
60d339f6f [PATCH] uml: move... |
168 169 |
/* start_up.c */ extern void os_early_checks(void); |
6b7e96748 uml: convert func... |
170 |
extern void can_do_skas(void); |
8e367065e [PATCH] uml: move... |
171 |
extern void os_check_bugs(void); |
3feb88562 [PATCH] uml: chec... |
172 |
extern void check_host_supports_tls(int *supports_tls, int *tls_min); |
60d339f6f [PATCH] uml: move... |
173 |
|
0f80bc85c [PATCH] uml: move... |
174 |
/* mem.c */ |
ae1738160 [PATCH] uml: big ... |
175 |
extern int create_mem_file(unsigned long long len); |
0f80bc85c [PATCH] uml: move... |
176 |
|
60d339f6f [PATCH] uml: move... |
177 |
/* process.c */ |
1da177e4c Linux-2.6.12-rc2 |
178 179 180 181 182 |
extern unsigned long os_process_pc(int pid); extern int os_process_parent(int pid); extern void os_stop_process(int pid); extern void os_kill_process(int pid, int reap_child); extern void os_kill_ptraced_process(int pid, int reap_child); |
07f4e2c61 [PATCH] uml: fix ... |
183 |
extern long os_ptrace_ldt(long pid, long addr, long data); |
1da177e4c Linux-2.6.12-rc2 |
184 |
extern int os_getpid(void); |
cd2ee4a30 [PATCH] uml: Fix ... |
185 |
extern int os_getpgrp(void); |
07f4e2c61 [PATCH] uml: fix ... |
186 |
|
e64bd1340 [PATCH] uml: sign... |
187 |
extern void init_new_thread_signals(void); |
fab95c55e uml: get rid of d... |
188 |
extern int run_kernel_thread(int (*fn)(void *), void *arg, jmp_buf **jmp_ptr); |
1da177e4c Linux-2.6.12-rc2 |
189 190 191 |
extern int os_map_memory(void *virt, int fd, unsigned long long off, unsigned long len, int r, int w, int x); |
329c6e425 [PATCH] uml: head... |
192 |
extern int os_protect_memory(void *addr, unsigned long len, |
1da177e4c Linux-2.6.12-rc2 |
193 194 |
int r, int w, int x); extern int os_unmap_memory(void *addr, int len); |
02dea0875 [PATCH] UML: Hotp... |
195 196 |
extern int os_drop_memory(void *addr, int length); extern int can_drop_memory(void); |
1da177e4c Linux-2.6.12-rc2 |
197 |
extern void os_flush_stdout(void); |
1da177e4c Linux-2.6.12-rc2 |
198 |
|
5d48545e5 [PATCH] uml: make... |
199 200 |
/* execvp.c */ extern int execvp_noalloc(char *buf, const char *file, char *const argv[]); |
ff5c6ff54 [PATCH] uml: sepa... |
201 |
/* helper.c */ |
c43990162 uml: simplify hel... |
202 |
extern int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv); |
ff5c6ff54 [PATCH] uml: sepa... |
203 |
extern int run_helper_thread(int (*proc)(void *), void *arg, |
c43990162 uml: simplify hel... |
204 |
unsigned int flags, unsigned long *stack_out); |
1aa351a30 uml: tidy helper ... |
205 |
extern int helper_wait(int pid); |
ff5c6ff54 [PATCH] uml: sepa... |
206 |
|
aa6758d48 [PATCH] uml: impl... |
207 |
|
dd77aec07 [PATCH] uml: tls ... |
208 |
/* umid.c */ |
2264c475e [PATCH] uml: sepa... |
209 |
extern int umid_file_name(char *name, char *buf, int len); |
7eebe8a9c [PATCH] uml: umid... |
210 211 |
extern int set_umid(char *name); extern char *get_umid(void); |
2264c475e [PATCH] uml: sepa... |
212 |
|
0805d89c1 [PATCH] uml: move... |
213 |
/* signal.c */ |
78a26e25c uml: separate tim... |
214 |
extern void timer_init(void); |
0805d89c1 [PATCH] uml: move... |
215 216 |
extern void set_sigstack(void *sig_stack, int size); extern void remove_sigstack(void); |
00361683c um: fill the hand... |
217 |
extern void set_handler(int sig); |
0805d89c1 [PATCH] uml: move... |
218 219 220 221 222 |
extern int change_sig(int signal, int on); extern void block_signals(void); extern void unblock_signals(void); extern int get_signals(void); extern int set_signals(int enable); |
4fef0c10f [PATCH] uml: move... |
223 224 |
/* util.c */ extern void stack_protections(unsigned long address); |
4fef0c10f [PATCH] uml: move... |
225 226 |
extern int raw(int fd); extern void setup_machinename(char *machine_out); |
b4ffb6ad8 uml: host_info ti... |
227 |
extern void setup_hostinfo(char *buf, int len); |
3e6f2ac48 uml: kill process... |
228 |
extern void os_dump_core(void) __attribute__ ((noreturn)); |
d634f194d um: add earlyprin... |
229 |
extern void um_early_printk(const char *s, unsigned int n); |
4fef0c10f [PATCH] uml: move... |
230 |
|
cff65c4f0 [PATCH] uml: move... |
231 |
/* time.c */ |
b160fb630 uml: eliminate in... |
232 |
extern void idle_sleep(unsigned long long nsecs); |
a2f018bf3 uml: simplify int... |
233 |
extern int set_interval(void); |
d2753a6d1 uml: tickless sup... |
234 |
extern int timer_one_shot(int ticks); |
5f734614f uml: time build fix |
235 |
extern long long disable_timer(void); |
cff65c4f0 [PATCH] uml: move... |
236 |
extern void uml_idle_timer(void); |
5f734614f uml: time build fix |
237 |
extern long long os_nsecs(void); |
cff65c4f0 [PATCH] uml: move... |
238 |
|
f45d9fc9d [PATCH] uml: move... |
239 240 241 242 243 244 245 246 |
/* skas/mem.c */ extern long run_syscall_stub(struct mm_id * mm_idp, int syscall, unsigned long *args, long expected, void **addr, int done); extern long syscall_stub_data(struct mm_id * mm_idp, unsigned long *data, int data_count, void **addr, void **stub_addr); extern int map(struct mm_id * mm_idp, unsigned long virt, |
16dd07bc6 uml: more page fa... |
247 |
unsigned long len, int prot, int phys_fd, |
f45d9fc9d [PATCH] uml: move... |
248 |
unsigned long long offset, int done, void **data); |
64f60841c uml: speed page f... |
249 |
extern int unmap(struct mm_id * mm_idp, unsigned long addr, unsigned long len, |
f45d9fc9d [PATCH] uml: move... |
250 251 |
int done, void **data); extern int protect(struct mm_id * mm_idp, unsigned long addr, |
16dd07bc6 uml: more page fa... |
252 |
unsigned long len, unsigned int prot, int done, void **data); |
f45d9fc9d [PATCH] uml: move... |
253 |
|
abaf69773 [PATCH] uml: move... |
254 255 256 257 |
/* skas/process.c */ extern int is_skas_winch(int pid, int fd, void *data); extern int start_userspace(unsigned long stub_stack); extern int copy_context_skas0(unsigned long stack, int pid); |
77bf44003 uml: remove code ... |
258 |
extern void userspace(struct uml_pt_regs *regs); |
3e6f2ac48 uml: kill process... |
259 260 |
extern int map_stub_pages(int fd, unsigned long code, unsigned long data, unsigned long stack); |
3c9173509 [PATCH] uml: thre... |
261 262 263 |
extern void new_thread(void *stack, jmp_buf *buf, void (*handler)(void)); extern void switch_threads(jmp_buf *me, jmp_buf *you); extern int start_idle_thread(void *stack, jmp_buf *switch_buf); |
abaf69773 [PATCH] uml: move... |
264 265 266 267 |
extern void initial_thread_cb_skas(void (*proc)(void *), void *arg); extern void halt_skas(void); extern void reboot_skas(void); |
63ae2a94d [PATCH] uml: move... |
268 269 |
/* irq.c */ extern int os_waiting_for_events(struct irq_fd *active_fds); |
63ae2a94d [PATCH] uml: move... |
270 271 272 273 274 275 276 277 |
extern int os_create_pollfd(int fd, int events, void *tmp_pfd, int size_tmpfds); extern void os_free_irq_by_cb(int (*test)(struct irq_fd *, void *), void *arg, struct irq_fd *active_fds, struct irq_fd ***last_irq_ptr2); extern void os_free_irq_later(struct irq_fd *active_fds, int irq, void *dev_id); extern int os_get_pollfd(int i); extern void os_set_pollfd(int i, int fd); extern void os_set_ioignore(void); |
63ae2a94d [PATCH] uml: move... |
278 |
|
f206aabb0 [PATCH] uml: move... |
279 |
/* sigio.c */ |
19bdf0409 [PATCH] uml: SIGI... |
280 |
extern int add_sigio_fd(int fd); |
f206aabb0 [PATCH] uml: move... |
281 |
extern int ignore_sigio_fd(int fd); |
8e64d96ae [PATCH] uml: remo... |
282 |
extern void maybe_sigio_broken(int fd, int read); |
5d33e4d7f uml: random drive... |
283 |
extern void sigio_broken(int fd, int read); |
f206aabb0 [PATCH] uml: move... |
284 |
|
24fa6c083 uml: move remaini... |
285 |
/* sys-x86_64/prctl.c */ |
f355559cf [PATCH] uml: x86_... |
286 |
extern int os_arch_prctl(int pid, int code, unsigned long *addr); |
24fa6c083 uml: move remaini... |
287 |
/* tty.c */ |
536788fe2 uml: runtime host... |
288 289 290 |
extern int get_pty(void); /* sys-$ARCH/task_size.c */ |
40fb16a36 uml: deal with in... |
291 |
extern unsigned long os_get_top_address(void); |
24fa6c083 uml: move remaini... |
292 |
|
2264c475e [PATCH] uml: sepa... |
293 |
#endif |