Lines Matching refs:mtd

18 #include <linux/mtd/mtd.h>
19 #include <linux/mtd/concat.h>
30 struct mtd_info mtd;
54 concat_read(struct mtd_info *mtd, loff_t from, size_t len,
57 struct mtd_concat *concat = CONCAT(mtd);
83 mtd->ecc_stats.failed++;
86 mtd->ecc_stats.corrected++;
106 concat_panic_write(struct mtd_info *mtd, loff_t to, size_t len,
109 struct mtd_concat *concat = CONCAT(mtd);
147 concat_write(struct mtd_info *mtd, loff_t to, size_t len,
150 struct mtd_concat *concat = CONCAT(mtd);
185 concat_writev(struct mtd_info *mtd, const struct kvec *vecs,
188 struct mtd_concat *concat = CONCAT(mtd);
200 if (mtd->writesize > 1) {
202 if (do_div(__to, mtd->writesize) || (total_len % mtd->writesize))
260 concat_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops)
262 struct mtd_concat *concat = CONCAT(mtd);
287 mtd->ecc_stats.failed++;
290 mtd->ecc_stats.corrected++;
317 concat_write_oob(struct mtd_info *mtd, loff_t to, struct mtd_oob_ops *ops)
319 struct mtd_concat *concat = CONCAT(mtd);
323 if (!(mtd->flags & MTD_WRITEABLE))
363 static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
365 struct mtd_concat *concat = CONCAT(mtd);
377 if (!concat->mtd.numeraseregions) {
379 if (instr->addr & (concat->mtd.erasesize - 1))
381 if (instr->len & (concat->mtd.erasesize - 1))
386 concat->mtd.eraseregions;
391 for (i = 0; i < concat->mtd.numeraseregions &&
406 for (; i < concat->mtd.numeraseregions &&
481 static int concat_xxlock(struct mtd_info *mtd, loff_t ofs, uint64_t len,
484 struct mtd_concat *concat = CONCAT(mtd);
519 static int concat_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
521 return concat_xxlock(mtd, ofs, len, true);
524 static int concat_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len)
526 return concat_xxlock(mtd, ofs, len, false);
529 static int concat_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len)
531 struct mtd_concat *concat = CONCAT(mtd);
551 static void concat_sync(struct mtd_info *mtd)
553 struct mtd_concat *concat = CONCAT(mtd);
562 static int concat_suspend(struct mtd_info *mtd)
564 struct mtd_concat *concat = CONCAT(mtd);
575 static void concat_resume(struct mtd_info *mtd)
577 struct mtd_concat *concat = CONCAT(mtd);
586 static int concat_block_isbad(struct mtd_info *mtd, loff_t ofs)
588 struct mtd_concat *concat = CONCAT(mtd);
609 static int concat_block_markbad(struct mtd_info *mtd, loff_t ofs)
611 struct mtd_concat *concat = CONCAT(mtd);
624 mtd->ecc_stats.badblocks++;
669 concat->mtd.type = subdev[0]->type;
670 concat->mtd.flags = subdev[0]->flags;
671 concat->mtd.size = subdev[0]->size;
672 concat->mtd.erasesize = subdev[0]->erasesize;
673 concat->mtd.writesize = subdev[0]->writesize;
678 concat->mtd.writebufsize = max_writebufsize;
680 concat->mtd.subpage_sft = subdev[0]->subpage_sft;
681 concat->mtd.oobsize = subdev[0]->oobsize;
682 concat->mtd.oobavail = subdev[0]->oobavail;
686 concat->mtd._writev = concat_writev;
688 concat->mtd._read_oob = concat_read_oob;
690 concat->mtd._write_oob = concat_write_oob;
692 concat->mtd._block_isbad = concat_block_isbad;
694 concat->mtd._block_markbad = concat_block_markbad;
696 concat->mtd._panic_write = concat_panic_write;
698 concat->mtd._read = concat_read;
700 concat->mtd._write = concat_write;
702 concat->mtd.ecc_stats.badblocks = subdev[0]->ecc_stats.badblocks;
707 if (concat->mtd.type != subdev[i]->type) {
713 if (concat->mtd.flags != subdev[i]->flags) {
718 if ((concat->mtd.flags ^ subdev[i]->
727 concat->mtd.flags |=
732 concat->mtd.size += subdev[i]->size;
733 concat->mtd.ecc_stats.badblocks +=
735 if (concat->mtd.writesize != subdev[i]->writesize ||
736 concat->mtd.subpage_sft != subdev[i]->subpage_sft ||
737 concat->mtd.oobsize != subdev[i]->oobsize ||
738 !concat->mtd._read_oob != !subdev_master->_read_oob ||
739 !concat->mtd._write_oob != !subdev_master->_write_oob) {
743 * mtd device. Check against subdev's master mtd
745 * subdev's callbacks is decided by master mtd device.
756 mtd_set_ooblayout(&concat->mtd, subdev[0]->ooblayout);
759 concat->mtd.name = name;
761 concat->mtd._erase = concat_erase;
762 concat->mtd._sync = concat_sync;
763 concat->mtd._lock = concat_lock;
764 concat->mtd._unlock = concat_unlock;
765 concat->mtd._is_locked = concat_is_locked;
766 concat->mtd._suspend = concat_suspend;
767 concat->mtd._resume = concat_resume;
811 concat->mtd.erasesize = curr_erasesize;
812 concat->mtd.numeraseregions = 0;
823 concat->mtd.erasesize = max_erasesize;
824 concat->mtd.numeraseregions = num_erase_region;
825 concat->mtd.eraseregions = erase_region_p =
897 return &concat->mtd;
901 void mtd_concat_destroy(struct mtd_info *mtd)
903 struct mtd_concat *concat = CONCAT(mtd);
904 if (concat->mtd.numeraseregions)
905 kfree(concat->mtd.eraseregions);