STRUCT NAND_SUBOP(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

Okay so this is the struct nand_subop(9) page from the Kernel API Manual, bestie. And struct nand_subop is literally a sub operation β€” like a tiny slice of a bigger NAND operation. No cap, it’s giving β€œsmall but important” energy.


✨ SYNOPSIS ✨

       struct nand_subop {
           unsigned int cs;
           const struct nand_op_instr *instrs;
           unsigned int ninstrs;
           unsigned int first_instr_start_off;
           unsigned int last_instr_end_off;
        };

🧚 Members 🧚

  • cs β€” the CS line to select for this NAND sub-operation. Like, this is the line-picking field, periodt.
  • instrs β€” array of instructions. The whole lineup of stuff to do.
  • ninstrs β€” length of the instrs array. Yes bestie, it’s giving β€œhow many instructions are in this array.”
  • first_instr_start_off β€” offset to start from for the first instruction of the sub-operation. Lowkey the starting point.
  • last_instr_end_off β€” offset to end at (excluded) for the last instruction of the sub-operation. Important: excluded, okay? Don’t forget πŸ’…

πŸ’œ Description πŸ’œ

Both first_instr_start_off and last_instr_end_off only apply to data or address instructions. That’s the rule, bestie.

The way this works: when an operation cannot be handled as is by the NAND controller, it will be split by the parser into sub-operations which will be passed to the controller driver. So the parser is basically doing a little choreography 🩰 β€” chopping the operation into manageable sub-operations and handing them off to the controller driver.


🌈 SEE ALSO 🌈

Kernel file: ./include/linux/mtd/rawnand.h

  • struct nand_parameters(9)
  • struct nand_id(9)
  • struct nand_ecc_step_info(9)
  • struct nand_ecc_caps(9)
  • struct nand_ecc_ctrl(9)
  • struct nand_sdr_timings(9)
  • struct nand_nvddr_timings(9)
  • enum nand_interface_type(9)
  • struct nand_interface_config(9)
  • nand_interface_is_sdr(9)
  • nand_interface_is_nvddr(9)
  • nand_get_sdr_timings(9)
  • nand_get_nvddr_timings(9)
  • struct nand_op_cmd_instr(9)
  • struct nand_op_addr_instr(9)
  • struct nand_op_data_instr(9)
  • struct nand_op_waitrdy_instr(9)
  • enum nand_op_instr_type(9)
  • struct nand_op_instr(9)
  • struct nand_op_parser_addr_constraints(9)
  • struct nand_op_parser_data_constraints(9)
  • struct nand_op_parser_pattern_elem(9)
  • struct nand_op_parser_pattern(9)
  • struct nand_op_parser(9)
  • struct nand_operation(9)
  • struct nand_controller_ops(9)
  • struct nand_controller(9)
  • struct nand_legacy(9)
  • struct nand_chip_ops(9)
  • struct nand_manufacturer(9)
  • struct nand_secure_region(9)
  • struct nand_chip(9)
  • nand_get_interface_config(9)
  • struct nand_flash_dev(9)
  • nand_opcode_8bits(9)
  • nand_get_data_buf(9)

That’s the whole page, bestie 🫢 β€” from the Kernel API Manual, source ./include/linux/mtd, dated October 2026. Go read your NAND specs and slay πŸ’…βœ¨

πŸ“¦ where this page comes from