On Thu, 21 Feb 2019 11:01:52 +0100 Miquel Raynal <miquel.raynal@xxxxxxxxxxx> wrote: > diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h > index 30f0fb02abe2..9e3b018d0b83 100644 > --- a/include/linux/mtd/nand.h > +++ b/include/linux/mtd/nand.h > @@ -82,8 +82,14 @@ struct nand_pos { > unsigned int page; > }; > > +enum nand_page_io_req_type { > + NAND_PAGE_READ = 0, > + NAND_PAGE_WRITE, > +}; > + > /** > * struct nand_page_io_req - NAND I/O request object > + * @type: the type of page I/O: read or write > * @pos: the position this I/O request is targeting > * @dataoffs: the offset within the page > * @datalen: number of data bytes to read from/write to this page > @@ -99,6 +105,7 @@ struct nand_pos { > * specific commands/operations. > */ > struct nand_page_io_req { > + enum nand_page_io_req_type type; Can you add the reqtype enum and type field (+ patch the iterator helpers) in a separate patch? > struct nand_pos pos; > unsigned int dataoffs; > unsigned int datalen; > @@ -116,13 +123,35 @@ struct nand_page_io_req { > }; > > /** > - * struct nand_ecc_req - NAND ECC requirements > + * struct nand_ecc_conf - NAND ECC configuration > + * @strength: ECC strength > + * @step_size: Number of bytes per step > + * @total: Total number of bytes used for storing ECC codes, this is used by > + * generic OOB layouts > + */ > +struct nand_ecc_conf { Please do the s/nand_ecc_req/nand_ecc_conf/ in a separate patch. > + unsigned int strength; > + unsigned int step_size; > + unsigned int total; Do we really need to add this total field here? Looks like something that should be kept private to the ECC engine implementation. > +}; > + > +/** > + * struct nand_ecc_user_conf - User desired ECC configuration > + * @mode: ECC mode > + * @algo: ECC algorithm > * @strength: ECC strength > * @step_size: ECC step/block size > + * @maximize: ECC parameters must be maximized depending on the device > + * capabilities > + * @flags: User flags > */ > -struct nand_ecc_req { > +struct nand_ecc_user_conf { > + int mode; We should definitely name that one differently ('provider' maybe). > + unsigned int algo; > unsigned int strength; > unsigned int step_size; > + unsigned int maximize; > + unsigned int flags; maximize could be a flag. > }; > > #define NAND_ECCREQ(str, stp) { .strength = (str), .step_size = (stp) } > @@ -157,11 +186,76 @@ struct nand_ops { > bool (*isbad)(struct nand_device *nand, const struct nand_pos *pos); > }; ______________________________________________________ Linux MTD discussion mailing list http://lists.infradead.org/mailman/listinfo/linux-mtd/