diff options
| author | wdenk <wdenk> | 2004-01-03 21:24:46 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2004-01-03 21:24:46 +0000 | 
| commit | dd875c767e6fb0f4fecfb799b706d84562a7acee (patch) | |
| tree | b008f2786749b0a6455d2de9a01146e0ee6453b2 /include | |
| parent | c935d3bd8b1c7f681ad58e64bd0548e1b26a7d2f (diff) | |
| download | olio-uboot-2014.01-dd875c767e6fb0f4fecfb799b706d84562a7acee.tar.xz olio-uboot-2014.01-dd875c767e6fb0f4fecfb799b706d84562a7acee.zip | |
* Patch by Robert Schwebel, 15 Dec 2003:
  add support for cramfs (uses JFFS2 command interface)
Diffstat (limited to 'include')
| -rw-r--r-- | include/cramfs/cramfs_fs.h | 98 | ||||
| -rw-r--r-- | include/cramfs/cramfs_fs_sb.h | 19 | 
2 files changed, 117 insertions, 0 deletions
| diff --git a/include/cramfs/cramfs_fs.h b/include/cramfs/cramfs_fs.h new file mode 100644 index 000000000..7b292c0c1 --- /dev/null +++ b/include/cramfs/cramfs_fs.h @@ -0,0 +1,98 @@ +#ifndef __CRAMFS_H +#define __CRAMFS_H + +#ifndef __KERNEL__ + +typedef unsigned char u8; +typedef unsigned short u16; +typedef unsigned int u32; + +#endif + +#define CRAMFS_MAGIC		0x28cd3d45	/* some random number */ +#define CRAMFS_SIGNATURE	"Compressed ROMFS" + +/* + * Width of various bitfields in struct cramfs_inode. + * Primarily used to generate warnings in mkcramfs. + */ +#define CRAMFS_MODE_WIDTH 16 +#define CRAMFS_UID_WIDTH 16 +#define CRAMFS_SIZE_WIDTH 24 +#define CRAMFS_GID_WIDTH 8 +#define CRAMFS_NAMELEN_WIDTH 6 +#define CRAMFS_OFFSET_WIDTH 26 + +/* + * Since inode.namelen is a unsigned 6-bit number, the maximum cramfs + * path length is 63 << 2 = 252. + */ +#define CRAMFS_MAXPATHLEN (((1 << CRAMFS_NAMELEN_WIDTH) - 1) << 2) + +/* + * Reasonably terse representation of the inode data. + */ +struct cramfs_inode { +	u32 mode:CRAMFS_MODE_WIDTH, uid:CRAMFS_UID_WIDTH; +	/* SIZE for device files is i_rdev */ +	u32 size:CRAMFS_SIZE_WIDTH, gid:CRAMFS_GID_WIDTH; +	/* NAMELEN is the length of the file name, divided by 4 and +	   rounded up.	(cramfs doesn't support hard links.) */ +	/* OFFSET: For symlinks and non-empty regular files, this +	   contains the offset (divided by 4) of the file data in +	   compressed form (starting with an array of block pointers; +	   see README).	 For non-empty directories it is the offset +	   (divided by 4) of the inode of the first file in that +	   directory.  For anything else, offset is zero. */ +	u32 namelen:CRAMFS_NAMELEN_WIDTH, offset:CRAMFS_OFFSET_WIDTH; +}; + +struct cramfs_info { +	u32 crc; +	u32 edition; +	u32 blocks; +	u32 files; +}; + +/* + * Superblock information at the beginning of the FS. + */ +struct cramfs_super { +	u32 magic;			/* 0x28cd3d45 - random number */ +	u32 size;			/* length in bytes */ +	u32 flags;			/* feature flags */ +	u32 future;			/* reserved for future use */ +	u8 signature[16];		/* "Compressed ROMFS" */ +	struct cramfs_info fsid;	/* unique filesystem info */ +	u8 name[16];			/* user-defined name */ +	struct cramfs_inode root;	/* root inode data */ +}; + +/* + * Feature flags + * + * 0x00000000 - 0x000000ff: features that work for all past kernels + * 0x00000100 - 0xffffffff: features that don't work for past kernels + */ +#define CRAMFS_FLAG_FSID_VERSION_2	0x00000001	/* fsid version #2 */ +#define CRAMFS_FLAG_SORTED_DIRS		0x00000002	/* sorted dirs */ +#define CRAMFS_FLAG_HOLES		0x00000100	/* support for holes */ +#define CRAMFS_FLAG_WRONG_SIGNATURE	0x00000200	/* reserved */ +#define CRAMFS_FLAG_SHIFTED_ROOT_OFFSET 0x00000400	/* shifted root fs */ + +/* + * Valid values in super.flags.	 Currently we refuse to mount + * if (flags & ~CRAMFS_SUPPORTED_FLAGS).  Maybe that should be + * changed to test super.future instead. + */ +#define CRAMFS_SUPPORTED_FLAGS	( 0x000000ff \ +				| CRAMFS_FLAG_HOLES \ +				| CRAMFS_FLAG_WRONG_SIGNATURE \ +				| CRAMFS_FLAG_SHIFTED_ROOT_OFFSET ) + +/* Uncompression interfaces to the underlying zlib */ +int cramfs_uncompress_block(void *dst, int dstlen, void *src, int srclen); +int cramfs_uncompress_init(void); +int cramfs_uncompress_exit(void); + +#endif diff --git a/include/cramfs/cramfs_fs_sb.h b/include/cramfs/cramfs_fs_sb.h new file mode 100644 index 000000000..bc23f94b9 --- /dev/null +++ b/include/cramfs/cramfs_fs_sb.h @@ -0,0 +1,19 @@ +#ifndef _CRAMFS_FS_SB +#define _CRAMFS_FS_SB + +/* + * cramfs super-block data in memory + */ +struct cramfs_sb_info { +			unsigned long magic; +			unsigned long size; +			unsigned long blocks; +			unsigned long files; +			unsigned long flags; +#ifdef CONFIG_CRAMFS_LINEAR +			unsigned long linear_phys_addr; +			char *        linear_virt_addr; +#endif +}; + +#endif |