162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci *  lzodefs.h -- architecture, OS and compiler specific defines
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci *  Copyright (C) 1996-2012 Markus F.X.J. Oberhumer <markus@oberhumer.com>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci *  The full LZO package can be found at:
862306a36Sopenharmony_ci *  http://www.oberhumer.com/opensource/lzo/
962306a36Sopenharmony_ci *
1062306a36Sopenharmony_ci *  Changed for Linux kernel use by:
1162306a36Sopenharmony_ci *  Nitin Gupta <nitingupta910@gmail.com>
1262306a36Sopenharmony_ci *  Richard Purdie <rpurdie@openedhand.com>
1362306a36Sopenharmony_ci */
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/* Version
1762306a36Sopenharmony_ci * 0: original lzo version
1862306a36Sopenharmony_ci * 1: lzo with support for RLE
1962306a36Sopenharmony_ci */
2062306a36Sopenharmony_ci#define LZO_VERSION 1
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci#define COPY4(dst, src)	\
2362306a36Sopenharmony_ci		put_unaligned(get_unaligned((const u32 *)(src)), (u32 *)(dst))
2462306a36Sopenharmony_ci#if defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
2562306a36Sopenharmony_ci#define COPY8(dst, src)	\
2662306a36Sopenharmony_ci		put_unaligned(get_unaligned((const u64 *)(src)), (u64 *)(dst))
2762306a36Sopenharmony_ci#else
2862306a36Sopenharmony_ci#define COPY8(dst, src)	\
2962306a36Sopenharmony_ci		COPY4(dst, src); COPY4((dst) + 4, (src) + 4)
3062306a36Sopenharmony_ci#endif
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN)
3362306a36Sopenharmony_ci#error "conflicting endian definitions"
3462306a36Sopenharmony_ci#elif defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
3562306a36Sopenharmony_ci#define LZO_USE_CTZ64	1
3662306a36Sopenharmony_ci#define LZO_USE_CTZ32	1
3762306a36Sopenharmony_ci#define LZO_FAST_64BIT_MEMORY_ACCESS
3862306a36Sopenharmony_ci#elif defined(CONFIG_X86) || defined(CONFIG_PPC)
3962306a36Sopenharmony_ci#define LZO_USE_CTZ32	1
4062306a36Sopenharmony_ci#elif defined(CONFIG_ARM) && (__LINUX_ARM_ARCH__ >= 5)
4162306a36Sopenharmony_ci#define LZO_USE_CTZ32	1
4262306a36Sopenharmony_ci#endif
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci#define M1_MAX_OFFSET	0x0400
4562306a36Sopenharmony_ci#define M2_MAX_OFFSET	0x0800
4662306a36Sopenharmony_ci#define M3_MAX_OFFSET	0x4000
4762306a36Sopenharmony_ci#define M4_MAX_OFFSET_V0	0xbfff
4862306a36Sopenharmony_ci#define M4_MAX_OFFSET_V1	0xbffe
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#define M1_MIN_LEN	2
5162306a36Sopenharmony_ci#define M1_MAX_LEN	2
5262306a36Sopenharmony_ci#define M2_MIN_LEN	3
5362306a36Sopenharmony_ci#define M2_MAX_LEN	8
5462306a36Sopenharmony_ci#define M3_MIN_LEN	3
5562306a36Sopenharmony_ci#define M3_MAX_LEN	33
5662306a36Sopenharmony_ci#define M4_MIN_LEN	3
5762306a36Sopenharmony_ci#define M4_MAX_LEN	9
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#define M1_MARKER	0
6062306a36Sopenharmony_ci#define M2_MARKER	64
6162306a36Sopenharmony_ci#define M3_MARKER	32
6262306a36Sopenharmony_ci#define M4_MARKER	16
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define MIN_ZERO_RUN_LENGTH	4
6562306a36Sopenharmony_ci#define MAX_ZERO_RUN_LENGTH	(2047 + MIN_ZERO_RUN_LENGTH)
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#define lzo_dict_t      unsigned short
6862306a36Sopenharmony_ci#define D_BITS		13
6962306a36Sopenharmony_ci#define D_SIZE		(1u << D_BITS)
7062306a36Sopenharmony_ci#define D_MASK		(D_SIZE - 1)
7162306a36Sopenharmony_ci#define D_HIGH		((D_MASK >> 1) + 1)
72