2005-04-17 02:20:36 +04:00
/*
* JFFS2 - - Journalling Flash File System , Version 2.
*
2007-04-25 17:16:47 +04:00
* Copyright © 2004 Ferenc Havasi < havasi @ inf . u - szeged . hu > ,
2007-07-10 13:01:22 +04:00
* University of Szeged , Hungary
2005-04-17 02:20:36 +04:00
*
2007-04-25 17:16:47 +04:00
* For licensing information , see the file ' LICENCE ' in this directory .
2005-04-17 02:20:36 +04:00
*
*/
# ifndef __JFFS2_COMPR_H__
# define __JFFS2_COMPR_H__
# include <linux/kernel.h>
# include <linux/vmalloc.h>
# include <linux/list.h>
# include <linux/types.h>
# include <linux/string.h>
# include <linux/slab.h>
# include <linux/errno.h>
# include <linux/fs.h>
# include <linux/jffs2.h>
2006-05-03 16:07:27 +04:00
# include "jffs2_fs_i.h"
# include "jffs2_fs_sb.h"
2005-04-17 02:20:36 +04:00
# include "nodelist.h"
# define JFFS2_RUBINMIPS_PRIORITY 10
# define JFFS2_DYNRUBIN_PRIORITY 20
# define JFFS2_LZARI_PRIORITY 30
# define JFFS2_RTIME_PRIORITY 50
# define JFFS2_ZLIB_PRIORITY 60
2007-07-10 13:28:36 +04:00
# define JFFS2_LZO_PRIORITY 80
2005-04-17 02:20:36 +04:00
# define JFFS2_RUBINMIPS_DISABLED /* RUBINs will be used only */
2007-07-10 13:01:22 +04:00
# define JFFS2_DYNRUBIN_DISABLED /* for decompression */
2005-04-17 02:20:36 +04:00
# define JFFS2_COMPR_MODE_NONE 0
# define JFFS2_COMPR_MODE_PRIORITY 1
# define JFFS2_COMPR_MODE_SIZE 2
2007-07-10 13:28:42 +04:00
# define JFFS2_COMPR_MODE_FAVOURLZO 3
# define FAVOUR_LZO_PERCENT 80
2005-04-17 02:20:36 +04:00
struct jffs2_compressor {
2007-07-10 13:01:22 +04:00
struct list_head list ;
int priority ; /* used by prirority comr. mode */
char * name ;
char compr ; /* JFFS2_COMPR_XXX */
int ( * compress ) ( unsigned char * data_in , unsigned char * cpage_out ,
uint32_t * srclen , uint32_t * destlen , void * model ) ;
int ( * decompress ) ( unsigned char * cdata_in , unsigned char * data_out ,
uint32_t cdatalen , uint32_t datalen , void * model ) ;
int usecount ;
int disabled ; /* if set the compressor won't compress */
unsigned char * compr_buf ; /* used by size compr. mode */
uint32_t compr_buf_size ; /* used by size compr. mode */
uint32_t stat_compr_orig_size ;
uint32_t stat_compr_new_size ;
uint32_t stat_compr_blocks ;
uint32_t stat_decompr_blocks ;
2005-04-17 02:20:36 +04:00
} ;
int jffs2_register_compressor ( struct jffs2_compressor * comp ) ;
int jffs2_unregister_compressor ( struct jffs2_compressor * comp ) ;
int jffs2_compressors_init ( void ) ;
int jffs2_compressors_exit ( void ) ;
uint16_t jffs2_compress ( struct jffs2_sb_info * c , struct jffs2_inode_info * f ,
2007-07-10 13:01:22 +04:00
unsigned char * data_in , unsigned char * * cpage_out ,
uint32_t * datalen , uint32_t * cdatalen ) ;
2005-04-17 02:20:36 +04:00
int jffs2_decompress ( struct jffs2_sb_info * c , struct jffs2_inode_info * f ,
2007-07-10 13:01:22 +04:00
uint16_t comprtype , unsigned char * cdata_in ,
unsigned char * data_out , uint32_t cdatalen , uint32_t datalen ) ;
2005-04-17 02:20:36 +04:00
void jffs2_free_comprbuf ( unsigned char * comprbuf , unsigned char * orig ) ;
/* Compressor modules */
/* These functions will be called by jffs2_compressors_init/exit */
# ifdef CONFIG_JFFS2_RUBIN
int jffs2_rubinmips_init ( void ) ;
void jffs2_rubinmips_exit ( void ) ;
int jffs2_dynrubin_init ( void ) ;
void jffs2_dynrubin_exit ( void ) ;
# endif
# ifdef CONFIG_JFFS2_RTIME
int jffs2_rtime_init ( void ) ;
void jffs2_rtime_exit ( void ) ;
# endif
# ifdef CONFIG_JFFS2_ZLIB
int jffs2_zlib_init ( void ) ;
void jffs2_zlib_exit ( void ) ;
# endif
2007-07-11 18:33:14 +04:00
# ifdef CONFIG_JFFS2_LZO
int jffs2_lzo_init ( void ) ;
void jffs2_lzo_exit ( void ) ;
# endif
2005-04-17 02:20:36 +04:00
# endif /* __JFFS2_COMPR_H__ */