1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASM_GENERIC_UNALIGNED_H 3 #define __ASM_GENERIC_UNALIGNED_H 4 5 /* 6 * This is the most generic implementation of unaligned accesses 7 * and should work almost anywhere. 8 */ 9 #include <asm/byteorder.h> 10 11 /* Set by the arch if it can handle unaligned accesses in hardware. */ 12 #ifdef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 13 # include <linux/unaligned/access_ok.h> 14 #endif 15 16 #if defined(__LITTLE_ENDIAN) 17 # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 18 # include <linux/unaligned/le_struct.h> 19 # include <linux/unaligned/be_byteshift.h> 20 # endif 21 # include <linux/unaligned/generic.h> 22 # define get_unaligned __get_unaligned_le 23 # define put_unaligned __put_unaligned_le 24 #elif defined(__BIG_ENDIAN) 25 # ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS 26 # include <linux/unaligned/be_struct.h> 27 # include <linux/unaligned/le_byteshift.h> 28 # endif 29 # include <linux/unaligned/generic.h> 30 # define get_unaligned __get_unaligned_be 31 # define put_unaligned __put_unaligned_be 32 #else 33 # error need to define endianess 34 #endif 35 36 #endif /* __ASM_GENERIC_UNALIGNED_H */ 37