diff options
Diffstat (limited to 'arch/ia64/include')
-rw-r--r-- | arch/ia64/include/asm/elf.h | 15 | ||||
-rw-r--r-- | arch/ia64/include/asm/io.h | 10 | ||||
-rw-r--r-- | arch/ia64/include/asm/sections.h | 14 | ||||
-rw-r--r-- | arch/ia64/include/asm/sn/bte.h | 9 |
4 files changed, 40 insertions, 8 deletions
diff --git a/arch/ia64/include/asm/elf.h b/arch/ia64/include/asm/elf.h index 5e0c1a6bce8d..2acb6b6543c9 100644 --- a/arch/ia64/include/asm/elf.h +++ b/arch/ia64/include/asm/elf.h | |||
@@ -266,4 +266,19 @@ do { \ | |||
266 | } \ | 266 | } \ |
267 | } while (0) | 267 | } while (0) |
268 | 268 | ||
269 | /* | ||
270 | * format for entries in the Global Offset Table | ||
271 | */ | ||
272 | struct got_entry { | ||
273 | uint64_t val; | ||
274 | }; | ||
275 | |||
276 | /* | ||
277 | * Layout of the Function Descriptor | ||
278 | */ | ||
279 | struct fdesc { | ||
280 | uint64_t ip; | ||
281 | uint64_t gp; | ||
282 | }; | ||
283 | |||
269 | #endif /* _ASM_IA64_ELF_H */ | 284 | #endif /* _ASM_IA64_ELF_H */ |
diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h index 260a85ac9d6a..7f257507cd86 100644 --- a/arch/ia64/include/asm/io.h +++ b/arch/ia64/include/asm/io.h | |||
@@ -19,6 +19,8 @@ | |||
19 | * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> | 19 | * Copyright (C) 1999 Don Dugger <don.dugger@intel.com> |
20 | */ | 20 | */ |
21 | 21 | ||
22 | #include <asm/unaligned.h> | ||
23 | |||
22 | /* We don't use IO slowdowns on the ia64, but.. */ | 24 | /* We don't use IO slowdowns on the ia64, but.. */ |
23 | #define __SLOW_DOWN_IO do { } while (0) | 25 | #define __SLOW_DOWN_IO do { } while (0) |
24 | #define SLOW_DOWN_IO do { } while (0) | 26 | #define SLOW_DOWN_IO do { } while (0) |
@@ -241,7 +243,7 @@ __insw (unsigned long port, void *dst, unsigned long count) | |||
241 | unsigned short *dp = dst; | 243 | unsigned short *dp = dst; |
242 | 244 | ||
243 | while (count--) | 245 | while (count--) |
244 | *dp++ = platform_inw(port); | 246 | put_unaligned(platform_inw(port), dp++); |
245 | } | 247 | } |
246 | 248 | ||
247 | static inline void | 249 | static inline void |
@@ -250,7 +252,7 @@ __insl (unsigned long port, void *dst, unsigned long count) | |||
250 | unsigned int *dp = dst; | 252 | unsigned int *dp = dst; |
251 | 253 | ||
252 | while (count--) | 254 | while (count--) |
253 | *dp++ = platform_inl(port); | 255 | put_unaligned(platform_inl(port), dp++); |
254 | } | 256 | } |
255 | 257 | ||
256 | static inline void | 258 | static inline void |
@@ -268,7 +270,7 @@ __outsw (unsigned long port, const void *src, unsigned long count) | |||
268 | const unsigned short *sp = src; | 270 | const unsigned short *sp = src; |
269 | 271 | ||
270 | while (count--) | 272 | while (count--) |
271 | platform_outw(*sp++, port); | 273 | platform_outw(get_unaligned(sp++), port); |
272 | } | 274 | } |
273 | 275 | ||
274 | static inline void | 276 | static inline void |
@@ -277,7 +279,7 @@ __outsl (unsigned long port, const void *src, unsigned long count) | |||
277 | const unsigned int *sp = src; | 279 | const unsigned int *sp = src; |
278 | 280 | ||
279 | while (count--) | 281 | while (count--) |
280 | platform_outl(*sp++, port); | 282 | platform_outl(get_unaligned(sp++), port); |
281 | } | 283 | } |
282 | 284 | ||
283 | /* | 285 | /* |
diff --git a/arch/ia64/include/asm/sections.h b/arch/ia64/include/asm/sections.h index 7286e4a9fe84..f66799891036 100644 --- a/arch/ia64/include/asm/sections.h +++ b/arch/ia64/include/asm/sections.h | |||
@@ -6,6 +6,8 @@ | |||
6 | * David Mosberger-Tang <davidm@hpl.hp.com> | 6 | * David Mosberger-Tang <davidm@hpl.hp.com> |
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/elf.h> | ||
10 | #include <linux/uaccess.h> | ||
9 | #include <asm-generic/sections.h> | 11 | #include <asm-generic/sections.h> |
10 | 12 | ||
11 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; | 13 | extern char __per_cpu_start[], __per_cpu_end[], __phys_per_cpu_start[]; |
@@ -21,5 +23,17 @@ extern char __start_gate_brl_fsys_bubble_down_patchlist[], __end_gate_brl_fsys_b | |||
21 | extern char __start_unwind[], __end_unwind[]; | 23 | extern char __start_unwind[], __end_unwind[]; |
22 | extern char __start_ivt_text[], __end_ivt_text[]; | 24 | extern char __start_ivt_text[], __end_ivt_text[]; |
23 | 25 | ||
26 | #undef dereference_function_descriptor | ||
27 | static inline void *dereference_function_descriptor(void *ptr) | ||
28 | { | ||
29 | struct fdesc *desc = ptr; | ||
30 | void *p; | ||
31 | |||
32 | if (!probe_kernel_address(&desc->ip, p)) | ||
33 | ptr = p; | ||
34 | return ptr; | ||
35 | } | ||
36 | |||
37 | |||
24 | #endif /* _ASM_IA64_SECTIONS_H */ | 38 | #endif /* _ASM_IA64_SECTIONS_H */ |
25 | 39 | ||
diff --git a/arch/ia64/include/asm/sn/bte.h b/arch/ia64/include/asm/sn/bte.h index a0d214f43115..5efecf06c9a4 100644 --- a/arch/ia64/include/asm/sn/bte.h +++ b/arch/ia64/include/asm/sn/bte.h | |||
@@ -223,10 +223,11 @@ extern void bte_error_handler(unsigned long); | |||
223 | * until the transfer is complete. In order to get the asynch | 223 | * until the transfer is complete. In order to get the asynch |
224 | * version of bte_copy, you must perform this check yourself. | 224 | * version of bte_copy, you must perform this check yourself. |
225 | */ | 225 | */ |
226 | #define BTE_UNALIGNED_COPY(src, dest, len, mode) \ | 226 | #define BTE_UNALIGNED_COPY(src, dest, len, mode) \ |
227 | (((len & L1_CACHE_MASK) || (src & L1_CACHE_MASK) || \ | 227 | (((len & (L1_CACHE_BYTES - 1)) || \ |
228 | (dest & L1_CACHE_MASK)) ? \ | 228 | (src & (L1_CACHE_BYTES - 1)) || \ |
229 | bte_unaligned_copy(src, dest, len, mode) : \ | 229 | (dest & (L1_CACHE_BYTES - 1))) ? \ |
230 | bte_unaligned_copy(src, dest, len, mode) : \ | ||
230 | bte_copy(src, dest, len, mode, NULL)) | 231 | bte_copy(src, dest, len, mode, NULL)) |
231 | 232 | ||
232 | 233 | ||