blob: 374c940e9be126787ce98815894f94629fa089d8 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001/* SPDX-License-Identifier: GPL-2.0 */
Arnd Bergmannaafe4db2009-05-13 22:56:33 +00002#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.
Arnd Bergmannaafe4db2009-05-13 22:56:33 +00008 */
9#include <asm/byteorder.h>
10
Ard Biesheuvel0567f5f2014-05-01 17:49:33 +020011/* 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
Arnd Bergmannaafe4db2009-05-13 22:56:33 +000016#if defined(__LITTLE_ENDIAN)
Ard Biesheuvel0567f5f2014-05-01 17:49:33 +020017# ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
18# include <linux/unaligned/le_struct.h>
19# include <linux/unaligned/be_byteshift.h>
20# endif
Arnd Bergmannaafe4db2009-05-13 22:56:33 +000021# include <linux/unaligned/generic.h>
22# define get_unaligned __get_unaligned_le
23# define put_unaligned __put_unaligned_le
24#elif defined(__BIG_ENDIAN)
Ard Biesheuvel0567f5f2014-05-01 17:49:33 +020025# ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
26# include <linux/unaligned/be_struct.h>
27# include <linux/unaligned/le_byteshift.h>
28# endif
Arnd Bergmannaafe4db2009-05-13 22:56:33 +000029# 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 */