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…
752 static int osst_wait_ready(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_wait_ready() argument
771 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_wait_ready()
772 *aSRpnt = SRpnt; in osst_wait_ready()
794 *aSRpnt = SRpnt; in osst_wait_ready()
799 osst_write_error_recovery(STp, aSRpnt, 0) ) { in osst_wait_ready()
817 static int osst_wait_for_medium(struct osst_tape * STp, struct osst_request ** aSRpnt, unsigned tim… in osst_wait_for_medium() argument
832 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_wait_for_medium()
833 *aSRpnt = SRpnt; in osst_wait_for_medium()
852 *aSRpnt = SRpnt; in osst_wait_for_medium()
872 static int osst_position_tape_and_confirm(struct osst_tape * STp, struct osst_request ** aSRpnt, in… in osst_position_tape_and_confirm() argument
876 osst_wait_ready(STp, aSRpnt, 15 * 60, 0); /* TODO - can this catch a write error? */ in osst_position_tape_and_confirm()
877 retval = osst_set_frame_position(STp, aSRpnt, frame, 0); in osst_position_tape_and_confirm()
879 osst_wait_ready(STp, aSRpnt, 15 * 60, OSST_WAIT_POSITION_COMPLETE); in osst_position_tape_and_confirm()
880 return (osst_get_frame_position(STp, aSRpnt)); in osst_position_tape_and_confirm()
886 static int osst_flush_drive_buffer(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_flush_drive_buffer() argument
902 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_flush_drive_buffer()
903 *aSRpnt = SRpnt; in osst_flush_drive_buffer()
911 result = osst_write_error_recovery(STp, aSRpnt, 0); in osst_flush_drive_buffer()
913 result |= osst_wait_ready(STp, aSRpnt, 5 * 60, delay); in osst_flush_drive_buffer()
920 static int osst_wait_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int curr, int min… in osst_wait_frame() argument
933 result = osst_get_frame_position(STp, aSRpnt); in osst_wait_frame()
935 if ((result = osst_write_error_recovery(STp, aSRpnt, 0)) == 0) in osst_wait_frame()
975 static int osst_recover_wait_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int writi… in osst_recover_wait_frame() argument
993 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, in osst_recover_wait_frame()
1001 retval = osst_write_error_recovery(STp, aSRpnt, 0); in osst_recover_wait_frame()
1023 (*aSRpnt)->sense[ 2] & 0x0f, in osst_recover_wait_frame()
1024 (*aSRpnt)->sense[12], in osst_recover_wait_frame()
1025 (*aSRpnt)->sense[13]); in osst_recover_wait_frame()
1033 static int osst_read_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int timeout) in osst_read_frame() argument
1044 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, 0, timeout)) in osst_read_frame()
1045 retval = osst_recover_wait_frame(STp, aSRpnt, 0); in osst_read_frame()
1056 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_FROM_DEVICE, in osst_read_frame()
1058 *aSRpnt = SRpnt; in osst_read_frame()
1104 static int osst_initiate_read(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_initiate_read() argument
1115 osst_flush_write_buffer(STp, aSRpnt); in osst_initiate_read()
1116 osst_flush_drive_buffer(STp, aSRpnt); in osst_initiate_read()
1132 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, 0, DMA_NONE, STp->timeout, MAX_RETRIES, 1); in osst_initiate_read()
1133 *aSRpnt = SRpnt; in osst_initiate_read()
1141 static int osst_get_logical_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_get_logical_frame() argument
1169 osst_set_frame_position(STp, aSRpnt, STp->read_error_frame, 0); in osst_get_logical_frame()
1184 if ( osst_initiate_read(STp, aSRpnt) in osst_get_logical_frame()
1185 || ( (!STp->frame_in_buffer) && osst_read_frame(STp, aSRpnt, 30) ) ) { in osst_get_logical_frame()
1188 position = osst_get_frame_position(STp, aSRpnt); in osst_get_logical_frame()
1203 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_get_logical_frame()
1224 position = osst_get_frame_position(STp, aSRpnt) in osst_get_logical_frame()
1236 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_get_logical_frame()
1242 if (osst_get_frame_position(STp, aSRpnt) == 0xbaf) { in osst_get_logical_frame()
1246 osst_set_frame_position(STp, aSRpnt, 0xbb8, 0); in osst_get_logical_frame()
1270 static int osst_seek_logical_blk(struct osst_tape * STp, struct osst_request ** aSRpnt, int logical… in osst_seek_logical_blk() argument
1304 osst_set_frame_position(STp, aSRpnt, ppos_estimate, 0); in osst_seek_logical_blk()
1305 if (osst_get_logical_frame(STp, aSRpnt, frame_seq_estimate, 1) >= 0) { in osst_seek_logical_blk()
1351 if (osst_get_logical_frame(STp, aSRpnt, -1, 1) < 0) in osst_seek_logical_blk()
1379 static int osst_get_sector(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_get_sector() argument
1402 sector = osst_get_frame_position(STp, aSRpnt); in osst_get_sector()
1409 static int osst_seek_sector(struct osst_tape * STp, struct osst_request ** aSRpnt, int sector) in osst_seek_sector() argument
1425 return (osst_set_frame_position(STp, aSRpnt, frame, 0)); in osst_seek_sector()
1427 r = osst_set_frame_position(STp, aSRpnt, offset?frame:frame-1, 0); in osst_seek_sector()
1430 r = osst_get_logical_frame(STp, aSRpnt, -1, 1); in osst_seek_sector()
1433 if (osst_get_frame_position(STp, aSRpnt) != (offset?frame+1:frame)) return (-EIO); in osst_seek_sector()
1472 static int osst_read_back_buffer_and_rewrite(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_read_back_buffer_and_rewrite() argument
1475 struct osst_request * SRpnt = * aSRpnt; in osst_read_back_buffer_and_rewrite()
1519 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1529 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1530 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1553 osst_set_frame_position(STp, aSRpnt, new_frame + i, 0); in osst_read_back_buffer_and_rewrite()
1554 osst_wait_ready(STp, aSRpnt, 60, OSST_WAIT_POSITION_COMPLETE); in osst_read_back_buffer_and_rewrite()
1555 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1556 SRpnt = * aSRpnt; in osst_read_back_buffer_and_rewrite()
1635 *aSRpnt = SRpnt; in osst_read_back_buffer_and_rewrite()
1652 osst_get_frame_position(STp, aSRpnt); in osst_read_back_buffer_and_rewrite()
1670 static int osst_reposition_and_retry(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_reposition_and_retry() argument
1696 osst_set_frame_position(STp, aSRpnt, frame + skip, 1); in osst_reposition_and_retry()
1701 if (osst_get_frame_position(STp, aSRpnt) < 0) { /* additional write error */ in osst_reposition_and_retry()
1721 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_TO_DEVICE, in osst_reposition_and_retry()
1723 *aSRpnt = SRpnt; in osst_reposition_and_retry()
1773 static int osst_write_error_recovery(struct osst_tape * STp, struct osst_request ** aSRpnt, int pen… in osst_write_error_recovery() argument
1775 struct osst_request * SRpnt = * aSRpnt; in osst_write_error_recovery()
1802 osst_get_frame_position(STp, aSRpnt); in osst_write_error_recovery()
1815 retval = osst_reposition_and_retry(STp, aSRpnt, frame, skip, pending); in osst_write_error_recovery()
1817 retval = osst_read_back_buffer_and_rewrite(STp, aSRpnt, frame, skip, pending); in osst_write_error_recovery()
1825 osst_set_frame_position(STp, aSRpnt, frame + STp->cur_frames + pending, 0); in osst_write_error_recovery()
1830 retval = osst_read_back_buffer_and_rewrite(STp, aSRpnt, frame, 1, pending); in osst_write_error_recovery()
1834 osst_set_frame_position(STp, aSRpnt, frame + STp->cur_frames + pending, 0); in osst_write_error_recovery()
1836 osst_get_frame_position(STp, aSRpnt); in osst_write_error_recovery()
1852 static int osst_space_over_filemarks_backward(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_backward() argument
1862 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1894 osst_position_tape_and_confirm(STp, aSRpnt, last_mark_ppos); in osst_space_over_filemarks_backward()
1895 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1921 osst_position_tape_and_confirm(STp, aSRpnt, last_mark_ppos); in osst_space_over_filemarks_backward()
1923 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_backward()
1951 …c int osst_space_over_filemarks_forward_slow(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_forward_slow() argument
1960 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_slow()
1967 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_slow()
2005 …c int osst_space_over_filemarks_forward_fast(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_space_over_filemarks_forward_fast() argument
2015 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2051 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count); in osst_space_over_filemarks_forward_fast()
2053 osst_position_tape_and_confirm(STp, aSRpnt, next_mark_ppos); in osst_space_over_filemarks_forward_fast()
2054 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2091 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count); in osst_space_over_filemarks_forward_fast()
2093 osst_position_tape_and_confirm(STp, aSRpnt, STp->first_mark_ppos); in osst_space_over_filemarks_forward_fast()
2094 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2108 if (osst_space_over_filemarks_backward(STp, aSRpnt, MTBSF, 1) < 0) in osst_space_over_filemarks_forward_fast()
2120 return osst_space_over_filemarks_forward_slow(STp, aSRpnt, mt_op, mt_count - cnt); in osst_space_over_filemarks_forward_fast()
2125 osst_position_tape_and_confirm(STp, aSRpnt, next_mark_ppos); in osst_space_over_filemarks_forward_fast()
2127 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_space_over_filemarks_forward_fast()
2156 static void osst_set_retries(struct osst_tape * STp, struct osst_request ** aSRpnt, int retries) in osst_set_retries() argument
2159 struct osst_request * SRpnt = * aSRpnt; in osst_set_retries()
2180 *aSRpnt = SRpnt; in osst_set_retries()
2188 static int osst_write_filemark(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_write_filemark() argument
2205 result = osst_flush_write_buffer(STp, aSRpnt); in osst_write_filemark()
2206 result |= osst_flush_drive_buffer(STp, aSRpnt); in osst_write_filemark()
2216 static int osst_write_eod(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_write_eod() argument
2233 result = osst_flush_write_buffer(STp, aSRpnt); in osst_write_eod()
2234 result |= osst_flush_drive_buffer(STp, aSRpnt); in osst_write_eod()
2239 static int osst_write_filler(struct osst_tape * STp, struct osst_request ** aSRpnt, int where, int … in osst_write_filler() argument
2246 osst_wait_ready(STp, aSRpnt, 60 * 5, 0); in osst_write_filler()
2247 osst_set_frame_position(STp, aSRpnt, where, 0); in osst_write_filler()
2253 if (osst_flush_write_buffer(STp, aSRpnt)) { in osst_write_filler()
2261 return osst_flush_drive_buffer(STp, aSRpnt); in osst_write_filler()
2264 static int __osst_write_header(struct osst_tape * STp, struct osst_request ** aSRpnt, int where, in… in __osst_write_header() argument
2272 osst_wait_ready(STp, aSRpnt, 60 * 5, 0); in __osst_write_header()
2273 osst_set_frame_position(STp, aSRpnt, where, 0); in __osst_write_header()
2279 if (osst_flush_write_buffer(STp, aSRpnt)) { in __osst_write_header()
2284 result = osst_flush_drive_buffer(STp, aSRpnt); in __osst_write_header()
2291 static int osst_write_header(struct osst_tape * STp, struct osst_request ** aSRpnt, int locate_eod) in osst_write_header() argument
2343 result = __osst_write_header(STp, aSRpnt, 0xbae, 5); in osst_write_header()
2345 osst_write_filler(STp, aSRpnt, 0xbb3, 5); in osst_write_header()
2346 result &= __osst_write_header(STp, aSRpnt, 5, 5); in osst_write_header()
2352 osst_set_frame_position(STp, aSRpnt, STp->eod_frame_ppos, 0); in osst_write_header()
2365 static int osst_reset_header(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_reset_header() argument
2375 return osst_write_header(STp, aSRpnt, 1); in osst_reset_header()
2378 static int __osst_analyze_headers(struct osst_tape * STp, struct osst_request ** aSRpnt, int ppos) in __osst_analyze_headers() argument
2391 if (osst_set_frame_position(STp, aSRpnt, ppos, 0)) in __osst_analyze_headers()
2393 osst_wait_ready(STp, aSRpnt, 60 * 15, 0); in __osst_analyze_headers()
2394 if (osst_initiate_read (STp, aSRpnt)) { in __osst_analyze_headers()
2399 if (osst_read_frame(STp, aSRpnt, 180)) { in __osst_analyze_headers()
2555 static int osst_analyze_headers(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_analyze_headers() argument
2562 position = osst_get_frame_position(STp, aSRpnt); in osst_analyze_headers()
2584 if (__osst_analyze_headers(STp, aSRpnt, ppos)) in osst_analyze_headers()
2591 if (__osst_analyze_headers(STp, aSRpnt, ppos)) in osst_analyze_headers()
2597 osst_set_frame_position(STp, aSRpnt, 10, 0); in osst_analyze_headers()
2604 osst_set_frame_position(STp, aSRpnt, position, 0); in osst_analyze_headers()
2610 static int osst_verify_position(struct osst_tape * STp, struct osst_request ** aSRpnt) in osst_verify_position() argument
2624 osst_set_frame_position(STp, aSRpnt, frame_position - 1, 0); in osst_verify_position()
2625 if (osst_get_logical_frame(STp, aSRpnt, -1, 0) < 0) { in osst_verify_position()
2652 osst_set_frame_position(STp, aSRpnt, frame_position - 1, 0); in osst_verify_position()
2686 static int osst_configure_onstream(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_configure_onstream() argument
2690 struct osst_request * SRpnt = * aSRpnt; in osst_configure_onstream()
2726 *aSRpnt = SRpnt; in osst_configure_onstream()
2757 *aSRpnt = SRpnt; in osst_configure_onstream()
2769 osst_set_retries(STp, aSRpnt, 0); in osst_configure_onstream()
2770 SRpnt = * aSRpnt; in osst_configure_onstream()
2797 *aSRpnt = SRpnt; in osst_configure_onstream()
2812 *aSRpnt = SRpnt; in osst_configure_onstream()
2832 *aSRpnt = SRpnt; in osst_configure_onstream()
2857 static int cross_eof(struct osst_tape *STp, struct osst_request ** aSRpnt, int forward) in cross_eof() argument
2870 result = osst_space_over_filemarks_forward_slow(STp, aSRpnt, MTFSF, 1); in cross_eof()
2874 result = osst_seek_logical_blk(STp, aSRpnt, STp->logical_blk_num - 1); in cross_eof()
2886 static int osst_get_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_get_frame_position() argument
2905 SRpnt = osst_do_scsi(*aSRpnt, STp, scmd, 20, DMA_FROM_DEVICE, in osst_get_frame_position()
2911 *aSRpnt = SRpnt; in osst_get_frame_position()
2970 static int osst_set_frame_position(struct osst_tape *STp, struct osst_request ** aSRpnt, int ppos, … in osst_set_frame_position() argument
3004 SRpnt = osst_do_scsi(*aSRpnt, STp, scmd, 0, DMA_NONE, STp->long_timeout, in osst_set_frame_position()
3008 *aSRpnt = SRpnt; in osst_set_frame_position()
3018 osst_wait_ready(STp, aSRpnt, 5 * 60, OSST_WAIT_POSITION_COMPLETE); in osst_set_frame_position()
3028 static int osst_write_trailer(struct osst_tape *STp, struct osst_request ** aSRpnt, int leave_at_EO… in osst_write_trailer() argument
3035 result = osst_flush_drive_buffer(STp, aSRpnt); in osst_write_trailer()
3037 result = osst_write_filemark(STp, aSRpnt); in osst_write_trailer()
3044 result = osst_write_eod(STp, aSRpnt); in osst_write_trailer()
3045 osst_write_header(STp, aSRpnt, leave_at_EOT); in osst_write_trailer()
3055 static int osst_flush_write_buffer(struct osst_tape *STp, struct osst_request ** aSRpnt) in osst_flush_write_buffer() argument
3060 struct osst_request * SRpnt = *aSRpnt; in osst_flush_write_buffer()
3070 *aSRpnt = SRpnt = NULL; in osst_flush_write_buffer()
3103 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, -50, 120)) in osst_flush_write_buffer()
3104 result = osst_recover_wait_frame(STp, aSRpnt, 1); in osst_flush_write_buffer()
3142 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, transfer, DMA_TO_DEVICE, in osst_flush_write_buffer()
3144 *aSRpnt = SRpnt; in osst_flush_write_buffer()
3163 if (osst_write_error_recovery(STp, aSRpnt, 1)) { in osst_flush_write_buffer()
3185 static int osst_flush_buffer(struct osst_tape * STp, struct osst_request ** aSRpnt, int seek_next) in osst_flush_buffer() argument
3206 return osst_flush_write_buffer(STp, aSRpnt); in osst_flush_buffer()
3225 result = cross_eof(STp, aSRpnt, 0); /* Back over the EOF hit */ in osst_flush_buffer()
3235 result = osst_seek_logical_blk(STp, aSRpnt, STp->logical_blk_num - backspace); in osst_flush_buffer()
3247 static int osst_write_frame(struct osst_tape * STp, struct osst_request ** aSRpnt, int synchronous) in osst_write_frame() argument
3260 if (osst_flush_drive_buffer(STp, aSRpnt) < 0) { in osst_write_frame()
3264 if (osst_get_frame_position(STp, aSRpnt) < 0xbb8) { in osst_write_frame()
3268 osst_position_tape_and_confirm(STp, aSRpnt, 0xbb8); in osst_write_frame()
3273 if (osst_wait_frame (STp, aSRpnt, STp->first_frame_position, -48, 120)) in osst_write_frame()
3274 if (osst_recover_wait_frame(STp, aSRpnt, 1)) in osst_write_frame()
3299 SRpnt = osst_do_scsi(*aSRpnt, STp, cmd, OS_FRAME_SIZE, DMA_TO_DEVICE, STp->timeout, in osst_write_frame()
3303 *aSRpnt = SRpnt; in osst_write_frame()
3317 if (osst_write_error_recovery(STp, aSRpnt, 1)) in osst_write_frame()
4057 static int osst_int_ioctl(struct osst_tape * STp, struct osst_request ** aSRpnt, in osst_int_ioctl() argument
4065 struct osst_request * SRpnt = * aSRpnt; in osst_int_ioctl()
4436 *aSRpnt = SRpnt; in osst_int_ioctl()