Blame view

arch/um/include/shared/os.h 9.81 KB
329c6e425   Jeff Dike   [PATCH] uml: head...
1
  /*
ba180fd43   Jeff Dike   uml: style fixes ...
2
   * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
6
7
   * Licensed under the GPL
   */
  
  #ifndef __OS_H__
  #define __OS_H__
ba180fd43   Jeff Dike   uml: style fixes ...
8
  #include <stdarg.h>
63ae2a94d   Jeff Dike   [PATCH] uml: move...
9
  #include "irq_user.h"
ba180fd43   Jeff Dike   uml: style fixes ...
10
11
  #include "longjmp.h"
  #include "mm_id.h"
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
12

24fa6c083   Jeff Dike   uml: move remaini...
13
  #define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
329c6e425   Jeff Dike   [PATCH] uml: head...
14
15
16
  #define OS_TYPE_FILE 1
  #define OS_TYPE_DIR 2
  #define OS_TYPE_SYMLINK 3
1da177e4c   Linus Torvalds   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   Richard Weinberger   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   Linus Torvalds   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   Jeff Dike   [PATCH] uml: head...
64
  					  .t = 0, .a = 0, .e = 0, .cl = 0 })
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
65
66
67
  
  static inline struct openflags of_read(struct openflags flags)
  {
329c6e425   Jeff Dike   [PATCH] uml: head...
68
69
  	flags.r = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
70
71
72
73
  }
  
  static inline struct openflags of_write(struct openflags flags)
  {
329c6e425   Jeff Dike   [PATCH] uml: head...
74
75
  	flags.w = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
76
77
78
79
  }
  
  static inline struct openflags of_rdwr(struct openflags flags)
  {
329c6e425   Jeff Dike   [PATCH] uml: head...
80
  	return of_read(of_write(flags));
1da177e4c   Linus Torvalds   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   Jeff Dike   [PATCH] uml: head...
87
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
88
89
90
  }
  
  static inline struct openflags of_sync(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
91
92
93
  {
  	flags.s = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
94
95
96
  }
  
  static inline struct openflags of_create(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
97
98
99
  {
  	flags.c = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
  }
329c6e425   Jeff Dike   [PATCH] uml: head...
101

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
102
  static inline struct openflags of_trunc(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
103
104
105
  {
  	flags.t = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
106
  }
329c6e425   Jeff Dike   [PATCH] uml: head...
107

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
108
  static inline struct openflags of_append(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
109
110
111
  {
  	flags.a = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
112
  }
329c6e425   Jeff Dike   [PATCH] uml: head...
113

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
114
  static inline struct openflags of_excl(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
115
116
117
  {
  	flags.e = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
119
120
  }
  
  static inline struct openflags of_cloexec(struct openflags flags)
329c6e425   Jeff Dike   [PATCH] uml: head...
121
122
123
  {
  	flags.cl = 1;
  	return flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
124
  }
329c6e425   Jeff Dike   [PATCH] uml: head...
125

cf9165a50   Jeff Dike   [PATCH] uml: oS h...
126
  /* file.c */
1da177e4c   Linus Torvalds   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   Jeff Dike   uml: userspace fi...
130
  extern int os_set_exec_close(int fd);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
131
  extern int os_ioctl_generic(int fd, unsigned int cmd, unsigned long arg);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
  extern int os_get_ifname(int fd, char *namebuf);
  extern int os_set_slip(int fd);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
134
  extern int os_mode_fd(int fd, int mode);
ba180fd43   Jeff Dike   uml: style fixes ...
135
  extern int os_seek_file(int fd, unsigned long long offset);
c9a3072d1   WANG Cong   uml: code tidying...
136
  extern int os_open_file(const char *file, struct openflags flags, int mode);
1da177e4c   Linus Torvalds   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   WANG Cong   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   Linus Torvalds   Linux-2.6.12-rc2
141
  extern int os_pipe(int *fd, int stream, int close_on_exec);
bf8fde785   Jeff Dike   uml: miscellaneou...
142
  extern int os_set_fd_async(int fd);
1da177e4c   Linus Torvalds   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   WANG Cong   uml: code tidying...
146
  extern int os_create_unix_socket(const char *file, int len, int close_on_exec);
1da177e4c   Linus Torvalds   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   WANG Cong   uml: code tidying...
151
  extern int os_connect_socket(const char *name);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
152
  extern int os_file_type(char *file);
c9a3072d1   WANG Cong   uml: code tidying...
153
  extern int os_file_mode(const char *file, struct openflags *mode_out);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
154
  extern int os_lock_file(int fd, int excl);
cf9165a50   Jeff Dike   [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   Al Viro   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   Linus Torvalds   Linux-2.6.12-rc2
167

60d339f6f   Gennady Sharapov   [PATCH] uml: move...
168
169
  /* start_up.c */
  extern void os_early_checks(void);
6b7e96748   Karol Swietlicki   uml: convert func...
170
  extern void can_do_skas(void);
8e367065e   Jeff Dike   [PATCH] uml: move...
171
  extern void os_check_bugs(void);
3feb88562   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: chec...
172
  extern void check_host_supports_tls(int *supports_tls, int *tls_min);
60d339f6f   Gennady Sharapov   [PATCH] uml: move...
173

0f80bc85c   Jeff Dike   [PATCH] uml: move...
174
  /* mem.c */
ae1738160   Jeff Dike   [PATCH] uml: big ...
175
  extern int create_mem_file(unsigned long long len);
0f80bc85c   Jeff Dike   [PATCH] uml: move...
176

60d339f6f   Gennady Sharapov   [PATCH] uml: move...
177
  /* process.c */
1da177e4c   Linus Torvalds   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   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: fix ...
183
  extern long os_ptrace_ldt(long pid, long addr, long data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
184
  extern int os_getpid(void);
cd2ee4a30   Jeff Dike   [PATCH] uml: Fix ...
185
  extern int os_getpgrp(void);
07f4e2c61   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: fix ...
186

e64bd1340   Jeff Dike   [PATCH] uml: sign...
187
  extern void init_new_thread_signals(void);
fab95c55e   Jeff Dike   uml: get rid of d...
188
  extern int run_kernel_thread(int (*fn)(void *), void *arg, jmp_buf **jmp_ptr);
1da177e4c   Linus Torvalds   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   Jeff Dike   [PATCH] uml: head...
192
  extern int os_protect_memory(void *addr, unsigned long len,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
193
194
  			     int r, int w, int x);
  extern int os_unmap_memory(void *addr, int len);
02dea0875   Jeff Dike   [PATCH] UML: Hotp...
195
196
  extern int os_drop_memory(void *addr, int length);
  extern int can_drop_memory(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
197
  extern void os_flush_stdout(void);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
198

5d48545e5   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: make...
199
200
  /* execvp.c */
  extern int execvp_noalloc(char *buf, const char *file, char *const argv[]);
ff5c6ff54   Jeff Dike   [PATCH] uml: sepa...
201
  /* helper.c */
c43990162   Jeff Dike   uml: simplify hel...
202
  extern int run_helper(void (*pre_exec)(void *), void *pre_data, char **argv);
ff5c6ff54   Jeff Dike   [PATCH] uml: sepa...
203
  extern int run_helper_thread(int (*proc)(void *), void *arg,
c43990162   Jeff Dike   uml: simplify hel...
204
  			     unsigned int flags, unsigned long *stack_out);
1aa351a30   Jeff Dike   uml: tidy helper ...
205
  extern int helper_wait(int pid);
ff5c6ff54   Jeff Dike   [PATCH] uml: sepa...
206

aa6758d48   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: impl...
207

dd77aec07   Paolo 'Blaisorblade' Giarrusso   [PATCH] uml: tls ...
208
  /* umid.c */
2264c475e   Jeff Dike   [PATCH] uml: sepa...
209
  extern int umid_file_name(char *name, char *buf, int len);
7eebe8a9c   Jeff Dike   [PATCH] uml: umid...
210
211
  extern int set_umid(char *name);
  extern char *get_umid(void);
2264c475e   Jeff Dike   [PATCH] uml: sepa...
212

0805d89c1   Gennady Sharapov   [PATCH] uml: move...
213
  /* signal.c */
78a26e25c   Jeff Dike   uml: separate tim...
214
  extern void timer_init(void);
0805d89c1   Gennady Sharapov   [PATCH] uml: move...
215
216
  extern void set_sigstack(void *sig_stack, int size);
  extern void remove_sigstack(void);
00361683c   Al Viro   um: fill the hand...
217
  extern void set_handler(int sig);
0805d89c1   Gennady Sharapov   [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   Gennady Sharapov   [PATCH] uml: move...
223
224
  /* util.c */
  extern void stack_protections(unsigned long address);
4fef0c10f   Gennady Sharapov   [PATCH] uml: move...
225
226
  extern int raw(int fd);
  extern void setup_machinename(char *machine_out);
b4ffb6ad8   Jeff Dike   uml: host_info ti...
227
  extern void setup_hostinfo(char *buf, int len);
3e6f2ac48   Jeff Dike   uml: kill process...
228
  extern void os_dump_core(void) __attribute__ ((noreturn));
d634f194d   Richard Weinberger   um: add earlyprin...
229
  extern void um_early_printk(const char *s, unsigned int n);
4fef0c10f   Gennady Sharapov   [PATCH] uml: move...
230

cff65c4f0   Gennady Sharapov   [PATCH] uml: move...
231
  /* time.c */
b160fb630   Jeff Dike   uml: eliminate in...
232
  extern void idle_sleep(unsigned long long nsecs);
a2f018bf3   Jeff Dike   uml: simplify int...
233
  extern int set_interval(void);
d2753a6d1   Jeff Dike   uml: tickless sup...
234
  extern int timer_one_shot(int ticks);
5f734614f   Jeff Dike   uml: time build fix
235
  extern long long disable_timer(void);
cff65c4f0   Gennady Sharapov   [PATCH] uml: move...
236
  extern void uml_idle_timer(void);
5f734614f   Jeff Dike   uml: time build fix
237
  extern long long os_nsecs(void);
cff65c4f0   Gennady Sharapov   [PATCH] uml: move...
238

f45d9fc9d   Gennady Sharapov   [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   Jeff Dike   uml: more page fa...
247
  	       unsigned long len, int prot, int phys_fd,
f45d9fc9d   Gennady Sharapov   [PATCH] uml: move...
248
  	       unsigned long long offset, int done, void **data);
64f60841c   Jeff Dike   uml: speed page f...
249
  extern int unmap(struct mm_id * mm_idp, unsigned long addr, unsigned long len,
f45d9fc9d   Gennady Sharapov   [PATCH] uml: move...
250
251
  		 int done, void **data);
  extern int protect(struct mm_id * mm_idp, unsigned long addr,
16dd07bc6   Jeff Dike   uml: more page fa...
252
  		   unsigned long len, unsigned int prot, int done, void **data);
f45d9fc9d   Gennady Sharapov   [PATCH] uml: move...
253

abaf69773   Gennady Sharapov   [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   Jeff Dike   uml: remove code ...
258
  extern void userspace(struct uml_pt_regs *regs);
3e6f2ac48   Jeff Dike   uml: kill process...
259
260
  extern int map_stub_pages(int fd, unsigned long code, unsigned long data,
  			  unsigned long stack);
3c9173509   Jeff Dike   [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   Gennady Sharapov   [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   Jeff Dike   [PATCH] uml: move...
268
269
  /* irq.c */
  extern int os_waiting_for_events(struct irq_fd *active_fds);
63ae2a94d   Jeff Dike   [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   Jeff Dike   [PATCH] uml: move...
278

f206aabb0   Jeff Dike   [PATCH] uml: move...
279
  /* sigio.c */
19bdf0409   Jeff Dike   [PATCH] uml: SIGI...
280
  extern int add_sigio_fd(int fd);
f206aabb0   Jeff Dike   [PATCH] uml: move...
281
  extern int ignore_sigio_fd(int fd);
8e64d96ae   Jeff Dike   [PATCH] uml: remo...
282
  extern void maybe_sigio_broken(int fd, int read);
5d33e4d7f   Jeff Dike   uml: random drive...
283
  extern void sigio_broken(int fd, int read);
f206aabb0   Jeff Dike   [PATCH] uml: move...
284

24fa6c083   Jeff Dike   uml: move remaini...
285
  /* sys-x86_64/prctl.c */
f355559cf   Jeff Dike   [PATCH] uml: x86_...
286
  extern int os_arch_prctl(int pid, int code, unsigned long *addr);
24fa6c083   Jeff Dike   uml: move remaini...
287
  /* tty.c */
536788fe2   Jeff Dike   uml: runtime host...
288
289
290
  extern int get_pty(void);
  
  /* sys-$ARCH/task_size.c */
40fb16a36   Tom Spink   uml: deal with in...
291
  extern unsigned long os_get_top_address(void);
24fa6c083   Jeff Dike   uml: move remaini...
292

2264c475e   Jeff Dike   [PATCH] uml: sepa...
293
  #endif