diff options
Diffstat (limited to 'arch/um/include/shared')
-rw-r--r-- | arch/um/include/shared/chan_kern.h | 50 | ||||
-rw-r--r-- | arch/um/include/shared/chan_user.h | 55 | ||||
-rw-r--r-- | arch/um/include/shared/initrd.h | 12 | ||||
-rw-r--r-- | arch/um/include/shared/ldt.h | 37 | ||||
-rw-r--r-- | arch/um/include/shared/line.h | 106 | ||||
-rw-r--r-- | arch/um/include/shared/mconsole.h | 98 | ||||
-rw-r--r-- | arch/um/include/shared/mconsole_kern.h | 52 | ||||
-rw-r--r-- | arch/um/include/shared/mem_kern.h | 20 | ||||
-rw-r--r-- | arch/um/include/shared/process.h | 17 | ||||
-rw-r--r-- | arch/um/include/shared/skas_ptregs.h | 6 | ||||
-rw-r--r-- | arch/um/include/shared/syscall.h | 12 | ||||
-rw-r--r-- | arch/um/include/shared/sysrq.h | 7 | ||||
-rw-r--r-- | arch/um/include/shared/task.h | 9 | ||||
-rw-r--r-- | arch/um/include/shared/tlb.h | 15 | ||||
-rw-r--r-- | arch/um/include/shared/ubd_user.h | 16 | ||||
-rw-r--r-- | arch/um/include/shared/um_mmu.h | 24 | ||||
-rw-r--r-- | arch/um/include/shared/um_uaccess.h | 97 |
17 files changed, 633 insertions, 0 deletions
diff --git a/arch/um/include/shared/chan_kern.h b/arch/um/include/shared/chan_kern.h new file mode 100644 index 00000000000..1e651457e04 --- /dev/null +++ b/arch/um/include/shared/chan_kern.h | |||
@@ -0,0 +1,50 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __CHAN_KERN_H__ | ||
7 | #define __CHAN_KERN_H__ | ||
8 | |||
9 | #include "linux/tty.h" | ||
10 | #include "linux/list.h" | ||
11 | #include "linux/console.h" | ||
12 | #include "chan_user.h" | ||
13 | #include "line.h" | ||
14 | |||
15 | struct chan { | ||
16 | struct list_head list; | ||
17 | struct list_head free_list; | ||
18 | struct line *line; | ||
19 | char *dev; | ||
20 | unsigned int primary:1; | ||
21 | unsigned int input:1; | ||
22 | unsigned int output:1; | ||
23 | unsigned int opened:1; | ||
24 | unsigned int enabled:1; | ||
25 | int fd; | ||
26 | const struct chan_ops *ops; | ||
27 | void *data; | ||
28 | }; | ||
29 | |||
30 | extern void chan_interrupt(struct list_head *chans, struct delayed_work *task, | ||
31 | struct tty_struct *tty, int irq); | ||
32 | extern int parse_chan_pair(char *str, struct line *line, int device, | ||
33 | const struct chan_opts *opts, char **error_out); | ||
34 | extern int write_chan(struct list_head *chans, const char *buf, int len, | ||
35 | int write_irq); | ||
36 | extern int console_write_chan(struct list_head *chans, const char *buf, | ||
37 | int len); | ||
38 | extern int console_open_chan(struct line *line, struct console *co); | ||
39 | extern void deactivate_chan(struct list_head *chans, int irq); | ||
40 | extern void reactivate_chan(struct list_head *chans, int irq); | ||
41 | extern void chan_enable_winch(struct list_head *chans, struct tty_struct *tty); | ||
42 | extern int enable_chan(struct line *line); | ||
43 | extern void close_chan(struct list_head *chans, int delay_free_irq); | ||
44 | extern int chan_window_size(struct list_head *chans, | ||
45 | unsigned short *rows_out, | ||
46 | unsigned short *cols_out); | ||
47 | extern int chan_config_string(struct list_head *chans, char *str, int size, | ||
48 | char **error_out); | ||
49 | |||
50 | #endif | ||
diff --git a/arch/um/include/shared/chan_user.h b/arch/um/include/shared/chan_user.h new file mode 100644 index 00000000000..9b9ced85b70 --- /dev/null +++ b/arch/um/include/shared/chan_user.h | |||
@@ -0,0 +1,55 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __CHAN_USER_H__ | ||
7 | #define __CHAN_USER_H__ | ||
8 | |||
9 | #include "init.h" | ||
10 | |||
11 | struct chan_opts { | ||
12 | void (*const announce)(char *dev_name, int dev); | ||
13 | char *xterm_title; | ||
14 | const int raw; | ||
15 | }; | ||
16 | |||
17 | enum chan_init_pri { INIT_STATIC, INIT_ALL, INIT_ONE }; | ||
18 | |||
19 | struct chan_ops { | ||
20 | char *type; | ||
21 | void *(*init)(char *, int, const struct chan_opts *); | ||
22 | int (*open)(int, int, int, void *, char **); | ||
23 | void (*close)(int, void *); | ||
24 | int (*read)(int, char *, void *); | ||
25 | int (*write)(int, const char *, int, void *); | ||
26 | int (*console_write)(int, const char *, int); | ||
27 | int (*window_size)(int, void *, unsigned short *, unsigned short *); | ||
28 | void (*free)(void *); | ||
29 | int winch; | ||
30 | }; | ||
31 | |||
32 | extern const struct chan_ops fd_ops, null_ops, port_ops, pts_ops, pty_ops, | ||
33 | tty_ops, xterm_ops; | ||
34 | |||
35 | extern void generic_close(int fd, void *unused); | ||
36 | extern int generic_read(int fd, char *c_out, void *unused); | ||
37 | extern int generic_write(int fd, const char *buf, int n, void *unused); | ||
38 | extern int generic_console_write(int fd, const char *buf, int n); | ||
39 | extern int generic_window_size(int fd, void *unused, unsigned short *rows_out, | ||
40 | unsigned short *cols_out); | ||
41 | extern void generic_free(void *data); | ||
42 | |||
43 | struct tty_struct; | ||
44 | extern void register_winch(int fd, struct tty_struct *tty); | ||
45 | extern void register_winch_irq(int fd, int tty_fd, int pid, | ||
46 | struct tty_struct *tty, unsigned long stack); | ||
47 | |||
48 | #define __channel_help(fn, prefix) \ | ||
49 | __uml_help(fn, prefix "[0-9]*=<channel description>\n" \ | ||
50 | " Attach a console or serial line to a host channel. See\n" \ | ||
51 | " http://user-mode-linux.sourceforge.net/old/input.html for a complete\n" \ | ||
52 | " description of this switch.\n\n" \ | ||
53 | ); | ||
54 | |||
55 | #endif | ||
diff --git a/arch/um/include/shared/initrd.h b/arch/um/include/shared/initrd.h new file mode 100644 index 00000000000..22673bcc273 --- /dev/null +++ b/arch/um/include/shared/initrd.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __INITRD_USER_H__ | ||
7 | #define __INITRD_USER_H__ | ||
8 | |||
9 | extern int load_initrd(char *filename, void *buf, int size); | ||
10 | |||
11 | #endif | ||
12 | |||
diff --git a/arch/um/include/shared/ldt.h b/arch/um/include/shared/ldt.h new file mode 100644 index 00000000000..a7f999a5877 --- /dev/null +++ b/arch/um/include/shared/ldt.h | |||
@@ -0,0 +1,37 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2004 Fujitsu Siemens Computers GmbH | ||
3 | * Licensed under the GPL | ||
4 | * | ||
5 | * Author: Bodo Stroesser <bstroesser@fujitsu-siemens.com> | ||
6 | */ | ||
7 | |||
8 | #ifndef __ASM_LDT_H | ||
9 | #define __ASM_LDT_H | ||
10 | |||
11 | #include <linux/mutex.h> | ||
12 | #include <sysdep/host_ldt.h> | ||
13 | |||
14 | extern void ldt_host_info(void); | ||
15 | |||
16 | #define LDT_PAGES_MAX \ | ||
17 | ((LDT_ENTRIES * LDT_ENTRY_SIZE)/PAGE_SIZE) | ||
18 | #define LDT_ENTRIES_PER_PAGE \ | ||
19 | (PAGE_SIZE/LDT_ENTRY_SIZE) | ||
20 | #define LDT_DIRECT_ENTRIES \ | ||
21 | ((LDT_PAGES_MAX*sizeof(void *))/LDT_ENTRY_SIZE) | ||
22 | |||
23 | struct ldt_entry { | ||
24 | __u32 a; | ||
25 | __u32 b; | ||
26 | }; | ||
27 | |||
28 | typedef struct uml_ldt { | ||
29 | int entry_count; | ||
30 | struct mutex lock; | ||
31 | union { | ||
32 | struct ldt_entry * pages[LDT_PAGES_MAX]; | ||
33 | struct ldt_entry entries[LDT_DIRECT_ENTRIES]; | ||
34 | } u; | ||
35 | } uml_ldt_t; | ||
36 | |||
37 | #endif | ||
diff --git a/arch/um/include/shared/line.h b/arch/um/include/shared/line.h new file mode 100644 index 00000000000..63df3ca02ac --- /dev/null +++ b/arch/um/include/shared/line.h | |||
@@ -0,0 +1,106 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __LINE_H__ | ||
7 | #define __LINE_H__ | ||
8 | |||
9 | #include "linux/list.h" | ||
10 | #include "linux/workqueue.h" | ||
11 | #include "linux/tty.h" | ||
12 | #include "linux/interrupt.h" | ||
13 | #include "linux/spinlock.h" | ||
14 | #include "linux/mutex.h" | ||
15 | #include "chan_user.h" | ||
16 | #include "mconsole_kern.h" | ||
17 | |||
18 | /* There's only one modifiable field in this - .mc.list */ | ||
19 | struct line_driver { | ||
20 | const char *name; | ||
21 | const char *device_name; | ||
22 | const short major; | ||
23 | const short minor_start; | ||
24 | const short type; | ||
25 | const short subtype; | ||
26 | const int read_irq; | ||
27 | const char *read_irq_name; | ||
28 | const int write_irq; | ||
29 | const char *write_irq_name; | ||
30 | struct mc_device mc; | ||
31 | }; | ||
32 | |||
33 | struct line { | ||
34 | struct tty_struct *tty; | ||
35 | spinlock_t count_lock; | ||
36 | unsigned long count; | ||
37 | int valid; | ||
38 | |||
39 | char *init_str; | ||
40 | int init_pri; | ||
41 | struct list_head chan_list; | ||
42 | |||
43 | /*This lock is actually, mostly, local to*/ | ||
44 | spinlock_t lock; | ||
45 | int throttled; | ||
46 | /* Yes, this is a real circular buffer. | ||
47 | * XXX: And this should become a struct kfifo! | ||
48 | * | ||
49 | * buffer points to a buffer allocated on demand, of length | ||
50 | * LINE_BUFSIZE, head to the start of the ring, tail to the end.*/ | ||
51 | char *buffer; | ||
52 | char *head; | ||
53 | char *tail; | ||
54 | |||
55 | int sigio; | ||
56 | struct delayed_work task; | ||
57 | const struct line_driver *driver; | ||
58 | int have_irq; | ||
59 | }; | ||
60 | |||
61 | #define LINE_INIT(str, d) \ | ||
62 | { .count_lock = __SPIN_LOCK_UNLOCKED((str).count_lock), \ | ||
63 | .init_str = str, \ | ||
64 | .init_pri = INIT_STATIC, \ | ||
65 | .valid = 1, \ | ||
66 | .lock = __SPIN_LOCK_UNLOCKED((str).lock), \ | ||
67 | .driver = d } | ||
68 | |||
69 | extern void line_close(struct tty_struct *tty, struct file * filp); | ||
70 | extern int line_open(struct line *lines, struct tty_struct *tty); | ||
71 | extern int line_setup(struct line *lines, unsigned int sizeof_lines, | ||
72 | char *init, char **error_out); | ||
73 | extern int line_write(struct tty_struct *tty, const unsigned char *buf, | ||
74 | int len); | ||
75 | extern int line_put_char(struct tty_struct *tty, unsigned char ch); | ||
76 | extern void line_set_termios(struct tty_struct *tty, struct ktermios * old); | ||
77 | extern int line_chars_in_buffer(struct tty_struct *tty); | ||
78 | extern void line_flush_buffer(struct tty_struct *tty); | ||
79 | extern void line_flush_chars(struct tty_struct *tty); | ||
80 | extern int line_write_room(struct tty_struct *tty); | ||
81 | extern int line_ioctl(struct tty_struct *tty, unsigned int cmd, | ||
82 | unsigned long arg); | ||
83 | extern void line_throttle(struct tty_struct *tty); | ||
84 | extern void line_unthrottle(struct tty_struct *tty); | ||
85 | |||
86 | extern char *add_xterm_umid(char *base); | ||
87 | extern int line_setup_irq(int fd, int input, int output, struct line *line, | ||
88 | void *data); | ||
89 | extern void line_close_chan(struct line *line); | ||
90 | extern struct tty_driver *register_lines(struct line_driver *line_driver, | ||
91 | const struct tty_operations *driver, | ||
92 | struct line *lines, int nlines); | ||
93 | extern void lines_init(struct line *lines, int nlines, struct chan_opts *opts); | ||
94 | extern void close_lines(struct line *lines, int nlines); | ||
95 | |||
96 | extern int line_config(struct line *lines, unsigned int sizeof_lines, | ||
97 | char *str, const struct chan_opts *opts, | ||
98 | char **error_out); | ||
99 | extern int line_id(char **str, int *start_out, int *end_out); | ||
100 | extern int line_remove(struct line *lines, unsigned int sizeof_lines, int n, | ||
101 | char **error_out); | ||
102 | extern int line_get_config(char *dev, struct line *lines, | ||
103 | unsigned int sizeof_lines, char *str, | ||
104 | int size, char **error_out); | ||
105 | |||
106 | #endif | ||
diff --git a/arch/um/include/shared/mconsole.h b/arch/um/include/shared/mconsole.h new file mode 100644 index 00000000000..c139ae1d682 --- /dev/null +++ b/arch/um/include/shared/mconsole.h | |||
@@ -0,0 +1,98 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org) | ||
3 | * Copyright (C) 2001 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
4 | * Licensed under the GPL | ||
5 | */ | ||
6 | |||
7 | #ifndef __MCONSOLE_H__ | ||
8 | #define __MCONSOLE_H__ | ||
9 | |||
10 | #ifndef __KERNEL__ | ||
11 | #include <stdint.h> | ||
12 | #define u32 uint32_t | ||
13 | #endif | ||
14 | |||
15 | #include "sysdep/ptrace.h" | ||
16 | |||
17 | #define MCONSOLE_MAGIC (0xcafebabe) | ||
18 | #define MCONSOLE_MAX_DATA (512) | ||
19 | #define MCONSOLE_VERSION 2 | ||
20 | |||
21 | struct mconsole_request { | ||
22 | u32 magic; | ||
23 | u32 version; | ||
24 | u32 len; | ||
25 | char data[MCONSOLE_MAX_DATA]; | ||
26 | }; | ||
27 | |||
28 | struct mconsole_reply { | ||
29 | u32 err; | ||
30 | u32 more; | ||
31 | u32 len; | ||
32 | char data[MCONSOLE_MAX_DATA]; | ||
33 | }; | ||
34 | |||
35 | struct mconsole_notify { | ||
36 | u32 magic; | ||
37 | u32 version; | ||
38 | enum { MCONSOLE_SOCKET, MCONSOLE_PANIC, MCONSOLE_HANG, | ||
39 | MCONSOLE_USER_NOTIFY } type; | ||
40 | u32 len; | ||
41 | char data[MCONSOLE_MAX_DATA]; | ||
42 | }; | ||
43 | |||
44 | struct mc_request; | ||
45 | |||
46 | enum mc_context { MCONSOLE_INTR, MCONSOLE_PROC }; | ||
47 | |||
48 | struct mconsole_command | ||
49 | { | ||
50 | char *command; | ||
51 | void (*handler)(struct mc_request *req); | ||
52 | enum mc_context context; | ||
53 | }; | ||
54 | |||
55 | struct mc_request | ||
56 | { | ||
57 | int len; | ||
58 | int as_interrupt; | ||
59 | |||
60 | int originating_fd; | ||
61 | unsigned int originlen; | ||
62 | unsigned char origin[128]; /* sockaddr_un */ | ||
63 | |||
64 | struct mconsole_request request; | ||
65 | struct mconsole_command *cmd; | ||
66 | struct uml_pt_regs regs; | ||
67 | }; | ||
68 | |||
69 | extern char mconsole_socket_name[]; | ||
70 | |||
71 | extern int mconsole_unlink_socket(void); | ||
72 | extern int mconsole_reply_len(struct mc_request *req, const char *reply, | ||
73 | int len, int err, int more); | ||
74 | extern int mconsole_reply(struct mc_request *req, const char *str, int err, | ||
75 | int more); | ||
76 | |||
77 | extern void mconsole_version(struct mc_request *req); | ||
78 | extern void mconsole_help(struct mc_request *req); | ||
79 | extern void mconsole_halt(struct mc_request *req); | ||
80 | extern void mconsole_reboot(struct mc_request *req); | ||
81 | extern void mconsole_config(struct mc_request *req); | ||
82 | extern void mconsole_remove(struct mc_request *req); | ||
83 | extern void mconsole_sysrq(struct mc_request *req); | ||
84 | extern void mconsole_cad(struct mc_request *req); | ||
85 | extern void mconsole_stop(struct mc_request *req); | ||
86 | extern void mconsole_go(struct mc_request *req); | ||
87 | extern void mconsole_log(struct mc_request *req); | ||
88 | extern void mconsole_proc(struct mc_request *req); | ||
89 | extern void mconsole_stack(struct mc_request *req); | ||
90 | |||
91 | extern int mconsole_get_request(int fd, struct mc_request *req); | ||
92 | extern int mconsole_notify(char *sock_name, int type, const void *data, | ||
93 | int len); | ||
94 | extern char *mconsole_notify_socket(void); | ||
95 | extern void lock_notify(void); | ||
96 | extern void unlock_notify(void); | ||
97 | |||
98 | #endif | ||
diff --git a/arch/um/include/shared/mconsole_kern.h b/arch/um/include/shared/mconsole_kern.h new file mode 100644 index 00000000000..d2fe07e7895 --- /dev/null +++ b/arch/um/include/shared/mconsole_kern.h | |||
@@ -0,0 +1,52 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __MCONSOLE_KERN_H__ | ||
7 | #define __MCONSOLE_KERN_H__ | ||
8 | |||
9 | #include "linux/list.h" | ||
10 | #include "mconsole.h" | ||
11 | |||
12 | struct mconsole_entry { | ||
13 | struct list_head list; | ||
14 | struct mc_request request; | ||
15 | }; | ||
16 | |||
17 | /* All these methods are called in process context. */ | ||
18 | struct mc_device { | ||
19 | struct list_head list; | ||
20 | char *name; | ||
21 | int (*config)(char *, char **); | ||
22 | int (*get_config)(char *, char *, int, char **); | ||
23 | int (*id)(char **, int *, int *); | ||
24 | int (*remove)(int, char **); | ||
25 | }; | ||
26 | |||
27 | #define CONFIG_CHUNK(str, size, current, chunk, end) \ | ||
28 | do { \ | ||
29 | current += strlen(chunk); \ | ||
30 | if(current >= size) \ | ||
31 | str = NULL; \ | ||
32 | if(str != NULL){ \ | ||
33 | strcpy(str, chunk); \ | ||
34 | str += strlen(chunk); \ | ||
35 | } \ | ||
36 | if(end) \ | ||
37 | current++; \ | ||
38 | } while(0) | ||
39 | |||
40 | #ifdef CONFIG_MCONSOLE | ||
41 | |||
42 | extern void mconsole_register_dev(struct mc_device *new); | ||
43 | |||
44 | #else | ||
45 | |||
46 | static inline void mconsole_register_dev(struct mc_device *new) | ||
47 | { | ||
48 | } | ||
49 | |||
50 | #endif | ||
51 | |||
52 | #endif | ||
diff --git a/arch/um/include/shared/mem_kern.h b/arch/um/include/shared/mem_kern.h new file mode 100644 index 00000000000..69be0fd0ce4 --- /dev/null +++ b/arch/um/include/shared/mem_kern.h | |||
@@ -0,0 +1,20 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2003 Jeff Dike (jdike@addtoit.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __MEM_KERN_H__ | ||
7 | #define __MEM_KERN_H__ | ||
8 | |||
9 | #include "linux/list.h" | ||
10 | #include "linux/types.h" | ||
11 | |||
12 | struct remapper { | ||
13 | struct list_head list; | ||
14 | int (*proc)(int, unsigned long, int, __u64); | ||
15 | }; | ||
16 | |||
17 | extern void register_remapper(struct remapper *info); | ||
18 | |||
19 | #endif | ||
20 | |||
diff --git a/arch/um/include/shared/process.h b/arch/um/include/shared/process.h new file mode 100644 index 00000000000..bb873a51262 --- /dev/null +++ b/arch/um/include/shared/process.h | |||
@@ -0,0 +1,17 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 - 2008 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __PROCESS_H__ | ||
7 | #define __PROCESS_H__ | ||
8 | |||
9 | #include <signal.h> | ||
10 | |||
11 | /* Copied from linux/compiler-gcc.h since we can't include it directly */ | ||
12 | #define barrier() __asm__ __volatile__("": : :"memory") | ||
13 | |||
14 | extern void sig_handler(int sig, struct sigcontext *sc); | ||
15 | extern void alarm_handler(int sig, struct sigcontext *sc); | ||
16 | |||
17 | #endif | ||
diff --git a/arch/um/include/shared/skas_ptregs.h b/arch/um/include/shared/skas_ptregs.h new file mode 100644 index 00000000000..73db19e9c07 --- /dev/null +++ b/arch/um/include/shared/skas_ptregs.h | |||
@@ -0,0 +1,6 @@ | |||
1 | #ifndef __SKAS_PT_REGS_ | ||
2 | #define __SKAS_PT_REGS_ | ||
3 | |||
4 | #include <user_constants.h> | ||
5 | |||
6 | #endif | ||
diff --git a/arch/um/include/shared/syscall.h b/arch/um/include/shared/syscall.h new file mode 100644 index 00000000000..dda1df901a0 --- /dev/null +++ b/arch/um/include/shared/syscall.h | |||
@@ -0,0 +1,12 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __SYSCALL_USER_H | ||
7 | #define __SYSCALL_USER_H | ||
8 | |||
9 | extern int record_syscall_start(int syscall); | ||
10 | extern void record_syscall_end(int index, long result); | ||
11 | |||
12 | #endif | ||
diff --git a/arch/um/include/shared/sysrq.h b/arch/um/include/shared/sysrq.h new file mode 100644 index 00000000000..c8d332b56b9 --- /dev/null +++ b/arch/um/include/shared/sysrq.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __UM_SYSRQ_H | ||
2 | #define __UM_SYSRQ_H | ||
3 | |||
4 | struct task_struct; | ||
5 | extern void show_trace(struct task_struct* task, unsigned long *stack); | ||
6 | |||
7 | #endif | ||
diff --git a/arch/um/include/shared/task.h b/arch/um/include/shared/task.h new file mode 100644 index 00000000000..3fe726b3cf4 --- /dev/null +++ b/arch/um/include/shared/task.h | |||
@@ -0,0 +1,9 @@ | |||
1 | #ifndef __TASK_H | ||
2 | #define __TASK_H | ||
3 | |||
4 | #include <kern_constants.h> | ||
5 | |||
6 | #define TASK_REGS(task) ((struct uml_pt_regs *) &(((char *) (task))[HOST_TASK_REGS])) | ||
7 | #define TASK_PID(task) *((int *) &(((char *) (task))[HOST_TASK_PID])) | ||
8 | |||
9 | #endif | ||
diff --git a/arch/um/include/shared/tlb.h b/arch/um/include/shared/tlb.h new file mode 100644 index 00000000000..ecd2265b301 --- /dev/null +++ b/arch/um/include/shared/tlb.h | |||
@@ -0,0 +1,15 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __TLB_H__ | ||
7 | #define __TLB_H__ | ||
8 | |||
9 | #include "um_mmu.h" | ||
10 | |||
11 | extern void force_flush_all(void); | ||
12 | extern int flush_tlb_kernel_range_common(unsigned long start, | ||
13 | unsigned long end); | ||
14 | |||
15 | #endif | ||
diff --git a/arch/um/include/shared/ubd_user.h b/arch/um/include/shared/ubd_user.h new file mode 100644 index 00000000000..3845051f1b1 --- /dev/null +++ b/arch/um/include/shared/ubd_user.h | |||
@@ -0,0 +1,16 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2000 Jeff Dike (jdike@karaya.com) | ||
3 | * Copyright (C) 2001 RidgeRun, Inc (glonnon@ridgerun.com) | ||
4 | * Licensed under the GPL | ||
5 | */ | ||
6 | |||
7 | #ifndef __UM_UBD_USER_H | ||
8 | #define __UM_UBD_USER_H | ||
9 | |||
10 | extern void ignore_sigwinch_sig(void); | ||
11 | extern int start_io_thread(unsigned long sp, int *fds_out); | ||
12 | extern int io_thread(void *arg); | ||
13 | extern int kernel_fd; | ||
14 | |||
15 | #endif | ||
16 | |||
diff --git a/arch/um/include/shared/um_mmu.h b/arch/um/include/shared/um_mmu.h new file mode 100644 index 00000000000..b1a7e47d102 --- /dev/null +++ b/arch/um/include/shared/um_mmu.h | |||
@@ -0,0 +1,24 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __ARCH_UM_MMU_H | ||
7 | #define __ARCH_UM_MMU_H | ||
8 | |||
9 | #include "mm_id.h" | ||
10 | #include "ldt.h" | ||
11 | |||
12 | typedef struct mm_context { | ||
13 | struct mm_id id; | ||
14 | struct uml_ldt ldt; | ||
15 | struct page **stub_pages; | ||
16 | } mm_context_t; | ||
17 | |||
18 | extern void __switch_mm(struct mm_id * mm_idp); | ||
19 | |||
20 | /* Avoid tangled inclusion with asm/ldt.h */ | ||
21 | extern long init_new_ldt(struct mm_context *to_mm, struct mm_context *from_mm); | ||
22 | extern void free_ldt(struct mm_context *mm); | ||
23 | |||
24 | #endif | ||
diff --git a/arch/um/include/shared/um_uaccess.h b/arch/um/include/shared/um_uaccess.h new file mode 100644 index 00000000000..45c04999d67 --- /dev/null +++ b/arch/um/include/shared/um_uaccess.h | |||
@@ -0,0 +1,97 @@ | |||
1 | /* | ||
2 | * Copyright (C) 2002 - 2007 Jeff Dike (jdike@{addtoit,linux.intel}.com) | ||
3 | * Licensed under the GPL | ||
4 | */ | ||
5 | |||
6 | #ifndef __ARCH_UM_UACCESS_H | ||
7 | #define __ARCH_UM_UACCESS_H | ||
8 | |||
9 | #include <asm/elf.h> | ||
10 | #include <asm/fixmap.h> | ||
11 | #include "sysdep/archsetjmp.h" | ||
12 | |||
13 | #define __under_task_size(addr, size) \ | ||
14 | (((unsigned long) (addr) < TASK_SIZE) && \ | ||
15 | (((unsigned long) (addr) + (size)) < TASK_SIZE)) | ||
16 | |||
17 | #define __access_ok_vsyscall(type, addr, size) \ | ||
18 | ((type == VERIFY_READ) && \ | ||
19 | ((unsigned long) (addr) >= FIXADDR_USER_START) && \ | ||
20 | ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \ | ||
21 | ((unsigned long) (addr) + (size) >= (unsigned long)(addr))) | ||
22 | |||
23 | #define __addr_range_nowrap(addr, size) \ | ||
24 | ((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) | ||
25 | |||
26 | #define access_ok(type, addr, size) \ | ||
27 | (__addr_range_nowrap(addr, size) && \ | ||
28 | (__under_task_size(addr, size) || \ | ||
29 | __access_ok_vsyscall(type, addr, size) || \ | ||
30 | segment_eq(get_fs(), KERNEL_DS))) | ||
31 | |||
32 | extern int copy_from_user(void *to, const void __user *from, int n); | ||
33 | extern int copy_to_user(void __user *to, const void *from, int n); | ||
34 | |||
35 | extern int __do_copy_to_user(void *to, const void *from, int n, | ||
36 | void **fault_addr, jmp_buf **fault_catcher); | ||
37 | |||
38 | /* | ||
39 | * strncpy_from_user: - Copy a NUL terminated string from userspace. | ||
40 | * @dst: Destination address, in kernel space. This buffer must be at | ||
41 | * least @count bytes long. | ||
42 | * @src: Source address, in user space. | ||
43 | * @count: Maximum number of bytes to copy, including the trailing NUL. | ||
44 | * | ||
45 | * Copies a NUL-terminated string from userspace to kernel space. | ||
46 | * | ||
47 | * On success, returns the length of the string (not including the trailing | ||
48 | * NUL). | ||
49 | * | ||
50 | * If access to userspace fails, returns -EFAULT (some data may have been | ||
51 | * copied). | ||
52 | * | ||
53 | * If @count is smaller than the length of the string, copies @count bytes | ||
54 | * and returns @count. | ||
55 | */ | ||
56 | |||
57 | extern int strncpy_from_user(char *dst, const char __user *src, int count); | ||
58 | |||
59 | /* | ||
60 | * __clear_user: - Zero a block of memory in user space, with less checking. | ||
61 | * @to: Destination address, in user space. | ||
62 | * @n: Number of bytes to zero. | ||
63 | * | ||
64 | * Zero a block of memory in user space. Caller must check | ||
65 | * the specified block with access_ok() before calling this function. | ||
66 | * | ||
67 | * Returns number of bytes that could not be cleared. | ||
68 | * On success, this will be zero. | ||
69 | */ | ||
70 | extern int __clear_user(void __user *mem, int len); | ||
71 | |||
72 | /* | ||
73 | * clear_user: - Zero a block of memory in user space. | ||
74 | * @to: Destination address, in user space. | ||
75 | * @n: Number of bytes to zero. | ||
76 | * | ||
77 | * Zero a block of memory in user space. | ||
78 | * | ||
79 | * Returns number of bytes that could not be cleared. | ||
80 | * On success, this will be zero. | ||
81 | */ | ||
82 | extern int clear_user(void __user *mem, int len); | ||
83 | |||
84 | /* | ||
85 | * strlen_user: - Get the size of a string in user space. | ||
86 | * @str: The string to measure. | ||
87 | * @n: The maximum valid length | ||
88 | * | ||
89 | * Get the size of a NUL-terminated string in user space. | ||
90 | * | ||
91 | * Returns the size of the string INCLUDING the terminating NUL. | ||
92 | * On exception, returns 0. | ||
93 | * If the string is too long, returns a value greater than @n. | ||
94 | */ | ||
95 | extern int strnlen_user(const void __user *str, int len); | ||
96 | |||
97 | #endif | ||