Lines Matching full:slave
68 struct mtd_info *slave; in mtd_partitions_used() local
70 list_for_each_entry(slave, &master->partitions, node) { in mtd_partitions_used()
71 if (slave->usecount) in mtd_partitions_used()
529 * This function unregisters and destroy all slave MTD objects which are
534 struct mtd_info *slave, *next; in do_del_mtd_partitions() local
537 list_for_each_entry_safe(slave, next, &master->partitions, node) { in do_del_mtd_partitions()
538 if (mtd_has_partitions(slave)) in do_del_mtd_partitions()
539 del_mtd_partitions(slave); in do_del_mtd_partitions()
541 debug("Deleting %s MTD partition\n", slave->name); in do_del_mtd_partitions()
542 ret = del_mtd_device(slave); in do_del_mtd_partitions()
545 slave->name, ret); in do_del_mtd_partitions()
550 list_del(&slave->node); in do_del_mtd_partitions()
551 free_partition(slave); in do_del_mtd_partitions()
574 struct mtd_info *slave; in allocate_partition() local
578 slave = kzalloc(sizeof(*slave), GFP_KERNEL); in allocate_partition()
580 if (!name || !slave) { in allocate_partition()
584 kfree(slave); in allocate_partition()
589 slave->type = master->type; in allocate_partition()
590 slave->flags = master->flags & ~part->mask_flags; in allocate_partition()
591 slave->size = part->size; in allocate_partition()
592 slave->writesize = master->writesize; in allocate_partition()
593 slave->writebufsize = master->writebufsize; in allocate_partition()
594 slave->oobsize = master->oobsize; in allocate_partition()
595 slave->oobavail = master->oobavail; in allocate_partition()
596 slave->subpage_sft = master->subpage_sft; in allocate_partition()
598 slave->name = name; in allocate_partition()
599 slave->owner = master->owner; in allocate_partition()
601 slave->backing_dev_info = master->backing_dev_info; in allocate_partition()
606 slave->dev.parent = master->dev.parent; in allocate_partition()
610 slave->_read = part_read; in allocate_partition()
612 slave->_write = part_write; in allocate_partition()
615 slave->_panic_write = part_panic_write; in allocate_partition()
619 slave->_point = part_point; in allocate_partition()
620 slave->_unpoint = part_unpoint; in allocate_partition()
625 slave->_get_unmapped_area = part_get_unmapped_area; in allocate_partition()
627 slave->_read_oob = part_read_oob; in allocate_partition()
629 slave->_write_oob = part_write_oob; in allocate_partition()
631 slave->_read_user_prot_reg = part_read_user_prot_reg; in allocate_partition()
633 slave->_read_fact_prot_reg = part_read_fact_prot_reg; in allocate_partition()
635 slave->_write_user_prot_reg = part_write_user_prot_reg; in allocate_partition()
637 slave->_lock_user_prot_reg = part_lock_user_prot_reg; in allocate_partition()
639 slave->_get_user_prot_info = part_get_user_prot_info; in allocate_partition()
641 slave->_get_fact_prot_info = part_get_fact_prot_info; in allocate_partition()
643 slave->_sync = part_sync; in allocate_partition()
647 slave->_suspend = part_suspend; in allocate_partition()
648 slave->_resume = part_resume; in allocate_partition()
651 slave->_writev = part_writev; in allocate_partition()
654 slave->_lock = part_lock; in allocate_partition()
656 slave->_unlock = part_unlock; in allocate_partition()
658 slave->_is_locked = part_is_locked; in allocate_partition()
660 slave->_block_isreserved = part_block_isreserved; in allocate_partition()
662 slave->_block_isbad = part_block_isbad; in allocate_partition()
664 slave->_block_markbad = part_block_markbad; in allocate_partition()
665 slave->_erase = part_erase; in allocate_partition()
666 slave->parent = master; in allocate_partition()
667 slave->offset = part->offset; in allocate_partition()
668 INIT_LIST_HEAD(&slave->partitions); in allocate_partition()
669 INIT_LIST_HEAD(&slave->node); in allocate_partition()
671 if (slave->offset == MTDPART_OFS_APPEND) in allocate_partition()
672 slave->offset = cur_offset; in allocate_partition()
673 if (slave->offset == MTDPART_OFS_NXTBLK) { in allocate_partition()
674 slave->offset = cur_offset; in allocate_partition()
677 slave->offset = (mtd_div_by_eb(cur_offset, master) + 1) * master->erasesize; in allocate_partition()
680 (unsigned long long)cur_offset, (unsigned long long)slave->offset); in allocate_partition()
683 if (slave->offset == MTDPART_OFS_RETAIN) { in allocate_partition()
684 slave->offset = cur_offset; in allocate_partition()
685 if (master->size - slave->offset >= slave->size) { in allocate_partition()
686 slave->size = master->size - slave->offset in allocate_partition()
687 - slave->size; in allocate_partition()
690 part->name, master->size - slave->offset, in allocate_partition()
691 slave->size); in allocate_partition()
696 if (slave->size == MTDPART_SIZ_FULL) in allocate_partition()
697 slave->size = master->size - slave->offset; in allocate_partition()
699 debug("0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset, in allocate_partition()
700 (unsigned long long)(slave->offset + slave->size), slave->name); in allocate_partition()
703 if (slave->offset >= master->size) { in allocate_partition()
705 slave->offset = 0; in allocate_partition()
706 slave->size = 0; in allocate_partition()
711 if (slave->offset + slave->size > master->size) { in allocate_partition()
712 slave->size = master->size - slave->offset; in allocate_partition()
714 part->name, master->name, slave->size); in allocate_partition()
719 u64 end = slave->offset + slave->size; in allocate_partition()
724 for (i = 0; i < max && regions[i].offset <= slave->offset; i++) in allocate_partition()
732 if (slave->erasesize < regions[i].erasesize) in allocate_partition()
733 slave->erasesize = regions[i].erasesize; in allocate_partition()
735 WARN_ON(slave->erasesize == 0); in allocate_partition()
738 slave->erasesize = master->erasesize; in allocate_partition()
741 if ((slave->flags & MTD_WRITEABLE) && in allocate_partition()
742 mtd_mod_by_eb(slave->offset, slave)) { in allocate_partition()
746 slave->flags &= ~MTD_WRITEABLE; in allocate_partition()
750 if ((slave->flags & MTD_WRITEABLE) && in allocate_partition()
751 mtd_mod_by_eb(slave->size, slave)) { in allocate_partition()
752 slave->flags &= ~MTD_WRITEABLE; in allocate_partition()
757 slave->ecclayout = master->ecclayout; in allocate_partition()
758 slave->ecc_step_size = master->ecc_step_size; in allocate_partition()
759 slave->ecc_strength = master->ecc_strength; in allocate_partition()
760 slave->bitflip_threshold = master->bitflip_threshold; in allocate_partition()
765 while (offs < slave->size) { in allocate_partition()
766 if (mtd_block_isbad(master, offs + slave->offset)) in allocate_partition()
767 slave->ecc_stats.badblocks++; in allocate_partition()
768 offs += slave->erasesize; in allocate_partition()
773 return slave; in allocate_partition()
835 struct mtd_info *slave, *next; in mtd_del_partition() local
839 list_for_each_entry_safe(slave, next, &master->partitions, node) in mtd_del_partition()
840 if (slave->index == partno) { in mtd_del_partition()
841 ret = del_mtd_device(slave); in mtd_del_partition()
845 list_del(&slave->node); in mtd_del_partition()
846 free_partition(slave); in mtd_del_partition()
858 * and registers slave MTD objects which are bound to the master according to
869 struct mtd_info *slave; in add_mtd_partitions() local
876 slave = allocate_partition(master, parts + i, i, cur_offset); in add_mtd_partitions()
877 if (IS_ERR(slave)) in add_mtd_partitions()
878 return PTR_ERR(slave); in add_mtd_partitions()
881 list_add_tail(&slave->node, &master->partitions); in add_mtd_partitions()
884 add_mtd_device(slave); in add_mtd_partitions()
886 cur_offset = slave->offset + slave->size; in add_mtd_partitions()