Lines Matching refs:drive

66 		if (ide_device_get(cd->drive))  in ide_cd_get()
78 ide_drive_t *drive = cd->drive; in ide_cd_put() local
82 ide_device_put(drive); in ide_cd_put()
91 static void cdrom_saw_media_change(ide_drive_t *drive) in cdrom_saw_media_change() argument
93 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; in cdrom_saw_media_change()
94 drive->atapi_flags &= ~IDE_AFLAG_TOC_VALID; in cdrom_saw_media_change()
97 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq) in cdrom_log_sense() argument
99 struct request_sense *sense = &drive->sense_data; in cdrom_log_sense()
135 cdrom_saw_media_change(drive); in cdrom_log_sense()
144 static void cdrom_analyze_sense_data(ide_drive_t *drive, in cdrom_analyze_sense_data() argument
147 struct request_sense *sense = &drive->sense_data; in cdrom_analyze_sense_data()
148 struct cdrom_info *info = drive->driver_data; in cdrom_analyze_sense_data()
159 if (!cdrom_log_sense(drive, failed_command)) in cdrom_analyze_sense_data()
187 if (queue_logical_block_size(drive->queue) == 2048) in cdrom_analyze_sense_data()
203 drive->probed_capacity - sector < 4 * 75) in cdrom_analyze_sense_data()
208 ide_cd_log_error(drive->name, failed_command, sense); in cdrom_analyze_sense_data()
211 static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq) in ide_cd_complete_failed_rq() argument
229 cdrom_analyze_sense_data(drive, failed); in ide_cd_complete_failed_rq()
231 if (ide_end_rq(drive, failed, BLK_STS_IOERR, blk_rq_bytes(failed))) in ide_cd_complete_failed_rq()
234 cdrom_analyze_sense_data(drive, NULL); in ide_cd_complete_failed_rq()
245 static int ide_cd_breathe(ide_drive_t *drive, struct request *rq) in ide_cd_breathe() argument
248 struct cdrom_info *info = drive->driver_data; in ide_cd_breathe()
261 blk_delay_queue(drive->queue, 1); in ide_cd_breathe()
272 static int cdrom_decode_status(ide_drive_t *drive, u8 stat) in cdrom_decode_status() argument
274 ide_hwif_t *hwif = drive->hwif; in cdrom_decode_status()
279 err = ide_read_error(drive); in cdrom_decode_status()
306 if (ide_cd_breathe(drive, rq)) in cdrom_decode_status()
309 cdrom_saw_media_change(drive); in cdrom_decode_status()
314 drive->name); in cdrom_decode_status()
319 cdrom_saw_media_change(drive); in cdrom_decode_status()
348 ide_dump_status(drive, "command error", stat); in cdrom_decode_status()
357 ide_dump_status(drive, "media error " in cdrom_decode_status()
364 ide_dump_status(drive, "media error (blank)", in cdrom_decode_status()
373 ide_error(drive, "cdrom_decode_status", stat); in cdrom_decode_status()
394 return ide_queue_sense_rq(drive, NULL) ? 2 : 1; in cdrom_decode_status()
400 return ide_queue_sense_rq(drive, rq) ? 2 : 1; in cdrom_decode_status()
405 static void ide_cd_request_sense_fixup(ide_drive_t *drive, struct ide_cmd *cmd) in ide_cd_request_sense_fixup() argument
420 int ide_cd_queue_pc(ide_drive_t *drive, const unsigned char *cmd, in ide_cd_queue_pc() argument
425 struct cdrom_info *info = drive->driver_data; in ide_cd_queue_pc()
443 rq = blk_get_request(drive->queue, in ide_cd_queue_pc()
450 error = blk_rq_map_kern(drive->queue, rq, buffer, in ide_cd_queue_pc()
458 blk_execute_rq(drive->queue, info->disk, rq, 0); in ide_cd_queue_pc()
477 cdrom_saw_media_change(drive); in ide_cd_queue_pc()
504 static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) in ide_cd_error_cmd() argument
512 ide_complete_rq(drive, BLK_STS_OK, nr_bytes); in ide_cd_error_cmd()
519 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) in cdrom_newpc_intr() argument
521 ide_hwif_t *hwif = drive->hwif; in cdrom_newpc_intr()
535 dma = drive->dma; in cdrom_newpc_intr()
537 drive->dma = 0; in cdrom_newpc_intr()
538 drive->waiting_for_dma = 0; in cdrom_newpc_intr()
539 dma_error = hwif->dma_ops->dma_end(drive); in cdrom_newpc_intr()
540 ide_dma_unmap_sg(drive, cmd); in cdrom_newpc_intr()
542 printk(KERN_ERR PFX "%s: DMA %s error\n", drive->name, in cdrom_newpc_intr()
544 ide_dma_off(drive); in cdrom_newpc_intr()
552 rc = cdrom_decode_status(drive, stat); in cdrom_newpc_intr()
563 return ide_error(drive, "dma error", stat); in cdrom_newpc_intr()
568 ide_read_bcount_and_ireason(drive, &len, &ireason); in cdrom_newpc_intr()
588 "(%u bytes)\n", drive->name, __func__, in cdrom_newpc_intr()
597 ide_cd_request_sense_fixup(drive, cmd); in cdrom_newpc_intr()
606 ide_pio_bytes(drive, cmd, write, thislen); in cdrom_newpc_intr()
619 rc = ide_check_ireason(drive, rq, len, ireason, write); in cdrom_newpc_intr()
636 ide_pio_bytes(drive, cmd, write, blen); in cdrom_newpc_intr()
649 ide_pad_transfer(drive, write, len); in cdrom_newpc_intr()
652 drive->name); in cdrom_newpc_intr()
672 ide_set_handler(drive, cdrom_newpc_intr, timeout); in cdrom_newpc_intr()
682 ide_cd_complete_failed_rq(drive, rq); in cdrom_newpc_intr()
693 if (ide_cd_error_cmd(drive, cmd)) in cdrom_newpc_intr()
703 ide_complete_rq(drive, uptodate ? BLK_STS_OK : BLK_STS_IOERR, blk_rq_bytes(rq)); in cdrom_newpc_intr()
706 ide_error(drive, "request sense failure", stat); in cdrom_newpc_intr()
711 static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq) in cdrom_start_rw() argument
713 struct cdrom_info *cd = drive->driver_data; in cdrom_start_rw()
714 struct request_queue *q = drive->queue; in cdrom_start_rw()
741 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); in cdrom_start_rw()
751 static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq) in cdrom_do_block_pc() argument
762 drive->dma = 0; in cdrom_do_block_pc()
766 struct request_queue *q = drive->queue; in cdrom_do_block_pc()
770 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); in cdrom_do_block_pc()
782 drive->dma = 0; in cdrom_do_block_pc()
786 static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq, in ide_cd_do_request() argument
796 if (drive->debug_mask & IDE_DBG_RQ) in ide_cd_do_request()
801 if (cdrom_start_rw(drive, rq) == ide_stopped) in ide_cd_do_request()
809 cdrom_do_block_pc(drive, rq); in ide_cd_do_request()
827 ide_prep_sense(drive, rq); in ide_cd_do_request()
838 ide_map_sg(drive, &cmd); in ide_cd_do_request()
841 return ide_issue_pc(drive, &cmd); in ide_cd_do_request()
848 ide_complete_rq(drive, uptodate ? BLK_STS_OK : BLK_STS_IOERR, nsectors << 9); in ide_cd_do_request()
869 int cdrom_check_status(ide_drive_t *drive, struct scsi_sense_hdr *sshdr) in cdrom_check_status() argument
871 struct cdrom_info *info = drive->driver_data; in cdrom_check_status()
891 return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, sshdr, 0, RQF_QUIET); in cdrom_check_status()
894 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, in cdrom_read_capacity() argument
912 stat = ide_cd_queue_pc(drive, cmd, 0, &capbuf, &len, NULL, 0, in cdrom_read_capacity()
933 drive->name, blocklen); in cdrom_read_capacity()
947 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag, in cdrom_read_tocentry() argument
965 return ide_cd_queue_pc(drive, cmd, 0, buf, &buflen, NULL, 0, RQF_QUIET); in cdrom_read_tocentry()
969 int ide_cd_read_toc(ide_drive_t *drive) in ide_cd_read_toc() argument
972 struct cdrom_info *info = drive->driver_data; in ide_cd_read_toc()
989 drive->name); in ide_cd_read_toc()
999 (void) cdrom_check_status(drive, NULL); in ide_cd_read_toc()
1001 if (drive->atapi_flags & IDE_AFLAG_TOC_VALID) in ide_cd_read_toc()
1005 stat = cdrom_read_capacity(drive, &toc->capacity, &sectors_per_frame); in ide_cd_read_toc()
1011 drive->probed_capacity = toc->capacity * sectors_per_frame; in ide_cd_read_toc()
1013 blk_queue_logical_block_size(drive->queue, in ide_cd_read_toc()
1017 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr, in ide_cd_read_toc()
1022 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1034 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0, in ide_cd_read_toc()
1054 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0, in ide_cd_read_toc()
1062 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1076 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1082 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { in ide_cd_read_toc()
1083 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) in ide_cd_read_toc()
1094 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp, in ide_cd_read_toc()
1106 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { in ide_cd_read_toc()
1108 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp, in ide_cd_read_toc()
1126 drive->probed_capacity = toc->capacity * sectors_per_frame; in ide_cd_read_toc()
1130 drive->atapi_flags |= IDE_AFLAG_TOC_VALID; in ide_cd_read_toc()
1135 int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf) in ide_cdrom_get_capabilities() argument
1137 struct cdrom_info *info = drive->driver_data; in ide_cdrom_get_capabilities()
1144 if ((drive->atapi_flags & IDE_AFLAG_FULL_CAPS_PAGE) == 0) in ide_cdrom_get_capabilities()
1157 void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf) in ide_cdrom_update_speed() argument
1159 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_update_speed()
1164 if (drive->atapi_flags & IDE_AFLAG_LE_SPEED_FIELDS) { in ide_cdrom_update_speed()
1202 static int ide_cdrom_register(ide_drive_t *drive, int nslots) in ide_cdrom_register() argument
1204 struct cdrom_info *info = drive->driver_data; in ide_cdrom_register()
1212 devinfo->handle = drive; in ide_cdrom_register()
1213 strcpy(devinfo->name, drive->name); in ide_cdrom_register()
1215 if (drive->atapi_flags & IDE_AFLAG_NO_SPEED_SELECT) in ide_cdrom_register()
1222 static int ide_cdrom_probe_capabilities(ide_drive_t *drive) in ide_cdrom_probe_capabilities() argument
1224 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_probe_capabilities()
1231 drive->media, drive->atapi_flags); in ide_cdrom_probe_capabilities()
1237 if (drive->media == ide_optical) { in ide_cdrom_probe_capabilities()
1240 drive->name); in ide_cdrom_probe_capabilities()
1244 if (drive->atapi_flags & IDE_AFLAG_PRE_ATAPI12) { in ide_cdrom_probe_capabilities()
1245 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; in ide_cdrom_probe_capabilities()
1256 cdi->handle = drive; in ide_cdrom_probe_capabilities()
1259 if (ide_cdrom_get_capabilities(drive, buf)) in ide_cdrom_probe_capabilities()
1263 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; in ide_cdrom_probe_capabilities()
1265 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; in ide_cdrom_probe_capabilities()
1276 if ((buf[8 + 4] & 0x01) || (drive->atapi_flags & IDE_AFLAG_PLAY_AUDIO_OK)) in ide_cdrom_probe_capabilities()
1282 (drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE)) in ide_cdrom_probe_capabilities()
1295 ide_cdrom_update_speed(drive, buf); in ide_cdrom_probe_capabilities()
1297 printk(KERN_INFO PFX "%s: ATAPI", drive->name); in ide_cdrom_probe_capabilities()
1409 static sector_t ide_cdrom_capacity(ide_drive_t *drive) in ide_cdrom_capacity() argument
1413 if (cdrom_read_capacity(drive, &capacity, &sectors_per_frame)) in ide_cdrom_capacity()
1421 ide_drive_t *drive = m->private; in idecd_capacity_proc_show() local
1423 seq_printf(m, "%llu\n", (long long)ide_cdrom_capacity(drive)); in idecd_capacity_proc_show()
1432 static ide_proc_entry_t *ide_cd_proc_entries(ide_drive_t *drive) in ide_cd_proc_entries() argument
1437 static const struct ide_proc_devset *ide_cd_proc_devsets(ide_drive_t *drive) in ide_cd_proc_devsets() argument
1500 static int ide_cdrom_setup(ide_drive_t *drive) in ide_cdrom_setup() argument
1502 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_setup()
1504 struct request_queue *q = drive->queue; in ide_cdrom_setup()
1505 u16 *id = drive->id; in ide_cdrom_setup()
1515 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; in ide_cdrom_setup()
1516 drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); in ide_cdrom_setup()
1518 if ((drive->atapi_flags & IDE_AFLAG_VERTOS_300_SSD) && in ide_cdrom_setup()
1520 drive->atapi_flags |= (IDE_AFLAG_TOCTRACKS_AS_BCD | in ide_cdrom_setup()
1522 else if ((drive->atapi_flags & IDE_AFLAG_VERTOS_600_ESD) && in ide_cdrom_setup()
1524 drive->atapi_flags |= IDE_AFLAG_TOCTRACKS_AS_BCD; in ide_cdrom_setup()
1525 else if (drive->atapi_flags & IDE_AFLAG_SANYO_3CD) in ide_cdrom_setup()
1529 nslots = ide_cdrom_probe_capabilities(drive); in ide_cdrom_setup()
1533 if (ide_cdrom_register(drive, nslots)) { in ide_cdrom_setup()
1535 " cdrom driver.\n", drive->name, __func__); in ide_cdrom_setup()
1540 ide_proc_register_driver(drive, cd->driver); in ide_cdrom_setup()
1544 static void ide_cd_remove(ide_drive_t *drive) in ide_cd_remove() argument
1546 struct cdrom_info *info = drive->driver_data; in ide_cd_remove()
1550 ide_proc_unregister_driver(drive, info->driver); in ide_cd_remove()
1563 ide_drive_t *drive = info->drive; in ide_cd_release() local
1569 if (devinfo->handle == drive) in ide_cd_release()
1571 drive->driver_data = NULL; in ide_cd_release()
1572 blk_queue_prep_rq(drive->queue, NULL); in ide_cd_release()
1681 err = generic_ide_ioctl(info->drive, bdev, cmd, arg); in idecd_locked_ioctl()
1712 ide_cd_read_toc(info->drive); in idecd_revalidate_disk()
1732 static int ide_cd_probe(ide_drive_t *drive) in ide_cd_probe() argument
1738 drive->driver_req, drive->media); in ide_cd_probe()
1740 if (!strstr("ide-cdrom", drive->driver_req)) in ide_cd_probe()
1743 if (drive->media != ide_cdrom && drive->media != ide_optical) in ide_cd_probe()
1746 drive->debug_mask = debug_mask; in ide_cd_probe()
1747 drive->irq_handler = cdrom_newpc_intr; in ide_cd_probe()
1752 drive->name); in ide_cd_probe()
1760 ide_init_disk(g, drive); in ide_cd_probe()
1762 info->dev.parent = &drive->gendev; in ide_cd_probe()
1764 dev_set_name(&info->dev, "%s", dev_name(&drive->gendev)); in ide_cd_probe()
1769 info->drive = drive; in ide_cd_probe()
1775 drive->driver_data = info; in ide_cd_probe()
1779 if (ide_cdrom_setup(drive)) { in ide_cd_probe()
1784 ide_cd_read_toc(drive); in ide_cd_probe()
1787 device_add_disk(&drive->gendev, g); in ide_cd_probe()