xref: /netbsd-src/sys/arch/usermode/include/thunk.h (revision a5847cc334d9a7029f6352b847e9e8d71a0f9e0c)
1 /* $NetBSD: thunk.h,v 1.34 2011/09/15 12:23:51 reinoud Exp $ */
2 
3 /*-
4  * Copyright (c) 2011 Jared D. McNeill <jmcneill@invisible.ca>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26  * POSSIBILITY OF SUCH DAMAGE.
27  */
28 
29 #ifndef _ARCH_USERMODE_INCLUDE_THUNK_H
30 #define _ARCH_USERMODE_INCLUDE_THUNK_H
31 
32 #include <sys/types.h>
33 #include <sys/time.h>
34 #include <sys/stat.h>
35 #include <sys/fcntl.h>
36 #include <sys/ucontext.h>
37 #include <sys/signal.h>
38 
39 struct thunk_timeval {
40 	int64_t tv_sec;
41 	int32_t tv_usec;
42 };
43 
44 struct thunk_itimerval {
45 	struct thunk_timeval it_interval;
46 	struct thunk_timeval it_value;
47 };
48 
49 struct thunk_termios {
50 	uint32_t c_iflag;
51 	uint32_t c_oflag;
52 	uint32_t c_cflag;
53 	uint32_t c_lflag;
54 	uint8_t c_cc[20];
55 	int32_t c_ispeed;
56 	int32_t c_ospeed;
57 };
58 
59 #define THUNK_MAP_ANON		0x0001
60 #define THUNK_MAP_FIXED		0x0002
61 #define THUNK_MAP_FILE		0x0004
62 #define THUNK_MAP_SHARED	0x0010
63 #define THUNK_MAP_PRIVATE	0x0020
64 
65 #define THUNK_PROT_NONE		0x00
66 #define THUNK_PROT_READ		0x01
67 #define THUNK_PROT_WRITE	0x02
68 #define THUNK_PROT_EXEC		0x04
69 
70 struct aiocb;
71 
72 void	dprintf_debug(const char *fmt, ...) __attribute__((__format__(__printf__, 1, 2)));
73 
74 int	thunk_setitimer(int, const struct thunk_itimerval *, struct thunk_itimerval *);
75 int	thunk_gettimeofday(struct thunk_timeval *, void *);
76 unsigned int thunk_getcounter(void);
77 long	thunk_clock_getres_monotonic(void);
78 int	thunk_usleep(useconds_t);
79 
80 void	thunk_exit(int);
81 void	thunk_abort(void);
82 
83 int	thunk_geterrno(void);
84 void	thunk_seterrno(int err);
85 
86 int	thunk_getcontext(ucontext_t *);
87 int	thunk_setcontext(const ucontext_t *);
88 void	thunk_makecontext(ucontext_t *ucp, void (*func)(void),
89 		int nargs, void *arg1, void *arg2, void *arg3);
90 int	thunk_swapcontext(ucontext_t *, ucontext_t *);
91 
92 int	thunk_tcgetattr(int, struct thunk_termios *);
93 int	thunk_tcsetattr(int, int, const struct thunk_termios *);
94 
95 int	thunk_getchar(void);
96 void	thunk_putchar(int);
97 
98 int	thunk_execv(const char *, char * const []);
99 
100 int	thunk_open(const char *, int, mode_t);
101 int	thunk_fstat_getsize(int, ssize_t *, ssize_t *);
102 ssize_t	thunk_pread(int, void *, size_t, off_t);
103 ssize_t	thunk_pwrite(int, const void *, size_t, off_t);
104 int	thunk_fsync(int);
105 int	thunk_mkstemp(char *);
106 int	thunk_unlink(const char *);
107 
108 int	thunk_sigaction(int, const struct sigaction *, struct sigaction *);
109 int	thunk_sigaltstack(const stack_t *, stack_t *);
110 void	thunk_signal(int, void (*)(int));
111 int	thunk_sigblock(int);
112 int	thunk_sigunblock(int);
113 int	thunk_sigemptyset(sigset_t *sa_mask);
114 void	thunk_sigaddset(sigset_t *sa_mask, int sig);
115 int	thunk_atexit(void (*function)(void));
116 
117 int	thunk_aio_read(struct aiocb *);
118 int	thunk_aio_write(struct aiocb *);
119 int	thunk_aio_error(const struct aiocb *);
120 int	thunk_aio_return(struct aiocb *);
121 
122 void *	thunk_malloc(size_t len);
123 void 	thunk_free(void *addr);
124 void *	thunk_sbrk(intptr_t len);
125 void *	thunk_mmap(void *addr, size_t len, int prot, int flags, int fd, off_t offset);
126 int	thunk_munmap(void *addr, size_t len);
127 int	thunk_mprotect(void *addr, size_t len, int prot);
128 int	thunk_posix_memalign(void **, size_t, size_t);
129 
130 char *	thunk_getenv(const char *);
131 vaddr_t	thunk_get_vm_min_address(void);
132 
133 int	thunk_sdl_init(unsigned int, unsigned int, unsigned short);
134 void *	thunk_sdl_getfb(size_t);
135 int	thunk_sdl_getchar(void);
136 
137 #endif /* !_ARCH_USERMODE_INCLUDE_THUNK_H */
138