Lines Matching refs:pba
141 static int msb_get_zone_from_pba(int pba) in msb_get_zone_from_pba() argument
143 return pba / MS_BLOCKS_IN_ZONE; in msb_get_zone_from_pba()
168 static void msb_mark_block_used(struct msb_data *msb, int pba) in msb_mark_block_used() argument
170 int zone = msb_get_zone_from_pba(pba); in msb_mark_block_used()
172 if (test_bit(pba, msb->used_blocks_bitmap)) { in msb_mark_block_used()
174 "BUG: attempt to mark already used pba %d as used", pba); in msb_mark_block_used()
183 __set_bit(pba, msb->used_blocks_bitmap); in msb_mark_block_used()
188 static void msb_mark_block_unused(struct msb_data *msb, int pba) in msb_mark_block_unused() argument
190 int zone = msb_get_zone_from_pba(pba); in msb_mark_block_unused()
192 if (!test_bit(pba, msb->used_blocks_bitmap)) { in msb_mark_block_unused()
193 pr_err("BUG: attempt to mark already unused pba %d as unused" , pba); in msb_mark_block_unused()
202 __clear_bit(pba, msb->used_blocks_bitmap); in msb_mark_block_unused()
790 u16 pba, u8 page, u8 flag) in msb_set_overwrite_flag() argument
795 msb->regs.param.block_address = cpu_to_be16(pba); in msb_set_overwrite_flag()
803 flag, pba, page); in msb_set_overwrite_flag()
807 static int msb_mark_bad(struct msb_data *msb, int pba) in msb_mark_bad() argument
809 pr_notice("marking pba %d as bad", pba); in msb_mark_bad()
812 msb, pba, 0, 0xFF & ~MEMSTICK_OVERWRITE_BKST); in msb_mark_bad()
815 static int msb_mark_page_bad(struct msb_data *msb, int pba, int page) in msb_mark_page_bad() argument
817 dbg("marking page %d of pba %d as bad", page, pba); in msb_mark_page_bad()
820 pba, page, ~MEMSTICK_OVERWRITE_PGST0); in msb_mark_page_bad()
824 static int msb_erase_block(struct msb_data *msb, u16 pba) in msb_erase_block() argument
831 dbg_verbose("erasing pba %d", pba); in msb_erase_block()
834 msb->regs.param.block_address = cpu_to_be16(pba); in msb_erase_block()
847 pr_err("erase failed, marking pba %d as bad", pba); in msb_erase_block()
848 msb_mark_bad(msb, pba); in msb_erase_block()
851 dbg_verbose("erase success, marking pba %d as unused", pba); in msb_erase_block()
852 msb_mark_block_unused(msb, pba); in msb_erase_block()
853 __set_bit(pba, msb->erased_blocks_bitmap); in msb_erase_block()
859 u16 pba, u8 page, struct ms_extra_data_register *extra, in msb_read_page() argument
864 if (pba == MS_BLOCK_INVALID) { in msb_read_page()
901 if (pba >= msb->block_count) { in msb_read_page()
902 pr_err("BUG: attempt to read beyond the end of the card at pba %d", pba); in msb_read_page()
907 msb->regs.param.block_address = cpu_to_be16(pba); in msb_read_page()
918 pba, page); in msb_read_page()
933 pba, page); in msb_read_page()
937 msb_mark_page_bad(msb, pba, page); in msb_read_page()
943 pba, page, error); in msb_read_page()
948 static int msb_read_oob(struct msb_data *msb, u16 pba, u16 page, in msb_read_oob() argument
954 msb->regs.param.block_address = cpu_to_be16(pba); in msb_read_oob()
958 if (pba > msb->block_count) { in msb_read_oob()
959 pr_err("BUG: attempt to read beyond the end of card at pba %d", pba); in msb_read_oob()
968 pba, page); in msb_read_oob()
976 static int msb_verify_block(struct msb_data *msb, u16 pba, in msb_verify_block() argument
986 error = msb_read_page(msb, pba, page, in msb_verify_block()
1001 u16 pba, u32 lba, struct scatterlist *sg, int offset) in msb_write_block() argument
1010 if (pba == MS_BLOCK_INVALID) { in msb_write_block()
1016 if (pba >= msb->block_count || lba >= msb->logical_block_count) { in msb_write_block()
1022 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_write_block()
1027 if (pba == msb->boot_block_locations[0] || in msb_write_block()
1028 pba == msb->boot_block_locations[1]) { in msb_write_block()
1040 msb->regs.param.block_address = cpu_to_be16(pba); in msb_write_block()
1060 !test_bit(pba, msb->erased_blocks_bitmap))) in msb_write_block()
1061 error = msb_verify_block(msb, pba, sg, offset); in msb_write_block()
1069 pr_err("write failed, trying to erase the pba %d", pba); in msb_write_block()
1070 error = msb_erase_block(msb, pba); in msb_write_block()
1083 int pba = zone * MS_BLOCKS_IN_ZONE; in msb_get_free_block() local
1099 pba = find_next_zero_bit(msb->used_blocks_bitmap, in msb_get_free_block()
1100 msb->block_count, pba); in msb_get_free_block()
1102 pba = find_next_zero_bit(msb->used_blocks_bitmap, in msb_get_free_block()
1103 msb->block_count, pba + 1); in msb_get_free_block()
1105 dbg_verbose("result of the free blocks scan: pba %d", pba); in msb_get_free_block()
1107 if (pba == msb->block_count || (msb_get_zone_from_pba(pba)) != zone) { in msb_get_free_block()
1113 msb_mark_block_used(msb, pba); in msb_get_free_block()
1114 return pba; in msb_get_free_block()
1120 u16 pba, new_pba; in msb_update_block() local
1123 pba = msb->lba_to_pba_table[lba]; in msb_update_block()
1124 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba); in msb_update_block()
1126 if (pba != MS_BLOCK_INVALID) { in msb_update_block()
1128 msb_set_overwrite_flag(msb, pba, 0, in msb_update_block()
1153 msb_erase_block(msb, pba); in msb_update_block()
1194 int pba = 0; in msb_read_boot_blocks() local
1217 for (pba = 0; pba < MS_BLOCK_MAX_BOOT_ADDR; pba++) { in msb_read_boot_blocks()
1220 if (msb_read_page(msb, pba, 0, &extra, &sg, 0)) { in msb_read_boot_blocks()
1221 dbg("boot scan: can't read pba %d", pba); in msb_read_boot_blocks()
1227 pba); in msb_read_boot_blocks()
1232 dbg("the pba at %d doesn't contain boot block ID", pba); in msb_read_boot_blocks()
1237 msb->boot_block_locations[msb->boot_block_count] = pba; in msb_read_boot_blocks()
1263 u16 pba; in msb_read_bad_block_table() local
1267 pba = msb->boot_block_locations[block_nr]; in msb_read_bad_block_table()
1285 pba, data_offset, data_size); in msb_read_bad_block_table()
1295 error = msb_read_page(msb, pba, page, NULL, &sg, offset); in msb_read_bad_block_table()
1373 u16 pba, lba, other_block; in msb_ftl_scan() local
1383 for (pba = 0; pba < msb->block_count; pba++) { in msb_ftl_scan()
1385 if (pba == msb->boot_block_locations[0] || in msb_ftl_scan()
1386 pba == msb->boot_block_locations[1]) { in msb_ftl_scan()
1387 dbg_verbose("pba %05d -> [boot block]", pba); in msb_ftl_scan()
1388 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1392 if (test_bit(pba, msb->used_blocks_bitmap)) { in msb_ftl_scan()
1393 dbg_verbose("pba %05d -> [factory bad]", pba); in msb_ftl_scan()
1398 error = msb_read_oob(msb, pba, 0, &extra); in msb_ftl_scan()
1403 "oob of pba %d damaged, will try to erase it", pba); in msb_ftl_scan()
1404 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1405 msb_erase_block(msb, pba); in msb_ftl_scan()
1409 error, pba); in msb_ftl_scan()
1418 overwrite_flags[pba] = overwrite_flag; in msb_ftl_scan()
1422 dbg("pba %05d -> [BAD]", pba); in msb_ftl_scan()
1423 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1431 pba, management_flag); in msb_ftl_scan()
1432 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1438 dbg("pba %05d -> [temp table] - will erase", pba); in msb_ftl_scan()
1440 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1441 msb_erase_block(msb, pba); in msb_ftl_scan()
1446 dbg_verbose("pba %05d -> [free]", pba); in msb_ftl_scan()
1450 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1453 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1455 pba, lba); in msb_ftl_scan()
1456 msb_erase_block(msb, pba); in msb_ftl_scan()
1462 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1463 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1471 pba, other_block); in msb_ftl_scan()
1474 pr_notice("pba %d is marked as stable, use it", pba); in msb_ftl_scan()
1476 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1483 msb_erase_block(msb, pba); in msb_ftl_scan()
1488 pba, other_block, other_block); in msb_ftl_scan()
1491 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1538 u16 pba, lba; in msb_cache_flush() local
1547 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1550 pba, msb->cache_block_lba); in msb_cache_flush()
1564 error = msb_read_page(msb, pba, page, &extra, &sg, offset); in msb_cache_flush()
1586 pba = msb->lba_to_pba_table[msb->cache_block_lba]; in msb_cache_flush()
1598 pba , page, 0xFF & ~MEMSTICK_OV_PG_NORMAL); in msb_cache_flush()
1650 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read() local
1658 lba, pba, page); in msb_cache_read()
1668 lba, pba, page); in msb_cache_read()
1670 error = msb_read_page(msb, pba, page, NULL, sg, offset); in msb_cache_read()