syscall-alpha.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #define __NR_io_setup 398
  2. #define __NR_io_destroy 399
  3. #define __NR_io_getevents 400
  4. #define __NR_io_submit 401
  5. #define __NR_io_cancel 402
  6. #define inline_syscall_r0_asm
  7. #define inline_syscall_r0_out_constraint "=v"
  8. #define inline_syscall_clobbers \
  9. "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", \
  10. "$22", "$23", "$24", "$25", "$27", "$28", "memory"
  11. #define inline_syscall0(name, args...) \
  12. { \
  13. register long _sc_0 inline_syscall_r0_asm; \
  14. register long _sc_19 __asm__("$19"); \
  15. \
  16. _sc_0 = name; \
  17. __asm__ __volatile__ \
  18. ("callsys # %0 %1 <= %2" \
  19. : inline_syscall_r0_out_constraint (_sc_0), \
  20. "=r"(_sc_19) \
  21. : "0"(_sc_0) \
  22. : inline_syscall_clobbers, \
  23. "$16", "$17", "$18", "$20", "$21"); \
  24. _sc_ret = _sc_0, _sc_err = _sc_19; \
  25. }
  26. #define inline_syscall1(name,arg1) \
  27. { \
  28. register long _sc_0 inline_syscall_r0_asm; \
  29. register long _sc_16 __asm__("$16"); \
  30. register long _sc_19 __asm__("$19"); \
  31. \
  32. _sc_0 = name; \
  33. _sc_16 = (long) (arg1); \
  34. __asm__ __volatile__ \
  35. ("callsys # %0 %1 <= %2 %3" \
  36. : inline_syscall_r0_out_constraint (_sc_0), \
  37. "=r"(_sc_19), "=r"(_sc_16) \
  38. : "0"(_sc_0), "2"(_sc_16) \
  39. : inline_syscall_clobbers, \
  40. "$17", "$18", "$20", "$21"); \
  41. _sc_ret = _sc_0, _sc_err = _sc_19; \
  42. }
  43. #define inline_syscall2(name,arg1,arg2) \
  44. { \
  45. register long _sc_0 inline_syscall_r0_asm; \
  46. register long _sc_16 __asm__("$16"); \
  47. register long _sc_17 __asm__("$17"); \
  48. register long _sc_19 __asm__("$19"); \
  49. \
  50. _sc_0 = name; \
  51. _sc_16 = (long) (arg1); \
  52. _sc_17 = (long) (arg2); \
  53. __asm__ __volatile__ \
  54. ("callsys # %0 %1 <= %2 %3 %4" \
  55. : inline_syscall_r0_out_constraint (_sc_0), \
  56. "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17) \
  57. : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17) \
  58. : inline_syscall_clobbers, \
  59. "$18", "$20", "$21"); \
  60. _sc_ret = _sc_0, _sc_err = _sc_19; \
  61. }
  62. #define inline_syscall3(name,arg1,arg2,arg3) \
  63. { \
  64. register long _sc_0 inline_syscall_r0_asm; \
  65. register long _sc_16 __asm__("$16"); \
  66. register long _sc_17 __asm__("$17"); \
  67. register long _sc_18 __asm__("$18"); \
  68. register long _sc_19 __asm__("$19"); \
  69. \
  70. _sc_0 = name; \
  71. _sc_16 = (long) (arg1); \
  72. _sc_17 = (long) (arg2); \
  73. _sc_18 = (long) (arg3); \
  74. __asm__ __volatile__ \
  75. ("callsys # %0 %1 <= %2 %3 %4 %5" \
  76. : inline_syscall_r0_out_constraint (_sc_0), \
  77. "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \
  78. "=r"(_sc_18) \
  79. : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \
  80. "4"(_sc_18) \
  81. : inline_syscall_clobbers, "$20", "$21"); \
  82. _sc_ret = _sc_0, _sc_err = _sc_19; \
  83. }
  84. #define inline_syscall4(name,arg1,arg2,arg3,arg4) \
  85. { \
  86. register long _sc_0 inline_syscall_r0_asm; \
  87. register long _sc_16 __asm__("$16"); \
  88. register long _sc_17 __asm__("$17"); \
  89. register long _sc_18 __asm__("$18"); \
  90. register long _sc_19 __asm__("$19"); \
  91. \
  92. _sc_0 = name; \
  93. _sc_16 = (long) (arg1); \
  94. _sc_17 = (long) (arg2); \
  95. _sc_18 = (long) (arg3); \
  96. _sc_19 = (long) (arg4); \
  97. __asm__ __volatile__ \
  98. ("callsys # %0 %1 <= %2 %3 %4 %5 %6" \
  99. : inline_syscall_r0_out_constraint (_sc_0), \
  100. "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \
  101. "=r"(_sc_18) \
  102. : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \
  103. "4"(_sc_18), "1"(_sc_19) \
  104. : inline_syscall_clobbers, "$20", "$21"); \
  105. _sc_ret = _sc_0, _sc_err = _sc_19; \
  106. }
  107. #define inline_syscall5(name,arg1,arg2,arg3,arg4,arg5) \
  108. { \
  109. register long _sc_0 inline_syscall_r0_asm; \
  110. register long _sc_16 __asm__("$16"); \
  111. register long _sc_17 __asm__("$17"); \
  112. register long _sc_18 __asm__("$18"); \
  113. register long _sc_19 __asm__("$19"); \
  114. register long _sc_20 __asm__("$20"); \
  115. \
  116. _sc_0 = name; \
  117. _sc_16 = (long) (arg1); \
  118. _sc_17 = (long) (arg2); \
  119. _sc_18 = (long) (arg3); \
  120. _sc_19 = (long) (arg4); \
  121. _sc_20 = (long) (arg5); \
  122. __asm__ __volatile__ \
  123. ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7" \
  124. : inline_syscall_r0_out_constraint (_sc_0), \
  125. "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \
  126. "=r"(_sc_18), "=r"(_sc_20) \
  127. : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), \
  128. "4"(_sc_18), "1"(_sc_19), "5"(_sc_20) \
  129. : inline_syscall_clobbers, "$21"); \
  130. _sc_ret = _sc_0, _sc_err = _sc_19; \
  131. }
  132. #define inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6) \
  133. { \
  134. register long _sc_0 inline_syscall_r0_asm; \
  135. register long _sc_16 __asm__("$16"); \
  136. register long _sc_17 __asm__("$17"); \
  137. register long _sc_18 __asm__("$18"); \
  138. register long _sc_19 __asm__("$19"); \
  139. register long _sc_20 __asm__("$20"); \
  140. register long _sc_21 __asm__("$21"); \
  141. \
  142. _sc_0 = name; \
  143. _sc_16 = (long) (arg1); \
  144. _sc_17 = (long) (arg2); \
  145. _sc_18 = (long) (arg3); \
  146. _sc_19 = (long) (arg4); \
  147. _sc_20 = (long) (arg5); \
  148. _sc_21 = (long) (arg6); \
  149. __asm__ __volatile__ \
  150. ("callsys # %0 %1 <= %2 %3 %4 %5 %6 %7 %8" \
  151. : inline_syscall_r0_out_constraint (_sc_0), \
  152. "=r"(_sc_19), "=r"(_sc_16), "=r"(_sc_17), \
  153. "=r"(_sc_18), "=r"(_sc_20), "=r"(_sc_21) \
  154. : "0"(_sc_0), "2"(_sc_16), "3"(_sc_17), "4"(_sc_18), \
  155. "1"(_sc_19), "5"(_sc_20), "6"(_sc_21) \
  156. : inline_syscall_clobbers); \
  157. _sc_ret = _sc_0, _sc_err = _sc_19; \
  158. }
  159. #define INLINE_SYSCALL1(name, nr, args...) \
  160. ({ \
  161. long _sc_ret, _sc_err; \
  162. inline_syscall##nr(__NR_##name, args); \
  163. if (_sc_err != 0) \
  164. { \
  165. _sc_ret = -(_sc_ret); \
  166. } \
  167. _sc_ret; \
  168. })
  169. #define io_syscall1(type,fname,sname,type1,arg1) \
  170. type fname(type1 arg1) \
  171. { \
  172. return (type)INLINE_SYSCALL1(sname, 1, arg1); \
  173. }
  174. #define io_syscall2(type,fname,sname,type1,arg1,type2,arg2) \
  175. type fname(type1 arg1,type2 arg2) \
  176. { \
  177. return (type)INLINE_SYSCALL1(sname, 2, arg1, arg2); \
  178. }
  179. #define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3) \
  180. type fname(type1 arg1,type2 arg2,type3 arg3) \
  181. { \
  182. return (type)INLINE_SYSCALL1(sname, 3, arg1, arg2, arg3); \
  183. }
  184. #define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
  185. type fname (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
  186. { \
  187. return (type)INLINE_SYSCALL1(sname, 4, arg1, arg2, arg3, arg4); \
  188. }
  189. #define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
  190. type5,arg5) \
  191. type fname (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
  192. { \
  193. return (type)INLINE_SYSCALL1(sname, 5, arg1, arg2, arg3, arg4, arg5);\
  194. }