MTD NAND Driver Programming Interface

Thomas Gleixner


This documentation is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

For more details see the file COPYING in the source distribution of Linux.

Table of Contents

1. Introduction
2. Known Bugs And Assumptions
3. Documentation hints
Function identifiers [XXX]
Struct member identifiers [XXX]
4. Basic board driver
Basic defines
Partition defines
Hardware control function
Device ready function
Init function
Exit function
5. Advanced board driver functions
Multiple chip control
Hardware ECC support
Functions and constants
Hardware ECC with syndrome calculation
Bad block table support
Flash based tables
User defined tables
Spare area (auto)placement
Placement defined by fs driver
Automatic placement
User space placement selection
Spare area autoplacement default schemes
256 byte pagesize
512 byte pagesize
2048 byte pagesize
6. Filesystem support
7. Tools
8. Constants
Chip option constants
Constants for chip id table
Constants for runtime options
ECC selection constants
Hardware control related constants
Bad block table related constants
9. Structures
struct nand_hw_control — Control structure for hardware controller (e.g ECC generator) shared among independent devices
struct nand_ecc_ctrl — Control structure for ecc
struct nand_buffers — buffer structure for read/write
struct nand_chip — NAND Private Flash Chip Data
struct nand_flash_dev — NAND Flash Device ID Structure
struct nand_manufacturers — NAND Flash Manufacturer ID Structure
struct nand_bbt_descr — bad block table descriptor
struct platform_nand_chip — chip level device structure
struct platform_nand_ctrl — controller level device structure
struct platform_nand_data — container structure for platform-specific data
10. Public Functions Provided
nand_scan_ident — [NAND Interface] Scan for the NAND device
nand_scan_tail — [NAND Interface] Scan for the NAND device
nand_scan — [NAND Interface] Scan for the NAND device
nand_release — [NAND Interface] Free resources held by the NAND device
nand_scan_bbt — [NAND Interface] scan, find, read and maybe create bad block table(s)
nand_default_bbt — [NAND Interface] Select a default bad block table for the device
nand_calculate_ecc — [NAND Interface] Calculate 3-byte ECC for 256-byte block
nand_correct_data — [NAND Interface] Detect and correct bit error(s)
11. Internal Functions Provided
nand_release_device — [GENERIC] release chip
nand_read_byte — [DEFAULT] read one byte from the chip
nand_read_byte16 — [DEFAULT] read one byte endianess aware from the chip
nand_read_word — [DEFAULT] read one word from the chip
nand_select_chip — [DEFAULT] control CE line
nand_write_buf — [DEFAULT] write buffer to chip
nand_read_buf — [DEFAULT] read chip data into buffer
nand_verify_buf — [DEFAULT] Verify chip data against buffer
nand_write_buf16 — [DEFAULT] write buffer to chip
nand_read_buf16 — [DEFAULT] read chip data into buffer
nand_verify_buf16 — [DEFAULT] Verify chip data against buffer
nand_block_bad — [DEFAULT] Read bad block marker from the chip
nand_default_block_markbad — [DEFAULT] mark a block bad
nand_check_wp — [GENERIC] check if the chip is write protected
nand_block_checkbad — [GENERIC] Check if a block is marked bad
nand_command — [DEFAULT] Send command to NAND device
nand_command_lp — [DEFAULT] Send command to NAND large page device
nand_get_device — [GENERIC] Get chip for selected access
nand_wait — [DEFAULT] wait until the command is done
nand_read_page_raw — [Intern] read raw page data without ecc
nand_read_page_swecc — [REPLACABLE] software ecc based page read function
nand_read_page_hwecc — [REPLACABLE] hardware ecc based page read function
nand_read_page_syndrome — [REPLACABLE] hardware ecc syndrom based page read
nand_transfer_oob — [Internal] Transfer oob to client buffer
nand_do_read_ops — [Internal] Read data with ECC
nand_read — [MTD Interface] MTD compability function for nand_do_read_ecc
nand_read_oob_std — [REPLACABLE] the most common OOB data read function
nand_read_oob_syndrome — [REPLACABLE] OOB data read function for HW ECC
nand_write_oob_std — [REPLACABLE] the most common OOB data write function
nand_write_oob_syndrome — [REPLACABLE] OOB data write function for HW ECC
nand_do_read_oob — [Intern] NAND read out-of-band
nand_read_oob — [MTD Interface] NAND read data and/or out-of-band
nand_write_page_raw — [Intern] raw page write function
nand_write_page_swecc — [REPLACABLE] software ecc based page write function
nand_write_page_hwecc — [REPLACABLE] hardware ecc based page write function
nand_write_page_syndrome — [REPLACABLE] hardware ecc syndrom based page write
nand_write_page — [REPLACEABLE] write one page
nand_fill_oob — [Internal] Transfer client buffer to oob
nand_do_write_ops — [Internal] NAND write with ECC
nand_write — [MTD Interface] NAND write with ECC
nand_do_write_oob — [MTD Interface] NAND write out-of-band
nand_write_oob — [MTD Interface] NAND write data and/or out-of-band
single_erase_cmd — [GENERIC] NAND standard block erase command function
multi_erase_cmd — [GENERIC] AND specific block erase command function
nand_erase — [MTD Interface] erase block(s)
nand_erase_nand — [Internal] erase block(s)
nand_sync — [MTD Interface] sync
nand_block_isbad — [MTD Interface] Check if block at offset is bad
nand_block_markbad — [MTD Interface] Mark block at the given offset as bad
nand_suspend — [MTD Interface] Suspend the NAND flash
nand_resume — [MTD Interface] Resume the NAND flash
check_pattern — [GENERIC] check if a pattern is in the buffer
check_short_pattern — [GENERIC] check if a pattern is in the buffer
read_bbt — [GENERIC] Read the bad block table starting from page
read_abs_bbt — [GENERIC] Read the bad block table starting at a given page
read_abs_bbts — [GENERIC] Read the bad block table(s) for all chips starting at a given page
create_bbt — [GENERIC] Create a bad block table by scanning the device
search_bbt — [GENERIC] scan the device for a specific bad block table
search_read_bbts — [GENERIC] scan the device for bad block table(s)
write_bbt — [GENERIC] (Re)write the bad block table
nand_memory_bbt — [GENERIC] create a memory based bad block table
check_create — [GENERIC] create and write bbt(s) if necessary
mark_bbt_region — [GENERIC] mark the bad block table regions
nand_update_bbt — [NAND Interface] update bad block table(s)
nand_isbad_bbt — [NAND Interface] Check if a block is bad
12. Credits