Lines Matching refs:mtd
84 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_release() local
85 dev_t index = MTD_DEVT(mtd->index); in mtd_release()
93 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_cls_suspend() local
95 return mtd ? mtd_suspend(mtd) : 0; in mtd_cls_suspend()
100 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_cls_resume() local
102 if (mtd) in mtd_cls_resume()
103 mtd_resume(mtd); in mtd_cls_resume()
110 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_type_show() local
113 switch (mtd->type) { in mtd_type_show()
149 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_flags_show() local
151 return snprintf(buf, PAGE_SIZE, "0x%lx\n", (unsigned long)mtd->flags); in mtd_flags_show()
159 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_size_show() local
162 (unsigned long long)mtd->size); in mtd_size_show()
170 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_erasesize_show() local
172 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->erasesize); in mtd_erasesize_show()
180 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_writesize_show() local
182 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->writesize); in mtd_writesize_show()
190 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_subpagesize_show() local
191 unsigned int subpagesize = mtd->writesize >> mtd->subpage_sft; in mtd_subpagesize_show()
201 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_oobsize_show() local
203 return snprintf(buf, PAGE_SIZE, "%lu\n", (unsigned long)mtd->oobsize); in mtd_oobsize_show()
211 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_numeraseregions_show() local
213 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->numeraseregions); in mtd_numeraseregions_show()
222 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_name_show() local
224 return snprintf(buf, PAGE_SIZE, "%s\n", mtd->name); in mtd_name_show()
232 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_strength_show() local
234 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->ecc_strength); in mtd_ecc_strength_show()
242 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bitflip_threshold_show() local
244 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->bitflip_threshold); in mtd_bitflip_threshold_show()
251 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bitflip_threshold_store() local
259 mtd->bitflip_threshold = bitflip_threshold; in mtd_bitflip_threshold_store()
269 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_step_size_show() local
271 return snprintf(buf, PAGE_SIZE, "%u\n", mtd->ecc_step_size); in mtd_ecc_step_size_show()
279 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_stats_corrected_show() local
280 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_ecc_stats_corrected_show()
290 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_ecc_stats_errors_show() local
291 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_ecc_stats_errors_show()
300 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_badblocks_show() local
301 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_badblocks_show()
310 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_bbtblocks_show() local
311 struct mtd_ecc_stats *ecc_stats = &mtd->ecc_stats; in mtd_bbtblocks_show()
336 ATTRIBUTE_GROUPS(mtd);
345 unsigned mtd_mmap_capabilities(struct mtd_info *mtd) in mtd_mmap_capabilities() argument
347 switch (mtd->type) { in mtd_mmap_capabilities()
364 struct mtd_info *mtd; in mtd_reboot_notifier() local
366 mtd = container_of(n, struct mtd_info, reboot_notifier); in mtd_reboot_notifier()
367 mtd->_reboot(mtd); in mtd_reboot_notifier()
382 int add_mtd_device(struct mtd_info *mtd) in add_mtd_device() argument
387 mtd->backing_dev_info = &mtd_bdi; in add_mtd_device()
389 BUG_ON(mtd->writesize == 0); in add_mtd_device()
392 i = idr_alloc(&mtd_idr, mtd, 0, 0, GFP_KERNEL); in add_mtd_device()
396 mtd->index = i; in add_mtd_device()
397 mtd->usecount = 0; in add_mtd_device()
400 if (mtd->bitflip_threshold == 0) in add_mtd_device()
401 mtd->bitflip_threshold = mtd->ecc_strength; in add_mtd_device()
403 if (is_power_of_2(mtd->erasesize)) in add_mtd_device()
404 mtd->erasesize_shift = ffs(mtd->erasesize) - 1; in add_mtd_device()
406 mtd->erasesize_shift = 0; in add_mtd_device()
408 if (is_power_of_2(mtd->writesize)) in add_mtd_device()
409 mtd->writesize_shift = ffs(mtd->writesize) - 1; in add_mtd_device()
411 mtd->writesize_shift = 0; in add_mtd_device()
413 mtd->erasesize_mask = (1 << mtd->erasesize_shift) - 1; in add_mtd_device()
414 mtd->writesize_mask = (1 << mtd->writesize_shift) - 1; in add_mtd_device()
417 if ((mtd->flags & MTD_WRITEABLE) && (mtd->flags & MTD_POWERUP_LOCK)) { in add_mtd_device()
418 error = mtd_unlock(mtd, 0, mtd->size); in add_mtd_device()
422 mtd->name); in add_mtd_device()
428 mtd->dev.type = &mtd_devtype; in add_mtd_device()
429 mtd->dev.class = &mtd_class; in add_mtd_device()
430 mtd->dev.devt = MTD_DEVT(i); in add_mtd_device()
431 dev_set_name(&mtd->dev, "mtd%d", i); in add_mtd_device()
432 dev_set_drvdata(&mtd->dev, mtd); in add_mtd_device()
433 if (device_register(&mtd->dev) != 0) in add_mtd_device()
436 device_create(&mtd_class, mtd->dev.parent, MTD_DEVT(i) + 1, NULL, in add_mtd_device()
439 pr_debug("mtd: Giving out device %d to %s\n", i, mtd->name); in add_mtd_device()
443 not->add(mtd); in add_mtd_device()
470 int del_mtd_device(struct mtd_info *mtd) in del_mtd_device() argument
477 if (idr_find(&mtd_idr, mtd->index) != mtd) { in del_mtd_device()
485 not->remove(mtd); in del_mtd_device()
487 if (mtd->usecount) { in del_mtd_device()
489 mtd->index, mtd->name, mtd->usecount); in del_mtd_device()
492 device_unregister(&mtd->dev); in del_mtd_device()
494 idr_remove(&mtd_idr, mtd->index); in del_mtd_device()
505 static int mtd_add_device_partitions(struct mtd_info *mtd, in mtd_add_device_partitions() argument
512 ret = add_mtd_device(mtd); in mtd_add_device_partitions()
518 ret = add_mtd_partitions(mtd, real_parts, nbparts); in mtd_add_device_partitions()
520 del_mtd_device(mtd); in mtd_add_device_partitions()
557 int mtd_device_parse_register(struct mtd_info *mtd, const char * const *types, in mtd_device_parse_register() argument
565 ret = parse_mtd_partitions(mtd, types, &real_parts, parser_data); in mtd_device_parse_register()
576 ret = mtd_add_device_partitions(mtd, real_parts, ret); in mtd_device_parse_register()
586 if (mtd->_reboot && !mtd->reboot_notifier.notifier_call) { in mtd_device_parse_register()
587 mtd->reboot_notifier.notifier_call = mtd_reboot_notifier; in mtd_device_parse_register()
588 register_reboot_notifier(&mtd->reboot_notifier); in mtd_device_parse_register()
630 struct mtd_info *mtd; in register_mtd_user() local
638 mtd_for_each_device(mtd) in register_mtd_user()
639 new->add(mtd); in register_mtd_user()
656 struct mtd_info *mtd; in unregister_mtd_user() local
662 mtd_for_each_device(mtd) in unregister_mtd_user()
663 old->remove(mtd); in unregister_mtd_user()
682 struct mtd_info *get_mtd_device(struct mtd_info *mtd, int num) in get_mtd_device() argument
691 if (other == mtd) { in get_mtd_device()
692 ret = mtd; in get_mtd_device()
698 if (mtd && mtd != ret) in get_mtd_device()
717 int __get_mtd_device(struct mtd_info *mtd) in __get_mtd_device() argument
721 if (!try_module_get(mtd->owner)) in __get_mtd_device()
724 if (mtd->_get_device) { in __get_mtd_device()
725 err = mtd->_get_device(mtd); in __get_mtd_device()
728 module_put(mtd->owner); in __get_mtd_device()
732 mtd->usecount++; in __get_mtd_device()
748 struct mtd_info *mtd = NULL, *other; in get_mtd_device_nm() local
754 mtd = other; in get_mtd_device_nm()
759 if (!mtd) in get_mtd_device_nm()
762 err = __get_mtd_device(mtd); in get_mtd_device_nm()
767 return mtd; in get_mtd_device_nm()
775 void put_mtd_device(struct mtd_info *mtd) in put_mtd_device() argument
778 __put_mtd_device(mtd); in put_mtd_device()
784 void __put_mtd_device(struct mtd_info *mtd) in __put_mtd_device() argument
786 --mtd->usecount; in __put_mtd_device()
787 BUG_ON(mtd->usecount < 0); in __put_mtd_device()
789 if (mtd->_put_device) in __put_mtd_device()
790 mtd->_put_device(mtd); in __put_mtd_device()
792 module_put(mtd->owner); in __put_mtd_device()
803 int mtd_erase(struct mtd_info *mtd, struct erase_info *instr) in mtd_erase() argument
805 if (instr->addr >= mtd->size || instr->len > mtd->size - instr->addr) in mtd_erase()
807 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_erase()
815 return mtd->_erase(mtd, instr); in mtd_erase()
822 int mtd_point(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, in mtd_point() argument
829 if (!mtd->_point) in mtd_point()
831 if (from < 0 || from >= mtd->size || len > mtd->size - from) in mtd_point()
835 return mtd->_point(mtd, from, len, retlen, virt, phys); in mtd_point()
840 int mtd_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in mtd_unpoint() argument
842 if (!mtd->_point) in mtd_unpoint()
844 if (from < 0 || from >= mtd->size || len > mtd->size - from) in mtd_unpoint()
848 return mtd->_unpoint(mtd, from, len); in mtd_unpoint()
857 unsigned long mtd_get_unmapped_area(struct mtd_info *mtd, unsigned long len, in mtd_get_unmapped_area() argument
860 if (!mtd->_get_unmapped_area) in mtd_get_unmapped_area()
862 if (offset >= mtd->size || len > mtd->size - offset) in mtd_get_unmapped_area()
864 return mtd->_get_unmapped_area(mtd, len, offset, flags); in mtd_get_unmapped_area()
868 int mtd_read(struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, in mtd_read() argument
873 if (from < 0 || from >= mtd->size || len > mtd->size - from) in mtd_read()
883 ret_code = mtd->_read(mtd, from, len, retlen, buf); in mtd_read()
886 if (mtd->ecc_strength == 0) in mtd_read()
888 return ret_code >= mtd->bitflip_threshold ? -EUCLEAN : 0; in mtd_read()
892 int mtd_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, in mtd_write() argument
896 if (to < 0 || to >= mtd->size || len > mtd->size - to) in mtd_write()
898 if (!mtd->_write || !(mtd->flags & MTD_WRITEABLE)) in mtd_write()
902 return mtd->_write(mtd, to, len, retlen, buf); in mtd_write()
913 int mtd_panic_write(struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, in mtd_panic_write() argument
917 if (!mtd->_panic_write) in mtd_panic_write()
919 if (to < 0 || to >= mtd->size || len > mtd->size - to) in mtd_panic_write()
921 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_panic_write()
925 return mtd->_panic_write(mtd, to, len, retlen, buf); in mtd_panic_write()
929 int mtd_read_oob(struct mtd_info *mtd, loff_t from, struct mtd_oob_ops *ops) in mtd_read_oob() argument
933 if (!mtd->_read_oob) in mtd_read_oob()
941 ret_code = mtd->_read_oob(mtd, from, ops); in mtd_read_oob()
944 if (mtd->ecc_strength == 0) in mtd_read_oob()
946 return ret_code >= mtd->bitflip_threshold ? -EUCLEAN : 0; in mtd_read_oob()
955 int mtd_get_fact_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, in mtd_get_fact_prot_info() argument
958 if (!mtd->_get_fact_prot_info) in mtd_get_fact_prot_info()
962 return mtd->_get_fact_prot_info(mtd, len, retlen, buf); in mtd_get_fact_prot_info()
966 int mtd_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, in mtd_read_fact_prot_reg() argument
970 if (!mtd->_read_fact_prot_reg) in mtd_read_fact_prot_reg()
974 return mtd->_read_fact_prot_reg(mtd, from, len, retlen, buf); in mtd_read_fact_prot_reg()
978 int mtd_get_user_prot_info(struct mtd_info *mtd, size_t len, size_t *retlen, in mtd_get_user_prot_info() argument
981 if (!mtd->_get_user_prot_info) in mtd_get_user_prot_info()
985 return mtd->_get_user_prot_info(mtd, len, retlen, buf); in mtd_get_user_prot_info()
989 int mtd_read_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len, in mtd_read_user_prot_reg() argument
993 if (!mtd->_read_user_prot_reg) in mtd_read_user_prot_reg()
997 return mtd->_read_user_prot_reg(mtd, from, len, retlen, buf); in mtd_read_user_prot_reg()
1001 int mtd_write_user_prot_reg(struct mtd_info *mtd, loff_t to, size_t len, in mtd_write_user_prot_reg() argument
1007 if (!mtd->_write_user_prot_reg) in mtd_write_user_prot_reg()
1011 ret = mtd->_write_user_prot_reg(mtd, to, len, retlen, buf); in mtd_write_user_prot_reg()
1023 int mtd_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, size_t len) in mtd_lock_user_prot_reg() argument
1025 if (!mtd->_lock_user_prot_reg) in mtd_lock_user_prot_reg()
1029 return mtd->_lock_user_prot_reg(mtd, from, len); in mtd_lock_user_prot_reg()
1034 int mtd_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_lock() argument
1036 if (!mtd->_lock) in mtd_lock()
1038 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_lock()
1042 return mtd->_lock(mtd, ofs, len); in mtd_lock()
1046 int mtd_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_unlock() argument
1048 if (!mtd->_unlock) in mtd_unlock()
1050 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_unlock()
1054 return mtd->_unlock(mtd, ofs, len); in mtd_unlock()
1058 int mtd_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) in mtd_is_locked() argument
1060 if (!mtd->_is_locked) in mtd_is_locked()
1062 if (ofs < 0 || ofs >= mtd->size || len > mtd->size - ofs) in mtd_is_locked()
1066 return mtd->_is_locked(mtd, ofs, len); in mtd_is_locked()
1070 int mtd_block_isreserved(struct mtd_info *mtd, loff_t ofs) in mtd_block_isreserved() argument
1072 if (ofs < 0 || ofs >= mtd->size) in mtd_block_isreserved()
1074 if (!mtd->_block_isreserved) in mtd_block_isreserved()
1076 return mtd->_block_isreserved(mtd, ofs); in mtd_block_isreserved()
1080 int mtd_block_isbad(struct mtd_info *mtd, loff_t ofs) in mtd_block_isbad() argument
1082 if (ofs < 0 || ofs >= mtd->size) in mtd_block_isbad()
1084 if (!mtd->_block_isbad) in mtd_block_isbad()
1086 return mtd->_block_isbad(mtd, ofs); in mtd_block_isbad()
1090 int mtd_block_markbad(struct mtd_info *mtd, loff_t ofs) in mtd_block_markbad() argument
1092 if (!mtd->_block_markbad) in mtd_block_markbad()
1094 if (ofs < 0 || ofs >= mtd->size) in mtd_block_markbad()
1096 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_block_markbad()
1098 return mtd->_block_markbad(mtd, ofs); in mtd_block_markbad()
1113 static int default_mtd_writev(struct mtd_info *mtd, const struct kvec *vecs, in default_mtd_writev() argument
1123 ret = mtd_write(mtd, to, vecs[i].iov_len, &thislen, in default_mtd_writev()
1145 int mtd_writev(struct mtd_info *mtd, const struct kvec *vecs, in mtd_writev() argument
1149 if (!(mtd->flags & MTD_WRITEABLE)) in mtd_writev()
1151 if (!mtd->_writev) in mtd_writev()
1152 return default_mtd_writev(mtd, vecs, count, to, retlen); in mtd_writev()
1153 return mtd->_writev(mtd, vecs, count, to, retlen); in mtd_writev()
1181 void *mtd_kmalloc_up_to(const struct mtd_info *mtd, size_t *size) in mtd_kmalloc_up_to() argument
1185 size_t min_alloc = max_t(size_t, mtd->writesize, PAGE_SIZE); in mtd_kmalloc_up_to()
1196 *size = ALIGN(*size, mtd->writesize); in mtd_kmalloc_up_to()
1214 struct mtd_info *mtd; in mtd_proc_show() local
1218 mtd_for_each_device(mtd) { in mtd_proc_show()
1220 mtd->index, (unsigned long long)mtd->size, in mtd_proc_show()
1221 mtd->erasesize, mtd->name); in mtd_proc_show()