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;