Lines Matching refs:mtd

35 	struct mtd_info mtd;  member
45 static inline struct mtd_part *mtd_to_part(const struct mtd_info *mtd) in mtd_to_part() argument
47 return container_of(mtd, struct mtd_part, mtd); in mtd_to_part()
50 static u64 part_absolute_offset(struct mtd_info *mtd) in part_absolute_offset() argument
52 struct mtd_part *part = mtd_to_part(mtd); in part_absolute_offset()
54 if (!mtd_is_partition(mtd)) in part_absolute_offset()
65 static int part_read(struct mtd_info *mtd, loff_t from, size_t len, in part_read() argument
68 struct mtd_part *part = mtd_to_part(mtd); in part_read()
76 mtd->ecc_stats.failed += in part_read()
79 mtd->ecc_stats.corrected += in part_read()
84 static int part_point(struct mtd_info *mtd, loff_t from, size_t len, in part_point() argument
87 struct mtd_part *part = mtd_to_part(mtd); in part_point()
93 static int part_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in part_unpoint() argument
95 struct mtd_part *part = mtd_to_part(mtd); in part_unpoint()
100 static int part_read_oob(struct mtd_info *mtd, loff_t from, in part_read_oob() argument
103 struct mtd_part *part = mtd_to_part(mtd); in part_read_oob()
110 mtd->ecc_stats.failed += in part_read_oob()
113 mtd->ecc_stats.corrected += in part_read_oob()
118 static int part_read_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_read_user_prot_reg() argument
121 struct mtd_part *part = mtd_to_part(mtd); in part_read_user_prot_reg()
126 static int part_get_user_prot_info(struct mtd_info *mtd, size_t len, in part_get_user_prot_info() argument
129 struct mtd_part *part = mtd_to_part(mtd); in part_get_user_prot_info()
134 static int part_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, in part_read_fact_prot_reg() argument
137 struct mtd_part *part = mtd_to_part(mtd); in part_read_fact_prot_reg()
142 static int part_get_fact_prot_info(struct mtd_info *mtd, size_t len, in part_get_fact_prot_info() argument
145 struct mtd_part *part = mtd_to_part(mtd); in part_get_fact_prot_info()
150 static int part_write(struct mtd_info *mtd, loff_t to, size_t len, in part_write() argument
153 struct mtd_part *part = mtd_to_part(mtd); in part_write()
158 static int part_panic_write(struct mtd_info *mtd, loff_t to, size_t len, in part_panic_write() argument
161 struct mtd_part *part = mtd_to_part(mtd); in part_panic_write()
166 static int part_write_oob(struct mtd_info *mtd, loff_t to, in part_write_oob() argument
169 struct mtd_part *part = mtd_to_part(mtd); in part_write_oob()
174 static int part_write_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_write_user_prot_reg() argument
177 struct mtd_part *part = mtd_to_part(mtd); in part_write_user_prot_reg()
182 static int part_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_lock_user_prot_reg() argument
185 struct mtd_part *part = mtd_to_part(mtd); in part_lock_user_prot_reg()
189 static int part_writev(struct mtd_info *mtd, const struct kvec *vecs, in part_writev() argument
192 struct mtd_part *part = mtd_to_part(mtd); in part_writev()
197 static int part_erase(struct mtd_info *mtd, struct erase_info *instr) in part_erase() argument
199 struct mtd_part *part = mtd_to_part(mtd); in part_erase()
211 static int part_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_lock() argument
213 struct mtd_part *part = mtd_to_part(mtd); in part_lock()
217 static int part_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_unlock() argument
219 struct mtd_part *part = mtd_to_part(mtd); in part_unlock()
223 static int part_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_is_locked() argument
225 struct mtd_part *part = mtd_to_part(mtd); in part_is_locked()
229 static void part_sync(struct mtd_info *mtd) in part_sync() argument
231 struct mtd_part *part = mtd_to_part(mtd); in part_sync()
235 static int part_suspend(struct mtd_info *mtd) in part_suspend() argument
237 struct mtd_part *part = mtd_to_part(mtd); in part_suspend()
241 static void part_resume(struct mtd_info *mtd) in part_resume() argument
243 struct mtd_part *part = mtd_to_part(mtd); in part_resume()
247 static int part_block_isreserved(struct mtd_info *mtd, loff_t ofs) in part_block_isreserved() argument
249 struct mtd_part *part = mtd_to_part(mtd); in part_block_isreserved()
254 static int part_block_isbad(struct mtd_info *mtd, loff_t ofs) in part_block_isbad() argument
256 struct mtd_part *part = mtd_to_part(mtd); in part_block_isbad()
261 static int part_block_markbad(struct mtd_info *mtd, loff_t ofs) in part_block_markbad() argument
263 struct mtd_part *part = mtd_to_part(mtd); in part_block_markbad()
269 mtd->ecc_stats.badblocks++; in part_block_markbad()
273 static int part_get_device(struct mtd_info *mtd) in part_get_device() argument
275 struct mtd_part *part = mtd_to_part(mtd); in part_get_device()
279 static void part_put_device(struct mtd_info *mtd) in part_put_device() argument
281 struct mtd_part *part = mtd_to_part(mtd); in part_put_device()
285 static int part_ooblayout_ecc(struct mtd_info *mtd, int section, in part_ooblayout_ecc() argument
288 struct mtd_part *part = mtd_to_part(mtd); in part_ooblayout_ecc()
293 static int part_ooblayout_free(struct mtd_info *mtd, int section, in part_ooblayout_free() argument
296 struct mtd_part *part = mtd_to_part(mtd); in part_ooblayout_free()
306 static int part_max_bad_blocks(struct mtd_info *mtd, loff_t ofs, size_t len) in part_max_bad_blocks() argument
308 struct mtd_part *part = mtd_to_part(mtd); in part_max_bad_blocks()
316 kfree(p->mtd.name); in free_partition()
343 slave->mtd.type = parent->type; in allocate_partition()
344 slave->mtd.flags = parent->orig_flags & ~part->mask_flags; in allocate_partition()
345 slave->mtd.orig_flags = slave->mtd.flags; in allocate_partition()
346 slave->mtd.size = part->size; in allocate_partition()
347 slave->mtd.writesize = parent->writesize; in allocate_partition()
348 slave->mtd.writebufsize = parent->writebufsize; in allocate_partition()
349 slave->mtd.oobsize = parent->oobsize; in allocate_partition()
350 slave->mtd.oobavail = parent->oobavail; in allocate_partition()
351 slave->mtd.subpage_sft = parent->subpage_sft; in allocate_partition()
352 slave->mtd.pairing = parent->pairing; in allocate_partition()
354 slave->mtd.name = name; in allocate_partition()
355 slave->mtd.owner = parent->owner; in allocate_partition()
365 slave->mtd.dev.parent = IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) || mtd_is_partition(parent) ? in allocate_partition()
368 slave->mtd.dev.of_node = part->of_node; in allocate_partition()
371 slave->mtd._read = part_read; in allocate_partition()
373 slave->mtd._write = part_write; in allocate_partition()
376 slave->mtd._panic_write = part_panic_write; in allocate_partition()
379 slave->mtd._point = part_point; in allocate_partition()
380 slave->mtd._unpoint = part_unpoint; in allocate_partition()
384 slave->mtd._read_oob = part_read_oob; in allocate_partition()
386 slave->mtd._write_oob = part_write_oob; in allocate_partition()
388 slave->mtd._read_user_prot_reg = part_read_user_prot_reg; in allocate_partition()
390 slave->mtd._read_fact_prot_reg = part_read_fact_prot_reg; in allocate_partition()
392 slave->mtd._write_user_prot_reg = part_write_user_prot_reg; in allocate_partition()
394 slave->mtd._lock_user_prot_reg = part_lock_user_prot_reg; in allocate_partition()
396 slave->mtd._get_user_prot_info = part_get_user_prot_info; in allocate_partition()
398 slave->mtd._get_fact_prot_info = part_get_fact_prot_info; in allocate_partition()
400 slave->mtd._sync = part_sync; in allocate_partition()
403 slave->mtd._suspend = part_suspend; in allocate_partition()
404 slave->mtd._resume = part_resume; in allocate_partition()
407 slave->mtd._writev = part_writev; in allocate_partition()
409 slave->mtd._lock = part_lock; in allocate_partition()
411 slave->mtd._unlock = part_unlock; in allocate_partition()
413 slave->mtd._is_locked = part_is_locked; in allocate_partition()
415 slave->mtd._block_isreserved = part_block_isreserved; in allocate_partition()
417 slave->mtd._block_isbad = part_block_isbad; in allocate_partition()
419 slave->mtd._block_markbad = part_block_markbad; in allocate_partition()
421 slave->mtd._max_bad_blocks = part_max_bad_blocks; in allocate_partition()
424 slave->mtd._get_device = part_get_device; in allocate_partition()
426 slave->mtd._put_device = part_put_device; in allocate_partition()
428 slave->mtd._erase = part_erase; in allocate_partition()
447 if (parent->size - slave->offset >= slave->mtd.size) { in allocate_partition()
448 slave->mtd.size = parent->size - slave->offset in allocate_partition()
449 - slave->mtd.size; in allocate_partition()
453 slave->mtd.size); in allocate_partition()
458 if (slave->mtd.size == MTDPART_SIZ_FULL) in allocate_partition()
459 slave->mtd.size = parent->size - slave->offset; in allocate_partition()
462 (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name); in allocate_partition()
468 slave->mtd.size = 0; in allocate_partition()
471 slave->mtd.erasesize = parent->erasesize; in allocate_partition()
477 if (slave->offset + slave->mtd.size > parent->size) { in allocate_partition()
478 slave->mtd.size = parent->size - slave->offset; in allocate_partition()
480 part->name, parent->name, (unsigned long long)slave->mtd.size); in allocate_partition()
485 u64 end = slave->offset + slave->mtd.size; in allocate_partition()
498 if (slave->mtd.erasesize < regions[i].erasesize) { in allocate_partition()
499 slave->mtd.erasesize = regions[i].erasesize; in allocate_partition()
502 BUG_ON(slave->mtd.erasesize == 0); in allocate_partition()
505 slave->mtd.erasesize = parent->erasesize; in allocate_partition()
513 if (!(slave->mtd.flags & MTD_NO_ERASE)) in allocate_partition()
514 wr_alignment = slave->mtd.erasesize; in allocate_partition()
518 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { in allocate_partition()
522 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
527 tmp = part_absolute_offset(parent) + slave->mtd.size; in allocate_partition()
529 if ((slave->mtd.flags & MTD_WRITEABLE) && remainder) { in allocate_partition()
530 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
535 mtd_set_ooblayout(&slave->mtd, &part_ooblayout_ops); in allocate_partition()
536 slave->mtd.ecc_step_size = parent->ecc_step_size; in allocate_partition()
537 slave->mtd.ecc_strength = parent->ecc_strength; in allocate_partition()
538 slave->mtd.bitflip_threshold = parent->bitflip_threshold; in allocate_partition()
543 while (offs < slave->mtd.size) { in allocate_partition()
545 slave->mtd.ecc_stats.bbtblocks++; in allocate_partition()
547 slave->mtd.ecc_stats.badblocks++; in allocate_partition()
548 offs += slave->mtd.erasesize; in allocate_partition()
559 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_partition_offset_show() local
560 struct mtd_part *part = mtd_to_part(mtd); in mtd_partition_offset_show()
573 int ret = sysfs_create_files(&new->mtd.dev.kobj, mtd_partition_attrs); in mtd_add_partition_attrs()
611 ret = add_mtd_device(&new->mtd); in mtd_add_partition()
643 if (child->parent == &priv->mtd) { in __mtd_del_partition()
650 sysfs_remove_files(&priv->mtd.dev.kobj, mtd_partition_attrs); in __mtd_del_partition()
652 err = del_mtd_device(&priv->mtd); in __mtd_del_partition()
666 int del_mtd_partitions(struct mtd_info *mtd) in del_mtd_partitions() argument
673 if (slave->parent == mtd) { in del_mtd_partitions()
683 int mtd_del_partition(struct mtd_info *mtd, int partno) in mtd_del_partition() argument
690 if ((slave->parent == mtd) && in mtd_del_partition()
691 (slave->mtd.index == partno)) { in mtd_del_partition()
731 ret = add_mtd_device(&slave->mtd); in add_mtd_partitions()
743 parse_mtd_partitions(&slave->mtd, parts[i].types, NULL); in add_mtd_partitions()
745 cur_offset = slave->offset + slave->mtd.size; in add_mtd_partitions()
1026 int mtd_is_partition(const struct mtd_info *mtd) in mtd_is_partition() argument
1033 if (&part->mtd == mtd) { in mtd_is_partition()
1044 uint64_t mtd_get_device_size(const struct mtd_info *mtd) in mtd_get_device_size() argument
1046 if (!mtd_is_partition(mtd)) in mtd_get_device_size()
1047 return mtd->size; in mtd_get_device_size()
1049 return mtd_get_device_size(mtd_to_part(mtd)->parent); in mtd_get_device_size()