Commit 329ad399a9b3adf52c90637b21ca029fcf7f8795

Authored by Artem Bityutskiy
Committed by David Woodhouse
1 parent 04c601bfa4

mtd: introduce mtd_read interface

Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>

Showing 35 changed files with 152 additions and 135 deletions Side-by-side Diff

arch/arm/mach-davinci/board-da850-evm.c
... ... @@ -127,7 +127,7 @@
127 127 size_t retlen;
128 128  
129 129 if (!strcmp(mtd->name, "MAC-Address")) {
130   - mtd->read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
  130 + mtd_read(mtd, 0, ETH_ALEN, &retlen, mac_addr);
131 131 if (retlen == ETH_ALEN)
132 132 pr_info("Read MAC addr from SPI Flash: %pM\n",
133 133 mac_addr);
arch/cris/arch-v32/drivers/axisflashmap.c
... ... @@ -413,8 +413,8 @@
413 413 } while (blockstat && ptable_sector);
414 414 #endif
415 415 if (ptable_sector) {
416   - main_mtd->read(main_mtd, ptable_sector, PAGESIZE,
417   - &len, page);
  416 + mtd_read(main_mtd, ptable_sector, PAGESIZE, &len,
  417 + page);
418 418 ptable_head = &((struct partitiontable *) page)->head;
419 419 }
420 420  
... ... @@ -75,7 +75,7 @@
75 75 size_t sz;
76 76 int ret;
77 77  
78   - ret = mtd->read(mtd, ptr, sizeof(fs), &sz, (u_char *) &fs);
  78 + ret = mtd_read(mtd, ptr, sizeof(fs), &sz, (u_char *)&fs);
79 79 if (ret >= 0 && sz != sizeof(fs))
80 80 ret = -EINVAL;
81 81  
... ... @@ -132,7 +132,7 @@
132 132 int ret, i;
133 133  
134 134 memset(iis, 0, sizeof(*iis));
135   - ret = mtd->read(mtd, ptr, sizeof(*iis), &sz, (u_char *) iis);
  135 + ret = mtd_read(mtd, ptr, sizeof(*iis), &sz, (u_char *)iis);
136 136 if (ret < 0)
137 137 goto failed;
138 138  
drivers/mtd/ar7part.c
... ... @@ -73,8 +73,8 @@
73 73  
74 74 do { /* Try 10 blocks starting from master->erasesize */
75 75 offset = pre_size;
76   - master->read(master, offset,
77   - sizeof(header), &len, (uint8_t *)&header);
  76 + mtd_read(master, offset, sizeof(header), &len,
  77 + (uint8_t *)&header);
78 78 if (!strncmp((char *)&header, "TIENV0.8", 8))
79 79 ar7_parts[1].offset = pre_size;
80 80 if (header.checksum == LOADER_MAGIC1)
81 81  
... ... @@ -95,16 +95,16 @@
95 95 case LOADER_MAGIC1:
96 96 while (header.length) {
97 97 offset += sizeof(header) + header.length;
98   - master->read(master, offset, sizeof(header),
99   - &len, (uint8_t *)&header);
  98 + mtd_read(master, offset, sizeof(header), &len,
  99 + (uint8_t *)&header);
100 100 }
101 101 root_offset = offset + sizeof(header) + 4;
102 102 break;
103 103 case LOADER_MAGIC2:
104 104 while (header.length) {
105 105 offset += sizeof(header) + header.length;
106   - master->read(master, offset, sizeof(header),
107   - &len, (uint8_t *)&header);
  106 + mtd_read(master, offset, sizeof(header), &len,
  107 + (uint8_t *)&header);
108 108 }
109 109 root_offset = offset + sizeof(header) + 4 + 0xff;
110 110 root_offset &= ~(uint32_t)0xff;
... ... @@ -114,8 +114,7 @@
114 114 break;
115 115 }
116 116  
117   - master->read(master, root_offset,
118   - sizeof(header), &len, (u8 *)&header);
  117 + mtd_read(master, root_offset, sizeof(header), &len, (u8 *)&header);
119 118 if (header.checksum != SQUASHFS_MAGIC) {
120 119 root_offset += master->erasesize - 1;
121 120 root_offset &= ~(master->erasesize - 1);
drivers/mtd/bcm63xxpart.c
... ... @@ -48,8 +48,8 @@
48 48 int ret;
49 49 size_t retlen;
50 50  
51   - ret = master->read(master, BCM963XX_CFE_VERSION_OFFSET, 5, &retlen,
52   - (void *)buf);
  51 + ret = mtd_read(master, BCM963XX_CFE_VERSION_OFFSET, 5, &retlen,
  52 + (void *)buf);
53 53 buf[retlen] = 0;
54 54  
55 55 if (ret)
... ... @@ -59,8 +59,8 @@
59 59 return 0;
60 60  
61 61 /* very old CFE's do not have the cfe-v string, so check for magic */
62   - ret = master->read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
63   - (void *)buf);
  62 + ret = mtd_read(master, BCM63XX_CFE_MAGIC_OFFSET, 8, &retlen,
  63 + (void *)buf);
64 64 buf[retlen] = 0;
65 65  
66 66 return strncmp("CFE1CFE1", buf, 8);
... ... @@ -95,8 +95,8 @@
95 95 return -ENOMEM;
96 96  
97 97 /* Get the tag */
98   - ret = master->read(master, cfelen, sizeof(struct bcm_tag), &retlen,
99   - (void *)buf);
  98 + ret = mtd_read(master, cfelen, sizeof(struct bcm_tag), &retlen,
  99 + (void *)buf);
