Lines Matching refs:mtd
43 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_cls_suspend() local
45 return mtd ? mtd_suspend(mtd) : 0; in mtd_cls_suspend()
50 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_cls_resume() local
52 if (mtd) in mtd_cls_resume()
53 mtd_resume(mtd); in mtd_cls_resume()
92 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_release() local
93 dev_t index = MTD_DEVT(mtd->index); in mtd_release()
102 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_type_show() local
105 switch (mtd->type) { in mtd_type_show()
141 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_flags_show() local
143 return snprintf(buf, PAGE_SIZE, "0x%lx\n", (unsigned long)mtd->flags); in mtd_flags_show()
150 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_size_show() local
153 (unsigned long long)mtd->size); in mtd_size_show()
160 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_erasesize_show() local
162 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->erasesize); in mtd_erasesize_show()
169 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_writesize_show() local
171 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->writesize); in mtd_writesize_show()
178 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_subpagesize_show() local
179 unsigned int subpagesize = mtd->writesize >> mtd->subpage_sft; in mtd_subpagesize_show()
188 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_oobsize_show() local
190 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->oobsize); in mtd_oobsize_show()
197 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_oobavail_show() local
199 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->oobavail); in mtd_oobavail_show()
206 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_numeraseregions_show() local
208 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->numeraseregions); in mtd_numeraseregions_show()
216 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_name_show() local
218 return snprintf(buf, PAGE_SIZE, "%s\n", mtd->name); in mtd_name_show()
225 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_strength_show() local
227 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->ecc_strength); in mtd_ecc_strength_show()
235 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bitflip_threshold_show() local
237 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->bitflip_threshold); in mtd_bitflip_threshold_show()
244 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bitflip_threshold_store() local
252 mtd->bitflip_threshold = bitflip_threshold; in mtd_bitflip_threshold_store()
262 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_step_size_show() local
264 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->ecc_step_size); in mtd_ecc_step_size_show()
272 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_stats_corrected_show() local
273 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_ecc_stats_corrected_show()
283 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_stats_errors_show() local
284 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_ecc_stats_errors_show()
293 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_badblocks_show() local
294 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_badblocks_show()
303 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bbtblocks_show() local
304 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_bbtblocks_show()
330 ATTRIBUTE_GROUPS(mtd);
340 struct mtd_info *mtd = s->private; in mtd_partid_show() local
342 seq_printf(s, "%s\n", mtd->dbg.partid); in mtd_partid_show()
361 struct mtd_info *mtd = s->private; in mtd_partname_show() local
363 seq_printf(s, "%s\n", mtd->dbg.partname); in mtd_partname_show()
382 static void mtd_debugfs_populate(struct mtd_info *mtd) in mtd_debugfs_populate() argument
384 struct device *dev = &mtd->dev; in mtd_debugfs_populate()
396 mtd->dbg.dfs_dir = root; in mtd_debugfs_populate()
398 if (mtd->dbg.partid) { in mtd_debugfs_populate()
399 dent = debugfs_create_file("partid", 0400, root, mtd, in mtd_debugfs_populate()
405 if (mtd->dbg.partname) { in mtd_debugfs_populate()
406 dent = debugfs_create_file("partname", 0400, root, mtd, in mtd_debugfs_populate()
415 unsigned mtd_mmap_capabilities(struct mtd_info *mtd) in mtd_mmap_capabilities() argument
417 switch (mtd->type) { in mtd_mmap_capabilities()
434 struct mtd_info *mtd; in mtd_reboot_notifier() local
436 mtd = container_of(n, struct mtd_info, reboot_notifier); in mtd_reboot_notifier()
437 mtd->_reboot(mtd); in mtd_reboot_notifier()
468 int mtd_wunit_to_pairing_info(struct mtd_info *mtd, int wunit, in mtd_wunit_to_pairing_info() argument
471 int npairs = mtd_wunit_per_eb(mtd) / mtd_pairing_groups(mtd); in mtd_wunit_to_pairing_info()
476 if (mtd->pairing && mtd->pairing->get_info) in mtd_wunit_to_pairing_info()
477 return mtd->pairing->get_info(mtd, wunit, info); in mtd_wunit_to_pairing_info()
510 int mtd_pairing_info_to_wunit(struct mtd_info *mtd, in mtd_pairing_info_to_wunit() argument
513 int ngroups = mtd_pairing_groups(mtd); in mtd_pairing_info_to_wunit()
514 int npairs = mtd_wunit_per_eb(mtd) / ngroups; in mtd_pairing_info_to_wunit()
520 if (mtd->pairing && mtd->pairing->get_wunit) in mtd_pairing_info_to_wunit()
521 return mtd->pairing->get_wunit(mtd, info); in mtd_pairing_info_to_wunit()
537 int mtd_pairing_groups(struct mtd_info *mtd) in mtd_pairing_groups() argument
539 if (!mtd->pairing || !mtd->pairing->ngroups) in mtd_pairing_groups()
542 return mtd->pairing->ngroups; in mtd_pairing_groups()
549 struct mtd_info *mtd = priv; in mtd_nvmem_reg_read() local
553 err = mtd_read(mtd, offset, bytes, &retlen, val); in mtd_nvmem_reg_read()
560 static int mtd_nvmem_add(struct mtd_info *mtd) in mtd_nvmem_add() argument
565 config.dev = &mtd->dev; in mtd_nvmem_add()
566 config.name = mtd->name; in mtd_nvmem_add()
569 config.size = mtd->size; in mtd_nvmem_add()
575 config.priv = mtd; in mtd_nvmem_add()
577 mtd->nvmem = nvmem_register(&config); in mtd_nvmem_add()
578 if (IS_ERR(mtd->nvmem)) { in mtd_nvmem_add()
580 if (PTR_ERR(mtd->nvmem) == -EOPNOTSUPP) { in mtd_nvmem_add()
581 mtd->nvmem = NULL; in mtd_nvmem_add()
583 dev_err(&mtd->dev, "Failed to register NVMEM device\n"); in mtd_nvmem_add()
584 return PTR_ERR(mtd->nvmem); in mtd_nvmem_add()
600 int add_mtd_device(struct mtd_info *mtd) in add_mtd_device() argument
610 if (WARN_ONCE(mtd->dev.type, "MTD already registered\n")) in add_mtd_device()
613 BUG_ON(mtd->writesize == 0); in add_mtd_device()
619 if (WARN_ON((mtd->_write && mtd->_write_oob) || in add_mtd_device()
620 (mtd->_read && mtd->_read_oob))) in add_mtd_device()
623 if (WARN_ON((!mtd->erasesize || !mtd->_erase) && in add_mtd_device()
624 !(mtd->flags & MTD_NO_ERASE))) in add_mtd_device()
629 i = idr_alloc(&mtd_idr, mtd, 0, 0, GFP_KERNEL); in add_mtd_device()
635 mtd->index = i; in add_mtd_device()
636 mtd->usecount = 0; in add_mtd_device()
639 if (mtd->bitflip_threshold == 0) in add_mtd_device()
640 mtd->bitflip_threshold = mtd->ecc_strength; in add_mtd_device()
642 if (is_power_of_2(mtd->erasesize)) in add_mtd_device()
643 mtd->erasesize_shift = ffs(mtd->erasesize) - 1; in add_mtd_device()
645 mtd->erasesize_shift = 0; in add_mtd_device()
647 if (is_power_of_2(mtd->writesize)) in add_mtd_device()
648 mtd->writesize_shift = ffs(mtd->writesize) - 1; in add_mtd_device()
650 mtd->writesize_shift = 0; in add_mtd_device()
652 mtd->erasesize_mask = (1 << mtd->erasesize_shift) - 1; in add_mtd_device()
653 mtd->writesize_mask = (1 << mtd->writesize_shift) - 1; in add_mtd_device()
656 if ((mtd->flags & MTD_WRITEABLE) && (mtd->flags & MTD_POWERUP_LOCK)) { in add_mtd_device()
657 error = mtd_unlock(mtd, 0, mtd->size); in add_mtd_device()
661 mtd->name); in add_mtd_device()
669 mtd->dev.type = &mtd_devtype; in add_mtd_device()
670 mtd->dev.class = &mtd_class; in add_mtd_device()
671 mtd->dev.devt = MTD_DEVT(i); in add_mtd_device()
672 dev_set_name(&mtd->dev, "mtd%d", i); in add_mtd_device()
673 dev_set_drvdata(&mtd->dev, mtd); in add_mtd_device()
674 of_node_get(mtd_get_of_node(mtd)); in add_mtd_device()
675 error = device_register(&mtd->dev); in add_mtd_device()
680 error = mtd_nvmem_add(mtd); in add_mtd_device()
684 mtd_debugfs_populate(mtd); in add_mtd_device()
686 device_create(&mtd_class, mtd->dev.parent, MTD_DEVT(i) + 1, NULL, in add_mtd_device()
689 pr_debug("mtd: Giving out device %d to %s\n", i, mtd->name); in add_mtd_device()
693 not->add(mtd); in add_mtd_device()
704 device_unregister(&mtd->dev); in add_mtd_device()
706 of_node_put(mtd_get_of_node(mtd)); in add_mtd_device()
723 int del_mtd_device(struct mtd_info *mtd) in del_mtd_device() argument
730 debugfs_remove_recursive(mtd->dbg.dfs_dir); in del_mtd_device()
732 if (idr_find(&mtd_idr, mtd->index) != mtd) { in del_mtd_device()
740 not->remove(mtd); in del_mtd_device()
742 if (mtd->usecount) { in del_mtd_device()
744 mtd->index, mtd->name, mtd->usecount); in del_mtd_device()
748 if (mtd->nvmem) in del_mtd_device()
749 nvmem_unregister(mtd->nvmem); in del_mtd_device()
751 device_unregister(&mtd->dev); in del_mtd_device()
753 idr_remove(&mtd_idr, mtd->index); in del_mtd_device()
754 of_node_put(mtd_get_of_node(mtd)); in del_mtd_device()
769 static void mtd_set_dev_defaults(struct mtd_info *mtd) in mtd_set_dev_defaults() argument
771 if (mtd->dev.parent) { in mtd_set_dev_defaults()
772 if (!mtd->owner && mtd->dev.parent->driver) in mtd_set_dev_defaults()
773 mtd->owner = mtd->dev.parent->driver->owner; in mtd_set_dev_defaults()
774 if (!mtd->name) in mtd_set_dev_defaults()
775 mtd->name = dev_name(mtd->dev.parent); in mtd_set_dev_defaults()
780 mtd->orig_flags = mtd->flags; in mtd_set_dev_defaults()
811 int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, in mtd_device_parse_register() argument
818 mtd_set_dev_defaults(mtd); in mtd_device_parse_register()
821 ret = add_mtd_device(mtd); in mtd_device_parse_register()
827 ret = parse_mtd_partitions(mtd, types, parser_data); in mtd_device_parse_register()
831 ret = add_mtd_partitions(mtd, parts, nr_parts); in mtd_device_parse_register()
832 else if (!device_is_registered(&mtd->dev)) in mtd_device_parse_register()
833 ret = add_mtd_device(mtd); in mtd_device_parse_register()
848 WARN_ONCE(mtd->_reboot && mtd->reboot_notifier.notifier_call, in mtd_device_parse_register()
850 if (mtd->_reboot && !mtd->reboot_notifier.notifier_call) { in mtd_device_parse_register()
851 mtd->reboot_notifier.notifier_call = mtd_reboot_notifier; in mtd_device_parse_register()
852 register_reboot_notifier(&mtd->reboot_notifier); in mtd_device_parse_register()
856 if (ret && device_is_registered(&mtd->dev)) in mtd_device_parse_register()
857 del_mtd_device(mtd); in mtd_device_parse_register()
897 struct mtd_info *mtd; in register_mtd_user() local
905 mtd_for_each_device(mtd) in register_mtd_user()
906 new->add(mtd); in register_mtd_user()
923 struct mtd_info *mtd; in unregister_mtd_user() local
929 mtd_for_each_device(mtd) in unregister_mtd_user()
930 old->remove(mtd); in unregister_mtd_user()
949 struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num) in get_mtd_device() argument
958 if (other == mtd) { in get_mtd_device()
959 ret = mtd; in get_mtd_device()
965 if (mtd && mtd != ret) in get_mtd_device()
984 int __get_mtd_device(struct mtd_info *mtd) in __get_mtd_device() argument
988 if (!try_module_get(mtd->owner)) in __get_mtd_device()
991 if (mtd->_get_device) { in __get_mtd_device()
992 err = mtd->_get_device(mtd); in __get_mtd_device()
995 module_put(mtd->owner); in __get_mtd_device()
999 mtd->usecount++; in __get_mtd_device()
1015 struct mtd_info *mtd = NULL, *other; in get_mtd_device_nm() local
1021 mtd = other; in get_mtd_device_nm()
1026 if (!mtd) in get_mtd_device_nm()
1029 err = __get_mtd_device(mtd); in get_mtd_device_nm()
1034 return mtd; in get_mtd_device_nm()
1042 void put_mtd_device(struct mtd_info *mtd) in put_mtd_device() argument
1045 __put_mtd_device(mtd); in put_mtd_device()
1051 void __put_mtd_device(struct mtd_info *mtd) in __put_mtd_device() argument
1053 --mtd->usecount; in __put_mtd_device()
1054 BUG_ON(mtd->usecount < 0); in __put_mtd_device()
1056 if (mtd->_put_device) in __put_mtd_device()
1057 mtd->_put_device(mtd); in __put_mtd_device()
1059 module_put(mtd->owner); in __put_mtd_device()
1068 int mtd_erase(struct mtd_info *mtd, struct erase_info *instr) in mtd_erase() argument
1072 if (!mtd->erasesize || !mtd->_erase) in mtd_erase()
1075 if (instr->addr >= mtd->size || instr->len > mtd->size - instr->addr) in mtd_erase()
1077 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_erase()
1084 return mtd->_erase(mtd, instr); in mtd_erase()
1091 int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, in mtd_point() argument
1098 if (!mtd->_point) in mtd_point()
1100 if (from < 0 || from >= mtd->size || len > mtd->size - from) in mtd_point()
1104 return mtd->_point(mtd, from, len, retlen, virt, phys); in mtd_point()
1109 int mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in mtd_unpoint() argument
1111 if (!mtd->_unpoint) in mtd_unpoint()
1113 if (from < 0 || from >= mtd->size || len > mtd->size - from) in mtd_unpoint()
1117 return mtd->_unpoint(mtd, from, len); in mtd_unpoint()
1126 unsigned long mtd_get_unmapped_area(struct mtd_info *mtd, unsigned long len, in mtd_get_unmapped_area() argument
1133 ret = mtd_point(mtd, offset, len, &retlen, &virt, NULL); in mtd_get_unmapped_area()
1137 mtd_unpoint(mtd, offset, retlen); in mtd_get_unmapped_area()
1144 int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, in mtd_read() argument
1153 ret = mtd_read_oob(mtd, from, &ops); in mtd_read()
1160 int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, in mtd_write() argument
1169 ret = mtd_write_oob(mtd, to, &ops); in mtd_write()
1183 int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, in mtd_panic_write() argument
1187 if (!mtd->_panic_write) in mtd_panic_write()
1189 if (to < 0 || to >= mtd->size || len > mtd->size - to) in mtd_panic_write()
1191 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_panic_write()
1195 if (!mtd->oops_panic_write) in mtd_panic_write()
1196 mtd->oops_panic_write = true; in mtd_panic_write()
1198 return mtd->_panic_write(mtd, to, len, retlen, buf); in mtd_panic_write()
1202 static int mtd_check_oob_ops(struct mtd_info *mtd, loff_t offs, in mtd_check_oob_ops() argument
1216 if (offs < 0 || offs + ops->len > mtd->size) in mtd_check_oob_ops()
1222 if (ops->ooboffs >= mtd_oobavail(mtd, ops)) in mtd_check_oob_ops()
1225 maxooblen = ((size_t)(mtd_div_by_ws(mtd->size, mtd) - in mtd_check_oob_ops()
1226 mtd_div_by_ws(offs, mtd)) * in mtd_check_oob_ops()
1227 mtd_oobavail(mtd, ops)) - ops->ooboffs; in mtd_check_oob_ops()
1235 int mtd_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops) in mtd_read_oob() argument
1240 ret_code = mtd_check_oob_ops(mtd, from, ops); in mtd_read_oob()
1247 if (!mtd->_read_oob && (!mtd->_read || ops->oobbuf)) in mtd_read_oob()
1250 if (mtd->_read_oob) in mtd_read_oob()
1251 ret_code = mtd->_read_oob(mtd, from, ops); in mtd_read_oob()
1253 ret_code = mtd->_read(mtd, from, ops->len, &ops->retlen, in mtd_read_oob()
1264 if (mtd->ecc_strength == 0) in mtd_read_oob()
1266 return ret_code >= mtd->bitflip_threshold ? -EUCLEAN : 0; in mtd_read_oob()
1270 int mtd_write_oob(struct mtd_info *mtd, loff_t to, in mtd_write_oob() argument
1277 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_write_oob()
1280 ret = mtd_check_oob_ops(mtd, to, ops); in mtd_write_oob()
1287 if (!mtd->_write_oob && (!mtd->_write || ops->oobbuf)) in mtd_write_oob()
1290 if (mtd->_write_oob) in mtd_write_oob()
1291 return mtd->_write_oob(mtd, to, ops); in mtd_write_oob()
1293 return mtd->_write(mtd, to, ops->len, &ops->retlen, in mtd_write_oob()
1314 int mtd_ooblayout_ecc(struct mtd_info *mtd, int section, in mtd_ooblayout_ecc() argument
1319 if (!mtd || section < 0) in mtd_ooblayout_ecc()
1322 if (!mtd->ooblayout || !mtd->ooblayout->ecc) in mtd_ooblayout_ecc()
1325 return mtd->ooblayout->ecc(mtd, section, oobecc); in mtd_ooblayout_ecc()
1346 int mtd_ooblayout_free(struct mtd_info *mtd, int section, in mtd_ooblayout_free() argument
1351 if (!mtd || section < 0) in mtd_ooblayout_free()
1354 if (!mtd->ooblayout || !mtd->ooblayout->free) in mtd_ooblayout_free()
1357 return mtd->ooblayout->free(mtd, section, oobfree); in mtd_ooblayout_free()
1378 static int mtd_ooblayout_find_region(struct mtd_info *mtd, int byte, in mtd_ooblayout_find_region() argument
1389 ret = iter(mtd, section, oobregion); in mtd_ooblayout_find_region()
1424 int mtd_ooblayout_find_eccregion(struct mtd_info *mtd, int eccbyte, in mtd_ooblayout_find_eccregion() argument
1428 return mtd_ooblayout_find_region(mtd, eccbyte, section, oobregion, in mtd_ooblayout_find_eccregion()
1447 static int mtd_ooblayout_get_bytes(struct mtd_info *mtd, u8 *buf, in mtd_ooblayout_get_bytes() argument
1456 ret = mtd_ooblayout_find_region(mtd, start, §ion, in mtd_ooblayout_get_bytes()
1470 ret = iter(mtd, ++section, &oobregion); in mtd_ooblayout_get_bytes()
1490 static int mtd_ooblayout_set_bytes(struct mtd_info *mtd, const u8 *buf, in mtd_ooblayout_set_bytes() argument
1499 ret = mtd_ooblayout_find_region(mtd, start, §ion, in mtd_ooblayout_set_bytes()
1513 ret = iter(mtd, ++section, &oobregion); in mtd_ooblayout_set_bytes()
1528 static int mtd_ooblayout_count_bytes(struct mtd_info *mtd, in mtd_ooblayout_count_bytes() argument
1537 ret = iter(mtd, section++, &oobregion); in mtd_ooblayout_count_bytes()
1562 int mtd_ooblayout_get_eccbytes(struct mtd_info *mtd, u8 *eccbuf, in mtd_ooblayout_get_eccbytes() argument
1565 return mtd_ooblayout_get_bytes(mtd, eccbuf, oobbuf, start, nbytes, in mtd_ooblayout_get_eccbytes()
1582 int mtd_ooblayout_set_eccbytes(struct mtd_info *mtd, const u8 *eccbuf, in mtd_ooblayout_set_eccbytes() argument
1585 return mtd_ooblayout_set_bytes(mtd, eccbuf, oobbuf, start, nbytes, in mtd_ooblayout_set_eccbytes()
1602 int mtd_ooblayout_get_databytes(struct mtd_info *mtd, u8 *databuf, in mtd_ooblayout_get_databytes() argument
1605 return mtd_ooblayout_get_bytes(mtd, databuf, oobbuf, start, nbytes, in mtd_ooblayout_get_databytes()
1622 int mtd_ooblayout_set_databytes(struct mtd_info *mtd, const u8 *databuf, in mtd_ooblayout_set_databytes() argument
1625 return mtd_ooblayout_set_bytes(mtd, databuf, oobbuf, start, nbytes, in mtd_ooblayout_set_databytes()
1638 int mtd_ooblayout_count_freebytes(struct mtd_info *mtd) in mtd_ooblayout_count_freebytes() argument
1640 return mtd_ooblayout_count_bytes(mtd, mtd_ooblayout_free); in mtd_ooblayout_count_freebytes()
1652 int mtd_ooblayout_count_eccbytes(struct mtd_info *mtd) in mtd_ooblayout_count_eccbytes() argument
1654 return mtd_ooblayout_count_bytes(mtd, mtd_ooblayout_ecc); in mtd_ooblayout_count_eccbytes()
1663 int mtd_get_fact_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, in mtd_get_fact_prot_info() argument
1666 if (!mtd->_get_fact_prot_info) in mtd_get_fact_prot_info()
1670 return mtd->_get_fact_prot_info(mtd, len, retlen, buf); in mtd_get_fact_prot_info()
1674 int mtd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, in mtd_read_fact_prot_reg() argument
1678 if (!mtd->_read_fact_prot_reg) in mtd_read_fact_prot_reg()
1682 return mtd->_read_fact_prot_reg(mtd, from, len, retlen, buf); in mtd_read_fact_prot_reg()
1686 int mtd_get_user_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, in mtd_get_user_prot_info() argument
1689 if (!mtd->_get_user_prot_info) in mtd_get_user_prot_info()
1693 return mtd->_get_user_prot_info(mtd, len, retlen, buf); in mtd_get_user_prot_info()
1697 int mtd_read_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, in mtd_read_user_prot_reg() argument
1701 if (!mtd->_read_user_prot_reg) in mtd_read_user_prot_reg()
1705 return mtd->_read_user_prot_reg(mtd, from, len, retlen, buf); in mtd_read_user_prot_reg()
1709 int mtd_write_user_prot_reg(struct mtd_info *mtd, loff_t to, size_t len, in mtd_write_user_prot_reg() argument
1715 if (!mtd->_write_user_prot_reg) in mtd_write_user_prot_reg()
1719 ret = mtd->_write_user_prot_reg(mtd, to, len, retlen, buf); in mtd_write_user_prot_reg()
1731 int mtd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len) in mtd_lock_user_prot_reg() argument
1733 if (!mtd->_lock_user_prot_reg) in mtd_lock_user_prot_reg()
1737 return mtd->_lock_user_prot_reg(mtd, from, len); in mtd_lock_user_prot_reg()
1742 int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_lock() argument
1744 if (!mtd->_lock) in mtd_lock()
1746 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_lock()
1750 return mtd->_lock(mtd, ofs, len); in mtd_lock()
1754 int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_unlock() argument
1756 if (!mtd->_unlock) in mtd_unlock()
1758 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_unlock()
1762 return mtd->_unlock(mtd, ofs, len); in mtd_unlock()
1766 int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_is_locked() argument
1768 if (!mtd->_is_locked) in mtd_is_locked()
1770 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_is_locked()
1774 return mtd->_is_locked(mtd, ofs, len); in mtd_is_locked()
1778 int mtd_block_isreserved(struct mtd_info *mtd, loff_t ofs) in mtd_block_isreserved() argument
1780 if (ofs < 0 || ofs >= mtd->size) in mtd_block_isreserved()
1782 if (!mtd->_block_isreserved) in mtd_block_isreserved()
1784 return mtd->_block_isreserved(mtd, ofs); in mtd_block_isreserved()
1788 int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs) in mtd_block_isbad() argument
1790 if (ofs < 0 || ofs >= mtd->size) in mtd_block_isbad()
1792 if (!mtd->_block_isbad) in mtd_block_isbad()
1794 return mtd->_block_isbad(mtd, ofs); in mtd_block_isbad()
1798 int mtd_block_markbad(struct mtd_info *mtd, loff_t ofs) in mtd_block_markbad() argument
1800 if (!mtd->_block_markbad) in mtd_block_markbad()
1802 if (ofs < 0 || ofs >= mtd->size) in mtd_block_markbad()
1804 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_block_markbad()
1806 return mtd->_block_markbad(mtd, ofs); in mtd_block_markbad()
1821 static int default_mtd_writev(struct mtd_info *mtd, const struct kvec *vecs, in default_mtd_writev() argument
1831 ret = mtd_write(mtd, to, vecs[i].iov_len, &thislen, in default_mtd_writev()
1853 int mtd_writev(struct mtd_info *mtd, const struct kvec *vecs, in mtd_writev() argument
1857 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_writev()
1859 if (!mtd->_writev) in mtd_writev()
1860 return default_mtd_writev(mtd, vecs, count, to, retlen); in mtd_writev()
1861 return mtd->_writev(mtd, vecs, count, to, retlen); in mtd_writev()
1889 void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size) in mtd_kmalloc_up_to() argument
1892 size_t min_alloc = max_t(size_t, mtd->writesize, PAGE_SIZE); in mtd_kmalloc_up_to()
1903 *size = ALIGN(*size, mtd->writesize); in mtd_kmalloc_up_to()
1921 struct mtd_info *mtd; in mtd_proc_show() local
1925 mtd_for_each_device(mtd) { in mtd_proc_show()
1927 mtd->index, (unsigned long long)mtd->size, in mtd_proc_show()
1928 mtd->erasesize, mtd->name); in mtd_proc_show()