Seperate drivers and tags handlers into their own interface structures
[yaffs2.git] / yaffs_guts.h
index 643e5750954784e1cfb2cdd2a5ac6f4268eb4c76..f108f211b33636dff214ed1e8bfe4895343b35d5 100644 (file)
@@ -558,39 +558,6 @@ struct yaffs_param {
 
        int enable_xattr;       /* Enable xattribs */
 
-       /* Tags marshalling functions.
-        * If these are not set then defaults will be assigned.
-        */
-       int (*write_chunk_tags_fn) (struct yaffs_dev *dev,
-                                   int nand_chunk, const u8 *data,
-                                   const struct yaffs_ext_tags *tags);
-       int (*read_chunk_tags_fn) (struct yaffs_dev *dev,
-                                  int nand_chunk, u8 *data,
-                                  struct yaffs_ext_tags *tags);
-
-       int (*query_block_fn) (struct yaffs_dev *dev, int block_no,
-                              enum yaffs_block_state *state,
-                              u32 *seq_number);
-       int (*mark_bad_fn) (struct yaffs_dev *dev, int block_no);
-
-       /* NAND driver access functions All required except
-        * the deinitialise function which is optional.
-        */
-
-       int (*drv_write_chunk_fn) (struct yaffs_dev *dev, int nand_chunk,
-                                  const u8 *data, int data_len,
-                                  const u8 *oob, int oob_len);
-       int (*drv_read_chunk_fn) (struct yaffs_dev *dev, int nand_chunk,
-                                  u8 *data, int data_len,
-                                  u8 *oob, int oob_len,
-                                  enum yaffs_ecc_result *ecc_result);
-       int (*drv_erase_fn) (struct yaffs_dev *dev, int block_no);
-       int (*drv_mark_bad_fn) (struct yaffs_dev *dev, int block_no);
-       int (*drv_check_bad_fn) (struct yaffs_dev *dev, int block_no);
-       int (*drv_initialise_fn) (struct yaffs_dev *dev);
-       int (*drv_deinitialise_fn) (struct yaffs_dev *dev);
-
-
        int max_objects;        /*
                                 * Set to limit the number of objects created.
                                 * 0 = no limit.
@@ -607,7 +574,7 @@ struct yaffs_param {
        void (*sb_dirty_fn) (struct yaffs_dev *dev);
 
        /*  Callback to control garbage collection. */
-       unsigned (*gc_control) (struct yaffs_dev *dev);
+       unsigned (*gc_control_fn) (struct yaffs_dev *dev);
 
        /* Debug control flags. Don't use unless you know what you're doing */
        int use_header_file_size;       /* Flag to determine if we should use
@@ -628,8 +595,39 @@ struct yaffs_param {
 
 };
 
+struct yaffs_driver {
+       int (*drv_write_chunk_fn) (struct yaffs_dev *dev, int nand_chunk,
+                                  const u8 *data, int data_len,
+                                  const u8 *oob, int oob_len);
+       int (*drv_read_chunk_fn) (struct yaffs_dev *dev, int nand_chunk,
+                                  u8 *data, int data_len,
+                                  u8 *oob, int oob_len,
+                                  enum yaffs_ecc_result *ecc_result);
+       int (*drv_erase_fn) (struct yaffs_dev *dev, int block_no);
+       int (*drv_mark_bad_fn) (struct yaffs_dev *dev, int block_no);
+       int (*drv_check_bad_fn) (struct yaffs_dev *dev, int block_no);
+       int (*drv_initialise_fn) (struct yaffs_dev *dev);
+       int (*drv_deinitialise_fn) (struct yaffs_dev *dev);
+};
+
+struct yaffs_tags_handler {
+       int (*write_chunk_tags_fn) (struct yaffs_dev *dev,
+                                   int nand_chunk, const u8 *data,
+                                   const struct yaffs_ext_tags *tags);
+       int (*read_chunk_tags_fn) (struct yaffs_dev *dev,
+                                  int nand_chunk, u8 *data,
+                                  struct yaffs_ext_tags *tags);
+
+       int (*query_block_fn) (struct yaffs_dev *dev, int block_no,
+                              enum yaffs_block_state *state,
+                              u32 *seq_number);
+       int (*mark_bad_fn) (struct yaffs_dev *dev, int block_no);
+};
+
 struct yaffs_dev {
        struct yaffs_param param;
+       struct yaffs_driver drv;
+       struct yaffs_tags_handler th;
 
        /* Context storage. Holds extra OS specific data for this device */