ftl               166 drivers/mtd/parsers/sharpslpart.c static int sharpsl_nand_init_ftl(struct mtd_info *mtd, struct sharpsl_ftl *ftl)
ftl               180 drivers/mtd/parsers/sharpslpart.c 	ftl->logmax = ((phymax * 95) / 100) - 1;
ftl               182 drivers/mtd/parsers/sharpslpart.c 	ftl->log2phy = kmalloc_array(ftl->logmax, sizeof(*ftl->log2phy),
ftl               184 drivers/mtd/parsers/sharpslpart.c 	if (!ftl->log2phy) {
ftl               190 drivers/mtd/parsers/sharpslpart.c 	for (i = 0; i < ftl->logmax; i++)
ftl               191 drivers/mtd/parsers/sharpslpart.c 		ftl->log2phy[i] = UINT_MAX;
ftl               207 drivers/mtd/parsers/sharpslpart.c 		if (log_num > 0 && log_num < ftl->logmax) {
ftl               208 drivers/mtd/parsers/sharpslpart.c 			if (ftl->log2phy[log_num] == UINT_MAX)
ftl               209 drivers/mtd/parsers/sharpslpart.c 				ftl->log2phy[log_num] = block_num;
ftl               214 drivers/mtd/parsers/sharpslpart.c 		phymax, ftl->logmax, phymax - ftl->logmax);
ftl               222 drivers/mtd/parsers/sharpslpart.c static void sharpsl_nand_cleanup_ftl(struct sharpsl_ftl *ftl)
ftl               224 drivers/mtd/parsers/sharpslpart.c 	kfree(ftl->log2phy);
ftl               231 drivers/mtd/parsers/sharpslpart.c 				   struct sharpsl_ftl *ftl)
ftl               243 drivers/mtd/parsers/sharpslpart.c 	if (len <= 0 || log_num >= ftl->logmax || final_log_num > log_num)
ftl               246 drivers/mtd/parsers/sharpslpart.c 	block_num = ftl->log2phy[log_num];
ftl               293 drivers/mtd/parsers/sharpslpart.c 				      struct sharpsl_ftl *ftl)
ftl               297 drivers/mtd/parsers/sharpslpart.c 	ret = sharpsl_nand_read_laddr(master, from, len, buf, ftl);
ftl               329 drivers/mtd/parsers/sharpslpart.c 	struct sharpsl_ftl ftl;
ftl               340 drivers/mtd/parsers/sharpslpart.c 	err = sharpsl_nand_init_ftl(master, &ftl);
ftl               348 drivers/mtd/parsers/sharpslpart.c 					 sizeof(buf), buf, &ftl);
ftl               354 drivers/mtd/parsers/sharpslpart.c 						 sizeof(buf), buf, &ftl);
ftl               358 drivers/mtd/parsers/sharpslpart.c 	sharpsl_nand_cleanup_ftl(&ftl);
ftl                54 drivers/mtd/sm_ftl.c static struct attribute_group *sm_create_sysfs_attributes(struct sm_ftl *ftl)
ftl                61 drivers/mtd/sm_ftl.c 	vendor = kstrndup(ftl->cis_buffer + SM_CIS_VENDOR_OFFSET,
ftl               104 drivers/mtd/sm_ftl.c static void sm_delete_sysfs_attributes(struct sm_ftl *ftl)
ftl               106 drivers/mtd/sm_ftl.c 	struct attribute **attributes = ftl->disk_attributes->attrs;
ftl               122 drivers/mtd/sm_ftl.c 	kfree(ftl->disk_attributes->attrs);
ftl               123 drivers/mtd/sm_ftl.c 	kfree(ftl->disk_attributes);
ftl               192 drivers/mtd/sm_ftl.c static loff_t sm_mkoffset(struct sm_ftl *ftl, int zone, int block, int boffset)
ftl               195 drivers/mtd/sm_ftl.c 	WARN_ON(zone < 0 || zone >= ftl->zone_count);
ftl               196 drivers/mtd/sm_ftl.c 	WARN_ON(block >= ftl->zone_size);
ftl               197 drivers/mtd/sm_ftl.c 	WARN_ON(boffset >= ftl->block_size);
ftl               202 drivers/mtd/sm_ftl.c 	return (zone * SM_MAX_ZONE_SIZE + block) * ftl->block_size + boffset;
ftl               206 drivers/mtd/sm_ftl.c static void sm_break_offset(struct sm_ftl *ftl, loff_t loffset,
ftl               210 drivers/mtd/sm_ftl.c 	*boffset = do_div(offset, ftl->block_size);
ftl               211 drivers/mtd/sm_ftl.c 	*block = do_div(offset, ftl->max_lba);
ftl               212 drivers/mtd/sm_ftl.c 	*zone = offset >= ftl->zone_count ? -1 : offset;
ftl               238 drivers/mtd/sm_ftl.c static int sm_read_sector(struct sm_ftl *ftl,
ftl               242 drivers/mtd/sm_ftl.c 	struct mtd_info *mtd = ftl->trans->mtd;
ftl               258 drivers/mtd/sm_ftl.c 	ops.mode = ftl->smallpagenand ? MTD_OPS_RAW : MTD_OPS_PLACE_OOB;
ftl               269 drivers/mtd/sm_ftl.c 		if (zone == 0 && block == ftl->cis_block && boffset ==
ftl               270 drivers/mtd/sm_ftl.c 			ftl->cis_boffset)
ftl               274 drivers/mtd/sm_ftl.c 		if (try == 3 || sm_recheck_media(ftl))
ftl               280 drivers/mtd/sm_ftl.c 	ret = mtd_read_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops);
ftl               309 drivers/mtd/sm_ftl.c 		(ftl->smallpagenand && sm_correct_sector(buffer, oob))) {
ftl               320 drivers/mtd/sm_ftl.c static int sm_write_sector(struct sm_ftl *ftl,
ftl               325 drivers/mtd/sm_ftl.c 	struct mtd_info *mtd = ftl->trans->mtd;
ftl               328 drivers/mtd/sm_ftl.c 	BUG_ON(ftl->readonly);
ftl               330 drivers/mtd/sm_ftl.c 	if (zone == 0 && (block == ftl->cis_block || block == 0)) {
ftl               335 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               338 drivers/mtd/sm_ftl.c 	ops.mode = ftl->smallpagenand ? MTD_OPS_RAW : MTD_OPS_PLACE_OOB;
ftl               345 drivers/mtd/sm_ftl.c 	ret = mtd_write_oob(mtd, sm_mkoffset(ftl, zone, block, boffset), &ops);
ftl               353 drivers/mtd/sm_ftl.c 		sm_recheck_media(ftl);
ftl               367 drivers/mtd/sm_ftl.c static int sm_write_block(struct sm_ftl *ftl, uint8_t *buf,
ftl               379 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               382 drivers/mtd/sm_ftl.c 	for (boffset = 0; boffset < ftl->block_size;
ftl               396 drivers/mtd/sm_ftl.c 		if (ftl->smallpagenand) {
ftl               405 drivers/mtd/sm_ftl.c 		if (!sm_write_sector(ftl, zone, block, boffset,
ftl               417 drivers/mtd/sm_ftl.c 			if (sm_erase_block(ftl, zone, block, 0))
ftl               423 drivers/mtd/sm_ftl.c 			sm_mark_block_bad(ftl, zone, block);
ftl               432 drivers/mtd/sm_ftl.c static void sm_mark_block_bad(struct sm_ftl *ftl, int zone, int block)
ftl               440 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               443 drivers/mtd/sm_ftl.c 	if (sm_recheck_media(ftl))
ftl               451 drivers/mtd/sm_ftl.c 	for (boffset = 0; boffset < ftl->block_size; boffset += SM_SECTOR_SIZE)
ftl               452 drivers/mtd/sm_ftl.c 		sm_write_sector(ftl, zone, block, boffset, NULL, &oob);
ftl               459 drivers/mtd/sm_ftl.c static int sm_erase_block(struct sm_ftl *ftl, int zone_num, uint16_t block,
ftl               462 drivers/mtd/sm_ftl.c 	struct ftl_zone *zone = &ftl->zones[zone_num];
ftl               463 drivers/mtd/sm_ftl.c 	struct mtd_info *mtd = ftl->trans->mtd;
ftl               466 drivers/mtd/sm_ftl.c 	erase.addr = sm_mkoffset(ftl, zone_num, block, 0);
ftl               467 drivers/mtd/sm_ftl.c 	erase.len = ftl->block_size;
ftl               469 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               472 drivers/mtd/sm_ftl.c 	BUG_ON(ftl->readonly);
ftl               474 drivers/mtd/sm_ftl.c 	if (zone_num == 0 && (block == ftl->cis_block || block == 0)) {
ftl               491 drivers/mtd/sm_ftl.c 	sm_mark_block_bad(ftl, zone_num, block);
ftl               496 drivers/mtd/sm_ftl.c static int sm_check_block(struct sm_ftl *ftl, int zone, int block)
ftl               508 drivers/mtd/sm_ftl.c 	for (boffset = 0; boffset < ftl->block_size;
ftl               512 drivers/mtd/sm_ftl.c 		if (sm_read_sector(ftl, zone, block, boffset, NULL, &oob))
ftl               527 drivers/mtd/sm_ftl.c 		sm_erase_block(ftl, zone, block, 1);
ftl               557 drivers/mtd/sm_ftl.c static int sm_get_media_info(struct sm_ftl *ftl, struct mtd_info *mtd)
ftl               562 drivers/mtd/sm_ftl.c 	ftl->readonly = mtd->type == MTD_ROM;
ftl               565 drivers/mtd/sm_ftl.c 	ftl->zone_count = 1;
ftl               566 drivers/mtd/sm_ftl.c 	ftl->smallpagenand = 0;
ftl               571 drivers/mtd/sm_ftl.c 		ftl->zone_size = 256;
ftl               572 drivers/mtd/sm_ftl.c 		ftl->max_lba = 250;
ftl               573 drivers/mtd/sm_ftl.c 		ftl->block_size = 8 * SM_SECTOR_SIZE;
ftl               574 drivers/mtd/sm_ftl.c 		ftl->smallpagenand = 1;
ftl               580 drivers/mtd/sm_ftl.c 			ftl->zone_size = 512;
ftl               581 drivers/mtd/sm_ftl.c 			ftl->max_lba = 500;
ftl               582 drivers/mtd/sm_ftl.c 			ftl->block_size = 8 * SM_SECTOR_SIZE;
ftl               583 drivers/mtd/sm_ftl.c 			ftl->smallpagenand = 1;
ftl               587 drivers/mtd/sm_ftl.c 			if (!ftl->readonly)
ftl               590 drivers/mtd/sm_ftl.c 			ftl->zone_size = 256;
ftl               591 drivers/mtd/sm_ftl.c 			ftl->max_lba = 250;
ftl               592 drivers/mtd/sm_ftl.c 			ftl->block_size = 16 * SM_SECTOR_SIZE;
ftl               597 drivers/mtd/sm_ftl.c 		ftl->zone_size = 512;
ftl               598 drivers/mtd/sm_ftl.c 		ftl->max_lba = 500;
ftl               599 drivers/mtd/sm_ftl.c 		ftl->block_size = 16 * SM_SECTOR_SIZE;
ftl               603 drivers/mtd/sm_ftl.c 		ftl->zone_size = 1024;
ftl               604 drivers/mtd/sm_ftl.c 		ftl->max_lba = 1000;
ftl               605 drivers/mtd/sm_ftl.c 		ftl->block_size = 16 * SM_SECTOR_SIZE;
ftl               611 drivers/mtd/sm_ftl.c 		ftl->zone_count = size_in_megs / 16;
ftl               612 drivers/mtd/sm_ftl.c 		ftl->zone_size = 1024;
ftl               613 drivers/mtd/sm_ftl.c 		ftl->max_lba = 1000;
ftl               614 drivers/mtd/sm_ftl.c 		ftl->block_size = 32 * SM_SECTOR_SIZE;
ftl               618 drivers/mtd/sm_ftl.c 	if (mtd->erasesize > ftl->block_size)
ftl               624 drivers/mtd/sm_ftl.c 	if (ftl->smallpagenand && mtd->oobsize < SM_SMALL_OOB_SIZE)
ftl               627 drivers/mtd/sm_ftl.c 	if (!ftl->smallpagenand && mtd->oobsize < SM_OOB_SIZE)
ftl               637 drivers/mtd/sm_ftl.c 			ftl->cylinders = chs_table[i].cyl;
ftl               638 drivers/mtd/sm_ftl.c 			ftl->heads = chs_table[i].head;
ftl               639 drivers/mtd/sm_ftl.c 			ftl->sectors = chs_table[i].sec;
ftl               645 drivers/mtd/sm_ftl.c 	ftl->cylinders = 985;
ftl               646 drivers/mtd/sm_ftl.c 	ftl->heads =  33;
ftl               647 drivers/mtd/sm_ftl.c 	ftl->sectors = 63;
ftl               652 drivers/mtd/sm_ftl.c static int sm_read_cis(struct sm_ftl *ftl)
ftl               656 drivers/mtd/sm_ftl.c 	if (sm_read_sector(ftl,
ftl               657 drivers/mtd/sm_ftl.c 		0, ftl->cis_block, ftl->cis_boffset, ftl->cis_buffer, &oob))
ftl               663 drivers/mtd/sm_ftl.c 	if (!memcmp(ftl->cis_buffer + ftl->cis_page_offset,
ftl               672 drivers/mtd/sm_ftl.c static int sm_find_cis(struct sm_ftl *ftl)
ftl               680 drivers/mtd/sm_ftl.c 	for (block = 0 ; block < ftl->zone_size - ftl->max_lba ; block++) {
ftl               682 drivers/mtd/sm_ftl.c 		if (sm_read_sector(ftl, 0, block, 0, NULL, &oob))
ftl               695 drivers/mtd/sm_ftl.c 	for (boffset = 0 ; boffset < ftl->block_size;
ftl               698 drivers/mtd/sm_ftl.c 		if (sm_read_sector(ftl, 0, block, boffset, NULL, &oob))
ftl               706 drivers/mtd/sm_ftl.c 	if (boffset == ftl->block_size)
ftl               709 drivers/mtd/sm_ftl.c 	ftl->cis_block = block;
ftl               710 drivers/mtd/sm_ftl.c 	ftl->cis_boffset = boffset;
ftl               711 drivers/mtd/sm_ftl.c 	ftl->cis_page_offset = 0;
ftl               713 drivers/mtd/sm_ftl.c 	cis_found = !sm_read_cis(ftl);
ftl               716 drivers/mtd/sm_ftl.c 		ftl->cis_page_offset = SM_SMALL_PAGE;
ftl               717 drivers/mtd/sm_ftl.c 		cis_found = !sm_read_cis(ftl);
ftl               722 drivers/mtd/sm_ftl.c 			block * ftl->block_size +
ftl               723 drivers/mtd/sm_ftl.c 				boffset + ftl->cis_page_offset);
ftl               730 drivers/mtd/sm_ftl.c static int sm_recheck_media(struct sm_ftl *ftl)
ftl               732 drivers/mtd/sm_ftl.c 	if (sm_read_cis(ftl)) {
ftl               734 drivers/mtd/sm_ftl.c 		if (!ftl->unstable) {
ftl               736 drivers/mtd/sm_ftl.c 			ftl->unstable = 1;
ftl               744 drivers/mtd/sm_ftl.c static int sm_init_zone(struct sm_ftl *ftl, int zone_num)
ftl               746 drivers/mtd/sm_ftl.c 	struct ftl_zone *zone = &ftl->zones[zone_num];
ftl               756 drivers/mtd/sm_ftl.c 	zone->lba_to_phys_table = kmalloc_array(ftl->max_lba, 2, GFP_KERNEL);
ftl               760 drivers/mtd/sm_ftl.c 	memset(zone->lba_to_phys_table, -1, ftl->max_lba * 2);
ftl               764 drivers/mtd/sm_ftl.c 	if (kfifo_alloc(&zone->free_sectors, ftl->zone_size * 2, GFP_KERNEL)) {
ftl               770 drivers/mtd/sm_ftl.c 	for (block = 0 ; block < ftl->zone_size ; block++) {
ftl               773 drivers/mtd/sm_ftl.c 		if (zone_num == 0 && block <= ftl->cis_block)
ftl               777 drivers/mtd/sm_ftl.c 		if (sm_read_sector(ftl, zone_num, block, 0, NULL, &oob)) {
ftl               806 drivers/mtd/sm_ftl.c 		if (lba == -2 || lba >= ftl->max_lba) {
ftl               825 drivers/mtd/sm_ftl.c 		if (sm_check_block(ftl, zone_num, block))
ftl               829 drivers/mtd/sm_ftl.c 		if (sm_check_block(ftl, zone_num,
ftl               840 drivers/mtd/sm_ftl.c 		sm_erase_block(ftl, zone_num, block, 1);
ftl               867 drivers/mtd/sm_ftl.c static struct ftl_zone *sm_get_zone(struct sm_ftl *ftl, int zone_num)
ftl               872 drivers/mtd/sm_ftl.c 	BUG_ON(zone_num >= ftl->zone_count);
ftl               873 drivers/mtd/sm_ftl.c 	zone = &ftl->zones[zone_num];
ftl               876 drivers/mtd/sm_ftl.c 		error = sm_init_zone(ftl, zone_num);
ftl               888 drivers/mtd/sm_ftl.c static void sm_cache_init(struct sm_ftl *ftl)
ftl               890 drivers/mtd/sm_ftl.c 	ftl->cache_data_invalid_bitmap = 0xFFFFFFFF;
ftl               891 drivers/mtd/sm_ftl.c 	ftl->cache_clean = 1;
ftl               892 drivers/mtd/sm_ftl.c 	ftl->cache_zone = -1;
ftl               893 drivers/mtd/sm_ftl.c 	ftl->cache_block = -1;
ftl               898 drivers/mtd/sm_ftl.c static void sm_cache_put(struct sm_ftl *ftl, char *buffer, int boffset)
ftl               900 drivers/mtd/sm_ftl.c 	memcpy(ftl->cache_data + boffset, buffer, SM_SECTOR_SIZE);
ftl               901 drivers/mtd/sm_ftl.c 	clear_bit(boffset / SM_SECTOR_SIZE, &ftl->cache_data_invalid_bitmap);
ftl               902 drivers/mtd/sm_ftl.c 	ftl->cache_clean = 0;
ftl               906 drivers/mtd/sm_ftl.c static int sm_cache_get(struct sm_ftl *ftl, char *buffer, int boffset)
ftl               909 drivers/mtd/sm_ftl.c 		&ftl->cache_data_invalid_bitmap))
ftl               912 drivers/mtd/sm_ftl.c 	memcpy(buffer, ftl->cache_data + boffset, SM_SECTOR_SIZE);
ftl               917 drivers/mtd/sm_ftl.c static int sm_cache_flush(struct sm_ftl *ftl)
ftl               923 drivers/mtd/sm_ftl.c 	int zone_num = ftl->cache_zone;
ftl               926 drivers/mtd/sm_ftl.c 	if (ftl->cache_clean)
ftl               929 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               933 drivers/mtd/sm_ftl.c 	zone = &ftl->zones[zone_num];
ftl               934 drivers/mtd/sm_ftl.c 	block_num = zone->lba_to_phys_table[ftl->cache_block];
ftl               938 drivers/mtd/sm_ftl.c 	for_each_set_bit(sector_num, &ftl->cache_data_invalid_bitmap,
ftl               939 drivers/mtd/sm_ftl.c 		ftl->block_size / SM_SECTOR_SIZE) {
ftl               941 drivers/mtd/sm_ftl.c 		if (!sm_read_sector(ftl,
ftl               943 drivers/mtd/sm_ftl.c 			ftl->cache_data + sector_num * SM_SECTOR_SIZE, NULL))
ftl               945 drivers/mtd/sm_ftl.c 					&ftl->cache_data_invalid_bitmap);
ftl               949 drivers/mtd/sm_ftl.c 	if (ftl->unstable)
ftl               963 drivers/mtd/sm_ftl.c 	if (sm_write_block(ftl, ftl->cache_data, zone_num, write_sector,
ftl               964 drivers/mtd/sm_ftl.c 		ftl->cache_block, ftl->cache_data_invalid_bitmap))
ftl               968 drivers/mtd/sm_ftl.c 	zone->lba_to_phys_table[ftl->cache_block] = write_sector;
ftl               972 drivers/mtd/sm_ftl.c 		sm_erase_block(ftl, zone_num, block_num, 1);
ftl               974 drivers/mtd/sm_ftl.c 	sm_cache_init(ftl);
ftl               982 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = from_timer(ftl, t, timer);
ftl               983 drivers/mtd/sm_ftl.c 	queue_work(cache_flush_workqueue, &ftl->flush_work);
ftl               989 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = container_of(work, struct sm_ftl, flush_work);
ftl               990 drivers/mtd/sm_ftl.c 	mutex_lock(&ftl->mutex);
ftl               991 drivers/mtd/sm_ftl.c 	sm_cache_flush(ftl);
ftl               992 drivers/mtd/sm_ftl.c 	mutex_unlock(&ftl->mutex);
ftl              1002 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1007 drivers/mtd/sm_ftl.c 	sm_break_offset(ftl, sect_no << 9, &zone_num, &block, &boffset);
ftl              1008 drivers/mtd/sm_ftl.c 	mutex_lock(&ftl->mutex);
ftl              1011 drivers/mtd/sm_ftl.c 	zone = sm_get_zone(ftl, zone_num);
ftl              1018 drivers/mtd/sm_ftl.c 	if (ftl->cache_zone == zone_num && ftl->cache_block == block) {
ftl              1020 drivers/mtd/sm_ftl.c 		if (!sm_cache_get(ftl, buf, boffset))
ftl              1032 drivers/mtd/sm_ftl.c 	if (sm_read_sector(ftl, zone_num, block, boffset, buf, NULL)) {
ftl              1038 drivers/mtd/sm_ftl.c 		sm_cache_put(ftl, buf, boffset);
ftl              1040 drivers/mtd/sm_ftl.c 	mutex_unlock(&ftl->mutex);
ftl              1048 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1052 drivers/mtd/sm_ftl.c 	BUG_ON(ftl->readonly);
ftl              1053 drivers/mtd/sm_ftl.c 	sm_break_offset(ftl, sec_no << 9, &zone_num, &block, &boffset);
ftl              1056 drivers/mtd/sm_ftl.c 	del_timer(&ftl->timer);
ftl              1057 drivers/mtd/sm_ftl.c 	mutex_lock(&ftl->mutex);
ftl              1059 drivers/mtd/sm_ftl.c 	zone = sm_get_zone(ftl, zone_num);
ftl              1066 drivers/mtd/sm_ftl.c 	if (ftl->cache_block != block || ftl->cache_zone != zone_num) {
ftl              1068 drivers/mtd/sm_ftl.c 		error = sm_cache_flush(ftl);
ftl              1072 drivers/mtd/sm_ftl.c 		ftl->cache_block = block;
ftl              1073 drivers/mtd/sm_ftl.c 		ftl->cache_zone = zone_num;
ftl              1076 drivers/mtd/sm_ftl.c 	sm_cache_put(ftl, buf, boffset);
ftl              1078 drivers/mtd/sm_ftl.c 	mod_timer(&ftl->timer, jiffies + msecs_to_jiffies(cache_timeout));
ftl              1079 drivers/mtd/sm_ftl.c 	mutex_unlock(&ftl->mutex);
ftl              1086 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1089 drivers/mtd/sm_ftl.c 	mutex_lock(&ftl->mutex);
ftl              1090 drivers/mtd/sm_ftl.c 	retval =  sm_cache_flush(ftl);
ftl              1091 drivers/mtd/sm_ftl.c 	mutex_unlock(&ftl->mutex);
ftl              1098 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1100 drivers/mtd/sm_ftl.c 	mutex_lock(&ftl->mutex);
ftl              1101 drivers/mtd/sm_ftl.c 	del_timer_sync(&ftl->timer);
ftl              1102 drivers/mtd/sm_ftl.c 	cancel_work_sync(&ftl->flush_work);
ftl              1103 drivers/mtd/sm_ftl.c 	sm_cache_flush(ftl);
ftl              1104 drivers/mtd/sm_ftl.c 	mutex_unlock(&ftl->mutex);
ftl              1110 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1111 drivers/mtd/sm_ftl.c 	geo->heads = ftl->heads;
ftl              1112 drivers/mtd/sm_ftl.c 	geo->sectors = ftl->sectors;
ftl              1113 drivers/mtd/sm_ftl.c 	geo->cylinders = ftl->cylinders;
ftl              1121 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl;
ftl              1124 drivers/mtd/sm_ftl.c 	ftl = kzalloc(sizeof(struct sm_ftl), GFP_KERNEL);
ftl              1125 drivers/mtd/sm_ftl.c 	if (!ftl)
ftl              1129 drivers/mtd/sm_ftl.c 	mutex_init(&ftl->mutex);
ftl              1130 drivers/mtd/sm_ftl.c 	timer_setup(&ftl->timer, sm_cache_flush_timer, 0);
ftl              1131 drivers/mtd/sm_ftl.c 	INIT_WORK(&ftl->flush_work, sm_cache_flush_work);
ftl              1134 drivers/mtd/sm_ftl.c 	if (sm_get_media_info(ftl, mtd)) {
ftl              1141 drivers/mtd/sm_ftl.c 	ftl->cis_buffer = kzalloc(SM_SECTOR_SIZE, GFP_KERNEL);
ftl              1142 drivers/mtd/sm_ftl.c 	if (!ftl->cis_buffer)
ftl              1146 drivers/mtd/sm_ftl.c 	ftl->zones = kcalloc(ftl->zone_count, sizeof(struct ftl_zone),
ftl              1148 drivers/mtd/sm_ftl.c 	if (!ftl->zones)
ftl              1152 drivers/mtd/sm_ftl.c 	ftl->cache_data = kzalloc(ftl->block_size, GFP_KERNEL);
ftl              1154 drivers/mtd/sm_ftl.c 	if (!ftl->cache_data)
ftl              1157 drivers/mtd/sm_ftl.c 	sm_cache_init(ftl);
ftl              1165 drivers/mtd/sm_ftl.c 	ftl->trans = trans;
ftl              1166 drivers/mtd/sm_ftl.c 	trans->priv = ftl;
ftl              1171 drivers/mtd/sm_ftl.c 	trans->size = (ftl->block_size * ftl->max_lba * ftl->zone_count) >> 9;
ftl              1172 drivers/mtd/sm_ftl.c 	trans->readonly = ftl->readonly;
ftl              1174 drivers/mtd/sm_ftl.c 	if (sm_find_cis(ftl)) {
ftl              1179 drivers/mtd/sm_ftl.c 	ftl->disk_attributes = sm_create_sysfs_attributes(ftl);
ftl              1180 drivers/mtd/sm_ftl.c 	if (!ftl->disk_attributes)
ftl              1182 drivers/mtd/sm_ftl.c 	trans->disk_attributes = ftl->disk_attributes;
ftl              1189 drivers/mtd/sm_ftl.c 		ftl->zone_count, ftl->max_lba,
ftl              1190 drivers/mtd/sm_ftl.c 		ftl->zone_size - ftl->max_lba);
ftl              1192 drivers/mtd/sm_ftl.c 		ftl->block_size);
ftl              1204 drivers/mtd/sm_ftl.c 	kfree(ftl->cache_data);
ftl              1206 drivers/mtd/sm_ftl.c 	kfree(ftl->zones);
ftl              1208 drivers/mtd/sm_ftl.c 	kfree(ftl->cis_buffer);
ftl              1210 drivers/mtd/sm_ftl.c 	kfree(ftl);
ftl              1218 drivers/mtd/sm_ftl.c 	struct sm_ftl *ftl = dev->priv;
ftl              1222 drivers/mtd/sm_ftl.c 	ftl->trans = NULL;
ftl              1224 drivers/mtd/sm_ftl.c 	for (i = 0 ; i < ftl->zone_count; i++) {
ftl              1226 drivers/mtd/sm_ftl.c 		if (!ftl->zones[i].initialized)
ftl              1229 drivers/mtd/sm_ftl.c 		kfree(ftl->zones[i].lba_to_phys_table);
ftl              1230 drivers/mtd/sm_ftl.c 		kfifo_free(&ftl->zones[i].free_sectors);
ftl              1233 drivers/mtd/sm_ftl.c 	sm_delete_sysfs_attributes(ftl);
ftl              1234 drivers/mtd/sm_ftl.c 	kfree(ftl->cis_buffer);
ftl              1235 drivers/mtd/sm_ftl.c 	kfree(ftl->zones);
ftl              1236 drivers/mtd/sm_ftl.c 	kfree(ftl->cache_data);
ftl              1237 drivers/mtd/sm_ftl.c 	kfree(ftl);
ftl                83 drivers/mtd/sm_ftl.h static int sm_erase_block(struct sm_ftl *ftl, int zone_num, uint16_t block,
ftl                85 drivers/mtd/sm_ftl.h static void sm_mark_block_bad(struct sm_ftl *ftl, int zone_num, int block);
ftl                87 drivers/mtd/sm_ftl.h static int sm_recheck_media(struct sm_ftl *ftl);
ftl               297 drivers/spi/spi-rockchip.c 		u32 ftl = readl_relaxed(rs->regs + ROCKCHIP_SPI_RXFTLR) + 1;
ftl               299 drivers/spi/spi-rockchip.c 		if (rx_left < ftl) {
ftl               300 drivers/spi/spi-rockchip.c 			rx_left = ftl;