linux/fs/jffs2/compr.h
<<
>>
Prefs
   1/*
   2 * JFFS2 -- Journalling Flash File System, Version 2.
   3 *
   4 * Copyright © 2004   Ferenc Havasi <havasi@inf.u-szeged.hu>,
   5 *                    University of Szeged, Hungary
   6 * Copyright © 2004-2010 David Woodhouse <dwmw2@infradead.org>
   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 /* RUBINs will be used only */
  37#define JFFS2_DYNRUBIN_DISABLED  /*        for decompression */
  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
  48struct jffs2_compressor {
  49        struct list_head list;
  50        int priority;                   /* used by prirority comr. mode */
  51        char *name;
  52        char compr;                     /* JFFS2_COMPR_XXX */
  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;           /* if set the compressor won't compress */
  59        unsigned char *compr_buf;       /* used by size compr. mode */
  60        uint32_t compr_buf_size;        /* used by size compr. mode */
  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
  67int jffs2_register_compressor(struct jffs2_compressor *comp);
  68int jffs2_unregister_compressor(struct jffs2_compressor *comp);
  69
  70int jffs2_compressors_init(void);
  71int jffs2_compressors_exit(void);
  72
  73uint16_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
  77int 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
  81void jffs2_free_comprbuf(unsigned char *comprbuf, unsigned char *orig);
  82
  83/* Compressor modules */
  84/* These functions will be called by jffs2_compressors_init/exit */
  85
  86#ifdef CONFIG_JFFS2_RUBIN
  87int jffs2_rubinmips_init(void);
  88void jffs2_rubinmips_exit(void);
  89int jffs2_dynrubin_init(void);
  90void jffs2_dynrubin_exit(void);
  91#endif
  92#ifdef CONFIG_JFFS2_RTIME
  93int jffs2_rtime_init(void);
  94void jffs2_rtime_exit(void);
  95#endif
  96#ifdef CONFIG_JFFS2_ZLIB
  97int jffs2_zlib_init(void);
  98void jffs2_zlib_exit(void);
  99#endif
 100#ifdef CONFIG_JFFS2_LZO
 101int jffs2_lzo_init(void);
 102void jffs2_lzo_exit(void);
 103#endif
 104
 105#endif /* __JFFS2_COMPR_H__ */
 106