libaio-0.3.109-avr32-support.patch 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. Add AVR32 support to libaio
  2. Taken from OpenWRT repository.
  3. --- a/src/libaio.h
  4. +++ b/src/libaio.h
  5. @@ -107,6 +107,10 @@ typedef enum io_iocb_cmd {
  6. # else
  7. # error "neither mipseb nor mipsel?"
  8. # endif
  9. +#elif defined(__avr32__) /* big endian, 32 bits */
  10. +#define PADDED(x, y) unsigned y; x
  11. +#define PADDEDptr(x, y) unsigned y; x
  12. +#define PADDEDul(x, y) unsigned y; unsigned long x;
  13. #else
  14. #error endian?
  15. #endif
  16. --- /dev/null
  17. +++ b/src/syscall-avr32.h
  18. @@ -0,0 +1,91 @@
  19. +/*
  20. + * Copyright (C) 2007 Atmel Corporation
  21. + *
  22. + * This program is free software; you can redistribute it and/or modify
  23. + * it under the terms of the GNU General Public License version 2 as
  24. + * published by the Free Software Foundation.
  25. + */
  26. +
  27. +#define __NR_io_setup 197
  28. +#define __NR_io_destroy 198
  29. +#define __NR_io_getevents 199
  30. +#define __NR_io_submit 200
  31. +#define __NR_io_cancel 201
  32. +
  33. +#define io_syscall1(type,fname,sname,type1,arg1) \
  34. +type fname(type1 arg1) \
  35. +{ \
  36. + register long __r12 __asm__("r12") = (long)arg1; \
  37. + register long __res_r12 __asm__("r12"); \
  38. + register long __scno __asm__("r8") = __NR_##sname; \
  39. + __asm__ __volatile__("scall" \
  40. + : "=r"(__res_r12) \
  41. + : "0"(__r12), "r"(__scno) \
  42. + : "memory"); \
  43. + return (type) __res_r12; \
  44. +}
  45. +
  46. +#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2) \
  47. +type fname(type1 arg1, type2 arg2) \
  48. +{ \
  49. + register long __r12 __asm__("r12") = (long)arg1; \
  50. + register long __r11 __asm__("r11") = (long)arg2; \
  51. + register long __res_r12 __asm__("r12"); \
  52. + register long __scno __asm__("r8") = __NR_##sname; \
  53. + __asm__ __volatile__("scall" \
  54. + : "=r"(__res_r12) \
  55. + : "0"(__r12), "r"(__r11), "r"(__scno) \
  56. + : "memory"); \
  57. + return (type) __res_r12; \
  58. +}
  59. +
  60. +#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3) \
  61. +type fname(type1 arg1, type2 arg2, type3 arg3) \
  62. +{ \
  63. + register long __r12 __asm__("r12") = (long)arg1; \
  64. + register long __r11 __asm__("r11") = (long)arg2; \
  65. + register long __r10 __asm__("r10") = (long)arg3; \
  66. + register long __res_r12 __asm__("r12"); \
  67. + register long __scno __asm__("r8") = __NR_##sname; \
  68. + __asm__ __volatile__("scall" \
  69. + : "=r"(__res_r12) \
  70. + : "0"(__r12), "r"(__r11), "r"(__r10), \
  71. + "r"(__scno) \
  72. + : "memory"); \
  73. + return (type) __res_r12; \
  74. +}
  75. +
  76. +#define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
  77. +type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
  78. +{ \
  79. + register long __r12 __asm__("r12") = (long)arg1; \
  80. + register long __r11 __asm__("r11") = (long)arg2; \
  81. + register long __r10 __asm__("r10") = (long)arg3; \
  82. + register long __r9 __asm__("r9") = (long)arg4; \
  83. + register long __res_r12 __asm__("r12"); \
  84. + register long __scno __asm__("r8") = __NR_##sname; \
  85. + __asm__ __volatile__("scall" \
  86. + : "=r"(__res_r12) \
  87. + : "0"(__r12), "r"(__r11), "r"(__r10), \
  88. + "r"(__r9), "r"(__scno) \
  89. + : "memory"); \
  90. + return (type) __res_r12; \
  91. +}
  92. +
  93. +#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
  94. +type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) \
  95. +{ \
  96. + register long __r12 __asm__("r12") = (long)arg1; \
  97. + register long __r11 __asm__("r11") = (long)arg2; \
  98. + register long __r10 __asm__("r10") = (long)arg3; \
  99. + register long __r9 __asm__("r9") = (long)arg4; \
  100. + register long __r5 __asm__("r5") = (long)arg5; \
  101. + register long __res_r12 __asm__("r12"); \
  102. + register long __scno __asm__("r8") = __NR_##sname; \
  103. + __asm__ __volatile__("scall" \
  104. + : "=r"(__res_r12) \
  105. + : "0"(__r12), "r"(__r11), "r"(__r10), \
  106. + "r"(__r9), "r"(__r5), "r"(__scno) \
  107. + : "memory"); \
  108. + return (type) __res_r12; \
  109. +}
  110. --- a/src/syscall.h
  111. +++ b/src/syscall.h
  112. @@ -32,6 +32,8 @@
  113. #include "syscall-parisc.h"
  114. #elif defined(__mips__)
  115. #include "syscall-mips.h"
  116. +#elif defined(__avr32__)
  117. +#include "syscall-avr32.h"
  118. #else
  119. #error "add syscall-arch.h"
  120. #endif