1229159Sadrian/* 2229159Sadrian * Private includes and definitions 3229159Sadrian * 4229159Sadrian * Author: Lasse Collin <lasse.collin@tukaani.org> 5229159Sadrian * 6229159Sadrian * This file has been put into the public domain. 7229159Sadrian * You can do whatever you want with this file. 8229159Sadrian */ 9229159Sadrian 10229159Sadrian#ifndef XZ_PRIVATE_H 11229159Sadrian#define XZ_PRIVATE_H 12229159Sadrian 13229159Sadrian#ifdef __KERNEL__ 14229159Sadrian# include <linux/xz.h> 15229159Sadrian# include <linux/kernel.h> 16229159Sadrian# include <asm/unaligned.h> 17229159Sadrian /* XZ_PREBOOT may be defined only via decompress_unxz.c. */ 18229159Sadrian# ifndef XZ_PREBOOT 19229159Sadrian# include <linux/slab.h> 20229159Sadrian# include <linux/vmalloc.h> 21229159Sadrian# include <linux/string.h> 22229159Sadrian# ifdef CONFIG_XZ_DEC_X86 23229159Sadrian# define XZ_DEC_X86 24229159Sadrian# endif 25229159Sadrian# ifdef CONFIG_XZ_DEC_POWERPC 26229159Sadrian# define XZ_DEC_POWERPC 27229159Sadrian# endif 28229159Sadrian# ifdef CONFIG_XZ_DEC_IA64 29229159Sadrian# define XZ_DEC_IA64 30229159Sadrian# endif 31229159Sadrian# ifdef CONFIG_XZ_DEC_ARM 32229159Sadrian# define XZ_DEC_ARM 33229159Sadrian# endif 34229159Sadrian# ifdef CONFIG_XZ_DEC_ARMTHUMB 35229159Sadrian# define XZ_DEC_ARMTHUMB 36229159Sadrian# endif 37229159Sadrian# ifdef CONFIG_XZ_DEC_SPARC 38229159Sadrian# define XZ_DEC_SPARC 39229159Sadrian# endif 40229159Sadrian# define memeq(a, b, size) (memcmp(a, b, size) == 0) 41229159Sadrian# define memzero(buf, size) memset(buf, 0, size) 42229159Sadrian# endif 43229159Sadrian# define get_le32(p) le32_to_cpup((const uint32_t *)(p)) 44229159Sadrian#else 45229159Sadrian /* 46229159Sadrian * For userspace builds, use a separate header to define the required 47229159Sadrian * macros and functions. This makes it easier to adapt the code into 48229159Sadrian * different environments and avoids clutter in the Linux kernel tree. 49229159Sadrian */ 50229533Sray# include <contrib/xz-embedded/freebsd/xz_config.h> 51229159Sadrian#endif 52229159Sadrian 53229159Sadrian/* If no specific decoding mode is requested, enable support for all modes. */ 54229159Sadrian#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \ 55229159Sadrian && !defined(XZ_DEC_DYNALLOC) 56229159Sadrian# define XZ_DEC_SINGLE 57229159Sadrian# define XZ_DEC_PREALLOC 58229159Sadrian# define XZ_DEC_DYNALLOC 59229159Sadrian#endif 60229159Sadrian 61229159Sadrian/* 62229159Sadrian * The DEC_IS_foo(mode) macros are used in "if" statements. If only some 63229159Sadrian * of the supported modes are enabled, these macros will evaluate to true or 64229159Sadrian * false at compile time and thus allow the compiler to omit unneeded code. 65229159Sadrian */ 66229159Sadrian#ifdef XZ_DEC_SINGLE 67229159Sadrian# define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE) 68229159Sadrian#else 69229159Sadrian# define DEC_IS_SINGLE(mode) (false) 70229159Sadrian#endif 71229159Sadrian 72229159Sadrian#ifdef XZ_DEC_PREALLOC 73229159Sadrian# define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC) 74229159Sadrian#else 75229159Sadrian# define DEC_IS_PREALLOC(mode) (false) 76229159Sadrian#endif 77229159Sadrian 78229159Sadrian#ifdef XZ_DEC_DYNALLOC 79229159Sadrian# define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC) 80229159Sadrian#else 81229159Sadrian# define DEC_IS_DYNALLOC(mode) (false) 82229159Sadrian#endif 83229159Sadrian 84229159Sadrian#if !defined(XZ_DEC_SINGLE) 85229159Sadrian# define DEC_IS_MULTI(mode) (true) 86229159Sadrian#elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC) 87229159Sadrian# define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE) 88229159Sadrian#else 89229159Sadrian# define DEC_IS_MULTI(mode) (false) 90229159Sadrian#endif 91229159Sadrian 92229159Sadrian/* 93229159Sadrian * If any of the BCJ filter decoders are wanted, define XZ_DEC_BCJ. 94229159Sadrian * XZ_DEC_BCJ is used to enable generic support for BCJ decoders. 95229159Sadrian */ 96229159Sadrian#ifndef XZ_DEC_BCJ 97229159Sadrian# if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \ 98229159Sadrian || defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \ 99229159Sadrian || defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \ 100229159Sadrian || defined(XZ_DEC_SPARC) 101229159Sadrian# define XZ_DEC_BCJ 102229159Sadrian# endif 103229159Sadrian#endif 104229159Sadrian 105229159Sadrian/* 106229159Sadrian * Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used 107229159Sadrian * before calling xz_dec_lzma2_run(). 108229159Sadrian */ 109229159SadrianXZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, 110229159Sadrian uint32_t dict_max); 111229159Sadrian 112229159Sadrian/* 113229159Sadrian * Decode the LZMA2 properties (one byte) and reset the decoder. Return 114229159Sadrian * XZ_OK on success, XZ_MEMLIMIT_ERROR if the preallocated dictionary is not 115229159Sadrian * big enough, and XZ_OPTIONS_ERROR if props indicates something that this 116229159Sadrian * decoder doesn't support. 117229159Sadrian */ 118229159SadrianXZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, 119229159Sadrian uint8_t props); 120229159Sadrian 121229159Sadrian/* Decode raw LZMA2 stream from b->in to b->out. */ 122229159SadrianXZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, 123229159Sadrian struct xz_buf *b); 124229159Sadrian 125229159Sadrian/* Free the memory allocated for the LZMA2 decoder. */ 126229159SadrianXZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s); 127229159Sadrian 128229159Sadrian#ifdef XZ_DEC_BCJ 129229159Sadrian/* 130229159Sadrian * Allocate memory for BCJ decoders. xz_dec_bcj_reset() must be used before 131229159Sadrian * calling xz_dec_bcj_run(). 132229159Sadrian */ 133229159SadrianXZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call); 134229159Sadrian 135229159Sadrian/* 136229159Sadrian * Decode the Filter ID of a BCJ filter. This implementation doesn't 137229159Sadrian * support custom start offsets, so no decoding of Filter Properties 138229159Sadrian * is needed. Returns XZ_OK if the given Filter ID is supported. 139229159Sadrian * Otherwise XZ_OPTIONS_ERROR is returned. 140229159Sadrian */ 141229159SadrianXZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id); 142229159Sadrian 143229159Sadrian/* 144229159Sadrian * Decode raw BCJ + LZMA2 stream. This must be used only if there actually is 145229159Sadrian * a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run() 146229159Sadrian * must be called directly. 147229159Sadrian */ 148229159SadrianXZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, 149229159Sadrian struct xz_dec_lzma2 *lzma2, 150229159Sadrian struct xz_buf *b); 151229159Sadrian 152229159Sadrian/* Free the memory allocated for the BCJ filters. */ 153229159Sadrian#define xz_dec_bcj_end(s) kfree(s) 154229159Sadrian#endif 155229159Sadrian 156229159Sadrian#endif 157