Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
um
include
shared
os.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com)
3
* Licensed under the GPL
4
*/
5
6
#ifndef __OS_H__
7
#define __OS_H__
8
9
#include <stdarg.h>
10
#include <
irq_user.h
>
11
#include <
longjmp.h
>
12
#include <
mm_id.h
>
13
14
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
15
16
#define OS_TYPE_FILE 1
17
#define OS_TYPE_DIR 2
18
#define OS_TYPE_SYMLINK 3
19
#define OS_TYPE_CHARDEV 4
20
#define OS_TYPE_BLOCKDEV 5
21
#define OS_TYPE_FIFO 6
22
#define OS_TYPE_SOCK 7
23
24
/* os_access() flags */
25
#define OS_ACC_F_OK 0
/* Test for existence. */
26
#define OS_ACC_X_OK 1
/* Test for execute permission. */
27
#define OS_ACC_W_OK 2
/* Test for write permission. */
28
#define OS_ACC_R_OK 4
/* Test for read permission. */
29
#define OS_ACC_RW_OK (OS_ACC_W_OK | OS_ACC_R_OK)
/* Test for RW permission */
30
31
#ifdef CONFIG_64BIT
32
#define OS_LIB_PATH "/usr/lib64/"
33
#else
34
#define OS_LIB_PATH "/usr/lib/"
35
#endif
36
37
/*
38
* types taken from stat_file() in hostfs_user.c
39
* (if they are wrong here, they are wrong there...).
40
*/
41
struct
uml_stat
{
42
int
ust_dev
;
/* device */
43
unsigned
long
long
ust_ino
;
/* inode */
44
int
ust_mode
;
/* protection */
45
int
ust_nlink
;
/* number of hard links */
46
int
ust_uid
;
/* user ID of owner */
47
int
ust_gid
;
/* group ID of owner */
48
unsigned
long
long
ust_size
;
/* total size, in bytes */
49
int
ust_blksize
;
/* blocksize for filesystem I/O */
50
unsigned
long
long
ust_blocks
;
/* number of blocks allocated */
51
unsigned
long
ust_atime
;
/* time of last access */
52
unsigned
long
ust_mtime
;
/* time of last modification */
53
unsigned
long
ust_ctime
;
/* time of last change */
54
};
55
56
struct
openflags
{
57
unsigned
int
r
: 1;
58
unsigned
int
w
: 1;
59
unsigned
int
s
: 1;
/* O_SYNC */
60
unsigned
int
c
: 1;
/* O_CREAT */
61
unsigned
int
t
: 1;
/* O_TRUNC */
62
unsigned
int
a
: 1;
/* O_APPEND */
63
unsigned
int
e
: 1;
/* O_EXCL */
64
unsigned
int
cl
: 1;
/* FD_CLOEXEC */
65
};
66
67
#define OPENFLAGS() ((struct openflags) { .r = 0, .w = 0, .s = 0, .c = 0, \
68
.t = 0, .a = 0, .e = 0, .cl = 0 })
69
70
static
inline
struct
openflags
of_read(
struct
openflags
flags
)
71
{
72
flags
.r = 1;
73
return
flags
;
74
}
75
76
static
inline
struct
openflags
of_write(
struct
openflags
flags
)
77
{
78
flags
.w = 1;
79
return
flags
;
80
}
81
82
static
inline
struct
openflags
of_rdwr(
struct
openflags
flags
)
83
{
84
return
of_read(of_write(
flags
));
85
}
86
87
static
inline
struct
openflags
of_set_rw(
struct
openflags
flags
,
int
r
,
int
w
)
88
{
89
flags
.r =
r
;
90
flags
.w =
w
;
91
return
flags
;
92
}
93
94
static
inline
struct
openflags
of_sync(
struct
openflags
flags
)
95
{
96
flags
.s = 1;
97
return
flags
;
98
}
99
100
static
inline
struct
openflags
of_create(
struct
openflags
flags
)
101
{
102
flags
.c = 1;
103
return
flags
;
104
}
105
106
static
inline
struct
openflags
of_trunc(
struct
openflags
flags
)
107
{
108
flags
.t = 1;
109
return
flags
;
110
}
111
112
static
inline
struct
openflags
of_append(
struct
openflags
flags
)
113
{
114
flags
.a = 1;
115
return
flags
;
116
}
117
118
static
inline
struct
openflags
of_excl(
struct
openflags
flags
)
119
{
120
flags
.e = 1;
121
return
flags
;
122
}
123
124
static
inline
struct
openflags
of_cloexec(
struct
openflags
flags
)
125
{
126
flags
.cl = 1;
127
return
flags
;
128
}
129
130
/* file.c */
131
extern
int
os_stat_file
(
const
char
*
file_name
,
struct
uml_stat
*
buf
);
132
extern
int
os_stat_fd
(
const
int
fd
,
struct
uml_stat
*
buf
);
133
extern
int
os_access
(
const
char
*
file
,
int
mode
);
134
extern
int
os_set_exec_close
(
int
fd
);
135
extern
int
os_ioctl_generic
(
int
fd
,
unsigned
int
cmd
,
unsigned
long
arg
);
136
extern
int
os_get_ifname
(
int
fd
,
char
*namebuf);
137
extern
int
os_set_slip
(
int
fd
);
138
extern
int
os_mode_fd
(
int
fd
,
int
mode
);
139
140
extern
int
os_seek_file
(
int
fd
,
unsigned
long
long
offset
);
141
extern
int
os_open_file
(
const
char
*
file
,
struct
openflags
flags
,
int
mode
);
142
extern
int
os_read_file
(
int
fd
,
void
*
buf
,
int
len);
143
extern
int
os_write_file
(
int
fd
,
const
void
*
buf
,
int
count
);
144
extern
int
os_file_size
(
const
char
*
file
,
unsigned
long
long
*size_out);
145
extern
int
os_file_modtime
(
const
char
*
file
,
unsigned
long
*modtime);
146
extern
int
os_pipe
(
int
*
fd
,
int
stream,
int
close_on_exec);
147
extern
int
os_set_fd_async
(
int
fd
);
148
extern
int
os_clear_fd_async
(
int
fd
);
149
extern
int
os_set_fd_block
(
int
fd
,
int
blocking);
150
extern
int
os_accept_connection
(
int
fd
);
151
extern
int
os_create_unix_socket
(
const
char
*
file
,
int
len,
int
close_on_exec);
152
extern
int
os_shutdown_socket
(
int
fd
,
int
r
,
int
w
);
153
extern
void
os_close_file
(
int
fd
);
154
extern
int
os_rcv_fd
(
int
fd
,
int
*helper_pid_out);
155
extern
int
create_unix_socket
(
char
*
file
,
int
len,
int
close_on_exec);
156
extern
int
os_connect_socket
(
const
char
*
name
);
157
extern
int
os_file_type
(
char
*
file
);
158
extern
int
os_file_mode
(
const
char
*
file
,
struct
openflags
*mode_out);
159
extern
int
os_lock_file
(
int
fd
,
int
excl
);
160
extern
void
os_flush_stdout
(
void
);
161
extern
int
os_stat_filesystem
(
char
*
path
,
long
*bsize_out,
162
long
long
*blocks_out,
long
long
*bfree_out,
163
long
long
*bavail_out,
long
long
*files_out,
164
long
long
*ffree_out,
void
*fsid_out,
165
int
fsid_size,
long
*namelen_out,
166
long
*spare_out);
167
extern
int
os_change_dir
(
char
*dir);
168
extern
int
os_fchange_dir
(
int
fd
);
169
extern
unsigned
os_major
(
unsigned
long
long
dev
);
170
extern
unsigned
os_minor
(
unsigned
long
long
dev
);
171
extern
unsigned
long
long
os_makedev
(
unsigned
major,
unsigned
minor);
172
173
/* start_up.c */
174
extern
void
os_early_checks
(
void
);
175
extern
void
can_do_skas
(
void
);
176
extern
void
os_check_bugs
(
void
);
177
extern
void
check_host_supports_tls
(
int
*supports_tls,
int
*tls_min);
178
179
/* mem.c */
180
extern
int
create_mem_file
(
unsigned
long
long
len);
181
182
/* process.c */
183
extern
unsigned
long
os_process_pc
(
int
pid
);
184
extern
int
os_process_parent
(
int
pid
);
185
extern
void
os_stop_process
(
int
pid
);
186
extern
void
os_kill_process
(
int
pid
,
int
reap_child);
187
extern
void
os_kill_ptraced_process
(
int
pid
,
int
reap_child);
188
extern
long
os_ptrace_ldt
(
long
pid
,
long
addr
,
long
data
);
189
190
extern
int
os_getpid
(
void
);
191
extern
int
os_getpgrp
(
void
);
192
193
extern
void
init_new_thread_signals
(
void
);
194
195
extern
int
os_map_memory
(
void
*virt,
int
fd
,
unsigned
long
long
off,
196
unsigned
long
len,
int
r
,
int
w
,
int
x
);
197
extern
int
os_protect_memory
(
void
*
addr
,
unsigned
long
len,
198
int
r
,
int
w
,
int
x
);
199
extern
int
os_unmap_memory
(
void
*
addr
,
int
len);
200
extern
int
os_drop_memory
(
void
*
addr
,
int
length
);
201
extern
int
can_drop_memory
(
void
);
202
extern
void
os_flush_stdout
(
void
);
203
204
/* execvp.c */
205
extern
int
execvp_noalloc
(
char
*
buf
,
const
char
*
file
,
char
*
const
argv[]);
206
/* helper.c */
207
extern
int
run_helper
(
void
(*pre_exec)(
void
*),
void
*pre_data,
char
**argv);
208
extern
int
run_helper_thread
(
int
(*proc)(
void
*),
void
*
arg
,
209
unsigned
int
flags
,
unsigned
long
*stack_out);
210
extern
int
helper_wait
(
int
pid
);
211
212
213
/* umid.c */
214
extern
int
umid_file_name
(
char
*
name
,
char
*
buf
,
int
len);
215
extern
int
set_umid
(
char
*
name
);
216
extern
char
*
get_umid
(
void
);
217
218
/* signal.c */
219
extern
void
timer_init
(
void
);
220
extern
void
set_sigstack
(
void
*sig_stack,
int
size
);
221
extern
void
remove_sigstack
(
void
);
222
extern
void
set_handler
(
int
sig
);
223
extern
int
change_sig
(
int
signal,
int
on);
224
extern
void
block_signals
(
void
);
225
extern
void
unblock_signals
(
void
);
226
extern
int
get_signals
(
void
);
227
extern
int
set_signals
(
int
enable
);
228
229
/* util.c */
230
extern
void
stack_protections
(
unsigned
long
address
);
231
extern
int
raw
(
int
fd
);
232
extern
void
setup_machinename
(
char
*machine_out);
233
extern
void
setup_hostinfo
(
char
*
buf
,
int
len);
234
extern
void
os_dump_core
(
void
)
__attribute__
((noreturn));
235
extern
void
um_early_printk
(
const
char
*
s
,
unsigned
int
n
);
236
237
/* time.c */
238
extern
void
idle_sleep
(
unsigned
long
long
nsecs
);
239
extern
int
set_interval
(
void
);
240
extern
int
timer_one_shot
(
int
ticks
);
241
extern
long
long
disable_timer
(
void
);
242
extern
void
uml_idle_timer
(
void
);
243
extern
long
long
os_nsecs
(
void
);
244
245
/* skas/mem.c */
246
extern
long
run_syscall_stub
(
struct
mm_id
* mm_idp,
247
int
syscall
,
unsigned
long
*args,
long
expected,
248
void
**
addr
,
int
done
);
249
extern
long
syscall_stub_data
(
struct
mm_id
* mm_idp,
250
unsigned
long
*
data
,
int
data_count
,
251
void
**addr,
void
**stub_addr);
252
extern
int
map
(
struct
mm_id
* mm_idp,
unsigned
long
virt,
253
unsigned
long
len,
int
prot,
int
phys_fd,
254
unsigned
long
long
offset
,
int
done,
void
**data);
255
extern
int
unmap
(
struct
mm_id
* mm_idp,
unsigned
long
addr,
unsigned
long
len,
256
int
done,
void
**data);
257
extern
int
protect
(
struct
mm_id
* mm_idp,
unsigned
long
addr,
258
unsigned
long
len,
unsigned
int
prot,
int
done,
void
**data);
259
260
/* skas/process.c */
261
extern
int
is_skas_winch
(
int
pid
,
int
fd
,
void
*data);
262
extern
int
start_userspace
(
unsigned
long
stub_stack);
263
extern
int
copy_context_skas0
(
unsigned
long
stack
,
int
pid);
264
extern
void
userspace
(
struct
uml_pt_regs
*
regs
);
265
extern
int
map_stub_pages
(
int
fd,
unsigned
long
code
,
unsigned
long
data,
266
unsigned
long
stack);
267
extern
void
new_thread
(
void
*stack,
jmp_buf
*
buf
,
void
(*handler)(
void
));
268
extern
void
switch_threads
(
jmp_buf
*me,
jmp_buf
*you);
269
extern
int
start_idle_thread
(
void
*stack,
jmp_buf
*switch_buf);
270
extern
void
initial_thread_cb_skas
(
void
(*proc)(
void
*),
271
void
*
arg
);
272
extern
void
halt_skas
(
void
);
273
extern
void
reboot_skas
(
void
);
274
275
/* irq.c */
276
extern
int
os_waiting_for_events
(
struct
irq_fd
*active_fds);
277
extern
int
os_create_pollfd
(
int
fd,
int
events
,
void
*tmp_pfd,
int
size_tmpfds);
278
extern
void
os_free_irq_by_cb
(
int
(*
test
)(
struct
irq_fd
*,
void
*),
void
*arg,
279
struct
irq_fd *active_fds,
struct
irq_fd ***last_irq_ptr2);
280
extern
void
os_free_irq_later
(
struct
irq_fd *active_fds,
281
int
irq,
void
*
dev_id
);
282
extern
int
os_get_pollfd
(
int
i
);
283
extern
void
os_set_pollfd
(
int
i,
int
fd);
284
extern
void
os_set_ioignore
(
void
);
285
286
/* sigio.c */
287
extern
int
add_sigio_fd
(
int
fd);
288
extern
int
ignore_sigio_fd
(
int
fd);
289
extern
void
maybe_sigio_broken
(
int
fd,
int
read
);
290
extern
void
sigio_broken
(
int
fd,
int
read);
291
292
/* sys-x86_64/prctl.c */
293
extern
int
os_arch_prctl
(
int
pid,
int
code,
unsigned
long
*addr);
294
295
/* tty.c */
296
extern
int
get_pty
(
void
);
297
298
/* sys-$ARCH/task_size.c */
299
extern
unsigned
long
os_get_top_address
(
void
);
300
301
#endif
Generated on Thu Jan 10 2013 13:19:29 for Linux Kernel by
1.8.2