sys_h8300.c 1.7 KB

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