Lines Matching refs:drive
65 if (ide_device_get(cd->drive)) in ide_cd_get()
77 ide_drive_t *drive = cd->drive; in ide_cd_put() local
81 ide_device_put(drive); in ide_cd_put()
90 static void cdrom_saw_media_change(ide_drive_t *drive) in cdrom_saw_media_change() argument
92 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; in cdrom_saw_media_change()
93 drive->atapi_flags &= ~IDE_AFLAG_TOC_VALID; in cdrom_saw_media_change()
96 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq) in cdrom_log_sense() argument
98 struct request_sense *sense = &drive->sense_data; in cdrom_log_sense()
134 cdrom_saw_media_change(drive); in cdrom_log_sense()
143 static void cdrom_analyze_sense_data(ide_drive_t *drive, in cdrom_analyze_sense_data() argument
146 struct request_sense *sense = &drive->sense_data; in cdrom_analyze_sense_data()
147 struct cdrom_info *info = drive->driver_data; in cdrom_analyze_sense_data()
158 if (!cdrom_log_sense(drive, failed_command)) in cdrom_analyze_sense_data()
186 if (queue_logical_block_size(drive->queue) == 2048) in cdrom_analyze_sense_data()
202 drive->probed_capacity - sector < 4 * 75) in cdrom_analyze_sense_data()
207 ide_cd_log_error(drive->name, failed_command, sense); in cdrom_analyze_sense_data()
210 static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq) in ide_cd_complete_failed_rq() argument
231 cdrom_analyze_sense_data(drive, failed); in ide_cd_complete_failed_rq()
233 if (ide_end_rq(drive, failed, -EIO, blk_rq_bytes(failed))) in ide_cd_complete_failed_rq()
236 cdrom_analyze_sense_data(drive, NULL); in ide_cd_complete_failed_rq()
247 static int ide_cd_breathe(ide_drive_t *drive, struct request *rq) in ide_cd_breathe() argument
250 struct cdrom_info *info = drive->driver_data; in ide_cd_breathe()
263 blk_delay_queue(drive->queue, 1); in ide_cd_breathe()
274 static int cdrom_decode_status(ide_drive_t *drive, u8 stat) in cdrom_decode_status() argument
276 ide_hwif_t *hwif = drive->hwif; in cdrom_decode_status()
281 err = ide_read_error(drive); in cdrom_decode_status()
308 if (ide_cd_breathe(drive, rq)) in cdrom_decode_status()
311 cdrom_saw_media_change(drive); in cdrom_decode_status()
316 drive->name); in cdrom_decode_status()
321 cdrom_saw_media_change(drive); in cdrom_decode_status()
350 ide_dump_status(drive, "command error", stat); in cdrom_decode_status()
359 ide_dump_status(drive, "media error " in cdrom_decode_status()
366 ide_dump_status(drive, "media error (blank)", in cdrom_decode_status()
375 ide_error(drive, "cdrom_decode_status", stat); in cdrom_decode_status()
396 return ide_queue_sense_rq(drive, NULL) ? 2 : 1; in cdrom_decode_status()
402 return ide_queue_sense_rq(drive, rq) ? 2 : 1; in cdrom_decode_status()
407 static void ide_cd_request_sense_fixup(ide_drive_t *drive, struct ide_cmd *cmd) in ide_cd_request_sense_fixup() argument
422 int ide_cd_queue_pc(ide_drive_t *drive, const unsigned char *cmd, in ide_cd_queue_pc() argument
427 struct cdrom_info *info = drive->driver_data; in ide_cd_queue_pc()
444 rq = blk_get_request(drive->queue, write, __GFP_RECLAIM); in ide_cd_queue_pc()
452 error = blk_rq_map_kern(drive->queue, rq, buffer, in ide_cd_queue_pc()
460 error = blk_execute_rq(drive->queue, info->disk, rq, 0); in ide_cd_queue_pc()
480 cdrom_saw_media_change(drive); in ide_cd_queue_pc()
506 static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) in ide_cd_error_cmd() argument
514 ide_complete_rq(drive, 0, nr_bytes); in ide_cd_error_cmd()
521 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) in cdrom_newpc_intr() argument
523 ide_hwif_t *hwif = drive->hwif; in cdrom_newpc_intr()
537 dma = drive->dma; in cdrom_newpc_intr()
539 drive->dma = 0; in cdrom_newpc_intr()
540 drive->waiting_for_dma = 0; in cdrom_newpc_intr()
541 dma_error = hwif->dma_ops->dma_end(drive); in cdrom_newpc_intr()
542 ide_dma_unmap_sg(drive, cmd); in cdrom_newpc_intr()
544 printk(KERN_ERR PFX "%s: DMA %s error\n", drive->name, in cdrom_newpc_intr()
546 ide_dma_off(drive); in cdrom_newpc_intr()
554 rc = cdrom_decode_status(drive, stat); in cdrom_newpc_intr()
565 return ide_error(drive, "dma error", stat); in cdrom_newpc_intr()
570 ide_read_bcount_and_ireason(drive, &len, &ireason); in cdrom_newpc_intr()
589 "(%u bytes)\n", drive->name, __func__, in cdrom_newpc_intr()
596 ide_cd_request_sense_fixup(drive, cmd); in cdrom_newpc_intr()
605 ide_pio_bytes(drive, cmd, write, thislen); in cdrom_newpc_intr()
615 rc = ide_check_ireason(drive, rq, len, ireason, write); in cdrom_newpc_intr()
632 ide_pio_bytes(drive, cmd, write, blen); in cdrom_newpc_intr()
645 ide_pad_transfer(drive, write, len); in cdrom_newpc_intr()
648 drive->name); in cdrom_newpc_intr()
662 ide_set_handler(drive, cdrom_newpc_intr, timeout); in cdrom_newpc_intr()
672 ide_cd_complete_failed_rq(drive, rq); in cdrom_newpc_intr()
683 if (ide_cd_error_cmd(drive, cmd)) in cdrom_newpc_intr()
693 ide_complete_rq(drive, uptodate ? 0 : -EIO, blk_rq_bytes(rq)); in cdrom_newpc_intr()
696 ide_error(drive, "request sense failure", stat); in cdrom_newpc_intr()
701 static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq) in cdrom_start_rw() argument
703 struct cdrom_info *cd = drive->driver_data; in cdrom_start_rw()
704 struct request_queue *q = drive->queue; in cdrom_start_rw()
731 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); in cdrom_start_rw()
741 static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq) in cdrom_do_block_pc() argument
752 drive->dma = 0; in cdrom_do_block_pc()
756 struct request_queue *q = drive->queue; in cdrom_do_block_pc()
760 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); in cdrom_do_block_pc()
772 drive->dma = 0; in cdrom_do_block_pc()
776 static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq, in ide_cd_do_request() argument
786 if (drive->debug_mask & IDE_DBG_RQ) in ide_cd_do_request()
791 if (cdrom_start_rw(drive, rq) == ide_stopped) in ide_cd_do_request()
800 cdrom_do_block_pc(drive, rq); in ide_cd_do_request()
811 ide_prep_sense(drive, rq); in ide_cd_do_request()
822 ide_map_sg(drive, &cmd); in ide_cd_do_request()
825 return ide_issue_pc(drive, &cmd); in ide_cd_do_request()
832 ide_complete_rq(drive, uptodate ? 0 : -EIO, nsectors << 9); in ide_cd_do_request()
853 int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) in cdrom_check_status() argument
855 struct cdrom_info *info = drive->driver_data; in cdrom_check_status()
870 return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, sense, 0, REQ_QUIET); in cdrom_check_status()
873 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, in cdrom_read_capacity() argument
892 stat = ide_cd_queue_pc(drive, cmd, 0, &capbuf, &len, sense, 0, in cdrom_read_capacity()
913 drive->name, blocklen); in cdrom_read_capacity()
927 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag, in cdrom_read_tocentry() argument
946 return ide_cd_queue_pc(drive, cmd, 0, buf, &buflen, sense, 0, REQ_QUIET); in cdrom_read_tocentry()
950 int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) in ide_cd_read_toc() argument
953 struct cdrom_info *info = drive->driver_data; in ide_cd_read_toc()
970 drive->name); in ide_cd_read_toc()
980 (void) cdrom_check_status(drive, sense); in ide_cd_read_toc()
982 if (drive->atapi_flags & IDE_AFLAG_TOC_VALID) in ide_cd_read_toc()
986 stat = cdrom_read_capacity(drive, &toc->capacity, §ors_per_frame, in ide_cd_read_toc()
993 drive->probed_capacity = toc->capacity * sectors_per_frame; in ide_cd_read_toc()
995 blk_queue_logical_block_size(drive->queue, in ide_cd_read_toc()
999 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr, in ide_cd_read_toc()
1004 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1016 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0, in ide_cd_read_toc()
1036 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0, in ide_cd_read_toc()
1045 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1059 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { in ide_cd_read_toc()
1065 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { in ide_cd_read_toc()
1066 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) in ide_cd_read_toc()
1077 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp, in ide_cd_read_toc()
1089 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { in ide_cd_read_toc()
1091 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp, in ide_cd_read_toc()
1109 drive->probed_capacity = toc->capacity * sectors_per_frame; in ide_cd_read_toc()
1113 drive->atapi_flags |= IDE_AFLAG_TOC_VALID; in ide_cd_read_toc()
1118 int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf) in ide_cdrom_get_capabilities() argument
1120 struct cdrom_info *info = drive->driver_data; in ide_cdrom_get_capabilities()
1127 if ((drive->atapi_flags & IDE_AFLAG_FULL_CAPS_PAGE) == 0) in ide_cdrom_get_capabilities()
1140 void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf) in ide_cdrom_update_speed() argument
1142 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_update_speed()
1147 if (drive->atapi_flags & IDE_AFLAG_LE_SPEED_FIELDS) { in ide_cdrom_update_speed()
1185 static int ide_cdrom_register(ide_drive_t *drive, int nslots) in ide_cdrom_register() argument
1187 struct cdrom_info *info = drive->driver_data; in ide_cdrom_register()
1195 devinfo->handle = drive; in ide_cdrom_register()
1196 strcpy(devinfo->name, drive->name); in ide_cdrom_register()
1198 if (drive->atapi_flags & IDE_AFLAG_NO_SPEED_SELECT) in ide_cdrom_register()
1205 static int ide_cdrom_probe_capabilities(ide_drive_t *drive) in ide_cdrom_probe_capabilities() argument
1207 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_probe_capabilities()
1214 drive->media, drive->atapi_flags); in ide_cdrom_probe_capabilities()
1220 if (drive->media == ide_optical) { in ide_cdrom_probe_capabilities()
1223 drive->name); in ide_cdrom_probe_capabilities()
1227 if (drive->atapi_flags & IDE_AFLAG_PRE_ATAPI12) { in ide_cdrom_probe_capabilities()
1228 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; in ide_cdrom_probe_capabilities()
1239 cdi->handle = drive; in ide_cdrom_probe_capabilities()
1242 if (ide_cdrom_get_capabilities(drive, buf)) in ide_cdrom_probe_capabilities()
1246 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; in ide_cdrom_probe_capabilities()
1248 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; in ide_cdrom_probe_capabilities()
1259 if ((buf[8 + 4] & 0x01) || (drive->atapi_flags & IDE_AFLAG_PLAY_AUDIO_OK)) in ide_cdrom_probe_capabilities()
1265 (drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE)) in ide_cdrom_probe_capabilities()
1278 ide_cdrom_update_speed(drive, buf); in ide_cdrom_probe_capabilities()
1280 printk(KERN_INFO PFX "%s: ATAPI", drive->name); in ide_cdrom_probe_capabilities()
1391 static sector_t ide_cdrom_capacity(ide_drive_t *drive) in ide_cdrom_capacity() argument
1395 if (cdrom_read_capacity(drive, &capacity, §ors_per_frame, NULL)) in ide_cdrom_capacity()
1403 ide_drive_t *drive = m->private; in idecd_capacity_proc_show() local
1405 seq_printf(m, "%llu\n", (long long)ide_cdrom_capacity(drive)); in idecd_capacity_proc_show()
1427 static ide_proc_entry_t *ide_cd_proc_entries(ide_drive_t *drive) in ide_cd_proc_entries() argument
1432 static const struct ide_proc_devset *ide_cd_proc_devsets(ide_drive_t *drive) in ide_cd_proc_devsets() argument
1495 static int ide_cdrom_setup(ide_drive_t *drive) in ide_cdrom_setup() argument
1497 struct cdrom_info *cd = drive->driver_data; in ide_cdrom_setup()
1499 struct request_queue *q = drive->queue; in ide_cdrom_setup()
1500 u16 *id = drive->id; in ide_cdrom_setup()
1510 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; in ide_cdrom_setup()
1511 drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); in ide_cdrom_setup()
1513 if ((drive->atapi_flags & IDE_AFLAG_VERTOS_300_SSD) && in ide_cdrom_setup()
1515 drive->atapi_flags |= (IDE_AFLAG_TOCTRACKS_AS_BCD | in ide_cdrom_setup()
1517 else if ((drive->atapi_flags & IDE_AFLAG_VERTOS_600_ESD) && in ide_cdrom_setup()
1519 drive->atapi_flags |= IDE_AFLAG_TOCTRACKS_AS_BCD; in ide_cdrom_setup()
1520 else if (drive->atapi_flags & IDE_AFLAG_SANYO_3CD) in ide_cdrom_setup()
1524 nslots = ide_cdrom_probe_capabilities(drive); in ide_cdrom_setup()
1528 if (ide_cdrom_register(drive, nslots)) { in ide_cdrom_setup()
1530 " cdrom driver.\n", drive->name, __func__); in ide_cdrom_setup()
1535 ide_proc_register_driver(drive, cd->driver); in ide_cdrom_setup()
1539 static void ide_cd_remove(ide_drive_t *drive) in ide_cd_remove() argument
1541 struct cdrom_info *info = drive->driver_data; in ide_cd_remove()
1545 ide_proc_unregister_driver(drive, info->driver); in ide_cd_remove()
1558 ide_drive_t *drive = info->drive; in ide_cd_release() local
1564 if (devinfo->handle == drive) in ide_cd_release()
1566 drive->driver_data = NULL; in ide_cd_release()
1567 blk_queue_prep_rq(drive->queue, NULL); in ide_cd_release()
1674 err = generic_ide_ioctl(info->drive, bdev, cmd, arg); in idecd_locked_ioctl()
1706 ide_cd_read_toc(info->drive, &sense); in idecd_revalidate_disk()
1726 static int ide_cd_probe(ide_drive_t *drive) in ide_cd_probe() argument
1733 drive->driver_req, drive->media); in ide_cd_probe()
1735 if (!strstr("ide-cdrom", drive->driver_req)) in ide_cd_probe()
1738 if (drive->media != ide_cdrom && drive->media != ide_optical) in ide_cd_probe()
1741 drive->debug_mask = debug_mask; in ide_cd_probe()
1742 drive->irq_handler = cdrom_newpc_intr; in ide_cd_probe()
1747 drive->name); in ide_cd_probe()
1755 ide_init_disk(g, drive); in ide_cd_probe()
1757 info->dev.parent = &drive->gendev; in ide_cd_probe()
1759 dev_set_name(&info->dev, "%s", dev_name(&drive->gendev)); in ide_cd_probe()
1764 info->drive = drive; in ide_cd_probe()
1770 drive->driver_data = info; in ide_cd_probe()
1774 if (ide_cdrom_setup(drive)) { in ide_cd_probe()
1779 ide_cd_read_toc(drive, &sense); in ide_cd_probe()
1782 device_add_disk(&drive->gendev, g); in ide_cd_probe()