diff options
Diffstat (limited to 'roms/u-boot/include/jffs2')
| -rw-r--r-- | roms/u-boot/include/jffs2/compr_rubin.h | 11 | ||||
| -rw-r--r-- | roms/u-boot/include/jffs2/jffs2.h | 234 | ||||
| -rw-r--r-- | roms/u-boot/include/jffs2/jffs2_1pass.h | 3 | ||||
| -rw-r--r-- | roms/u-boot/include/jffs2/load_kernel.h | 69 | ||||
| -rw-r--r-- | roms/u-boot/include/jffs2/mini_inflate.h | 68 | 
5 files changed, 385 insertions, 0 deletions
diff --git a/roms/u-boot/include/jffs2/compr_rubin.h b/roms/u-boot/include/jffs2/compr_rubin.h new file mode 100644 index 00000000..f26f476d --- /dev/null +++ b/roms/u-boot/include/jffs2/compr_rubin.h @@ -0,0 +1,11 @@ +/* Rubin encoder/decoder header       */ +/* work started at   : aug   3, 1994  */ +/* last modification : aug  15, 1994  */ +/* $Id: compr_rubin.h,v 1.1 2002/01/16 23:34:32 nyet Exp $ */ + +#define RUBIN_REG_SIZE   16 +#define UPPER_BIT_RUBIN    (((long) 1)<<(RUBIN_REG_SIZE-1)) +#define LOWER_BITS_RUBIN   ((((long) 1)<<(RUBIN_REG_SIZE-1))-1) + +void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out, +		   unsigned long sourcelen, unsigned long dstlen); diff --git a/roms/u-boot/include/jffs2/jffs2.h b/roms/u-boot/include/jffs2/jffs2.h new file mode 100644 index 00000000..651f94cf --- /dev/null +++ b/roms/u-boot/include/jffs2/jffs2.h @@ -0,0 +1,234 @@ +/* + * JFFS2 -- Journalling Flash File System, Version 2. + * + * Copyright (C) 2001 Red Hat, Inc. + * + * Created by David Woodhouse <dwmw2@cambridge.redhat.com> + * + * The original JFFS, from which the design for JFFS2 was derived, + * was designed and implemented by Axis Communications AB. + * + * The contents of this file are subject to the Red Hat eCos Public + * License Version 1.1 (the "Licence"); you may not use this file + * except in compliance with the Licence.  You may obtain a copy of + * the Licence at http://www.redhat.com/ + * + * Software distributed under the Licence is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the Licence for the specific language governing rights and + * limitations under the Licence. + * + * The Original Code is JFFS2 - Journalling Flash File System, version 2 + * + * Alternatively, the contents of this file may be used under the + * terms of the GNU General Public License version 2 (the "GPL"), in + * which case the provisions of the GPL are applicable instead of the + * above.  If you wish to allow the use of your version of this file + * only under the terms of the GPL and not to allow others to use your + * version of this file under the RHEPL, indicate your decision by + * deleting the provisions above and replace them with the notice and + * other provisions required by the GPL.  If you do not delete the + * provisions above, a recipient may use your version of this file + * under either the RHEPL or the GPL. + * + * $Id: jffs2.h,v 1.2 2002/01/17 00:53:20 nyet Exp $ + * + */ + +#ifndef __LINUX_JFFS2_H__ +#define __LINUX_JFFS2_H__ + +#include <asm/types.h> +#include <jffs2/load_kernel.h> + +#define JFFS2_SUPER_MAGIC 0x72b6 + +/* Values we may expect to find in the 'magic' field */ +#define JFFS2_OLD_MAGIC_BITMASK 0x1984 +#define JFFS2_MAGIC_BITMASK 0x1985 +#define KSAMTIB_CIGAM_2SFFJ 0x5981 /* For detecting wrong-endian fs */ +#define JFFS2_EMPTY_BITMASK 0xffff +#define JFFS2_DIRTY_BITMASK 0x0000 + +/* Summary node MAGIC marker */ +#define JFFS2_SUM_MAGIC	0x02851885 + +/* We only allow a single char for length, and 0xFF is empty flash so +   we don't want it confused with a real length. Hence max 254. +*/ +#define JFFS2_MAX_NAME_LEN 254 + +/* How small can we sensibly write nodes? */ +#define JFFS2_MIN_DATA_LEN 128 + +#define JFFS2_COMPR_NONE	0x00 +#define JFFS2_COMPR_ZERO	0x01 +#define JFFS2_COMPR_RTIME	0x02 +#define JFFS2_COMPR_RUBINMIPS	0x03 +#define JFFS2_COMPR_COPY	0x04 +#define JFFS2_COMPR_DYNRUBIN	0x05 +#define JFFS2_COMPR_ZLIB	0x06 +#if defined(CONFIG_JFFS2_LZO) +#define JFFS2_COMPR_LZO		0x07 +#define JFFS2_NUM_COMPR		8 +#else +#define JFFS2_NUM_COMPR		7 +#endif + +/* Compatibility flags. */ +#define JFFS2_COMPAT_MASK 0xc000      /* What do to if an unknown nodetype is found */ +#define JFFS2_NODE_ACCURATE 0x2000 +/* INCOMPAT: Fail to mount the filesystem */ +#define JFFS2_FEATURE_INCOMPAT 0xc000 +/* ROCOMPAT: Mount read-only */ +#define JFFS2_FEATURE_ROCOMPAT 0x8000 +/* RWCOMPAT_COPY: Mount read/write, and copy the node when it's GC'd */ +#define JFFS2_FEATURE_RWCOMPAT_COPY 0x4000 +/* RWCOMPAT_DELETE: Mount read/write, and delete the node when it's GC'd */ +#define JFFS2_FEATURE_RWCOMPAT_DELETE 0x0000 + +#define JFFS2_NODETYPE_DIRENT (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 1) +#define JFFS2_NODETYPE_INODE (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 2) +#define JFFS2_NODETYPE_CLEANMARKER (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) +#define JFFS2_NODETYPE_PADDING (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 4) +#define JFFS2_NODETYPE_SUMMARY (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 6) + +/* Maybe later... */ +/*#define JFFS2_NODETYPE_CHECKPOINT (JFFS2_FEATURE_RWCOMPAT_DELETE | JFFS2_NODE_ACCURATE | 3) */ +/*#define JFFS2_NODETYPE_OPTIONS (JFFS2_FEATURE_RWCOMPAT_COPY | JFFS2_NODE_ACCURATE | 4) */ + +/* Same as the non_ECC versions, but with extra space for real + * ECC instead of just the checksum. For use on NAND flash + */ +/*#define JFFS2_NODETYPE_DIRENT_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 5) */ +/*#define JFFS2_NODETYPE_INODE_ECC (JFFS2_FEATURE_INCOMPAT | JFFS2_NODE_ACCURATE | 6) */ + +#define JFFS2_INO_FLAG_PREREAD	  1	/* Do read_inode() for this one at +					   mount time, don't wait for it to +					   happen later */ +#define JFFS2_INO_FLAG_USERCOMPR  2	/* User has requested a specific +					   compression type */ + + +struct jffs2_unknown_node +{ +	/* All start like this */ +	__u16 magic; +	__u16 nodetype; +	__u32 totlen; /* So we can skip over nodes we don't grok */ +	__u32 hdr_crc; +} __attribute__((packed)); + +struct jffs2_raw_dirent +{ +	__u16 magic; +	__u16 nodetype;	/* == JFFS_NODETYPE_DIRENT */ +	__u32 totlen; +	__u32 hdr_crc; +	__u32 pino; +	__u32 version; +	__u32 ino; /* == zero for unlink */ +	__u32 mctime; +	__u8 nsize; +	__u8 type; +	__u8 unused[2]; +	__u32 node_crc; +	__u32 name_crc; +	__u8 name[0]; +} __attribute__((packed)); + +/* The JFFS2 raw inode structure: Used for storage on physical media.  */ +/* The uid, gid, atime, mtime and ctime members could be longer, but +   are left like this for space efficiency. If and when people decide +   they really need them extended, it's simple enough to add support for +   a new type of raw node. +*/ +struct jffs2_raw_inode +{ +	__u16 magic;      /* A constant magic number.  */ +	__u16 nodetype;   /* == JFFS_NODETYPE_INODE */ +	__u32 totlen;     /* Total length of this node (inc data, etc.) */ +	__u32 hdr_crc; +	__u32 ino;        /* Inode number.  */ +	__u32 version;    /* Version number.  */ +	__u32 mode;       /* The file's type or mode.  */ +	__u16 uid;        /* The file's owner.  */ +	__u16 gid;        /* The file's group.  */ +	__u32 isize;      /* Total resultant size of this inode (used for truncations)  */ +	__u32 atime;      /* Last access time.  */ +	__u32 mtime;      /* Last modification time.  */ +	__u32 ctime;      /* Change time.  */ +	__u32 offset;     /* Where to begin to write.  */ +	__u32 csize;      /* (Compressed) data size */ +	__u32 dsize;	  /* Size of the node's data. (after decompression) */ +	__u8 compr;       /* Compression algorithm used */ +	__u8 usercompr;	  /* Compression algorithm requested by the user */ +	__u16 flags;	  /* See JFFS2_INO_FLAG_* */ +	__u32 data_crc;   /* CRC for the (compressed) data.  */ +	__u32 node_crc;   /* CRC for the raw inode (excluding data)  */ +/*	__u8 data[dsize]; */ +} __attribute__((packed)); + +struct jffs2_raw_summary +{ +	__u16 magic; +	__u16 nodetype; 	/* = JFFS2_NODETYPE_SUMMARY */ +	__u32 totlen; +	__u32 hdr_crc; +	__u32 sum_num;	/* number of sum entries*/ +	__u32 cln_mkr;	/* clean marker size, 0 = no cleanmarker */ +	__u32 padded;	/* sum of the size of padding nodes */ +	__u32 sum_crc;	/* summary information crc */ +	__u32 node_crc; 	/* node crc */ +	__u32 sum[0]; 	/* inode summary info */ +}; + +union jffs2_node_union { +	struct jffs2_raw_inode i; +	struct jffs2_raw_dirent d; +	struct jffs2_raw_summary s; +	struct jffs2_unknown_node u; +} __attribute__((packed)); + +enum +  { +    DT_UNKNOWN = 0, +# define DT_UNKNOWN     DT_UNKNOWN +    DT_FIFO = 1, +# define DT_FIFO        DT_FIFO +    DT_CHR = 2, +# define DT_CHR         DT_CHR +    DT_DIR = 4, +# define DT_DIR         DT_DIR +    DT_BLK = 6, +# define DT_BLK         DT_BLK +    DT_REG = 8, +# define DT_REG         DT_REG +    DT_LNK = 10, +# define DT_LNK         DT_LNK +    DT_SOCK = 12, +# define DT_SOCK        DT_SOCK +    DT_WHT = 14 +# define DT_WHT         DT_WHT +  }; + + +u32 jffs2_1pass_ls(struct part_info *part,const char *fname); +u32 jffs2_1pass_load(char *dest, struct part_info *part,const char *fname); +u32 jffs2_1pass_info(struct part_info *part); + +void rtime_decompress(unsigned char *data_in, unsigned char *cpage_out, +		u32 srclen, u32 destlen); +void rubin_do_decompress(unsigned char *bits, unsigned char *in, +		unsigned char *page_out, __u32 destlen); +void dynrubin_decompress(unsigned char *data_in, unsigned char *cpage_out, +		unsigned long sourcelen, unsigned long dstlen); +long zlib_decompress(unsigned char *data_in, unsigned char *cpage_out, +		__u32 srclen, __u32 destlen); +#if defined(CONFIG_JFFS2_LZO) +int lzo_decompress(unsigned char *data_in, unsigned char *cpage_out, +		u32 srclen, u32 destlen); +#endif + +char *mkmodestr(unsigned long mode, char *str); +#endif /* __LINUX_JFFS2_H__ */ diff --git a/roms/u-boot/include/jffs2/jffs2_1pass.h b/roms/u-boot/include/jffs2/jffs2_1pass.h new file mode 100644 index 00000000..5bc3e66c --- /dev/null +++ b/roms/u-boot/include/jffs2/jffs2_1pass.h @@ -0,0 +1,3 @@ +u32 jffs2_1pass_ls(struct part_info *part,const char *fname); +u32 jffs2_1pass_load(char *dest, struct part_info *part,const char *fname); +u32 jffs2_1pass_info(struct part_info *part); diff --git a/roms/u-boot/include/jffs2/load_kernel.h b/roms/u-boot/include/jffs2/load_kernel.h new file mode 100644 index 00000000..dd0d23fa --- /dev/null +++ b/roms/u-boot/include/jffs2/load_kernel.h @@ -0,0 +1,69 @@ +#ifndef load_kernel_h +#define load_kernel_h +/*------------------------------------------------------------------------- + * Filename:      load_kernel.h + * Version:       $Id: load_kernel.h,v 1.3 2002/01/25 01:34:11 nyet Exp $ + * Copyright:     Copyright (C) 2001, Russ Dill + * Author:        Russ Dill <Russ.Dill@asu.edu> + * Description:   header for load kernel modules + *-----------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0+ + */ + +#include <linux/list.h> + +/* mtd device types */ +#define MTD_DEV_TYPE_NOR	0x0001 +#define MTD_DEV_TYPE_NAND	0x0002 +#define MTD_DEV_TYPE_ONENAND	0x0004 + +#define MTD_DEV_TYPE(type) ((type == MTD_DEV_TYPE_NAND) ? "nand" :	\ +			(type == MTD_DEV_TYPE_ONENAND) ? "onenand" : "nor") + +struct mtd_device { +	struct list_head link; +	struct mtdids *id;		/* parent mtd id entry */ +	u16 num_parts;			/* number of partitions on this device */ +	struct list_head parts;		/* partitions */ +}; + +struct part_info { +	struct list_head link; +	char *name;			/* partition name */ +	u8 auto_name;			/* set to 1 for generated name */ +	u64 size;			/* total size of the partition */ +	u64 offset;			/* offset within device */ +	void *jffs2_priv;		/* used internaly by jffs2 */ +	u32 mask_flags;			/* kernel MTD mask flags */ +	u32 sector_size;		/* size of sector */ +	struct mtd_device *dev;		/* parent device */ +}; + +struct mtdids { +	struct list_head link; +	u8 type;			/* device type */ +	u8 num;				/* device number */ +	u64 size;			/* device size */ +	char *mtd_id;			/* linux kernel device id */ +}; + +#define ldr_strlen	strlen +#define ldr_strncmp	strncmp +#define ldr_memcpy	memcpy +#define putstr(x)	printf("%s", x) +#define mmalloc		malloc +#define UDEBUG		printf + +#define putnstr(str, size)	printf("%*.*s", size, size, str) +#define ldr_output_string(x)	puts(x) +#define putLabeledWord(x, y)	printf("%s %08x\n", x, (unsigned int)y) +#define led_blink(x, y, z, a) + +/* common/cmd_jffs2.c */ +extern int mtdparts_init(void); +extern int find_dev_and_part(const char *id, struct mtd_device **dev, +				u8 *part_num, struct part_info **part); +extern struct mtd_device *device_find(u8 type, u8 num); + +#endif /* load_kernel_h */ diff --git a/roms/u-boot/include/jffs2/mini_inflate.h b/roms/u-boot/include/jffs2/mini_inflate.h new file mode 100644 index 00000000..1cf12916 --- /dev/null +++ b/roms/u-boot/include/jffs2/mini_inflate.h @@ -0,0 +1,68 @@ +/*------------------------------------------------------------------------- + * Filename:      mini_inflate.h + * Version:       $Id: mini_inflate.h,v 1.2 2002/01/17 00:53:20 nyet Exp $ + * Copyright:     Copyright (C) 2001, Russ Dill + * Author:        Russ Dill <Russ.Dill@asu.edu> + * Description:   Mini deflate implementation + *-----------------------------------------------------------------------*/ +/* + * SPDX-License-Identifier:	GPL-2.0+ + */ + +typedef __SIZE_TYPE__ size; + +#define NO_ERROR 0 +#define COMP_UNKNOWN 1	 /* The specififed bytype is invalid */ +#define CODE_NOT_FOUND 2 /* a huffman code in the stream could not be decoded */ +#define TOO_MANY_BITS 3	 /* pull_bits was passed an argument that is too +			  * large */ + +/* This struct represents an entire huffman code set. It has various lookup + * tables to speed decoding */ +struct huffman_set { +	int bits;	 /* maximum bit length */ +	int num_symbols; /* Number of symbols this code can represent */ +	int *lengths;	 /* The bit length of symbols */ +	int *symbols;	 /* All of the symbols, sorted by the huffman code */ +	int *count;	 /* the number of codes of this bit length */ +	int *first;	 /* the first code of this bit length */ +	int *pos;	 /* the symbol that first represents (in the symbols +			  * array) */ +}; + +struct bitstream { +	unsigned char *data; /* increments as we move from byte to byte */ +	unsigned char bit;   /* 0 to 7 */ +	void *(*memcpy)(void *, const void *, size); +	unsigned long decoded; /* The number of bytes decoded */ +	int error; + +	int  distance_count[16]; +	int  distance_first[16]; +	int  distance_pos[16]; +	int  distance_lengths[32]; +	int  distance_symbols[32]; + +	int  code_count[8]; +	int  code_first[8]; +	int  code_pos[8]; +	int  code_lengths[19]; +	int  code_symbols[19]; + +	int  length_count[16]; +	int  length_first[16]; +	int  length_pos[16]; +	int  length_lengths[288]; +	int  length_symbols[288]; + +	struct huffman_set codes; +	struct huffman_set lengths; +	struct huffman_set distance; +}; + +#define NO_COMP 0 +#define FIXED_COMP 1 +#define DYNAMIC_COMP 2 + +long decompress_block(unsigned char *dest, unsigned char *source, +		      void *(*inflate_memcpy)(void *dest, const void *src, size n));  | 
