Lines Matching refs:tape

234 	struct ide_tape_obj *tape = NULL;  in ide_tape_get()  local
239 tape = idetape_devs[i]; in ide_tape_get()
241 tape = ide_drv_g(disk, ide_tape_obj); in ide_tape_get()
243 if (tape) { in ide_tape_get()
244 if (ide_device_get(tape->drive)) in ide_tape_get()
245 tape = NULL; in ide_tape_get()
247 get_device(&tape->dev); in ide_tape_get()
251 return tape; in ide_tape_get()
254 static void ide_tape_put(struct ide_tape_obj *tape) in ide_tape_put() argument
256 ide_drive_t *drive = tape->drive; in ide_tape_put()
259 put_device(&tape->dev); in ide_tape_put()
270 idetape_tape_t *tape = drive->driver_data; in idetape_analyze_error() local
275 tape->sense_key = sense[2] & 0xF; in idetape_analyze_error()
276 tape->asc = sense[12]; in idetape_analyze_error()
277 tape->ascq = sense[13]; in idetape_analyze_error()
281 rq->cmd[0], tape->sense_key, tape->asc, tape->ascq); in idetape_analyze_error()
285 scsi_req(rq)->resid_len = tape->blk_size * get_unaligned_be32(&sense[3]); in idetape_analyze_error()
295 if (tape->sense_key == 5) { in idetape_analyze_error()
307 if ((sense[2] & 0x40) || (tape->sense_key == 0xd in idetape_analyze_error()
308 && tape->asc == 0x0 && tape->ascq == 0x2)) { in idetape_analyze_error()
314 if (tape->sense_key == 8) { in idetape_analyze_error()
328 idetape_tape_t *tape = drive->driver_data; in ide_tape_callback() local
351 (blk_rq_bytes(rq) - scsi_req(rq)->resid_len) / tape->blk_size; in ide_tape_callback()
353 tape->avg_size += blocks * tape->blk_size; in ide_tape_callback()
355 if (time_after_eq(jiffies, tape->avg_time + HZ)) { in ide_tape_callback()
356 tape->avg_speed = tape->avg_size * HZ / in ide_tape_callback()
357 (jiffies - tape->avg_time) / 1024; in ide_tape_callback()
358 tape->avg_size = 0; in ide_tape_callback()
359 tape->avg_time = jiffies; in ide_tape_callback()
362 tape->first_frame += blocks; in ide_tape_callback()
380 idetape_tape_t *tape = drive->driver_data; in ide_tape_stall_queue() local
383 drive->hwif->rq->cmd[0], tape->dsc_poll_freq); in ide_tape_stall_queue()
385 tape->postponed_rq = true; in ide_tape_stall_queue()
387 ide_stall_queue(drive, tape->dsc_poll_freq); in ide_tape_stall_queue()
392 idetape_tape_t *tape = drive->driver_data; in ide_tape_handle_dsc() local
395 tape->dsc_polling_start = jiffies; in ide_tape_handle_dsc()
396 tape->dsc_poll_freq = IDETAPE_DSC_MA_FAST; in ide_tape_handle_dsc()
397 tape->dsc_timeout = jiffies + IDETAPE_DSC_MA_TIMEOUT; in ide_tape_handle_dsc()
443 idetape_tape_t *tape = drive->driver_data; in ide_tape_issue_pc() local
462 tape->sense_key == 2 && tape->asc == 4 && in ide_tape_issue_pc()
463 (tape->ascq == 1 || tape->ascq == 8))) { in ide_tape_issue_pc()
467 tape->name, pc->c[0], in ide_tape_issue_pc()
468 tape->sense_key, tape->asc, in ide_tape_issue_pc()
469 tape->ascq); in ide_tape_issue_pc()
518 idetape_tape_t *tape = drive->driver_data; in idetape_media_access_finished() local
529 tape->name); in idetape_media_access_finished()
543 static void ide_tape_create_rw_cmd(idetape_tape_t *tape, in ide_tape_create_rw_cmd() argument
547 unsigned int length = blk_rq_sectors(rq) / (tape->blk_size >> 9); in ide_tape_create_rw_cmd()
553 if (blk_rq_bytes(rq) == tape->buffer_size) in ide_tape_create_rw_cmd()
570 idetape_tape_t *tape = drive->driver_data; in idetape_do_request() local
607 if (!tape->postponed_rq) { in idetape_do_request()
608 tape->dsc_polling_start = jiffies; in idetape_do_request()
609 tape->dsc_poll_freq = tape->best_dsc_rw_freq; in idetape_do_request()
610 tape->dsc_timeout = jiffies + IDETAPE_DSC_RW_TIMEOUT; in idetape_do_request()
611 } else if (time_after(jiffies, tape->dsc_timeout)) { in idetape_do_request()
613 tape->name); in idetape_do_request()
621 tape->dsc_polling_start + in idetape_do_request()
623 tape->dsc_poll_freq = IDETAPE_DSC_MA_SLOW; in idetape_do_request()
628 tape->postponed_rq = false; in idetape_do_request()
632 pc = &tape->queued_pc; in idetape_do_request()
633 ide_tape_create_rw_cmd(tape, pc, rq, READ_6); in idetape_do_request()
637 pc = &tape->queued_pc; in idetape_do_request()
638 ide_tape_create_rw_cmd(tape, pc, rq, WRITE_6); in idetape_do_request()
685 idetape_tape_t *tape = drive->driver_data; in idetape_wait_ready() local
686 struct gendisk *disk = tape->disk; in idetape_wait_ready()
695 if ((tape->sense_key == 2 && tape->asc == 4 && tape->ascq == 2) in idetape_wait_ready()
696 || (tape->asc == 0x3A)) { in idetape_wait_ready()
703 } else if (!(tape->sense_key == 2 && tape->asc == 4 && in idetape_wait_ready()
704 (tape->ascq == 1 || tape->ascq == 8))) in idetape_wait_ready()
713 struct ide_tape_obj *tape = drive->driver_data; in idetape_flush_tape_buffers() local
718 rc = ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0); in idetape_flush_tape_buffers()
727 idetape_tape_t *tape = drive->driver_data; in ide_tape_read_position() local
738 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) in ide_tape_read_position()
757 tape->partition = buf[1]; in ide_tape_read_position()
758 tape->first_frame = be32_to_cpup((__be32 *)&buf[4]); in ide_tape_read_position()
764 return tape->first_frame; in ide_tape_read_position()
781 idetape_tape_t *tape = drive->driver_data; in __ide_tape_discard_merge_buffer() local
783 if (tape->chrdev_dir != IDETAPE_DIR_READ) in __ide_tape_discard_merge_buffer()
787 tape->valid = 0; in __ide_tape_discard_merge_buffer()
788 if (tape->buf != NULL) { in __ide_tape_discard_merge_buffer()
789 kfree(tape->buf); in __ide_tape_discard_merge_buffer()
790 tape->buf = NULL; in __ide_tape_discard_merge_buffer()
793 tape->chrdev_dir = IDETAPE_DIR_NONE; in __ide_tape_discard_merge_buffer()
805 idetape_tape_t *tape = drive->driver_data; in idetape_position_tape() local
806 struct gendisk *disk = tape->disk; in idetape_position_tape()
810 if (tape->chrdev_dir == IDETAPE_DIR_READ) in idetape_position_tape()
827 idetape_tape_t *tape = drive->driver_data; in ide_tape_discard_merge_buffer() local
836 " %s\n", tape->name, __func__); in ide_tape_discard_merge_buffer()
848 idetape_tape_t *tape = drive->driver_data; in idetape_queue_rw_tail() local
855 BUG_ON(size < 0 || size % tape->blk_size); in idetape_queue_rw_tail()
860 rq->rq_disk = tape->disk; in idetape_queue_rw_tail()
861 rq->__sector = tape->first_frame; in idetape_queue_rw_tail()
864 ret = blk_rq_map_kern(drive->queue, rq, tape->buf, size, in idetape_queue_rw_tail()
870 blk_execute_rq(drive->queue, tape->disk, rq, 0); in idetape_queue_rw_tail()
874 tape->cur = tape->buf; in idetape_queue_rw_tail()
876 tape->valid = size; in idetape_queue_rw_tail()
878 tape->valid = 0; in idetape_queue_rw_tail()
923 idetape_tape_t *tape = drive->driver_data; in ide_tape_flush_merge_buffer() local
925 if (tape->chrdev_dir != IDETAPE_DIR_WRITE) { in ide_tape_flush_merge_buffer()
930 if (tape->buf) { in ide_tape_flush_merge_buffer()
931 size_t aligned = roundup(tape->valid, tape->blk_size); in ide_tape_flush_merge_buffer()
933 memset(tape->cur, 0, aligned - tape->valid); in ide_tape_flush_merge_buffer()
935 kfree(tape->buf); in ide_tape_flush_merge_buffer()
936 tape->buf = NULL; in ide_tape_flush_merge_buffer()
938 tape->chrdev_dir = IDETAPE_DIR_NONE; in ide_tape_flush_merge_buffer()
943 idetape_tape_t *tape = drive->driver_data; in idetape_init_rw() local
948 if (tape->chrdev_dir == dir) in idetape_init_rw()
951 if (tape->chrdev_dir == IDETAPE_DIR_READ) in idetape_init_rw()
953 else if (tape->chrdev_dir == IDETAPE_DIR_WRITE) { in idetape_init_rw()
958 if (tape->buf || tape->valid) { in idetape_init_rw()
960 tape->valid = 0; in idetape_init_rw()
963 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL); in idetape_init_rw()
964 if (!tape->buf) in idetape_init_rw()
966 tape->chrdev_dir = dir; in idetape_init_rw()
967 tape->cur = tape->buf; in idetape_init_rw()
981 kfree(tape->buf); in idetape_init_rw()
982 tape->buf = NULL; in idetape_init_rw()
983 tape->chrdev_dir = IDETAPE_DIR_NONE; in idetape_init_rw()
993 idetape_tape_t *tape = drive->driver_data; in idetape_pad_zeros() local
995 memset(tape->buf, 0, tape->buffer_size); in idetape_pad_zeros()
998 unsigned int count = min(tape->buffer_size, bcount); in idetape_pad_zeros()
1011 struct ide_tape_obj *tape = drive->driver_data; in idetape_rewind_tape() local
1012 struct gendisk *disk = tape->disk; in idetape_rewind_tape()
1033 idetape_tape_t *tape = drive->driver_data; in idetape_blkdev_ioctl() local
1048 tape->best_dsc_rw_freq = config.dsc_rw_frequency; in idetape_blkdev_ioctl()
1052 config.dsc_rw_frequency = (int) tape->best_dsc_rw_freq; in idetape_blkdev_ioctl()
1066 idetape_tape_t *tape = drive->driver_data; in idetape_space_over_filemarks() local
1067 struct gendisk *disk = tape->disk; in idetape_space_over_filemarks()
1070 int sprev = !!(tape->caps[4] & 0x20); in idetape_space_over_filemarks()
1083 if (tape->chrdev_dir == IDETAPE_DIR_READ) { in idetape_space_over_filemarks()
1084 tape->valid = 0; in idetape_space_over_filemarks()
1132 struct ide_tape_obj *tape = file->private_data; in idetape_chrdev_read() local
1133 ide_drive_t *drive = tape->drive; in idetape_chrdev_read()
1140 if (tape->chrdev_dir != IDETAPE_DIR_READ) { in idetape_chrdev_read()
1142 if (count > tape->blk_size && in idetape_chrdev_read()
1143 (count % tape->blk_size) == 0) in idetape_chrdev_read()
1144 tape->user_bs_factor = count / tape->blk_size; in idetape_chrdev_read()
1155 if (!tape->valid) { in idetape_chrdev_read()
1162 tape->buffer_size) <= 0) in idetape_chrdev_read()
1167 todo = min_t(size_t, count - done, tape->valid); in idetape_chrdev_read()
1168 if (copy_to_user(buf + done, tape->cur, todo)) in idetape_chrdev_read()
1171 tape->cur += todo; in idetape_chrdev_read()
1172 tape->valid -= todo; in idetape_chrdev_read()
1187 struct ide_tape_obj *tape = file->private_data; in idetape_chrdev_write() local
1188 ide_drive_t *drive = tape->drive; in idetape_chrdev_write()
1194 if (tape->write_prot) in idetape_chrdev_write()
1208 if (tape->valid == tape->buffer_size && in idetape_chrdev_write()
1210 tape->buffer_size) <= 0) in idetape_chrdev_write()
1215 tape->buffer_size - tape->valid); in idetape_chrdev_write()
1216 if (copy_from_user(tape->cur, buf + done, todo)) in idetape_chrdev_write()
1219 tape->cur += todo; in idetape_chrdev_write()
1220 tape->valid += todo; in idetape_chrdev_write()
1229 struct ide_tape_obj *tape = drive->driver_data; in idetape_write_filemark() local
1234 if (ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0)) { in idetape_write_filemark()
1256 idetape_tape_t *tape = drive->driver_data; in idetape_mtioctop() local
1257 struct gendisk *disk = tape->disk; in idetape_mtioctop()
1278 if (tape->write_prot) in idetape_mtioctop()
1301 if (tape->door_locked) { in idetape_mtioctop()
1303 tape->door_locked = DOOR_UNLOCKED; in idetape_mtioctop()
1327 if (mt_count < tape->blk_size || in idetape_mtioctop()
1328 mt_count % tape->blk_size) in idetape_mtioctop()
1330 tape->user_bs_factor = mt_count / tape->blk_size; in idetape_mtioctop()
1340 mt_count * tape->user_bs_factor, tape->partition, 0); in idetape_mtioctop()
1350 tape->door_locked = DOOR_EXPLICITLY_LOCKED; in idetape_mtioctop()
1356 tape->door_locked = DOOR_UNLOCKED; in idetape_mtioctop()
1373 struct ide_tape_obj *tape = file->private_data; in do_idetape_chrdev_ioctl() local
1374 ide_drive_t *drive = tape->drive; in do_idetape_chrdev_ioctl()
1378 int block_offset = 0, position = tape->first_frame; in do_idetape_chrdev_ioctl()
1383 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) { in do_idetape_chrdev_ioctl()
1388 block_offset = tape->valid / in do_idetape_chrdev_ioctl()
1389 (tape->blk_size * tape->user_bs_factor); in do_idetape_chrdev_ioctl()
1402 mtget.mt_blkno = position / tape->user_bs_factor - block_offset; in do_idetape_chrdev_ioctl()
1404 ((tape->blk_size * tape->user_bs_factor) in do_idetape_chrdev_ioctl()
1407 if (tape->drv_write_prot) in do_idetape_chrdev_ioctl()
1414 mtpos.mt_blkno = position / tape->user_bs_factor - block_offset; in do_idetape_chrdev_ioctl()
1419 if (tape->chrdev_dir == IDETAPE_DIR_READ) in do_idetape_chrdev_ioctl()
1441 idetape_tape_t *tape = drive->driver_data; in ide_tape_get_bsize_from_bdesc() local
1446 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) { in ide_tape_get_bsize_from_bdesc()
1448 if (tape->blk_size == 0) { in ide_tape_get_bsize_from_bdesc()
1451 tape->blk_size = 32768; in ide_tape_get_bsize_from_bdesc()
1455 tape->blk_size = (buf[4 + 5] << 16) + in ide_tape_get_bsize_from_bdesc()
1458 tape->drv_write_prot = (buf[2] & 0x80) >> 7; in ide_tape_get_bsize_from_bdesc()
1461 tape->blk_size, tape->drv_write_prot); in ide_tape_get_bsize_from_bdesc()
1468 idetape_tape_t *tape; in idetape_chrdev_open() local
1476 tape = ide_tape_get(NULL, true, i); in idetape_chrdev_open()
1477 if (!tape) { in idetape_chrdev_open()
1482 drive = tape->drive; in idetape_chrdev_open()
1483 filp->private_data = tape; in idetape_chrdev_open()
1503 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name); in idetape_chrdev_open()
1516 tape->write_prot = 1; in idetape_chrdev_open()
1518 tape->write_prot = tape->drv_write_prot; in idetape_chrdev_open()
1521 if (tape->write_prot) { in idetape_chrdev_open()
1531 if (tape->chrdev_dir == IDETAPE_DIR_NONE) { in idetape_chrdev_open()
1532 if (!ide_set_media_lock(drive, tape->disk, 1)) { in idetape_chrdev_open()
1533 if (tape->door_locked != DOOR_EXPLICITLY_LOCKED) in idetape_chrdev_open()
1534 tape->door_locked = DOOR_LOCKED; in idetape_chrdev_open()
1542 ide_tape_put(tape); in idetape_chrdev_open()
1551 idetape_tape_t *tape = drive->driver_data; in idetape_write_release() local
1554 tape->buf = kmalloc(tape->buffer_size, GFP_KERNEL); in idetape_write_release()
1555 if (tape->buf != NULL) { in idetape_write_release()
1556 idetape_pad_zeros(drive, tape->blk_size * in idetape_write_release()
1557 (tape->user_bs_factor - 1)); in idetape_write_release()
1558 kfree(tape->buf); in idetape_write_release()
1559 tape->buf = NULL; in idetape_write_release()
1568 struct ide_tape_obj *tape = filp->private_data; in idetape_chrdev_release() local
1569 ide_drive_t *drive = tape->drive; in idetape_chrdev_release()
1574 tape = drive->driver_data; in idetape_chrdev_release()
1578 if (tape->chrdev_dir == IDETAPE_DIR_WRITE) in idetape_chrdev_release()
1580 if (tape->chrdev_dir == IDETAPE_DIR_READ) { in idetape_chrdev_release()
1589 if (tape->chrdev_dir == IDETAPE_DIR_NONE) { in idetape_chrdev_release()
1590 if (tape->door_locked == DOOR_LOCKED) { in idetape_chrdev_release()
1591 if (!ide_set_media_lock(drive, tape->disk, 0)) in idetape_chrdev_release()
1592 tape->door_locked = DOOR_UNLOCKED; in idetape_chrdev_release()
1596 ide_tape_put(tape); in idetape_chrdev_release()
1605 idetape_tape_t *tape = drive->driver_data; in idetape_get_inquiry_results() local
1611 if (ide_queue_pc_tail(drive, tape->disk, &pc, pc_buf, pc.req_xfer)) { in idetape_get_inquiry_results()
1613 tape->name); in idetape_get_inquiry_results()
1625 drive->name, tape->name, vendor_id, product_id, fw_rev); in idetape_get_inquiry_results()
1634 idetape_tape_t *tape = drive->driver_data; in idetape_get_mode_sense_results() local
1640 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) { in idetape_get_mode_sense_results()
1643 tape->blk_size = 512; in idetape_get_mode_sense_results()
1644 put_unaligned(52, (u16 *)&tape->caps[12]); in idetape_get_mode_sense_results()
1645 put_unaligned(540, (u16 *)&tape->caps[14]); in idetape_get_mode_sense_results()
1646 put_unaligned(6*52, (u16 *)&tape->caps[16]); in idetape_get_mode_sense_results()
1671 memcpy(&tape->caps, caps, 20); in idetape_get_mode_sense_results()
1678 tape->blk_size = 512; in idetape_get_mode_sense_results()
1680 tape->blk_size = 1024; in idetape_get_mode_sense_results()
1687 idetape_tape_t *tape = drive->driver_data; \
1688 return tape->field; \
1694 idetape_tape_t *tape = drive->driver_data; \
1695 tape->field = arg; \
1745 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor) in idetape_setup() argument
1749 u16 *ctl = (u16 *)&tape->caps[12]; in idetape_setup()
1759 tape->name); in idetape_setup()
1767 tape->minor = minor; in idetape_setup()
1768 tape->name[0] = 'h'; in idetape_setup()
1769 tape->name[1] = 't'; in idetape_setup()
1770 tape->name[2] = '0' + minor; in idetape_setup()
1771 tape->chrdev_dir = IDETAPE_DIR_NONE; in idetape_setup()
1776 tape->user_bs_factor = 1; in idetape_setup()
1777 tape->buffer_size = *ctl * tape->blk_size; in idetape_setup()
1778 while (tape->buffer_size > 0xffff) { in idetape_setup()
1781 tape->buffer_size = *ctl * tape->blk_size; in idetape_setup()
1785 speed = max(*(u16 *)&tape->caps[14], *(u16 *)&tape->caps[8]); in idetape_setup()
1787 t = (IDETAPE_FIFO_THRESHOLD * tape->buffer_size * HZ) / (speed * 1000); in idetape_setup()
1793 tape->best_dsc_rw_freq = clamp_t(unsigned long, t, IDETAPE_DSC_RW_MIN, in idetape_setup()
1797 drive->name, tape->name, *(u16 *)&tape->caps[14], in idetape_setup()
1798 (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size, in idetape_setup()
1799 tape->buffer_size / 1024, in idetape_setup()
1800 jiffies_to_msecs(tape->best_dsc_rw_freq), in idetape_setup()
1803 ide_proc_register_driver(drive, tape->driver); in idetape_setup()
1808 idetape_tape_t *tape = drive->driver_data; in ide_tape_remove() local
1810 ide_proc_unregister_driver(drive, tape->driver); in ide_tape_remove()
1811 device_del(&tape->dev); in ide_tape_remove()
1812 ide_unregister_region(tape->disk); in ide_tape_remove()
1815 put_device(&tape->dev); in ide_tape_remove()
1821 struct ide_tape_obj *tape = to_ide_drv(dev, ide_tape_obj); in ide_tape_release() local
1822 ide_drive_t *drive = tape->drive; in ide_tape_release()
1823 struct gendisk *g = tape->disk; in ide_tape_release()
1825 BUG_ON(tape->valid); in ide_tape_release()
1829 device_destroy(idetape_sysfs_class, MKDEV(IDETAPE_MAJOR, tape->minor)); in ide_tape_release()
1831 MKDEV(IDETAPE_MAJOR, tape->minor + 128)); in ide_tape_release()
1832 idetape_devs[tape->minor] = NULL; in ide_tape_release()
1835 kfree(tape); in ide_tape_release()
1842 idetape_tape_t *tape = drive->driver_data; in idetape_name_proc_show() local
1844 seq_printf(m, "%s\n", tape->name); in idetape_name_proc_show()
1896 struct ide_tape_obj *tape; in idetape_open() local
1899 tape = ide_tape_get(bdev->bd_disk, false, 0); in idetape_open()
1902 if (!tape) in idetape_open()
1910 struct ide_tape_obj *tape = ide_drv_g(disk, ide_tape_obj); in idetape_release() local
1913 ide_tape_put(tape); in idetape_release()
1920 struct ide_tape_obj *tape = ide_drv_g(bdev->bd_disk, ide_tape_obj); in idetape_ioctl() local
1921 ide_drive_t *drive = tape->drive; in idetape_ioctl()
1942 idetape_tape_t *tape; in ide_tape_probe() local
1960 tape = kzalloc(sizeof(idetape_tape_t), GFP_KERNEL); in ide_tape_probe()
1961 if (tape == NULL) { in ide_tape_probe()
1973 tape->dev.parent = &drive->gendev; in ide_tape_probe()
1974 tape->dev.release = ide_tape_release; in ide_tape_probe()
1975 dev_set_name(&tape->dev, "%s", dev_name(&drive->gendev)); in ide_tape_probe()
1977 if (device_register(&tape->dev)) in ide_tape_probe()
1980 tape->drive = drive; in ide_tape_probe()
1981 tape->driver = &idetape_driver; in ide_tape_probe()
1982 tape->disk = g; in ide_tape_probe()
1984 g->private_data = &tape->driver; in ide_tape_probe()
1986 drive->driver_data = tape; in ide_tape_probe()
1991 idetape_devs[minor] = tape; in ide_tape_probe()
1994 idetape_setup(drive, tape, minor); in ide_tape_probe()
1997 MKDEV(IDETAPE_MAJOR, minor), NULL, "%s", tape->name); in ide_tape_probe()
2000 "n%s", tape->name); in ide_tape_probe()
2010 kfree(tape); in ide_tape_probe()