STRUCT NAND_OPS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

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 to struct_nand_ops->isbad return true ✨
  • 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