aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@cruncher.tec.linutronix.de>2006-05-27 16:16:10 -0400
committerThomas Gleixner <tglx@cruncher.tec.linutronix.de>2006-05-29 09:06:50 -0400
commit5bd34c091a044d130601370c370f84b1c59f1627 (patch)
tree8b08012a9a30186a8805d506f8438e2944f5f31b /include
parentff268fb8791cf18df536113355d7184007c269d9 (diff)
[MTD] NAND Replace oobinfo by ecclayout
The nand_oobinfo structure is not fitting the newer error correction demands anymore. Replace it by struct nand_ecclayout and fixup the users all over the place. Keep the nand_oobinfo based ioctl for user space compability reasons. Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'include')
-rw-r--r--include/linux/mtd/inftl.h2
-rw-r--r--include/linux/mtd/mtd.h4
-rw-r--r--include/linux/mtd/nand.h9
-rw-r--r--include/linux/mtd/nftl.h2
-rw-r--r--include/linux/mtd/onenand.h6
-rw-r--r--include/linux/mtd/partitions.h2
-rw-r--r--include/mtd/mtd-abi.h36
-rw-r--r--include/mtd/mtd-user.h1
8 files changed, 43 insertions, 19 deletions
diff --git a/include/linux/mtd/inftl.h b/include/linux/mtd/inftl.h
index d7eaa40e5ab0..6977780e548f 100644
--- a/include/linux/mtd/inftl.h
+++ b/include/linux/mtd/inftl.h
@@ -46,7 +46,7 @@ struct INFTLrecord {
46 unsigned int nb_blocks; /* number of physical blocks */ 46 unsigned int nb_blocks; /* number of physical blocks */
47 unsigned int nb_boot_blocks; /* number of blocks used by the bios */ 47 unsigned int nb_boot_blocks; /* number of blocks used by the bios */
48 struct erase_info instr; 48 struct erase_info instr;
49 struct nand_oobinfo oobinfo; 49 struct nand_ecclayout oobinfo;
50}; 50};
51 51
52int INFTL_mount(struct INFTLrecord *s); 52int INFTL_mount(struct INFTLrecord *s);
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 8429da51bb09..48a9df21ab11 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -101,8 +101,8 @@ struct mtd_info {
101 char *name; 101 char *name;
102 int index; 102 int index;
103 103
104 /* oobinfo structure pointer - read only ! */ 104 /* ecc layout structure pointer - read only ! */
105 struct nand_oobinfo *oobinfo; 105 struct nand_ecclayout *ecclayout;
106 106
107 /* Data for variable erase regions. If numeraseregions is zero, 107 /* Data for variable erase regions. If numeraseregions is zero,
108 * it means that the whole device has erasesize as given above. 108 * it means that the whole device has erasesize as given above.
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index fd46bcf52281..dc2bf1bcf42b 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -244,6 +244,7 @@ struct nand_ecc_ctrl {
244 int total; 244 int total;
245 int prepad; 245 int prepad;
246 int postpad; 246 int postpad;
247 struct nand_ecclayout *layout;
247 void (*hwctl)(struct mtd_info *mtd, int mode); 248 void (*hwctl)(struct mtd_info *mtd, int mode);
248 int (*calculate)(struct mtd_info *mtd, 249 int (*calculate)(struct mtd_info *mtd,
249 const uint8_t *dat, 250 const uint8_t *dat,
@@ -318,7 +319,7 @@ struct nand_buffers {
318 * @chipsize: [INTERN] the size of one chip for multichip arrays 319 * @chipsize: [INTERN] the size of one chip for multichip arrays
319 * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1 320 * @pagemask: [INTERN] page number mask = number of (pages / chip) - 1
320 * @pagebuf: [INTERN] holds the pagenumber which is currently in data_buf 321 * @pagebuf: [INTERN] holds the pagenumber which is currently in data_buf
321 * @autooob: [REPLACEABLE] the default (auto)placement scheme 322 * @ecclayout: [REPLACEABLE] the default ecc placement scheme
322 * @bbt: [INTERN] bad block table pointer 323 * @bbt: [INTERN] bad block table pointer
323 * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup 324 * @bbt_td: [REPLACEABLE] bad block table descriptor for flash lookup
324 * @bbt_md: [REPLACEABLE] bad block table mirror descriptor 325 * @bbt_md: [REPLACEABLE] bad block table mirror descriptor
@@ -368,7 +369,7 @@ struct nand_chip {
368 369
369 uint8_t *oob_poi; 370 uint8_t *oob_poi;
370 struct nand_hw_control *controller; 371 struct nand_hw_control *controller;
371 struct nand_oobinfo *autooob; 372 struct nand_ecclayout *ecclayout;
372 373
373 struct nand_ecc_ctrl ecc; 374 struct nand_ecc_ctrl ecc;
374 struct nand_buffers buffers; 375 struct nand_buffers buffers;
@@ -522,7 +523,7 @@ extern int nand_do_read(struct mtd_info *mtd, loff_t from, size_t len,
522 * @partitions: mtd partition list 523 * @partitions: mtd partition list
523 * @chip_delay: R/B delay value in us 524 * @chip_delay: R/B delay value in us
524 * @options: Option flags, e.g. 16bit buswidth 525 * @options: Option flags, e.g. 16bit buswidth
525 * @oobinfo: oob info structure (ecc placement) 526 * @ecclayout: ecc layout info structure
526 * @priv: hardware controller specific settings 527 * @priv: hardware controller specific settings
527 */ 528 */
528struct platform_nand_chip { 529struct platform_nand_chip {
@@ -530,7 +531,7 @@ struct platform_nand_chip {
530 int chip_offset; 531 int chip_offset;
531 int nr_partitions; 532 int nr_partitions;
532 struct mtd_partition *partitions; 533 struct mtd_partition *partitions;
533 struct nand_oobinfo *oobinfo; 534 struct nand_ecclayout *ecclayout;
534 int chip_delay; 535 int chip_delay;
535 unsigned int options; 536 unsigned int options;
536 void *priv; 537 void *priv;
diff --git a/include/linux/mtd/nftl.h b/include/linux/mtd/nftl.h
index d35d2c21ff3e..bcf2fb3fa4a7 100644
--- a/include/linux/mtd/nftl.h
+++ b/include/linux/mtd/nftl.h
@@ -37,7 +37,7 @@ struct NFTLrecord {
37 unsigned int nb_blocks; /* number of physical blocks */ 37 unsigned int nb_blocks; /* number of physical blocks */
38 unsigned int nb_boot_blocks; /* number of blocks used by the bios */ 38 unsigned int nb_boot_blocks; /* number of blocks used by the bios */
39 struct erase_info instr; 39 struct erase_info instr;
40 struct nand_oobinfo oobinfo; 40 struct nand_ecclayout oobinfo;
41}; 41};
42 42
43int NFTL_mount(struct NFTLrecord *s); 43int NFTL_mount(struct NFTLrecord *s);
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index 3f5919f2e9da..9ce9a48db444 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -77,7 +77,7 @@ struct onenand_bufferram {
77 * @param chip_lock [INTERN] spinlock used to protect access to this structure and the chip 77 * @param chip_lock [INTERN] spinlock used to protect access to this structure and the chip
78 * @param wq [INTERN] wait queue to sleep on if a OneNAND operation is in progress 78 * @param wq [INTERN] wait queue to sleep on if a OneNAND operation is in progress
79 * @param state [INTERN] the current state of the OneNAND device 79 * @param state [INTERN] the current state of the OneNAND device
80 * @param autooob [REPLACEABLE] the default (auto)placement scheme 80 * @param ecclayout [REPLACEABLE] the default ecc placement scheme
81 * @param bbm [REPLACEABLE] pointer to Bad Block Management 81 * @param bbm [REPLACEABLE] pointer to Bad Block Management
82 * @param priv [OPTIONAL] pointer to private chip date 82 * @param priv [OPTIONAL] pointer to private chip date
83 */ 83 */
@@ -113,9 +113,9 @@ struct onenand_chip {
113 onenand_state_t state; 113 onenand_state_t state;
114 unsigned char *page_buf; 114 unsigned char *page_buf;
115 115
116 struct nand_oobinfo *autooob; 116 struct nand_ecclayout *ecclayout;
117 117
118 void *bbm; 118 void *bbm;
119 119
120 void *priv; 120 void *priv;
121}; 121};
diff --git a/include/linux/mtd/partitions.h b/include/linux/mtd/partitions.h
index b03f512d51b9..da6b3d6f12a7 100644
--- a/include/linux/mtd/partitions.h
+++ b/include/linux/mtd/partitions.h
@@ -41,7 +41,7 @@ struct mtd_partition {
41 u_int32_t size; /* partition size */ 41 u_int32_t size; /* partition size */
42 u_int32_t offset; /* offset within the master MTD space */ 42 u_int32_t offset; /* offset within the master MTD space */
43 u_int32_t mask_flags; /* master MTD flags to mask out for this partition */ 43 u_int32_t mask_flags; /* master MTD flags to mask out for this partition */
44 struct nand_oobinfo *oobsel; /* out of band layout for this partition (NAND only)*/ 44 struct nand_ecclayout *ecclayout; /* out of band layout for this partition (NAND only)*/
45 struct mtd_info **mtdp; /* pointer to store the MTD object */ 45 struct mtd_info **mtdp; /* pointer to store the MTD object */
46}; 46};
47 47
diff --git a/include/mtd/mtd-abi.h b/include/mtd/mtd-abi.h
index 1e09e4c8f485..54c673f9648d 100644
--- a/include/mtd/mtd-abi.h
+++ b/include/mtd/mtd-abi.h
@@ -82,12 +82,12 @@ struct otp_info {
82 uint32_t locked; 82 uint32_t locked;
83}; 83};
84 84
85#define MEMGETINFO _IOR('M', 1, struct mtd_info_user) 85#define MEMGETINFO _IOR('M', 1, struct mtd_info_user)
86#define MEMERASE _IOW('M', 2, struct erase_info_user) 86#define MEMERASE _IOW('M', 2, struct erase_info_user)
87#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf) 87#define MEMWRITEOOB _IOWR('M', 3, struct mtd_oob_buf)
88#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf) 88#define MEMREADOOB _IOWR('M', 4, struct mtd_oob_buf)
89#define MEMLOCK _IOW('M', 5, struct erase_info_user) 89#define MEMLOCK _IOW('M', 5, struct erase_info_user)
90#define MEMUNLOCK _IOW('M', 6, struct erase_info_user) 90#define MEMUNLOCK _IOW('M', 6, struct erase_info_user)
91#define MEMGETREGIONCOUNT _IOR('M', 7, int) 91#define MEMGETREGIONCOUNT _IOR('M', 7, int)
92#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user) 92#define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user)
93#define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo) 93#define MEMSETOOBSEL _IOW('M', 9, struct nand_oobinfo)
@@ -97,8 +97,13 @@ struct otp_info {
97#define OTPSELECT _IOR('M', 13, int) 97#define OTPSELECT _IOR('M', 13, int)
98#define OTPGETREGIONCOUNT _IOW('M', 14, int) 98#define OTPGETREGIONCOUNT _IOW('M', 14, int)
99#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info) 99#define OTPGETREGIONINFO _IOW('M', 15, struct otp_info)
100#define OTPLOCK _IOR('M', 16, struct otp_info) 100#define OTPLOCK _IOR('M', 16, struct otp_info)
101#define ECCGETLAYOUT _IOR('M', 17, struct nand_ecclayout)
101 102
103/*
104 * Obsolete legacy interface. Keep it in order not to break userspace
105 * interfaces
106 */
102struct nand_oobinfo { 107struct nand_oobinfo {
103 uint32_t useecc; 108 uint32_t useecc;
104 uint32_t eccbytes; 109 uint32_t eccbytes;
@@ -106,4 +111,21 @@ struct nand_oobinfo {
106 uint32_t eccpos[32]; 111 uint32_t eccpos[32];
107}; 112};
108 113
114struct nand_oobfree {
115 uint32_t offset;
116 uint32_t length;
117};
118
119#define MTD_MAX_OOBFREE_ENTRIES 8
120/*
121 * ECC layout control structure. Exported to userspace for
122 * diagnosis and to allow creation of raw images
123 */
124struct nand_ecclayout {
125 uint32_t eccbytes;
126 uint32_t eccpos[64];
127 uint32_t oobavail;
128 struct nand_oobfree oobfree[MTD_MAX_OOBFREE_ENTRIES];
129};
130
109#endif /* __MTD_ABI_H__ */ 131#endif /* __MTD_ABI_H__ */
diff --git a/include/mtd/mtd-user.h b/include/mtd/mtd-user.h
index 1c13fc7161fe..713f34d3e62e 100644
--- a/include/mtd/mtd-user.h
+++ b/include/mtd/mtd-user.h
@@ -16,5 +16,6 @@ typedef struct mtd_info_user mtd_info_t;
16typedef struct erase_info_user erase_info_t; 16typedef struct erase_info_user erase_info_t;
17typedef struct region_info_user region_info_t; 17typedef struct region_info_user region_info_t;
18typedef struct nand_oobinfo nand_oobinfo_t; 18typedef struct nand_oobinfo nand_oobinfo_t;
19typedef struct nand_ecclayout nand_ecclayout_t;
19 20
20#endif /* __MTD_USER_H__ */ 21#endif /* __MTD_USER_H__ */