+
+/*****************************************************************************
+ * declarations from nand_util.c
+ ****************************************************************************/
+
+typedef struct mtd_oob_ops mtd_oob_ops_t;
+
+struct nand_erase_options {
+ loff_t length; /* number of bytes to erase */
+ loff_t offset; /* first address in NAND to erase */
+ int quiet; /* don't display progress messages */
+ int jffs2; /* if true: format for jffs2 usage
+ * (write appropriate cleanmarker blocks) */
+ int scrub; /* if true, really clean NAND by erasing
+ * bad blocks (UNSAFE) */
+
+ /* Don't include skipped bad blocks in size to be erased */
+ int spread;
+ /* maximum size that actual may be in order to not exceed the buf */
+ loff_t lim;
+};
+
+typedef struct nand_erase_options nand_erase_options_t;
+
+int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
+ size_t *actual, loff_t lim, u_char *buffer);
+
+#define WITH_DROP_FFS (1 << 0) /* drop trailing all-0xff pages */
+#define WITH_WR_VERIFY (1 << 1) /* verify data was written correctly */
+
+int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
+ size_t *actual, loff_t lim, u_char *buffer, int flags);
+int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
+int nand_torture(nand_info_t *nand, loff_t offset);
+int nand_verify_page_oob(nand_info_t *nand, struct mtd_oob_ops *ops,
+ loff_t ofs);
+int nand_verify(nand_info_t *nand, loff_t ofs, size_t len, u_char *buf);
+
+#define NAND_LOCK_STATUS_TIGHT 0x01
+#define NAND_LOCK_STATUS_UNLOCK 0x04
+
+int nand_lock(nand_info_t *meminfo, int tight);
+int nand_unlock(nand_info_t *meminfo, loff_t start, size_t length,
+ int allexcept);
+int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
+
+int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst);
+void nand_deselect(void);
+
+#ifdef CONFIG_SYS_NAND_SELECT_DEVICE
+void board_nand_select_device(struct nand_chip *nand, int chip);
+#endif
+
+__attribute__((noreturn)) void nand_boot(void);
+
+#endif
+
+#ifdef CONFIG_ENV_OFFSET_OOB
+#define ENV_OOB_MARKER 0x30425645 /*"EVB0" in little-endian -- offset is stored
+ as block number*/
+#define ENV_OOB_MARKER_OLD 0x30564e45 /*"ENV0" in little-endian -- offset is
+ stored as byte number */
+#define ENV_OFFSET_SIZE 8
+int get_nand_env_oob(nand_info_t *nand, unsigned long *result);