diff options
| author | Brian Norris <computersforpeace@gmail.com> | 2012-05-02 13:14:55 -0400 |
|---|---|---|
| committer | David Woodhouse <David.Woodhouse@intel.com> | 2012-05-14 00:20:00 -0400 |
| commit | 1fbb938dff5b6bb4514a4e7600276b03c7f08e25 (patch) | |
| tree | 49ab8089580041bcbd767ff7a57aa7188ee6b6c0 /include/linux | |
| parent | b4f7aa84d6ff44327ab91a2973ebf0c2a7797d24 (diff) | |
mtd: nand: add 'oob_required' argument to NAND {read,write}_page interfaces
New NAND controllers can perform read/write via HW engines which don't expose
OOB data in their DMA mode. To reflect this, we should rework the nand_chip /
nand_ecc_ctrl interfaces that assume that drivers will always read/write OOB
data in the nand_chip.oob_poi buffer. A better interface includes a boolean
argument that explicitly tells the callee when OOB data is requested by the
calling layer (for reading/writing to/from nand_chip.oob_poi).
This patch adds the 'oob_required' parameter to each relevant {read,write}_page
interface; all 'oob_required' parameters are left unused for now. The next
patch will set the parameter properly in the nand_base.c callers, and follow-up
patches will make use of 'oob_required' in some of the callee functions.
Note that currently, there is no harm in ignoring the 'oob_required' parameter
and *always* utilizing nand_chip.oob_poi, but there can be
performance/complexity/design benefits from avoiding filling oob_poi in the
common case. I will try to implement this for some drivers which can be ported
easily.
Note: I couldn't compile-test all of these easily, as some had ARCH
dependencies.
[dwmw2: Merge later 1/0 vs. true/false cleanup]
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
Acked-by: Jiandong Zheng <jdzheng@broadcom.com>
Acked-by: Mike Dunn <mikedunn@newsguy.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/mtd/nand.h | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index 94a6679bfc2e..c7755f455c81 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h | |||
| @@ -360,15 +360,15 @@ struct nand_ecc_ctrl { | |||
| 360 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, | 360 | int (*correct)(struct mtd_info *mtd, uint8_t *dat, uint8_t *read_ecc, |
| 361 | uint8_t *calc_ecc); | 361 | uint8_t *calc_ecc); |
| 362 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 362 | int (*read_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
| 363 | uint8_t *buf, int page); | 363 | uint8_t *buf, int oob_required, int page); |
| 364 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 364 | void (*write_page_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
| 365 | const uint8_t *buf); | 365 | const uint8_t *buf, int oob_required); |
| 366 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, | 366 | int (*read_page)(struct mtd_info *mtd, struct nand_chip *chip, |
| 367 | uint8_t *buf, int page); | 367 | uint8_t *buf, int oob_required, int page); |
| 368 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, | 368 | int (*read_subpage)(struct mtd_info *mtd, struct nand_chip *chip, |
| 369 | uint32_t offs, uint32_t len, uint8_t *buf); | 369 | uint32_t offs, uint32_t len, uint8_t *buf); |
| 370 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 370 | void (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
| 371 | const uint8_t *buf); | 371 | const uint8_t *buf, int oob_required); |
| 372 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 372 | int (*write_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
| 373 | int page); | 373 | int page); |
| 374 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, | 374 | int (*read_oob_raw)(struct mtd_info *mtd, struct nand_chip *chip, |
| @@ -504,7 +504,8 @@ struct nand_chip { | |||
| 504 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, | 504 | int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, |
| 505 | int status, int page); | 505 | int status, int page); |
| 506 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, | 506 | int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, |
| 507 | const uint8_t *buf, int page, int cached, int raw); | 507 | const uint8_t *buf, int oob_required, int page, |
| 508 | int cached, int raw); | ||
| 508 | 509 | ||
| 509 | int chip_delay; | 510 | int chip_delay; |
| 510 | unsigned int options; | 511 | unsigned int options; |
