Lines Matching full:mtd
3 * MTD Oops/Panic logger
22 #include <linux/mtd/mtd.h>
25 /* Maximum MTD partition size */
31 "record size for MTD OOPS pages in bytes (default 4096)");
36 "name or index number of the MTD device to use");
58 struct mtd_info *mtd; member
85 struct mtd_info *mtd = cxt->mtd; in mtdoops_erase_block() local
86 u32 start_page_offset = mtd_div_by_eb(offset, mtd) * mtd->erasesize; in mtdoops_erase_block()
88 u32 erase_pages = mtd->erasesize / record_size; in mtdoops_erase_block()
94 erase.len = mtd->erasesize; in mtdoops_erase_block()
96 ret = mtd_erase(mtd, &erase); in mtdoops_erase_block()
113 struct mtd_info *mtd = cxt->mtd; in mtdoops_erase() local
117 if (!mtd) in mtdoops_erase()
120 mod = (cxt->nextpage * record_size) % mtd->erasesize; in mtdoops_erase()
122 cxt->nextpage = cxt->nextpage + ((mtd->erasesize - mod) / record_size); in mtdoops_erase()
127 while ((ret = mtd_block_isbad(mtd, cxt->nextpage * record_size)) > 0) { in mtdoops_erase()
132 cxt->nextpage = cxt->nextpage + (mtd->erasesize / record_size); in mtdoops_erase()
135 if (i == cxt->oops_pages / (mtd->erasesize / record_size)) { in mtdoops_erase()
156 ret = mtd_block_markbad(mtd, cxt->nextpage * record_size); in mtdoops_erase()
201 struct mtd_info *mtd = cxt->mtd; in mtdoops_write() local
216 ret = mtd_panic_write(mtd, cxt->nextpage * record_size, in mtdoops_write()
223 ret = mtd_write(mtd, cxt->nextpage * record_size, in mtdoops_write()
247 struct mtd_info *mtd = cxt->mtd; in find_next_position() local
254 if (mtd_block_isbad(mtd, page * record_size)) in find_next_position()
258 ret = mtd_read(mtd, page * record_size, sizeof(hdr), in find_next_position()
329 static void mtdoops_notify_add(struct mtd_info *mtd) in mtdoops_notify_add() argument
332 u64 mtdoops_pages = div_u64(mtd->size, record_size); in mtdoops_notify_add()
335 if (!strcmp(mtd->name, mtddev)) in mtdoops_notify_add()
336 cxt->mtd_index = mtd->index; in mtdoops_notify_add()
338 if (mtd->index != cxt->mtd_index || cxt->mtd_index < 0) in mtdoops_notify_add()
341 if (mtd->size < mtd->erasesize * 2) { in mtdoops_notify_add()
342 pr_err("MTD partition %d not big enough for mtdoops\n", in mtdoops_notify_add()
343 mtd->index); in mtdoops_notify_add()
346 if (mtd->erasesize < record_size) { in mtdoops_notify_add()
347 pr_err("eraseblock size of MTD partition %d too small\n", in mtdoops_notify_add()
348 mtd->index); in mtdoops_notify_add()
351 if (mtd->size > MTDOOPS_MAX_MTD_SIZE) { in mtdoops_notify_add()
352 pr_err("mtd%d is too large (limit is %d MiB)\n", in mtdoops_notify_add()
353 mtd->index, MTDOOPS_MAX_MTD_SIZE / 1024 / 1024); in mtdoops_notify_add()
377 cxt->mtd = mtd; in mtdoops_notify_add()
378 cxt->oops_pages = (int)mtd->size / record_size; in mtdoops_notify_add()
380 pr_info("Attached to MTD device %d\n", mtd->index); in mtdoops_notify_add()
383 static void mtdoops_notify_remove(struct mtd_info *mtd) in mtdoops_notify_remove() argument
387 if (mtd->index != cxt->mtd_index || cxt->mtd_index < 0) in mtdoops_notify_remove()
393 cxt->mtd = NULL; in mtdoops_notify_remove()
411 pr_err("mtd device (mtddev=name/number) must be supplied\n"); in mtdoops_init()
423 /* Setup the MTD device to use */ in mtdoops_init()
457 MODULE_DESCRIPTION("MTD Oops/Panic console logger/driver");