diff options
-rw-r--r-- | arch/mips64/kernel/ioctl32.c | 264 | ||||
-rw-r--r-- | arch/mips64/kernel/linux32.c | 17 | ||||
-rw-r--r-- | arch/mips64/kernel/scall_64.S | 4 | ||||
-rw-r--r-- | arch/mips64/kernel/scall_o32.S | 6 | ||||
-rw-r--r-- | arch/mips64/kernel/syscall.c | 39 | ||||
-rw-r--r-- | include/asm-mips/unistd.h | 92 | ||||
-rw-r--r-- | include/asm-mips64/unistd.h | 245 |
7 files changed, 464 insertions, 203 deletions
diff --git a/arch/mips64/kernel/ioctl32.c b/arch/mips64/kernel/ioctl32.c index 87174861f..95081b76d 100644 --- a/arch/mips64/kernel/ioctl32.c +++ b/arch/mips64/kernel/ioctl32.c @@ -12,12 +12,17 @@ #include <linux/fs.h> #include <linux/sched.h> #include <linux/mm.h> +#include <linux/mtio.h> #include <linux/init.h> #include <linux/file.h> #include <linux/vt.h> #include <linux/kd.h> #include <linux/netdevice.h> #include <linux/route.h> +#include <linux/hdreg.h> +#include <linux/blkpg.h> +#include <linux/blkdev.h> +#include <linux/elevator.h> #include <asm/types.h> #include <asm/uaccess.h> @@ -283,6 +288,210 @@ static int do_ext2_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) return sys_ioctl(fd, cmd, arg); } +struct hd_geometry32 { + unsigned char heads; + unsigned char sectors; + unsigned short cylinders; + u32 start; +}; + +static int hdio_getgeo(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + mm_segment_t old_fs = get_fs(); + struct hd_geometry geo; + int err; + + set_fs (KERNEL_DS); + err = sys_ioctl(fd, HDIO_GETGEO, (unsigned long)&geo); + set_fs (old_fs); + if (!err) { + err = copy_to_user ((struct hd_geometry32 *)arg, &geo, 4); + err |= __put_user (geo.start, &(((struct hd_geometry32 *)arg)->start)); + } + + return err ? -EFAULT : 0; +} + +static int hdio_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + mm_segment_t old_fs = get_fs(); + unsigned long kval; + unsigned int *uvp; + int error; + + set_fs(KERNEL_DS); + error = sys_ioctl(fd, cmd, (long)&kval); + set_fs(old_fs); + + if (error == 0) { + uvp = (unsigned int *)arg; + if (put_user(kval, uvp)) + error = -EFAULT; + } + + return error; +} + +struct blkpg_ioctl_arg32 { + int op; + int flags; + int datalen; + u32 data; +}; + +static int blkpg_ioctl_trans(unsigned int fd, unsigned int cmd, + struct blkpg_ioctl_arg32 *arg) +{ + struct blkpg_ioctl_arg a; + struct blkpg_partition p; + int err; + mm_segment_t old_fs = get_fs(); + + err = get_user(a.op, &arg->op); + err |= __get_user(a.flags, &arg->flags); + err |= __get_user(a.datalen, &arg->datalen); + err |= __get_user((long)a.data, &arg->data); + if (err) return err; + switch (a.op) { + case BLKPG_ADD_PARTITION: + case BLKPG_DEL_PARTITION: + if (a.datalen < sizeof(struct blkpg_partition)) + return -EINVAL; + if (copy_from_user(&p, a.data, sizeof(struct blkpg_partition))) + return -EFAULT; + a.data = &p; + set_fs (KERNEL_DS); + err = sys_ioctl(fd, cmd, (unsigned long)&a); + set_fs (old_fs); + default: + return -EINVAL; + } + return err; +} + +struct mtget32 { + __u32 mt_type; + __u32 mt_resid; + __u32 mt_dsreg; + __u32 mt_gstat; + __u32 mt_erreg; + __kernel_daddr_t32 mt_fileno; + __kernel_daddr_t32 mt_blkno; +}; +#define MTIOCGET32 _IOR('m', 2, struct mtget32) + +struct mtpos32 { + __u32 mt_blkno; +}; +#define MTIOCPOS32 _IOR('m', 3, struct mtpos32) + +struct mtconfiginfo32 { + __u32 mt_type; + __u32 ifc_type; + __u16 irqnr; + __u16 dmanr; + __u16 port; + __u32 debug; + __u32 have_dens:1; + __u32 have_bsf:1; + __u32 have_fsr:1; + __u32 have_bsr:1; + __u32 have_eod:1; + __u32 have_seek:1; + __u32 have_tell:1; + __u32 have_ras1:1; + __u32 have_ras2:1; + __u32 have_ras3:1; + __u32 have_qfa:1; + __u32 pad1:5; + char reserved[10]; +}; +#define MTIOCGETCONFIG32 _IOR('m', 4, struct mtconfiginfo32) +#define MTIOCSETCONFIG32 _IOW('m', 5, struct mtconfiginfo32) + +static int mt_ioctl_trans(unsigned int fd, unsigned int cmd, unsigned long arg) +{ + mm_segment_t old_fs = get_fs(); + struct mtconfiginfo info; + struct mtget get; + struct mtpos pos; + unsigned long kcmd; + void *karg; + int err = 0; + + switch(cmd) { + case MTIOCPOS32: + kcmd = MTIOCPOS; + karg = &pos; + break; + case MTIOCGET32: + kcmd = MTIOCGET; + karg = &get; + break; + case MTIOCGETCONFIG32: + kcmd = MTIOCGETCONFIG; + karg = &info; + break; + case MTIOCSETCONFIG32: + kcmd = MTIOCSETCONFIG; + karg = &info; + err = __get_user(info.mt_type, &((struct mtconfiginfo32 *)arg)->mt_type); + err |= __get_user(info.ifc_type, &((struct mtconfiginfo32 *)arg)->ifc_type); + err |= __get_user(info.irqnr, &((struct mtconfiginfo32 *)arg)->irqnr); + err |= __get_user(info.dmanr, &((struct mtconfiginfo32 *)arg)->dmanr); + err |= __get_user(info.port, &((struct mtconfiginfo32 *)arg)->port); + err |= __get_user(info.debug, &((struct mtconfiginfo32 *)arg)->debug); + err |= __copy_from_user((char *)&info.debug + sizeof(info.debug), + (char *)&((struct mtconfiginfo32 *)arg)->debug + + sizeof(((struct mtconfiginfo32 *)arg)->debug), sizeof(__u32)); + if (err) + return -EFAULT; + break; + default: + do { + static int count = 0; + if (++count <= 20) + printk("mt_ioctl: Unknown cmd fd(%d) " + "cmd(%08x) arg(%08x)\n", + (int)fd, (unsigned int)cmd, (unsigned int)arg); + } while(0); + return -EINVAL; + } + set_fs (KERNEL_DS); + err = sys_ioctl (fd, kcmd, (unsigned long)karg); + set_fs (old_fs); + if (err) + return err; + switch (cmd) { + case MTIOCPOS32: + err = __put_user(pos.mt_blkno, &((struct mtpos32 *)arg)->mt_blkno); + break; + case MTIOCGET32: + err = __put_user(get.mt_type, &((struct mtget32 *)arg)->mt_type); + err |= __put_user(get.mt_resid, &((struct mtget32 *)arg)->mt_resid); + err |= __put_user(get.mt_dsreg, &((struct mtget32 *)arg)->mt_dsreg); + err |= __put_user(get.mt_gstat, &((struct mtget32 *)arg)->mt_gstat); + err |= __put_user(get.mt_erreg, &((struct mtget32 *)arg)->mt_erreg); + err |= __put_user(get.mt_fileno, &((struct mtget32 *)arg)->mt_fileno); + err |= __put_user(get.mt_blkno, &((struct mtget32 *)arg)->mt_blkno); + break; + case MTIOCGETCONFIG32: + err = __put_user(info.mt_type, &((struct mtconfiginfo32 *)arg)->mt_type); + err |= __put_user(info.ifc_type, &((struct mtconfiginfo32 *)arg)->ifc_type); + err |= __put_user(info.irqnr, &((struct mtconfiginfo32 *)arg)->irqnr); + err |= __put_user(info.dmanr, &((struct mtconfiginfo32 *)arg)->dmanr); + err |= __put_user(info.port, &((struct mtconfiginfo32 *)arg)->port); + err |= __put_user(info.debug, &((struct mtconfiginfo32 *)arg)->debug); + err |= __copy_to_user((char *)&((struct mtconfiginfo32 *)arg)->debug + + sizeof(((struct mtconfiginfo32 *)arg)->debug), + (char *)&info.debug + sizeof(info.debug), sizeof(__u32)); + break; + case MTIOCSETCONFIG32: + break; + } + return err ? -EFAULT: 0; +} + static int w_long(unsigned int fd, unsigned int cmd, unsigned long arg) { mm_segment_t old_fs = get_fs(); @@ -437,8 +646,59 @@ static struct ioctl32_list ioctl32_handler_table[] = { IOCTL32_HANDLER(EXT2_IOC32_GETVERSION, do_ext2_ioctl), IOCTL32_HANDLER(EXT2_IOC32_SETVERSION, do_ext2_ioctl), - IOCTL32_HANDLER(BLKGETSIZE, w_long) - + IOCTL32_HANDLER(HDIO_GETGEO, hdio_getgeo), /* hdreg.h ioctls */ + IOCTL32_HANDLER(HDIO_GET_UNMASKINTR, hdio_ioctl_trans), + IOCTL32_HANDLER(HDIO_GET_MULTCOUNT, hdio_ioctl_trans), + // HDIO_OBSOLETE_IDENTITY + IOCTL32_HANDLER(HDIO_GET_KEEPSETTINGS, hdio_ioctl_trans), + IOCTL32_HANDLER(HDIO_GET_32BIT, hdio_ioctl_trans), + IOCTL32_HANDLER(HDIO_GET_NOWERR, hdio_ioctl_trans), + IOCTL32_HANDLER(HDIO_GET_DMA, hdio_ioctl_trans), + IOCTL32_HANDLER(HDIO_GET_NICE, hdio_ioctl_trans), + IOCTL32_DEFAULT(HDIO_GET_IDENTITY), + IOCTL32_DEFAULT(HDIO_DRIVE_RESET), + // HDIO_TRISTATE_HWIF /* not implemented */ + // HDIO_DRIVE_TASK /* To do, need specs */ + IOCTL32_DEFAULT(HDIO_DRIVE_CMD), + IOCTL32_DEFAULT(HDIO_SET_MULTCOUNT), + IOCTL32_DEFAULT(HDIO_SET_UNMASKINTR), + IOCTL32_DEFAULT(HDIO_SET_KEEPSETTINGS), + IOCTL32_DEFAULT(HDIO_SET_32BIT), + IOCTL32_DEFAULT(HDIO_SET_NOWERR), + IOCTL32_DEFAULT(HDIO_SET_DMA), + IOCTL32_DEFAULT(HDIO_SET_PIO_MODE), + IOCTL32_DEFAULT(HDIO_SCAN_HWIF), + IOCTL32_DEFAULT(HDIO_SET_NICE), + //HDIO_UNREGISTER_HWIF + + IOCTL32_DEFAULT(BLKROSET), /* fs.h ioctls */ + IOCTL32_DEFAULT(BLKROGET), + IOCTL32_DEFAULT(BLKRRPART), + IOCTL32_HANDLER(BLKGETSIZE, w_long), + + IOCTL32_DEFAULT(BLKFLSBUF), + IOCTL32_DEFAULT(BLKRASET), + IOCTL32_HANDLER(BLKRAGET, w_long), + IOCTL32_DEFAULT(BLKFRASET), + IOCTL32_HANDLER(BLKFRAGET, w_long), + IOCTL32_DEFAULT(BLKSECTSET), + IOCTL32_HANDLER(BLKSECTGET, w_long), + IOCTL32_DEFAULT(BLKSSZGET), + IOCTL32_HANDLER(BLKPG, blkpg_ioctl_trans), + IOCTL32_DEFAULT(BLKELVGET), + IOCTL32_DEFAULT(BLKELVSET), + + IOCTL32_DEFAULT(MTIOCTOP), /* mtio.h ioctls */ + IOCTL32_HANDLER(MTIOCGET32, mt_ioctl_trans), + IOCTL32_HANDLER(MTIOCPOS32, mt_ioctl_trans), + IOCTL32_HANDLER(MTIOCGETCONFIG32, mt_ioctl_trans), + IOCTL32_HANDLER(MTIOCSETCONFIG32, mt_ioctl_trans) + // MTIOCRDFTSEG + // MTIOCWRFTSEG + // MTIOCVOLINFO + // MTIOCGETSIZE + // MTIOCFTFORMAT + // MTIOCFTCMD }; #define NR_IOCTL32_HANDLERS (sizeof(ioctl32_handler_table) / \ diff --git a/arch/mips64/kernel/linux32.c b/arch/mips64/kernel/linux32.c index e40837c3b..f7e2f41cb 100644 --- a/arch/mips64/kernel/linux32.c +++ b/arch/mips64/kernel/linux32.c @@ -23,6 +23,7 @@ #include <linux/sem.h> #include <linux/msg.h> #include <linux/sysctl.h> +#include <linux/utsname.h> #include <asm/uaccess.h> #include <asm/mman.h> @@ -1867,3 +1868,19 @@ out: kfree(kargs.newval); return ret; } + +asmlinkage long sys32_newuname(struct new_utsname * name) +{ + int ret = 0; + + down_read(&uts_sem); + if (copy_to_user(name,&system_utsname,sizeof *name)) + ret = -EFAULT; + up_read(&uts_sem); + + if (current->personality == PER_LINUX32 && !ret) + if (copy_to_user(name->machine, "mips\0\0\0", 8)) + ret = -EFAULT; + + return ret; +} diff --git a/arch/mips64/kernel/scall_64.S b/arch/mips64/kernel/scall_64.S index 637e63aac..378b06d9c 100644 --- a/arch/mips64/kernel/scall_64.S +++ b/arch/mips64/kernel/scall_64.S @@ -190,7 +190,7 @@ sys_call_table: PTR sys_ni_syscall PTR sys_setpgid PTR sys_ni_syscall - PTR sys_olduname + PTR sys_ni_syscall PTR sys_umask /* 4060 */ PTR sys_chroot PTR sys_ustat @@ -240,7 +240,7 @@ sys_call_table: PTR sys_newstat PTR sys_newlstat PTR sys_newfstat - PTR sys_uname + PTR sys_ni_syscall PTR sys_ni_syscall /* sys_ioperm *//* 4110 */ PTR sys_vhangup PTR sys_ni_syscall /* was sys_idle */ diff --git a/arch/mips64/kernel/scall_o32.S b/arch/mips64/kernel/scall_o32.S index 5e668a43b..6d3f211d7 100644 --- a/arch/mips64/kernel/scall_o32.S +++ b/arch/mips64/kernel/scall_o32.S @@ -260,7 +260,7 @@ illegal_syscall: sys sys_ni_syscall 2 sys sys_setpgid 2 sys sys_ni_syscall, 0 - sys sys_olduname 1 + sys sys_ni_syscall 0 /* was sys_olduname */ sys sys_umask 1 /* 4060 */ sys sys_chroot 1 sys sys_ustat 2 @@ -310,7 +310,7 @@ illegal_syscall: sys sys32_newstat 2 sys sys32_newlstat 2 sys sys32_newfstat 2 - sys sys_uname 1 + sys sys_ni_syscall 0 /* was sys_uname */ sys sys_ni_syscall 0 /* sys_ioperm *//* 4110 */ sys sys_vhangup 0 sys sys_ni_syscall 0 /* was sys_idle */ @@ -323,7 +323,7 @@ illegal_syscall: sys sys32_sigreturn 0 sys sys_clone 0 /* 4120 */ sys sys_setdomainname 2 - sys sys_newuname 1 + sys sys32_newuname 1 sys sys_ni_syscall 0 /* sys_modify_ldt */ sys sys_adjtimex 1 sys sys_mprotect 3 /* 4125 */ diff --git a/arch/mips64/kernel/syscall.c b/arch/mips64/kernel/syscall.c index 1588b95a7..009f75b85 100644 --- a/arch/mips64/kernel/syscall.c +++ b/arch/mips64/kernel/syscall.c @@ -117,43 +117,6 @@ out: } /* - * Compacrapability ... - */ -asmlinkage int sys_uname(struct old_utsname * name) -{ - if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) - return 0; - return -EFAULT; -} - -/* - * Compacrapability ... - */ -asmlinkage int sys_olduname(struct oldold_utsname * name) -{ - int error; - - if (!name) - return -EFAULT; - if (!access_ok(VERIFY_WRITE,name,sizeof(struct oldold_utsname))) - return -EFAULT; - - error = __copy_to_user(&name->sysname,&system_utsname.sysname,__OLD_UTS_LEN); - error -= __put_user(0,name->sysname+__OLD_UTS_LEN); - error -= __copy_to_user(&name->nodename,&system_utsname.nodename,__OLD_UTS_LEN); - error -= __put_user(0,name->nodename+__OLD_UTS_LEN); - error -= __copy_to_user(&name->release,&system_utsname.release,__OLD_UTS_LEN); - error -= __put_user(0,name->release+__OLD_UTS_LEN); - error -= __copy_to_user(&name->version,&system_utsname.version,__OLD_UTS_LEN); - error -= __put_user(0,name->version+__OLD_UTS_LEN); - error -= __copy_to_user(&name->machine,&system_utsname.machine,__OLD_UTS_LEN); - error = __put_user(0,name->machine+__OLD_UTS_LEN); - error = error ? -EFAULT : 0; - - return error; -} - -/* * Do the indirect syscall syscall. * * XXX This is borken. @@ -217,7 +180,7 @@ sys_sysmips(int cmd, long arg1, int arg2, int arg3) return 0; case FLUSH_CACHE: - flush_cache_l1(); + __flush_cache_all(); return 0; case MIPS_RDNVRAM: diff --git a/include/asm-mips/unistd.h b/include/asm-mips/unistd.h index 8d8b5f6c8..1306e9368 100644 --- a/include/asm-mips/unistd.h +++ b/include/asm-mips/unistd.h @@ -1,16 +1,15 @@ -/* $Id: unistd.h,v 1.20 2000/02/18 00:24:48 ralf Exp $ - * +/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 1995, 1996, 1997, 1998 by Ralf Baechle + * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 by Ralf Baechle * * Changed system calls macros _syscall5 - _syscall7 to push args 5 to 7 onto * the stack. Robin Farine for ACN S.A, Copyright (C) 1996 by ACN S.A */ -#ifndef __ASM_MIPS_UNISTD_H -#define __ASM_MIPS_UNISTD_H +#ifndef _ASM_UNISTD_H +#define _ASM_UNISTD_H /* * The syscalls 0 - 3999 are reserved for a down to the root syscall @@ -1045,7 +1044,7 @@ #define __NR_mpx (__NR_Linux + 56) #define __NR_setpgid (__NR_Linux + 57) #define __NR_ulimit (__NR_Linux + 58) -#define __NR_oldolduname (__NR_Linux + 59) +#define __NR_unused59 (__NR_Linux + 59) #define __NR_umask (__NR_Linux + 60) #define __NR_chroot (__NR_Linux + 61) #define __NR_ustat (__NR_Linux + 62) @@ -1095,7 +1094,7 @@ #define __NR_stat (__NR_Linux + 106) #define __NR_lstat (__NR_Linux + 107) #define __NR_fstat (__NR_Linux + 108) -#define __NR_olduname (__NR_Linux + 109) +#define __NR_unused109 (__NR_Linux + 109) #define __NR_iopl (__NR_Linux + 110) #define __NR_vhangup (__NR_Linux + 111) #define __NR_idle (__NR_Linux + 112) @@ -1219,13 +1218,15 @@ #define _syscall0(type,name) \ type name(void) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("li\t$2,%2\n\t" \ - "syscall" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name) \ - : "$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ + : "$2","$7","$8","$9","$10","$11","$12","$13","$14","$15", \ + "$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1239,14 +1240,15 @@ return -1; \ #define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "li\t$2,%2\n\t" \ - "syscall" \ - : "=r" (__res), "=r" (__err) \ - : "i" (__NR_##name),"r" ((long)(a)) \ - : "$4","$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ + : "=r" (__res), "=r" (__err) \ + : "i" (__NR_##name),"r" ((long)(a)) \ + : "$2","$4","$7","$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1256,17 +1258,18 @@ return -1; \ #define _syscall2(type,name,atype,a,btype,b) \ type name(atype a,btype b) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "li\t$2,%2\n\t" \ - "syscall" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)) \ - : "$4","$5","$8","$9","$10","$11","$12","$13","$14","$15", \ - "$24"); \ + : "$2","$4","$5","$7","$8","$9","$10","$11","$12","$13", \ + "$14","$15", "$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1276,19 +1279,20 @@ return -1; \ #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ type name (atype a, btype b, ctype c) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "move\t$6,%5\n\t" \ "li\t$2,%2\n\t" \ - "syscall" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ "r" ((long)(c)) \ - : "$4","$5","$6","$8","$9","$10","$11","$12","$13","$14", \ - "$15","$24"); \ + : "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12", \ + "$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1298,21 +1302,22 @@ return -1; \ #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ type name (atype a, btype b, ctype c, dtype d) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "move\t$6,%5\n\t" \ "move\t$7,%6\n\t" \ "li\t$2,%2\n\t" \ - "syscall" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ "r" ((long)(c)), \ "r" ((long)(d)) \ - : "$4","$5","$6","$8","$9","$10","$11","$12","$13","$14", \ - "$15","$24"); \ + : "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12", \ + "$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1322,8 +1327,7 @@ return -1; \ #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ type name (atype a,btype b,ctype c,dtype d,etype e) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "move\t$6,%5\n\t" \ @@ -1332,7 +1336,9 @@ __asm__ volatile ("move\t$4,%3\n\t" \ "subu\t$29,24\n\t" \ "sw\t$2,16($29)\n\t" \ "li\t$2,%2\n\t" \ - "syscall\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7\n\t" \ "addiu\t$29,24" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ @@ -1351,8 +1357,7 @@ return -1; \ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "move\t$6,%5\n\t" \ @@ -1363,7 +1368,9 @@ __asm__ volatile ("move\t$4,%3\n\t" \ "sw\t$2,16($29)\n\t" \ "sw\t$3,20($29)\n\t" \ "li\t$2,%2\n\t" \ - "syscall\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7\n\t" \ "addiu\t$29,24" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ @@ -1383,8 +1390,7 @@ return -1; \ #define _syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f,gtype g) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ +long __res, __err; \ __asm__ volatile ("move\t$4,%3\n\t" \ "move\t$5,%4\n\t" \ "move\t$6,%5\n\t" \ @@ -1397,7 +1403,9 @@ __asm__ volatile ("move\t$4,%3\n\t" \ "sw\t$3,20($29)\n\t" \ "sw\t$2,24($29)\n\t" \ "li\t$2,%2\n\t" \ - "syscall\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7\n\t" \ "addiu\t$29,32" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ @@ -1451,4 +1459,4 @@ static inline pid_t wait(int * wait_stat) #endif /* !defined (__KERNEL_SYSCALLS__) */ #endif /* !defined (_LANGUAGE_ASSEMBLY) */ -#endif /* __ASM_MIPS_UNISTD_H */ +#endif /* _ASM_UNISTD_H */ diff --git a/include/asm-mips64/unistd.h b/include/asm-mips64/unistd.h index f63bfb145..8158d9fa1 100644 --- a/include/asm-mips64/unistd.h +++ b/include/asm-mips64/unistd.h @@ -3,8 +3,8 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 1995, 1996, 1997, 1998, 1999 by Ralf Baechle - * Copyright (C) 1999 Silicon Graphics, Inc. + * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 by Ralf Baechle + * Copyright (C) 1999, 2000 Silicon Graphics, Inc. * * Changed system calls macros _syscall5 - _syscall7 to push args 5 to 7 onto * the stack. Robin Farine for ACN S.A, Copyright (C) 1996 by ACN S.A @@ -1043,7 +1043,7 @@ #define __NR_Linux32_mpx (__NR_Linux32 + 56) #define __NR_Linux32_setpgid (__NR_Linux32 + 57) #define __NR_Linux32_ulimit (__NR_Linux32 + 58) -#define __NR_Linux32_oldolduname (__NR_Linux32 + 59) +#define __NR_Linux32_unused59 (__NR_Linux32 + 59) #define __NR_Linux32_umask (__NR_Linux32 + 60) #define __NR_Linux32_chroot (__NR_Linux32 + 61) #define __NR_Linux32_ustat (__NR_Linux32 + 62) @@ -1093,7 +1093,7 @@ #define __NR_Linux32_stat (__NR_Linux32 + 106) #define __NR_Linux32_lstat (__NR_Linux32 + 107) #define __NR_Linux32_fstat (__NR_Linux32 + 108) -#define __NR_Linux32_olduname (__NR_Linux32 + 109) +#define __NR_Linux32_unused109 (__NR_Linux32 + 109) #define __NR_Linux32_iopl (__NR_Linux32 + 110) #define __NR_Linux32_vhangup (__NR_Linux32 + 111) #define __NR_Linux32_idle (__NR_Linux32 + 112) @@ -1274,7 +1274,7 @@ #define __NR_mpx (__NR_Linux + 56) #define __NR_setpgid (__NR_Linux + 57) #define __NR_ulimit (__NR_Linux + 58) -#define __NR_oldolduname (__NR_Linux + 59) +#define __NR_unused59 (__NR_Linux + 59) #define __NR_umask (__NR_Linux + 60) #define __NR_chroot (__NR_Linux + 61) #define __NR_ustat (__NR_Linux + 62) @@ -1324,7 +1324,7 @@ #define __NR_stat (__NR_Linux + 106) #define __NR_lstat (__NR_Linux + 107) #define __NR_fstat (__NR_Linux + 108) -#define __NR_olduname (__NR_Linux + 109) +#define __NR_unused109 (__NR_Linux + 109) #define __NR_iopl (__NR_Linux + 110) #define __NR_vhangup (__NR_Linux + 111) #define __NR_idle (__NR_Linux + 112) @@ -1441,13 +1441,15 @@ #define _syscall0(type,name) \ type name(void) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name) \ - : "$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ + : "$2", "$7","$8","$9","$10","$11","$12","$13","$14","$15", \ + "$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1461,14 +1463,16 @@ return -1; \ #define _syscall1(type,name,atype,a) \ type name(atype a) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)) \ - : "$4","$8","$9","$10","$11","$12","$13","$14","$15","$24"); \ + : "$2","$4","$7","$8","$9","$10","$11","$12","$13","$14", \ + "$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1478,16 +1482,17 @@ return -1; \ #define _syscall2(type,name,atype,a,btype,b) \ type name(atype a,btype b) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ - : "=r" (__res), "=r" (__err) \ - : "i" (__NR_##name),"r" ((long)(a)), \ - "r" ((long)(b)) \ - : "$4","$5","$8","$9","$10","$11","$12","$13","$14","$15", \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ + : "=r" (__res), "=r" (__err) \ + : "i" (__NR_##name),"r" ((long)(a)), \ + "r" ((long)(b)) \ + : "$2","$4","$5","$7","$8","$9","$10","$11","$12","$13","$14","$15", \ "$24"); \ if (__err == 0) \ return (type) __res; \ @@ -1498,19 +1503,20 @@ return -1; \ #define _syscall3(type,name,atype,a,btype,b,ctype,c) \ type name (atype a, btype b, ctype c) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ "r" ((long)(c)) \ - : "$4","$5","$6","$8","$9","$10","$11","$12","$13","$14", \ - "$15","$24"); \ + : "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12", \ + "$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1520,21 +1526,22 @@ return -1; \ #define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \ type name (atype a, btype b, ctype c, dtype d) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "move\t$7,%6\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "move\t$7, %6\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ "r" ((long)(c)), \ "r" ((long)(d)) \ - : "$4","$5","$6","$8","$9","$10","$11","$12","$13","$14", \ - "$15","$24"); \ + : "$2","$4","$5","$6","$7","$8","$9","$10","$11","$12", \ + "$13","$14","$15","$24"); \ if (__err == 0) \ return (type) __res; \ errno = __res; \ @@ -1546,16 +1553,17 @@ return -1; \ #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ type name (atype a,btype b,ctype c,dtype d,etype e) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "move\t$7,%6\n\t" \ - "move\t$8,%7\n\t" \ - "sw\t$2,16($29)\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "move\t$7, %6\n\t" \ + "move\t$8, %7\n\t" \ + "sw\t$2, 16($29)\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ @@ -1573,16 +1581,17 @@ return -1; \ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "move\t$7,%6\n\t" \ - "move\t$8,%7\n\t" \ - "move\t$9,%8\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "move\t$7, %6\n\t" \ + "move\t$8, %7\n\t" \ + "move\t$9, %8\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ @@ -1601,17 +1610,18 @@ return -1; \ #define _syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f,gtype g) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "move\t$7,%6\n\t" \ - "move\t$8,%7\n\t" \ - "move\t$9,%8\n\t" \ - "move\t$10,%9\n\t" \ - "li\t$2,%2\n\t" \ - "syscall" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "move\t$7, %6\n\t" \ + "move\t$8, %7\n\t" \ + "move\t$9, %8\n\t" \ + "move\t$10, %9\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ @@ -1636,17 +1646,18 @@ return -1; \ #define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \ type name (atype a,btype b,ctype c,dtype d,etype e) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "lw\t$2,%7\n\t" \ - "move\t$7,%6\n\t" \ - "subu\t$29,24\n\t" \ - "sw\t$2,16($29)\n\t" \ - "li\t$2,%2\n\t" \ - "syscall\n\t" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "lw\t$2, %7\n\t" \ + "move\t$7, %6\n\t" \ + "subu\t$29, 24\n\t" \ + "sw\t$2, 16($29)\n\t" \ + "li\t$2, %2\n\t" \ + "syscall\n\t" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ "addiu\t$29,24" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ @@ -1665,20 +1676,21 @@ return -1; \ #define _syscall6(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "lw\t$2,%7\n\t" \ - "lw\t$3,%8\n\t" \ - "move\t$7,%6\n\t" \ - "subu\t$29,24\n\t" \ - "sw\t$2,16($29)\n\t" \ - "sw\t$3,20($29)\n\t" \ - "li\t$2,%2\n\t" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "lw\t$2, %7\n\t" \ + "lw\t$3, %8\n\t" \ + "move\t$7, %6\n\t" \ + "subu\t$29, 24\n\t" \ + "sw\t$2, 16($29)\n\t" \ + "sw\t$3, 20($29)\n\t" \ + "li\t$2, %2\n\t" \ "syscall\n\t" \ - "addiu\t$29,24" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ + "addiu\t$29, 24" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ @@ -1697,22 +1709,23 @@ return -1; \ #define _syscall7(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e,ftype,f,gtype,g) \ type name (atype a,btype b,ctype c,dtype d,etype e,ftype f,gtype g) \ { \ -register long __res __asm__ ("$2"); \ -register long __err __asm__ ("$7"); \ -__asm__ volatile ("move\t$4,%3\n\t" \ - "move\t$5,%4\n\t" \ - "move\t$6,%5\n\t" \ - "lw\t$2,%7\n\t" \ - "lw\t$3,%8\n\t" \ - "move\t$7,%6\n\t" \ - "subu\t$29,32\n\t" \ - "sw\t$2,16($29)\n\t" \ - "lw\t$2,%9\n\t" \ - "sw\t$3,20($29)\n\t" \ - "sw\t$2,24($29)\n\t" \ - "li\t$2,%2\n\t" \ +long __res, __err; \ +__asm__ volatile ("move\t$4, %3\n\t" \ + "move\t$5, %4\n\t" \ + "move\t$6, %5\n\t" \ + "lw\t$2, %7\n\t" \ + "lw\t$3, %8\n\t" \ + "move\t$7, %6\n\t" \ + "subu\t$29, 32\n\t" \ + "sw\t$2, 16($29)\n\t" \ + "lw\t$2, %9\n\t" \ + "sw\t$3, 20($29)\n\t" \ + "sw\t$2, 24($29)\n\t" \ + "li\t$2, %2\n\t" \ "syscall\n\t" \ - "addiu\t$29,32" \ + "move\t%0, $2\n\t" \ + "move\t%1, $7" \ + "addiu\t$29, 32" \ : "=r" (__res), "=r" (__err) \ : "i" (__NR_##name),"r" ((long)(a)), \ "r" ((long)(b)), \ |