• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/mtd/ubi/

Lines Matching refs:ubi

48  * @ubi->mtd->writesize field. But as an exception, UBI admits of using another
55 * I/O unit for the headers (the @ubi->hdrs_min_io_size field). But it still
56 * reports NAND page size (@ubi->min_io_size) as a minimal I/O unit for the UBI
64 * device, e.g., make @ubi->min_io_size = 512 in the example above?
83 * copy. It always allocates a @ubi->vid_hdr_alsize bytes buffer for the VID
84 * header and returns a pointer to offset @ubi->vid_hdr_shift of this buffer.
92 #include "ubi.h"
95 static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum);
96 static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum);
97 static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,
99 static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum);
100 static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,
103 #define paranoid_check_not_bad(ubi, pnum) 0
104 #define paranoid_check_peb_ec_hdr(ubi, pnum) 0
105 #define paranoid_check_ec_hdr(ubi, pnum, ec_hdr) 0
106 #define paranoid_check_peb_vid_hdr(ubi, pnum) 0
107 #define paranoid_check_vid_hdr(ubi, pnum, vid_hdr) 0
112 * @ubi: UBI device description object
132 int ubi_io_read(const struct ubi_device *ubi, void *buf, int pnum, int offset,
141 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
142 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
145 err = paranoid_check_not_bad(ubi, pnum);
149 addr = (loff_t)pnum * ubi->peb_size + offset;
151 err = ubi->mtd->read(ubi->mtd, addr, len, &read, buf);
204 * @ubi: UBI device description object
219 int ubi_io_write(struct ubi_device *ubi, const void *buf, int pnum, int offset,
228 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
229 ubi_assert(offset >= 0 && offset + len <= ubi->peb_size);
230 ubi_assert(offset % ubi->hdrs_min_io_size == 0);
231 ubi_assert(len > 0 && len % ubi->hdrs_min_io_size == 0);
233 if (ubi->ro_mode) {
240 err = paranoid_check_not_bad(ubi, pnum);
245 err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);
249 if (offset >= ubi->leb_start) {
254 err = paranoid_check_peb_ec_hdr(ubi, pnum);
257 err = paranoid_check_peb_vid_hdr(ubi, pnum);
269 addr = (loff_t)pnum * ubi->peb_size + offset;
270 err = ubi->mtd->write(ubi->mtd, addr, len, &written, buf);
275 ubi_dbg_dump_flash(ubi, pnum, offset, len);
280 err = ubi_dbg_check_write(ubi, buf, pnum, offset, len);
289 len = ubi->peb_size - offset;
291 err = ubi_dbg_check_all_ff(ubi, pnum, offset, len);
311 * @ubi: UBI device description object
318 static int do_sync_erase(struct ubi_device *ubi, int pnum)
330 ei.mtd = ubi->mtd;
331 ei.addr = (loff_t)pnum * ubi->peb_size;
332 ei.len = ubi->peb_size;
336 err = ubi->mtd->erase(ubi->mtd, &ei);
367 err = ubi_dbg_check_all_ff(ubi, pnum, 0, ubi->peb_size);
403 * @ubi: UBI device description object
410 static int torture_peb(struct ubi_device *ubi, int pnum)
418 mutex_lock(&ubi->buf_mutex);
420 err = do_sync_erase(ubi, pnum);
425 err = ubi_io_read(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
429 err = check_pattern(ubi->peb_buf1, 0xFF, ubi->peb_size);
438 memset(ubi->peb_buf1, patterns[i], ubi->peb_size);
439 err = ubi_io_write(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
443 memset(ubi->peb_buf1, ~patterns[i], ubi->peb_size);
444 err = ubi_io_read(ubi, ubi->peb_buf1, pnum, 0, ubi->peb_size);
448 err = check_pattern(ubi->peb_buf1, patterns[i], ubi->peb_size);
461 mutex_unlock(&ubi->buf_mutex);
477 * @ubi: UBI device description object
495 static int nor_erase_prepare(struct ubi_device *ubi, int pnum)
503 addr = (loff_t)pnum * ubi->peb_size + ubi->vid_hdr_aloffset;
504 err = ubi->mtd->write(ubi->mtd, addr, 4, &written, (void *)&data);
506 addr -= ubi->vid_hdr_aloffset;
507 err = ubi->mtd->write(ubi->mtd, addr, 4, &written,
519 err1 = ubi_io_read_vid_hdr(ubi, pnum, &vid_hdr, 0);
535 ubi_dbg_dump_flash(ubi, pnum, 0, ubi->peb_size);
541 * @ubi: UBI device description object
555 int ubi_io_sync_erase(struct ubi_device *ubi, int pnum, int torture)
559 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
561 err = paranoid_check_not_bad(ubi, pnum);
565 if (ubi->ro_mode) {
570 if (ubi->nor_flash) {
571 err = nor_erase_prepare(ubi, pnum);
577 ret = torture_peb(ubi, pnum);
582 err = do_sync_erase(ubi, pnum);
591 * @ubi: UBI device description object
597 int ubi_io_is_bad(const struct ubi_device *ubi, int pnum)
599 struct mtd_info *mtd = ubi->mtd;
601 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
603 if (ubi->bad_allowed) {
606 ret = mtd->block_isbad(mtd, (loff_t)pnum * ubi->peb_size);
620 * @ubi: UBI device description object
626 int ubi_io_mark_bad(const struct ubi_device *ubi, int pnum)
629 struct mtd_info *mtd = ubi->mtd;
631 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
633 if (ubi->ro_mode) {
638 if (!ubi->bad_allowed)
641 err = mtd->block_markbad(mtd, (loff_t)pnum * ubi->peb_size);
649 * @ubi: UBI device description object
655 static int validate_ec_hdr(const struct ubi_device *ubi,
672 if (vid_hdr_offset != ubi->vid_hdr_offset) {
674 vid_hdr_offset, ubi->vid_hdr_offset);
678 if (leb_start != ubi->leb_start) {
680 leb_start, ubi->leb_start);
700 * @ubi: UBI device description object
718 int ubi_io_read_ec_hdr(struct ubi_device *ubi, int pnum,
725 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
727 err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
795 err = validate_ec_hdr(ubi, ec_hdr);
810 * @ubi: UBI device description object
823 int ubi_io_write_ec_hdr(struct ubi_device *ubi, int pnum,
830 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
834 ec_hdr->vid_hdr_offset = cpu_to_be32(ubi->vid_hdr_offset);
835 ec_hdr->data_offset = cpu_to_be32(ubi->leb_start);
836 ec_hdr->image_seq = cpu_to_be32(ubi->image_seq);
840 err = paranoid_check_ec_hdr(ubi, pnum, ec_hdr);
844 err = ubi_io_write(ubi, ec_hdr, pnum, 0, ubi->ec_hdr_alsize);
850 * @ubi: UBI device description object
856 static int validate_vid_hdr(const struct ubi_device *ubi,
868 int usable_leb_size = ubi->leb_size - data_pad;
903 if (data_pad >= ubi->leb_size / 2) {
970 * @ubi: UBI device description object
990 int ubi_io_read_vid_hdr(struct ubi_device *ubi, int pnum,
998 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1000 p = (char *)vid_hdr - ubi->vid_hdr_shift;
1001 err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1002 ubi->vid_hdr_alsize);
1068 err = validate_vid_hdr(ubi, vid_hdr);
1083 * @ubi: UBI device description object
1096 int ubi_io_write_vid_hdr(struct ubi_device *ubi, int pnum,
1104 ubi_assert(pnum >= 0 && pnum < ubi->peb_count);
1106 err = paranoid_check_peb_ec_hdr(ubi, pnum);
1115 err = paranoid_check_vid_hdr(ubi, pnum, vid_hdr);
1119 p = (char *)vid_hdr - ubi->vid_hdr_shift;
1120 err = ubi_io_write(ubi, p, pnum, ubi->vid_hdr_aloffset,
1121 ubi->vid_hdr_alsize);
1129 * @ubi: UBI device description object
1135 static int paranoid_check_not_bad(const struct ubi_device *ubi, int pnum)
1139 err = ubi_io_is_bad(ubi, pnum);
1150 * @ubi: UBI device description object
1157 static int paranoid_check_ec_hdr(const struct ubi_device *ubi, int pnum,
1170 err = validate_ec_hdr(ubi, ec_hdr);
1186 * @ubi: UBI device description object
1192 static int paranoid_check_peb_ec_hdr(const struct ubi_device *ubi, int pnum)
1198 ec_hdr = kzalloc(ubi->ec_hdr_alsize, GFP_NOFS);
1202 err = ubi_io_read(ubi, ec_hdr, pnum, 0, UBI_EC_HDR_SIZE);
1217 err = paranoid_check_ec_hdr(ubi, pnum, ec_hdr);
1226 * @ubi: UBI device description object
1233 static int paranoid_check_vid_hdr(const struct ubi_device *ubi, int pnum,
1246 err = validate_vid_hdr(ubi, vid_hdr);
1264 * @ubi: UBI device description object
1270 static int paranoid_check_peb_vid_hdr(const struct ubi_device *ubi, int pnum)
1277 vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
1281 p = (char *)vid_hdr - ubi->vid_hdr_shift;
1282 err = ubi_io_read(ubi, p, pnum, ubi->vid_hdr_aloffset,
1283 ubi->vid_hdr_alsize);
1299 err = paranoid_check_vid_hdr(ubi, pnum, vid_hdr);
1302 ubi_free_vid_hdr(ubi, vid_hdr);
1308 * @ubi: UBI device description object
1318 int ubi_dbg_check_write(struct ubi_device *ubi, const void *buf, int pnum,
1323 mutex_lock(&ubi->dbg_buf_mutex);
1324 err = ubi_io_read(ubi, ubi->dbg_peb_buf, pnum, offset, len);
1330 uint8_t c1 = ((uint8_t *)ubi->dbg_peb_buf)[i];
1347 ubi->dbg_peb_buf + i, dump_len, 1);
1352 mutex_unlock(&ubi->dbg_buf_mutex);
1357 mutex_unlock(&ubi->dbg_buf_mutex);
1363 * @ubi: UBI device description object
1372 int ubi_dbg_check_all_ff(struct ubi_device *ubi, int pnum, int offset, int len)
1376 loff_t addr = (loff_t)pnum * ubi->peb_size + offset;
1378 mutex_lock(&ubi->dbg_buf_mutex);
1379 err = ubi->mtd->read(ubi->mtd, addr, len, &read, ubi->dbg_peb_buf);
1386 err = check_pattern(ubi->dbg_peb_buf, 0xFF, len);
1392 mutex_unlock(&ubi->dbg_buf_mutex);
1400 ubi->dbg_peb_buf, len, 1);
1404 mutex_unlock(&ubi->dbg_buf_mutex);