1  /* SPDX-License-Identifier: GPL-2.0 */
2  /*
3   *  lzodefs.h -- architecture, OS and compiler specific defines
4   *
5   *  Copyright (C) 1996-2012 Markus F.X.J. Oberhumer <markus@oberhumer.com>
6   *
7   *  The full LZO package can be found at:
8   *  http://www.oberhumer.com/opensource/lzo/
9   *
10   *  Changed for Linux kernel use by:
11   *  Nitin Gupta <nitingupta910@gmail.com>
12   *  Richard Purdie <rpurdie@openedhand.com>
13   */
14  
15  
16  /* Version
17   * 0: original lzo version
18   * 1: lzo with support for RLE
19   */
20  #define LZO_VERSION 1
21  
22  #define COPY4(dst, src)	\
23  		put_unaligned(get_unaligned((const u32 *)(src)), (u32 *)(dst))
24  #if defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
25  #define COPY8(dst, src)	\
26  		put_unaligned(get_unaligned((const u64 *)(src)), (u64 *)(dst))
27  #else
28  #define COPY8(dst, src)	\
29  		COPY4(dst, src); COPY4((dst) + 4, (src) + 4)
30  #endif
31  
32  #if defined(__BIG_ENDIAN) && defined(__LITTLE_ENDIAN)
33  #error "conflicting endian definitions"
34  #elif defined(CONFIG_X86_64) || defined(CONFIG_ARM64)
35  #define LZO_USE_CTZ64	1
36  #define LZO_USE_CTZ32	1
37  #define LZO_FAST_64BIT_MEMORY_ACCESS
38  #elif defined(CONFIG_X86) || defined(CONFIG_PPC)
39  #define LZO_USE_CTZ32	1
40  #elif defined(CONFIG_ARM) && (__LINUX_ARM_ARCH__ >= 5)
41  #define LZO_USE_CTZ32	1
42  #endif
43  
44  #define M1_MAX_OFFSET	0x0400
45  #define M2_MAX_OFFSET	0x0800
46  #define M3_MAX_OFFSET	0x4000
47  #define M4_MAX_OFFSET_V0	0xbfff
48  #define M4_MAX_OFFSET_V1	0xbffe
49  
50  #define M1_MIN_LEN	2
51  #define M1_MAX_LEN	2
52  #define M2_MIN_LEN	3
53  #define M2_MAX_LEN	8
54  #define M3_MIN_LEN	3
55  #define M3_MAX_LEN	33
56  #define M4_MIN_LEN	3
57  #define M4_MAX_LEN	9
58  
59  #define M1_MARKER	0
60  #define M2_MARKER	64
61  #define M3_MARKER	32
62  #define M4_MARKER	16
63  
64  #define MIN_ZERO_RUN_LENGTH	4
65  #define MAX_ZERO_RUN_LENGTH	(2047 + MIN_ZERO_RUN_LENGTH)
66  
67  #define lzo_dict_t      unsigned short
68  #define D_BITS		13
69  #define D_SIZE		(1u << D_BITS)
70  #define D_MASK		(D_SIZE - 1)
71  #define D_HIGH		((D_MASK >> 1) + 1)
72