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
1216 for (pba = 0; pba < MS_BLOCK_MAX_BOOT_ADDR; pba++) { in msb_read_boot_blocks()
1219 if (msb_read_page(msb, pba, 0, &extra, &sg, 0)) { in msb_read_boot_blocks()
1220 dbg("boot scan: can't read pba %d", pba); in msb_read_boot_blocks()
1226 pba); in msb_read_boot_blocks()
1231 dbg("the pba at %d doesn't contain boot block ID", pba); in msb_read_boot_blocks()
1236 msb->boot_block_locations[msb->boot_block_count] = pba; in msb_read_boot_blocks()
1262 u16 pba; in msb_read_bad_block_table() local
1266 pba = msb->boot_block_locations[block_nr]; in msb_read_bad_block_table()
1284 pba, data_offset, data_size); in msb_read_bad_block_table()
1294 error = msb_read_page(msb, pba, page, NULL, &sg, offset); in msb_read_bad_block_table()
1372 u16 pba, lba, other_block; in msb_ftl_scan() local
1382 for (pba = 0; pba < msb->block_count; pba++) { in msb_ftl_scan()
1384 if (pba == msb->boot_block_locations[0] || in msb_ftl_scan()
1385 pba == msb->boot_block_locations[1]) { in msb_ftl_scan()
1386 dbg_verbose("pba %05d -> [boot block]", pba); in msb_ftl_scan()
1387 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1391 if (test_bit(pba, msb->used_blocks_bitmap)) { in msb_ftl_scan()
1392 dbg_verbose("pba %05d -> [factory bad]", pba); in msb_ftl_scan()
1397 error = msb_read_oob(msb, pba, 0, &extra); in msb_ftl_scan()
1402 "oob of pba %d damaged, will try to erase it", pba); in msb_ftl_scan()
1403 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1404 msb_erase_block(msb, pba); in msb_ftl_scan()
1408 error, pba); in msb_ftl_scan()
1417 overwrite_flags[pba] = overwrite_flag; in msb_ftl_scan()
1421 dbg("pba %05d -> [BAD]", pba); in msb_ftl_scan()
1422 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1430 pba, management_flag); in msb_ftl_scan()
1431 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1437 dbg("pba %05d -> [temp table] - will erase", pba); in msb_ftl_scan()
1439 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1440 msb_erase_block(msb, pba); in msb_ftl_scan()
1445 dbg_verbose("pba %05d -> [free]", pba); in msb_ftl_scan()
1449 msb_mark_block_used(msb, pba); in msb_ftl_scan()
1452 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1454 pba, lba); in msb_ftl_scan()
1455 msb_erase_block(msb, pba); in msb_ftl_scan()
1461 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1462 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1470 pba, other_block); in msb_ftl_scan()
1473 pr_notice("pba %d is marked as stable, use it", pba); in msb_ftl_scan()
1475 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1482 msb_erase_block(msb, pba); in msb_ftl_scan()
1487 pba, other_block, other_block); in msb_ftl_scan()
1490 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1537 u16 pba, lba; in msb_cache_flush() local
1546 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1549 pba, msb->cache_block_lba); in msb_cache_flush()
1563 error = msb_read_page(msb, pba, page, &extra, &sg, offset); in msb_cache_flush()
1585 pba = msb->lba_to_pba_table[msb->cache_block_lba]; in msb_cache_flush()
1597 pba , page, 0xFF & ~MEMSTICK_OV_PG_NORMAL); in msb_cache_flush()
1649 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read() local
1657 lba, pba, page); in msb_cache_read()
1667 lba, pba, page); in msb_cache_read()
1669 error = msb_read_page(msb, pba, page, NULL, sg, offset); in msb_cache_read()