Lines Matching full:slave
331 struct mtd_part *slave; in allocate_partition() local
337 slave = kzalloc(sizeof(*slave), GFP_KERNEL); in allocate_partition()
339 if (!name || !slave) { in allocate_partition()
343 kfree(slave); in allocate_partition()
348 slave->mtd.type = parent->type; in allocate_partition()
349 slave->mtd.flags = parent->flags & ~part->mask_flags; in allocate_partition()
350 slave->mtd.size = part->size; in allocate_partition()
351 slave->mtd.writesize = parent->writesize; in allocate_partition()
352 slave->mtd.writebufsize = parent->writebufsize; in allocate_partition()
353 slave->mtd.oobsize = parent->oobsize; in allocate_partition()
354 slave->mtd.oobavail = parent->oobavail; in allocate_partition()
355 slave->mtd.subpage_sft = parent->subpage_sft; in allocate_partition()
356 slave->mtd.pairing = parent->pairing; in allocate_partition()
358 slave->mtd.name = name; in allocate_partition()
359 slave->mtd.owner = parent->owner; in allocate_partition()
369 slave->mtd.dev.parent = IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) || mtd_is_partition(parent) ? in allocate_partition()
372 slave->mtd.dev.of_node = part->of_node; in allocate_partition()
375 slave->mtd._read = part_read; in allocate_partition()
377 slave->mtd._write = part_write; in allocate_partition()
380 slave->mtd._panic_write = part_panic_write; in allocate_partition()
383 slave->mtd._point = part_point; in allocate_partition()
384 slave->mtd._unpoint = part_unpoint; in allocate_partition()
388 slave->mtd._read_oob = part_read_oob; in allocate_partition()
390 slave->mtd._write_oob = part_write_oob; in allocate_partition()
392 slave->mtd._read_user_prot_reg = part_read_user_prot_reg; in allocate_partition()
394 slave->mtd._read_fact_prot_reg = part_read_fact_prot_reg; in allocate_partition()
396 slave->mtd._write_user_prot_reg = part_write_user_prot_reg; in allocate_partition()
398 slave->mtd._lock_user_prot_reg = part_lock_user_prot_reg; in allocate_partition()
400 slave->mtd._get_user_prot_info = part_get_user_prot_info; in allocate_partition()
402 slave->mtd._get_fact_prot_info = part_get_fact_prot_info; in allocate_partition()
404 slave->mtd._sync = part_sync; in allocate_partition()
407 slave->mtd._suspend = part_suspend; in allocate_partition()
408 slave->mtd._resume = part_resume; in allocate_partition()
411 slave->mtd._writev = part_writev; in allocate_partition()
413 slave->mtd._lock = part_lock; in allocate_partition()
415 slave->mtd._unlock = part_unlock; in allocate_partition()
417 slave->mtd._is_locked = part_is_locked; in allocate_partition()
419 slave->mtd._block_isreserved = part_block_isreserved; in allocate_partition()
421 slave->mtd._block_isbad = part_block_isbad; in allocate_partition()
423 slave->mtd._block_markbad = part_block_markbad; in allocate_partition()
425 slave->mtd._max_bad_blocks = part_max_bad_blocks; in allocate_partition()
428 slave->mtd._get_device = part_get_device; in allocate_partition()
430 slave->mtd._put_device = part_put_device; in allocate_partition()
432 slave->mtd._erase = part_erase; in allocate_partition()
433 slave->parent = parent; in allocate_partition()
434 slave->offset = part->offset; in allocate_partition()
436 if (slave->offset == MTDPART_OFS_APPEND) in allocate_partition()
437 slave->offset = cur_offset; in allocate_partition()
438 if (slave->offset == MTDPART_OFS_NXTBLK) { in allocate_partition()
440 slave->offset = cur_offset; in allocate_partition()
443 slave->offset += wr_alignment - remainder; in allocate_partition()
446 (unsigned long long)cur_offset, (unsigned long long)slave->offset); in allocate_partition()
449 if (slave->offset == MTDPART_OFS_RETAIN) { in allocate_partition()
450 slave->offset = cur_offset; in allocate_partition()
451 if (parent->size - slave->offset >= slave->mtd.size) { in allocate_partition()
452 slave->mtd.size = parent->size - slave->offset in allocate_partition()
453 - slave->mtd.size; in allocate_partition()
456 part->name, parent->size - slave->offset, in allocate_partition()
457 slave->mtd.size); in allocate_partition()
462 if (slave->mtd.size == MTDPART_SIZ_FULL) in allocate_partition()
463 slave->mtd.size = parent->size - slave->offset; in allocate_partition()
465 printk(KERN_NOTICE "0x%012llx-0x%012llx : \"%s\"\n", (unsigned long long)slave->offset, in allocate_partition()
466 (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name); in allocate_partition()
469 if (slave->offset >= parent->size) { in allocate_partition()
471 slave->offset = 0; in allocate_partition()
472 slave->mtd.size = 0; in allocate_partition()
475 slave->mtd.erasesize = parent->erasesize; in allocate_partition()
481 if (slave->offset + slave->mtd.size > parent->size) { in allocate_partition()
482 slave->mtd.size = parent->size - slave->offset; in allocate_partition()
484 part->name, parent->name, (unsigned long long)slave->mtd.size); in allocate_partition()
489 u64 end = slave->offset + slave->mtd.size; in allocate_partition()
494 for (i = 0; i < max && regions[i].offset <= slave->offset; i++) in allocate_partition()
502 if (slave->mtd.erasesize < regions[i].erasesize) { in allocate_partition()
503 slave->mtd.erasesize = regions[i].erasesize; in allocate_partition()
506 BUG_ON(slave->mtd.erasesize == 0); in allocate_partition()
509 slave->mtd.erasesize = parent->erasesize; in allocate_partition()
513 * Slave erasesize might differ from the master one if the master in allocate_partition()
517 if (!(slave->mtd.flags & MTD_NO_ERASE)) in allocate_partition()
518 wr_alignment = slave->mtd.erasesize; in allocate_partition()
520 tmp = slave->offset; in allocate_partition()
522 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { in allocate_partition()
526 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
531 tmp = slave->mtd.size; in allocate_partition()
533 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { in allocate_partition()
534 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
539 mtd_set_ooblayout(&slave->mtd, &part_ooblayout_ops); in allocate_partition()
540 slave->mtd.ecc_step_size = parent->ecc_step_size; in allocate_partition()
541 slave->mtd.ecc_strength = parent->ecc_strength; in allocate_partition()
542 slave->mtd.bitflip_threshold = parent->bitflip_threshold; in allocate_partition()
547 while (offs < slave->mtd.size) { in allocate_partition()
548 if (mtd_block_isreserved(parent, offs + slave->offset)) in allocate_partition()
549 slave->mtd.ecc_stats.bbtblocks++; in allocate_partition()
550 else if (mtd_block_isbad(parent, offs + slave->offset)) in allocate_partition()
551 slave->mtd.ecc_stats.badblocks++; in allocate_partition()
552 offs += slave->mtd.erasesize; in allocate_partition()
557 return slave; in allocate_partition()
667 * This function unregisters and destroy all slave MTD objects which are
672 struct mtd_part *slave, *next; in del_mtd_partitions() local
676 list_for_each_entry_safe(slave, next, &mtd_partitions, list) in del_mtd_partitions()
677 if (slave->parent == mtd) { in del_mtd_partitions()
678 ret = __mtd_del_partition(slave); in del_mtd_partitions()
689 struct mtd_part *slave, *next; in mtd_del_partition() local
693 list_for_each_entry_safe(slave, next, &mtd_partitions, list) in mtd_del_partition()
694 if ((slave->parent == mtd) && in mtd_del_partition()
695 (slave->mtd.index == partno)) { in mtd_del_partition()
696 ret = __mtd_del_partition(slave); in mtd_del_partition()
707 * and registers slave MTD objects which are bound to the master according to
718 struct mtd_part *slave; in add_mtd_partitions() local
725 slave = allocate_partition(master, parts + i, i, cur_offset); in add_mtd_partitions()
726 if (IS_ERR(slave)) { in add_mtd_partitions()
727 ret = PTR_ERR(slave); in add_mtd_partitions()
732 list_add(&slave->list, &mtd_partitions); in add_mtd_partitions()
735 ret = add_mtd_device(&slave->mtd); in add_mtd_partitions()
738 list_del(&slave->list); in add_mtd_partitions()
741 free_partition(slave); in add_mtd_partitions()
745 mtd_add_partition_attrs(slave); in add_mtd_partitions()
747 parse_mtd_partitions(&slave->mtd, parts[i].types, NULL); in add_mtd_partitions()
749 cur_offset = slave->offset + slave->mtd.size; in add_mtd_partitions()