X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=yaffs_guts.h;h=96fd547c40d47b629d41679cf26bf1a2521b04fa;hp=c7e201cbdc56737ee9ab412f7c92bc32233ebec6;hb=236b068ddf24a4734f85cf8f7b1280114427ed3d;hpb=21b2dedaa32ab309f6d1daec966528b7586bd207 diff --git a/yaffs_guts.h b/yaffs_guts.h index c7e201c..96fd547 100644 --- a/yaffs_guts.h +++ b/yaffs_guts.h @@ -1,8 +1,7 @@ /* * YAFFS: Yet another Flash File System . A NAND-flash specific file system. * - * Copyright (C) 2002-2011 Aleph One Ltd. - * for Toby Churchill Ltd and Brightstar Engineering + * Copyright (C) 2002-2018 Aleph One Ltd. * * Created by Charles Manning * @@ -126,7 +125,7 @@ /* Special sequence number for bad block that failed to be marked bad */ #define YAFFS_SEQUENCE_BAD_BLOCK 0xffff0000 -/* ChunkCache is used for short read/write operations.*/ +/* Chunk cache is used for short read/write operations.*/ struct yaffs_cache { struct yaffs_obj *object; int chunk_id; @@ -137,6 +136,13 @@ struct yaffs_cache { u8 *data; }; +struct yaffs_cache_manager { + struct yaffs_cache *cache; + int n_caches; + int cache_last_use; + int n_temp_buffers; +}; + /* yaffs1 tags structures in RAM * NB This uses bitfield. Bitfields should not straddle a u32 boundary * otherwise the structure size will get blown out. @@ -324,7 +330,7 @@ struct yaffs_obj_hdr { u32 type; /* enum yaffs_obj_type */ /* Apply to everything */ - int parent_obj_id; + u32 parent_obj_id; u16 sum_no_longer_used; /* checksum of name. No longer used */ YCHAR name[YAFFS_MAX_NAME_LENGTH + 1]; @@ -527,14 +533,14 @@ struct yaffs_param { int inband_tags; /* Use unband tags */ u32 total_bytes_per_chunk; /* Should be >= 512, does not need to be a power of 2 */ - int chunks_per_block; /* does not need to be a power of 2 */ - int spare_bytes_per_chunk; /* spare area size */ - int start_block; /* Start block we're allowed to use */ - int end_block; /* End block we're allowed to use */ - int n_reserved_blocks; /* Tuneable so that we can reduce + u32 chunks_per_block; /* does not need to be a power of 2 */ + u32 spare_bytes_per_chunk; /* spare area size */ + u32 start_block; /* Start block we're allowed to use */ + u32 end_block; /* End block we're allowed to use */ + u32 n_reserved_blocks; /* Tuneable so that we can reduce * reserved blocks on NOR and RAM. */ - int n_caches; /* If <= 0, then short op caching is disabled, + u32 n_caches; /* If == 0, then short op caching is disabled, * else the number of short op caches. */ int cache_bypass_aligned; /* If non-zero then bypass the cache for @@ -644,7 +650,7 @@ struct yaffs_dev { int ll_init; /* Runtime parameters. Set up by YAFFS. */ - int data_bytes_per_chunk; + u32 data_bytes_per_chunk; /* Non-wide tnode stuff */ u16 chunk_grp_bits; /* Number of bits that need to be resolved if @@ -670,8 +676,8 @@ struct yaffs_dev { int swap_endian; /* Stored endian needs endian swap. */ /* Stuff to support block offsetting to support start block zero */ - int internal_start_block; - int internal_end_block; + u32 internal_start_block; + u32 internal_end_block; int block_offset; int chunk_offset; @@ -681,12 +687,12 @@ struct yaffs_dev { int checkpt_byte_offs; u8 *checkpt_buffer; int checkpt_open_write; - int blocks_in_checkpt; + u32 blocks_in_checkpt; int checkpt_cur_chunk; int checkpt_cur_block; int checkpt_next_block; int *checkpt_block_list; - int checkpt_max_blocks; + u32 checkpt_max_blocks; u32 checkpt_sum; u32 checkpt_xor; @@ -742,8 +748,7 @@ struct yaffs_dev { int buffered_block; /* Which block is buffered here? */ int doing_buffered_block_rewrite; - struct yaffs_cache *cache; - int cache_last_use; + struct yaffs_cache_manager cache_mgr; /* Stuff for background deletion and unlinked files. */ struct yaffs_obj *unlinked_dir; /* Directory where unlinked and deleted @@ -886,12 +891,15 @@ struct yaffs_xattr_mod { int yaffs_guts_initialise(struct yaffs_dev *dev); void yaffs_deinitialise(struct yaffs_dev *dev); +void yaffs_guts_cleanup(struct yaffs_dev *dev); int yaffs_get_n_free_chunks(struct yaffs_dev *dev); int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name, struct yaffs_obj *new_dir, const YCHAR * new_name); +int yaffs_unlink_obj(struct yaffs_obj *obj); + int yaffs_unlinker(struct yaffs_obj *dir, const YCHAR * name); int yaffs_del_obj(struct yaffs_obj *obj); struct yaffs_obj *yaffs_retype_obj(struct yaffs_obj *obj, @@ -1038,6 +1046,11 @@ loff_t yaffs_oh_to_size(struct yaffs_dev *dev, struct yaffs_obj_hdr *oh, int do_endian); loff_t yaffs_max_file_size(struct yaffs_dev *dev); + +/* yaffs_wr_data_obj needs to be exposed to allow the cache to access it. */ +int yaffs_wr_data_obj(struct yaffs_obj *in, int inode_chunk, + const u8 *buffer, int n_bytes, int use_reserve); + /* * Debug function to count number of blocks in each state * NB Needs to be called with correct number of integers @@ -1048,4 +1061,21 @@ void yaffs_count_blocks_by_state(struct yaffs_dev *dev, int bs[10]); int yaffs_find_chunk_in_file(struct yaffs_obj *in, int inode_chunk, struct yaffs_ext_tags *tags); +/* + * Define LOFF_T_32_BIT if a 32-bit LOFF_T is being used. + * Not serious if you get this wrong - you might just get some warnings. +*/ + +#ifdef LOFF_T_32_BIT +#define FSIZE_LOW(fsize) (fsize) +#define FSIZE_HIGH(fsize) 0 +#define FSIZE_COMBINE(high, low) (low) +#else +#define FSIZE_LOW(fsize) ((fsize) & 0xffffffff) +#define FSIZE_HIGH(fsize)(((fsize) >> 32) & 0xffffffff) +#define FSIZE_COMBINE(high, low) ((((loff_t) (high)) << 32) | \ + (((loff_t) (low)) & 0xFFFFFFFF)) +#endif + + #endif