Deleted Added
full compact
ibcs2_xenix.c (8222) ibcs2_xenix.c (8876)
1/*-
2 * Copyright (c) 1994 Sean Eric Fagan
3 * Copyright (c) 1994 S�ren Schmidt
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer
11 * in this position and unchanged.
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 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software withough specific prior written permission
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
1/*-
2 * Copyright (c) 1994 Sean Eric Fagan
3 * Copyright (c) 1994 S�ren Schmidt
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer
11 * in this position and unchanged.
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 * 3. The name of the author may not be used to endorse or promote products
16 * derived from this software withough specific prior written permission
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * $Id: ibcs2_xenix.c,v 1.2 1995/02/03 21:31:35 bde Exp $
29 * $Id: ibcs2_xenix.c,v 1.4 1995/05/02 13:14:59 ache Exp $
30 */
31
32#include <i386/ibcs2/ibcs2.h>
33#include <sys/param.h>
34#include <sys/proc.h>
35#include <sys/exec.h>
36#include <sys/sysent.h>
37#include <sys/errno.h>
38#include <sys/ioctl.h>
39#include <sys/signal.h>
40#include <sys/syslimits.h>
41#include <sys/unistd.h>
42#include <sys/timeb.h>
43#include <vm/vm.h>
44#include <machine/cpu.h>
45#include <machine/psl.h>
46#include <machine/reg.h>
47
48struct ibcs2_sco_chsize_args {
49 int fd;
50 ibcs2_off_t size;
51};
52
53static int
54sco_chsize(struct proc *p, struct ibcs2_sco_chsize_args *args, int *retval)
55{
56 struct ftruncate_args {
57 int fd;
58 int pad;
59 off_t length;
60 } tmp;
61
62 if (ibcs2_trace & IBCS2_TRACE_XENIX)
30 */
31
32#include <i386/ibcs2/ibcs2.h>
33#include <sys/param.h>
34#include <sys/proc.h>
35#include <sys/exec.h>
36#include <sys/sysent.h>
37#include <sys/errno.h>
38#include <sys/ioctl.h>
39#include <sys/signal.h>
40#include <sys/syslimits.h>
41#include <sys/unistd.h>
42#include <sys/timeb.h>
43#include <vm/vm.h>
44#include <machine/cpu.h>
45#include <machine/psl.h>
46#include <machine/reg.h>
47
48struct ibcs2_sco_chsize_args {
49 int fd;
50 ibcs2_off_t size;
51};
52
53static int
54sco_chsize(struct proc *p, struct ibcs2_sco_chsize_args *args, int *retval)
55{
56 struct ftruncate_args {
57 int fd;
58 int pad;
59 off_t length;
60 } tmp;
61
62 if (ibcs2_trace & IBCS2_TRACE_XENIX)
63 printf("IBCS2: 'cxenix chsize'\n");
63 printf("IBCS2: 'cxenix chsize'\n");
64 tmp.fd = args->fd;
65 tmp.pad = 0;
66 tmp.length = args->size;
67 return ftruncate(p, &tmp, retval);
68}
69
70struct ibcs2_sco_ftime_args {
71 struct timeb *tp;
72};
73
74static int
75sco_ftime(struct proc *p, struct ibcs2_sco_ftime_args *args, int *retval)
76{
77 struct timeval atv;
78 extern struct timezone tz;
79 struct timeb tb;
80
81 if (ibcs2_trace & IBCS2_TRACE_XENIX)
64 tmp.fd = args->fd;
65 tmp.pad = 0;
66 tmp.length = args->size;
67 return ftruncate(p, &tmp, retval);
68}
69
70struct ibcs2_sco_ftime_args {
71 struct timeb *tp;
72};
73
74static int
75sco_ftime(struct proc *p, struct ibcs2_sco_ftime_args *args, int *retval)
76{
77 struct timeval atv;
78 extern struct timezone tz;
79 struct timeb tb;
80
81 if (ibcs2_trace & IBCS2_TRACE_XENIX)
82 printf("IBCS2: 'cxenix ftime'\n");
82 printf("IBCS2: 'cxenix ftime'\n");
83 microtime(&atv);
84 tb.time = atv.tv_sec;
85 tb.millitm = atv.tv_usec / 1000;
86 tb.timezone = tz.tz_minuteswest;
87 tb.dstflag = tz.tz_dsttime != DST_NONE;
88
89 return copyout((caddr_t)&tb, (caddr_t)args->tp, sizeof(struct timeb));
90}
91
92struct ibcs2_sco_nap_args {
93 long time;
94};
95
96static int
97sco_nap(struct proc *p, struct ibcs2_sco_nap_args *args, int *retval)
98{
99 long period;
100 extern int hz;
101
102 if (ibcs2_trace & IBCS2_TRACE_XENIX)
83 microtime(&atv);
84 tb.time = atv.tv_sec;
85 tb.millitm = atv.tv_usec / 1000;
86 tb.timezone = tz.tz_minuteswest;
87 tb.dstflag = tz.tz_dsttime != DST_NONE;
88
89 return copyout((caddr_t)&tb, (caddr_t)args->tp, sizeof(struct timeb));
90}
91
92struct ibcs2_sco_nap_args {
93 long time;
94};
95
96static int
97sco_nap(struct proc *p, struct ibcs2_sco_nap_args *args, int *retval)
98{
99 long period;
100 extern int hz;
101
102 if (ibcs2_trace & IBCS2_TRACE_XENIX)
103 printf("IBCS2: 'cxenix nap %d ms'\n", args->time);
103 printf("IBCS2: 'cxenix nap %d ms'\n", args->time);
104 period = (long)args->time / (1000/hz);
105 if (period)
104 period = (long)args->time / (1000/hz);
105 if (period)
106 while (tsleep(&period, PUSER, "nap", period)
106 while (tsleep(&period, PUSER, "nap", period)
107 != EWOULDBLOCK) ;
108 return 0;
109}
110
111struct ibcs2_sco_rdchk_args {
112 int fd;
113};
114
115static int
116sco_rdchk(struct proc *p, struct ibcs2_sco_rdchk_args *args, int *retval)
117{
118 struct ioctl_arg {
119 int fd;
120 int cmd;
121 caddr_t arg;
122 } tmp;
123 int error;
124
125 if (ibcs2_trace & IBCS2_TRACE_XENIX)
126 printf("IBCS2: 'cxenix rdchk'\n");
127 tmp.fd = args->fd;
128 tmp.cmd = FIONREAD;
129 tmp.arg = (caddr_t)UA_ALLOC();
130 error = ioctl(p, &tmp, retval);
131 if (!error)
132 *retval = *retval <= 0 ? 0 : 1;
133 return error;
134}
135
136struct ibcs2_sco_utsname_args {
137 long addr;
138};
139
140static int
141sco_utsname(struct proc *p, struct ibcs2_sco_utsname_args *args, int *retval)
142{
143 struct ibcs2_sco_utsname {
144 char sysname[9];
145 char nodename[9];
146 char release[16];
147 char kernelid[20];
148 char machine[9];
149 char bustype[9];
150 char sysserial[10];
151 unsigned short sysorigin;
152 unsigned short sysoem;
153 char numusers[9];
154 unsigned short numcpu;
155 } ibcs2_sco_uname;
156 extern char ostype[], hostname[], osrelease[], version[], machine[];
157
107 != EWOULDBLOCK) ;
108 return 0;
109}
110
111struct ibcs2_sco_rdchk_args {
112 int fd;
113};
114
115static int
116sco_rdchk(struct proc *p, struct ibcs2_sco_rdchk_args *args, int *retval)
117{
118 struct ioctl_arg {
119 int fd;
120 int cmd;
121 caddr_t arg;
122 } tmp;
123 int error;
124
125 if (ibcs2_trace & IBCS2_TRACE_XENIX)
126 printf("IBCS2: 'cxenix rdchk'\n");
127 tmp.fd = args->fd;
128 tmp.cmd = FIONREAD;
129 tmp.arg = (caddr_t)UA_ALLOC();
130 error = ioctl(p, &tmp, retval);
131 if (!error)
132 *retval = *retval <= 0 ? 0 : 1;
133 return error;
134}
135
136struct ibcs2_sco_utsname_args {
137 long addr;
138};
139
140static int
141sco_utsname(struct proc *p, struct ibcs2_sco_utsname_args *args, int *retval)
142{
143 struct ibcs2_sco_utsname {
144 char sysname[9];
145 char nodename[9];
146 char release[16];
147 char kernelid[20];
148 char machine[9];
149 char bustype[9];
150 char sysserial[10];
151 unsigned short sysorigin;
152 unsigned short sysoem;
153 char numusers[9];
154 unsigned short numcpu;
155 } ibcs2_sco_uname;
156 extern char ostype[], hostname[], osrelease[], version[], machine[];
157
158 if (ibcs2_trace & IBCS2_TRACE_XENIX)
159 printf("IBCS2: 'cxenix sco_utsname'\n");
158 if (ibcs2_trace & IBCS2_TRACE_XENIX)
159 printf("IBCS2: 'cxenix sco_utsname'\n");
160 bzero(&ibcs2_sco_uname, sizeof(struct ibcs2_sco_utsname));
161 strncpy(ibcs2_sco_uname.sysname, ostype, 8);
162 strncpy(ibcs2_sco_uname.nodename, hostname, 8);
163 strncpy(ibcs2_sco_uname.release, osrelease, 15);
164 strncpy(ibcs2_sco_uname.kernelid, version, 19);
165 strncpy(ibcs2_sco_uname.machine, machine, 8);
166 bcopy("ISA/EISA", ibcs2_sco_uname.bustype, 8);
167 bcopy("no charge", ibcs2_sco_uname.sysserial, 9);
168 bcopy("unlim", ibcs2_sco_uname.numusers, 8);
169 ibcs2_sco_uname.sysorigin = 0xFFFF;
170 ibcs2_sco_uname.sysoem = 0xFFFF;
171 ibcs2_sco_uname.numcpu = 1;
172 return copyout((caddr_t)&ibcs2_sco_uname, (caddr_t)args->addr,
173 sizeof(struct ibcs2_sco_utsname));
174}
175
176int
177ibcs2_cxenix(struct proc *p, void *args, int *retval)
178{
179 struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
160 bzero(&ibcs2_sco_uname, sizeof(struct ibcs2_sco_utsname));
161 strncpy(ibcs2_sco_uname.sysname, ostype, 8);
162 strncpy(ibcs2_sco_uname.nodename, hostname, 8);
163 strncpy(ibcs2_sco_uname.release, osrelease, 15);
164 strncpy(ibcs2_sco_uname.kernelid, version, 19);
165 strncpy(ibcs2_sco_uname.machine, machine, 8);
166 bcopy("ISA/EISA", ibcs2_sco_uname.bustype, 8);
167 bcopy("no charge", ibcs2_sco_uname.sysserial, 9);
168 bcopy("unlim", ibcs2_sco_uname.numusers, 8);
169 ibcs2_sco_uname.sysorigin = 0xFFFF;
170 ibcs2_sco_uname.sysoem = 0xFFFF;
171 ibcs2_sco_uname.numcpu = 1;
172 return copyout((caddr_t)&ibcs2_sco_uname, (caddr_t)args->addr,
173 sizeof(struct ibcs2_sco_utsname));
174}
175
176int
177ibcs2_cxenix(struct proc *p, void *args, int *retval)
178{
179 struct trapframe *tf = (struct trapframe *)p->p_md.md_regs;
180
180
181 switch ((tf->tf_eax & 0xff00) >> 8) {
182
183 case 0x07: /* rdchk */
184 return sco_rdchk(p, args, retval);
185
186 case 0x0a: /* chsize */
187 return sco_chsize(p, args, retval);
188
189 case 0x0b: /* ftime */
190 return sco_ftime(p, args, retval);
191
192 case 0x0c: /* nap */
193 return sco_nap(p, args, retval);
194
195 case 0x15: /* scoinfo (not documented) */
196 *retval = 0;
197 return 0;
198
199 case 0x24: /* select */
181 switch ((tf->tf_eax & 0xff00) >> 8) {
182
183 case 0x07: /* rdchk */
184 return sco_rdchk(p, args, retval);
185
186 case 0x0a: /* chsize */
187 return sco_chsize(p, args, retval);
188
189 case 0x0b: /* ftime */
190 return sco_ftime(p, args, retval);
191
192 case 0x0c: /* nap */
193 return sco_nap(p, args, retval);
194
195 case 0x15: /* scoinfo (not documented) */
196 *retval = 0;
197 return 0;
198
199 case 0x24: /* select */
200 if (ibcs2_trace & IBCS2_TRACE_XENIX)
201 printf("IBCS2: 'cxenix select'\n");
200 if (ibcs2_trace & IBCS2_TRACE_XENIX)
201 printf("IBCS2: 'cxenix select'\n");
202 return select(p, args, retval);
203
204 case 0x25: /* eaccess */
202 return select(p, args, retval);
203
204 case 0x25: /* eaccess */
205 if (ibcs2_trace & IBCS2_TRACE_XENIX)
206 printf("IBCS2: 'cxenix eaccess'\n");
205 if (ibcs2_trace & IBCS2_TRACE_XENIX)
206 printf("IBCS2: 'cxenix eaccess'\n");
207 return ibcs2_access(p, args, retval);
208
209 case 0x27: /* sigaction */
207 return ibcs2_access(p, args, retval);
208
209 case 0x27: /* sigaction */
210 if (ibcs2_trace & IBCS2_TRACE_XENIX)
211 printf("IBCS2: 'cxenix sigaction'\n");
210 if (ibcs2_trace & IBCS2_TRACE_XENIX)
211 printf("IBCS2: 'cxenix sigaction'\n");
212 return ibcs2_sigaction (p, args, retval);
213
214 case 0x28: /* sigprocmask */
212 return ibcs2_sigaction (p, args, retval);
213
214 case 0x28: /* sigprocmask */
215 if (ibcs2_trace & IBCS2_TRACE_XENIX)
216 printf("IBCS2: 'cxenix sigprocmask'\n");
215 if (ibcs2_trace & IBCS2_TRACE_XENIX)
216 printf("IBCS2: 'cxenix sigprocmask'\n");
217 return ibcs2_sigprocmask (p, args, retval);
218
219 case 0x29: /* sigpending */
217 return ibcs2_sigprocmask (p, args, retval);
218
219 case 0x29: /* sigpending */
220 if (ibcs2_trace & IBCS2_TRACE_XENIX)
221 printf("IBCS2: 'cxenix sigpending'\n");
220 if (ibcs2_trace & IBCS2_TRACE_XENIX)
221 printf("IBCS2: 'cxenix sigpending'\n");
222 return ibcs2_sigpending (p, args, retval);
223
224 case 0x2a: /* sigsuspend */
222 return ibcs2_sigpending (p, args, retval);
223
224 case 0x2a: /* sigsuspend */
225 if (ibcs2_trace & IBCS2_TRACE_XENIX)
226 printf("IBCS2: 'cxenix sigsuspend'\n");
225 if (ibcs2_trace & IBCS2_TRACE_XENIX)
226 printf("IBCS2: 'cxenix sigsuspend'\n");
227 return ibcs2_sigsuspend (p, args, retval);
228
229 case 0x2b: /* getgroups */
227 return ibcs2_sigsuspend (p, args, retval);
228
229 case 0x2b: /* getgroups */
230 if (ibcs2_trace & IBCS2_TRACE_XENIX)
231 printf("IBCS2: 'cxenix getgroups'\n");
230 if (ibcs2_trace & IBCS2_TRACE_XENIX)
231 printf("IBCS2: 'cxenix getgroups'\n");
232 return ibcs2_getgroups(p, args, retval);
233
234 case 0x2c: /* setgroups */
232 return ibcs2_getgroups(p, args, retval);
233
234 case 0x2c: /* setgroups */
235 if (ibcs2_trace & IBCS2_TRACE_XENIX)
236 printf("IBCS2: 'cxenix setgroups'\n");
235 if (ibcs2_trace & IBCS2_TRACE_XENIX)
236 printf("IBCS2: 'cxenix setgroups'\n");
237 return ibcs2_setgroups(p, args, retval);
238
239 case 0x2d: { /* sysconf */
240 struct ibcs2_sysconf_args {
241 int num;
242 } *sysconf_args = args;
243
237 return ibcs2_setgroups(p, args, retval);
238
239 case 0x2d: { /* sysconf */
240 struct ibcs2_sysconf_args {
241 int num;
242 } *sysconf_args = args;
243
244 if (ibcs2_trace & IBCS2_TRACE_XENIX)
245 printf("IBCS2: 'cxenix sysconf'");
244 if (ibcs2_trace & IBCS2_TRACE_XENIX)
245 printf("IBCS2: 'cxenix sysconf'");
246 switch (sysconf_args->num) {
247 case 0: /* _SC_ARG_MAX */
248 *retval = (ARG_MAX);
249 break;
250 case 1: /* _SC_CHILD_MAX */
246 switch (sysconf_args->num) {
247 case 0: /* _SC_ARG_MAX */
248 *retval = (ARG_MAX);
249 break;
250 case 1: /* _SC_CHILD_MAX */
251 *retval = (CHILD_MAX);
251 *retval = (CHILD_MAX);
252 break;
253 case 2: /* _SC_CLK_TCK */
254 *retval = (_BSD_CLK_TCK_);
255 break;
256 case 3: /* _SC_NGROUPS_MAX */
257 *retval = (NGROUPS_MAX);
258 break;
259 case 4: /* _SC_OPEN_MAX */
260 *retval = (OPEN_MAX);
261 break;
262 case 5: /* _SC_JOB_CONTROL */
263#ifdef _POSIX_JOB_CONTROL
264 *retval = (1);
265#else
266 *retval = (-1);
267#endif
268 break;
269 case 6: /* _SC_SAVED_IDS */
270#ifdef _POSIX_SAVED_IDS
271 *retval = (1);
272#else
273 *retval = (-1);
274#endif
275 break;
276 case 7: /* _SC_VERSION */
277 *retval = (_POSIX_VERSION);
278 break;
279 default:
280 *retval = -1;
281 return EINVAL;
282 }
283 return 0;
284 }
285
286 case 0x2e: /* pathconf */
287 case 0x2f: /* fpathconf */
252 break;
253 case 2: /* _SC_CLK_TCK */
254 *retval = (_BSD_CLK_TCK_);
255 break;
256 case 3: /* _SC_NGROUPS_MAX */
257 *retval = (NGROUPS_MAX);
258 break;
259 case 4: /* _SC_OPEN_MAX */
260 *retval = (OPEN_MAX);
261 break;
262 case 5: /* _SC_JOB_CONTROL */
263#ifdef _POSIX_JOB_CONTROL
264 *retval = (1);
265#else
266 *retval = (-1);
267#endif
268 break;
269 case 6: /* _SC_SAVED_IDS */
270#ifdef _POSIX_SAVED_IDS
271 *retval = (1);
272#else
273 *retval = (-1);
274#endif
275 break;
276 case 7: /* _SC_VERSION */
277 *retval = (_POSIX_VERSION);
278 break;
279 default:
280 *retval = -1;
281 return EINVAL;
282 }
283 return 0;
284 }
285
286 case 0x2e: /* pathconf */
287 case 0x2f: /* fpathconf */
288 if (ibcs2_trace & IBCS2_TRACE_XENIX)
289 printf("IBCS2: 'cxenix (f)pathconf'\n");
288 if (ibcs2_trace & IBCS2_TRACE_XENIX)
289 printf("IBCS2: 'cxenix (f)pathconf'\n");
290 return ibcs2_pathconf(p, args, retval);
291
292 case 0x30: /* rename */
290 return ibcs2_pathconf(p, args, retval);
291
292 case 0x30: /* rename */
293 if (ibcs2_trace & IBCS2_TRACE_XENIX)
294 printf("IBCS2: 'cxenix rename'\n");
293 if (ibcs2_trace & IBCS2_TRACE_XENIX)
294 printf("IBCS2: 'cxenix rename'\n");
295 return ibcs2_rename(p, args, retval);
296
297 case 0x32: /* sco_utsname */
298 return sco_utsname(p, args, retval);
299
300 case 0x37: /* getitimer */
295 return ibcs2_rename(p, args, retval);
296
297 case 0x32: /* sco_utsname */
298 return sco_utsname(p, args, retval);
299
300 case 0x37: /* getitimer */
301 if (ibcs2_trace & IBCS2_TRACE_XENIX)
302 printf("IBCS2: 'cxenix getitimer'\n");
301 if (ibcs2_trace & IBCS2_TRACE_XENIX)
302 printf("IBCS2: 'cxenix getitimer'\n");
303 return getitimer(p, args, retval);
303 return getitimer(p, args, retval);
304
304
305 case 0x38: /* setitimer */
305 case 0x38: /* setitimer */
306 if (ibcs2_trace & IBCS2_TRACE_XENIX)
307 printf("IBCS2: 'cxenix setitimer'\n");
306 if (ibcs2_trace & IBCS2_TRACE_XENIX)
307 printf("IBCS2: 'cxenix setitimer'\n");
308 return setitimer(p, args, retval);
309
310
311 /* Not implemented yet SORRY */
312 case 0x01: /* xlocking */
308 return setitimer(p, args, retval);
309
310
311 /* Not implemented yet SORRY */
312 case 0x01: /* xlocking */
313 printf("IBCS2: 'cxenix xlocking'");
313 printf("IBCS2: 'cxenix xlocking'");
314 break;
315 case 0x02: /* creatsem */
314 break;
315 case 0x02: /* creatsem */
316 printf("IBCS2: 'cxenix creatsem'");
316 printf("IBCS2: 'cxenix creatsem'");
317 break;
318 case 0x03: /* opensem */
317 break;
318 case 0x03: /* opensem */
319 printf("IBCS2: 'cxenix opensem'");
319 printf("IBCS2: 'cxenix opensem'");
320 break;
321 case 0x04: /* sigsem */
320 break;
321 case 0x04: /* sigsem */
322 printf("IBCS2: 'cxenix sigsem'");
322 printf("IBCS2: 'cxenix sigsem'");
323 break;
324 case 0x05: /* waitsem */
323 break;
324 case 0x05: /* waitsem */
325 printf("IBCS2: 'cxenix waitsem'");
325 printf("IBCS2: 'cxenix waitsem'");
326 break;
327 case 0x06: /* nbwaitsem */
326 break;
327 case 0x06: /* nbwaitsem */
328 printf("IBCS2: 'cxenix nbwaitsem'");
328 printf("IBCS2: 'cxenix nbwaitsem'");
329 break;
330 case 0x0d: /* sdget */
329 break;
330 case 0x0d: /* sdget */
331 printf("IBCS2: 'cxenix sdget'");
331 printf("IBCS2: 'cxenix sdget'");
332 break;
333 case 0x0e: /* sdfree */
332 break;
333 case 0x0e: /* sdfree */
334 printf("IBCS2: 'cxenix sdfree'");
334 printf("IBCS2: 'cxenix sdfree'");
335 break;
336 case 0x0f: /* sdenter */
335 break;
336 case 0x0f: /* sdenter */
337 printf("IBCS2: 'cxenix sdenter'");
337 printf("IBCS2: 'cxenix sdenter'");
338 break;
339 case 0x10: /* sdleave */
338 break;
339 case 0x10: /* sdleave */
340 printf("IBCS2: 'cxenix sdleave'");
340 printf("IBCS2: 'cxenix sdleave'");
341 break;
342 case 0x11: /* sdgetv */
341 break;
342 case 0x11: /* sdgetv */
343 printf("IBCS2: 'cxenix sdgetv'");
343 printf("IBCS2: 'cxenix sdgetv'");
344 break;
345 case 0x12: /* sdwaitv */
344 break;
345 case 0x12: /* sdwaitv */
346 printf("IBCS2: 'cxenix sdwaitv'");
346 printf("IBCS2: 'cxenix sdwaitv'");
347 break;
348 case 0x20: /* proctl */
347 break;
348 case 0x20: /* proctl */
349 printf("IBCS2: 'cxenix proctl'");
349 printf("IBCS2: 'cxenix proctl'");
350 break;
351 case 0x21: /* execseg */
350 break;
351 case 0x21: /* execseg */
352 printf("IBCS2: 'cxenix execseg'");
352 printf("IBCS2: 'cxenix execseg'");
353 break;
354 case 0x22: /* unexecseg */
353 break;
354 case 0x22: /* unexecseg */
355 printf("IBCS2: 'cxenix unexecseg'");
355 printf("IBCS2: 'cxenix unexecseg'");
356 break;
357 case 0x26: /* paccess */
356 break;
357 case 0x26: /* paccess */
358 printf("IBCS2: 'cxenix paccess'");
358 printf("IBCS2: 'cxenix paccess'");
359 break;
360 default:
359 break;
360 default:
361 printf("IBCS2: 'cxenix' function %d(0x%x)",
361 printf("IBCS2: 'cxenix' function %d(0x%x)",
362 tf->tf_eax>>8, tf->tf_eax>>8);
363 break;
364 }
365 printf(" not implemented yet\n");
366 return EINVAL;
367}
362 tf->tf_eax>>8, tf->tf_eax>>8);
363 break;
364 }
365 printf(" not implemented yet\n");
366 return EINVAL;
367}