unaligned.h 930 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifndef __ASM_AVR32_UNALIGNED_H
  2. #define __ASM_AVR32_UNALIGNED_H
  3. /*
  4. * AVR32 can handle some unaligned accesses, depending on the
  5. * implementation. The AVR32 AP implementation can handle unaligned
  6. * words, but halfwords must be halfword-aligned, and doublewords must
  7. * be word-aligned.
  8. */
  9. #include <asm-generic/unaligned.h>
  10. #ifdef CONFIG_CPU_AT32AP7000
  11. /* REVISIT calling memmove() may be smaller for 64-bit values ... */
  12. #undef get_unaligned
  13. #define get_unaligned(ptr) \
  14. ___get_unaligned(ptr, sizeof((*ptr)))
  15. #define ___get_unaligned(ptr, size) \
  16. ((size == 4) ? *(ptr) : __get_unaligned(ptr, size))
  17. #undef put_unaligned
  18. #define put_unaligned(val, ptr) \
  19. ___put_unaligned((__u64)(val), ptr, sizeof((*ptr)))
  20. #define ___put_unaligned(val, ptr, size) \
  21. do { \
  22. if (size == 4) \
  23. *(ptr) = (val); \
  24. else \
  25. __put_unaligned(val, ptr, size); \
  26. } while (0)
  27. #endif
  28. #endif /* __ASM_AVR32_UNALIGNED_H */