Lines Matching refs:aSRpnt

183 static int osst_int_ioctl(struct osst_tape *STp, struct osst_request ** aSRpnt,
186 static int osst_set_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt, int frame,…
188 static int osst_get_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt);
190 static int osst_flush_write_buffer(struct osst_tape *STp, struct osst_request ** aSRpnt);
192 static int osst_write_error_recovery(struct osst_tape * STp, struct osst_request ** aSRpnt, int pen…
749 static int osst_wait_ready(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_wait_ready() argument
768 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_wait_ready()
769 *aSRpnt = SRpnt; in osst_wait_ready()
791 *aSRpnt = SRpnt; in osst_wait_ready()
796 osst_write_error_recovery(STp, aSRpnt, 0) ) { in osst_wait_ready()
814 static int osst_wait_for_medium(struct osst_tape * STp, struct osst_request ** aSRpnt, unsigned tim… in osst_wait_for_medium() argument
829 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_wait_for_medium()
830 *aSRpnt = SRpnt; in osst_wait_for_medium()
849 *aSRpnt = SRpnt; in osst_wait_for_medium()
869 static int osst_position_tape_and_confirm(struct osst_tape * STp, struct osst_request ** aSRpnt, in… in osst_position_tape_and_confirm() argument
873 osst_wait_ready(STp, aSRpnt, 15 * 60, 0); /* TODO - can this catch a write error? */ in osst_position_tape_and_confirm()
874 retval = osst_set_frame_position(STp, aSRpnt, frame, 0); in osst_position_tape_and_confirm()
876 osst_wait_ready(STp, aSRpnt, 15 * 60, OSST_WAIT_POSITION_COMPLETE); in osst_position_tape_and_confirm()
877 return (osst_get_frame_position(STp, aSRpnt)); in osst_position_tape_and_confirm()
883 static int osst_flush_drive_buffer(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_flush_drive_buffer() argument
899 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_flush_drive_buffer()
900 *aSRpnt = SRpnt; in osst_flush_drive_buffer()
908 result = osst_write_error_recovery(STp, aSRpnt, 0); in osst_flush_drive_buffer()
910 result |= osst_wait_ready(STp, aSRpnt, 5 * 60, delay); in osst_flush_drive_buffer()
917 static int osst_wait_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int curr, int min… in osst_wait_frame() argument
930 result = osst_get_frame_position(STp, aSRpnt); in osst_wait_frame()
932 if ((result = osst_write_error_recovery(STp, aSRpnt, 0)) == 0) in osst_wait_frame()
972 static int osst_recover_wait_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int writi… in osst_recover_wait_frame() argument
990 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, in osst_recover_wait_frame()
998 retval = osst_write_error_recovery(STp, aSRpnt, 0); in osst_recover_wait_frame()
1020 (*aSRpnt)->sense[ 2] & 0x0f, in osst_recover_wait_frame()
1021 (*aSRpnt)->sense[12], in osst_recover_wait_frame()
1022 (*aSRpnt)->sense[13]); in osst_recover_wait_frame()
1030 static int osst_read_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int timeout) in osst_read_frame() argument
1041 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, 0, timeout)) in osst_read_frame()
1042 retval = osst_recover_wait_frame(STp, aSRpnt, 0); in osst_read_frame()
1053 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_FROM_DEVICE, in osst_read_frame()
1055 *aSRpnt = SRpnt; in osst_read_frame()
1101 static int osst_initiate_read(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_initiate_read() argument
1112 osst_flush_write_buffer(STp, aSRpnt); in osst_initiate_read()
1113 osst_flush_drive_buffer(STp, aSRpnt); in osst_initiate_read()
1129 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_initiate_read()
1130 *aSRpnt = SRpnt; in osst_initiate_read()
1138 static int osst_get_logical_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_get_logical_frame() argument
1166 osst_set_frame_position(STp, aSRpnt, STp->read_error_frame, 0); in osst_get_logical_frame()
1181 if ( osst_initiate_read(STp, aSRpnt) in osst_get_logical_frame()
1182 || ( (!STp->frame_in_buffer) && osst_read_frame(STp, aSRpnt, 30) ) ) { in osst_get_logical_frame()
1185 position = osst_get_frame_position(STp, aSRpnt); in osst_get_logical_frame()
1200 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_get_logical_frame()
1221 position = osst_get_frame_position(STp, aSRpnt) in osst_get_logical_frame()
1233 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_get_logical_frame()
1239 if (osst_get_frame_position(STp, aSRpnt) == 0xbaf) { in osst_get_logical_frame()
1243 osst_set_frame_position(STp, aSRpnt, 0xbb8, 0); in osst_get_logical_frame()
1267 static int osst_seek_logical_blk(struct osst_tape * STp, struct osst_request ** aSRpnt, int logical… in osst_seek_logical_blk() argument
1301 osst_set_frame_position(STp, aSRpnt, ppos_estimate, 0); in osst_seek_logical_blk()
1302 if (osst_get_logical_frame(STp, aSRpnt, frame_seq_estimate, 1) >= 0) { in osst_seek_logical_blk()
1348 if (osst_get_logical_frame(STp, aSRpnt, -1, 1) < 0) in osst_seek_logical_blk()
1376 static int osst_get_sector(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_get_sector() argument
1399 sector = osst_get_frame_position(STp, aSRpnt); in osst_get_sector()
1406 static int osst_seek_sector(struct osst_tape * STp, struct osst_request ** aSRpnt, int sector) in osst_seek_sector() argument
1422 return (osst_set_frame_position(STp, aSRpnt, frame, 0)); in osst_seek_sector()
1424 r = osst_set_frame_position(STp, aSRpnt, offset?frame:frame-1, 0); in osst_seek_sector()
1427 r = osst_get_logical_frame(STp, aSRpnt, -1, 1); in osst_seek_sector()
1430 if (osst_get_frame_position(STp, aSRpnt) != (offset?frame+1:frame)) return (-EIO); in osst_seek_sector()
1469 static int osst_read_back_buffer_and_rewrite(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_read_back_buffer_and_rewrite() argument
1472 struct osst_request * SRpnt = * aSRpnt; in osst_read_back_buffer_and_rewrite()
1516 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1526 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1527 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1550 osst_set_frame_position(STp, aSRpnt, new_frame + i, 0); in osst_read_back_buffer_and_rewrite()
1551 osst_wait_ready(STp, aSRpnt, 60, OSST_WAIT_POSITION_COMPLETE); in osst_read_back_buffer_and_rewrite()
1552 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1553 SRpnt = * aSRpnt; in osst_read_back_buffer_and_rewrite()
1632 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1649 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1667 static int osst_reposition_and_retry(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_reposition_and_retry() argument
1693 osst_set_frame_position(STp, aSRpnt, frame + skip, 1); in osst_reposition_and_retry()
1698 if (osst_get_frame_position(STp, aSRpnt) < 0) { /* additional write error */ in osst_reposition_and_retry()
1718 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_TO_DEVICE, in osst_reposition_and_retry()
1720 *aSRpnt = SRpnt; in osst_reposition_and_retry()
1770 static int osst_write_error_recovery(struct osst_tape * STp, struct osst_request ** aSRpnt, int pen… in osst_write_error_recovery() argument
1772 struct osst_request * SRpnt = * aSRpnt; in osst_write_error_recovery()
1799 osst_get_frame_position(STp, aSRpnt); in osst_write_error_recovery()
1812 retval = osst_reposition_and_retry(STp, aSRpnt, frame, skip, pending); in osst_write_error_recovery()
1814 retval = osst_read_back_buffer_and_rewrite(STp, aSRpnt, frame, skip, pending); in osst_write_error_recovery()
1822 osst_set_frame_position(STp, aSRpnt, frame + STp->cur_frames + pending, 0); in osst_write_error_recovery()
1827 retval = osst_read_back_buffer_and_rewrite(STp, aSRpnt, frame, 1, pending); in osst_write_error_recovery()
1831 osst_set_frame_position(STp, aSRpnt, frame + STp->cur_frames + pending, 0); in osst_write_error_recovery()
1833 osst_get_frame_position(STp, aSRpnt); in osst_write_error_recovery()
1849 static int osst_space_over_filemarks_backward(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_backward() argument
1859 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1891 osst_position_tape_and_confirm(STp, aSRpnt, last_mark_ppos); in osst_space_over_filemarks_backward()
1892 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1918 osst_position_tape_and_confirm(STp, aSRpnt, last_mark_ppos); in osst_space_over_filemarks_backward()
1920 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1948 …c int osst_space_over_filemarks_forward_slow(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_forward_slow() argument
1957 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_slow()
1964 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_slow()
2002 …c int osst_space_over_filemarks_forward_fast(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_forward_fast() argument
2012 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2048 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count); in osst_space_over_filemarks_forward_fast()
2050 osst_position_tape_and_confirm(STp, aSRpnt, next_mark_ppos); in osst_space_over_filemarks_forward_fast()
2051 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2088 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count); in osst_space_over_filemarks_forward_fast()
2090 osst_position_tape_and_confirm(STp, aSRpnt, STp->first_mark_ppos); in osst_space_over_filemarks_forward_fast()
2091 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2105 if (osst_space_over_filemarks_backward(STp, aSRpnt, MTBSF, 1) < 0) in osst_space_over_filemarks_forward_fast()
2117 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count - cnt); in osst_space_over_filemarks_forward_fast()
2122 osst_position_tape_and_confirm(STp, aSRpnt, next_mark_ppos); in osst_space_over_filemarks_forward_fast()
2124 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2153 static void osst_set_retries(struct osst_tape * STp, struct osst_request ** aSRpnt, int retries) in osst_set_retries() argument
2156 struct osst_request * SRpnt = * aSRpnt; in osst_set_retries()
2177 *aSRpnt = SRpnt; in osst_set_retries()
2185 static int osst_write_filemark(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_write_filemark() argument
2202 result = osst_flush_write_buffer(STp, aSRpnt); in osst_write_filemark()
2203 result |= osst_flush_drive_buffer(STp, aSRpnt); in osst_write_filemark()
2213 static int osst_write_eod(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_write_eod() argument
2230 result = osst_flush_write_buffer(STp, aSRpnt); in osst_write_eod()
2231 result |= osst_flush_drive_buffer(STp, aSRpnt); in osst_write_eod()
2236 static int osst_write_filler(struct osst_tape * STp, struct osst_request ** aSRpnt, int where, int … in osst_write_filler() argument
2243 osst_wait_ready(STp, aSRpnt, 60 * 5, 0); in osst_write_filler()
2244 osst_set_frame_position(STp, aSRpnt, where, 0); in osst_write_filler()
2250 if (osst_flush_write_buffer(STp, aSRpnt)) { in osst_write_filler()
2258 return osst_flush_drive_buffer(STp, aSRpnt); in osst_write_filler()
2261 static int __osst_write_header(struct osst_tape * STp, struct osst_request ** aSRpnt, int where, in… in __osst_write_header() argument
2269 osst_wait_ready(STp, aSRpnt, 60 * 5, 0); in __osst_write_header()
2270 osst_set_frame_position(STp, aSRpnt, where, 0); in __osst_write_header()
2276 if (osst_flush_write_buffer(STp, aSRpnt)) { in __osst_write_header()
2281 result = osst_flush_drive_buffer(STp, aSRpnt); in __osst_write_header()
2288 static int osst_write_header(struct osst_tape * STp, struct osst_request ** aSRpnt, int locate_eod) in osst_write_header() argument
2340 result = __osst_write_header(STp, aSRpnt, 0xbae, 5); in osst_write_header()
2342 osst_write_filler(STp, aSRpnt, 0xbb3, 5); in osst_write_header()
2343 result &= __osst_write_header(STp, aSRpnt, 5, 5); in osst_write_header()
2349 osst_set_frame_position(STp, aSRpnt, STp->eod_frame_ppos, 0); in osst_write_header()
2362 static int osst_reset_header(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_reset_header() argument
2372 return osst_write_header(STp, aSRpnt, 1); in osst_reset_header()
2375 static int __osst_analyze_headers(struct osst_tape * STp, struct osst_request ** aSRpnt, int ppos) in __osst_analyze_headers() argument
2388 if (osst_set_frame_position(STp, aSRpnt, ppos, 0)) in __osst_analyze_headers()
2390 osst_wait_ready(STp, aSRpnt, 60 * 15, 0); in __osst_analyze_headers()
2391 if (osst_initiate_read (STp, aSRpnt)) { in __osst_analyze_headers()
2396 if (osst_read_frame(STp, aSRpnt, 180)) { in __osst_analyze_headers()
2552 static int osst_analyze_headers(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_analyze_headers() argument
2559 position = osst_get_frame_position(STp, aSRpnt); in osst_analyze_headers()
2581 if (__osst_analyze_headers(STp, aSRpnt, ppos)) in osst_analyze_headers()
2588 if (__osst_analyze_headers(STp, aSRpnt, ppos)) in osst_analyze_headers()
2594 osst_set_frame_position(STp, aSRpnt, 10, 0); in osst_analyze_headers()
2601 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_analyze_headers()
2607 static int osst_verify_position(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_verify_position() argument
2621 osst_set_frame_position(STp, aSRpnt, frame_position - 1, 0); in osst_verify_position()
2622 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_verify_position()
2649 osst_set_frame_position(STp, aSRpnt, frame_position - 1, 0); in osst_verify_position()
2683 static int osst_configure_onstream(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_configure_onstream() argument
2687 struct osst_request * SRpnt = * aSRpnt; in osst_configure_onstream()
2723 *aSRpnt = SRpnt; in osst_configure_onstream()
2754 *aSRpnt = SRpnt; in osst_configure_onstream()
2766 osst_set_retries(STp, aSRpnt, 0); in osst_configure_onstream()
2767 SRpnt = * aSRpnt; in osst_configure_onstream()
2794 *aSRpnt = SRpnt; in osst_configure_onstream()
2809 *aSRpnt = SRpnt; in osst_configure_onstream()
2829 *aSRpnt = SRpnt; in osst_configure_onstream()
2854 static int cross_eof(struct osst_tape *STp, struct osst_request ** aSRpnt, int forward) in cross_eof() argument
2867 result = osst_space_over_filemarks_forward_slow(STp, aSRpnt, MTFSF, 1); in cross_eof()
2871 result = osst_seek_logical_blk(STp, aSRpnt, STp->logical_blk_num - 1); in cross_eof()
2883 static int osst_get_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_get_frame_position() argument
2902 SRpnt = osst_do_scsi(*aSRpnt, STp, scmd, 20, DMA_FROM_DEVICE, in osst_get_frame_position()
2908 *aSRpnt = SRpnt; in osst_get_frame_position()
2967 static int osst_set_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt, int ppos, … in osst_set_frame_position() argument
3001 SRpnt = osst_do_scsi(*aSRpnt, STp, scmd, 0, DMA_NONE, STp->long_timeout, in osst_set_frame_position()
3005 *aSRpnt = SRpnt; in osst_set_frame_position()
3015 osst_wait_ready(STp, aSRpnt, 5 * 60, OSST_WAIT_POSITION_COMPLETE); in osst_set_frame_position()
3025 static int osst_write_trailer(struct osst_tape *STp, struct osst_request ** aSRpnt, int leave_at_EO… in osst_write_trailer() argument
3032 result = osst_flush_drive_buffer(STp, aSRpnt); in osst_write_trailer()
3034 result = osst_write_filemark(STp, aSRpnt); in osst_write_trailer()
3041 result = osst_write_eod(STp, aSRpnt); in osst_write_trailer()
3042 osst_write_header(STp, aSRpnt, leave_at_EOT); in osst_write_trailer()
3052 static int osst_flush_write_buffer(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_flush_write_buffer() argument
3057 struct osst_request * SRpnt = *aSRpnt; in osst_flush_write_buffer()
3067 *aSRpnt = SRpnt = NULL; in osst_flush_write_buffer()
3100 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, -50, 120)) in osst_flush_write_buffer()
3101 result = osst_recover_wait_frame(STp, aSRpnt, 1); in osst_flush_write_buffer()
3139 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, transfer, DMA_TO_DEVICE, in osst_flush_write_buffer()
3141 *aSRpnt = SRpnt; in osst_flush_write_buffer()
3160 if (osst_write_error_recovery(STp, aSRpnt, 1)) { in osst_flush_write_buffer()
3182 static int osst_flush_buffer(struct osst_tape * STp, struct osst_request ** aSRpnt, int seek_next) in osst_flush_buffer() argument
3203 return osst_flush_write_buffer(STp, aSRpnt); in osst_flush_buffer()
3222 result = cross_eof(STp, aSRpnt, 0); /* Back over the EOF hit */ in osst_flush_buffer()
3232 result = osst_seek_logical_blk(STp, aSRpnt, STp->logical_blk_num - backspace); in osst_flush_buffer()
3244 static int osst_write_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int synchronous) in osst_write_frame() argument
3257 if (osst_flush_drive_buffer(STp, aSRpnt) < 0) { in osst_write_frame()
3261 if (osst_get_frame_position(STp, aSRpnt) < 0xbb8) { in osst_write_frame()
3265 osst_position_tape_and_confirm(STp, aSRpnt, 0xbb8); in osst_write_frame()
3270 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, -48, 120)) in osst_write_frame()
3271 if (osst_recover_wait_frame(STp, aSRpnt, 1)) in osst_write_frame()
3296 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_TO_DEVICE, STp->timeout, in osst_write_frame()
3300 *aSRpnt = SRpnt; in osst_write_frame()
3314 if (osst_write_error_recovery(STp, aSRpnt, 1)) in osst_write_frame()
4054 static int osst_int_ioctl(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_int_ioctl() argument
4062 struct osst_request * SRpnt = * aSRpnt; in osst_int_ioctl()
4433 *aSRpnt = SRpnt; in osst_int_ioctl()