Lines Matching refs:nftl

25 static int find_boot_record(struct NFTLrecord *nftl)  in find_boot_record()  argument
31 struct NFTLMediaHeader *mh = &nftl->MediaHdr; in find_boot_record()
32 struct mtd_info *mtd = nftl->mbd.mtd; in find_boot_record()
41 nftl->EraseSize = nftl->mbd.mtd->erasesize; in find_boot_record()
42 nftl->nb_blocks = (u32)nftl->mbd.mtd->size / nftl->EraseSize; in find_boot_record()
44 nftl->MediaUnit = BLOCK_NIL; in find_boot_record()
45 nftl->SpareMediaUnit = BLOCK_NIL; in find_boot_record()
48 for (block = 0; block < nftl->nb_blocks; block++) { in find_boot_record()
53 ret = mtd_read(mtd, block * nftl->EraseSize, SECTORSIZE, in find_boot_record()
62 block * nftl->EraseSize, nftl->mbd.mtd->index, ret); in find_boot_record()
73 block * nftl->EraseSize, nftl->mbd.mtd->index); in find_boot_record()
79 ret = nftl_read_oob(mtd, block * nftl->EraseSize + in find_boot_record()
84 block * nftl->EraseSize, nftl->mbd.mtd->index, ret); in find_boot_record()
94 block * nftl->EraseSize, nftl->mbd.mtd->index, in find_boot_record()
100 ret = mtd->read(mtd, block * nftl->EraseSize, SECTORSIZE, in find_boot_record()
104 block * nftl->EraseSize, nftl->mbd.mtd->index, ret); in find_boot_record()
111 block * nftl->EraseSize, nftl->mbd.mtd->index); in find_boot_record()
123 nftl->MediaUnit * nftl->EraseSize, block * nftl->EraseSize); in find_boot_record()
132 nftl->SpareMediaUnit = block; in find_boot_record()
135 nftl->ReplUnitTable[block] = BLOCK_RESERVED; in find_boot_record()
159 nftl->EraseSize = nftl->mbd.mtd->erasesize << (0xff - mh->UnitSizeFactor); in find_boot_record()
160 nftl->nb_blocks = (u32)nftl->mbd.mtd->size / nftl->EraseSize; in find_boot_record()
163 nftl->nb_boot_blocks = le16_to_cpu(mh->FirstPhysicalEUN); in find_boot_record()
164 if ((nftl->nb_boot_blocks + 2) >= nftl->nb_blocks) { in find_boot_record()
167 nftl->nb_boot_blocks, nftl->nb_blocks); in find_boot_record()
171 nftl->numvunits = le32_to_cpu(mh->FormattedSize) / nftl->EraseSize; in find_boot_record()
172 if (nftl->numvunits > (nftl->nb_blocks - nftl->nb_boot_blocks - 2)) { in find_boot_record()
175 nftl->numvunits, nftl->nb_blocks, nftl->nb_boot_blocks); in find_boot_record()
179 nftl->mbd.size = nftl->numvunits * (nftl->EraseSize / SECTORSIZE); in find_boot_record()
183 nftl->nb_blocks = le16_to_cpu(mh->NumEraseUnits) + le16_to_cpu(mh->FirstPhysicalEUN); in find_boot_record()
186 nftl->lastEUN = nftl->nb_blocks - 1; in find_boot_record()
189 nftl->EUNtable = kmalloc_array(nftl->nb_blocks, sizeof(u16), in find_boot_record()
191 if (!nftl->EUNtable) in find_boot_record()
194 nftl->ReplUnitTable = kmalloc_array(nftl->nb_blocks, in find_boot_record()
197 if (!nftl->ReplUnitTable) { in find_boot_record()
198 kfree(nftl->EUNtable); in find_boot_record()
203 for (i = 0; i < nftl->nb_boot_blocks; i++) in find_boot_record()
204 nftl->ReplUnitTable[i] = BLOCK_RESERVED; in find_boot_record()
206 for (; i < nftl->nb_blocks; i++) { in find_boot_record()
207 nftl->ReplUnitTable[i] = BLOCK_NOTEXPLORED; in find_boot_record()
211 nftl->ReplUnitTable[block] = BLOCK_RESERVED; in find_boot_record()
214 for (i = 0; i < nftl->nb_blocks; i++) { in find_boot_record()
219 ret = mtd->read(nftl->mbd.mtd, in find_boot_record()
220 block * nftl->EraseSize + i + in find_boot_record()
226 kfree(nftl->ReplUnitTable); in find_boot_record()
227 kfree(nftl->EUNtable); in find_boot_record()
233 nftl->ReplUnitTable[i] = BLOCK_RESERVED; in find_boot_record()
235 if (mtd_block_isbad(nftl->mbd.mtd, in find_boot_record()
236 i * nftl->EraseSize)) in find_boot_record()
237 nftl->ReplUnitTable[i] = BLOCK_RESERVED; in find_boot_record()
240 nftl->MediaUnit = block; in find_boot_record()
259 static int check_free_sectors(struct NFTLrecord *nftl, unsigned int address, int len, in check_free_sectors() argument
262 struct mtd_info *mtd = nftl->mbd.mtd; in check_free_sectors()
302 int NFTL_formatblock(struct NFTLrecord *nftl, int block) in NFTL_formatblock() argument
307 struct erase_info *instr = &nftl->instr; in NFTL_formatblock()
308 struct mtd_info *mtd = nftl->mbd.mtd; in NFTL_formatblock()
311 if (nftl_read_oob(mtd, block * nftl->EraseSize + SECTORSIZE + 8, in NFTL_formatblock()
326 instr->addr = block * nftl->EraseSize; in NFTL_formatblock()
327 instr->len = nftl->EraseSize; in NFTL_formatblock()
345 if (check_free_sectors(nftl, instr->addr, nftl->EraseSize, 1) != 0) in NFTL_formatblock()
349 if (nftl_write_oob(mtd, block * nftl->EraseSize + SECTORSIZE + in NFTL_formatblock()
356 mtd_block_markbad(nftl->mbd.mtd, instr->addr); in NFTL_formatblock()
369 static void check_sectors_in_chain(struct NFTLrecord *nftl, unsigned int first_block) in check_sectors_in_chain() argument
371 struct mtd_info *mtd = nftl->mbd.mtd; in check_sectors_in_chain()
377 sectors_per_block = nftl->EraseSize / SECTORSIZE; in check_sectors_in_chain()
382 block * nftl->EraseSize + i * SECTORSIZE, in check_sectors_in_chain()
393 check_free_sectors(nftl, block * nftl->EraseSize + i * SECTORSIZE, in check_sectors_in_chain()
403 nftl->EraseSize + in check_sectors_in_chain()
414 block = nftl->ReplUnitTable[block]; in check_sectors_in_chain()
415 if (!(block == BLOCK_NIL || block < nftl->nb_blocks)) in check_sectors_in_chain()
417 if (block == BLOCK_NIL || block >= nftl->nb_blocks) in check_sectors_in_chain()
423 static int calc_chain_length(struct NFTLrecord *nftl, unsigned int first_block) in calc_chain_length() argument
431 if (length >= nftl->nb_blocks) { in calc_chain_length()
436 block = nftl->ReplUnitTable[block]; in calc_chain_length()
437 if (!(block == BLOCK_NIL || block < nftl->nb_blocks)) in calc_chain_length()
439 if (block == BLOCK_NIL || block >= nftl->nb_blocks) in calc_chain_length()
455 static void format_chain(struct NFTLrecord *nftl, unsigned int first_block) in format_chain() argument
462 block1 = nftl->ReplUnitTable[block]; in format_chain()
465 if (NFTL_formatblock(nftl, block) < 0) { in format_chain()
467 nftl->ReplUnitTable[block] = BLOCK_RESERVED; in format_chain()
469 nftl->ReplUnitTable[block] = BLOCK_FREE; in format_chain()
475 if (!(block == BLOCK_NIL || block < nftl->nb_blocks)) in format_chain()
477 if (block == BLOCK_NIL || block >= nftl->nb_blocks) in format_chain()
488 static int check_and_mark_free_block(struct NFTLrecord *nftl, int block) in check_and_mark_free_block() argument
490 struct mtd_info *mtd = nftl->mbd.mtd; in check_and_mark_free_block()
496 if (nftl_read_oob(mtd, block * nftl->EraseSize + SECTORSIZE + 8, 8, in check_and_mark_free_block()
504 if (check_free_sectors (nftl, block * nftl->EraseSize, nftl->EraseSize, 1) != 0) in check_and_mark_free_block()
512 block * nftl->EraseSize + SECTORSIZE + 8, 8, in check_and_mark_free_block()
518 for (i = 0; i < nftl->EraseSize; i += SECTORSIZE) { in check_and_mark_free_block()
520 if (check_free_sectors (nftl, block * nftl->EraseSize + i, in check_and_mark_free_block()
524 if (nftl_read_oob(mtd, block * nftl->EraseSize + i, in check_and_mark_free_block()
549 static int get_fold_mark(struct NFTLrecord *nftl, unsigned int block) in get_fold_mark() argument
551 struct mtd_info *mtd = nftl->mbd.mtd; in get_fold_mark()
555 if (nftl_read_oob(mtd, block * nftl->EraseSize + 2 * SECTORSIZE + 8, in get_fold_mark()