Commit a2cc5ba075f9bc837d0b4d4ec7328dcefc11859d

Authored by Artem Bityutskiy
Committed by David Woodhouse
1 parent fd2819bbc9

mtd: introduce mtd_write_oob interface

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

Showing 13 changed files with 31 additions and 27 deletions Side-by-side Diff

drivers/mtd/inftlcore.c
... ... @@ -178,7 +178,7 @@
178 178 ops.oobbuf = buf;
179 179 ops.datbuf = NULL;
180 180  
181   - res = mtd->write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
  181 + res = mtd_write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
182 182 *retlen = ops.oobretlen;
183 183 return res;
184 184 }
... ... @@ -199,7 +199,7 @@
199 199 ops.datbuf = buf;
200 200 ops.len = len;
201 201  
202   - res = mtd->write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
  202 + res = mtd_write_oob(mtd, offs & ~(mtd->writesize - 1), &ops);
203 203 *retlen = ops.retlen;
204 204 return res;
205 205 }
drivers/mtd/mtdchar.c
... ... @@ -325,7 +325,7 @@
325 325 ops.ooboffs = 0;
326 326 ops.len = len;
327 327  
328   - ret = mtd->write_oob(mtd, *ppos, &ops);
  328 + ret = mtd_write_oob(mtd, *ppos, &ops);
329 329 retlen = ops.retlen;
330 330 break;
331 331 }
... ... @@ -426,7 +426,7 @@
426 426 return PTR_ERR(ops.oobbuf);
427 427  
428 428 start &= ~((uint64_t)mtd->writesize - 1);
429   - ret = mtd->write_oob(mtd, start, &ops);
  429 + ret = mtd_write_oob(mtd, start, &ops);
430 430  
431 431 if (ops.oobretlen > 0xFFFFFFFFU)
432 432 ret = -EOVERFLOW;
... ... @@ -609,7 +609,7 @@
609 609 ops.oobbuf = NULL;
610 610 }
611 611  
612   - ret = mtd->write_oob(mtd, (loff_t)req.start, &ops);
  612 + ret = mtd_write_oob(mtd, (loff_t)req.start, &ops);
613 613  
614 614 kfree(ops.datbuf);
615 615 kfree(ops.oobbuf);
drivers/mtd/mtdconcat.c
... ... @@ -333,7 +333,7 @@
333 333 if (to + devops.len > subdev->size)
334 334 devops.len = subdev->size - to;
335 335  
336   - err = subdev->write_oob(subdev, to, &devops);
  336 + err = mtd_write_oob(subdev, to, &devops);
337 337 ops->retlen += devops.oobretlen;
338 338 if (err)
339 339 return err;
drivers/mtd/mtdpart.c
... ... @@ -217,7 +217,7 @@
217 217 return -EINVAL;
218 218 if (ops->datbuf && to + ops->len > mtd->size)
219 219 return -EINVAL;
220   - return part->master->write_oob(part->master, to + part->offset, ops);
  220 + return mtd_write_oob(part->master, to + part->offset, ops);
221 221 }
222 222  
223 223 static int part_write_user_prot_reg(struct mtd_info *mtd, loff_t from,
drivers/mtd/mtdswap.c
... ... @@ -403,7 +403,7 @@
403 403 offset = mtdswap_eb_offset(d, eb) + d->mtd->writesize;
404 404 }
405 405  
406   - ret = d->mtd->write_oob(d->mtd, offset , &ops);
  406 + ret = mtd_write_oob(d->mtd, offset, &ops);
407 407  
408 408 if (ret) {
409 409 dev_warn(d->dev, "Write OOB failed for block at %08llx "
... ... @@ -946,7 +946,7 @@
946 946 patt = mtdswap_test_patt(test + i);
947 947 memset(d->page_buf, patt, mtd->writesize);
948 948 memset(d->oob_buf, patt, mtd->ecclayout->oobavail);
949   - ret = mtd->write_oob(mtd, pos, &ops);
  949 + ret = mtd_write_oob(mtd, pos, &ops);
950 950 if (ret)
951 951 goto error;
952 952  
drivers/mtd/nand/nand_bbt.c
... ... @@ -350,7 +350,7 @@
350 350 ops.oobbuf = oob;
351 351 ops.len = len;
352 352  
353   - return mtd->write_oob(mtd, offs, &ops);
  353 + return mtd_write_oob(mtd, offs, &ops);
354 354 }
355 355  
356 356 static u32 bbt_get_ver_offs(struct mtd_info *mtd, struct nand_bbt_descr *td)
drivers/mtd/nand/sm_common.c
... ... @@ -55,7 +55,7 @@
55 55 ops.datbuf = NULL;
56 56  
57 57  
58   - ret = mtd->write_oob(mtd, ofs, &ops);
  58 + ret = mtd_write_oob(mtd, ofs, &ops);
59 59 if (ret < 0 || ops.oobretlen != SM_OOB_SIZE) {
60 60 printk(KERN_NOTICE
61 61 "sm_common: can't mark sector at %i as bad\n",
drivers/mtd/nftlcore.c
... ... @@ -174,7 +174,7 @@
174 174 ops.oobbuf = buf;
175 175 ops.datbuf = NULL;
176 176  
177   - res = mtd->write_oob(mtd, offs & ~mask, &ops);
  177 + res = mtd_write_oob(mtd, offs & ~mask, &ops);
178 178 *retlen = ops.oobretlen;
179 179 return res;
180 180 }
... ... @@ -198,7 +198,7 @@
198 198 ops.datbuf = buf;
199 199 ops.len = len;
200 200  
201   - res = mtd->write_oob(mtd, offs & ~mask, &ops);
  201 + res = mtd_write_oob(mtd, offs & ~mask, &ops);
202 202 *retlen = ops.retlen;
203 203 return res;
204 204 }
drivers/mtd/sm_ftl.c
... ... @@ -343,7 +343,7 @@
343 343 ops.ooblen = SM_OOB_SIZE;
344 344 ops.oobbuf = (void *)oob;
345 345  
346   - ret = mtd->write_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops);
  346 + ret = mtd_write_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops);
