Lines Matching refs:inftl
44 static int find_boot_record(struct INFTLrecord *inftl) in find_boot_record() argument
50 struct INFTLMediaHeader *mh = &inftl->MediaHdr; in find_boot_record()
51 struct mtd_info *mtd = inftl->mbd.mtd; in find_boot_record()
55 pr_debug("INFTL: find_boot_record(inftl=%p)\n", inftl); in find_boot_record()
62 inftl->EraseSize = inftl->mbd.mtd->erasesize; in find_boot_record()
63 inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize; in find_boot_record()
65 inftl->MediaUnit = BLOCK_NIL; in find_boot_record()
68 for (block = 0; block < inftl->nb_blocks; block++) { in find_boot_record()
75 ret = mtd_read(mtd, block * inftl->EraseSize, SECTORSIZE, in find_boot_record()
85 block * inftl->EraseSize, in find_boot_record()
86 inftl->mbd.mtd->index, ret); in find_boot_record()
102 block * inftl->EraseSize + SECTORSIZE + 8, in find_boot_record()
107 "(err %d)\n", block * inftl->EraseSize, in find_boot_record()
108 inftl->mbd.mtd->index, ret); in find_boot_record()
120 mtd_read(mtd, block * inftl->EraseSize + 4096, SECTORSIZE, in find_boot_record()
182 inftl->EraseSize = inftl->mbd.mtd->erasesize << in find_boot_record()
184 inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize; in find_boot_record()
209 struct erase_info *instr = &inftl->instr; in find_boot_record()
211 instr->mtd = inftl->mbd.mtd; in find_boot_record()
220 instr->addr = ip->Reserved0 * inftl->EraseSize; in find_boot_record()
221 instr->len = inftl->EraseSize; in find_boot_record()
251 inftl->nb_boot_blocks = ip->firstUnit; in find_boot_record()
252 inftl->numvunits = ip->virtualUnits; in find_boot_record()
253 if (inftl->numvunits > (inftl->nb_blocks - in find_boot_record()
254 inftl->nb_boot_blocks - 2)) { in find_boot_record()
258 inftl->numvunits, inftl->nb_blocks, in find_boot_record()
259 inftl->nb_boot_blocks); in find_boot_record()
263 inftl->mbd.size = inftl->numvunits * in find_boot_record()
264 (inftl->EraseSize / SECTORSIZE); in find_boot_record()
270 inftl->firstEUN = ip->firstUnit; in find_boot_record()
271 inftl->lastEUN = ip->lastUnit; in find_boot_record()
272 inftl->nb_blocks = ip->lastUnit + 1; in find_boot_record()
275 inftl->PUtable = kmalloc(inftl->nb_blocks * sizeof(u16), GFP_KERNEL); in find_boot_record()
276 if (!inftl->PUtable) { in find_boot_record()
279 inftl->nb_blocks * sizeof(u16)); in find_boot_record()
283 inftl->VUtable = kmalloc(inftl->nb_blocks * sizeof(u16), GFP_KERNEL); in find_boot_record()
284 if (!inftl->VUtable) { in find_boot_record()
285 kfree(inftl->PUtable); in find_boot_record()
288 inftl->nb_blocks * sizeof(u16)); in find_boot_record()
293 for (i = 0; i < inftl->nb_boot_blocks; i++) in find_boot_record()
294 inftl->PUtable[i] = BLOCK_RESERVED; in find_boot_record()
296 for (; i < inftl->nb_blocks; i++) in find_boot_record()
297 inftl->PUtable[i] = BLOCK_NOTEXPLORED; in find_boot_record()
300 inftl->PUtable[block] = BLOCK_RESERVED; in find_boot_record()
303 for (i = 0; i < inftl->nb_blocks; i++) { in find_boot_record()
307 for (physblock = 0; physblock < inftl->EraseSize; physblock += inftl->mbd.mtd->erasesize) { in find_boot_record()
308 if (mtd_block_isbad(inftl->mbd.mtd, in find_boot_record()
309 i * inftl->EraseSize + physblock)) in find_boot_record()
310 inftl->PUtable[i] = BLOCK_RESERVED; in find_boot_record()
314 inftl->MediaUnit = block; in find_boot_record()
336 static int check_free_sectors(struct INFTLrecord *inftl, unsigned int address, in check_free_sectors() argument
339 u8 buf[SECTORSIZE + inftl->mbd.mtd->oobsize]; in check_free_sectors()
340 struct mtd_info *mtd = inftl->mbd.mtd; in check_free_sectors()
372 int INFTL_formatblock(struct INFTLrecord *inftl, int block) in INFTL_formatblock() argument
376 struct erase_info *instr = &inftl->instr; in INFTL_formatblock()
377 struct mtd_info *mtd = inftl->mbd.mtd; in INFTL_formatblock()
380 pr_debug("INFTL: INFTL_formatblock(inftl=%p,block=%d)\n", inftl, block); in INFTL_formatblock()
388 instr->mtd = inftl->mbd.mtd; in INFTL_formatblock()
389 instr->addr = block * inftl->EraseSize; in INFTL_formatblock()
390 instr->len = inftl->mbd.mtd->erasesize; in INFTL_formatblock()
394 for (physblock = 0; physblock < inftl->EraseSize; in INFTL_formatblock()
396 mtd_erase(inftl->mbd.mtd, instr); in INFTL_formatblock()
409 if (check_free_sectors(inftl, instr->addr, instr->len, 1) != 0) in INFTL_formatblock()
419 instr->addr = block * inftl->EraseSize + SECTORSIZE * 2; in INFTL_formatblock()
426 mtd_block_markbad(inftl->mbd.mtd, instr->addr); in INFTL_formatblock()
438 static void format_chain(struct INFTLrecord *inftl, unsigned int first_block) in format_chain() argument
446 block1 = inftl->PUtable[block]; in format_chain()
449 if (INFTL_formatblock(inftl, block) < 0) { in format_chain()
453 inftl->PUtable[block] = BLOCK_RESERVED; in format_chain()
455 inftl->PUtable[block] = BLOCK_FREE; in format_chain()
461 if (block == BLOCK_NIL || block >= inftl->lastEUN) in format_chain()