aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mtd/mtd.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/mtd/mtd.h')
-rw-r--r--include/linux/mtd/mtd.h50
1 files changed, 48 insertions, 2 deletions
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 4970c2e96fbf..e75bb584e80b 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -67,6 +67,50 @@ struct mtd_ecc_stats {
67 unsigned long failed; 67 unsigned long failed;
68}; 68};
69 69
70/*
71 * oob operation modes
72 *
73 * MTD_OOB_PLACE: oob data are placed at the given offset
74 * MTD_OOB_AUTO: oob data are automatically placed at the free areas
75 * which are defined by the ecclayout
76 * MTD_OOB_RAW: mode to read raw data+oob in one chunk. The oob data
77 * is inserted into the data. Thats a raw image of the
78 * flash contents.
79 */
80typedef enum {
81 MTD_OOB_PLACE,
82 MTD_OOB_AUTO,
83 MTD_OOB_RAW,
84} mtd_oob_mode_t;
85
86/**
87 * struct mtd_oob_ops - oob operation operands
88 * @mode: operation mode
89 *
90 * @len: number of bytes to write/read. When a data buffer is given
91 * (datbuf != NULL) this is the number of data bytes. When
92 + no data buffer is available this is the number of oob bytes.
93 *
94 * @retlen: number of bytes written/read. When a data buffer is given
95 * (datbuf != NULL) this is the number of data bytes. When
96 + no data buffer is available this is the number of oob bytes.
97 *
98 * @ooblen: number of oob bytes per page
99 * @ooboffs: offset of oob data in the oob area (only relevant when
100 * mode = MTD_OOB_PLACE)
101 * @datbuf: data buffer - if NULL only oob data are read/written
102 * @oobbuf: oob data buffer
103 */
104struct mtd_oob_ops {
105 mtd_oob_mode_t mode;
106 size_t len;
107 size_t retlen;
108 size_t ooblen;
109 uint32_t ooboffs;
110 uint8_t *datbuf;
111 uint8_t *oobbuf;
112};
113
70struct mtd_info { 114struct mtd_info {
71 u_char type; 115 u_char type;
72 u_int32_t flags; 116 u_int32_t flags;
@@ -125,8 +169,10 @@ struct mtd_info {
125 int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 169 int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
126 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); 170 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
127 171
128 int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); 172 int (*read_oob) (struct mtd_info *mtd, loff_t from,
129 int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); 173 struct mtd_oob_ops *ops);
174 int (*write_oob) (struct mtd_info *mtd, loff_t to,
175 struct mtd_oob_ops *ops);
130 176
131 /* 177 /*
132 * Methods to access the protection register area, present in some 178 * Methods to access the protection register area, present in some