sys_m68k_no.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /*
  2. * linux/arch/m68knommu/kernel/sys_m68k.c
  3. *
  4. * This file contains various random system calls that
  5. * have a non-standard calling sequence on the Linux/m68k
  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/ipc.h>
  20. #include <linux/fs.h>
  21. #include <asm/setup.h>
  22. #include <asm/uaccess.h>
  23. #include <asm/cachectl.h>
  24. #include <asm/traps.h>
  25. #include <asm/cacheflush.h>
  26. #include <asm/unistd.h>
  27. /* sys_cacheflush -- flush (part of) the processor cache. */
  28. asmlinkage int
  29. sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len)
  30. {
  31. flush_cache_all();
  32. return(0);
  33. }
  34. asmlinkage int sys_getpagesize(void)
  35. {
  36. return PAGE_SIZE;
  37. }
  38. /*
  39. * Do a system call from kernel instead of calling sys_execve so we
  40. * end up with proper pt_regs.
  41. */
  42. int kernel_execve(const char *filename,
  43. const char *const argv[],
  44. const char *const envp[])
  45. {
  46. register long __res asm ("%d0") = __NR_execve;
  47. register long __a asm ("%d1") = (long)(filename);
  48. register long __b asm ("%d2") = (long)(argv);
  49. register long __c asm ("%d3") = (long)(envp);
  50. asm volatile ("trap #0" : "+d" (__res)
  51. : "d" (__a), "d" (__b), "d" (__c));
  52. return __res;
  53. }
  54. asmlinkage unsigned long sys_get_thread_area(void)
  55. {
  56. return current_thread_info()->tp_value;
  57. }
  58. asmlinkage int sys_set_thread_area(unsigned long tp)
  59. {
  60. current_thread_info()->tp_value = tp;
  61. return 0;
  62. }
  63. /* This syscall gets its arguments in A0 (mem), D2 (oldval) and
  64. D1 (newval). */
  65. asmlinkage int
  66. sys_atomic_cmpxchg_32(unsigned long newval, int oldval, int d3, int d4, int d5,
  67. unsigned long __user * mem)
  68. {
  69. struct mm_struct *mm = current->mm;
  70. unsigned long mem_value;
  71. down_read(&mm->mmap_sem);
  72. mem_value = *mem;
  73. if (mem_value == oldval)
  74. *mem = newval;
  75. up_read(&mm->mmap_sem);
  76. return mem_value;
  77. }
  78. asmlinkage int sys_atomic_barrier(void)
  79. {
  80. /* no code needed for uniprocs */
  81. return 0;
  82. }