inftl              37 drivers/mtd/inftlcore.c 	struct INFTLrecord *inftl;
inftl              55 drivers/mtd/inftlcore.c 	inftl = kzalloc(sizeof(*inftl), GFP_KERNEL);
inftl              57 drivers/mtd/inftlcore.c 	if (!inftl)
inftl              60 drivers/mtd/inftlcore.c 	inftl->mbd.mtd = mtd;
inftl              61 drivers/mtd/inftlcore.c 	inftl->mbd.devnum = -1;
inftl              63 drivers/mtd/inftlcore.c 	inftl->mbd.tr = tr;
inftl              65 drivers/mtd/inftlcore.c 	if (INFTL_mount(inftl) < 0) {
inftl              67 drivers/mtd/inftlcore.c 		kfree(inftl);
inftl              74 drivers/mtd/inftlcore.c 	inftl->cylinders = 1024;
inftl              75 drivers/mtd/inftlcore.c 	inftl->heads = 16;
inftl              77 drivers/mtd/inftlcore.c 	temp = inftl->cylinders * inftl->heads;
inftl              78 drivers/mtd/inftlcore.c 	inftl->sectors = inftl->mbd.size / temp;
inftl              79 drivers/mtd/inftlcore.c 	if (inftl->mbd.size % temp) {
inftl              80 drivers/mtd/inftlcore.c 		inftl->sectors++;
inftl              81 drivers/mtd/inftlcore.c 		temp = inftl->cylinders * inftl->sectors;
inftl              82 drivers/mtd/inftlcore.c 		inftl->heads = inftl->mbd.size / temp;
inftl              84 drivers/mtd/inftlcore.c 		if (inftl->mbd.size % temp) {
inftl              85 drivers/mtd/inftlcore.c 			inftl->heads++;
inftl              86 drivers/mtd/inftlcore.c 			temp = inftl->heads * inftl->sectors;
inftl              87 drivers/mtd/inftlcore.c 			inftl->cylinders = inftl->mbd.size / temp;
inftl              91 drivers/mtd/inftlcore.c 	if (inftl->mbd.size != inftl->heads * inftl->cylinders * inftl->sectors) {
inftl              97 drivers/mtd/inftlcore.c 		       "match size of 0x%lx.\n", inftl->mbd.size);
inftl             100 drivers/mtd/inftlcore.c 			inftl->cylinders, inftl->heads , inftl->sectors,
inftl             101 drivers/mtd/inftlcore.c 			(long)inftl->cylinders * (long)inftl->heads *
inftl             102 drivers/mtd/inftlcore.c 			(long)inftl->sectors );
inftl             105 drivers/mtd/inftlcore.c 	if (add_mtd_blktrans_dev(&inftl->mbd)) {
inftl             106 drivers/mtd/inftlcore.c 		kfree(inftl->PUtable);
inftl             107 drivers/mtd/inftlcore.c 		kfree(inftl->VUtable);
inftl             108 drivers/mtd/inftlcore.c 		kfree(inftl);
inftl             112 drivers/mtd/inftlcore.c 	printk(KERN_INFO "INFTL: Found new inftl%c\n", inftl->mbd.devnum + 'a');
inftl             119 drivers/mtd/inftlcore.c 	struct INFTLrecord *inftl = (void *)dev;
inftl             125 drivers/mtd/inftlcore.c 	kfree(inftl->PUtable);
inftl             126 drivers/mtd/inftlcore.c 	kfree(inftl->VUtable);
inftl             198 drivers/mtd/inftlcore.c static u16 INFTL_findfreeblock(struct INFTLrecord *inftl, int desperate)
inftl             200 drivers/mtd/inftlcore.c 	u16 pot = inftl->LastFreeEUN;
inftl             201 drivers/mtd/inftlcore.c 	int silly = inftl->nb_blocks;
inftl             204 drivers/mtd/inftlcore.c 			inftl, desperate);
inftl             210 drivers/mtd/inftlcore.c 	if (!desperate && inftl->numfreeEUNs < 2) {
inftl             212 drivers/mtd/inftlcore.c 				inftl->numfreeEUNs);
inftl             218 drivers/mtd/inftlcore.c 		if (inftl->PUtable[pot] == BLOCK_FREE) {
inftl             219 drivers/mtd/inftlcore.c 			inftl->LastFreeEUN = pot;
inftl             223 drivers/mtd/inftlcore.c 		if (++pot > inftl->lastEUN)
inftl             228 drivers/mtd/inftlcore.c 				"EUN range = %d - %d\n", 0, inftl->LastFreeEUN);
inftl             231 drivers/mtd/inftlcore.c 	} while (pot != inftl->LastFreeEUN);
inftl             236 drivers/mtd/inftlcore.c static u16 INFTL_foldchain(struct INFTLrecord *inftl, unsigned thisVUC, unsigned pendingblock)
inftl             241 drivers/mtd/inftlcore.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             248 drivers/mtd/inftlcore.c 			inftl, thisVUC, pendingblock);
inftl             253 drivers/mtd/inftlcore.c 	thisEUN = targetEUN = inftl->VUtable[thisVUC];
inftl             266 drivers/mtd/inftlcore.c 	while (thisEUN < inftl->nb_blocks) {
inftl             267 drivers/mtd/inftlcore.c 		for (block = 0; block < inftl->EraseSize/SECTORSIZE; block ++) {
inftl             272 drivers/mtd/inftlcore.c 			if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize)
inftl             303 drivers/mtd/inftlcore.c 		thisEUN = inftl->PUtable[thisEUN];
inftl             313 drivers/mtd/inftlcore.c 	for (block = 0; block < inftl->EraseSize/SECTORSIZE ; block++) {
inftl             322 drivers/mtd/inftlcore.c 		    (thisVUC * (inftl->EraseSize / SECTORSIZE) + block))) {
inftl             334 drivers/mtd/inftlcore.c 			       (inftl->EraseSize * BlockMap[block]) + (block * SECTORSIZE),
inftl             340 drivers/mtd/inftlcore.c 				       (inftl->EraseSize * BlockMap[block]) + (block * SECTORSIZE),
inftl             350 drivers/mtd/inftlcore.c 		inftl_write(inftl->mbd.mtd, (inftl->EraseSize * targetEUN) +
inftl             365 drivers/mtd/inftlcore.c 		thisEUN = inftl->VUtable[thisVUC];
inftl             367 drivers/mtd/inftlcore.c 		while (inftl->PUtable[thisEUN] != BLOCK_NIL) {
inftl             369 drivers/mtd/inftlcore.c 			thisEUN = inftl->PUtable[thisEUN];
inftl             377 drivers/mtd/inftlcore.c 		inftl->PUtable[prevEUN] = BLOCK_NIL;
inftl             380 drivers/mtd/inftlcore.c 		if (INFTL_formatblock(inftl, thisEUN) < 0) {
inftl             384 drivers/mtd/inftlcore.c 			inftl->PUtable[thisEUN] = BLOCK_RESERVED;
inftl             387 drivers/mtd/inftlcore.c 			inftl->PUtable[thisEUN] = BLOCK_FREE;
inftl             388 drivers/mtd/inftlcore.c 			inftl->numfreeEUNs++;
inftl             395 drivers/mtd/inftlcore.c static u16 INFTL_makefreeblock(struct INFTLrecord *inftl, unsigned pendingblock)
inftl             410 drivers/mtd/inftlcore.c 		"pending=%d)\n", inftl, pendingblock);
inftl             412 drivers/mtd/inftlcore.c 	for (chain = 0; chain < inftl->nb_blocks; chain++) {
inftl             413 drivers/mtd/inftlcore.c 		EUN = inftl->VUtable[chain];
inftl             416 drivers/mtd/inftlcore.c 		while (EUN <= inftl->lastEUN) {
inftl             418 drivers/mtd/inftlcore.c 			EUN = inftl->PUtable[EUN];
inftl             444 drivers/mtd/inftlcore.c 	return INFTL_foldchain(inftl, LongestChain, pendingblock);
inftl             460 drivers/mtd/inftlcore.c static inline u16 INFTL_findwriteunit(struct INFTLrecord *inftl, unsigned block)
inftl             462 drivers/mtd/inftlcore.c 	unsigned int thisVUC = block / (inftl->EraseSize / SECTORSIZE);
inftl             464 drivers/mtd/inftlcore.c 	unsigned long blockofs = (block * SECTORSIZE) & (inftl->EraseSize -1);
inftl             465 drivers/mtd/inftlcore.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             473 drivers/mtd/inftlcore.c 			inftl, block);
inftl             481 drivers/mtd/inftlcore.c 		thisEUN = inftl->VUtable[thisVUC];
inftl             484 drivers/mtd/inftlcore.c 		while (thisEUN <= inftl->lastEUN) {
inftl             485 drivers/mtd/inftlcore.c 			inftl_read_oob(mtd, (thisEUN * inftl->EraseSize) +
inftl             517 drivers/mtd/inftlcore.c 			thisEUN = inftl->PUtable[thisEUN];
inftl             529 drivers/mtd/inftlcore.c 		writeEUN = INFTL_findfreeblock(inftl, 0);
inftl             537 drivers/mtd/inftlcore.c 			thisEUN = INFTL_makefreeblock(inftl, block);
inftl             546 drivers/mtd/inftlcore.c 			writeEUN = INFTL_findfreeblock(inftl, 1);
inftl             558 drivers/mtd/inftlcore.c 				INFTL_dumptables(inftl);
inftl             559 drivers/mtd/inftlcore.c 				INFTL_dumpVUchains(inftl);
inftl             571 drivers/mtd/inftlcore.c 		thisEUN = inftl->VUtable[thisVUC];
inftl             573 drivers/mtd/inftlcore.c 			inftl_read_oob(mtd, thisEUN * inftl->EraseSize
inftl             579 drivers/mtd/inftlcore.c 		prev_block = inftl->VUtable[thisVUC];
inftl             580 drivers/mtd/inftlcore.c 		if (prev_block < inftl->nb_blocks)
inftl             581 drivers/mtd/inftlcore.c 			prev_block -= inftl->firstEUN;
inftl             595 drivers/mtd/inftlcore.c 		inftl_write_oob(mtd, writeEUN * inftl->EraseSize + 8, 8,
inftl             606 drivers/mtd/inftlcore.c 		inftl_write_oob(mtd, writeEUN * inftl->EraseSize +
inftl             609 drivers/mtd/inftlcore.c 		inftl->PUtable[writeEUN] = inftl->VUtable[thisVUC];
inftl             610 drivers/mtd/inftlcore.c 		inftl->VUtable[thisVUC] = writeEUN;
inftl             612 drivers/mtd/inftlcore.c 		inftl->numfreeEUNs--;
inftl             625 drivers/mtd/inftlcore.c static void INFTL_trydeletechain(struct INFTLrecord *inftl, unsigned thisVUC)
inftl             627 drivers/mtd/inftlcore.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             636 drivers/mtd/inftlcore.c 		"thisVUC=%d)\n", inftl, thisVUC);
inftl             641 drivers/mtd/inftlcore.c 	thisEUN = inftl->VUtable[thisVUC];
inftl             653 drivers/mtd/inftlcore.c 	while (thisEUN < inftl->nb_blocks) {
inftl             654 drivers/mtd/inftlcore.c 		for (block = 0; block < inftl->EraseSize/SECTORSIZE; block++) {
inftl             658 drivers/mtd/inftlcore.c 			if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize)
inftl             688 drivers/mtd/inftlcore.c 		thisEUN = inftl->PUtable[thisEUN];
inftl             691 drivers/mtd/inftlcore.c 	for (block = 0; block < inftl->EraseSize/SECTORSIZE; block++)
inftl             702 drivers/mtd/inftlcore.c 		u16 *prevEUN = &inftl->VUtable[thisVUC];
inftl             712 drivers/mtd/inftlcore.c 		while (inftl->PUtable[thisEUN] != BLOCK_NIL) {
inftl             713 drivers/mtd/inftlcore.c 			BUG_ON(thisEUN >= inftl->nb_blocks);
inftl             715 drivers/mtd/inftlcore.c 			prevEUN = &inftl->PUtable[thisEUN];
inftl             722 drivers/mtd/inftlcore.c 		if (INFTL_formatblock(inftl, thisEUN) < 0) {
inftl             726 drivers/mtd/inftlcore.c 			inftl->PUtable[thisEUN] = BLOCK_RESERVED;
inftl             729 drivers/mtd/inftlcore.c 			inftl->PUtable[thisEUN] = BLOCK_FREE;
inftl             730 drivers/mtd/inftlcore.c 			inftl->numfreeEUNs++;
inftl             742 drivers/mtd/inftlcore.c 	inftl->VUtable[thisVUC] = BLOCK_NIL;
inftl             745 drivers/mtd/inftlcore.c static int INFTL_deleteblock(struct INFTLrecord *inftl, unsigned block)
inftl             747 drivers/mtd/inftlcore.c 	unsigned int thisEUN = inftl->VUtable[block / (inftl->EraseSize / SECTORSIZE)];
inftl             748 drivers/mtd/inftlcore.c 	unsigned long blockofs = (block * SECTORSIZE) & (inftl->EraseSize - 1);
inftl             749 drivers/mtd/inftlcore.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             756 drivers/mtd/inftlcore.c 		"block=%d)\n", inftl, block);
inftl             758 drivers/mtd/inftlcore.c 	while (thisEUN < inftl->nb_blocks) {
inftl             759 drivers/mtd/inftlcore.c 		if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize) +
inftl             784 drivers/mtd/inftlcore.c 				block / (inftl->EraseSize / SECTORSIZE));
inftl             787 drivers/mtd/inftlcore.c 		thisEUN = inftl->PUtable[thisEUN];
inftl             792 drivers/mtd/inftlcore.c 		loff_t ptr = (thisEUN * inftl->EraseSize) + blockofs;
inftl             799 drivers/mtd/inftlcore.c 		INFTL_trydeletechain(inftl, block / (inftl->EraseSize / SECTORSIZE));
inftl             807 drivers/mtd/inftlcore.c 	struct INFTLrecord *inftl = (void *)mbd;
inftl             809 drivers/mtd/inftlcore.c 	unsigned long blockofs = (block * SECTORSIZE) & (inftl->EraseSize - 1);
inftl             815 drivers/mtd/inftlcore.c 		"buffer=%p)\n", inftl, block, buffer);
inftl             823 drivers/mtd/inftlcore.c 		writeEUN = INFTL_findwriteunit(inftl, block);
inftl             838 drivers/mtd/inftlcore.c 		inftl_write(inftl->mbd.mtd, (writeEUN * inftl->EraseSize) +
inftl             846 drivers/mtd/inftlcore.c 		INFTL_deleteblock(inftl, block);
inftl             855 drivers/mtd/inftlcore.c 	struct INFTLrecord *inftl = (void *)mbd;
inftl             856 drivers/mtd/inftlcore.c 	unsigned int thisEUN = inftl->VUtable[block / (inftl->EraseSize / SECTORSIZE)];
inftl             857 drivers/mtd/inftlcore.c 	unsigned long blockofs = (block * SECTORSIZE) & (inftl->EraseSize - 1);
inftl             858 drivers/mtd/inftlcore.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             865 drivers/mtd/inftlcore.c 		"buffer=%p)\n", inftl, block, buffer);
inftl             867 drivers/mtd/inftlcore.c 	while (thisEUN < inftl->nb_blocks) {
inftl             868 drivers/mtd/inftlcore.c 		if (inftl_read_oob(mtd, (thisEUN * inftl->EraseSize) +
inftl             893 drivers/mtd/inftlcore.c 				block / (inftl->EraseSize / SECTORSIZE));
inftl             897 drivers/mtd/inftlcore.c 		thisEUN = inftl->PUtable[thisEUN];
inftl             906 drivers/mtd/inftlcore.c 		loff_t ptr = (thisEUN * inftl->EraseSize) + blockofs;
inftl             918 drivers/mtd/inftlcore.c 	struct INFTLrecord *inftl = (void *)dev;
inftl             920 drivers/mtd/inftlcore.c 	geo->heads = inftl->heads;
inftl             921 drivers/mtd/inftlcore.c 	geo->sectors = inftl->sectors;
inftl             922 drivers/mtd/inftlcore.c 	geo->cylinders = inftl->cylinders;
inftl              31 drivers/mtd/inftlmount.c static int find_boot_record(struct INFTLrecord *inftl)
inftl              37 drivers/mtd/inftlmount.c 	struct INFTLMediaHeader *mh = &inftl->MediaHdr;
inftl              38 drivers/mtd/inftlmount.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl              42 drivers/mtd/inftlmount.c 	pr_debug("INFTL: find_boot_record(inftl=%p)\n", inftl);
inftl              49 drivers/mtd/inftlmount.c 	inftl->EraseSize = inftl->mbd.mtd->erasesize;
inftl              50 drivers/mtd/inftlmount.c         inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize;
inftl              52 drivers/mtd/inftlmount.c 	inftl->MediaUnit = BLOCK_NIL;
inftl              55 drivers/mtd/inftlmount.c 	for (block = 0; block < inftl->nb_blocks; block++) {
inftl              62 drivers/mtd/inftlmount.c 		ret = mtd_read(mtd, block * inftl->EraseSize, SECTORSIZE,
inftl              72 drivers/mtd/inftlmount.c 					block * inftl->EraseSize,
inftl              73 drivers/mtd/inftlmount.c 					inftl->mbd.mtd->index, ret);
inftl              89 drivers/mtd/inftlmount.c 				     block * inftl->EraseSize + SECTORSIZE + 8,
inftl              94 drivers/mtd/inftlmount.c 				"(err %d)\n", block * inftl->EraseSize,
inftl              95 drivers/mtd/inftlmount.c 				inftl->mbd.mtd->index, ret);
inftl             107 drivers/mtd/inftlmount.c 		mtd_read(mtd, block * inftl->EraseSize + 4096, SECTORSIZE,
inftl             169 drivers/mtd/inftlmount.c 			inftl->EraseSize = inftl->mbd.mtd->erasesize <<
inftl             171 drivers/mtd/inftlmount.c 			inftl->nb_blocks = (u32)inftl->mbd.mtd->size / inftl->EraseSize;
inftl             196 drivers/mtd/inftlmount.c 				struct erase_info *instr = &inftl->instr;
inftl             205 drivers/mtd/inftlmount.c 				instr->addr = ip->Reserved0 * inftl->EraseSize;
inftl             206 drivers/mtd/inftlmount.c 				instr->len = inftl->EraseSize;
inftl             236 drivers/mtd/inftlmount.c 		inftl->nb_boot_blocks = ip->firstUnit;
inftl             237 drivers/mtd/inftlmount.c 		inftl->numvunits = ip->virtualUnits;
inftl             238 drivers/mtd/inftlmount.c 		if (inftl->numvunits > (inftl->nb_blocks -
inftl             239 drivers/mtd/inftlmount.c 		    inftl->nb_boot_blocks - 2)) {
inftl             243 drivers/mtd/inftlmount.c 				inftl->numvunits, inftl->nb_blocks,
inftl             244 drivers/mtd/inftlmount.c 				inftl->nb_boot_blocks);
inftl             248 drivers/mtd/inftlmount.c 		inftl->mbd.size  = inftl->numvunits *
inftl             249 drivers/mtd/inftlmount.c 			(inftl->EraseSize / SECTORSIZE);
inftl             255 drivers/mtd/inftlmount.c 		inftl->firstEUN = ip->firstUnit;
inftl             256 drivers/mtd/inftlmount.c 		inftl->lastEUN = ip->lastUnit;
inftl             257 drivers/mtd/inftlmount.c 		inftl->nb_blocks = ip->lastUnit + 1;
inftl             260 drivers/mtd/inftlmount.c 		inftl->PUtable = kmalloc_array(inftl->nb_blocks, sizeof(u16),
inftl             262 drivers/mtd/inftlmount.c 		if (!inftl->PUtable) {
inftl             265 drivers/mtd/inftlmount.c 				inftl->nb_blocks * sizeof(u16));
inftl             269 drivers/mtd/inftlmount.c 		inftl->VUtable = kmalloc_array(inftl->nb_blocks, sizeof(u16),
inftl             271 drivers/mtd/inftlmount.c 		if (!inftl->VUtable) {
inftl             272 drivers/mtd/inftlmount.c 			kfree(inftl->PUtable);
inftl             275 drivers/mtd/inftlmount.c 				inftl->nb_blocks * sizeof(u16));
inftl             280 drivers/mtd/inftlmount.c 		for (i = 0; i < inftl->nb_boot_blocks; i++)
inftl             281 drivers/mtd/inftlmount.c 			inftl->PUtable[i] = BLOCK_RESERVED;
inftl             283 drivers/mtd/inftlmount.c 		for (; i < inftl->nb_blocks; i++)
inftl             284 drivers/mtd/inftlmount.c 			inftl->PUtable[i] = BLOCK_NOTEXPLORED;
inftl             287 drivers/mtd/inftlmount.c 		inftl->PUtable[block] = BLOCK_RESERVED;
inftl             290 drivers/mtd/inftlmount.c 		for (i = 0; i < inftl->nb_blocks; i++) {
inftl             294 drivers/mtd/inftlmount.c 			for (physblock = 0; physblock < inftl->EraseSize; physblock += inftl->mbd.mtd->erasesize) {
inftl             295 drivers/mtd/inftlmount.c 				if (mtd_block_isbad(inftl->mbd.mtd,
inftl             296 drivers/mtd/inftlmount.c 						    i * inftl->EraseSize + physblock))
inftl             297 drivers/mtd/inftlmount.c 					inftl->PUtable[i] = BLOCK_RESERVED;
inftl             301 drivers/mtd/inftlmount.c 		inftl->MediaUnit = block;
inftl             323 drivers/mtd/inftlmount.c static int check_free_sectors(struct INFTLrecord *inftl, unsigned int address,
inftl             326 drivers/mtd/inftlmount.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             368 drivers/mtd/inftlmount.c int INFTL_formatblock(struct INFTLrecord *inftl, int block)
inftl             372 drivers/mtd/inftlmount.c 	struct erase_info *instr = &inftl->instr;
inftl             373 drivers/mtd/inftlmount.c 	struct mtd_info *mtd = inftl->mbd.mtd;
inftl             376 drivers/mtd/inftlmount.c 	pr_debug("INFTL: INFTL_formatblock(inftl=%p,block=%d)\n", inftl, block);
inftl             384 drivers/mtd/inftlmount.c 	instr->addr = block * inftl->EraseSize;
inftl             385 drivers/mtd/inftlmount.c 	instr->len = inftl->mbd.mtd->erasesize;
inftl             389 drivers/mtd/inftlmount.c 	for (physblock = 0; physblock < inftl->EraseSize;
inftl             393 drivers/mtd/inftlmount.c 		ret = mtd_erase(inftl->mbd.mtd, instr);
inftl             405 drivers/mtd/inftlmount.c 		if (check_free_sectors(inftl, instr->addr, instr->len, 1) != 0)
inftl             415 drivers/mtd/inftlmount.c 	instr->addr = block * inftl->EraseSize + SECTORSIZE * 2;
inftl             422 drivers/mtd/inftlmount.c 	mtd_block_markbad(inftl->mbd.mtd, instr->addr);
inftl             434 drivers/mtd/inftlmount.c static void format_chain(struct INFTLrecord *inftl, unsigned int first_block)
inftl             442 drivers/mtd/inftlmount.c 		block1 = inftl->PUtable[block];
inftl             445 drivers/mtd/inftlmount.c 		if (INFTL_formatblock(inftl, block) < 0) {
inftl             449 drivers/mtd/inftlmount.c 			inftl->PUtable[block] = BLOCK_RESERVED;
inftl             451 drivers/mtd/inftlmount.c 			inftl->PUtable[block] = BLOCK_FREE;
inftl             457 drivers/mtd/inftlmount.c 		if (block == BLOCK_NIL || block >= inftl->lastEUN)