Lines Matching refs:inftl
31 static int find_boot_record(struct INFTLrecord *inftl) in find_boot_record() argument
37 struct INFTLMediaHeader *mh = &inftl->MediaHdr; in find_boot_record()
38 struct mtd_info *mtd = inftl->mbd.mtd; in find_boot_record()
42 pr_debug("INFTL: find_boot_record(inftl=%p)\n", inftl); in find_boot_record()
49 inftl->EraseSize = inftl->mbd.mtd->erasesize; in find_boot_record()
50 inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize; in find_boot_record()
52 inftl->MediaUnit = BLOCK_NIL; in find_boot_record()
55 for (block = 0; block < inftl->nb_blocks; block++) { in find_boot_record()
62 ret = mtd_read(mtd, block * inftl->EraseSize, SECTORSIZE, in find_boot_record()
72 block * inftl->EraseSize, in find_boot_record()
73 inftl->mbd.mtd->index, ret); in find_boot_record()
89 block * inftl->EraseSize + SECTORSIZE + 8, in find_boot_record()
94 "(err %d)\n", block * inftl->EraseSize, in find_boot_record()
95 inftl->mbd.mtd->index, ret); in find_boot_record()
107 mtd_read(mtd, block * inftl->EraseSize + 4096, SECTORSIZE, in find_boot_record()
169 inftl->EraseSize = inftl->mbd.mtd->erasesize << in find_boot_record()
171 inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize; in find_boot_record()
196 struct erase_info *instr = &inftl->instr; in find_boot_record()
205 instr->addr = ip->Reserved0 * inftl->EraseSize; in find_boot_record()
206 instr->len = inftl->EraseSize; in find_boot_record()
236 inftl->nb_boot_blocks = ip->firstUnit; in find_boot_record()
237 inftl->numvunits = ip->virtualUnits; in find_boot_record()
238 if (inftl->numvunits > (inftl->nb_blocks - in find_boot_record()
239 inftl->nb_boot_blocks - 2)) { in find_boot_record()
243 inftl->numvunits, inftl->nb_blocks, in find_boot_record()
244 inftl->nb_boot_blocks); in find_boot_record()
248 inftl->mbd.size = inftl->numvunits * in find_boot_record()
249 (inftl->EraseSize / SECTORSIZE); in find_boot_record()
255 inftl->firstEUN = ip->firstUnit; in find_boot_record()
256 inftl->lastEUN = ip->lastUnit; in find_boot_record()
257 inftl->nb_blocks = ip->lastUnit + 1; in find_boot_record()
260 inftl->PUtable = kmalloc_array(inftl->nb_blocks, sizeof(u16), in find_boot_record()
262 if (!inftl->PUtable) { in find_boot_record()
265 inftl->nb_blocks * sizeof(u16)); in find_boot_record()
269 inftl->VUtable = kmalloc_array(inftl->nb_blocks, sizeof(u16), in find_boot_record()
271 if (!inftl->VUtable) { in find_boot_record()
272 kfree(inftl->PUtable); in find_boot_record()
275 inftl->nb_blocks * sizeof(u16)); in find_boot_record()
280 for (i = 0; i < inftl->nb_boot_blocks; i++) in find_boot_record()
281 inftl->PUtable[i] = BLOCK_RESERVED; in find_boot_record()
283 for (; i < inftl->nb_blocks; i++) in find_boot_record()
284 inftl->PUtable[i] = BLOCK_NOTEXPLORED; in find_boot_record()
287 inftl->PUtable[block] = BLOCK_RESERVED; in find_boot_record()
290 for (i = 0; i < inftl->nb_blocks; i++) { in find_boot_record()
294 for (physblock = 0; physblock < inftl->EraseSize; physblock += inftl->mbd.mtd->erasesize) { in find_boot_record()
295 if (mtd_block_isbad(inftl->mbd.mtd, in find_boot_record()
296 i * inftl->EraseSize + physblock)) in find_boot_record()
297 inftl->PUtable[i] = BLOCK_RESERVED; in find_boot_record()
301 inftl->MediaUnit = block; in find_boot_record()
323 static int check_free_sectors(struct INFTLrecord *inftl, unsigned int address, in check_free_sectors() argument
326 struct mtd_info *mtd = inftl->mbd.mtd; in check_free_sectors()
368 int INFTL_formatblock(struct INFTLrecord *inftl, int block) in INFTL_formatblock() argument
372 struct erase_info *instr = &inftl->instr; in INFTL_formatblock()
373 struct mtd_info *mtd = inftl->mbd.mtd; in INFTL_formatblock()
376 pr_debug("INFTL: INFTL_formatblock(inftl=%p,block=%d)\n", inftl, block); in INFTL_formatblock()
384 instr->addr = block * inftl->EraseSize; in INFTL_formatblock()
385 instr->len = inftl->mbd.mtd->erasesize; in INFTL_formatblock()
389 for (physblock = 0; physblock < inftl->EraseSize; in INFTL_formatblock()
393 ret = mtd_erase(inftl->mbd.mtd, instr); in INFTL_formatblock()
405 if (check_free_sectors(inftl, instr->addr, instr->len, 1) != 0) in INFTL_formatblock()
415 instr->addr = block * inftl->EraseSize + SECTORSIZE * 2; in INFTL_formatblock()
422 mtd_block_markbad(inftl->mbd.mtd, instr->addr); in INFTL_formatblock()
434 static void format_chain(struct INFTLrecord *inftl, unsigned int first_block) in format_chain() argument
442 block1 = inftl->PUtable[block]; in format_chain()
445 if (INFTL_formatblock(inftl, block) < 0) { in format_chain()
449 inftl->PUtable[block] = BLOCK_RESERVED; in format_chain()
451 inftl->PUtable[block] = BLOCK_FREE; in format_chain()
457 if (block == BLOCK_NIL || block >= inftl->lastEUN) in format_chain()