summaryrefslogtreecommitdiffstats
path: root/package/libaio/libaio-0.3.109-avr32-support.patch
blob: 57bb1f388c1d723c7a07fe549957733dfa958268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
Add AVR32 support to libaio

Taken from OpenWRT repository.

--- a/src/libaio.h
+++ b/src/libaio.h
@@ -107,6 +107,10 @@ typedef enum io_iocb_cmd {
 #  else
 #    error "neither mipseb nor mipsel?"
 #  endif
+#elif defined(__avr32__) /* big endian, 32 bits */
+#define PADDED(x, y)	unsigned y; x
+#define PADDEDptr(x, y)	unsigned y; x
+#define PADDEDul(x, y)	unsigned y; unsigned long x;
 #else
 #error	endian?
 #endif
--- /dev/null
+++ b/src/syscall-avr32.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2007 Atmel Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#define __NR_io_setup		197
+#define __NR_io_destroy		198
+#define __NR_io_getevents	199
+#define __NR_io_submit		200
+#define __NR_io_cancel		201
+
+#define io_syscall1(type,fname,sname,type1,arg1)			\
+type fname(type1 arg1)							\
+{									\
+	register long __r12 __asm__("r12") = (long)arg1;		\
+	register long __res_r12 __asm__("r12");				\
+	register long __scno __asm__("r8") = __NR_##sname;		\
+	__asm__ __volatile__("scall"					\
+			     : "=r"(__res_r12)				\
+			     : "0"(__r12), "r"(__scno)			\
+			     : "memory");				\
+	return (type) __res_r12;					\
+}
+
+#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2)		\
+type fname(type1 arg1, type2 arg2)					\
+{									\
+	register long __r12 __asm__("r12") = (long)arg1;		\
+	register long __r11 __asm__("r11") = (long)arg2;		\
+	register long __res_r12 __asm__("r12");				\
+	register long __scno __asm__("r8") = __NR_##sname;		\
+	__asm__ __volatile__("scall"					\
+			     : "=r"(__res_r12)				\
+			     : "0"(__r12), "r"(__r11), "r"(__scno)	\
+			     : "memory");				\
+	return (type) __res_r12;					\
+}
+
+#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3)	\
+type fname(type1 arg1, type2 arg2, type3 arg3)				\
+{									\
+	register long __r12 __asm__("r12") = (long)arg1;		\
+	register long __r11 __asm__("r11") = (long)arg2;		\
+	register long __r10 __asm__("r10") = (long)arg3;		\
+	register long __res_r12 __asm__("r12");				\
+	register long __scno __asm__("r8") = __NR_##sname;		\
+	__asm__ __volatile__("scall"					\
+			     : "=r"(__res_r12)				\
+			     : "0"(__r12), "r"(__r11), "r"(__r10),	\
+			       "r"(__scno)				\
+			     : "memory");				\
+	return (type) __res_r12;					\
+}
+
+#define io_syscall4(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
+type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4)		\
+{									\
+	register long __r12 __asm__("r12") = (long)arg1;		\
+	register long __r11 __asm__("r11") = (long)arg2;		\
+	register long __r10 __asm__("r10") = (long)arg3;		\
+	register long __r9 __asm__("r9") = (long)arg4;			\
+	register long __res_r12 __asm__("r12");				\
+	register long __scno __asm__("r8") = __NR_##sname;		\
+	__asm__ __volatile__("scall"					\
+			     : "=r"(__res_r12)				\
+			     : "0"(__r12), "r"(__r11), "r"(__r10),	\
+			       "r"(__r9), "r"(__scno)			\
+			     : "memory");				\
+	return (type) __res_r12;					\
+}
+
+#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \
+type fname(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5)	\
+{									\
+	register long __r12 __asm__("r12") = (long)arg1;		\
+	register long __r11 __asm__("r11") = (long)arg2;		\
+	register long __r10 __asm__("r10") = (long)arg3;		\
+	register long __r9 __asm__("r9") = (long)arg4;			\
+	register long __r5 __asm__("r5") = (long)arg5;			\
+	register long __res_r12 __asm__("r12");				\
+	register long __scno __asm__("r8") = __NR_##sname;		\
+	__asm__ __volatile__("scall"					\
+			     : "=r"(__res_r12)				\
+			     : "0"(__r12), "r"(__r11), "r"(__r10),	\
+			       "r"(__r9), "r"(__r5), "r"(__scno)	\
+			     : "memory");				\
+	return (type) __res_r12;					\
+}
--- a/src/syscall.h
+++ b/src/syscall.h
@@ -32,6 +32,8 @@
 #include "syscall-parisc.h"
 #elif defined(__mips__)
 #include "syscall-mips.h"
+#elif defined(__avr32__)
+#include "syscall-avr32.h"
 #else
 #error "add syscall-arch.h"
 #endif