| 1 | |
| 2 | * JFFS2 -- Journalling Flash File System, Version 2.
|
| 3 | *
|
| 4 | * Copyright © 2004 Ferenc Havasi <[email protected]>,
|
| 5 | * University of Szeged, Hungary
|
| 6 | * Copyright © 2004-2010 David Woodhouse <[email protected]>
|
| 7 | *
|
| 8 | * For licensing information, see the file 'LICENCE' in this directory.
|
| 9 | *
|
| 10 |
|
| 11 |
|
| 12 | #ifndef __JFFS2_COMPR_H__
|
| 13 | #define __JFFS2_COMPR_H__
|
| 14 |
|
| 15 | #include <linux/kernel.h>
|
| 16 | #include <linux/vmalloc.h>
|
| 17 | #include <linux/list.h>
|
| 18 | #include <linux/types.h>
|
| 19 | #include <linux/string.h>
|
| 20 | #include <linux/slab.h>
|
| 21 | #include <linux/errno.h>
|
| 22 | #include <linux/fs.h>
|
| 23 | #include <linux/jffs2.h>
|
| 24 | #include "jffs2_fs_i.h"
|
| 25 | #include "jffs2_fs_sb.h"
|
| 26 | #include "nodelist.h"
|
| 27 |
|
| 28 | #define JFFS2_RUBINMIPS_PRIORITY 10
|
| 29 | #define JFFS2_DYNRUBIN_PRIORITY 20
|
| 30 | #define JFFS2_LZARI_PRIORITY 30
|
| 31 | #define JFFS2_RTIME_PRIORITY 50
|
| 32 | #define JFFS2_ZLIB_PRIORITY 60
|
| 33 | #define JFFS2_LZO_PRIORITY 80
|
| 34 |
|
| 35 |
|
| 36 | #define JFFS2_RUBINMIPS_DISABLED
|
| 37 | #define JFFS2_DYNRUBIN_DISABLED
|
| 38 |
|
| 39 | #define JFFS2_COMPR_MODE_NONE 0
|
| 40 | #define JFFS2_COMPR_MODE_PRIORITY 1
|
| 41 | #define JFFS2_COMPR_MODE_SIZE 2
|
| 42 | #define JFFS2_COMPR_MODE_FAVOURLZO 3
|
| 43 | #define JFFS2_COMPR_MODE_FORCELZO 4
|
| 44 | #define JFFS2_COMPR_MODE_FORCEZLIB 5
|
| 45 |
|
| 46 | #define FAVOUR_LZO_PERCENT 80
|
| 47 |
|
| 48 | struct jffs2_compressor {
|
| 49 | struct list_head list;
|
| 50 | int priority;
|
| 51 | char *name;
|
| 52 | char compr;
|
| 53 | int (*compress)(unsigned char *data_in, unsigned char *cpage_out,
|
| 54 | uint32_t *srclen, uint32_t *destlen);
|
| 55 | int (*decompress)(unsigned char *cdata_in, unsigned char *data_out,
|
| 56 | uint32_t cdatalen, uint32_t datalen);
|
| 57 | int usecount;
|
| 58 | int disabled;
|
| 59 | unsigned char *compr_buf;
|
| 60 | uint32_t compr_buf_size;
|
| 61 | uint32_t stat_compr_orig_size;
|
| 62 | uint32_t stat_compr_new_size;
|
| 63 | uint32_t stat_compr_blocks;
|
| 64 | uint32_t stat_decompr_blocks;
|
| 65 | };
|
| 66 |
|
| 67 | int jffs2_register_compressor(struct jffs2_compressor *comp);
|
| 68 | int jffs2_unregister_compressor(struct jffs2_compressor *comp);
|
| 69 |
|
| 70 | int jffs2_compressors_init(void);
|
| 71 | int jffs2_compressors_exit(void);
|
| 72 |
|
| 73 | uint16_t jffs2_compress(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
|
| 74 | unsigned char *data_in, unsigned char **cpage_out,
|
| 75 | uint32_t *datalen, uint32_t *cdatalen);
|
| 76 |
|
| 77 | int jffs2_decompress(struct jffs2_sb_info *c, struct jffs2_inode_info *f,
|
| 78 | uint16_t comprtype, unsigned char *cdata_in,
|
| 79 | unsigned char *data_out, uint32_t cdatalen, uint32_t datalen);
|
| 80 |
|
| 81 | void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig);
|
| 82 |
|
| 83 |
|
| 84 |
|
| 85 |
|
| 86 | #ifdef CONFIG_JFFS2_RUBIN
|
| 87 | int jffs2_rubinmips_init(void);
|
| 88 | void jffs2_rubinmips_exit(void);
|
| 89 | int jffs2_dynrubin_init(void);
|
| 90 | void jffs2_dynrubin_exit(void);
|
| 91 | #else
|
| 92 | static inline int jffs2_rubinmips_init(void) { return 0; }
|
| 93 | static inline void jffs2_rubinmips_exit(void) {}
|
| 94 | static inline int jffs2_dynrubin_init(void) { return 0; }
|
| 95 | static inline void jffs2_dynrubin_exit(void) {}
|
| 96 | #endif
|
| 97 | #ifdef CONFIG_JFFS2_RTIME
|
| 98 | extern int jffs2_rtime_init(void);
|
| 99 | extern void jffs2_rtime_exit(void);
|
| 100 | #else
|
| 101 | static inline int jffs2_rtime_init(void) { return 0; }
|
| 102 | static inline void jffs2_rtime_exit(void) {}
|
| 103 | #endif
|
| 104 | #ifdef CONFIG_JFFS2_ZLIB
|
| 105 | extern int jffs2_zlib_init(void);
|
| 106 | extern void jffs2_zlib_exit(void);
|
| 107 | #else
|
| 108 | static inline int jffs2_zlib_init(void) { return 0; }
|
| 109 | static inline void jffs2_zlib_exit(void) {}
|
| 110 | #endif
|
| 111 | #ifdef CONFIG_JFFS2_LZO
|
| 112 | extern int jffs2_lzo_init(void);
|
| 113 | extern void jffs2_lzo_exit(void);
|
| 114 | #else
|
| 115 | static inline int jffs2_lzo_init(void) { return 0; }
|
| 116 | static inline void jffs2_lzo_exit(void) {}
|
| 117 | #endif
|
| 118 |
|
| 119 | #endif
|