Lines Matching full:slave
69 struct mtd_info *slave; in mtd_partitions_used() local
71 list_for_each_entry(slave, &master->partitions, node) { in mtd_partitions_used()
72 if (slave->usecount) in mtd_partitions_used()
530 * This function unregisters and destroy all slave MTD objects which are
535 struct mtd_info *slave, *next; in do_del_mtd_partitions() local
538 list_for_each_entry_safe(slave, next, &master->partitions, node) { in do_del_mtd_partitions()
539 if (mtd_has_partitions(slave)) in do_del_mtd_partitions()
540 del_mtd_partitions(slave); in do_del_mtd_partitions()
542 debug("Deleting %s MTD partition\n", slave->name); in do_del_mtd_partitions()
543 ret = del_mtd_device(slave); in do_del_mtd_partitions()
546 slave->name, ret); in do_del_mtd_partitions()
551 list_del(&slave->node); in do_del_mtd_partitions()
552 free_partition(slave); in do_del_mtd_partitions()
575 struct mtd_info *slave; in allocate_partition() local
579 slave = kzalloc(sizeof(*slave), GFP_KERNEL); in allocate_partition()
581 if (!name || !slave) { in allocate_partition()
585 kfree(slave); in allocate_partition()
590 slave->type = master->type; in allocate_partition()
591 slave->flags = master->flags & ~part->mask_flags; in allocate_partition()
592 slave->size = part->size; in allocate_partition()
593 slave->writesize = master->writesize; in allocate_partition()
594 slave->writebufsize = master->writebufsize; in allocate_partition()
595 slave->oobsize = master->oobsize; in allocate_partition()
596 slave->oobavail = master->oobavail; in allocate_partition()
597 slave->subpage_sft = master->subpage_sft; in allocate_partition()
599 slave->name = name; in allocate_partition()
600 slave->owner = master->owner; in allocate_partition()
602 slave->backing_dev_info = master->backing_dev_info; in allocate_partition()
607 slave->dev.parent = master->dev.parent; in allocate_partition()
611 slave->_read = part_read; in allocate_partition()
613 slave->_write = part_write; in allocate_partition()
616 slave->_panic_write = part_panic_write; in allocate_partition()
620 slave->_point = part_point; in allocate_partition()
621 slave->_unpoint = part_unpoint; in allocate_partition()
626 slave->_get_unmapped_area = part_get_unmapped_area; in allocate_partition()
628 slave->_read_oob = part_read_oob; in allocate_partition()
630 slave->_write_oob = part_write_oob; in allocate_partition()
632 slave->_read_user_prot_reg = part_read_user_prot_reg; in allocate_partition()
634 slave->_read_fact_prot_reg = part_read_fact_prot_reg; in allocate_partition()
636 slave->_write_user_prot_reg = part_write_user_prot_reg; in allocate_partition()
638 slave->_lock_user_prot_reg = part_lock_user_prot_reg; in allocate_partition()
640 slave->_get_user_prot_info = part_get_user_prot_info; in allocate_partition()
642 slave->_get_fact_prot_info = part_get_fact_prot_info; in allocate_partition()
644 slave->_sync = part_sync; in allocate_partition()
648 slave->_suspend = part_suspend; in allocate_partition()
649 slave->_resume = part_resume; in allocate_partition()
652 slave->_writev = part_writev; in allocate_partition()
655 slave->_lock = part_lock; in allocate_partition()
657 slave->_unlock = part_unlock; in allocate_partition()
659 slave->_is_locked = part_is_locked; in allocate_partition()
661 slave->_block_isreserved = part_block_isreserved; in allocate_partition()
663 slave->_block_isbad = part_block_isbad; in allocate_partition()
665 slave->_block_markbad = part_block_markbad; in allocate_partition()
666 slave->_erase = part_erase; in allocate_partition()
667 slave->parent = master; in allocate_partition()
668 slave->offset = part->offset; in allocate_partition()
669 INIT_LIST_HEAD(&slave->partitions); in allocate_partition()
670 INIT_LIST_HEAD(&slave->node); in allocate_partition()
672 if (slave->offset == MTDPART_OFS_APPEND) in allocate_partition()
673 slave->offset = cur_offset; in allocate_partition()
674 if (slave->offset == MTDPART_OFS_NXTBLK) { in allocate_partition()
675 slave->offset = cur_offset; in allocate_partition()
678 slave->offset = (mtd_div_by_eb(cur_offset, master) + 1) * master->erasesize; in allocate_partition()
681 (unsigned long long)cur_offset, (unsigned long long)slave->offset); in allocate_partition()
684 if (slave->offset == MTDPART_OFS_RETAIN) { in allocate_partition()
685 slave->offset = cur_offset; in allocate_partition()
686 if (master->size - slave->offset >= slave->size) { in allocate_partition()
687 slave->size = master->size - slave->offset in allocate_partition()
688 - slave->size; in allocate_partition()
691 part->name, master->size - slave->offset, in allocate_partition()
692 slave->size); in allocate_partition()
697 if (slave->size == MTDPART_SIZ_FULL) in allocate_partition()
698 slave->size = master->size - slave->offset; in allocate_partition()
700 debug("0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset, in allocate_partition()
701 (unsigned long long)(slave->offset + slave->size), slave->name); in allocate_partition()
704 if (slave->offset >= master->size) { in allocate_partition()
706 slave->offset = 0; in allocate_partition()
707 slave->size = 0; in allocate_partition()
712 if (slave->offset + slave->size > master->size) { in allocate_partition()
713 slave->size = master->size - slave->offset; in allocate_partition()
715 part->name, master->name, slave->size); in allocate_partition()
720 u64 end = slave->offset + slave->size; in allocate_partition()
725 for (i = 0; i < max && regions[i].offset <= slave->offset; i++) in allocate_partition()
733 if (slave->erasesize < regions[i].erasesize) in allocate_partition()
734 slave->erasesize = regions[i].erasesize; in allocate_partition()
736 WARN_ON(slave->erasesize == 0); in allocate_partition()
739 slave->erasesize = master->erasesize; in allocate_partition()
742 if ((slave->flags & MTD_WRITEABLE) && in allocate_partition()
743 mtd_mod_by_eb(slave->offset, slave)) { in allocate_partition()
747 slave->flags &= ~MTD_WRITEABLE; in allocate_partition()
751 if ((slave->flags & MTD_WRITEABLE) && in allocate_partition()
752 mtd_mod_by_eb(slave->size, slave)) { in allocate_partition()
753 slave->flags &= ~MTD_WRITEABLE; in allocate_partition()
758 slave->ecclayout = master->ecclayout; in allocate_partition()
759 slave->ecc_step_size = master->ecc_step_size; in allocate_partition()
760 slave->ecc_strength = master->ecc_strength; in allocate_partition()
761 slave->bitflip_threshold = master->bitflip_threshold; in allocate_partition()
766 while (offs < slave->size) { in allocate_partition()
767 if (mtd_block_isbad(master, offs + slave->offset)) in allocate_partition()
768 slave->ecc_stats.badblocks++; in allocate_partition()
769 offs += slave->erasesize; in allocate_partition()
774 return slave; in allocate_partition()
836 struct mtd_info *slave, *next; in mtd_del_partition() local
840 list_for_each_entry_safe(slave, next, &master->partitions, node) in mtd_del_partition()
841 if (slave->index == partno) { in mtd_del_partition()
842 ret = del_mtd_device(slave); in mtd_del_partition()
846 list_del(&slave->node); in mtd_del_partition()
847 free_partition(slave); in mtd_del_partition()
859 * and registers slave MTD objects which are bound to the master according to
870 struct mtd_info *slave; in add_mtd_partitions() local
877 slave = allocate_partition(master, parts + i, i, cur_offset); in add_mtd_partitions()
878 if (IS_ERR(slave)) in add_mtd_partitions()
879 return PTR_ERR(slave); in add_mtd_partitions()
882 list_add_tail(&slave->node, &master->partitions); in add_mtd_partitions()
885 add_mtd_device(slave); in add_mtd_partitions()
887 cur_offset = slave->offset + slave->size; in add_mtd_partitions()