100 100  
101 101 if (retlen != sizeof(struct bcm_tag)) {
102 102 vfree(buf);
... ... @@ -168,8 +168,8 @@
168 168 (offset + sizeof(header)) < max_offset;
169 169 offset += part->mbd.mtd->erasesize ? : 0x2000) {
170 170  
171   - err = part->mbd.mtd->read(part->mbd.mtd, offset, sizeof(header), &ret,
172   - (unsigned char *)&header);
  171 + err = mtd_read(part->mbd.mtd, offset, sizeof(header), &ret,
  172 + (unsigned char *)&header);
173 173  
174 174 if (err)
175 175 return err;
... ... @@ -224,8 +224,8 @@
224 224 for (i = 0; i < le16_to_cpu(part->header.NumEraseUnits); i++) {
225 225 offset = ((i + le16_to_cpu(part->header.FirstPhysicalEUN))
226 226 << part->header.EraseUnitSize);
227   - ret = part->mbd.mtd->read(part->mbd.mtd, offset, sizeof(header), &retval,
228   - (unsigned char *)&header);
  227 + ret = mtd_read(part->mbd.mtd, offset, sizeof(header), &retval,
  228 + (unsigned char *)&header);
229 229  
230 230 if (ret)
231 231 goto out_XferInfo;
... ... @@ -289,9 +289,9 @@
289 289 part->EUNInfo[i].Deleted = 0;
290 290 offset = part->EUNInfo[i].Offset + le32_to_cpu(header.BAMOffset);
291 291  
292   - ret = part->mbd.mtd->read(part->mbd.mtd, offset,
293   - part->BlocksPerUnit * sizeof(uint32_t), &retval,
294   - (unsigned char *)part->bam_cache);
  292 + ret = mtd_read(part->mbd.mtd, offset,
  293 + part->BlocksPerUnit * sizeof(uint32_t), &retval,
  294 + (unsigned char *)part->bam_cache);
295 295  
296 296 if (ret)
297 297 goto out_bam_cache;
... ... @@ -485,9 +485,9 @@
485 485  
486 486 offset = eun->Offset + le32_to_cpu(part->header.BAMOffset);
487 487  
488   - ret = part->mbd.mtd->read(part->mbd.mtd, offset,
489   - part->BlocksPerUnit * sizeof(uint32_t),
490   - &retlen, (u_char *) (part->bam_cache));
  488 + ret = mtd_read(part->mbd.mtd, offset,
  489 + part->BlocksPerUnit * sizeof(uint32_t), &retlen,
  490 + (u_char *)(part->bam_cache));
491 491  
492 492 /* mark the cache bad, in case we get an error later */
493 493 part->bam_index = 0xffff;
... ... @@ -523,8 +523,8 @@
523 523 break;
524 524 case BLOCK_DATA:
525 525 case BLOCK_REPLACEMENT:
526   - ret = part->mbd.mtd->read(part->mbd.mtd, src, SECTOR_SIZE,
527   - &retlen, (u_char *) buf);
  526 + ret = mtd_read(part->mbd.mtd, src, SECTOR_SIZE, &retlen,
  527 + (u_char *)buf);
528 528 if (ret) {
529 529 printk(KERN_WARNING "ftl: Error reading old xfer unit in copy_erase_unit\n");
530 530 return ret;
... ... @@ -747,10 +747,11 @@
747 747 /* Invalidate cache */
748 748 part->bam_index = 0xffff;
749 749  
750   - ret = part->mbd.mtd->read(part->mbd.mtd,
751   - part->EUNInfo[eun].Offset + le32_to_cpu(part->header.BAMOffset),
752   - part->BlocksPerUnit * sizeof(uint32_t),
753   - &retlen, (u_char *) (part->bam_cache));
  750 + ret = mtd_read(part->mbd.mtd,
  751 + part->EUNInfo[eun].Offset + le32_to_cpu(part->header.BAMOffset),
  752 + part->BlocksPerUnit * sizeof(uint32_t),
  753 + &retlen,
  754 + (u_char *)(part->bam_cache));
754 755  
755 756 if (ret) {
756 757 printk(KERN_WARNING"ftl: Error reading BAM in find_free\n");
... ... @@ -810,8 +811,8 @@
810 811 else {
811 812 offset = (part->EUNInfo[log_addr / bsize].Offset
812 813 + (log_addr % bsize));
813   - ret = part->mbd.mtd->read(part->mbd.mtd, offset, SECTOR_SIZE,
814   - &retlen, (u_char *) buffer);
  814 + ret = mtd_read(part->mbd.mtd, offset, SECTOR_SIZE, &retlen,
  815 + (u_char *)buffer);
815 816  
816 817 if (ret) {
817 818 printk(KERN_WARNING "Error reading MTD device in ftl_read()\n");
... ... @@ -849,8 +850,8 @@
849 850 le32_to_cpu(part->header.BAMOffset));
850 851  
851 852 #ifdef PSYCHO_DEBUG
852   - ret = part->mbd.mtd->read(part->mbd.mtd, offset, sizeof(uint32_t),
853   - &retlen, (u_char *)&old_addr);
  853 + ret = mtd_read(part->mbd.mtd, offset, sizeof(uint32_t), &retlen,
  854 + (u_char *)&old_addr);
854 855 if (ret) {
855 856 printk(KERN_WARNING"ftl: Error reading old_addr in set_bam_entry: %d\n",ret);
856 857 return ret;
drivers/mtd/inftlcore.c
... ... @@ -343,14 +343,17 @@
343 343 if (BlockMap[block] == BLOCK_NIL)
344 344 continue;
345 345  
346   - ret = mtd->read(mtd, (inftl->EraseSize * BlockMap[block]) +
347   - (block * SECTORSIZE), SECTORSIZE, &retlen,
348   - movebuf);
  346 + ret = mtd_read(mtd,
  347 + (inftl->EraseSize * BlockMap[block]) + (block * SECTORSIZE),
  348 + SECTORSIZE,
  349 + &retlen,
  350 + movebuf);
349 351 if (ret < 0 && !mtd_is_bitflip(ret)) {
350   - ret = mtd->read(mtd,
351   - (inftl->EraseSize * BlockMap[block]) +
352   - (block * SECTORSIZE), SECTORSIZE,
353   - &retlen, movebuf);
  352 + ret = mtd_read(mtd,
  353 + (inftl->EraseSize * BlockMap[block]) + (block * SECTORSIZE),
  354 + SECTORSIZE,
  355 + &retlen,
  356 + movebuf);
354 357 if (ret != -EIO)
355 358 pr_debug("INFTL: error went away on retry?\n");
356 359 }
... ... @@ -914,7 +917,7 @@
914 917 } else {
915 918 size_t retlen;
916 919 loff_t ptr = (thisEUN * inftl->EraseSize) + blockofs;
917   - int ret = mtd->read(mtd, ptr, SECTORSIZE, &retlen, buffer);
  920 + int ret = mtd_read(mtd, ptr, SECTORSIZE, &retlen, buffer);
918 921  
919 922 /* Handle corrected bit flips gracefully */
920 923 if (ret < 0 && !mtd_is_bitflip(ret))
drivers/mtd/inftlmount.c
... ... @@ -73,8 +73,8 @@
73 73 * Check for BNAND header first. Then whinge if it's found
74 74 * but later checks fail.
75 75 */
76   - ret = mtd->read(mtd, block * inftl->EraseSize,
77   - SECTORSIZE, &retlen, buf);
  76 + ret = mtd_read(mtd, block * inftl->EraseSize, SECTORSIZE,
  77 + &retlen, buf);
78 78 /* We ignore ret in case the ECC of the MediaHeader is invalid
79 79 (which is apparently acceptable) */
80 80 if (retlen != SECTORSIZE) {
... ... @@ -118,8 +118,8 @@
118 118 memcpy(mh, buf, sizeof(struct INFTLMediaHeader));
119 119  
120 120 /* Read the spare media header at offset 4096 */
121   - mtd->read(mtd, block * inftl->EraseSize + 4096,
122   - SECTORSIZE, &retlen, buf);
  121 + mtd_read(mtd, block * inftl->EraseSize + 4096, SECTORSIZE,
  122 + &retlen, buf);
123 123 if (retlen != SECTORSIZE) {
124 124 printk(KERN_WARNING "INFTL: Unable to read spare "
125 125 "Media Header\n");
... ... @@ -342,7 +342,7 @@
342 342 int i;
343 343  
344 344 for (i = 0; i < len; i += SECTORSIZE) {
345   - if (mtd->read(mtd, address, SECTORSIZE, &retlen, buf))
  345 + if (mtd_read(mtd, address, SECTORSIZE, &retlen, buf))
346 346 return -1;
347 347 if (memcmpb(buf, 0xff, SECTORSIZE) != 0)
348 348 return -1;
drivers/mtd/mtdblock.c
... ... @@ -184,8 +184,8 @@
184 184 mtdblk->cache_offset != sect_start) {
185 185 /* fill the cache with the current sector */
186 186 mtdblk->cache_state = STATE_EMPTY;
187   - ret = mtd->read(mtd, sect_start, sect_size,
188   - &retlen, mtdblk->cache_data);
  187 + ret = mtd_read(mtd, sect_start, sect_size,
  188 + &retlen, mtdblk->cache_data);
189 189 if (ret)
190 190 return ret;
191 191 if (retlen != sect_size)
... ... @@ -222,7 +222,7 @@
222 222 mtd->name, pos, len);
223 223  
224 224 if (!sect_size)
225   - return mtd->read(mtd, pos, len, &retlen, buf);
  225 + return mtd_read(mtd, pos, len, &retlen, buf);
226 226  
227 227 while (len > 0) {
228 228 unsigned long sect_start = (pos/sect_size)*sect_size;
... ... @@ -241,7 +241,7 @@
241 241 mtdblk->cache_offset == sect_start) {
242 242 memcpy (buf, mtdblk->cache_data + offset, size);
243 243 } else {
244   - ret = mtd->read(mtd, pos, size, &retlen, buf);
  244 + ret = mtd_read(mtd, pos, size, &retlen, buf);
245 245 if (ret)
246 246 return ret;
247 247 if (retlen != size)
drivers/mtd/mtdblock_ro.c
... ... @@ -30,7 +30,7 @@
30 30 {
31 31 size_t retlen;
32 32  
33   - if (dev->mtd->read(dev->mtd, (block * 512), 512, &retlen, buf))
  33 + if (mtd_read(dev->mtd, (block * 512), 512, &retlen, buf))
34 34 return 1;
35 35 return 0;
36 36 }
drivers/mtd/mtdchar.c
... ... @@ -232,7 +232,7 @@
232 232 break;
233 233 }
234 234 default:
235   - ret = mtd->read(mtd, *ppos, len, &retlen, kbuf);
  235 + ret = mtd_read(mtd, *ppos, len, &retlen, kbuf);
236 236 }
237 237 /* Nand returns -EBADMSG on ECC errors, but it returns
238 238 * the data. For our userspace tools it is important
drivers/mtd/mtdconcat.c
... ... @@ -91,7 +91,7 @@
91 91 /* Entire transaction goes into this subdev */
92 92 size = len;
93 93  
94   - err = subdev->read(subdev, from, size, &retsize, buf);
  94 + err = mtd_read(subdev, from, size, &retsize, buf);
95 95  
96 96 /* Save information about bitflips! */
97 97 if (unlikely(err)) {
drivers/mtd/mtdoops.c
... ... @@ -258,8 +258,8 @@
258 258 continue;
259 259 /* Assume the page is used */
260 260 mark_page_used(cxt, page);
261   - ret = mtd->read(mtd, page * record_size, MTDOOPS_HEADER_SIZE,
262   - &retlen, (u_char *) &count[0]);
  261 + ret = mtd_read(mtd, page * record_size, MTDOOPS_HEADER_SIZE,
  262 + &retlen, (u_char *)&count[0]);
263 263 if (retlen != MTDOOPS_HEADER_SIZE ||
264 264 (ret < 0 && !mtd_is_bitflip(ret))) {
265 265 printk(KERN_ERR "mtdoops: read failure at %ld (%td of %d read), err %d\n",
drivers/mtd/mtdpart.c
... ... @@ -70,8 +70,7 @@
70 70 len = 0;
71 71 else if (from + len > mtd->size)
72 72 len = mtd->size - from;
73   - res = part->master->read(part->master, from + part->offset,
74   - len, retlen, buf);
  73 + res = mtd_read(part->master, from + part->offset, len, retlen, buf);
75 74 if (unlikely(res)) {
76 75 if (mtd_is_bitflip(res))
77 76 mtd->ecc_stats.corrected += part->master->ecc_stats.corrected - stats.corrected;
drivers/mtd/mtdswap.c
... ... @@ -736,7 +736,7 @@
736 736 retries = 0;
737 737  
738 738 retry:
739   - ret = mtd->read(mtd, readpos, PAGE_SIZE, &retlen, d->page_buf);
  739 + ret = mtd_read(mtd, readpos, PAGE_SIZE, &retlen, d->page_buf);
740 740  
741 741 if (ret < 0 && !mtd_is_bitflip(ret)) {
742 742 oldeb = d->eb_data + oldblock / d->pages_per_eblk;
... ... @@ -1161,7 +1161,7 @@
1161 1161 retries = 0;
1162 1162  
1163 1163 retry:
1164   - ret = mtd->read(mtd, readpos, PAGE_SIZE, &retlen, buf);
  1164 + ret = mtd_read(mtd, readpos, PAGE_SIZE, &retlen, buf);
1165 1165  
1166 1166 d->mtd_read_count++;
1167 1167 if (mtd_is_bitflip(ret)) {
drivers/mtd/nand/diskonchip.c
... ... @@ -1072,7 +1072,7 @@
1072 1072 size_t retlen;
1073 1073  
1074 1074 for (offs = 0; offs < mtd->size; offs += mtd->erasesize) {
1075   - ret = mtd->read(mtd, offs, mtd->writesize, &retlen, buf);
  1075 + ret = mtd_read(mtd, offs, mtd->writesize, &retlen, buf);
1076 1076 if (retlen != mtd->writesize)
1077 1077 continue;
1078 1078 if (ret) {
... ... @@ -1097,7 +1097,7 @@
1097 1097 /* Only one mediaheader was found. We want buf to contain a
1098 1098 mediaheader on return, so we'll have to re-read the one we found. */
1099 1099 offs = doc->mh0_page << this->page_shift;
1100   - ret = mtd->read(mtd, offs, mtd->writesize, &retlen, buf);
  1100 + ret = mtd_read(mtd, offs, mtd->writesize, &retlen, buf);
1101 1101 if (retlen != mtd->writesize) {
1102 1102 /* Insanity. Give up. */
1103 1103 printk(KERN_ERR "Read DiskOnChip Media Header once, but can't reread it???\n");
drivers/mtd/nand/nand_bbt.c
... ... @@ -201,7 +201,7 @@
201 201 from += marker_len;
202 202 marker_len = 0;
203 203 }
204   - res = mtd->read(mtd, from, len, &retlen, buf);
  204 + res = mtd_read(mtd, from, len, &retlen, buf);
205 205 if (res < 0) {
206 206 if (mtd_is_eccerr(res)) {
207 207 pr_info("nand_bbt: ECC error in BBT at "
... ... @@ -298,7 +298,7 @@
298 298 if (td->options & NAND_BBT_VERSION)
299 299 len++;
300 300  
301   - return mtd->read(mtd, offs, len, &retlen, buf);
  301 + return mtd_read(mtd, offs, len, &retlen, buf);
302 302 }
303 303  
304 304 /* Scan read raw data from flash */
... ... @@ -756,7 +756,7 @@
756 756 /* Make it block aligned */
757 757 to &= ~((loff_t)((1 << this->bbt_erase_shift) - 1));
758 758 len = 1 << this->bbt_erase_shift;
759   - res = mtd->read(mtd, to, len, &retlen, buf);
  759 + res = mtd_read(mtd, to, len, &retlen, buf);
760 760 if (res < 0) {
761 761 if (retlen != len) {
762 762 pr_info("nand_bbt: error reading block "
drivers/mtd/nftlcore.c
... ... @@ -423,12 +423,17 @@
423 423 if (BlockMap[block] == BLOCK_NIL)
424 424 continue;
425 425  
426   - ret = mtd->read(mtd, (nftl->EraseSize * BlockMap[block]) + (block * 512),
427   - 512, &retlen, movebuf);
  426 + ret = mtd_read(mtd,
  427 + (nftl->EraseSize * BlockMap[block]) + (block * 512),
  428 + 512,
  429 + &retlen,
  430 + movebuf);
428 431 if (ret < 0 && !mtd_is_bitflip(ret)) {
429   - ret = mtd->read(mtd, (nftl->EraseSize * BlockMap[block])
430   - + (block * 512), 512, &retlen,
431   - movebuf);
  432 + ret = mtd_read(mtd,
  433 + (nftl->EraseSize * BlockMap[block]) + (block * 512),
  434 + 512,
  435 + &retlen,
  436 + movebuf);
432 437 if (ret != -EIO)
433 438 printk("Error went away on retry.\n");
434 439 }
... ... @@ -771,7 +776,7 @@
771 776 } else {
772 777 loff_t ptr = (lastgoodEUN * nftl->EraseSize) + blockofs;
773 778 size_t retlen;
774   - int res = mtd->read(mtd, ptr, 512, &retlen, buffer);
  779 + int res = mtd_read(mtd, ptr, 512, &retlen, buffer);
775 780  
776 781 if (res < 0 && !mtd_is_bitflip(res))
777 782 return -EIO;
drivers/mtd/nftlmount.c
... ... @@ -63,8 +63,8 @@
63 63  
64 64 /* Check for ANAND header first. Then can whinge if it's found but later
65 65 checks fail */
66   - ret = mtd->read(mtd, block * nftl->EraseSize, SECTORSIZE,
67   - &retlen, buf);
  66 + ret = mtd_read(mtd, block * nftl->EraseSize, SECTORSIZE,
  67 + &retlen, buf);
68 68 /* We ignore ret in case the ECC of the MediaHeader is invalid
69 69 (which is apparently acceptable) */
70 70 if (retlen != SECTORSIZE) {
... ... @@ -274,7 +274,7 @@
274 274 int i;
275 275  
276 276 for (i = 0; i < len; i += SECTORSIZE) {
277   - if (mtd->read(mtd, address, SECTORSIZE, &retlen, buf))
  277 + if (mtd_read(mtd, address, SECTORSIZE, &retlen, buf))
278 278 return -1;
279 279 if (memcmpb(buf, 0xff, SECTORSIZE) != 0)
280 280 return -1;
drivers/mtd/redboot.c
... ... @@ -104,8 +104,8 @@
104 104 printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
105 105 master->name, offset);
106 106  
107   - ret = master->read(master, offset,
108   - master->erasesize, &retlen, (void *)buf);
  107 + ret = mtd_read(master, offset, master->erasesize, &retlen,
  108 + (void *)buf);
109 109  
110 110 if (ret)
111 111 goto out;
drivers/mtd/rfd_ftl.c
... ... @@ -200,9 +200,9 @@
200 200 part->sector_map[i] = -1;
201 201  
202 202 for (i=0, blocks_found=0; i<part->total_blocks; i++) {
203   - rc = part->mbd.mtd->read(part->mbd.mtd,
204   - i * part->block_size, part->header_size,
205   - &retlen, (u_char*)part->header_cache);
  203 + rc = mtd_read(part->mbd.mtd, i * part->block_size,
  204 + part->header_size, &retlen,
  205 + (u_char *)part->header_cache);
206 206  
207 207 if (!rc && retlen != part->header_size)
208 208 rc = -EIO;
... ... @@ -250,8 +250,8 @@
250 250  
251 251 addr = part->sector_map[sector];
252 252 if (addr != -1) {
253   - rc = part->mbd.mtd->read(part->mbd.mtd, addr, SECTOR_SIZE,
254   - &retlen, (u_char*)buf);
  253 + rc = mtd_read(part->mbd.mtd, addr, SECTOR_SIZE, &retlen,
  254 + (u_char *)buf);
255 255 if (!rc && retlen != SECTOR_SIZE)
256 256 rc = -EIO;
257 257  
... ... @@ -372,9 +372,8 @@
372 372 if (!map)
373 373 goto err2;
374 374  
375   - rc = part->mbd.mtd->read(part->mbd.mtd,
376   - part->blocks[block_no].offset, part->header_size,
377   - &retlen, (u_char*)map);
  375 + rc = mtd_read(part->mbd.mtd, part->blocks[block_no].offset,
  376 + part->header_size, &retlen, (u_char *)map);
378 377  
379 378 if (!rc && retlen != part->header_size)
380 379 rc = -EIO;
... ... @@ -413,8 +412,8 @@
413 412 }
414 413 continue;
415 414 }
416   - rc = part->mbd.mtd->read(part->mbd.mtd, addr,
417   - SECTOR_SIZE, &retlen, sector_data);
  415 + rc = mtd_read(part->mbd.mtd, addr, SECTOR_SIZE, &retlen,
  416 + sector_data);
418 417  
419 418 if (!rc && retlen != SECTOR_SIZE)
420 419 rc = -EIO;
... ... @@ -563,8 +562,9 @@
563 562 }
564 563 }
565 564  
566   - rc = part->mbd.mtd->read(part->mbd.mtd, part->blocks[block].offset,
567   - part->header_size, &retlen, (u_char*)part->header_cache);
  565 + rc = mtd_read(part->mbd.mtd, part->blocks[block].offset,
  566 + part->header_size, &retlen,
  567 + (u_char *)part->header_cache);
568 568  
569 569 if (!rc && retlen != part->header_size)
570 570 rc = -EIO;
... ... @@ -123,8 +123,8 @@
123 123 */
124 124 for (k = 0, offset = 0; k < 4; k++, offset += mtd->erasesize) {
125 125 if (!mtd->block_isbad(mtd, offset)) {
126   - ret = mtd->read(mtd, offset, SECTOR_SIZE, &retlen,
127   - sect_buf);
  126 + ret = mtd_read(mtd, offset, SECTOR_SIZE, &retlen,
  127 + sect_buf);
128 128  
129 129 /* CIS pattern match on the sector buffer */
130 130 if (ret < 0 || retlen != SECTOR_SIZE) {
... ... @@ -156,7 +156,7 @@
156 156 size_t retlen;
157 157 loff_t offset = (loff_t)sect_no << SECTOR_SHIFT;
158 158  
159   - ret = mtd->read(mtd, offset, SECTOR_SIZE, &retlen, sect_buf);
  159 + ret = mtd_read(mtd, offset, SECTOR_SIZE, &retlen, sect_buf);
160 160 if (ret < 0 || retlen != SECTOR_SIZE)
161 161 return -1;
162 162  
drivers/mtd/tests/mtd_pagetest.c
... ... @@ -127,7 +127,7 @@
127 127 set_random_data(writebuf, mtd->erasesize);
128 128 for (j = 0; j < pgcnt - 1; ++j, addr += pgsize) {
129 129 /* Do a read to set the internal dataRAMs to different data */
130   - err = mtd->read(mtd, addr0, bufsize, &read, twopages);
  130 + err = mtd_read(mtd, addr0, bufsize, &read, twopages);
131 131 if (mtd_is_bitflip(err))
132 132 err = 0;
133 133 if (err || read != bufsize) {
... ... @@ -135,7 +135,7 @@
135 135 (long long)addr0);
136 136 return err;
137 137 }
138   - err = mtd->read(mtd, addrn - bufsize, bufsize, &read, twopages);
  138 + err = mtd_read(mtd, addrn - bufsize, bufsize, &read, twopages);
139 139 if (mtd_is_bitflip(err))
140 140 err = 0;
141 141 if (err || read != bufsize) {
... ... @@ -145,7 +145,7 @@
145 145 }
146 146 memset(twopages, 0, bufsize);
147 147 read = 0;
148   - err = mtd->read(mtd, addr, bufsize, &read, twopages);
  148 + err = mtd_read(mtd, addr, bufsize, &read, twopages);
149 149 if (mtd_is_bitflip(err))
150 150 err = 0;
151 151 if (err || read != bufsize) {
... ... @@ -163,7 +163,7 @@
163 163 if (addr <= addrn - pgsize - pgsize && !bbt[ebnum + 1]) {
164 164 unsigned long oldnext = next;
165 165 /* Do a read to set the internal dataRAMs to different data */
166   - err = mtd->read(mtd, addr0, bufsize, &read, twopages);
  166 + err = mtd_read(mtd, addr0, bufsize, &read, twopages);
167 167 if (mtd_is_bitflip(err))
168 168 err = 0;
169 169 if (err || read != bufsize) {
... ... @@ -171,7 +171,7 @@
171 171 (long long)addr0);
172 172 return err;
173 173 }
174   - err = mtd->read(mtd, addrn - bufsize, bufsize, &read, twopages);
  174 + err = mtd_read(mtd, addrn - bufsize, bufsize, &read, twopages);
175 175 if (mtd_is_bitflip(err))
176 176 err = 0;
177 177 if (err || read != bufsize) {
... ... @@ -181,7 +181,7 @@
181 181 }
182 182 memset(twopages, 0, bufsize);
183 183 read = 0;
184   - err = mtd->read(mtd, addr, bufsize, &read, twopages);
  184 + err = mtd_read(mtd, addr, bufsize, &read, twopages);
185 185 if (mtd_is_bitflip(err))
186 186 err = 0;
187 187 if (err || read != bufsize) {
... ... @@ -230,7 +230,7 @@
230 230 /* Read 2nd-to-last page to pp1 */
231 231 read = 0;
232 232 addr = addrn - pgsize - pgsize;
233   - err = mtd->read(mtd, addr, pgsize, &read, pp1);
  233 + err = mtd_read(mtd, addr, pgsize, &read, pp1);
234 234 if (mtd_is_bitflip(err))
235 235 err = 0;
236 236 if (err || read != pgsize) {
... ... @@ -243,7 +243,7 @@
243 243 /* Read 3rd-to-last page to pp1 */
244 244 read = 0;
245 245 addr = addrn - pgsize - pgsize - pgsize;
246   - err = mtd->read(mtd, addr, pgsize, &read, pp1);
  246 + err = mtd_read(mtd, addr, pgsize, &read, pp1);
247 247 if (mtd_is_bitflip(err))
248 248 err = 0;
249 249 if (err || read != pgsize) {
... ... @@ -257,7 +257,7 @@
257 257 read = 0;
258 258 addr = addr0;
259 259 printk(PRINT_PREF "reading page at %#llx\n", (long long)addr);
260   - err = mtd->read(mtd, addr, pgsize, &read, pp2);
  260 + err = mtd_read(mtd, addr, pgsize, &read, pp2);
261 261 if (mtd_is_bitflip(err))
262 262 err = 0;
263 263 if (err || read != pgsize) {
... ... @@ -271,7 +271,7 @@
271 271 read = 0;
272 272 addr = addrn - pgsize;
273 273 printk(PRINT_PREF "reading page at %#llx\n", (long long)addr);
274   - err = mtd->read(mtd, addr, pgsize, &read, pp3);
  274 + err = mtd_read(mtd, addr, pgsize, &read, pp3);
275 275 if (mtd_is_bitflip(err))
276 276 err = 0;
277 277 if (err || read != pgsize) {
... ... @@ -285,7 +285,7 @@
285 285 read = 0;
286 286 addr = addr0;
287 287 printk(PRINT_PREF "reading page at %#llx\n", (long long)addr);
288   - err = mtd->read(mtd, addr, pgsize, &read, pp4);
  288 + err = mtd_read(mtd, addr, pgsize, &read, pp4);
289 289 if (mtd_is_bitflip(err))
290 290 err = 0;
291 291 if (err || read != pgsize) {
... ... @@ -344,7 +344,7 @@
344 344  
345 345 printk(PRINT_PREF "reading 1st page of block %d\n", ebnum);
346 346 memset(readbuf, 0, pgsize);
347   - err = mtd->read(mtd, addr0, pgsize, &read, readbuf);
  347 + err = mtd_read(mtd, addr0, pgsize, &read, readbuf);
348 348 if (mtd_is_bitflip(err))
349 349 err = 0;
350 350 if (err || read != pgsize) {
... ... @@ -382,7 +382,7 @@
382 382  
383 383 printk(PRINT_PREF "reading 1st page of block %d\n", ebnum);
384 384 memset(readbuf, 0, pgsize);
385   - err = mtd->read(mtd, addr0, pgsize, &read, readbuf);
  385 + err = mtd_read(mtd, addr0, pgsize, &read, readbuf);
386 386 if (mtd_is_bitflip(err))
387 387 err = 0;
388 388 if (err || read != pgsize) {
... ... @@ -438,7 +438,7 @@
438 438 return err;
439 439  
440 440 printk(PRINT_PREF "reading 1st page of block %d\n", ebnum);
441   - err = mtd->read(mtd, addr0, pgsize, &read, twopages);
  441 + err = mtd_read(mtd, addr0, pgsize, &read, twopages);
442 442 if (mtd_is_bitflip(err))
443 443 err = 0;
444 444 if (err || read != pgsize) {
drivers/mtd/tests/mtd_readtest.c
... ... @@ -52,7 +52,7 @@
52 52  
53 53 for (i = 0; i < pgcnt; i++) {
54 54 memset(buf, 0 , pgcnt);
55   - ret = mtd->read(mtd, addr, pgsize, &read, buf);
  55 + ret = mtd_read(mtd, addr, pgsize, &read, buf);
56 56 if (ret == -EUCLEAN)
57 57 ret = 0;
58 58 if (ret || read != pgsize) {
drivers/mtd/tests/mtd_speedtest.c
... ... @@ -214,7 +214,7 @@
214 214 int err = 0;
215 215 loff_t addr = ebnum * mtd->erasesize;
216 216  
217   - err = mtd->read(mtd, addr, mtd->erasesize, &read, iobuf);
  217 + err = mtd_read(mtd, addr, mtd->erasesize, &read, iobuf);
218 218 /* Ignore corrected ECC errors */
219 219 if (mtd_is_bitflip(err))
220 220 err = 0;
... ... @@ -235,7 +235,7 @@
235 235 void *buf = iobuf;
236 236  
237 237 for (i = 0; i < pgcnt; i++) {
238   - err = mtd->read(mtd, addr, pgsize, &read, buf);
  238 + err = mtd_read(mtd, addr, pgsize, &read, buf);
239 239 /* Ignore corrected ECC errors */
240 240 if (mtd_is_bitflip(err))
241 241 err = 0;
... ... @@ -261,7 +261,7 @@
261 261 void *buf = iobuf;
262 262  
263 263 for (i = 0; i < n; i++) {
264   - err = mtd->read(mtd, addr, sz, &read, buf);
  264 + err = mtd_read(mtd, addr, sz, &read, buf);
265 265 /* Ignore corrected ECC errors */
266 266 if (mtd_is_bitflip(err))
267 267 err = 0;
... ... @@ -276,7 +276,7 @@
276 276 buf += sz;
277 277 }
278 278 if (pgcnt % 2) {
279   - err = mtd->read(mtd, addr, pgsize, &read, buf);
  279 + err = mtd_read(mtd, addr, pgsize, &read, buf);
280 280 /* Ignore corrected ECC errors */
281 281 if (mtd_is_bitflip(err))
282 282 err = 0;
drivers/mtd/tests/mtd_stresstest.c
... ... @@ -153,7 +153,7 @@
153 153 len = mtd->erasesize - offs;
154 154 }
155 155 addr = eb * mtd->erasesize + offs;
156   - err = mtd->read(mtd, addr, len, &read, readbuf);
  156 + err = mtd_read(mtd, addr, len, &read, readbuf);
157 157 if (mtd_is_bitflip(err))
158 158 err = 0;
159 159 if (unlikely(err || read != len)) {
drivers/mtd/tests/mtd_subpagetest.c
... ... @@ -196,7 +196,7 @@
196 196 set_random_data(writebuf, subpgsize);
197 197 clear_data(readbuf, subpgsize);
198 198 read = 0;
199   - err = mtd->read(mtd, addr, subpgsize, &read, readbuf);
  199 + err = mtd_read(mtd, addr, subpgsize, &read, readbuf);
200 200 if (unlikely(err || read != subpgsize)) {
201 201 if (mtd_is_bitflip(err) && read == subpgsize) {
202 202 printk(PRINT_PREF "ECC correction at %#llx\n",
... ... @@ -224,7 +224,7 @@
224 224 set_random_data(writebuf, subpgsize);
225 225 clear_data(readbuf, subpgsize);
226 226 read = 0;
227   - err = mtd->read(mtd, addr, subpgsize, &read, readbuf);
  227 + err = mtd_read(mtd, addr, subpgsize, &read, readbuf);
228 228 if (unlikely(err || read != subpgsize)) {
229 229 if (mtd_is_bitflip(err) && read == subpgsize) {
230 230 printk(PRINT_PREF "ECC correction at %#llx\n",
... ... @@ -262,7 +262,7 @@
262 262 set_random_data(writebuf, subpgsize * k);
263 263 clear_data(readbuf, subpgsize * k);
264 264 read = 0;
265   - err = mtd->read(mtd, addr, subpgsize * k, &read, readbuf);
  265 + err = mtd_read(mtd, addr, subpgsize * k, &read, readbuf);
266 266 if (unlikely(err || read != subpgsize * k)) {
267 267 if (mtd_is_bitflip(err) && read == subpgsize * k) {
268 268 printk(PRINT_PREF "ECC correction at %#llx\n",
... ... @@ -296,7 +296,7 @@
296 296 for (j = 0; j < mtd->erasesize / subpgsize; ++j) {
297 297 clear_data(readbuf, subpgsize);
298 298 read = 0;
299   - err = mtd->read(mtd, addr, subpgsize, &read, readbuf);
  299 + err = mtd_read(mtd, addr, subpgsize, &read, readbuf);
300 300 if (unlikely(err || read != subpgsize)) {
301 301 if (mtd_is_bitflip(err) && read == subpgsize) {
302 302 printk(PRINT_PREF "ECC correction at %#llx\n",
drivers/mtd/tests/mtd_torturetest.c
... ... @@ -137,7 +137,7 @@
137 137 }
138 138  
139 139 retry:
140   - err = mtd->read(mtd, addr, len, &read, check_buf);
  140 + err = mtd_read(mtd, addr, len, &read, check_buf);
141 141 if (mtd_is_bitflip(err))
142 142 printk(PRINT_PREF "single bit flip occurred at EB %d "
143 143 "MTD reported that it was fixed.\n", ebnum);
drivers/mtd/ubi/debug.c
... ... @@ -216,7 +216,7 @@
216 216 buf = vmalloc(len);
217 217 if (!buf)
218 218 return;
219   - err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);
  219 + err = mtd_read(ubi->mtd, addr, len, &read, buf);
220 220 if (err && err != -EUCLEAN) {
221 221 ubi_err("error %d while reading %d bytes from PEB %d:%d, "
222 222 "read %zd bytes", err, len, pnum, offset, read);
drivers/mtd/ubi/io.c
... ... @@ -170,7 +170,7 @@
170 170  
171 171 addr = (loff_t)pnum * ubi->peb_size + offset;
172 172 retry:
173   - err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);
  173 + err = mtd_read(ubi->mtd, addr, len, &read, buf);
174 174 if (err) {
175 175 const char *errstr = mtd_is_eccerr(err) ? " (ECC error)" : "";
176 176  
... ... @@ -1357,7 +1357,7 @@
1357 1357 return 0;
1358 1358 }
1359 1359  
1360   - err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf1);
  1360 + err = mtd_read(ubi->mtd, addr, len, &read, buf1);
1361 1361 if (err && !mtd_is_bitflip(err))
1362 1362 goto out_free;
1363 1363  
... ... @@ -1421,7 +1421,7 @@
1421 1421 return 0;
1422 1422 }
1423 1423  
1424   - err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);
  1424 + err = mtd_read(ubi->mtd, addr, len, &read, buf);
1425 1425 if (err && !mtd_is_bitflip(err)) {
1426 1426 ubi_err("error %d while reading %d bytes from PEB %d:%d, "
1427 1427 "read %zd bytes", err, len, pnum, offset, read);
drivers/staging/spectra/lld_mtd.c
... ... @@ -283,9 +283,11 @@
283 283  
284 284  
285 285 while (PageCount) {
286   - ret = spectra_mtd->read(spectra_mtd,
287   - (Block * spectra_mtd->erasesize) + (Page * spectra_mtd->writesize),
288   - DeviceInfo.wPageDataSize, &retlen, read_data);
  286 + ret = mtd_read(spectra_mtd,
  287 + (Block * spectra_mtd->erasesize) + (Page * spectra_mtd->writesize),
  288 + DeviceInfo.wPageDataSize,
  289 + &retlen,
  290 + read_data);
289 291 if (ret) {
290 292 printk(KERN_ERR "%s failed %d\n", __func__, ret);
291 293 return FAIL;
... ... @@ -381,7 +381,7 @@
381 381  
382 382 *bad_offset = ofs;
383 383  
384   - ret = c->mtd->read(c->mtd, ofs, readlen, &retlen, ebuf);
  384 + ret = mtd_read(c->mtd, ofs, readlen, &retlen, ebuf);
385 385 if (ret) {
386 386 printk(KERN_WARNING "Read of newly-erased block at 0x%08x failed: %d. Putting on bad_list\n", ofs, ret);
387 387 ret = -EIO;
... ... @@ -228,7 +228,7 @@
228 228 size_t retlen;
229 229 char *eccstr;
230 230  
231   - ret = c->mtd->read(c->mtd, ofs, c->wbuf_pagesize, &retlen, c->wbuf_verify);
  231 + ret = mtd_read(c->mtd, ofs, c->wbuf_pagesize, &retlen, c->wbuf_verify);
232 232 if (ret && ret != -EUCLEAN && ret != -EBADMSG) {
233 233 printk(KERN_WARNING "jffs2_verify_write(): Read back of page at %08x failed: %d\n", c->wbuf_ofs, ret);
234 234 return ret;
... ... @@ -337,7 +337,8 @@
337 337 }
338 338  
339 339 /* Do the read... */
340   - ret = c->mtd->read(c->mtd, start, c->wbuf_ofs - start, &retlen, buf);
  340 + ret = mtd_read(c->mtd, start, c->wbuf_ofs - start, &retlen,
  341 + buf);
341 342  
342 343 /* ECC recovered ? */
343 344 if ((ret == -EUCLEAN || ret == -EBADMSG) &&
344 345  
... ... @@ -948,11 +949,11 @@
948 949 int ret;
949 950  
950 951 if (!jffs2_is_writebuffered(c))
951   - return c->mtd->read(c->mtd, ofs, len, retlen, buf);
  952 + return mtd_read(c->mtd, ofs, len, retlen, buf);
952 953  
953 954 /* Read flash */
954 955 down_read(&c->wbuf_sem);
955   - ret = c->mtd->read(c->mtd, ofs, len, retlen, buf);
  956 + ret = mtd_read(c->mtd, ofs, len, retlen, buf);
956 957  
957 958 if ( (ret == -EBADMSG || ret == -EUCLEAN) && (*retlen == len) ) {
958 959 if (ret == -EBADMSG)
... ... @@ -20,7 +20,7 @@
20 20 size_t retlen;
21 21 int ret;
22 22  
23   - ret = mtd->read(mtd, ofs, len, &retlen, buf);
  23 + ret = mtd_read(mtd, ofs, len, &retlen, buf);
24 24 BUG_ON(ret == -EINVAL);
25 25 if (ret)
26 26 return ret;
include/linux/mtd/mtd.h
... ... @@ -182,6 +182,8 @@
182 182 unsigned long len,
183 183 unsigned long offset,
184 184 unsigned long flags);
  185 + int (*read) (struct mtd_info *mtd, loff_t from, size_t len,
  186 + size_t *retlen, u_char *buf);
185 187  
186 188 /* Backing device capabilities for this device
187 189 * - provides mmap capabilities
... ... @@ -189,7 +191,6 @@
189 191 struct backing_dev_info *backing_dev_info;
190 192  
191 193  
192   - int (*read) (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf);
193 194 int (*write) (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u_char *buf);
194 195  
195 196 /* In blackbox flight recorder like scenarios we want to make successful
... ... @@ -299,6 +300,12 @@
299 300 unsigned long flags)
300 301 {
301 302 return mtd->get_unmapped_area(mtd, len, offset, flags);
  303 +}
  304 +
  305 +static inline int mtd_read(struct mtd_info *mtd, loff_t from, size_t len,
  306 + size_t *retlen, u_char *buf)
  307 +{
  308 + return mtd->read(mtd, from, len, retlen, buf);
302 309 }
303 310  
304 311 static inline struct mtd_info *dev_to_mtd(struct device *dev)