Change enums to u32 for stored fields
[yaffs2.git] / yaffs_guts.h
index d89f8b0..c2f7ac4 100644 (file)
@@ -144,12 +144,12 @@ struct yaffs_cache {
  */
 
 struct yaffs_tags {
-       unsigned chunk_id:20;
-       unsigned serial_number:2;
-       unsigned n_bytes_lsb:10;
-       unsigned obj_id:18;
-       unsigned ecc:12;
-       unsigned n_bytes_msb:2;
+       u32 chunk_id:20;
+       u32 serial_number:2;
+       u32 n_bytes_lsb:10;
+       u32 obj_id:18;
+       u32 ecc:12;
+       u32 n_bytes_msb:2;
 };
 
 union yaffs_tags_union {
@@ -167,6 +167,12 @@ enum yaffs_ecc_result {
        YAFFS_ECC_RESULT_UNFIXED
 };
 
+/*
+ * Object type enum:
+ * When this is stored in flash we store it as a u32 instead
+ * to prevent any alignment change issues as compiler variants change.
+ */
+
 enum yaffs_obj_type {
        YAFFS_OBJECT_TYPE_UNKNOWN,
        YAFFS_OBJECT_TYPE_FILE,
@@ -287,9 +293,9 @@ enum yaffs_block_state {
 
 struct yaffs_block_info {
 
-       int soft_del_pages:10;  /* number of soft deleted pages */
-       int pages_in_use:10;    /* number of pages in use */
-       unsigned block_state:4; /* One of the above block states. */
+       s32 soft_del_pages:10;  /* number of soft deleted pages */
+       s32 pages_in_use:10;    /* number of pages in use */
+       u32 block_state:4;      /* One of the above block states. */
                                /* NB use unsigned because enum is sometimes
                                 * an int */
        u32 needs_retiring:1;   /* Data has failed on this block, */
@@ -310,7 +316,7 @@ struct yaffs_block_info {
 /* This is the object structure as stored on NAND */
 
 struct yaffs_obj_hdr {
-       enum yaffs_obj_type type;
+       u32 type;  /* enum yaffs_obj_type  */
 
        /* Apply to everything  */
        int parent_obj_id;
@@ -470,7 +476,7 @@ struct yaffs_obj {
 
        void *my_inode;
 
-       enum yaffs_obj_type variant_type;
+       u32 variant_type; /* enum yaffs_object_type */
 
        union yaffs_obj_var variant;
 
@@ -490,7 +496,7 @@ struct yaffs_checkpt_obj {
        u32 obj_id;
        u32 parent_id;
        int hdr_chunk;
-       enum yaffs_obj_type variant_type:3;
+       u32 variant_type:3; /* enum yaffs_obj_type */
        u8 deleted:1;
        u8 soft_del:1;
        u8 unlinked:1;
@@ -688,8 +694,8 @@ struct yaffs_dev {
        /* Block Info */
        struct yaffs_block_info *block_info;
        u8 *chunk_bits;         /* bitmap of chunks in use */
-       unsigned block_info_alt:1;      /* allocated using alternative alloc */
-       unsigned chunk_bits_alt:1;      /* allocated using alternative alloc */
+       u8 block_info_alt:1;    /* allocated using alternative alloc */
+       u8 chunk_bits_alt:1;    /* allocated using alternative alloc */
        int chunk_bit_stride;   /* Number of bytes of chunk_bits per block.
                                 * Must be consistent with chunks_per_block.
                                 */
@@ -876,10 +882,13 @@ struct yaffs_obj *yaffs_create_file(struct yaffs_obj *parent,
                                    const YCHAR *name, u32 mode, u32 uid,
                                    u32 gid);
 
-int yaffs_flush_file(struct yaffs_obj *obj, int update_time, int data_sync);
+int yaffs_flush_file(struct yaffs_obj *in,
+                    int update_time,
+                    int data_sync,
+                    int discard_cache);
 
 /* Flushing and checkpointing */
-void yaffs_flush_whole_cache(struct yaffs_dev *dev);
+void yaffs_flush_whole_cache(struct yaffs_dev *dev, int discard);
 
 int yaffs_checkpoint_save(struct yaffs_dev *dev);
 int yaffs_checkpoint_restore(struct yaffs_dev *dev);
@@ -982,7 +991,7 @@ u32 yaffs_get_group_base(struct yaffs_dev *dev, struct yaffs_tnode *tn,
 
 int yaffs_is_non_empty_dir(struct yaffs_obj *obj);
 
-int yaffs_format_dev(struct yaffs_dev *dev);
+int yaffs_guts_format_dev(struct yaffs_dev *dev);
 
 void yaffs_addr_to_chunk(struct yaffs_dev *dev, loff_t addr,
                                int *chunk_out, u32 *offset_out);