blob: 791361786fcc6b40c9a39b7a291e95107a7e8648 [file] [log] [blame]
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -07001#ifndef __ASM_AVR32_UNALIGNED_H
2#define __ASM_AVR32_UNALIGNED_H
3
4/*
5 * AVR32 can handle some unaligned accesses, depending on the
6 * implementation. The AVR32 AP implementation can handle unaligned
7 * words, but halfwords must be halfword-aligned, and doublewords must
8 * be word-aligned.
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -07009 */
10
David Brownellc6083cd2007-05-25 18:47:47 -070011#include <asm-generic/unaligned.h>
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070012
David Brownellc6083cd2007-05-25 18:47:47 -070013#ifdef CONFIG_CPU_AT32AP7000
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070014
David Brownellc6083cd2007-05-25 18:47:47 -070015/* REVISIT calling memmove() may be smaller for 64-bit values ... */
16
17#undef get_unaligned
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070018#define get_unaligned(ptr) \
David Brownellc6083cd2007-05-25 18:47:47 -070019 ___get_unaligned(ptr, sizeof((*ptr)))
20#define ___get_unaligned(ptr, size) \
21 ((size == 4) ? *(ptr) : __get_unaligned(ptr, size))
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070022
David Brownellc6083cd2007-05-25 18:47:47 -070023#undef put_unaligned
24#define put_unaligned(val, ptr) \
25 ___put_unaligned((__u64)(val), ptr, sizeof((*ptr)))
26#define ___put_unaligned(val, ptr, size) \
27do { \
28 if (size == 4) \
29 *(ptr) = (val); \
30 else \
31 __put_unaligned(val, ptr, size); \
32} while (0)
33
34#endif
Haavard Skinnemoen5f97f7f2006-09-25 23:32:13 -070035
36#endif /* __ASM_AVR32_UNALIGNED_H */