Lines Matching refs:drive

142 	ide_drive_t		*drive;
245 if (ide_device_get(tape->drive))
257 ide_drive_t *drive = tape->drive;
261 ide_device_put(drive);
269 static void idetape_analyze_error(ide_drive_t *drive)
271 idetape_tape_t *tape = drive->driver_data;
272 struct ide_atapi_pc *pc = drive->failed_pc;
273 struct request *rq = drive->hwif->rq;
327 static int ide_tape_callback(ide_drive_t *drive, int dsc)
329 idetape_tape_t *tape = drive->driver_data;
330 struct ide_atapi_pc *pc = drive->pc;
331 struct request *rq = drive->hwif->rq;
339 ide_tape_handle_dsc(drive);
341 if (drive->failed_pc == pc)
342 drive->failed_pc = NULL;
346 idetape_analyze_error(drive);
379 static void ide_tape_stall_queue(ide_drive_t *drive)
381 idetape_tape_t *tape = drive->driver_data;
384 drive->hwif->rq->cmd[0], tape->dsc_poll_freq);
388 ide_stall_queue(drive, tape->dsc_poll_freq);
391 static void ide_tape_handle_dsc(ide_drive_t *drive)
393 idetape_tape_t *tape = drive->driver_data;
400 ide_tape_stall_queue(drive);
406 * The current Packet Command is available in drive->pc, and will not change
412 * 1. ide_tape_issue_pc will send the packet command to the drive, and will set
421 * Since the tape drive will not issue an interrupt, we have to poll for this
440 static ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive,
444 idetape_tape_t *tape = drive->driver_data;
445 struct request *rq = drive->hwif->rq;
447 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE)
448 drive->failed_pc = pc;
451 drive->pc = pc;
476 drive->failed_pc = NULL;
477 drive->pc_callback(drive, 0);
478 ide_complete_rq(drive, BLK_STS_IOERR, blk_rq_bytes(rq));
486 return ide_issue_pc(drive, cmd);
516 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive)
518 ide_hwif_t *hwif = drive->hwif;
519 idetape_tape_t *tape = drive->driver_data;
520 struct ide_atapi_pc *pc = drive->pc;
532 ide_retry_pc(drive);
538 drive->failed_pc = NULL;
540 drive->pc_callback(drive, 0);
567 static ide_startstop_t idetape_do_request(ide_drive_t *drive,
570 ide_hwif_t *hwif = drive->hwif;
571 idetape_tape_t *tape = drive->driver_data;
586 if (drive->failed_pc && drive->pc->c[0] == REQUEST_SENSE) {
587 pc = drive->failed_pc;
597 if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 &&
599 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
601 if (drive->dev_flags & IDE_DFLAG_POST_RESET) {
602 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
603 drive->dev_flags &= ~IDE_DFLAG_POST_RESET;
606 if (!(drive->atapi_flags & IDE_AFLAG_IGNORE_DSC) &&
616 idetape_media_access_finished(drive);
619 return ide_do_reset(drive);
625 ide_tape_stall_queue(drive);
628 drive->atapi_flags &= ~IDE_AFLAG_IGNORE_DSC;
649 idetape_media_access_finished(drive);
656 ide_prep_sense(drive, rq);
666 ide_map_sg(drive, &cmd);
668 return ide_tape_issue_pc(drive, &cmd, pc);
675 static void idetape_create_write_filemark_cmd(ide_drive_t *drive,
684 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout)
686 idetape_tape_t *tape = drive->driver_data;
691 set_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT), &drive->atapi_flags);
694 if (ide_do_test_unit_ready(drive, disk) == 0)
701 ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
712 static int idetape_flush_tape_buffers(ide_drive_t *drive)
714 struct ide_tape_obj *tape = drive->driver_data;
718 idetape_create_write_filemark_cmd(drive, &pc, 0);
719 rc = ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0);
722 idetape_wait_ready(drive, 60 * 5 * HZ);
726 static int ide_tape_read_position(ide_drive_t *drive)
728 idetape_tape_t *tape = drive->driver_data;
739 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer))
752 &drive->atapi_flags);
761 &drive->atapi_flags);
768 static void idetape_create_locate_cmd(ide_drive_t *drive,
780 static void __ide_tape_discard_merge_buffer(ide_drive_t *drive)
782 idetape_tape_t *tape = drive->driver_data;
787 clear_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags);
803 static int idetape_position_tape(ide_drive_t *drive, unsigned int block,
806 idetape_tape_t *tape = drive->driver_data;
812 __ide_tape_discard_merge_buffer(drive);
813 idetape_wait_ready(drive, 60 * 5 * HZ);
814 idetape_create_locate_cmd(drive, &pc, block, partition, skip);
815 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
819 ret = ide_tape_read_position(drive);
825 static void ide_tape_discard_merge_buffer(ide_drive_t *drive,
828 idetape_tape_t *tape = drive->driver_data;
831 __ide_tape_discard_merge_buffer(drive);
833 position = ide_tape_read_position(drive);
835 if (idetape_position_tape(drive, seek, 0, 0)) {
847 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int size)
849 idetape_tape_t *tape = drive->driver_data;
858 rq = blk_get_request(drive->queue, REQ_OP_DRV_IN, 0);
865 ret = blk_rq_map_kern(drive->queue, rq, tape->buf, size,
871 blk_execute_rq(drive->queue, tape->disk, rq, 0);
897 static void idetape_create_rewind_cmd(ide_drive_t *drive,
922 static void ide_tape_flush_merge_buffer(ide_drive_t *drive)
924 idetape_tape_t *tape = drive->driver_data;
935 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, aligned);
942 static int idetape_init_rw(ide_drive_t *drive, int dir)
944 idetape_tape_t *tape = drive->driver_data;
953 ide_tape_discard_merge_buffer(drive, 1);
955 ide_tape_flush_merge_buffer(drive);
956 idetape_flush_tape_buffers(drive);
976 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) {
980 rc = idetape_queue_rw_tail(drive, cmd, 0);
992 static void idetape_pad_zeros(ide_drive_t *drive, int bcount)
994 idetape_tape_t *tape = drive->driver_data;
1001 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, count);
1010 static int idetape_rewind_tape(ide_drive_t *drive)
1012 struct ide_tape_obj *tape = drive->driver_data;
1019 idetape_create_rewind_cmd(drive, &pc);
1020 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1024 ret = ide_tape_read_position(drive);
1031 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd,
1034 idetape_tape_t *tape = drive->driver_data;
1064 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op,
1067 idetape_tape_t *tape = drive->driver_data;
1087 &drive->atapi_flags))
1089 ide_tape_discard_merge_buffer(drive, 0);
1097 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1102 retval = idetape_space_over_filemarks(drive, MTFSF,
1107 return idetape_space_over_filemarks(drive, MTFSF, count);
1134 ide_drive_t *drive = tape->drive;
1142 if (test_bit(ilog2(IDE_AFLAG_DETECT_BS), &drive->atapi_flags))
1148 rc = idetape_init_rw(drive, IDETAPE_DIR_READ);
1159 &drive->atapi_flags))
1162 if (idetape_queue_rw_tail(drive, REQ_IDETAPE_READ,
1177 if (!done && test_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags)) {
1178 idetape_space_over_filemarks(drive, MTFSF, 1);
1189 ide_drive_t *drive = tape->drive;
1194 /* The drive is write protected. */
1201 rc = idetape_init_rw(drive, IDETAPE_DIR_WRITE);
1210 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE,
1228 static int idetape_write_filemark(ide_drive_t *drive)
1230 struct ide_tape_obj *tape = drive->driver_data;
1234 idetape_create_write_filemark_cmd(drive, &pc, 1);
1235 if (ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0)) {
1255 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count)
1257 idetape_tape_t *tape = drive->driver_data;
1272 return idetape_space_over_filemarks(drive, mt_op, mt_count);
1281 ide_tape_discard_merge_buffer(drive, 1);
1283 retval = idetape_write_filemark(drive);
1289 ide_tape_discard_merge_buffer(drive, 0);
1290 if (idetape_rewind_tape(drive))
1294 ide_tape_discard_merge_buffer(drive, 0);
1295 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK);
1303 if (!ide_set_media_lock(drive, disk, 0))
1306 ide_tape_discard_merge_buffer(drive, 0);
1307 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK);
1310 &drive->atapi_flags);
1313 ide_tape_discard_merge_buffer(drive, 0);
1314 return idetape_flush_tape_buffers(drive);
1316 ide_tape_discard_merge_buffer(drive, 0);
1317 return ide_do_start_stop(drive, disk,
1321 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1323 (void)idetape_rewind_tape(drive);
1325 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
1333 &drive->atapi_flags);
1336 &drive->atapi_flags);
1339 ide_tape_discard_merge_buffer(drive, 0);
1340 return idetape_position_tape(drive,
1343 ide_tape_discard_merge_buffer(drive, 0);
1344 return idetape_position_tape(drive, 0, mt_count, 0);
1348 retval = ide_set_media_lock(drive, disk, 1);
1354 retval = ide_set_media_lock(drive, disk, 0);
1375 ide_drive_t *drive = tape->drive;
1385 ide_tape_flush_merge_buffer(drive);
1386 idetape_flush_tape_buffers(drive);
1391 position = ide_tape_read_position(drive);
1399 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count);
1417 ide_tape_discard_merge_buffer(drive, 1);
1418 return idetape_blkdev_ioctl(drive, cmd, arg);
1452 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive)
1454 idetape_tape_t *tape = drive->driver_data;
1459 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1480 ide_drive_t *drive;
1495 drive = tape->drive;
1508 if (test_and_set_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags)) {
1513 retval = idetape_wait_ready(drive, 60 * HZ);
1515 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1516 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name);
1520 ide_tape_read_position(drive);
1521 if (!test_bit(ilog2(IDE_AFLAG_ADDRESS_VALID), &drive->atapi_flags))
1522 (void)idetape_rewind_tape(drive);
1524 /* Read block size and write protect status from drive. */
1525 ide_tape_get_bsize_from_bdesc(drive);
1533 /* Make sure drive isn't write protected if user wants to write. */
1537 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1543 /* Lock the tape drive door so user can't eject. */
1545 if (!ide_set_media_lock(drive, tape->disk, 1)) {
1562 static void idetape_write_release(ide_drive_t *drive, unsigned int minor)
1564 idetape_tape_t *tape = drive->driver_data;
1566 ide_tape_flush_merge_buffer(drive);
1569 idetape_pad_zeros(drive, tape->blk_size *
1574 idetape_write_filemark(drive);
1575 idetape_flush_tape_buffers(drive);
1576 idetape_flush_tape_buffers(drive);
1582 ide_drive_t *drive = tape->drive;
1587 tape = drive->driver_data;
1592 idetape_write_release(drive, minor);
1595 ide_tape_discard_merge_buffer(drive, 1);
1599 &drive->atapi_flags))
1600 (void) idetape_rewind_tape(drive);
1604 if (!ide_set_media_lock(drive, tape->disk, 0))
1608 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags);
1616 static void idetape_get_inquiry_results(ide_drive_t *drive)
1618 idetape_tape_t *tape = drive->driver_data;
1624 if (ide_queue_pc_tail(drive, tape->disk, &pc, pc_buf, pc.req_xfer)) {
1638 drive->name, tape->name, vendor_id, product_id, fw_rev);
1645 static void idetape_get_mode_sense_results(ide_drive_t *drive)
1647 idetape_tape_t *tape = drive->driver_data;
1653 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) {
1675 "(assuming 650KB/sec)\n", drive->name);
1680 "(assuming 650KB/sec)\n", drive->name);
1688 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1698 static int get_##name(ide_drive_t *drive) \
1700 idetape_tape_t *tape = drive->driver_data; \
1705 static int set_##name(ide_drive_t *drive, int arg) \
1707 idetape_tape_t *tape = drive->driver_data; \
1721 static int mulf_tdsc(ide_drive_t *drive) { return 1000; }
1722 static int divf_tdsc(ide_drive_t *drive) { return HZ; }
1723 static int divf_buffer(ide_drive_t *drive) { return 2; }
1724 static int divf_buffer_size(ide_drive_t *drive) { return 1024; }
1758 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor)
1766 drive->pc_callback = ide_tape_callback;
1768 drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP;
1770 if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) {
1773 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1777 if (strstr((char *)&drive->id[ATA_ID_PROD], "Seagate STT3401"))
1778 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1786 idetape_get_inquiry_results(drive);
1787 idetape_get_mode_sense_results(drive);
1788 ide_tape_get_bsize_from_bdesc(drive);
1810 drive->name, tape->name, *(u16 *)&tape->caps[14],
1814 (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : "");
1816 ide_proc_register_driver(drive, tape->driver);
1819 static void ide_tape_remove(ide_drive_t *drive)
1821 idetape_tape_t *tape = drive->driver_data;
1823 ide_proc_unregister_driver(drive, tape->driver);
1835 ide_drive_t *drive = tape->drive;
1840 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP;
1841 drive->driver_data = NULL;
1854 ide_drive_t *drive = (ide_drive_t *) m->private;
1855 idetape_tape_t *tape = drive->driver_data;
1867 static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive)
1872 static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive)
1936 ide_drive_t *drive = tape->drive;
1940 err = generic_ide_ioctl(drive, bdev, cmd, arg);
1942 err = idetape_blkdev_ioctl(drive, cmd, arg);
1966 static int ide_tape_probe(ide_drive_t *drive)
1974 if (!strstr(DRV_NAME, drive->driver_req))
1977 if (drive->media != ide_tape)
1980 if ((drive->dev_flags & IDE_DFLAG_ID_READ) &&
1981 ide_check_atapi_device(drive, DRV_NAME) == 0) {
1983 " the driver\n", drive->name);
1989 drive->name);
1997 ide_init_disk(g, drive);
1999 tape->dev.parent = &drive->gendev;
2001 dev_set_name(&tape->dev, "%s", dev_name(&drive->gendev));
2006 tape->drive = drive;
2012 drive->driver_data = tape;
2020 idetape_setup(drive, tape, minor);
2022 device_create(idetape_sysfs_class, &drive->gendev,
2024 device_create(idetape_sysfs_class, &drive->gendev,