Lines Matching refs:concat
19 #include <linux/mtd/concat.h>
57 struct mtd_concat *concat = CONCAT(mtd);
61 for (i = 0; i < concat->num_subdev; i++) {
62 struct mtd_info *subdev = concat->subdev[i];
109 struct mtd_concat *concat = CONCAT(mtd);
112 for (i = 0; i < concat->num_subdev; i++) {
113 struct mtd_info *subdev = concat->subdev[i];
150 struct mtd_concat *concat = CONCAT(mtd);
154 for (i = 0; i < concat->num_subdev; i++) {
155 struct mtd_info *subdev = concat->subdev[i];
188 struct mtd_concat *concat = CONCAT(mtd);
212 for (i = 0; i < concat->num_subdev; i++) {
213 struct mtd_info *subdev = concat->subdev[i];
262 struct mtd_concat *concat = CONCAT(mtd);
268 for (i = 0; i < concat->num_subdev; i++) {
269 struct mtd_info *subdev = concat->subdev[i];
319 struct mtd_concat *concat = CONCAT(mtd);
328 for (i = 0; i < concat->num_subdev; i++) {
329 struct mtd_info *subdev = concat->subdev[i];
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 &&
431 for (i = 0; i < concat->num_subdev; i++) {
432 subdev = concat->subdev[i];
442 BUG_ON(i >= concat->num_subdev);
448 subdev = concat->subdev[i]; /* get current subdevice */
484 struct mtd_concat *concat = CONCAT(mtd);
487 for (i = 0; i < concat->num_subdev; i++) {
488 struct mtd_info *subdev = concat->subdev[i];
531 struct mtd_concat *concat = CONCAT(mtd);
534 for (i = 0; i < concat->num_subdev; i++) {
535 struct mtd_info *subdev = concat->subdev[i];
553 struct mtd_concat *concat = CONCAT(mtd);
556 for (i = 0; i < concat->num_subdev; i++) {
557 struct mtd_info *subdev = concat->subdev[i];
564 struct mtd_concat *concat = CONCAT(mtd);
567 for (i = 0; i < concat->num_subdev; i++) {
568 struct mtd_info *subdev = concat->subdev[i];
577 struct mtd_concat *concat = CONCAT(mtd);
580 for (i = 0; i < concat->num_subdev; i++) {
581 struct mtd_info *subdev = concat->subdev[i];
588 struct mtd_concat *concat = CONCAT(mtd);
591 if (!mtd_can_have_bb(concat->subdev[0]))
594 for (i = 0; i < concat->num_subdev; i++) {
595 struct mtd_info *subdev = concat->subdev[i];
611 struct mtd_concat *concat = CONCAT(mtd);
614 for (i = 0; i < concat->num_subdev; i++) {
615 struct mtd_info *subdev = concat->subdev[i];
643 struct mtd_concat *concat;
656 concat = kzalloc(size, GFP_KERNEL);
657 if (!concat) {
663 concat->subdev = (struct mtd_info **) (concat + 1);
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;
704 concat->subdev[0] = subdev[0];
707 if (concat->mtd.type != subdev[i]->type) {
708 kfree(concat);
713 if (concat->mtd.flags != subdev[i]->flags) {
718 if ((concat->mtd.flags ^ subdev[i]->
720 kfree(concat);
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) {
747 kfree(concat);
752 concat->subdev[i] = subdev[i];
756 mtd_set_ooblayout(&concat->mtd, subdev[0]->ooblayout);
758 concat->num_subdev = num_devs;
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 =
830 kfree(concat);
897 return &concat->mtd;
903 struct mtd_concat *concat = CONCAT(mtd);
904 if (concat->mtd.numeraseregions)
905 kfree(concat->mtd.eraseregions);
906 kfree(concat);