X-Git-Url: https://yaffs.net/gitweb/?a=blobdiff_plain;f=yaffs_guts.h;h=77c05d3b4924357cb2a9c31531e6392346aea2b5;hb=2c98f380f6e28ef71d4d7a8a174cc22b0481f102;hp=e4680e819e4610e54a8759855d8600b9cae14450;hpb=46eb953ecab322d3385ccf84c75d969de8542317;p=yaffs2.git diff --git a/yaffs_guts.h b/yaffs_guts.h index e4680e8..77c05d3 100644 --- a/yaffs_guts.h +++ b/yaffs_guts.h @@ -1,7 +1,7 @@ /* * YAFFS: Yet another Flash File System . A NAND-flash specific file system. * - * Copyright (C) 2002-2010 Aleph One Ltd. + * Copyright (C) 2002-2011 Aleph One Ltd. * for Toby Churchill Ltd and Brightstar Engineering * * Created by Charles Manning @@ -23,11 +23,11 @@ /* Give us a Y=0x59, * Give us an A=0x41, - * Give us an FF=0xFF + * Give us an FF=0xff * Give us an S=0x53 * And what have we got... */ -#define YAFFS_MAGIC 0x5941FF53 +#define YAFFS_MAGIC 0x5941ff53 #define YAFFS_NTNODES_LEVEL0 16 #define YAFFS_TNODES_LEVEL0_BITS 4 @@ -38,18 +38,18 @@ #define YAFFS_TNODES_INTERNAL_MASK 0x7 #define YAFFS_TNODES_MAX_LEVEL 6 -#ifndef CONFIG_YAFFS_NO_YAFFS1 + +/* Constants for YAFFS1 mode */ #define YAFFS_BYTES_PER_SPARE 16 #define YAFFS_BYTES_PER_CHUNK 512 #define YAFFS_CHUNK_SIZE_SHIFT 9 #define YAFFS_CHUNKS_PER_BLOCK 32 #define YAFFS_BYTES_PER_BLOCK (YAFFS_CHUNKS_PER_BLOCK*YAFFS_BYTES_PER_CHUNK) -#endif #define YAFFS_MIN_YAFFS2_CHUNK_SIZE 1024 #define YAFFS_MIN_YAFFS2_SPARE_SIZE 32 -#define YAFFS_MAX_CHUNK_ID 0x000FFFFF +#define YAFFS_MAX_CHUNK_ID 0x000fffff #define YAFFS_ALLOCATION_NOBJECTS 100 #define YAFFS_ALLOCATION_NTNODES 100 @@ -101,10 +101,10 @@ * and is a larger number than the lifetime of a 2GB device. */ #define YAFFS_LOWEST_SEQUENCE_NUMBER 0x00001000 -#define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00 +#define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xefffff00 /* Special sequence number for bad block that failed to be marked bad */ -#define YAFFS_SEQUENCE_BAD_BLOCK 0xFFFF0000 +#define YAFFS_SEQUENCE_BAD_BLOCK 0xffff0000 /* ChunkCache is used for short read/write operations.*/ struct yaffs_cache { @@ -117,12 +117,11 @@ struct yaffs_cache { u8 *data; }; -/* Tags structures in RAM +/* yaffs1 tags structures in RAM * NB This uses bitfield. Bitfields should not straddle a u32 boundary * otherwise the structure size will get blown out. */ -#ifndef CONFIG_YAFFS_NO_YAFFS1 struct yaffs_tags { unsigned chunk_id:20; unsigned serial_number:2; @@ -137,7 +136,6 @@ union yaffs_tags_union { u8 as_bytes[8]; }; -#endif /* Stuff used for extended tags in YAFFS2 */ @@ -160,8 +158,6 @@ enum yaffs_obj_type { #define YAFFS_OBJECT_TYPE_MAX YAFFS_OBJECT_TYPE_SPECIAL struct yaffs_ext_tags { - - unsigned validity0; unsigned chunk_used; /* Status of the chunk: used or unused */ unsigned obj_id; /* If 0 this is not used */ unsigned chunk_id; /* If 0 this is a header, else a data chunk */ @@ -189,9 +185,6 @@ struct yaffs_ext_tags { unsigned extra_length; /* Length if it is a file */ unsigned extra_equiv_id; /* Equivalent object for a hard link */ - - unsigned validity1; - }; /* Spare structure for YAFFS1 */ @@ -225,7 +218,7 @@ enum yaffs_block_state { YAFFS_BLOCK_STATE_SCANNING, /* Being scanned */ - YAFFS_BLOCK_STATE_NEEDS_SCANNING, + YAFFS_BLOCK_STATE_NEEDS_SCAN, /* The block might have something on it (ie it is allocating or full, * perhaps empty) but it needs to be scanned to determine its true * state. @@ -286,10 +279,8 @@ struct yaffs_block_info { u32 chunk_error_strikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */ -#ifdef CONFIG_YAFFS_YAFFS2 u32 has_shrink_hdr:1; /* This block has at least one shrink header */ u32 seq_number; /* block sequence number for yaffs2 */ -#endif }; @@ -438,9 +429,7 @@ struct yaffs_obj { u32 yst_mode; -#ifndef CONFIG_YAFFS_NO_SHORT_NAMES YCHAR short_name[YAFFS_SHORT_NAME_LENGTH + 1]; -#endif #ifdef CONFIG_YAFFS_WINCE u32 win_ctime[2]; @@ -492,13 +481,12 @@ struct yaffs_checkpt_obj { /*--------------------- Temporary buffers ---------------- * - * These are chunk-sized working buffers. Each device has a few + * These are chunk-sized working buffers. Each device has a few. */ struct yaffs_buffer { u8 *buffer; - int line; /* track from whence this buffer was allocated */ - int max_line; + int in_use; }; /*----------------- Device ---------------------------------*/ @@ -527,6 +515,7 @@ struct yaffs_param { */ int use_nand_ecc; /* Flag to decide whether or not to use * NAND driver ECC on data (yaffs1) */ + int tags_9bytes; /* Use 9 byte tags */ int no_tags_ecc; /* Flag to decide whether or not to do ECC * on packed tags (yaffs2) */ @@ -554,7 +543,7 @@ struct yaffs_param { int (*initialise_flash_fn) (struct yaffs_dev *dev); int (*deinitialise_flash_fn) (struct yaffs_dev *dev); -#ifdef CONFIG_YAFFS_YAFFS2 + /* yaffs2 mode functions */ int (*write_chunk_tags_fn) (struct yaffs_dev *dev, int nand_chunk, const u8 *data, const struct yaffs_ext_tags *tags); @@ -565,7 +554,6 @@ struct yaffs_param { int (*query_block_fn) (struct yaffs_dev *dev, int block_no, enum yaffs_block_state *state, u32 *seq_number); -#endif /* The remove_obj_fn function must be supplied by OS flavours that * need it. @@ -893,8 +881,8 @@ int yaffs_check_ff(u8 *buffer, int n_bytes); void yaffs_handle_chunk_error(struct yaffs_dev *dev, struct yaffs_block_info *bi); -u8 *yaffs_get_temp_buffer(struct yaffs_dev *dev, int line_no); -void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer, int line_no); +u8 *yaffs_get_temp_buffer(struct yaffs_dev *dev); +void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer); struct yaffs_obj *yaffs_find_or_create_by_number(struct yaffs_dev *dev, int number, @@ -906,7 +894,7 @@ void yaffs_set_obj_name_from_oh(struct yaffs_obj *obj, const struct yaffs_obj_hdr *oh); void yaffs_add_obj_to_dir(struct yaffs_obj *directory, struct yaffs_obj *obj); YCHAR *yaffs_clone_str(const YCHAR *str); -void yaffs_link_fixup(struct yaffs_dev *dev, struct yaffs_obj *hard_list); +void yaffs_link_fixup(struct yaffs_dev *dev, struct list_head *hard_list); void yaffs_block_became_dirty(struct yaffs_dev *dev, int block_no); int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force, int is_shrink, int shadows,