• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/ide/

Lines Matching defs:drive

26 static inline int dev_is_idecd(ide_drive_t *drive)
28 return drive->media == ide_cdrom || drive->media == ide_optical;
35 int ide_check_atapi_device(ide_drive_t *drive, const char *s)
37 u16 *id = drive->id;
50 if (drive->media == ide_floppy && device_type == 5 &&
58 s, drive->name, protocol);
59 else if ((drive->media == ide_floppy && device_type != 0) ||
60 (drive->media == ide_tape && device_type != 1))
62 s, drive->name, device_type);
65 s, drive->name);
66 else if (drive->media == ide_floppy && drq_type == 3)
68 "supported\n", s, drive->name, drq_type);
71 "bytes\n", s, drive->name, packet_size);
88 int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk,
94 rq = blk_get_request(drive->queue, READ, __GFP_WAIT);
99 error = blk_rq_map_kern(drive->queue, rq, buf, bufflen,
106 if (drive->media == ide_tape)
108 error = blk_execute_rq(drive->queue, disk, rq, 0);
115 int ide_do_test_unit_ready(ide_drive_t *drive, struct gendisk *disk)
122 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
126 int ide_do_start_stop(ide_drive_t *drive, struct gendisk *disk, int start)
134 if (drive->media == ide_tape)
137 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
141 int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on)
145 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0)
152 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0);
156 void ide_create_request_sense_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc)
160 if (drive->media == ide_floppy) {
170 void ide_prep_sense(ide_drive_t *drive, struct request *rq)
172 struct request_sense *sense = &drive->sense_data;
173 struct request *sense_rq = &drive->sense_rq;
177 switch (drive->media) {
193 if (rq->cmd_type == REQ_TYPE_SENSE || drive->sense_rq_armed)
200 err = blk_rq_map_kern(drive->queue, sense_rq, sense, sense_len,
205 "buffer\n", drive->name);
215 if (drive->media == ide_tape)
218 drive->sense_rq_armed = true;
222 int ide_queue_sense_rq(ide_drive_t *drive, void *special)
225 if (!drive->sense_rq_armed) {
227 drive->name);
231 drive->sense_rq.special = special;
232 drive->sense_rq_armed = false;
234 drive->hwif->rq = NULL;
236 elv_add_request(drive->queue, &drive->sense_rq,
247 void ide_retry_pc(ide_drive_t *drive)
249 struct request *failed_rq = drive->hwif->rq;
250 struct request *sense_rq = &drive->sense_rq;
251 struct ide_atapi_pc *pc = &drive->request_sense_pc;
253 (void)ide_read_error(drive);
259 if (drive->media == ide_tape)
260 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC;
267 drive->hwif->rq = NULL;
268 ide_requeue_and_plug(drive, failed_rq);
269 if (ide_queue_sense_rq(drive, pc)) {
271 ide_complete_rq(drive, -EIO, blk_rq_bytes(failed_rq));
276 int ide_cd_expiry(ide_drive_t *drive)
278 struct request *rq = drive->hwif->rq;
323 void ide_read_bcount_and_ireason(ide_drive_t *drive, u16 *bcount, u8 *ireason)
327 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT |
343 int ide_check_ireason(ide_drive_t *drive, struct request *rq, int len,
346 ide_hwif_t *hwif = drive->hwif;
354 drive->name, __func__);
356 if (dev_is_idecd(drive))
357 ide_pad_transfer(drive, rw, len);
359 if (dev_is_idecd(drive)) {
369 printk(KERN_ERR PFX "%s: CoD != 0 in %s\n", drive->name,
372 /* drive wants a command packet, or invalid ireason... */
374 drive->name, __func__, ireason);
377 if (dev_is_idecd(drive) && rq->cmd_type == REQ_TYPE_ATA_PC)
386 * command. We will transfer some of the data (as requested by the drive)
389 static ide_startstop_t ide_pc_intr(ide_drive_t *drive)
391 struct ide_atapi_pc *pc = drive->pc;
392 ide_hwif_t *hwif = drive->hwif;
403 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
412 drive->waiting_for_dma = 0;
413 rc = hwif->dma_ops->dma_end(drive);
414 ide_dma_unmap_sg(drive, cmd);
416 if (rc || (drive->media == ide_tape && (stat & ATA_ERR))) {
417 if (drive->media == ide_floppy)
419 drive->name, rq_data_dir(pc->rq)
424 debug_log("%s: DMA finished\n", drive->name);
438 if (drive->media == ide_tape &&
444 debug_log("%s: I/O error\n", drive->name);
446 if (drive->media != ide_tape)
451 "sense command\n", drive->name);
452 return ide_do_reset(drive);
458 ide_retry_pc(drive);
475 uptodate = drive->pc_callback(drive, dsc);
478 drive->failed_pc = NULL;
493 ide_complete_rq(drive, error, blk_rq_bytes(rq));
500 "interrupts in DMA mode\n", drive->name);
501 ide_dma_off(drive);
502 return ide_do_reset(drive);
506 ide_read_bcount_and_ireason(drive, &bcount, &ireason);
508 if (ide_check_ireason(drive, rq, bcount, ireason, write))
509 return ide_do_reset(drive);
512 ide_pio_bytes(drive, cmd, write, done);
520 ide_pad_transfer(drive, write, bcount);
526 ide_set_handler(drive, ide_pc_intr, timeout);
542 static u8 ide_read_ireason(ide_drive_t *drive)
546 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT);
551 static u8 ide_wait_ireason(ide_drive_t *drive, u8 ireason)
558 "a packet command, retrying\n", drive->name);
560 ireason = ide_read_ireason(drive);
564 drive->name);
573 static int ide_delayed_transfer_pc(ide_drive_t *drive)
576 drive->hwif->tp_ops->output_data(drive, NULL, drive->pc->c, 12);
582 static ide_startstop_t ide_transfer_pc(ide_drive_t *drive)
585 ide_hwif_t *hwif = drive->hwif;
593 if (ide_wait_stat(&startstop, drive, ATA_DRQ, ATA_BUSY, WAIT_READY)) {
595 "DRQ isn't asserted\n", drive->name);
599 if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) {
600 if (drive->dma)
601 drive->waiting_for_dma = 1;
604 if (dev_is_idecd(drive)) {
613 pc = drive->pc;
622 if (drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) {
623 timeout = drive->pc_delay;
626 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
631 ireason = ide_read_ireason(drive);
632 if (drive->media == ide_tape)
633 ireason = ide_wait_ireason(drive, ireason);
637 "issuing a packet command\n", drive->name);
639 return ide_do_reset(drive);
646 ide_set_handler(drive,
647 (dev_is_idecd(drive) ? drive->irq_handler
652 if ((drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) == 0)
653 hwif->tp_ops->output_data(drive, NULL, rq->cmd, cmd_len);
656 if (dev_is_idecd(drive)) {
657 if (drive->dma)
658 hwif->dma_ops->dma_start(drive);
662 hwif->dma_ops->dma_start(drive);
669 ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd)
672 ide_hwif_t *hwif = drive->hwif;
678 u8 drq_int = !!(drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT);
680 if (dev_is_idecd(drive)) {
686 if (drive->dma)
687 drive->dma = !ide_dma_prepare(drive, cmd);
689 pc = drive->pc;
693 bcount = ((drive->media == ide_tape) ? bytes
702 ide_dma_off(drive);
706 drive->dma = !ide_dma_prepare(drive, cmd);
708 if (!drive->dma)
711 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD
715 ide_init_packet_cmd(cmd, valid_tf, bcount, drive->dma);
717 (void)do_rw_taskfile(drive, cmd);
720 if (drive->dma)
721 drive->waiting_for_dma = 0;
725 ide_execute_command(drive, cmd, ide_transfer_pc, timeout);
727 return drq_int ? ide_started : ide_transfer_pc(drive);