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()
787 u16 pba, u8 page, u8 flag) in msb_set_overwrite_flag() argument
792 msb->regs.param.block_address = cpu_to_be16(pba); in msb_set_overwrite_flag()
800 flag, pba, page); in msb_set_overwrite_flag()
804 static int msb_mark_bad(struct msb_data *msb, int pba) in msb_mark_bad() argument
806 pr_notice("marking pba %d as bad", pba); in msb_mark_bad()
809 msb, pba, 0, 0xFF & ~MEMSTICK_OVERWRITE_BKST); in msb_mark_bad()
812 static int msb_mark_page_bad(struct msb_data *msb, int pba, int page) in msb_mark_page_bad() argument
814 dbg("marking page %d of pba %d as bad", page, pba); in msb_mark_page_bad()
817 pba, page, ~MEMSTICK_OVERWRITE_PGST0); in msb_mark_page_bad()
821 static int msb_erase_block(struct msb_data *msb, u16 pba) in msb_erase_block() argument
827 dbg_verbose("erasing pba %d", pba); in msb_erase_block()
830 msb->regs.param.block_address = cpu_to_be16(pba); in msb_erase_block()
843 pr_err("erase failed, marking pba %d as bad", pba); in msb_erase_block()
844 msb_mark_bad(msb, pba); in msb_erase_block()
847 dbg_verbose("erase success, marking pba %d as unused", pba); in msb_erase_block()
848 msb_mark_block_unused(msb, pba); in msb_erase_block()
849 __set_bit(pba, msb->erased_blocks_bitmap); in msb_erase_block()
855 u16 pba, u8 page, struct ms_extra_data_register *extra, in msb_read_page() argument
860 if (pba == MS_BLOCK_INVALID) { in msb_read_page()
897 if (pba >= msb->block_count) { in msb_read_page()
898 pr_err("BUG: attempt to read beyond the end of the card at pba %d", pba); in msb_read_page()
903 msb->regs.param.block_address = cpu_to_be16(pba); in msb_read_page()
914 pba, page); in msb_read_page()
929 pba, page); in msb_read_page()
933 msb_mark_page_bad(msb, pba, page); in msb_read_page()
939 pba, page, error); in msb_read_page()
944 static int msb_read_oob(struct msb_data *msb, u16 pba, u16 page, in msb_read_oob() argument
950 msb->regs.param.block_address = cpu_to_be16(pba); in msb_read_oob()
954 if (pba > msb->block_count) { in msb_read_oob()
955 pr_err("BUG: attempt to read beyond the end of card at pba %d", pba); in msb_read_oob()
964 pba, page); in msb_read_oob()
972 static int msb_verify_block(struct msb_data *msb, u16 pba, in msb_verify_block() argument
982 error = msb_read_page(msb, pba, page, in msb_verify_block()
997 u16 pba, u32 lba, struct scatterlist *sg, int offset) in msb_write_block() argument
1005 if (pba == MS_BLOCK_INVALID) { in msb_write_block()
1011 if (pba >= msb->block_count || lba >= msb->logical_block_count) { in msb_write_block()
1017 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_write_block()
1022 if (pba == msb->boot_block_locations[0] || in msb_write_block()
1023 pba == msb->boot_block_locations[1]) { in msb_write_block()
1035 msb->regs.param.block_address = cpu_to_be16(pba); in msb_write_block()
1054 !test_bit(pba, msb->erased_blocks_bitmap))) in msb_write_block()
1055 error = msb_verify_block(msb, pba, sg, offset); in msb_write_block()
1063 pr_err("write failed, trying to erase the pba %d", pba); in msb_write_block()
1064 error = msb_erase_block(msb, pba); in msb_write_block()
1077 int pba = zone * MS_BLOCKS_IN_ZONE; in msb_get_free_block() local
1093 pba = find_next_zero_bit(msb->used_blocks_bitmap, in msb_get_free_block()
1094 msb->block_count, pba); in msb_get_free_block()
1096 pba = find_next_zero_bit(msb->used_blocks_bitmap, in msb_get_free_block()
1097 msb->block_count, pba + 1); in msb_get_free_block()
1099 dbg_verbose("result of the free blocks scan: pba %d", pba); in msb_get_free_block()
1101 if (pba == msb->block_count || (msb_get_zone_from_pba(pba)) != zone) { in msb_get_free_block()
1107 msb_mark_block_used(msb, pba); in msb_get_free_block()
1108 return pba; in msb_get_free_block()
1114 u16 pba, new_pba; in msb_update_block() local
1117 pba = msb->lba_to_pba_table[lba]; in msb_update_block()
1118 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba); in msb_update_block()
1120 if (pba != MS_BLOCK_INVALID) { in msb_update_block()
1122 msb_set_overwrite_flag(msb, pba, 0, in msb_update_block()
1147 msb_erase_block(msb, pba); in msb_update_block()
1188 int pba = 0; in msb_read_boot_blocks() local
1211 for (pba = 0; pba < MS_BLOCK_MAX_BOOT_ADDR; pba++) { in msb_read_boot_blocks()
1214 if (msb_read_page(msb, pba, 0, &extra, &sg, 0)) { in msb_read_boot_blocks()
1215 dbg("boot scan: can't read pba %d", pba); in msb_read_boot_blocks()
1221 pba); in msb_read_boot_blocks()
1226 dbg("the pba at %d doesn't contain boot block ID", pba); in msb_read_boot_blocks()
1231 msb->boot_block_locations[msb->boot_block_count] = pba; in msb_read_boot_blocks()
1257 u16 pba; in msb_read_bad_block_table() local
1261 pba = msb->boot_block_locations[block_nr]; in msb_read_bad_block_table()
1279 pba, data_offset, data_size); in msb_read_bad_block_table()
1289 error = msb_read_page(msb, pba, page, NULL, &sg, offset); in msb_read_bad_block_table()
1367 u16 pba, lba, other_block; in msb_ftl_scan() local
1377 for (pba = 0; pba < msb->block_count; pba++) { in msb_ftl_scan()
1379 if (pba == msb->boot_block_locations[0] || in msb_ftl_scan()
1380 pba == msb->boot_block_locations[1]) { in msb_ftl_scan()
1381 dbg_verbose("pba %05d -> [boot block]", pba); in msb_ftl_scan()
1382 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1386 if (test_bit(pba, msb->used_blocks_bitmap)) { in msb_ftl_scan()
1387 dbg_verbose("pba %05d -> [factory bad]", pba); in msb_ftl_scan()
1392 error = msb_read_oob(msb, pba, 0, &extra); in msb_ftl_scan()
1397 "oob of pba %d damaged, will try to erase it", pba); in msb_ftl_scan()
1398 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1399 msb_erase_block(msb, pba); in msb_ftl_scan()
1403 error, pba); in msb_ftl_scan()
1412 overwrite_flags[pba] = overwrite_flag; in msb_ftl_scan()
1416 dbg("pba %05d -> [BAD]", pba); in msb_ftl_scan()
1417 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1425 pba, management_flag); in msb_ftl_scan()
1426 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1432 dbg("pba %05d -> [temp table] - will erase", pba); in msb_ftl_scan()
1434 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1435 msb_erase_block(msb, pba); in msb_ftl_scan()
1440 dbg_verbose("pba %05d -> [free]", pba); in msb_ftl_scan()
1444 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1447 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1449 pba, lba); in msb_ftl_scan()
1450 msb_erase_block(msb, pba); in msb_ftl_scan()
1456 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1457 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1465 pba, other_block); in msb_ftl_scan()
1468 pr_notice("pba %d is marked as stable, use it", pba); in msb_ftl_scan()
1470 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1477 msb_erase_block(msb, pba); in msb_ftl_scan()
1482 pba, other_block, other_block); in msb_ftl_scan()
1485 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1531 u16 pba, lba; in msb_cache_flush() local
1540 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1543 pba, msb->cache_block_lba); in msb_cache_flush()
1557 error = msb_read_page(msb, pba, page, &extra, &sg, offset); in msb_cache_flush()
1579 pba = msb->lba_to_pba_table[msb->cache_block_lba]; in msb_cache_flush()
1591 pba , page, 0xFF & ~MEMSTICK_OV_PG_NORMAL); in msb_cache_flush()
1643 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read() local
1651 lba, pba, page); in msb_cache_read()
1661 lba, pba, page); in msb_cache_read()
1663 error = msb_read_page(msb, pba, page, NULL, sg, offset); in msb_cache_read()