Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
lib
xz
xz_private.h
Go to the documentation of this file.
1
/*
2
* Private includes and definitions
3
*
4
* Author: Lasse Collin <
[email protected]
>
5
*
6
* This file has been put into the public domain.
7
* You can do whatever you want with this file.
8
*/
9
10
#ifndef XZ_PRIVATE_H
11
#define XZ_PRIVATE_H
12
13
#ifdef __KERNEL__
14
# include <
linux/xz.h
>
15
# include <linux/kernel.h>
16
# include <asm/unaligned.h>
17
/* XZ_PREBOOT may be defined only via decompress_unxz.c. */
18
# ifndef XZ_PREBOOT
19
# include <linux/slab.h>
20
# include <
linux/vmalloc.h
>
21
# include <linux/string.h>
22
# ifdef CONFIG_XZ_DEC_X86
23
# define XZ_DEC_X86
24
# endif
25
# ifdef CONFIG_XZ_DEC_POWERPC
26
# define XZ_DEC_POWERPC
27
# endif
28
# ifdef CONFIG_XZ_DEC_IA64
29
# define XZ_DEC_IA64
30
# endif
31
# ifdef CONFIG_XZ_DEC_ARM
32
# define XZ_DEC_ARM
33
# endif
34
# ifdef CONFIG_XZ_DEC_ARMTHUMB
35
# define XZ_DEC_ARMTHUMB
36
# endif
37
# ifdef CONFIG_XZ_DEC_SPARC
38
# define XZ_DEC_SPARC
39
# endif
40
# define memeq(a, b, size) (memcmp(a, b, size) == 0)
41
# define memzero(buf, size) memset(buf, 0, size)
42
# endif
43
# define get_le32(p) le32_to_cpup((const uint32_t *)(p))
44
#else
45
/*
46
* For userspace builds, use a separate header to define the required
47
* macros and functions. This makes it easier to adapt the code into
48
* different environments and avoids clutter in the Linux kernel tree.
49
*/
50
# include "xz_config.h"
51
#endif
52
53
/* If no specific decoding mode is requested, enable support for all modes. */
54
#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \
55
&& !defined(XZ_DEC_DYNALLOC)
56
# define XZ_DEC_SINGLE
57
# define XZ_DEC_PREALLOC
58
# define XZ_DEC_DYNALLOC
59
#endif
60
61
/*
62
* The DEC_IS_foo(mode) macros are used in "if" statements. If only some
63
* of the supported modes are enabled, these macros will evaluate to true or
64
* false at compile time and thus allow the compiler to omit unneeded code.
65
*/
66
#ifdef XZ_DEC_SINGLE
67
# define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE)
68
#else
69
# define DEC_IS_SINGLE(mode) (false)
70
#endif
71
72
#ifdef XZ_DEC_PREALLOC
73
# define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC)
74
#else
75
# define DEC_IS_PREALLOC(mode) (false)
76
#endif
77
78
#ifdef XZ_DEC_DYNALLOC
79
# define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC)
80
#else
81
# define DEC_IS_DYNALLOC(mode) (false)
82
#endif
83
84
#if !defined(XZ_DEC_SINGLE)
85
# define DEC_IS_MULTI(mode) (true)
86
#elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC)
87
# define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE)
88
#else
89
# define DEC_IS_MULTI(mode) (false)
90
#endif
91
92
/*
93
* If any of the BCJ filter decoders are wanted, define XZ_DEC_BCJ.
94
* XZ_DEC_BCJ is used to enable generic support for BCJ decoders.
95
*/
96
#ifndef XZ_DEC_BCJ
97
# if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \
98
|| defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \
99
|| defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \
100
|| defined(XZ_DEC_SPARC)
101
# define XZ_DEC_BCJ
102
# endif
103
#endif
104
105
/*
106
* Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used
107
* before calling xz_dec_lzma2_run().
108
*/
109
XZ_EXTERN
struct
xz_dec_lzma2
*
xz_dec_lzma2_create
(
enum
xz_mode
mode
,
110
uint32_t
dict_max);
111
112
/*
113
* Decode the LZMA2 properties (one byte) and reset the decoder. Return
114
* XZ_OK on success, XZ_MEMLIMIT_ERROR if the preallocated dictionary is not
115
* big enough, and XZ_OPTIONS_ERROR if props indicates something that this
116
* decoder doesn't support.
117
*/
118
XZ_EXTERN
enum
xz_ret
xz_dec_lzma2_reset
(
struct
xz_dec_lzma2
*
s
,
119
uint8_t
props);
120
121
/* Decode raw LZMA2 stream from b->in to b->out. */
122
XZ_EXTERN
enum
xz_ret
xz_dec_lzma2_run
(
struct
xz_dec_lzma2
*
s
,
123
struct
xz_buf
*
b
);
124
125
/* Free the memory allocated for the LZMA2 decoder. */
126
XZ_EXTERN
void
xz_dec_lzma2_end
(
struct
xz_dec_lzma2
*
s
);
127
128
#ifdef XZ_DEC_BCJ
129
/*
130
* Allocate memory for BCJ decoders. xz_dec_bcj_reset() must be used before
131
* calling xz_dec_bcj_run().
132
*/
133
XZ_EXTERN
struct
xz_dec_bcj *xz_dec_bcj_create(
bool
single_call);
134
135
/*
136
* Decode the Filter ID of a BCJ filter. This implementation doesn't
137
* support custom start offsets, so no decoding of Filter Properties
138
* is needed. Returns XZ_OK if the given Filter ID is supported.
139
* Otherwise XZ_OPTIONS_ERROR is returned.
140
*/
141
XZ_EXTERN
enum
xz_ret
xz_dec_bcj_reset(
struct
xz_dec_bcj *
s
,
uint8_t
id
);
142
143
/*
144
* Decode raw BCJ + LZMA2 stream. This must be used only if there actually is
145
* a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run()
146
* must be called directly.
147
*/
148
XZ_EXTERN
enum
xz_ret
xz_dec_bcj_run(
struct
xz_dec_bcj *
s
,
149
struct
xz_dec_lzma2
*lzma2,
150
struct
xz_buf
*
b
);
151
152
/* Free the memory allocated for the BCJ filters. */
153
#define xz_dec_bcj_end(s) kfree(s)
154
#endif
155
156
#endif
Generated on Thu Jan 10 2013 14:56:00 for Linux Kernel by
1.8.2