Lines Matching refs:mtd
43 struct mtd_info mtd; member
61 static int part_read(struct mtd_info *mtd, loff_t from, size_t len, in part_read() argument
64 struct mtd_part *part = PART(mtd); in part_read()
72 mtd->ecc_stats.failed += in part_read()
75 mtd->ecc_stats.corrected += in part_read()
80 static int part_point(struct mtd_info *mtd, loff_t from, size_t len, in part_point() argument
83 struct mtd_part *part = PART(mtd); in part_point()
89 static int part_unpoint(struct mtd_info *mtd, loff_t from, size_t len) in part_unpoint() argument
91 struct mtd_part *part = PART(mtd); in part_unpoint()
96 static unsigned long part_get_unmapped_area(struct mtd_info *mtd, in part_get_unmapped_area() argument
101 struct mtd_part *part = PART(mtd); in part_get_unmapped_area()
108 static int part_read_oob(struct mtd_info *mtd, loff_t from, in part_read_oob() argument
111 struct mtd_part *part = PART(mtd); in part_read_oob()
114 if (from >= mtd->size) in part_read_oob()
116 if (ops->datbuf && from + ops->len > mtd->size) in part_read_oob()
127 len = mtd->oobavail; in part_read_oob()
129 len = mtd->oobsize; in part_read_oob()
130 pages = mtd_div_by_ws(mtd->size, mtd); in part_read_oob()
131 pages -= mtd_div_by_ws(from, mtd); in part_read_oob()
139 mtd->ecc_stats.corrected++; in part_read_oob()
141 mtd->ecc_stats.failed++; in part_read_oob()
146 static int part_read_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_read_user_prot_reg() argument
149 struct mtd_part *part = PART(mtd); in part_read_user_prot_reg()
154 static int part_get_user_prot_info(struct mtd_info *mtd, size_t len, in part_get_user_prot_info() argument
157 struct mtd_part *part = PART(mtd); in part_get_user_prot_info()
162 static int part_read_fact_prot_reg(struct mtd_info *mtd, loff_t from, in part_read_fact_prot_reg() argument
165 struct mtd_part *part = PART(mtd); in part_read_fact_prot_reg()
170 static int part_get_fact_prot_info(struct mtd_info *mtd, size_t len, in part_get_fact_prot_info() argument
173 struct mtd_part *part = PART(mtd); in part_get_fact_prot_info()
178 static int part_write(struct mtd_info *mtd, loff_t to, size_t len, in part_write() argument
181 struct mtd_part *part = PART(mtd); in part_write()
186 static int part_panic_write(struct mtd_info *mtd, loff_t to, size_t len, in part_panic_write() argument
189 struct mtd_part *part = PART(mtd); in part_panic_write()
194 static int part_write_oob(struct mtd_info *mtd, loff_t to, in part_write_oob() argument
197 struct mtd_part *part = PART(mtd); in part_write_oob()
199 if (to >= mtd->size) in part_write_oob()
201 if (ops->datbuf && to + ops->len > mtd->size) in part_write_oob()
206 static int part_write_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_write_user_prot_reg() argument
209 struct mtd_part *part = PART(mtd); in part_write_user_prot_reg()
214 static int part_lock_user_prot_reg(struct mtd_info *mtd, loff_t from, in part_lock_user_prot_reg() argument
217 struct mtd_part *part = PART(mtd); in part_lock_user_prot_reg()
221 static int part_writev(struct mtd_info *mtd, const struct kvec *vecs, in part_writev() argument
224 struct mtd_part *part = PART(mtd); in part_writev()
229 static int part_erase(struct mtd_info *mtd, struct erase_info *instr) in part_erase() argument
231 struct mtd_part *part = PART(mtd); in part_erase()
246 if (instr->mtd->_erase == part_erase) { in mtd_erase_callback()
247 struct mtd_part *part = PART(instr->mtd); in mtd_erase_callback()
258 static int part_lock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_lock() argument
260 struct mtd_part *part = PART(mtd); in part_lock()
264 static int part_unlock(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_unlock() argument
266 struct mtd_part *part = PART(mtd); in part_unlock()
270 static int part_is_locked(struct mtd_info *mtd, loff_t ofs, uint64_t len) in part_is_locked() argument
272 struct mtd_part *part = PART(mtd); in part_is_locked()
276 static void part_sync(struct mtd_info *mtd) in part_sync() argument
278 struct mtd_part *part = PART(mtd); in part_sync()
282 static int part_suspend(struct mtd_info *mtd) in part_suspend() argument
284 struct mtd_part *part = PART(mtd); in part_suspend()
288 static void part_resume(struct mtd_info *mtd) in part_resume() argument
290 struct mtd_part *part = PART(mtd); in part_resume()
294 static int part_block_isreserved(struct mtd_info *mtd, loff_t ofs) in part_block_isreserved() argument
296 struct mtd_part *part = PART(mtd); in part_block_isreserved()
301 static int part_block_isbad(struct mtd_info *mtd, loff_t ofs) in part_block_isbad() argument
303 struct mtd_part *part = PART(mtd); in part_block_isbad()
308 static int part_block_markbad(struct mtd_info *mtd, loff_t ofs) in part_block_markbad() argument
310 struct mtd_part *part = PART(mtd); in part_block_markbad()
316 mtd->ecc_stats.badblocks++; in part_block_markbad()
322 kfree(p->mtd.name); in free_partition()
339 ret = del_mtd_device(&slave->mtd); in del_mtd_partitions()
371 slave->mtd.type = master->type; in allocate_partition()
372 slave->mtd.flags = master->flags & ~part->mask_flags; in allocate_partition()
373 slave->mtd.size = part->size; in allocate_partition()
374 slave->mtd.writesize = master->writesize; in allocate_partition()
375 slave->mtd.writebufsize = master->writebufsize; in allocate_partition()
376 slave->mtd.oobsize = master->oobsize; in allocate_partition()
377 slave->mtd.oobavail = master->oobavail; in allocate_partition()
378 slave->mtd.subpage_sft = master->subpage_sft; in allocate_partition()
380 slave->mtd.name = name; in allocate_partition()
381 slave->mtd.owner = master->owner; in allocate_partition()
391 slave->mtd.dev.parent = IS_ENABLED(CONFIG_MTD_PARTITIONED_MASTER) ? in allocate_partition()
395 slave->mtd._read = part_read; in allocate_partition()
396 slave->mtd._write = part_write; in allocate_partition()
399 slave->mtd._panic_write = part_panic_write; in allocate_partition()
402 slave->mtd._point = part_point; in allocate_partition()
403 slave->mtd._unpoint = part_unpoint; in allocate_partition()
407 slave->mtd._get_unmapped_area = part_get_unmapped_area; in allocate_partition()
409 slave->mtd._read_oob = part_read_oob; in allocate_partition()
411 slave->mtd._write_oob = part_write_oob; in allocate_partition()
413 slave->mtd._read_user_prot_reg = part_read_user_prot_reg; in allocate_partition()
415 slave->mtd._read_fact_prot_reg = part_read_fact_prot_reg; in allocate_partition()
417 slave->mtd._write_user_prot_reg = part_write_user_prot_reg; in allocate_partition()
419 slave->mtd._lock_user_prot_reg = part_lock_user_prot_reg; in allocate_partition()
421 slave->mtd._get_user_prot_info = part_get_user_prot_info; in allocate_partition()
423 slave->mtd._get_fact_prot_info = part_get_fact_prot_info; in allocate_partition()
425 slave->mtd._sync = part_sync; in allocate_partition()
428 slave->mtd._suspend = part_suspend; in allocate_partition()
429 slave->mtd._resume = part_resume; in allocate_partition()
432 slave->mtd._writev = part_writev; in allocate_partition()
434 slave->mtd._lock = part_lock; in allocate_partition()
436 slave->mtd._unlock = part_unlock; in allocate_partition()
438 slave->mtd._is_locked = part_is_locked; in allocate_partition()
440 slave->mtd._block_isreserved = part_block_isreserved; in allocate_partition()
442 slave->mtd._block_isbad = part_block_isbad; in allocate_partition()
444 slave->mtd._block_markbad = part_block_markbad; in allocate_partition()
445 slave->mtd._erase = part_erase; in allocate_partition()
463 if (master->size - slave->offset >= slave->mtd.size) { in allocate_partition()
464 slave->mtd.size = master->size - slave->offset in allocate_partition()
465 - slave->mtd.size; in allocate_partition()
469 slave->mtd.size); in allocate_partition()
474 if (slave->mtd.size == MTDPART_SIZ_FULL) in allocate_partition()
475 slave->mtd.size = master->size - slave->offset; in allocate_partition()
478 (unsigned long long)(slave->offset + slave->mtd.size), slave->mtd.name); in allocate_partition()
484 slave->mtd.size = 0; in allocate_partition()
489 if (slave->offset + slave->mtd.size > master->size) { in allocate_partition()
490 slave->mtd.size = master->size - slave->offset; in allocate_partition()
492 part->name, master->name, (unsigned long long)slave->mtd.size); in allocate_partition()
497 u64 end = slave->offset + slave->mtd.size; in allocate_partition()
510 if (slave->mtd.erasesize < regions[i].erasesize) { in allocate_partition()
511 slave->mtd.erasesize = regions[i].erasesize; in allocate_partition()
514 BUG_ON(slave->mtd.erasesize == 0); in allocate_partition()
517 slave->mtd.erasesize = master->erasesize; in allocate_partition()
520 if ((slave->mtd.flags & MTD_WRITEABLE) && in allocate_partition()
521 mtd_mod_by_eb(slave->offset, &slave->mtd)) { in allocate_partition()
525 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
529 if ((slave->mtd.flags & MTD_WRITEABLE) && in allocate_partition()
530 mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) { in allocate_partition()
531 slave->mtd.flags &= ~MTD_WRITEABLE; in allocate_partition()
536 slave->mtd.ecclayout = master->ecclayout; in allocate_partition()
537 slave->mtd.ecc_step_size = master->ecc_step_size; in allocate_partition()
538 slave->mtd.ecc_strength = master->ecc_strength; in allocate_partition()
539 slave->mtd.bitflip_threshold = master->bitflip_threshold; in allocate_partition()
544 while (offs < slave->mtd.size) { in allocate_partition()
546 slave->mtd.ecc_stats.bbtblocks++; in allocate_partition()
548 slave->mtd.ecc_stats.badblocks++; in allocate_partition()
549 offs += slave->mtd.erasesize; in allocate_partition()
560 struct mtd_info *mtd = dev_get_drvdata(dev); in mtd_partition_offset_show() local
561 struct mtd_part *part = PART(mtd); in mtd_partition_offset_show()
574 int ret = sysfs_create_files(&new->mtd.dev.kobj, mtd_partition_attrs); in mtd_add_partition_attrs()
613 add_mtd_device(&new->mtd); in mtd_add_partition()
629 (slave->mtd.index == partno)) { in mtd_del_partition()
630 sysfs_remove_files(&slave->mtd.dev.kobj, in mtd_del_partition()
632 ret = del_mtd_device(&slave->mtd); in mtd_del_partition()
676 add_mtd_device(&slave->mtd); in add_mtd_partitions()
679 cur_offset = slave->offset + slave->mtd.size; in add_mtd_partitions()
791 int mtd_is_partition(const struct mtd_info *mtd) in mtd_is_partition() argument
798 if (&part->mtd == mtd) { in mtd_is_partition()
809 uint64_t mtd_get_device_size(const struct mtd_info *mtd) in mtd_get_device_size() argument
811 if (!mtd_is_partition(mtd)) in mtd_get_device_size()
812 return mtd->size; in mtd_get_device_size()
814 return PART(mtd)->master->size; in mtd_get_device_size()