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} |