~ubuntu-branches/ubuntu/precise/linux-lowlatency/precise

« back to all changes in this revision

Viewing changes to arch/h8300/kernel/sys_h8300.c

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-tz023xykf0i6eosh
Tags: upstream-3.2.0
ImportĀ upstreamĀ versionĀ 3.2.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * linux/arch/h8300/kernel/sys_h8300.c
 
3
 *
 
4
 * This file contains various random system calls that
 
5
 * have a non-standard calling sequence on the H8/300
 
6
 * platform.
 
7
 */
 
8
 
 
9
#include <linux/errno.h>
 
10
#include <linux/sched.h>
 
11
#include <linux/mm.h>
 
12
#include <linux/smp.h>
 
13
#include <linux/sem.h>
 
14
#include <linux/msg.h>
 
15
#include <linux/shm.h>
 
16
#include <linux/stat.h>
 
17
#include <linux/syscalls.h>
 
18
#include <linux/mman.h>
 
19
#include <linux/file.h>
 
20
#include <linux/fs.h>
 
21
#include <linux/ipc.h>
 
22
 
 
23
#include <asm/setup.h>
 
24
#include <asm/uaccess.h>
 
25
#include <asm/cachectl.h>
 
26
#include <asm/traps.h>
 
27
#include <asm/unistd.h>
 
28
 
 
29
/* sys_cacheflush -- no support.  */
 
30
asmlinkage int
 
31
sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len)
 
32
{
 
33
        return -EINVAL;
 
34
}
 
35
 
 
36
asmlinkage int sys_getpagesize(void)
 
37
{
 
38
        return PAGE_SIZE;
 
39
}
 
40
 
 
41
#if defined(CONFIG_SYSCALL_PRINT)
 
42
asmlinkage void syscall_print(void *dummy,...)
 
43
{
 
44
        struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy-4);
 
45
        printk("call %06lx:%ld 1:%08lx,2:%08lx,3:%08lx,ret:%08lx\n",
 
46
               ((regs->pc)&0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0);
 
47
}
 
48
#endif
 
49
 
 
50
/*
 
51
 * Do a system call from kernel instead of calling sys_execve so we
 
52
 * end up with proper pt_regs.
 
53
 */
 
54
int kernel_execve(const char *filename,
 
55
                  const char *const argv[],
 
56
                  const char *const envp[])
 
57
{
 
58
        register long res __asm__("er0");
 
59
        register const char *const *_c __asm__("er3") = envp;
 
60
        register const char *const *_b __asm__("er2") = argv;
 
61
        register const char * _a __asm__("er1") = filename;
 
62
        __asm__ __volatile__ ("mov.l %1,er0\n\t"
 
63
                        "trapa  #0\n\t"
 
64
                        : "=r" (res)
 
65
                        : "g" (__NR_execve),
 
66
                          "g" (_a),
 
67
                          "g" (_b),
 
68
                          "g" (_c)
 
69
                        : "cc", "memory");
 
70
        return res;
 
71
}
 
72
 
 
73