diff options
Diffstat (limited to 'include/linux/mtd/mtd.h')
-rw-r--r-- | include/linux/mtd/mtd.h | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h index c50c3f3927d9..e95d0463a3e5 100644 --- a/include/linux/mtd/mtd.h +++ b/include/linux/mtd/mtd.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | * $Id: mtd.h,v 1.59 2005/04/11 10:19:02 gleixner Exp $ | 2 | * $Id: mtd.h,v 1.61 2005/11/07 11:14:54 gleixner Exp $ |
3 | * | 3 | * |
4 | * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. | 4 | * Copyright (C) 1999-2003 David Woodhouse <dwmw2@infradead.org> et al. |
5 | * | 5 | * |
@@ -72,7 +72,17 @@ struct mtd_info { | |||
72 | u_int32_t oobsize; // Amount of OOB data per block (e.g. 16) | 72 | u_int32_t oobsize; // Amount of OOB data per block (e.g. 16) |
73 | u_int32_t ecctype; | 73 | u_int32_t ecctype; |
74 | u_int32_t eccsize; | 74 | u_int32_t eccsize; |
75 | 75 | ||
76 | /* | ||
77 | * Reuse some of the above unused fields in the case of NOR flash | ||
78 | * with configurable programming regions to avoid modifying the | ||
79 | * user visible structure layout/size. Only valid when the | ||
80 | * MTD_PROGRAM_REGIONS flag is set. | ||
81 | * (Maybe we should have an union for those?) | ||
82 | */ | ||
83 | #define MTD_PROGREGION_SIZE(mtd) (mtd)->oobblock | ||
84 | #define MTD_PROGREGION_CTRLMODE_VALID(mtd) (mtd)->oobsize | ||
85 | #define MTD_PROGREGION_CTRLMODE_INVALID(mtd) (mtd)->ecctype | ||
76 | 86 | ||
77 | // Kernel-only stuff starts here. | 87 | // Kernel-only stuff starts here. |
78 | char *name; | 88 | char *name; |
@@ -80,13 +90,13 @@ struct mtd_info { | |||
80 | 90 | ||
81 | // oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO) | 91 | // oobinfo is a nand_oobinfo structure, which can be set by iotcl (MEMSETOOBINFO) |
82 | struct nand_oobinfo oobinfo; | 92 | struct nand_oobinfo oobinfo; |
83 | u_int32_t oobavail; // Number of bytes in OOB area available for fs | 93 | u_int32_t oobavail; // Number of bytes in OOB area available for fs |
84 | 94 | ||
85 | /* Data for variable erase regions. If numeraseregions is zero, | 95 | /* Data for variable erase regions. If numeraseregions is zero, |
86 | * it means that the whole device has erasesize as given above. | 96 | * it means that the whole device has erasesize as given above. |
87 | */ | 97 | */ |
88 | int numeraseregions; | 98 | int numeraseregions; |
89 | struct mtd_erase_region_info *eraseregions; | 99 | struct mtd_erase_region_info *eraseregions; |
90 | 100 | ||
91 | /* This really shouldn't be here. It can go away in 2.5 */ | 101 | /* This really shouldn't be here. It can go away in 2.5 */ |
92 | u_int32_t bank_size; | 102 | u_int32_t bank_size; |
@@ -109,10 +119,10 @@ struct mtd_info { | |||
109 | int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); | 119 | int (*read_oob) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); |
110 | int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); | 120 | int (*write_oob) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf); |
111 | 121 | ||
112 | /* | 122 | /* |
113 | * Methods to access the protection register area, present in some | 123 | * Methods to access the protection register area, present in some |
114 | * flash devices. The user data is one time programmable but the | 124 | * flash devices. The user data is one time programmable but the |
115 | * factory data is read only. | 125 | * factory data is read only. |
116 | */ | 126 | */ |
117 | int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); | 127 | int (*get_fact_prot_info) (struct mtd_info *mtd, struct otp_info *buf, size_t len); |
118 | int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); | 128 | int (*read_fact_prot_reg) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf); |
@@ -123,14 +133,14 @@ struct mtd_info { | |||
123 | 133 | ||
124 | /* kvec-based read/write methods. We need these especially for NAND flash, | 134 | /* kvec-based read/write methods. We need these especially for NAND flash, |
125 | with its limited number of write cycles per erase. | 135 | with its limited number of write cycles per erase. |
126 | NB: The 'count' parameter is the number of _vectors_, each of | 136 | NB: The 'count' parameter is the number of _vectors_, each of |
127 | which contains an (ofs, len) tuple. | 137 | which contains an (ofs, len) tuple. |
128 | */ | 138 | */ |
129 | int (*readv) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen); | 139 | int (*readv) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, size_t *retlen); |
130 | int (*readv_ecc) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, | 140 | int (*readv_ecc) (struct mtd_info *mtd, struct kvec *vecs, unsigned long count, loff_t from, |
131 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); | 141 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); |
132 | int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen); | 142 | int (*writev) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, size_t *retlen); |
133 | int (*writev_ecc) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, | 143 | int (*writev_ecc) (struct mtd_info *mtd, const struct kvec *vecs, unsigned long count, loff_t to, |
134 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); | 144 | size_t *retlen, u_char *eccbuf, struct nand_oobinfo *oobsel); |
135 | 145 | ||
136 | /* Sync */ | 146 | /* Sync */ |
@@ -194,7 +204,7 @@ int default_mtd_readv(struct mtd_info *mtd, struct kvec *vecs, | |||
194 | #define MTD_WRITEECC(mtd, args...) (*(mtd->write_ecc))(mtd, args) | 204 | #define MTD_WRITEECC(mtd, args...) (*(mtd->write_ecc))(mtd, args) |
195 | #define MTD_READOOB(mtd, args...) (*(mtd->read_oob))(mtd, args) | 205 | #define MTD_READOOB(mtd, args...) (*(mtd->read_oob))(mtd, args) |
196 | #define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) | 206 | #define MTD_WRITEOOB(mtd, args...) (*(mtd->write_oob))(mtd, args) |
197 | #define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0) | 207 | #define MTD_SYNC(mtd) do { if (mtd->sync) (*(mtd->sync))(mtd); } while (0) |
198 | 208 | ||
199 | 209 | ||
200 | #ifdef CONFIG_MTD_PARTITIONS | 210 | #ifdef CONFIG_MTD_PARTITIONS |