diff options
Diffstat (limited to 'include/asm-arm')
-rw-r--r-- | include/asm-arm/arch-ixp4xx/platform.h | 13 | ||||
-rw-r--r-- | include/asm-arm/arch-omap/irda.h | 2 | ||||
-rw-r--r-- | include/asm-arm/checksum.h | 83 | ||||
-rw-r--r-- | include/asm-arm/device.h | 7 | ||||
-rw-r--r-- | include/asm-arm/dma-mapping.h | 2 | ||||
-rw-r--r-- | include/asm-arm/setup.h | 104 | ||||
-rw-r--r-- | include/asm-arm/unistd.h | 150 |
7 files changed, 118 insertions, 243 deletions
diff --git a/include/asm-arm/arch-ixp4xx/platform.h b/include/asm-arm/arch-ixp4xx/platform.h index 8d10a9187693..ab194e5f6653 100644 --- a/include/asm-arm/arch-ixp4xx/platform.h +++ b/include/asm-arm/arch-ixp4xx/platform.h | |||
@@ -86,6 +86,19 @@ struct ixp4xx_i2c_pins { | |||
86 | unsigned long scl_pin; | 86 | unsigned long scl_pin; |
87 | }; | 87 | }; |
88 | 88 | ||
89 | /* | ||
90 | * This structure provide a means for the board setup code | ||
91 | * to give information to th pata_ixp4xx driver. It is | ||
92 | * passed as platform_data. | ||
93 | */ | ||
94 | struct ixp4xx_pata_data { | ||
95 | volatile u32 *cs0_cfg; | ||
96 | volatile u32 *cs1_cfg; | ||
97 | unsigned long cs0_bits; | ||
98 | unsigned long cs1_bits; | ||
99 | void __iomem *cs0; | ||
100 | void __iomem *cs1; | ||
101 | }; | ||
89 | 102 | ||
90 | struct sys_timer; | 103 | struct sys_timer; |
91 | 104 | ||
diff --git a/include/asm-arm/arch-omap/irda.h b/include/asm-arm/arch-omap/irda.h index 805ae3575e44..345a649ec838 100644 --- a/include/asm-arm/arch-omap/irda.h +++ b/include/asm-arm/arch-omap/irda.h | |||
@@ -24,7 +24,7 @@ struct omap_irda_config { | |||
24 | /* Very specific to the needs of some platforms (h3,h4) | 24 | /* Very specific to the needs of some platforms (h3,h4) |
25 | * having calls which can sleep in irda_set_speed. | 25 | * having calls which can sleep in irda_set_speed. |
26 | */ | 26 | */ |
27 | struct work_struct gpio_expa; | 27 | struct delayed_work gpio_expa; |
28 | int rx_channel; | 28 | int rx_channel; |
29 | int tx_channel; | 29 | int tx_channel; |
30 | unsigned long dest_start; | 30 | unsigned long dest_start; |
diff --git a/include/asm-arm/checksum.h b/include/asm-arm/checksum.h index 747bdd31a74b..8c0bb5bb14ee 100644 --- a/include/asm-arm/checksum.h +++ b/include/asm-arm/checksum.h | |||
@@ -23,7 +23,7 @@ | |||
23 | * | 23 | * |
24 | * it's best to have buff aligned on a 32-bit boundary | 24 | * it's best to have buff aligned on a 32-bit boundary |
25 | */ | 25 | */ |
26 | unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum); | 26 | __wsum csum_partial(const void *buff, int len, __wsum sum); |
27 | 27 | ||
28 | /* | 28 | /* |
29 | * the same as csum_partial, but copies from src while it | 29 | * the same as csum_partial, but copies from src while it |
@@ -33,26 +33,18 @@ unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) | |||
33 | * better 64-bit) boundary | 33 | * better 64-bit) boundary |
34 | */ | 34 | */ |
35 | 35 | ||
36 | unsigned int | 36 | __wsum |
37 | csum_partial_copy_nocheck(const char *src, char *dst, int len, int sum); | 37 | csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum); |
38 | 38 | ||
39 | unsigned int | 39 | __wsum |
40 | csum_partial_copy_from_user(const char __user *src, char *dst, int len, int sum, int *err_ptr); | 40 | csum_partial_copy_from_user(const void __user *src, void *dst, int len, __wsum sum, int *err_ptr); |
41 | |||
42 | /* | ||
43 | * This is the old (and unsafe) way of doing checksums, a warning message will | ||
44 | * be printed if it is used and an exception occurs. | ||
45 | * | ||
46 | * this functions should go away after some time. | ||
47 | */ | ||
48 | #define csum_partial_copy(src,dst,len,sum) csum_partial_copy_nocheck(src,dst,len,sum) | ||
49 | 41 | ||
50 | /* | 42 | /* |
51 | * This is a version of ip_compute_csum() optimized for IP headers, | 43 | * This is a version of ip_compute_csum() optimized for IP headers, |
52 | * which always checksum on 4 octet boundaries. | 44 | * which always checksum on 4 octet boundaries. |
53 | */ | 45 | */ |
54 | static inline unsigned short | 46 | static inline __sum16 |
55 | ip_fast_csum(unsigned char * iph, unsigned int ihl) | 47 | ip_fast_csum(const void *iph, unsigned int ihl) |
56 | { | 48 | { |
57 | unsigned int sum, tmp1; | 49 | unsigned int sum, tmp1; |
58 | 50 | ||
@@ -78,14 +70,13 @@ ip_fast_csum(unsigned char * iph, unsigned int ihl) | |||
78 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (tmp1) | 70 | : "=r" (sum), "=r" (iph), "=r" (ihl), "=r" (tmp1) |
79 | : "1" (iph), "2" (ihl) | 71 | : "1" (iph), "2" (ihl) |
80 | : "cc", "memory"); | 72 | : "cc", "memory"); |
81 | return sum; | 73 | return (__force __sum16)sum; |
82 | } | 74 | } |
83 | 75 | ||
84 | /* | 76 | /* |
85 | * Fold a partial checksum without adding pseudo headers | 77 | * Fold a partial checksum without adding pseudo headers |
86 | */ | 78 | */ |
87 | static inline unsigned int | 79 | static inline __sum16 csum_fold(__wsum sum) |
88 | csum_fold(unsigned int sum) | ||
89 | { | 80 | { |
90 | __asm__( | 81 | __asm__( |
91 | "adds %0, %1, %1, lsl #16 @ csum_fold \n\ | 82 | "adds %0, %1, %1, lsl #16 @ csum_fold \n\ |
@@ -93,21 +84,25 @@ csum_fold(unsigned int sum) | |||
93 | : "=r" (sum) | 84 | : "=r" (sum) |
94 | : "r" (sum) | 85 | : "r" (sum) |
95 | : "cc"); | 86 | : "cc"); |
96 | return (~sum) >> 16; | 87 | return (__force __sum16)(~(__force u32)sum >> 16); |
97 | } | 88 | } |
98 | 89 | ||
99 | static inline unsigned int | 90 | static inline __wsum |
100 | csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len, | 91 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, |
101 | unsigned int proto, unsigned int sum) | 92 | unsigned short proto, __wsum sum) |
102 | { | 93 | { |
103 | __asm__( | 94 | __asm__( |
104 | "adds %0, %1, %2 @ csum_tcpudp_nofold \n\ | 95 | "adds %0, %1, %2 @ csum_tcpudp_nofold \n\ |
105 | adcs %0, %0, %3 \n\ | 96 | adcs %0, %0, %3 \n" |
106 | adcs %0, %0, %4 \n\ | 97 | #ifdef __ARMEB__ |
107 | adcs %0, %0, %5 \n\ | 98 | "adcs %0, %0, %4 \n" |
99 | #else | ||
100 | "adcs %0, %0, %4, lsl #8 \n" | ||
101 | #endif | ||
102 | "adcs %0, %0, %5 \n\ | ||
108 | adc %0, %0, #0" | 103 | adc %0, %0, #0" |
109 | : "=&r"(sum) | 104 | : "=&r"(sum) |
110 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (ntohs(len)), "Ir" (ntohs(proto)) | 105 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (len), "Ir" (htons(proto)) |
111 | : "cc"); | 106 | : "cc"); |
112 | return sum; | 107 | return sum; |
113 | } | 108 | } |
@@ -115,23 +110,27 @@ csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, unsigned short len, | |||
115 | * computes the checksum of the TCP/UDP pseudo-header | 110 | * computes the checksum of the TCP/UDP pseudo-header |
116 | * returns a 16-bit checksum, already complemented | 111 | * returns a 16-bit checksum, already complemented |
117 | */ | 112 | */ |
118 | static inline unsigned short int | 113 | static inline __sum16 |
119 | csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len, | 114 | csum_tcpudp_magic(__be32 saddr, __be32 daddr, unsigned short len, |
120 | unsigned int proto, unsigned int sum) | 115 | unsigned short proto, __wsum sum) |
121 | { | 116 | { |
122 | __asm__( | 117 | __asm__( |
123 | "adds %0, %1, %2 @ csum_tcpudp_magic \n\ | 118 | "adds %0, %1, %2 @ csum_tcpudp_magic \n\ |
124 | adcs %0, %0, %3 \n\ | 119 | adcs %0, %0, %3 \n" |
125 | adcs %0, %0, %4 \n\ | 120 | #ifdef __ARMEB__ |
126 | adcs %0, %0, %5 \n\ | 121 | "adcs %0, %0, %4 \n" |
122 | #else | ||
123 | "adcs %0, %0, %4, lsl #8 \n" | ||
124 | #endif | ||
125 | "adcs %0, %0, %5 \n\ | ||
127 | adc %0, %0, #0 \n\ | 126 | adc %0, %0, #0 \n\ |
128 | adds %0, %0, %0, lsl #16 \n\ | 127 | adds %0, %0, %0, lsl #16 \n\ |
129 | addcs %0, %0, #0x10000 \n\ | 128 | addcs %0, %0, #0x10000 \n\ |
130 | mvn %0, %0" | 129 | mvn %0, %0" |
131 | : "=&r"(sum) | 130 | : "=&r"(sum) |
132 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (ntohs(len)), "Ir" (ntohs(proto)) | 131 | : "r" (sum), "r" (daddr), "r" (saddr), "r" (len), "Ir" (htons(proto)) |
133 | : "cc"); | 132 | : "cc"); |
134 | return sum >> 16; | 133 | return (__force __sum16)((__force u32)sum >> 16); |
135 | } | 134 | } |
136 | 135 | ||
137 | 136 | ||
@@ -139,20 +138,20 @@ csum_tcpudp_magic(unsigned long saddr, unsigned long daddr, unsigned short len, | |||
139 | * this routine is used for miscellaneous IP-like checksums, mainly | 138 | * this routine is used for miscellaneous IP-like checksums, mainly |
140 | * in icmp.c | 139 | * in icmp.c |
141 | */ | 140 | */ |
142 | static inline unsigned short | 141 | static inline __sum16 |
143 | ip_compute_csum(unsigned char * buff, int len) | 142 | ip_compute_csum(const void *buff, int len) |
144 | { | 143 | { |
145 | return csum_fold(csum_partial(buff, len, 0)); | 144 | return csum_fold(csum_partial(buff, len, 0)); |
146 | } | 145 | } |
147 | 146 | ||
148 | #define _HAVE_ARCH_IPV6_CSUM | 147 | #define _HAVE_ARCH_IPV6_CSUM |
149 | extern unsigned long | 148 | extern __wsum |
150 | __csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u32 len, | 149 | __csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __be32 len, |
151 | __u32 proto, unsigned int sum); | 150 | __be32 proto, __wsum sum); |
152 | 151 | ||
153 | static inline unsigned short int | 152 | static inline __sum16 |
154 | csum_ipv6_magic(struct in6_addr *saddr, struct in6_addr *daddr, __u32 len, | 153 | csum_ipv6_magic(const struct in6_addr *saddr, const struct in6_addr *daddr, __u32 len, |
155 | unsigned short proto, unsigned int sum) | 154 | unsigned short proto, __wsum sum) |
156 | { | 155 | { |
157 | return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl(len), | 156 | return csum_fold(__csum_ipv6_magic(saddr, daddr, htonl(len), |
158 | htonl(proto), sum)); | 157 | htonl(proto), sum)); |
diff --git a/include/asm-arm/device.h b/include/asm-arm/device.h new file mode 100644 index 000000000000..d8f9872b0e2d --- /dev/null +++ b/include/asm-arm/device.h | |||
@@ -0,0 +1,7 @@ | |||
1 | /* | ||
2 | * Arch specific extensions to struct device | ||
3 | * | ||
4 | * This file is released under the GPLv2 | ||
5 | */ | ||
6 | #include <asm-generic/device.h> | ||
7 | |||
diff --git a/include/asm-arm/dma-mapping.h b/include/asm-arm/dma-mapping.h index 666617711c81..9bc46b486afb 100644 --- a/include/asm-arm/dma-mapping.h +++ b/include/asm-arm/dma-mapping.h | |||
@@ -48,7 +48,7 @@ static inline int dma_get_cache_alignment(void) | |||
48 | return 32; | 48 | return 32; |
49 | } | 49 | } |
50 | 50 | ||
51 | static inline int dma_is_consistent(dma_addr_t handle) | 51 | static inline int dma_is_consistent(struct device *dev, dma_addr_t handle) |
52 | { | 52 | { |
53 | return !!arch_is_coherent(); | 53 | return !!arch_is_coherent(); |
54 | } | 54 | } |
diff --git a/include/asm-arm/setup.h b/include/asm-arm/setup.h index aa4b5782f0c9..e5407392afca 100644 --- a/include/asm-arm/setup.h +++ b/include/asm-arm/setup.h | |||
@@ -14,55 +14,57 @@ | |||
14 | #ifndef __ASMARM_SETUP_H | 14 | #ifndef __ASMARM_SETUP_H |
15 | #define __ASMARM_SETUP_H | 15 | #define __ASMARM_SETUP_H |
16 | 16 | ||
17 | #include <asm/types.h> | ||
18 | |||
17 | #define COMMAND_LINE_SIZE 1024 | 19 | #define COMMAND_LINE_SIZE 1024 |
18 | 20 | ||
19 | /* The list ends with an ATAG_NONE node. */ | 21 | /* The list ends with an ATAG_NONE node. */ |
20 | #define ATAG_NONE 0x00000000 | 22 | #define ATAG_NONE 0x00000000 |
21 | 23 | ||
22 | struct tag_header { | 24 | struct tag_header { |
23 | u32 size; | 25 | __u32 size; |
24 | u32 tag; | 26 | __u32 tag; |
25 | }; | 27 | }; |
26 | 28 | ||
27 | /* The list must start with an ATAG_CORE node */ | 29 | /* The list must start with an ATAG_CORE node */ |
28 | #define ATAG_CORE 0x54410001 | 30 | #define ATAG_CORE 0x54410001 |
29 | 31 | ||
30 | struct tag_core { | 32 | struct tag_core { |
31 | u32 flags; /* bit 0 = read-only */ | 33 | __u32 flags; /* bit 0 = read-only */ |
32 | u32 pagesize; | 34 | __u32 pagesize; |
33 | u32 rootdev; | 35 | __u32 rootdev; |
34 | }; | 36 | }; |
35 | 37 | ||
36 | /* it is allowed to have multiple ATAG_MEM nodes */ | 38 | /* it is allowed to have multiple ATAG_MEM nodes */ |
37 | #define ATAG_MEM 0x54410002 | 39 | #define ATAG_MEM 0x54410002 |
38 | 40 | ||
39 | struct tag_mem32 { | 41 | struct tag_mem32 { |
40 | u32 size; | 42 | __u32 size; |
41 | u32 start; /* physical start address */ | 43 | __u32 start; /* physical start address */ |
42 | }; | 44 | }; |
43 | 45 | ||
44 | /* VGA text type displays */ | 46 | /* VGA text type displays */ |
45 | #define ATAG_VIDEOTEXT 0x54410003 | 47 | #define ATAG_VIDEOTEXT 0x54410003 |
46 | 48 | ||
47 | struct tag_videotext { | 49 | struct tag_videotext { |
48 | u8 x; | 50 | __u8 x; |
49 | u8 y; | 51 | __u8 y; |
50 | u16 video_page; | 52 | __u16 video_page; |
51 | u8 video_mode; | 53 | __u8 video_mode; |
52 | u8 video_cols; | 54 | __u8 video_cols; |
53 | u16 video_ega_bx; | 55 | __u16 video_ega_bx; |
54 | u8 video_lines; | 56 | __u8 video_lines; |
55 | u8 video_isvga; | 57 | __u8 video_isvga; |
56 | u16 video_points; | 58 | __u16 video_points; |
57 | }; | 59 | }; |
58 | 60 | ||
59 | /* describes how the ramdisk will be used in kernel */ | 61 | /* describes how the ramdisk will be used in kernel */ |
60 | #define ATAG_RAMDISK 0x54410004 | 62 | #define ATAG_RAMDISK 0x54410004 |
61 | 63 | ||
62 | struct tag_ramdisk { | 64 | struct tag_ramdisk { |
63 | u32 flags; /* bit 0 = load, bit 1 = prompt */ | 65 | __u32 flags; /* bit 0 = load, bit 1 = prompt */ |
64 | u32 size; /* decompressed ramdisk size in _kilo_ bytes */ | 66 | __u32 size; /* decompressed ramdisk size in _kilo_ bytes */ |
65 | u32 start; /* starting block of floppy-based RAM disk image */ | 67 | __u32 start; /* starting block of floppy-based RAM disk image */ |
66 | }; | 68 | }; |
67 | 69 | ||
68 | /* describes where the compressed ramdisk image lives (virtual address) */ | 70 | /* describes where the compressed ramdisk image lives (virtual address) */ |
@@ -76,23 +78,23 @@ struct tag_ramdisk { | |||
76 | #define ATAG_INITRD2 0x54420005 | 78 | #define ATAG_INITRD2 0x54420005 |
77 | 79 | ||
78 | struct tag_initrd { | 80 | struct tag_initrd { |
79 | u32 start; /* physical start address */ | 81 | __u32 start; /* physical start address */ |
80 | u32 size; /* size of compressed ramdisk image in bytes */ | 82 | __u32 size; /* size of compressed ramdisk image in bytes */ |
81 | }; | 83 | }; |
82 | 84 | ||
83 | /* board serial number. "64 bits should be enough for everybody" */ | 85 | /* board serial number. "64 bits should be enough for everybody" */ |
84 | #define ATAG_SERIAL 0x54410006 | 86 | #define ATAG_SERIAL 0x54410006 |
85 | 87 | ||
86 | struct tag_serialnr { | 88 | struct tag_serialnr { |
87 | u32 low; | 89 | __u32 low; |
88 | u32 high; | 90 | __u32 high; |
89 | }; | 91 | }; |
90 | 92 | ||
91 | /* board revision */ | 93 | /* board revision */ |
92 | #define ATAG_REVISION 0x54410007 | 94 | #define ATAG_REVISION 0x54410007 |
93 | 95 | ||
94 | struct tag_revision { | 96 | struct tag_revision { |
95 | u32 rev; | 97 | __u32 rev; |
96 | }; | 98 | }; |
97 | 99 | ||
98 | /* initial values for vesafb-type framebuffers. see struct screen_info | 100 | /* initial values for vesafb-type framebuffers. see struct screen_info |
@@ -101,20 +103,20 @@ struct tag_revision { | |||
101 | #define ATAG_VIDEOLFB 0x54410008 | 103 | #define ATAG_VIDEOLFB 0x54410008 |
102 | 104 | ||
103 | struct tag_videolfb { | 105 | struct tag_videolfb { |
104 | u16 lfb_width; | 106 | __u16 lfb_width; |
105 | u16 lfb_height; | 107 | __u16 lfb_height; |
106 | u16 lfb_depth; | 108 | __u16 lfb_depth; |
107 | u16 lfb_linelength; | 109 | __u16 lfb_linelength; |
108 | u32 lfb_base; | 110 | __u32 lfb_base; |
109 | u32 lfb_size; | 111 | __u32 lfb_size; |
110 | u8 red_size; | 112 | __u8 red_size; |
111 | u8 red_pos; | 113 | __u8 red_pos; |
112 | u8 green_size; | 114 | __u8 green_size; |
113 | u8 green_pos; | 115 | __u8 green_pos; |
114 | u8 blue_size; | 116 | __u8 blue_size; |
115 | u8 blue_pos; | 117 | __u8 blue_pos; |
116 | u8 rsvd_size; | 118 | __u8 rsvd_size; |
117 | u8 rsvd_pos; | 119 | __u8 rsvd_pos; |
118 | }; | 120 | }; |
119 | 121 | ||
120 | /* command line: \0 terminated string */ | 122 | /* command line: \0 terminated string */ |
@@ -128,17 +130,17 @@ struct tag_cmdline { | |||
128 | #define ATAG_ACORN 0x41000101 | 130 | #define ATAG_ACORN 0x41000101 |
129 | 131 | ||
130 | struct tag_acorn { | 132 | struct tag_acorn { |
131 | u32 memc_control_reg; | 133 | __u32 memc_control_reg; |
132 | u32 vram_pages; | 134 | __u32 vram_pages; |
133 | u8 sounddefault; | 135 | __u8 sounddefault; |
134 | u8 adfsdrives; | 136 | __u8 adfsdrives; |
135 | }; | 137 | }; |
136 | 138 | ||
137 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ | 139 | /* footbridge memory clock, see arch/arm/mach-footbridge/arch.c */ |
138 | #define ATAG_MEMCLK 0x41000402 | 140 | #define ATAG_MEMCLK 0x41000402 |
139 | 141 | ||
140 | struct tag_memclk { | 142 | struct tag_memclk { |
141 | u32 fmemclk; | 143 | __u32 fmemclk; |
142 | }; | 144 | }; |
143 | 145 | ||
144 | struct tag { | 146 | struct tag { |
@@ -167,24 +169,26 @@ struct tag { | |||
167 | }; | 169 | }; |
168 | 170 | ||
169 | struct tagtable { | 171 | struct tagtable { |
170 | u32 tag; | 172 | __u32 tag; |
171 | int (*parse)(const struct tag *); | 173 | int (*parse)(const struct tag *); |
172 | }; | 174 | }; |
173 | 175 | ||
174 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | ||
175 | #define __tagtable(tag, fn) \ | ||
176 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | ||
177 | |||
178 | #define tag_member_present(tag,member) \ | 176 | #define tag_member_present(tag,member) \ |
179 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ | 177 | ((unsigned long)(&((struct tag *)0L)->member + 1) \ |
180 | <= (tag)->hdr.size * 4) | 178 | <= (tag)->hdr.size * 4) |
181 | 179 | ||
182 | #define tag_next(t) ((struct tag *)((u32 *)(t) + (t)->hdr.size)) | 180 | #define tag_next(t) ((struct tag *)((__u32 *)(t) + (t)->hdr.size)) |
183 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) | 181 | #define tag_size(type) ((sizeof(struct tag_header) + sizeof(struct type)) >> 2) |
184 | 182 | ||
185 | #define for_each_tag(t,base) \ | 183 | #define for_each_tag(t,base) \ |
186 | for (t = base; t->hdr.size; t = tag_next(t)) | 184 | for (t = base; t->hdr.size; t = tag_next(t)) |
187 | 185 | ||
186 | #ifdef __KERNEL__ | ||
187 | |||
188 | #define __tag __attribute_used__ __attribute__((__section__(".taglist.init"))) | ||
189 | #define __tagtable(tag, fn) \ | ||
190 | static struct tagtable __tagtable_##fn __tag = { tag, fn } | ||
191 | |||
188 | /* | 192 | /* |
189 | * Memory map description | 193 | * Memory map description |
190 | */ | 194 | */ |
@@ -217,4 +221,6 @@ struct early_params { | |||
217 | static struct early_params __early_##fn __attribute_used__ \ | 221 | static struct early_params __early_##fn __attribute_used__ \ |
218 | __attribute__((__section__(".early_param.init"))) = { name, fn } | 222 | __attribute__((__section__(".early_param.init"))) = { name, fn } |
219 | 223 | ||
224 | #endif /* __KERNEL__ */ | ||
225 | |||
220 | #endif | 226 | #endif |
diff --git a/include/asm-arm/unistd.h b/include/asm-arm/unistd.h index 14a87eec5a2d..d44c629d8424 100644 --- a/include/asm-arm/unistd.h +++ b/include/asm-arm/unistd.h | |||
@@ -377,156 +377,6 @@ | |||
377 | #endif | 377 | #endif |
378 | 378 | ||
379 | #ifdef __KERNEL__ | 379 | #ifdef __KERNEL__ |
380 | #include <linux/err.h> | ||
381 | #include <linux/linkage.h> | ||
382 | |||
383 | #define __sys2(x) #x | ||
384 | #define __sys1(x) __sys2(x) | ||
385 | |||
386 | #ifndef __syscall | ||
387 | #if defined(__thumb__) || defined(__ARM_EABI__) | ||
388 | #define __SYS_REG(name) register long __sysreg __asm__("r7") = __NR_##name; | ||
389 | #define __SYS_REG_LIST(regs...) "r" (__sysreg) , ##regs | ||
390 | #define __syscall(name) "swi\t0" | ||
391 | #else | ||
392 | #define __SYS_REG(name) | ||
393 | #define __SYS_REG_LIST(regs...) regs | ||
394 | #define __syscall(name) "swi\t" __sys1(__NR_##name) "" | ||
395 | #endif | ||
396 | #endif | ||
397 | |||
398 | #define __syscall_return(type, res) \ | ||
399 | do { \ | ||
400 | if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \ | ||
401 | errno = -(res); \ | ||
402 | res = -1; \ | ||
403 | } \ | ||
404 | return (type) (res); \ | ||
405 | } while (0) | ||
406 | |||
407 | #define _syscall0(type,name) \ | ||
408 | type name(void) { \ | ||
409 | __SYS_REG(name) \ | ||
410 | register long __res_r0 __asm__("r0"); \ | ||
411 | long __res; \ | ||
412 | __asm__ __volatile__ ( \ | ||
413 | __syscall(name) \ | ||
414 | : "=r" (__res_r0) \ | ||
415 | : __SYS_REG_LIST() \ | ||
416 | : "memory" ); \ | ||
417 | __res = __res_r0; \ | ||
418 | __syscall_return(type,__res); \ | ||
419 | } | ||
420 | |||
421 | #define _syscall1(type,name,type1,arg1) \ | ||
422 | type name(type1 arg1) { \ | ||
423 | __SYS_REG(name) \ | ||
424 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
425 | register long __res_r0 __asm__("r0"); \ | ||
426 | long __res; \ | ||
427 | __asm__ __volatile__ ( \ | ||
428 | __syscall(name) \ | ||
429 | : "=r" (__res_r0) \ | ||
430 | : __SYS_REG_LIST( "0" (__r0) ) \ | ||
431 | : "memory" ); \ | ||
432 | __res = __res_r0; \ | ||
433 | __syscall_return(type,__res); \ | ||
434 | } | ||
435 | |||
436 | #define _syscall2(type,name,type1,arg1,type2,arg2) \ | ||
437 | type name(type1 arg1,type2 arg2) { \ | ||
438 | __SYS_REG(name) \ | ||
439 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
440 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
441 | register long __res_r0 __asm__("r0"); \ | ||
442 | long __res; \ | ||
443 | __asm__ __volatile__ ( \ | ||
444 | __syscall(name) \ | ||
445 | : "=r" (__res_r0) \ | ||
446 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1) ) \ | ||
447 | : "memory" ); \ | ||
448 | __res = __res_r0; \ | ||
449 | __syscall_return(type,__res); \ | ||
450 | } | ||
451 | |||
452 | |||
453 | #define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ | ||
454 | type name(type1 arg1,type2 arg2,type3 arg3) { \ | ||
455 | __SYS_REG(name) \ | ||
456 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
457 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
458 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
459 | register long __res_r0 __asm__("r0"); \ | ||
460 | long __res; \ | ||
461 | __asm__ __volatile__ ( \ | ||
462 | __syscall(name) \ | ||
463 | : "=r" (__res_r0) \ | ||
464 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2) ) \ | ||
465 | : "memory" ); \ | ||
466 | __res = __res_r0; \ | ||
467 | __syscall_return(type,__res); \ | ||
468 | } | ||
469 | |||
470 | |||
471 | #define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ | ||
472 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4) { \ | ||
473 | __SYS_REG(name) \ | ||
474 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
475 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
476 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
477 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
478 | register long __res_r0 __asm__("r0"); \ | ||
479 | long __res; \ | ||
480 | __asm__ __volatile__ ( \ | ||
481 | __syscall(name) \ | ||
482 | : "=r" (__res_r0) \ | ||
483 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), "r" (__r3) ) \ | ||
484 | : "memory" ); \ | ||
485 | __res = __res_r0; \ | ||
486 | __syscall_return(type,__res); \ | ||
487 | } | ||
488 | |||
489 | |||
490 | #define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5) \ | ||
491 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5) { \ | ||
492 | __SYS_REG(name) \ | ||
493 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
494 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
495 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
496 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
497 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
498 | register long __res_r0 __asm__("r0"); \ | ||
499 | long __res; \ | ||
500 | __asm__ __volatile__ ( \ | ||
501 | __syscall(name) \ | ||
502 | : "=r" (__res_r0) \ | ||
503 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ | ||
504 | "r" (__r3), "r" (__r4) ) \ | ||
505 | : "memory" ); \ | ||
506 | __res = __res_r0; \ | ||
507 | __syscall_return(type,__res); \ | ||
508 | } | ||
509 | |||
510 | #define _syscall6(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4,type5,arg5,type6,arg6) \ | ||
511 | type name(type1 arg1, type2 arg2, type3 arg3, type4 arg4, type5 arg5, type6 arg6) { \ | ||
512 | __SYS_REG(name) \ | ||
513 | register long __r0 __asm__("r0") = (long)arg1; \ | ||
514 | register long __r1 __asm__("r1") = (long)arg2; \ | ||
515 | register long __r2 __asm__("r2") = (long)arg3; \ | ||
516 | register long __r3 __asm__("r3") = (long)arg4; \ | ||
517 | register long __r4 __asm__("r4") = (long)arg5; \ | ||
518 | register long __r5 __asm__("r5") = (long)arg6; \ | ||
519 | register long __res_r0 __asm__("r0"); \ | ||
520 | long __res; \ | ||
521 | __asm__ __volatile__ ( \ | ||
522 | __syscall(name) \ | ||
523 | : "=r" (__res_r0) \ | ||
524 | : __SYS_REG_LIST( "0" (__r0), "r" (__r1), "r" (__r2), \ | ||
525 | "r" (__r3), "r" (__r4), "r" (__r5) ) \ | ||
526 | : "memory" ); \ | ||
527 | __res = __res_r0; \ | ||
528 | __syscall_return(type,__res); \ | ||
529 | } | ||
530 | 380 | ||
531 | #define __ARCH_WANT_IPC_PARSE_VERSION | 381 | #define __ARCH_WANT_IPC_PARSE_VERSION |
532 | #define __ARCH_WANT_STAT64 | 382 | #define __ARCH_WANT_STAT64 |