* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
* Copyright (C) 2001 MIPS Technologies, Inc.
*/
+#include <linux/config.h>
#include <linux/a.out.h>
#include <linux/capability.h>
#include <linux/errno.h>
sys_mmap2(unsigned long addr, unsigned long len, unsigned long prot,
unsigned long flags, unsigned long fd, unsigned long pgoff)
{
- if (pgoff & (~PAGE_MASK >> 12))
- return -EINVAL;
-
- return do_mmap2(addr, len, prot, flags, fd, pgoff >> (PAGE_SHIFT-12));
+ return do_mmap2(addr, len, prot, flags, fd, pgoff);
}
save_static_function(sys_fork);
asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
{
- int tmp;
+ int tmp, len;
+ char __user *name;
switch(cmd) {
+ case SETNAME: {
+ char nodename[__NEW_UTS_LEN + 1];
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+ name = (char __user *) arg1;
+
+ len = strncpy_from_user(nodename, name, __NEW_UTS_LEN);
+ if (len < 0)
+ return -EFAULT;
+
+ down_write(&uts_sem);
+ strncpy(vx_new_uts(nodename), nodename, len);
+ nodename[__NEW_UTS_LEN] = '\0';
+ strlcpy(vx_new_uts(nodename), nodename,
+ sizeof(vx_new_uts(nodename)));
+ up_write(&uts_sem);
+ return 0;
+ }
+
case MIPS_ATOMIC_SET:
printk(KERN_CRIT "How did I get here?\n");
return -EINVAL;
case FLUSH_CACHE:
__flush_cache_all();
return 0;
+
+ case MIPS_RDNVRAM:
+ return -EIO;
}
return -EINVAL;
*
* This is really horribly ugly.
*/
-asmlinkage int sys_ipc (unsigned int call, int first, int second,
+asmlinkage int sys_ipc (uint call, int first, int second,
unsigned long third, void __user *ptr, long fifth)
{
int version, ret;
union semun fourth;
if (!ptr)
return -EINVAL;
- if (get_user(fourth.__pad, (void __user *__user *) ptr))
+ if (get_user(fourth.__pad, (void *__user *) ptr))
return -EFAULT;
return sys_semctl (first, second, third, fourth);
}
case SHMAT:
switch (version) {
default: {
- unsigned long raddr;
+ ulong raddr;
ret = do_shmat (first, (char __user *) ptr, second,
&raddr);
if (ret)
return ret;
- return put_user (raddr, (unsigned long __user *) third);
+ return put_user (raddr, (ulong __user *) third);
}
case 1: /* iBCS2 emulator entry point */
if (!segment_eq(get_fs(), get_ds()))
return -EINVAL;
return do_shmat (first, (char __user *) ptr, second,
- (unsigned long *) third);
+ (ulong *) third);
}
case SHMDT:
return sys_shmdt ((char __user *)ptr);