347 347  
348 348 /* Now we assume that hardware will catch write bitflip errors */
349 349 /* If you are paranoid, use CONFIG_MTD_NAND_VERIFY_WRITE */
drivers/mtd/tests/mtd_oobtest.c
... ... @@ -139,7 +139,7 @@
139 139 ops.ooboffs = use_offset;
140 140 ops.datbuf = NULL;
141 141 ops.oobbuf = writebuf;
142   - err = mtd->write_oob(mtd, addr, &ops);
  142 + err = mtd_write_oob(mtd, addr, &ops);
143 143 if (err || ops.oobretlen != use_len) {
144 144 printk(PRINT_PREF "error: writeoob failed at %#llx\n",
145 145 (long long)addr);
... ... @@ -524,7 +524,7 @@
524 524 ops.oobbuf = writebuf;
525 525 printk(PRINT_PREF "attempting to start write past end of OOB\n");
526 526 printk(PRINT_PREF "an error is expected...\n");
527   - err = mtd->write_oob(mtd, addr0, &ops);
  527 + err = mtd_write_oob(mtd, addr0, &ops);
528 528 if (err) {
529 529 printk(PRINT_PREF "error occurred as expected\n");
530 530 err = 0;
... ... @@ -568,7 +568,7 @@
568 568 ops.oobbuf = writebuf;
569 569 printk(PRINT_PREF "attempting to write past end of device\n");
570 570 printk(PRINT_PREF "an error is expected...\n");
571   - err = mtd->write_oob(mtd, mtd->size - mtd->writesize, &ops);
  571 + err = mtd_write_oob(mtd, mtd->size - mtd->writesize, &ops);
572 572 if (err) {
573 573 printk(PRINT_PREF "error occurred as expected\n");
574 574 err = 0;
... ... @@ -612,7 +612,7 @@
612 612 ops.oobbuf = writebuf;
613 613 printk(PRINT_PREF "attempting to write past end of device\n");
614 614 printk(PRINT_PREF "an error is expected...\n");
615   - err = mtd->write_oob(mtd, mtd->size - mtd->writesize, &ops);
  615 + err = mtd_write_oob(mtd, mtd->size - mtd->writesize, &ops);
616 616 if (err) {
617 617 printk(PRINT_PREF "error occurred as expected\n");
618 618 err = 0;
... ... @@ -670,7 +670,7 @@
670 670 ops.ooboffs = 0;
671 671 ops.datbuf = NULL;
672 672 ops.oobbuf = writebuf;
673   - err = mtd->write_oob(mtd, addr, &ops);
  673 + err = mtd_write_oob(mtd, addr, &ops);
674 674 if (err)
675 675 goto out;
676 676 if (i % 256 == 0)
drivers/staging/spectra/lld_mtd.c
... ... @@ -411,9 +411,9 @@
411 411 ops.ooblen = BTSIG_BYTES;
412 412 ops.ooboffs = 0;
413 413  
414   - ret = spectra_mtd->write_oob(spectra_mtd,
415   - (Block * spectra_mtd->erasesize) + (Page * spectra_mtd->writesize),
416   - &ops);
  414 + ret = mtd_write_oob(spectra_mtd,
  415 + (Block * spectra_mtd->erasesize) + (Page * spectra_mtd->writesize),
  416 + &ops);
417 417 if (ret) {
418 418 printk(KERN_ERR "%s failed %d\n", __func__, ret);
419 419 return FAIL;
... ... @@ -1101,7 +1101,7 @@
1101 1101 ops.len = ops.ooboffs = ops.retlen = ops.oobretlen = 0;
1102 1102 ops.datbuf = NULL;
1103 1103  
1104   - ret = c->mtd->write_oob(c->mtd, jeb->offset, &ops);
  1104 + ret = mtd_write_oob(c->mtd, jeb->offset, &ops);
1105 1105 if (ret || ops.oobretlen != ops.ooblen) {
1106 1106 printk(KERN_ERR "cannot write OOB for EB at %08x, requested %zd"
1107 1107 " bytes, read %zd bytes, error %d\n",
include/linux/mtd/mtd.h
... ... @@ -190,16 +190,14 @@
190 190 size_t *retlen, const u_char *buf);
191 191 int (*read_oob) (struct mtd_info *mtd, loff_t from,
192 192 struct mtd_oob_ops *ops);
  193 + int (*write_oob) (struct mtd_info *mtd, loff_t to,
  194 + struct mtd_oob_ops *ops);
193 195  
194 196 /* Backing device capabilities for this device
195 197 * - provides mmap capabilities
196 198 */
197 199 struct backing_dev_info *backing_dev_info;
198 200  
199   -
200   - int (*write_oob) (struct mtd_info *mtd, loff_t to,
201   - struct mtd_oob_ops *ops);
202   -
203 201 /*
204 202 * Methods to access the protection register area, present in some
205 203 * flash devices. The user data is one time programmable but the
... ... @@ -324,6 +322,12 @@
324 322 struct mtd_oob_ops *ops)
325 323 {
326 324 return mtd->read_oob(mtd, from, ops);
  325 +}
  326 +
  327 +static inline int mtd_write_oob(struct mtd_info *mtd, loff_t to,
  328 + struct mtd_oob_ops *ops)
  329 +{
  330 + return mtd->write_oob(mtd, to, ops);
327 331 }
328 332  
329 333 static inline struct mtd_info *dev_to_mtd(struct device *dev)