New yaffs2_image_maker tool to work with 4kB pages - still under test
[yaffs2.git] / yaffs_guts.h
index c7e201cbdc56737ee9ab412f7c92bc32233ebec6..96fd547c40d47b629d41679cf26bf1a2521b04fa 100644 (file)
@@ -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 <charles@aleph1.co.uk>
  *
 /* 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