Lines Matching refs:drive

44  *	generic_id		-	add a generic drive id
45 * @drive: drive to make an ID block for
47 * Add a fake id field to the drive we are passed. This allows
49 * and make drive properties unconditional outside of this file
52 static void generic_id(ide_drive_t *drive)
54 u16 *id = drive->id;
56 id[ATA_ID_CUR_CYLS] = id[ATA_ID_CYLS] = drive->cyl;
57 id[ATA_ID_CUR_HEADS] = id[ATA_ID_HEADS] = drive->head;
58 id[ATA_ID_CUR_SECTORS] = id[ATA_ID_SECTORS] = drive->sect;
61 static void ide_disk_init_chs(ide_drive_t *drive)
63 u16 *id = drive->id;
65 /* Extract geometry if we did not already have one for the drive */
66 if (!drive->cyl || !drive->head || !drive->sect) {
67 drive->cyl = drive->bios_cyl = id[ATA_ID_CYLS];
68 drive->head = drive->bios_head = id[ATA_ID_HEADS];
69 drive->sect = drive->bios_sect = id[ATA_ID_SECTORS];
72 /* Handle logical geometry translation by the drive */
74 drive->cyl = id[ATA_ID_CUR_CYLS];
75 drive->head = id[ATA_ID_CUR_HEADS];
76 drive->sect = id[ATA_ID_CUR_SECTORS];
80 if (drive->head > 16 && id[ATA_ID_HEADS] && id[ATA_ID_HEADS] <= 16) {
81 drive->cyl = id[ATA_ID_CYLS];
82 drive->head = id[ATA_ID_HEADS];
83 drive->sect = id[ATA_ID_SECTORS];
87 static void ide_disk_init_mult_count(ide_drive_t *drive)
89 u16 *id = drive->id;
98 drive->mult_req = id[ATA_ID_MULTSECT] & 0xff;
100 if (drive->mult_req)
101 drive->special_flags |= IDE_SFLAG_SET_MULTMODE;
105 static void ide_classify_ata_dev(ide_drive_t *drive)
107 u16 *id = drive->id;
113 drive->dev_flags |= IDE_DFLAG_REMOVABLE;
115 drive->media = ide_disk;
117 if (!ata_id_has_unload(drive->id))
118 drive->dev_flags |= IDE_DFLAG_NO_UNLOAD;
120 printk(KERN_INFO "%s: %s, %s DISK drive\n", drive->name, m,
124 static void ide_classify_atapi_dev(ide_drive_t *drive)
126 u16 *id = drive->id;
130 printk(KERN_INFO "%s: %s, ATAPI ", drive->name, m);
138 if (drive->media != ide_cdrom) {
140 drive->dev_flags |= IDE_DFLAG_REMOVABLE;
148 drive->dev_flags |= IDE_DFLAG_REMOVABLE;
164 drive->dev_flags |= IDE_DFLAG_REMOVABLE;
171 printk(KERN_CONT " drive\n");
172 drive->media = type;
174 drive->ready_stat = 0;
176 drive->atapi_flags |= IDE_AFLAG_DRQ_INTERRUPT;
177 drive->dev_flags |= IDE_DFLAG_DOORLOCKING;
179 drive->dev_flags |= IDE_DFLAG_NO_UNLOAD;
183 * do_identify - identify a drive
184 * @drive: drive to identify
188 * Called when we have issued a drive identify command to
193 static void do_identify(ide_drive_t *drive, u8 cmd, u16 *id)
195 ide_hwif_t *hwif = drive->hwif;
203 hwif->tp_ops->input_data(drive, NULL, id, SECTOR_SIZE);
206 drive->dev_flags |= IDE_DFLAG_ID_READ;
208 printk(KERN_INFO "%s: dumping identify data\n", drive->name);
233 drive->dev_flags &= ~IDE_DFLAG_PRESENT;
235 drive->dev_flags |= IDE_DFLAG_PRESENT;
240 * @drive: drive to identify
245 * Sends an ATA(PI) IDENTIFY request to a drive and waits for a response.
252 int ide_dev_read_id(ide_drive_t *drive, u8 cmd, u16 *id, int irq_ctx)
254 ide_hwif_t *hwif = drive->hwif;
282 drive->name, s, a);
296 tp_ops->tf_load(drive, &tf, IDE_VALID_FEATURE);
299 /* ask drive for ID */
306 rc = __ide_wait_stat(drive, ATA_DRQ, BAD_R_STAT, timeout, &s);
310 rc = ide_busy_sleep(drive, timeout, use_altstatus);
319 /* drive returned ID */
320 do_identify(drive, cmd, id);
321 /* drive responded with ID */
323 /* clear drive IRQ */
326 /* drive refused ID */
332 int ide_busy_sleep(ide_drive_t *drive, unsigned long timeout, int altstatus)
334 ide_hwif_t *hwif = drive->hwif;
340 msleep(50); /* give drive a breather */
347 printk(KERN_ERR "%s: timeout in %s\n", drive->name, __func__);
349 return 1; /* drive timed-out */
352 static u8 ide_read_device(ide_drive_t *drive)
356 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_DEVICE);
363 * @drive: drive to probe
366 * do_probe() has the difficult job of finding a drive if it exists,
370 * If a drive is "known" to exist (from CMOS or kernel parameters),
382 static int do_probe (ide_drive_t *drive, u8 cmd)
384 ide_hwif_t *hwif = drive->hwif;
386 u16 *id = drive->id;
388 u8 present = !!(drive->dev_flags & IDE_DFLAG_PRESENT), stat;
391 if (present && drive->media != ide_disk && cmd == ATA_CMD_ID_ATA)
396 drive->name, present, drive->media,
404 tp_ops->dev_select(drive);
407 if (ide_read_device(drive) != drive->select && present == 0) {
408 if (drive->dn & 1) {
422 rc = ide_dev_read_id(drive, cmd, id, 0);
425 rc = ide_dev_read_id(drive, cmd, id, 0);
434 "resetting drive\n", drive->name, stat);
436 tp_ops->dev_select(drive);
439 (void)ide_busy_sleep(drive, WAIT_WORSTCASE, 0);
440 rc = ide_dev_read_id(drive, cmd, id, 0);
443 /* ensure drive IRQ is clear */
448 drive->name, stat);
453 if (drive->dn & 1) {
457 /* ensure drive irq is clear */
464 * probe_for_drives - upper level drive probe
465 * @drive: drive to probe for
467 * probe_for_drive() tests for existence of a given drive using do_probe()
475 static u8 probe_for_drive(ide_drive_t *drive)
481 drive->dev_flags &= ~IDE_DFLAG_ID_READ;
483 m = (char *)&drive->id[ATA_ID_PROD];
487 if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0) {
490 rc = do_probe(drive, cmd);
494 rc = do_probe(drive, cmd);
497 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0)
501 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) {
502 if (drive->media == ide_disk) {
503 printk(KERN_INFO "%s: non-IDE drive, CHS=%d/%d/%d\n",
504 drive->name, drive->cyl,
505 drive->head, drive->sect);
506 } else if (drive->media == ide_cdrom) {
507 printk(KERN_INFO "%s: ATAPI cdrom (?)\n", drive->name);
510 printk(KERN_WARNING "%s: Unknown device on bus refused identification. Ignoring.\n", drive->name);
511 drive->dev_flags &= ~IDE_DFLAG_PRESENT;
515 ide_classify_atapi_dev(drive);
517 ide_classify_ata_dev(drive);
521 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0)
524 /* The drive wasn't being helpful. Add generic info only */
525 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) {
526 generic_id(drive);
530 if (drive->media == ide_disk) {
531 ide_disk_init_chs(drive);
532 ide_disk_init_mult_count(drive);
581 * the drive is still doing it's poweron-reset sequence, that
587 * - Some CD/DVD/Writer combo drives tend to drive the bus during
602 ide_drive_t *drive;
620 ide_port_for_each_dev(i, drive, hwif) {
622 if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0 ||
623 (drive->dev_flags & IDE_DFLAG_PRESENT)) {
624 tp_ops->dev_select(drive);
632 drive->name);
647 * have the same drive viewed twice. This occurs with crap CF adapters
682 ide_drive_t *drive;
704 * Second drive should only exist if first drive was found,
707 ide_port_for_each_dev(i, drive, hwif) {
708 (void) probe_for_drive(drive);
709 if (drive->dev_flags & IDE_DFLAG_PRESENT)
726 ide_drive_t *drive;
729 ide_port_for_each_present_dev(i, drive, hwif) {
730 ide_check_nien_quirk_list(drive);
733 port_ops->quirkproc(drive);
736 ide_port_for_each_present_dev(i, drive, hwif) {
737 ide_set_max_pio(drive);
739 drive->dev_flags |= IDE_DFLAG_NICE1;
742 ide_set_dma(drive);
763 static int ide_init_queue(ide_drive_t *drive)
766 ide_hwif_t *hwif = drive->hwif;
779 set = &drive->tag_set;
798 q->queuedata = drive;
820 /* assign drive queue */
821 drive->queue = q;
829 * For any present drive:
834 ide_drive_t *drive;
838 ide_port_for_each_present_dev(i, drive, hwif) {
839 if (ide_init_queue(drive)) {
841 drive->name);
842 drive->dev_flags &= ~IDE_DFLAG_PRESENT;
915 ide_drive_t *drive = hwif->devices[unit];
917 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0)
920 if (drive->media == ide_disk)
922 if (drive->media == ide_cdrom || drive->media == ide_optical)
924 if (drive->media == ide_tape)
926 if (drive->media == ide_floppy)
964 void ide_init_disk(struct gendisk *disk, ide_drive_t *drive)
966 ide_hwif_t *hwif = drive->hwif;
967 unsigned int unit = drive->dn & 1;
972 disk->queue = drive->queue;
979 ide_drive_t *drive = container_of(dev, ide_drive_t, gendev);
981 ide_proc_unregister_device(drive);
983 if (drive->sense_rq)
984 blk_mq_free_request(drive->sense_rq);
986 blk_cleanup_queue(drive->queue);
987 drive->queue = NULL;
988 blk_mq_free_tag_set(&drive->tag_set);
990 drive->dev_flags &= ~IDE_DFLAG_PRESENT;
992 complete(&drive->gendev_rel_comp);
1035 ide_drive_t *drive;
1038 ide_port_for_each_present_dev(i, drive, hwif) {
1039 struct device *dev = &drive->gendev;
1043 dev_set_drvdata(dev, drive);
1058 ide_drive_t *drive;
1061 ide_port_for_each_dev(i, drive, hwif) {
1062 drive->dn = i + hwif->channel * 2;
1065 drive->io_32bit = 1;
1067 drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT;
1069 drive->dev_flags |= IDE_DFLAG_UNMASK;
1071 drive->dev_flags |= IDE_DFLAG_NO_UNMASK;
1073 drive->pio_mode = XFER_PIO_0;
1076 port_ops->init_dev(drive);
1160 ide_drive_t *drive = container_of(work, ide_drive_t, rq_work);
1161 ide_hwif_t *hwif = drive->hwif;
1166 blk_mq_quiesce_queue(drive->queue);
1170 while (!list_empty(&drive->rq_list)) {
1171 rq = list_first_entry(&drive->rq_list, struct request, queuelist);
1175 ret = ide_issue_rq(drive, rq, true);
1180 blk_mq_unquiesce_queue(drive->queue);
1183 kblockd_schedule_work(&drive->rq_work);
1192 ide_drive_t *drive;
1195 ide_port_for_each_dev(i, drive, hwif) {
1197 u16 *saved_id = drive->id;
1199 memset(drive, 0, sizeof(*drive));
1201 drive->id = saved_id;
1203 drive->media = ide_disk;
1204 drive->select = (i << 4) | ATA_DEVICE_OBS;
1205 drive->hwif = hwif;
1206 drive->ready_stat = ATA_DRDY;
1207 drive->bad_wstat = BAD_W_STAT;
1208 drive->special_flags = IDE_SFLAG_RECALIBRATE |
1210 drive->name[0] = 'h';
1211 drive->name[1] = 'd';
1212 drive->name[2] = 'a' + j;
1213 drive->max_failures = IDE_DEFAULT_MAX_FAILURES;
1215 INIT_LIST_HEAD(&drive->list);
1216 init_completion(&drive->gendev_rel_comp);
1218 INIT_WORK(&drive->rq_work, drive_rq_insert_work);
1219 INIT_LIST_HEAD(&drive->rq_list);
1305 ide_drive_t *drive;
1308 ide_port_for_each_dev(i, drive, hwif) {
1309 kfree(drive->id);
1310 kfree(drive);
1316 ide_drive_t *drive;
1320 drive = kzalloc_node(sizeof(*drive), GFP_KERNEL, node);
1321 if (drive == NULL)
1332 drive->id = kzalloc_node(SECTOR_SIZE, GFP_KERNEL, node);
1333 if (drive->id == NULL)
1336 hwif->devices[i] = drive;
1341 kfree(drive);
1560 ide_drive_t *drive;
1563 ide_port_for_each_present_dev(i, drive, hwif) {
1564 device_unregister(&drive->gendev);
1565 wait_for_completion(&drive->gendev_rel_comp);