STRUCT NAND_OPS(9)
okay so bestie, welcome to the Kernel API Manual page for struct nand_ops(9) β the NAND operations struct thatβs lowkey the backstage crew of your fave flash setup π
β¨
πΈ NAME πΈ
struct nand_ops β NAND operations π
β¨ SYNOPSIS β¨
hereβs the struct, bestie β exact formatting and all, respect the line breaks or the vibe check fails π:
struct nand_ops {
int (*erase)(struct nand_device *nand, const struct nand_pos *pos);
int (*markbad)(struct nand_device *nand, const struct nand_pos
*pos);
bool (*isbad)(struct nand_device *nand, const struct nand_pos *pos);
};
π«Ά Members π«Ά
eraseβ erase a specific block. No need to check if the block is bad before erasing β this has been taken care of by the generic NAND layer, no cap πmarkbadβ mark a specific block bad. No need to check if the block is already marked bad β this has been taken care of by the generic NAND layer too. This method should just write the BBM (Bad Block Marker) so that future call tostruct_nand_ops->isbadreturntrueβ¨isbadβ check whether a block is bad or not. This method should just read the BBM and return whether the block is bad or not based on what it reads π«Ά
π¦ Description π¦
These are all low level operations that should be implemented by specialized NAND layers (SPI NAND, raw NAND, ...). periodt π
π SEE ALSO π
peep the kernel file ./include/linux/mtd/nand.h and the whole iconic entourage: struct nand_memory_organization(9), struct nand_row_converter(9), struct nand_pos(9), enum nand_page_io_req_type(9), struct nand_page_io_req(9), enum nand_ecc_engine_type(9), enum nand_ecc_placement(9), enum nand_ecc_algo(9), struct nand_ecc_props(9), struct nand_bbt(9), struct nand_ecc_context(9), struct nand_ecc_engine_ops(9), enum nand_ecc_engine_integration(9), struct nand_ecc_engine(9), struct nand_ecc_req_tweak_ctx(9), struct nand_ecc(9), struct nand_device(9), struct nand_io_iter(9), mtd_to_nanddev(9), nanddev_to_mtd(9), nanddev_page_size(9), nanddev_per_page_oobsize(9), nanddev_pages_per_eraseblock(9), nanddev_pages_per_target(9), nanddev_eraseblocks_per_lun(9), nanddev_eraseblocks_per_target(9), nanddev_target_size(9), nanddev_neraseblocks(9), nanddev_size(9), nanddev_get_memorg(9), nanddev_get_ecc_conf(9), nanddev_get_ecc_nsteps(9), nanddev_get_ecc_bytes_per_step(9), nanddev_get_ecc_requirements(9), nanddev_set_ecc_requirements(9), nanddev_register(9), nanddev_unregister(9), nanddev_set_of_node(9), nanddev_get_of_node(9), nanddev_offs_to_pos(9), nanddev_pos_cmp(9), nanddev_pos_to_offs(9), nanddev_pos_to_row(9), nanddev_pos_next_target(9), nanddev_pos_next_lun(9), nanddev_pos_next_eraseblock(9), nanddev_pos_next_page(9), nanddev_bbt_pos_to_entry(9), nanddev_bbt_is_initialized(9) π«Ά
mwah π this pageβs source/version is ./include/linux/mtd, dated October 2026. bye bestie, go implement those ops π«Άβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms