- int (*init)(struct nand_device_s *device);
- int (*reset)(struct nand_device_s *device);
- int (*command)(struct nand_device_s *device, u8 command);
- int (*address)(struct nand_device_s *device, u8 address);
- int (*write_data)(struct nand_device_s *device, u16 data);
- int (*read_data)(struct nand_device_s *device, void *data);
- int (*write_block_data)(struct nand_device_s *device, u8 *data, int size);
- int (*read_block_data)(struct nand_device_s *device, u8 *data, int size);
- int (*write_page)(struct nand_device_s *device, u32 page, u8 *data, u32 data_size, u8 *oob, u32 oob_size);
- int (*read_page)(struct nand_device_s *device, u32 page, u8 *data, u32 data_size, u8 *oob, u32 oob_size);
- int (*controller_ready)(struct nand_device_s *device, int timeout);
- int (*nand_ready)(struct nand_device_s *device, int timeout);
-} nand_flash_controller_t;
-
-typedef struct nand_block_s
+ int (*init)(struct nand_device_s *nand);
+ int (*reset)(struct nand_device_s *nand);
+ int (*command)(struct nand_device_s *nand, uint8_t command);
+ int (*address)(struct nand_device_s *nand, uint8_t address);
+ int (*write_data)(struct nand_device_s *nand, uint16_t data);
+ int (*read_data)(struct nand_device_s *nand, void *data);
+ int (*write_block_data)(struct nand_device_s *nand, uint8_t *data, int size);
+ int (*read_block_data)(struct nand_device_s *nand, uint8_t *data, int size);
+ int (*write_page)(struct nand_device_s *nand, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size);
+ int (*read_page)(struct nand_device_s *nand, uint32_t page, uint8_t *data, uint32_t data_size, uint8_t *oob, uint32_t oob_size);
+ int (*controller_ready)(struct nand_device_s *nand, int timeout);
+ int (*nand_ready)(struct nand_device_s *nand, int timeout);
+};
+
+#define NAND_DEVICE_COMMAND_HANDLER(name) static __NAND_DEVICE_COMMAND(name)
+
+struct nand_block