summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/mips64/kernel/ioctl32.c264
-rw-r--r--arch/mips64/kernel/linux32.c17
-rw-r--r--arch/mips64/kernel/scall_64.S4
-rw-r--r--arch/mips64/kernel/scall_o32.S6
-rw-r--r--arch/mips64/kernel/syscall.c39
-rw-r--r--include/asm-mips/unistd.h92
-rw-r--r--include/asm-mips64/unistd.h245
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)), \