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:

--- 12 unchanged lines hidden (view full) ---

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:

--- 12 unchanged lines hidden (view full) ---

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>

--- 17 unchanged lines hidden (view full) ---

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>

--- 17 unchanged lines hidden (view full) ---

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}

--- 4 unchanged lines hidden (view full) ---

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}

--- 4 unchanged lines hidden (view full) ---

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

--- 35 unchanged lines hidden (view full) ---

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

--- 35 unchanged lines hidden (view full) ---

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);

--- 4 unchanged lines hidden (view full) ---

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);

--- 4 unchanged lines hidden (view full) ---

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 */

--- 20 unchanged lines hidden (view full) ---

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 */

--- 20 unchanged lines hidden (view full) ---

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}