Lines Matching refs:drive
28 static inline int dev_is_idecd(ide_drive_t *drive)
30 return drive->media == ide_cdrom || drive->media == ide_optical;
37 int ide_check_atapi_device(ide_drive_t *drive, const char *s)
39 u16 *id = drive->id;
52 if (drive->media == ide_floppy && device_type == 5 &&
60 s, drive->name, protocol);
61 else if ((drive->media == ide_floppy && device_type != 0) ||
62 (drive->media == ide_tape && device_type != 1))
64 s, drive->name, device_type);
67 s, drive->name);
68 else if (drive->media == ide_floppy && drq_type == 3)
70 "supported\n", s, drive->name, drq_type);
73 "bytes\n", s, drive->name, packet_size);
90 int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
96 rq = blk_get_request(drive->queue, REQ_OP_DRV_IN, 0);
101 error = blk_rq_map_kern(drive->queue, rq, buf, bufflen,
108 if (drive->media == ide_tape)
110 blk_execute_rq(drive->queue, disk, rq, 0);
118 int ide_do_test_unit_ready(ide_drive_t *drive, struct gendisk *disk)
125 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
129 int ide_do_start_stop(ide_drive_t *drive, struct gendisk *disk, int start)
137 if (drive->media == ide_tape)
140 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
144 int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on)
148 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0)
155 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
159 void ide_create_request_sense_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc)
163 if (drive->media == ide_floppy) {
173 void ide_prep_sense(ide_drive_t *drive, struct request *rq)
175 struct request_sense *sense = &drive->sense_data;
181 switch (drive->media) {
197 if (ata_sense_request(rq) || drive->sense_rq_armed)
200 sense_rq = drive->sense_rq;
202 sense_rq = blk_mq_alloc_request(drive->queue, REQ_OP_DRV_IN,
204 drive->sense_rq = sense_rq;
212 err = blk_rq_map_kern(drive->queue, sense_rq, sense, sense_len,
217 "buffer\n", drive->name);
219 drive->sense_rq = NULL;
229 if (drive->media == ide_tape)
232 drive->sense_rq_armed = true;
236 int ide_queue_sense_rq(ide_drive_t *drive, void *special)
238 ide_hwif_t *hwif = drive->hwif;
245 if (!drive->sense_rq_armed) {
247 drive->name);
252 sense_rq = drive->sense_rq;
254 drive->sense_rq_armed = false;
256 drive->hwif->rq = NULL;
258 ide_insert_request_head(drive, sense_rq);
269 void ide_retry_pc(ide_drive_t *drive)
271 struct request *failed_rq = drive->hwif->rq;
272 struct request *sense_rq = drive->sense_rq;
273 struct ide_atapi_pc *pc = &drive->request_sense_pc;
275 (void)ide_read_error(drive);
281 if (drive->media == ide_tape)
282 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
289 drive->hwif->rq = NULL;
290 ide_requeue_and_plug(drive, failed_rq);
291 if (ide_queue_sense_rq(drive, pc))
292 ide_complete_rq(drive, BLK_STS_IOERR, blk_rq_bytes(failed_rq));
296 int ide_cd_expiry(ide_drive_t *drive)
298 struct request *rq = drive->hwif->rq;
349 void ide_read_bcount_and_ireason(ide_drive_t *drive, u16 *bcount, u8 *ireason)
353 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT |
369 int ide_check_ireason(ide_drive_t *drive, struct request *rq, int len,
372 ide_hwif_t *hwif = drive->hwif;
380 drive->name, __func__);
382 if (dev_is_idecd(drive))
383 ide_pad_transfer(drive, rw, len);
385 if (dev_is_idecd(drive)) {
395 printk(KERN_ERR PFX "%s: CoD != 0 in %s\n", drive->name,
398 /* drive wants a command packet, or invalid ireason... */
400 drive->name, __func__, ireason);
403 if (dev_is_idecd(drive) && ata_pc_request(rq))
412 * command. We will transfer some of the data (as requested by the drive)
415 static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
417 struct ide_atapi_pc *pc = drive->pc;
418 ide_hwif_t *hwif = drive->hwif;
429 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
438 drive->waiting_for_dma = 0;
439 rc = hwif->dma_ops->dma_end(drive);
440 ide_dma_unmap_sg(drive, cmd);
442 if (rc || (drive->media == ide_tape && (stat & ATA_ERR))) {
443 if (drive->media == ide_floppy)
445 drive->name, rq_data_dir(pc->rq)
450 debug_log("%s: DMA finished\n", drive->name);
465 if (drive->media == ide_tape &&
471 debug_log("%s: I/O error\n", drive->name);
473 if (drive->media != ide_tape)
478 "sense command\n", drive->name);
479 return ide_do_reset(drive);
485 ide_retry_pc(drive);
502 uptodate = drive->pc_callback(drive, dsc);
505 drive->failed_pc = NULL;
520 ide_complete_rq(drive, error, blk_rq_bytes(rq));
527 "interrupts in DMA mode\n", drive->name);
528 ide_dma_off(drive);
529 return ide_do_reset(drive);
533 ide_read_bcount_and_ireason(drive, &bcount, &ireason);
535 if (ide_check_ireason(drive, rq, bcount, ireason, write))
536 return ide_do_reset(drive);
539 ide_pio_bytes(drive, cmd, write, done);
547 ide_pad_transfer(drive, write, bcount);
553 ide_set_handler(drive, ide_pc_intr, timeout);
569 static u8 ide_read_ireason(ide_drive_t *drive)
573 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT);
578 static u8 ide_wait_ireason(ide_drive_t *drive, u8 ireason)
585 "a packet command, retrying\n", drive->name);
587 ireason = ide_read_ireason(drive);
591 drive->name);
600 static int ide_delayed_transfer_pc(ide_drive_t *drive)
603 drive->hwif->tp_ops->output_data(drive, NULL, drive->pc->c, 12);
609 static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)
612 ide_hwif_t *hwif = drive->hwif;
620 if (ide_wait_stat(&startstop, drive, ATA_DRQ, ATA_BUSY, WAIT_READY)) {
622 "DRQ isn't asserted\n", drive->name);
626 if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
627 if (drive->dma)
628 drive->waiting_for_dma = 1;
631 if (dev_is_idecd(drive)) {
640 pc = drive->pc;
649 if (drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) {
650 timeout = drive->pc_delay;
653 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
658 ireason = ide_read_ireason(drive);
659 if (drive->media == ide_tape)
660 ireason = ide_wait_ireason(drive, ireason);
664 "issuing a packet command\n", drive->name);
666 return ide_do_reset(drive);
673 ide_set_handler(drive,
674 (dev_is_idecd(drive) ? drive->irq_handler
679 if ((drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) == 0)
680 hwif->tp_ops->output_data(drive, NULL, scsi_req(rq)->cmd, cmd_len);
683 if (dev_is_idecd(drive)) {
684 if (drive->dma)
685 hwif->dma_ops->dma_start(drive);
689 hwif->dma_ops->dma_start(drive);
696 ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd)
699 ide_hwif_t *hwif = drive->hwif;
705 u8 drq_int = !!(drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT);
707 if (dev_is_idecd(drive)) {
713 if (drive->dma)
714 drive->dma = !ide_dma_prepare(drive, cmd);
716 pc = drive->pc;
720 bcount = ((drive->media == ide_tape) ? bytes
729 ide_dma_off(drive);
733 drive->dma = !ide_dma_prepare(drive, cmd);
735 if (!drive->dma)
738 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
742 ide_init_packet_cmd(cmd, valid_tf, bcount, drive->dma);
744 (void)do_rw_taskfile(drive, cmd);
747 if (drive->dma)
748 drive->waiting_for_dma = 0;
752 ide_execute_command(drive, cmd, ide_transfer_pc, timeout);
754 return drq_int ? ide_started : ide_transfer_pc(drive);