Searched refs:drive (Results 1 - 200 of 642) sorted by relevance

1234

/linux-4.1.27/drivers/ide/
H A Dide-gd.c40 if (ide_device_get(idkp->drive)) ide_disk_get()
51 ide_drive_t *drive = idkp->drive; ide_disk_put() local
55 ide_device_put(drive); ide_disk_put()
59 sector_t ide_gd_capacity(ide_drive_t *drive) ide_gd_capacity() argument
61 return drive->capacity64; ide_gd_capacity()
66 static void ide_gd_remove(ide_drive_t *drive) ide_gd_remove() argument
68 struct ide_disk_obj *idkp = drive->driver_data; ide_gd_remove()
71 ide_proc_unregister_driver(drive, idkp->driver); ide_gd_remove()
74 drive->disk_ops->flush(drive); ide_gd_remove()
84 ide_drive_t *drive = idkp->drive; ide_disk_release() local
87 drive->disk_ops = NULL; ide_disk_release()
88 drive->driver_data = NULL; ide_disk_release()
99 static void ide_gd_resume(ide_drive_t *drive) ide_gd_resume() argument
101 if (ata_id_hpa_enabled(drive->id)) ide_gd_resume()
102 (void)drive->disk_ops->get_capacity(drive); ide_gd_resume()
118 static void ide_gd_shutdown(ide_drive_t *drive) argument
137 drive->disk_ops->flush(drive);
141 printk(KERN_INFO "Shutdown: %s\n", drive->name);
143 drive->gendev.bus->suspend(&drive->gendev, PMSG_SUSPEND);
147 static ide_proc_entry_t *ide_disk_proc_entries(ide_drive_t *drive) ide_disk_proc_entries() argument
149 return (drive->media == ide_disk) ? ide_disk_proc : ide_floppy_proc; ide_disk_proc_entries()
152 static const struct ide_proc_devset *ide_disk_proc_devsets(ide_drive_t *drive) ide_disk_proc_devsets() argument
154 return (drive->media == ide_disk) ? ide_disk_settings ide_disk_proc_devsets()
159 static ide_startstop_t ide_gd_do_request(ide_drive_t *drive, ide_gd_do_request() argument
162 return drive->disk_ops->do_request(drive, rq, sector); ide_gd_do_request()
187 ide_drive_t *drive; ide_gd_open() local
194 drive = idkp->drive; ide_gd_open()
200 if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) { ide_gd_open()
201 drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; ide_gd_open()
204 ret = drive->disk_ops->init_media(drive, disk); ide_gd_open()
207 * Allow O_NDELAY to open a drive without a disk, or with an ide_gd_open()
209 * of the drive or begin the format - Sam ide_gd_open()
216 if ((drive->dev_flags & IDE_DFLAG_WP) && (mode & FMODE_WRITE)) { ide_gd_open()
226 drive->disk_ops->set_doorlock(drive, disk, 1); ide_gd_open()
227 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; ide_gd_open()
229 } else if (drive->dev_flags & IDE_DFLAG_FORMAT_IN_PROGRESS) { ide_gd_open()
256 ide_drive_t *drive = idkp->drive; ide_gd_release() local
262 drive->disk_ops->flush(drive); ide_gd_release()
264 if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) { ide_gd_release()
265 drive->disk_ops->set_doorlock(drive, disk, 0); ide_gd_release()
266 drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; ide_gd_release()
278 ide_drive_t *drive = idkp->drive; ide_gd_getgeo() local
280 geo->heads = drive->bios_head; ide_gd_getgeo()
281 geo->sectors = drive->bios_sect; ide_gd_getgeo()
282 geo->cylinders = (u16)drive->bios_cyl; /* truncate */ ide_gd_getgeo()
290 ide_drive_t *drive = idkp->drive; ide_gd_check_events() local
294 if (drive->dev_flags & IDE_DFLAG_ATTACH) { ide_gd_check_events()
295 drive->dev_flags &= ~IDE_DFLAG_ATTACH; ide_gd_check_events()
305 ret = drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED; ide_gd_check_events()
306 drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED; ide_gd_check_events()
314 ide_drive_t *drive = idkp->drive; ide_gd_unlock_native_capacity() local
315 const struct ide_disk_ops *disk_ops = drive->disk_ops; ide_gd_unlock_native_capacity()
318 disk_ops->unlock_native_capacity(drive); ide_gd_unlock_native_capacity()
324 ide_drive_t *drive = idkp->drive; ide_gd_revalidate_disk() local
327 drive->disk_ops->get_capacity(drive); ide_gd_revalidate_disk()
329 set_capacity(disk, ide_gd_capacity(drive)); ide_gd_revalidate_disk()
337 ide_drive_t *drive = idkp->drive; ide_gd_ioctl() local
339 return drive->disk_ops->ioctl(drive, bdev, mode, cmd, arg); ide_gd_ioctl()
353 static int ide_gd_probe(ide_drive_t *drive) ide_gd_probe() argument
360 if (!strstr("ide-gd", drive->driver_req)) ide_gd_probe()
364 if (drive->media == ide_disk) ide_gd_probe()
368 if (drive->media == ide_floppy) ide_gd_probe()
374 if (disk_ops->check(drive, DRV_NAME) == 0) { ide_gd_probe()
376 drive->name); ide_gd_probe()
383 drive->name); ide_gd_probe()
387 g = alloc_disk_node(IDE_DISK_MINORS, hwif_to_node(drive->hwif)); ide_gd_probe()
391 ide_init_disk(g, drive); ide_gd_probe()
393 idkp->dev.parent = &drive->gendev; ide_gd_probe()
395 dev_set_name(&idkp->dev, "%s", dev_name(&drive->gendev)); ide_gd_probe()
400 idkp->drive = drive; ide_gd_probe()
406 drive->driver_data = idkp; ide_gd_probe()
407 drive->debug_mask = debug_mask; ide_gd_probe()
408 drive->disk_ops = disk_ops; ide_gd_probe()
410 disk_ops->setup(drive); ide_gd_probe()
412 set_capacity(g, ide_gd_capacity(drive)); ide_gd_probe()
415 g->driverfs_dev = &drive->gendev; ide_gd_probe()
417 if (drive->dev_flags & IDE_DFLAG_REMOVABLE) ide_gd_probe()
H A Dide-disk.c55 static void ide_tf_set_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 dma) ide_tf_set_cmd() argument
67 if (drive->mult_count) { ide_tf_set_cmd()
81 static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, __ide_do_rw_disk() argument
84 ide_hwif_t *hwif = drive->hwif; __ide_do_rw_disk()
86 u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); __ide_do_rw_disk()
87 u8 dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); __ide_do_rw_disk()
103 if (drive->dev_flags & IDE_DFLAG_LBA) { __ide_do_rw_disk()
105 pr_debug("%s: LBA=0x%012llx\n", drive->name, __ide_do_rw_disk()
135 track = (int)block / drive->sect; __ide_do_rw_disk()
136 sect = (int)block % drive->sect + 1; __ide_do_rw_disk()
137 head = track % drive->head; __ide_do_rw_disk()
138 cyl = track / drive->head; __ide_do_rw_disk()
140 pr_debug("%s: CHS=%u/%u/%u\n", drive->name, cyl, head, sect); __ide_do_rw_disk()
154 ide_tf_set_cmd(drive, &cmd, dma); __ide_do_rw_disk()
159 ide_map_sg(drive, &cmd); __ide_do_rw_disk()
162 rc = do_rw_taskfile(drive, &cmd); __ide_do_rw_disk()
167 ide_tf_set_cmd(drive, &cmd, 0); __ide_do_rw_disk()
169 rc = do_rw_taskfile(drive, &cmd); __ide_do_rw_disk()
178 * 1073741822 == 549756 MB or 48bit addressing fake drive
181 static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq, ide_do_rw_disk() argument
184 ide_hwif_t *hwif = drive->hwif; ide_do_rw_disk()
186 BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED); ide_do_rw_disk()
192 drive->name, rq_data_dir(rq) == READ ? "read" : "writ", ide_do_rw_disk()
196 hwif->rw_disk(drive, rq); ide_do_rw_disk()
198 return __ide_do_rw_disk(drive, rq, block); ide_do_rw_disk()
202 * Queries for true maximum capacity of the drive.
203 * Returns maximum LBA address (> 0) of the drive, 0 if failed.
205 static u64 idedisk_read_native_max_address(ide_drive_t *drive, int lba48) idedisk_read_native_max_address() argument
226 ide_no_data_taskfile(drive, &cmd); idedisk_read_native_max_address()
236 * Sets maximum virtual LBA address of the drive.
239 static u64 idedisk_set_max_address(ide_drive_t *drive, u64 addr_req, int lba48) idedisk_set_max_address() argument
270 ide_no_data_taskfile(drive, &cmd); idedisk_set_max_address()
297 static u64 ide_disk_hpa_get_native_capacity(ide_drive_t *drive, int lba48) ide_disk_hpa_get_native_capacity() argument
301 capacity = drive->capacity64; ide_disk_hpa_get_native_capacity()
302 set_max = idedisk_read_native_max_address(drive, lba48); ide_disk_hpa_get_native_capacity()
304 if (ide_in_drive_list(drive->id, hpa_list)) { ide_disk_hpa_get_native_capacity()
316 static u64 ide_disk_hpa_set_capacity(ide_drive_t *drive, u64 set_max, int lba48) ide_disk_hpa_set_capacity() argument
318 set_max = idedisk_set_max_address(drive, set_max, lba48); ide_disk_hpa_set_capacity()
320 drive->capacity64 = set_max; ide_disk_hpa_set_capacity()
325 static void idedisk_check_hpa(ide_drive_t *drive) idedisk_check_hpa() argument
328 int lba48 = ata_id_lba48_enabled(drive->id); idedisk_check_hpa()
330 capacity = drive->capacity64; idedisk_check_hpa()
331 set_max = ide_disk_hpa_get_native_capacity(drive, lba48); idedisk_check_hpa()
336 drive->probed_capacity = set_max; idedisk_check_hpa()
341 drive->name, idedisk_check_hpa()
345 if ((drive->dev_flags & IDE_DFLAG_NOHPA) == 0) idedisk_check_hpa()
348 set_max = ide_disk_hpa_set_capacity(drive, set_max, lba48); idedisk_check_hpa()
351 drive->name); idedisk_check_hpa()
354 static int ide_disk_get_capacity(ide_drive_t *drive) ide_disk_get_capacity() argument
356 u16 *id = drive->id; ide_disk_get_capacity()
360 /* drive speaks 48-bit LBA */ ide_disk_get_capacity()
362 drive->capacity64 = ata_id_u64(id, ATA_ID_LBA_CAPACITY_2); ide_disk_get_capacity()
364 /* drive speaks 28-bit LBA */ ide_disk_get_capacity()
366 drive->capacity64 = ata_id_u32(id, ATA_ID_LBA_CAPACITY); ide_disk_get_capacity()
368 /* drive speaks boring old 28-bit CHS */ ide_disk_get_capacity()
370 drive->capacity64 = drive->cyl * drive->head * drive->sect; ide_disk_get_capacity()
373 drive->probed_capacity = drive->capacity64; ide_disk_get_capacity()
376 drive->dev_flags |= IDE_DFLAG_LBA; ide_disk_get_capacity()
383 idedisk_check_hpa(drive); ide_disk_get_capacity()
386 /* limit drive capacity to 137GB if LBA48 cannot be used */ ide_disk_get_capacity()
387 if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 && ide_disk_get_capacity()
388 drive->capacity64 > 1ULL << 28) { ide_disk_get_capacity()
391 drive->name, (unsigned long long)drive->capacity64, ide_disk_get_capacity()
392 sectors_to_MB(drive->capacity64)); ide_disk_get_capacity()
393 drive->probed_capacity = drive->capacity64 = 1ULL << 28; ide_disk_get_capacity()
396 if ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && ide_disk_get_capacity()
397 (drive->dev_flags & IDE_DFLAG_LBA48)) { ide_disk_get_capacity()
398 if (drive->capacity64 > 1ULL << 28) { ide_disk_get_capacity()
401 "> %u\n", drive->name, 1 << 28); ide_disk_get_capacity()
403 drive->dev_flags &= ~IDE_DFLAG_LBA48; ide_disk_get_capacity()
409 static void ide_disk_unlock_native_capacity(ide_drive_t *drive) ide_disk_unlock_native_capacity() argument
411 u16 *id = drive->id; ide_disk_unlock_native_capacity()
414 if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 || ide_disk_unlock_native_capacity()
422 if (!ide_disk_hpa_get_native_capacity(drive, lba48)) ide_disk_unlock_native_capacity()
425 if (ide_disk_hpa_set_capacity(drive, drive->probed_capacity, lba48)) ide_disk_unlock_native_capacity()
426 drive->dev_flags |= IDE_DFLAG_NOHPA; /* disable HPA on resume */ ide_disk_unlock_native_capacity()
431 ide_drive_t *drive = q->queuedata; idedisk_prep_fn() local
447 if (ata_id_flush_ext_enabled(drive->id) && idedisk_prep_fn()
448 (drive->capacity64 >= (1UL << 28))) idedisk_prep_fn()
469 static int set_multcount(ide_drive_t *drive, int arg) set_multcount() argument
474 if (arg < 0 || arg > (drive->id[ATA_ID_MAX_MULTSECT] & 0xff)) set_multcount()
477 if (drive->special_flags & IDE_SFLAG_SET_MULTMODE) set_multcount()
480 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); set_multcount()
483 drive->mult_req = arg; set_multcount()
484 drive->special_flags |= IDE_SFLAG_SET_MULTMODE; set_multcount()
485 error = blk_execute_rq(drive->queue, NULL, rq, 0); set_multcount()
488 return (drive->mult_count == arg) ? 0 : -EIO; set_multcount()
493 static int set_nowerr(ide_drive_t *drive, int arg) set_nowerr() argument
499 drive->dev_flags |= IDE_DFLAG_NOWERR; set_nowerr()
501 drive->dev_flags &= ~IDE_DFLAG_NOWERR; set_nowerr()
503 drive->bad_wstat = arg ? BAD_R_STAT : BAD_W_STAT; set_nowerr()
508 static int ide_do_setfeature(ide_drive_t *drive, u8 feature, u8 nsect) ide_do_setfeature() argument
519 return ide_no_data_taskfile(drive, &cmd); ide_do_setfeature()
522 static void update_flush(ide_drive_t *drive) update_flush() argument
524 u16 *id = drive->id; update_flush()
527 if (drive->dev_flags & IDE_DFLAG_WCACHE) { update_flush()
531 * We must avoid issuing commands a drive does not update_flush()
534 * cache if the drive capacity is too large. By this update_flush()
535 * time we have trimmed the drive capacity if LBA48 is update_flush()
538 capacity = ide_gd_capacity(drive); update_flush()
540 (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 && update_flush()
541 ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 || update_flush()
546 drive->name, barrier ? "" : "not "); update_flush()
550 blk_queue_prep_rq(drive->queue, idedisk_prep_fn); update_flush()
554 blk_queue_flush(drive->queue, flush); update_flush()
559 static int set_wcache(ide_drive_t *drive, int arg) set_wcache() argument
566 if (ata_id_flush_enabled(drive->id)) { set_wcache()
567 err = ide_do_setfeature(drive, set_wcache()
571 drive->dev_flags |= IDE_DFLAG_WCACHE; set_wcache()
573 drive->dev_flags &= ~IDE_DFLAG_WCACHE; set_wcache()
577 update_flush(drive); set_wcache()
582 static int do_idedisk_flushcache(ide_drive_t *drive) do_idedisk_flushcache() argument
587 if (ata_id_flush_ext_enabled(drive->id)) do_idedisk_flushcache()
594 return ide_no_data_taskfile(drive, &cmd); do_idedisk_flushcache()
599 static int set_acoustic(ide_drive_t *drive, int arg) set_acoustic() argument
604 ide_do_setfeature(drive, set_acoustic()
607 drive->acoustic = arg; set_acoustic()
615 * drive->addressing:
620 static int set_addressing(ide_drive_t *drive, int arg) set_addressing() argument
625 if (arg && ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48) || set_addressing()
626 ata_id_lba48_enabled(drive->id) == 0)) set_addressing()
633 drive->dev_flags |= IDE_DFLAG_LBA48; set_addressing()
635 drive->dev_flags &= ~IDE_DFLAG_LBA48; set_addressing()
647 static int ide_disk_check(ide_drive_t *drive, const char *s) ide_disk_check() argument
652 static void ide_disk_setup(ide_drive_t *drive) ide_disk_setup() argument
654 struct ide_disk_obj *idkp = drive->driver_data; ide_disk_setup()
655 struct request_queue *q = drive->queue; ide_disk_setup()
656 ide_hwif_t *hwif = drive->hwif; ide_disk_setup()
657 u16 *id = drive->id; ide_disk_setup()
661 ide_proc_register_driver(drive, idkp->driver); ide_disk_setup()
663 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) ide_disk_setup()
666 if (drive->dev_flags & IDE_DFLAG_REMOVABLE) { ide_disk_setup()
671 drive->dev_flags |= IDE_DFLAG_DOORLOCKING; ide_disk_setup()
674 (void)set_addressing(drive, 1); ide_disk_setup()
676 if (drive->dev_flags & IDE_DFLAG_LBA48) { ide_disk_setup()
685 printk(KERN_INFO "%s: max request size: %dKiB\n", drive->name, ide_disk_setup()
693 /* calculate drive capacity, and select LBA if possible */ ide_disk_setup()
694 ide_disk_get_capacity(drive); ide_disk_setup()
697 * if possible, give fdisk access to more of the drive, ide_disk_setup()
700 capacity = ide_gd_capacity(drive); ide_disk_setup()
702 if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) { ide_disk_setup()
703 if (ata_id_lba48_enabled(drive->id)) { ide_disk_setup()
705 drive->bios_sect = 63; ide_disk_setup()
706 drive->bios_head = 255; ide_disk_setup()
709 if (drive->bios_sect && drive->bios_head) { ide_disk_setup()
714 drive->bios_cyl = 65535; ide_disk_setup()
716 cylsz = drive->bios_sect * drive->bios_head; ide_disk_setup()
720 if (cyl > drive->bios_cyl) ide_disk_setup()
721 drive->bios_cyl = cyl; ide_disk_setup()
726 drive->name, capacity, sectors_to_MB(capacity)); ide_disk_setup()
733 drive->bios_cyl, drive->bios_head, drive->bios_sect); ide_disk_setup()
737 drive->dev_flags |= IDE_DFLAG_WCACHE; ide_disk_setup()
739 set_wcache(drive, 1); ide_disk_setup()
741 if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 && ide_disk_setup()
742 (drive->head == 0 || drive->head > 16)) { ide_disk_setup()
744 drive->name, drive->head); ide_disk_setup()
745 drive->dev_flags &= ~IDE_DFLAG_ATTACH; ide_disk_setup()
747 drive->dev_flags |= IDE_DFLAG_ATTACH; ide_disk_setup()
750 static void ide_disk_flush(ide_drive_t *drive) ide_disk_flush() argument
752 if (ata_id_flush_enabled(drive->id) == 0 || ide_disk_flush()
753 (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) ide_disk_flush()
756 if (do_idedisk_flushcache(drive)) ide_disk_flush()
757 printk(KERN_INFO "%s: wcache flush failed!\n", drive->name); ide_disk_flush()
760 static int ide_disk_init_media(ide_drive_t *drive, struct gendisk *disk) ide_disk_init_media() argument
765 static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk, ide_disk_set_doorlock() argument
771 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) ide_disk_set_doorlock()
779 ret = ide_no_data_taskfile(drive, &cmd); ide_disk_set_doorlock()
782 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; ide_disk_set_doorlock()
H A Dide-devsets.c10 static int set_io_32bit(ide_drive_t *drive, int arg) set_io_32bit() argument
12 if (drive->dev_flags & IDE_DFLAG_NO_IO_32BIT) set_io_32bit()
18 drive->io_32bit = arg; set_io_32bit()
25 static int set_ksettings(ide_drive_t *drive, int arg) set_ksettings() argument
31 drive->dev_flags |= IDE_DFLAG_KEEP_SETTINGS; set_ksettings()
33 drive->dev_flags &= ~IDE_DFLAG_KEEP_SETTINGS; set_ksettings()
40 static int set_using_dma(ide_drive_t *drive, int arg) set_using_dma() argument
48 if (ata_id_has_dma(drive->id) == 0) set_using_dma()
51 if (drive->hwif->dma_ops == NULL) set_using_dma()
57 if (ide_set_dma(drive)) set_using_dma()
60 ide_dma_off(drive); set_using_dma()
96 static int set_pio_mode(ide_drive_t *drive, int arg) set_pio_mode() argument
98 ide_hwif_t *hwif = drive->hwif; set_pio_mode()
108 if (set_pio_mode_abuse(drive->hwif, arg)) { set_pio_mode()
109 drive->pio_mode = arg + XFER_PIO_0; set_pio_mode()
116 port_ops->set_pio_mode(hwif, drive); set_pio_mode()
119 port_ops->set_pio_mode(hwif, drive); set_pio_mode()
121 int keep_dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); set_pio_mode()
123 ide_set_pio(drive, arg); set_pio_mode()
127 ide_dma_on(drive); set_pio_mode()
136 static int set_unmaskirq(ide_drive_t *drive, int arg) set_unmaskirq() argument
138 if (drive->dev_flags & IDE_DFLAG_NO_UNMASK) set_unmaskirq()
145 drive->dev_flags |= IDE_DFLAG_UNMASK; set_unmaskirq()
147 drive->dev_flags &= ~IDE_DFLAG_UNMASK; set_unmaskirq()
158 int ide_devset_execute(ide_drive_t *drive, const struct ide_devset *setting, ide_devset_execute() argument
161 struct request_queue *q = drive->queue; ide_devset_execute()
166 return setting->set(drive, arg); ide_devset_execute()
182 ide_startstop_t ide_do_devset(ide_drive_t *drive, struct request *rq) ide_do_devset() argument
186 err = setfunc(drive, *(int *)&rq->cmd[1]); ide_do_devset()
189 ide_complete_rq(drive, err, blk_rq_bytes(rq)); ide_do_devset()
H A Dide-dma.c28 * for supplying a Promise UDMA board & WD UDMA drive for this work!
85 * @drive: the drive the interrupt is for
91 ide_startstop_t ide_dma_intr(ide_drive_t *drive) ide_dma_intr() argument
93 ide_hwif_t *hwif = drive->hwif; ide_dma_intr()
97 drive->waiting_for_dma = 0; ide_dma_intr()
98 dma_stat = hwif->dma_ops->dma_end(drive); ide_dma_intr()
99 ide_dma_unmap_sg(drive, cmd); ide_dma_intr()
102 if (OK_STAT(stat, DRIVE_READY, drive->bad_wstat | ATA_DRQ)) { ide_dma_intr()
105 ide_finish_cmd(drive, cmd, stat); ide_dma_intr()
107 ide_complete_rq(drive, 0, ide_dma_intr()
112 drive->name, __func__, dma_stat); ide_dma_intr()
114 return ide_error(drive, "dma_intr", stat); ide_dma_intr()
117 int ide_dma_good_drive(ide_drive_t *drive) ide_dma_good_drive() argument
119 return ide_in_drive_list(drive->id, drive_whitelist); ide_dma_good_drive()
124 * @drive: the drive to map the DMA table for
133 static int ide_dma_map_sg(ide_drive_t *drive, struct ide_cmd *cmd) ide_dma_map_sg() argument
135 ide_hwif_t *hwif = drive->hwif; ide_dma_map_sg()
155 * @drive: The drive to unmap
164 void ide_dma_unmap_sg(ide_drive_t *drive, struct ide_cmd *cmd) ide_dma_unmap_sg() argument
166 ide_hwif_t *hwif = drive->hwif; ide_dma_unmap_sg()
175 * @drive: drive to control
180 void ide_dma_off_quietly(ide_drive_t *drive) ide_dma_off_quietly() argument
182 drive->dev_flags &= ~IDE_DFLAG_USING_DMA; ide_dma_off_quietly()
183 ide_toggle_bounce(drive, 0); ide_dma_off_quietly()
185 drive->hwif->dma_ops->dma_host_set(drive, 0); ide_dma_off_quietly()
191 * @drive: drive to disable DMA on
197 void ide_dma_off(ide_drive_t *drive) ide_dma_off() argument
199 printk(KERN_INFO "%s: DMA disabled\n", drive->name); ide_dma_off()
200 ide_dma_off_quietly(drive); ide_dma_off()
206 * @drive: drive to enable DMA on
211 void ide_dma_on(ide_drive_t *drive) ide_dma_on() argument
213 drive->dev_flags |= IDE_DFLAG_USING_DMA; ide_dma_on()
214 ide_toggle_bounce(drive, 1); ide_dma_on()
216 drive->hwif->dma_ops->dma_host_set(drive, 1); ide_dma_on()
219 int __ide_dma_bad_drive(ide_drive_t *drive) __ide_dma_bad_drive() argument
221 u16 *id = drive->id; __ide_dma_bad_drive()
226 drive->name, (char *)&id[ATA_ID_PROD]); __ide_dma_bad_drive()
239 static unsigned int ide_get_mode_mask(ide_drive_t *drive, u8 base, u8 req_mode) ide_get_mode_mask() argument
241 u16 *id = drive->id; ide_get_mode_mask()
242 ide_hwif_t *hwif = drive->hwif; ide_get_mode_mask()
252 mask &= port_ops->udma_filter(drive); ide_get_mode_mask()
260 if ((mask & 0x78) && (eighty_ninty_three(drive) == 0)) ide_get_mode_mask()
275 mask &= port_ops->mdma_filter(drive); ide_get_mode_mask()
303 * @drive: IDE device
306 * Checks the drive/host capabilities and finds the speed to use for
309 * Returns 0 if the drive/host combination is incapable of DMA transfers
313 u8 ide_find_dma_mode(ide_drive_t *drive, u8 req_mode) ide_find_dma_mode() argument
315 ide_hwif_t *hwif = drive->hwif; ide_find_dma_mode()
320 if (drive->media != ide_disk) { ide_find_dma_mode()
328 mask = ide_get_mode_mask(drive, xfer_mode_bases[i], req_mode); ide_find_dma_mode()
340 if (ide_dma_good_drive(drive) && ide_find_dma_mode()
341 drive->id[ATA_ID_EIDE_DMA_TIME] < 150) ide_find_dma_mode()
347 printk(KERN_INFO "%s: %s mode selected\n", drive->name, ide_find_dma_mode()
353 static int ide_tune_dma(ide_drive_t *drive) ide_tune_dma() argument
355 ide_hwif_t *hwif = drive->hwif; ide_tune_dma()
358 if (ata_id_has_dma(drive->id) == 0 || ide_tune_dma()
359 (drive->dev_flags & IDE_DFLAG_NODMA)) ide_tune_dma()
363 if (__ide_dma_bad_drive(drive)) ide_tune_dma()
367 return config_drive_for_dma(drive); ide_tune_dma()
369 speed = ide_max_dma_mode(drive); ide_tune_dma()
374 if (ide_set_dma_mode(drive, speed)) ide_tune_dma()
380 static int ide_dma_check(ide_drive_t *drive) ide_dma_check() argument
382 ide_hwif_t *hwif = drive->hwif; ide_dma_check()
384 if (ide_tune_dma(drive)) ide_dma_check()
391 ide_set_max_pio(drive); ide_dma_check()
396 int ide_set_dma(ide_drive_t *drive) ide_set_dma() argument
406 ide_dma_off_quietly(drive); ide_set_dma()
408 rc = ide_dma_check(drive); ide_set_dma()
412 ide_dma_on(drive); ide_set_dma()
417 void ide_check_dma_crc(ide_drive_t *drive) ide_check_dma_crc() argument
421 ide_dma_off_quietly(drive); ide_check_dma_crc()
422 drive->crc_count = 0; ide_check_dma_crc()
423 mode = drive->current_speed; ide_check_dma_crc()
432 ide_set_xfer_rate(drive, mode); ide_check_dma_crc()
433 if (drive->current_speed >= XFER_SW_DMA_0) ide_check_dma_crc()
434 ide_dma_on(drive); ide_check_dma_crc()
437 void ide_dma_lost_irq(ide_drive_t *drive) ide_dma_lost_irq() argument
439 printk(KERN_ERR "%s: DMA interrupt recovery\n", drive->name); ide_dma_lost_irq()
448 ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) ide_dma_timeout_retry() argument
450 ide_hwif_t *hwif = drive->hwif; ide_dma_timeout_retry()
460 printk(KERN_WARNING "%s: DMA timeout error\n", drive->name); ide_dma_timeout_retry()
461 drive->waiting_for_dma = 0; ide_dma_timeout_retry()
462 (void)dma_ops->dma_end(drive); ide_dma_timeout_retry()
463 ide_dma_unmap_sg(drive, cmd); ide_dma_timeout_retry()
464 ret = ide_error(drive, "dma timeout error", ide_dma_timeout_retry()
467 printk(KERN_WARNING "%s: DMA timeout retry\n", drive->name); ide_dma_timeout_retry()
469 dma_ops->dma_clear(drive); ide_dma_timeout_retry()
470 printk(KERN_ERR "%s: timeout waiting for DMA\n", drive->name); ide_dma_timeout_retry()
471 if (dma_ops->dma_test_irq(drive) == 0) { ide_dma_timeout_retry()
472 ide_dump_status(drive, "DMA timeout", ide_dma_timeout_retry()
474 drive->waiting_for_dma = 0; ide_dma_timeout_retry()
475 (void)dma_ops->dma_end(drive); ide_dma_timeout_retry()
476 ide_dma_unmap_sg(drive, cmd); ide_dma_timeout_retry()
485 drive->dev_flags |= IDE_DFLAG_DMA_PIO_RETRY; ide_dma_timeout_retry()
486 drive->retry_pio++; ide_dma_timeout_retry()
487 ide_dma_off_quietly(drive); ide_dma_timeout_retry()
533 int ide_dma_prepare(ide_drive_t *drive, struct ide_cmd *cmd) ide_dma_prepare() argument
535 const struct ide_dma_ops *dma_ops = drive->hwif->dma_ops; ide_dma_prepare()
537 if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0 || ide_dma_prepare()
538 (dma_ops->dma_check && dma_ops->dma_check(drive, cmd))) ide_dma_prepare()
540 ide_map_sg(drive, cmd); ide_dma_prepare()
541 if (ide_dma_map_sg(drive, cmd) == 0) ide_dma_prepare()
543 if (dma_ops->dma_setup(drive, cmd)) ide_dma_prepare()
545 drive->waiting_for_dma = 1; ide_dma_prepare()
548 ide_dma_unmap_sg(drive, cmd); ide_dma_prepare()
550 ide_map_sg(drive, cmd); ide_dma_prepare()
H A Dide-atapi.c27 static inline int dev_is_idecd(ide_drive_t *drive) dev_is_idecd() argument
29 return drive->media == ide_cdrom || drive->media == ide_optical; dev_is_idecd()
36 int ide_check_atapi_device(ide_drive_t *drive, const char *s) ide_check_atapi_device() argument
38 u16 *id = drive->id; ide_check_atapi_device()
51 if (drive->media == ide_floppy && device_type == 5 && ide_check_atapi_device()
59 s, drive->name, protocol); ide_check_atapi_device()
60 else if ((drive->media == ide_floppy && device_type != 0) || ide_check_atapi_device()
61 (drive->media == ide_tape && device_type != 1)) ide_check_atapi_device()
63 s, drive->name, device_type); ide_check_atapi_device()
66 s, drive->name); ide_check_atapi_device()
67 else if (drive->media == ide_floppy && drq_type == 3) ide_check_atapi_device()
69 "supported\n", s, drive->name, drq_type); ide_check_atapi_device()
72 "bytes\n", s, drive->name, packet_size); ide_check_atapi_device()
89 int ide_queue_pc_tail(ide_drive_t *drive, struct gendisk *disk, ide_queue_pc_tail() argument
95 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); ide_queue_pc_tail()
100 error = blk_rq_map_kern(drive->queue, rq, buf, bufflen, ide_queue_pc_tail()
107 if (drive->media == ide_tape) ide_queue_pc_tail()
109 error = blk_execute_rq(drive->queue, disk, rq, 0); ide_queue_pc_tail()
116 int ide_do_test_unit_ready(ide_drive_t *drive, struct gendisk *disk) ide_do_test_unit_ready() argument
123 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); ide_do_test_unit_ready()
127 int ide_do_start_stop(ide_drive_t *drive, struct gendisk *disk, int start) ide_do_start_stop() argument
135 if (drive->media == ide_tape) ide_do_start_stop()
138 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); ide_do_start_stop()
142 int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on) ide_set_media_lock() argument
146 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) ide_set_media_lock()
153 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); ide_set_media_lock()
157 void ide_create_request_sense_cmd(ide_drive_t *drive, struct ide_atapi_pc *pc) ide_create_request_sense_cmd() argument
161 if (drive->media == ide_floppy) { ide_create_request_sense_cmd()
171 void ide_prep_sense(ide_drive_t *drive, struct request *rq) ide_prep_sense() argument
173 struct request_sense *sense = &drive->sense_data; ide_prep_sense()
174 struct request *sense_rq = &drive->sense_rq; ide_prep_sense()
178 switch (drive->media) { ide_prep_sense()
194 if (rq->cmd_type == REQ_TYPE_SENSE || drive->sense_rq_armed) ide_prep_sense()
201 err = blk_rq_map_kern(drive->queue, sense_rq, sense, sense_len, ide_prep_sense()
206 "buffer\n", drive->name); ide_prep_sense()
216 if (drive->media == ide_tape) ide_prep_sense()
219 drive->sense_rq_armed = true; ide_prep_sense()
223 int ide_queue_sense_rq(ide_drive_t *drive, void *special) ide_queue_sense_rq() argument
226 if (!drive->sense_rq_armed) { ide_queue_sense_rq()
228 drive->name); ide_queue_sense_rq()
232 drive->sense_rq.special = special; ide_queue_sense_rq()
233 drive->sense_rq_armed = false; ide_queue_sense_rq()
235 drive->hwif->rq = NULL; ide_queue_sense_rq()
237 elv_add_request(drive->queue, &drive->sense_rq, ELEVATOR_INSERT_FRONT); ide_queue_sense_rq()
247 void ide_retry_pc(ide_drive_t *drive) ide_retry_pc() argument
249 struct request *failed_rq = drive->hwif->rq; ide_retry_pc()
250 struct request *sense_rq = &drive->sense_rq; ide_retry_pc()
251 struct ide_atapi_pc *pc = &drive->request_sense_pc; ide_retry_pc()
253 (void)ide_read_error(drive); ide_retry_pc()
259 if (drive->media == ide_tape) ide_retry_pc()
260 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC; ide_retry_pc()
267 drive->hwif->rq = NULL; ide_retry_pc()
268 ide_requeue_and_plug(drive, failed_rq); ide_retry_pc()
269 if (ide_queue_sense_rq(drive, pc)) { ide_retry_pc()
271 ide_complete_rq(drive, -EIO, blk_rq_bytes(failed_rq)); ide_retry_pc()
276 int ide_cd_expiry(ide_drive_t *drive) ide_cd_expiry() argument
278 struct request *rq = drive->hwif->rq; ide_cd_expiry()
323 void ide_read_bcount_and_ireason(ide_drive_t *drive, u16 *bcount, u8 *ireason) ide_read_bcount_and_ireason() argument
327 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT | ide_read_bcount_and_ireason()
343 int ide_check_ireason(ide_drive_t *drive, struct request *rq, int len, ide_check_ireason() argument
346 ide_hwif_t *hwif = drive->hwif; ide_check_ireason()
354 drive->name, __func__); ide_check_ireason()
356 if (dev_is_idecd(drive)) ide_check_ireason()
357 ide_pad_transfer(drive, rw, len); ide_check_ireason()
359 if (dev_is_idecd(drive)) { ide_check_ireason()
369 printk(KERN_ERR PFX "%s: CoD != 0 in %s\n", drive->name, ide_check_ireason()
372 /* drive wants a command packet, or invalid ireason... */ ide_check_ireason()
374 drive->name, __func__, ireason); ide_check_ireason()
377 if (dev_is_idecd(drive) && rq->cmd_type == REQ_TYPE_ATA_PC) ide_check_ireason()
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) ide_pc_intr() argument
391 struct ide_atapi_pc *pc = drive->pc; ide_pc_intr()
392 ide_hwif_t *hwif = drive->hwif; ide_pc_intr()
403 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD ide_pc_intr()
412 drive->waiting_for_dma = 0; ide_pc_intr()
413 rc = hwif->dma_ops->dma_end(drive); ide_pc_intr()
414 ide_dma_unmap_sg(drive, cmd); ide_pc_intr()
416 if (rc || (drive->media == ide_tape && (stat & ATA_ERR))) { ide_pc_intr()
417 if (drive->media == ide_floppy) ide_pc_intr()
419 drive->name, rq_data_dir(pc->rq) ide_pc_intr()
424 debug_log("%s: DMA finished\n", drive->name); ide_pc_intr()
438 if (drive->media == ide_tape && ide_pc_intr()
444 debug_log("%s: I/O error\n", drive->name); ide_pc_intr()
446 if (drive->media != ide_tape) ide_pc_intr()
451 "sense command\n", drive->name); ide_pc_intr()
452 return ide_do_reset(drive); ide_pc_intr()
458 ide_retry_pc(drive); ide_pc_intr()
475 uptodate = drive->pc_callback(drive, dsc); ide_pc_intr()
478 drive->failed_pc = NULL; ide_pc_intr()
493 ide_complete_rq(drive, error, blk_rq_bytes(rq)); ide_pc_intr()
500 "interrupts in DMA mode\n", drive->name); ide_pc_intr()
501 ide_dma_off(drive); ide_pc_intr()
502 return ide_do_reset(drive); ide_pc_intr()
506 ide_read_bcount_and_ireason(drive, &bcount, &ireason); ide_pc_intr()
508 if (ide_check_ireason(drive, rq, bcount, ireason, write)) ide_pc_intr()
509 return ide_do_reset(drive); ide_pc_intr()
512 ide_pio_bytes(drive, cmd, write, done); ide_pc_intr()
520 ide_pad_transfer(drive, write, bcount); ide_pc_intr()
526 ide_set_handler(drive, ide_pc_intr, timeout); ide_pc_intr()
542 static u8 ide_read_ireason(ide_drive_t *drive) ide_read_ireason() argument
546 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_NSECT); ide_read_ireason()
551 static u8 ide_wait_ireason(ide_drive_t *drive, u8 ireason) ide_wait_ireason() argument
558 "a packet command, retrying\n", drive->name); ide_wait_ireason()
560 ireason = ide_read_ireason(drive); ide_wait_ireason()
564 drive->name); ide_wait_ireason()
573 static int ide_delayed_transfer_pc(ide_drive_t *drive) ide_delayed_transfer_pc() argument
576 drive->hwif->tp_ops->output_data(drive, NULL, drive->pc->c, 12); ide_delayed_transfer_pc()
582 static ide_startstop_t ide_transfer_pc(ide_drive_t *drive) ide_transfer_pc() argument
585 ide_hwif_t *hwif = drive->hwif; ide_transfer_pc()
593 if (ide_wait_stat(&startstop, drive, ATA_DRQ, ATA_BUSY, WAIT_READY)) { ide_transfer_pc()
595 "DRQ isn't asserted\n", drive->name); ide_transfer_pc()
599 if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) { ide_transfer_pc()
600 if (drive->dma) ide_transfer_pc()
601 drive->waiting_for_dma = 1; ide_transfer_pc()
604 if (dev_is_idecd(drive)) { ide_transfer_pc()
613 pc = drive->pc; ide_transfer_pc()
622 if (drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) { ide_transfer_pc()
623 timeout = drive->pc_delay; ide_transfer_pc()
626 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD ide_transfer_pc()
631 ireason = ide_read_ireason(drive); ide_transfer_pc()
632 if (drive->media == ide_tape) ide_transfer_pc()
633 ireason = ide_wait_ireason(drive, ireason); ide_transfer_pc()
637 "issuing a packet command\n", drive->name); ide_transfer_pc()
639 return ide_do_reset(drive); ide_transfer_pc()
646 ide_set_handler(drive, ide_transfer_pc()
647 (dev_is_idecd(drive) ? drive->irq_handler ide_transfer_pc()
652 if ((drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) == 0) ide_transfer_pc()
653 hwif->tp_ops->output_data(drive, NULL, rq->cmd, cmd_len); ide_transfer_pc()
656 if (dev_is_idecd(drive)) { ide_transfer_pc()
657 if (drive->dma) ide_transfer_pc()
658 hwif->dma_ops->dma_start(drive); ide_transfer_pc()
662 hwif->dma_ops->dma_start(drive); ide_transfer_pc()
669 ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) ide_issue_pc() argument
672 ide_hwif_t *hwif = drive->hwif; ide_issue_pc()
678 u8 drq_int = !!(drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT); ide_issue_pc()
680 if (dev_is_idecd(drive)) { ide_issue_pc()
686 if (drive->dma) ide_issue_pc()
687 drive->dma = !ide_dma_prepare(drive, cmd); ide_issue_pc()
689 pc = drive->pc; ide_issue_pc()
693 bcount = ((drive->media == ide_tape) ? bytes ide_issue_pc()
702 ide_dma_off(drive); ide_issue_pc()
706 drive->dma = !ide_dma_prepare(drive, cmd); ide_issue_pc()
708 if (!drive->dma) ide_issue_pc()
711 timeout = (drive->media == ide_floppy) ? WAIT_FLOPPY_CMD ide_issue_pc()
715 ide_init_packet_cmd(cmd, valid_tf, bcount, drive->dma); ide_issue_pc()
717 (void)do_rw_taskfile(drive, cmd); ide_issue_pc()
720 if (drive->dma) ide_issue_pc()
721 drive->waiting_for_dma = 0; ide_issue_pc()
725 ide_execute_command(drive, cmd, ide_transfer_pc, timeout); ide_issue_pc()
727 return drq_int ? ide_started : ide_transfer_pc(drive); ide_issue_pc()
H A Dide-eh.c7 static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, ide_ata_error() argument
10 ide_hwif_t *hwif = drive->hwif; ide_ata_error()
13 ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) { ide_ata_error()
19 if ((drive->dev_flags & IDE_DFLAG_LBA) && ide_ata_error()
25 drive->crc_count++; ide_ata_error()
37 int nsect = drive->mult_count ? drive->mult_count : 1; ide_ata_error()
39 ide_pad_transfer(drive, READ, nsect * SECTOR_SIZE); ide_ata_error()
43 ide_kill_rq(drive, rq); ide_ata_error()
52 return ide_do_reset(drive); ide_ata_error()
56 drive->special_flags |= IDE_SFLAG_RECALIBRATE; ide_ata_error()
63 static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq, ide_atapi_error() argument
66 ide_hwif_t *hwif = drive->hwif; ide_atapi_error()
69 ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) { ide_atapi_error()
81 ide_kill_rq(drive, rq); ide_atapi_error()
85 return ide_do_reset(drive); ide_atapi_error()
93 static ide_startstop_t __ide_error(ide_drive_t *drive, struct request *rq, __ide_error() argument
96 if (drive->media == ide_disk) __ide_error()
97 return ide_ata_error(drive, rq, stat, err); __ide_error()
98 return ide_atapi_error(drive, rq, stat, err); __ide_error()
103 * @drive: drive the error occurred on
107 * ide_error() takes action based on the error returned by the drive.
114 ide_startstop_t ide_error(ide_drive_t *drive, const char *msg, u8 stat) ide_error() argument
119 err = ide_dump_status(drive, msg, stat); ide_error()
121 rq = drive->hwif->rq; ide_error()
131 ide_complete_cmd(drive, cmd, stat, err); ide_error()
134 ide_complete_pm_rq(drive, rq); ide_error()
138 ide_complete_rq(drive, err ? -EIO : 0, blk_rq_bytes(rq)); ide_error()
142 return __ide_error(drive, rq, stat, err); ide_error()
146 static inline void ide_complete_drive_reset(ide_drive_t *drive, int err) ide_complete_drive_reset() argument
148 struct request *rq = drive->hwif->rq; ide_complete_drive_reset()
154 ide_complete_rq(drive, err ? err : 0, blk_rq_bytes(rq)); ide_complete_drive_reset()
163 * every 50ms during an atapi drive reset operation. If the drive has not yet
167 static ide_startstop_t atapi_reset_pollfunc(ide_drive_t *drive) atapi_reset_pollfunc() argument
169 ide_hwif_t *hwif = drive->hwif; atapi_reset_pollfunc()
173 tp_ops->dev_select(drive); atapi_reset_pollfunc()
178 printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name); atapi_reset_pollfunc()
181 ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20); atapi_reset_pollfunc()
188 drive->name, stat); atapi_reset_pollfunc()
190 return do_reset1(drive, 1); atapi_reset_pollfunc()
194 ide_complete_drive_reset(drive, 0); atapi_reset_pollfunc()
223 static ide_startstop_t reset_pollfunc(ide_drive_t *drive) reset_pollfunc() argument
225 ide_hwif_t *hwif = drive->hwif; reset_pollfunc()
231 err = port_ops->reset_poll(drive); reset_pollfunc()
234 hwif->name, drive->name); reset_pollfunc()
243 ide_set_handler(drive, &reset_pollfunc, HZ/20); reset_pollfunc()
249 drive->failures++; reset_pollfunc()
252 tmp = ide_read_error(drive); reset_pollfunc()
256 drive->failures = 0; reset_pollfunc()
259 drive->failures++; reset_pollfunc()
265 ide_complete_drive_reset(drive, err); reset_pollfunc()
269 static void ide_disk_pre_reset(ide_drive_t *drive) ide_disk_pre_reset() argument
271 int legacy = (drive->id[ATA_ID_CFS_ENABLE_2] & 0x0400) ? 0 : 1; ide_disk_pre_reset()
273 drive->special_flags = ide_disk_pre_reset()
276 drive->mult_count = 0; ide_disk_pre_reset()
277 drive->dev_flags &= ~IDE_DFLAG_PARKED; ide_disk_pre_reset()
279 if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0 && ide_disk_pre_reset()
280 (drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) ide_disk_pre_reset()
281 drive->mult_req = 0; ide_disk_pre_reset()
283 if (drive->mult_req != drive->mult_count) ide_disk_pre_reset()
284 drive->special_flags |= IDE_SFLAG_SET_MULTMODE; ide_disk_pre_reset()
287 static void pre_reset(ide_drive_t *drive) pre_reset() argument
289 const struct ide_port_ops *port_ops = drive->hwif->port_ops; pre_reset()
291 if (drive->media == ide_disk) pre_reset()
292 ide_disk_pre_reset(drive); pre_reset()
294 drive->dev_flags |= IDE_DFLAG_POST_RESET; pre_reset()
296 if (drive->dev_flags & IDE_DFLAG_USING_DMA) { pre_reset()
297 if (drive->crc_count) pre_reset()
298 ide_check_dma_crc(drive); pre_reset()
300 ide_dma_off(drive); pre_reset()
303 if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0) { pre_reset()
304 if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) { pre_reset()
305 drive->dev_flags &= ~IDE_DFLAG_UNMASK; pre_reset()
306 drive->io_32bit = 0; pre_reset()
312 port_ops->pre_reset(drive); pre_reset()
314 if (drive->current_speed != 0xff) pre_reset()
315 drive->desired_speed = drive->current_speed; pre_reset()
316 drive->current_speed = 0xff; pre_reset()
320 * do_reset1() attempts to recover a confused drive by resetting it.
321 * Unfortunately, resetting a disk drive actually resets all devices on
323 * interface rather than resetting the drive.
334 static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi) do_reset1() argument
336 ide_hwif_t *hwif = drive->hwif; do_reset1()
351 if (drive->media != ide_disk && !do_not_try_atapi) { do_reset1()
352 pre_reset(drive); do_reset1()
353 tp_ops->dev_select(drive); do_reset1()
359 __ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20); do_reset1()
395 ide_complete_drive_reset(drive, -ENXIO); ide_port_for_each_dev()
413 ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) ? 0 : ATA_NIEN) |
419 __ide_set_handler(drive, &reset_pollfunc, HZ/20);
428 port_ops->resetproc(drive);
435 * ide_do_reset() is the entry point to the drive/interface reset code.
438 ide_startstop_t ide_do_reset(ide_drive_t *drive) ide_do_reset() argument
440 return do_reset1(drive, 0); ide_do_reset()
H A Dide-park.c9 static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout) issue_park_cmd() argument
11 ide_hwif_t *hwif = drive->hwif; issue_park_cmd()
12 struct request_queue *q = drive->queue; issue_park_cmd()
18 if (drive->dev_flags & IDE_DFLAG_PARKED) { issue_park_cmd()
19 int reset_timer = time_before(timeout, drive->sleep); issue_park_cmd()
22 drive->sleep = timeout; issue_park_cmd()
45 * Make sure that *some* command is sent to the drive after the issue_park_cmd()
61 ide_startstop_t ide_do_park_unpark(ide_drive_t *drive, struct request *rq) ide_do_park_unpark() argument
68 drive->sleep = *(unsigned long *)rq->special; ide_do_park_unpark()
69 drive->dev_flags |= IDE_DFLAG_SLEEPING; ide_do_park_unpark()
85 return do_rw_taskfile(drive, &cmd); ide_do_park_unpark()
91 ide_drive_t *drive = to_ide_device(dev); ide_park_show() local
92 ide_hwif_t *hwif = drive->hwif; ide_park_show()
96 if (drive->dev_flags & IDE_DFLAG_NO_UNLOAD) ide_park_show()
101 if (drive->dev_flags & IDE_DFLAG_PARKED && ide_park_show()
102 time_after(drive->sleep, now)) ide_park_show()
103 msecs = jiffies_to_msecs(drive->sleep - now); ide_park_show()
115 ide_drive_t *drive = to_ide_device(dev); ide_park_store() local
131 if (drive->dev_flags & IDE_DFLAG_NO_UNLOAD) ide_park_store()
133 else if (input || drive->dev_flags & IDE_DFLAG_PARKED) ide_park_store()
134 issue_park_cmd(drive, msecs_to_jiffies(input)); ide_park_store()
136 if (drive->media == ide_disk) ide_park_store()
139 drive->dev_flags &= ~IDE_DFLAG_NO_UNLOAD; ide_park_store()
142 drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; ide_park_store()
H A Dide-floppy.c57 * The following delay solves a problem with ATAPI Zip 100 drive where BSY bit
62 static int ide_floppy_callback(ide_drive_t *drive, int dsc) ide_floppy_callback() argument
64 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_callback()
65 struct ide_atapi_pc *pc = drive->pc; ide_floppy_callback()
71 if (drive->failed_pc == pc) ide_floppy_callback()
72 drive->failed_pc = NULL; ide_floppy_callback()
88 if (drive->failed_pc) ide_floppy_callback()
90 drive->failed_pc->c[0]); ide_floppy_callback()
117 floppy->drive->name, pc->c[0], floppy->sense_key, ide_floppy_report_error()
122 static ide_startstop_t ide_floppy_issue_pc(ide_drive_t *drive, ide_floppy_issue_pc() argument
126 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_issue_pc()
128 if (drive->failed_pc == NULL && ide_floppy_issue_pc()
130 drive->failed_pc = pc; ide_floppy_issue_pc()
133 drive->pc = pc; ide_floppy_issue_pc()
136 unsigned int done = blk_rq_bytes(drive->hwif->rq); ide_floppy_issue_pc()
144 drive->failed_pc = NULL; ide_floppy_issue_pc()
145 drive->pc_callback(drive, 0); ide_floppy_issue_pc()
146 ide_complete_rq(drive, -EIO, done); ide_floppy_issue_pc()
154 return ide_issue_pc(drive, cmd); ide_floppy_issue_pc()
190 static void idefloppy_create_rw_cmd(ide_drive_t *drive, idefloppy_create_rw_cmd() argument
194 struct ide_disk_obj *floppy = drive->driver_data; idefloppy_create_rw_cmd()
228 static ide_startstop_t ide_floppy_do_request(ide_drive_t *drive, ide_floppy_do_request() argument
231 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_do_request()
237 if (drive->debug_mask & IDE_DBG_RQ) ide_floppy_do_request()
243 if (drive->failed_pc) { ide_floppy_do_request()
244 ide_floppy_report_error(floppy, drive->failed_pc); ide_floppy_do_request()
245 drive->failed_pc = NULL; ide_floppy_do_request()
247 printk(KERN_ERR PFX "%s: I/O error\n", drive->name); ide_floppy_do_request()
251 ide_complete_rq(drive, 0, blk_rq_bytes(rq)); ide_floppy_do_request()
262 drive->name); ide_floppy_do_request()
266 idefloppy_create_rw_cmd(drive, pc, rq, (unsigned long)block); ide_floppy_do_request()
280 ide_prep_sense(drive, rq); ide_floppy_do_request()
291 ide_map_sg(drive, &cmd); ide_floppy_do_request()
296 return ide_floppy_issue_pc(drive, &cmd, pc); ide_floppy_do_request()
298 drive->failed_pc = NULL; ide_floppy_do_request()
301 ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); ide_floppy_do_request()
309 static int ide_floppy_get_flexible_disk_page(ide_drive_t *drive, ide_floppy_get_flexible_disk_page() argument
312 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_get_flexible_disk_page()
321 if (ide_queue_pc_tail(drive, disk, pc, buf, pc->req_xfer)) { ide_floppy_get_flexible_disk_page()
327 drive->dev_flags |= IDE_DFLAG_WP; ide_floppy_get_flexible_disk_page()
329 drive->dev_flags &= ~IDE_DFLAG_WP; ide_floppy_get_flexible_disk_page()
331 set_disk_ro(disk, !!(drive->dev_flags & IDE_DFLAG_WP)); ide_floppy_get_flexible_disk_page()
347 drive->name, capacity / 1024, cyls, heads, ide_floppy_get_flexible_disk_page()
351 drive->bios_cyl = cyls; ide_floppy_get_flexible_disk_page()
352 drive->bios_head = heads; ide_floppy_get_flexible_disk_page()
353 drive->bios_sect = sectors; ide_floppy_get_flexible_disk_page()
358 "bytes, but the drive only handles %d\n", ide_floppy_get_flexible_disk_page()
359 drive->name, lba_capacity, capacity); ide_floppy_get_flexible_disk_page()
362 drive->capacity64 = floppy->blocks * floppy->bs_factor; ide_floppy_get_flexible_disk_page()
369 * Determine if a media is present in the floppy drive, and if so, its LBA
372 static int ide_floppy_get_capacity(ide_drive_t *drive) ide_floppy_get_capacity() argument
374 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_get_capacity()
383 drive->bios_cyl = 0; ide_floppy_get_capacity()
384 drive->bios_head = drive->bios_sect = 0; ide_floppy_get_capacity()
387 drive->capacity64 = 0; ide_floppy_get_capacity()
390 if (ide_queue_pc_tail(drive, disk, &pc, pc_buf, pc.req_xfer)) { ide_floppy_get_capacity()
416 /* Clik! drive returns this instead of CAPACITY_CURRENT */ ide_floppy_get_capacity()
418 if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) ide_floppy_get_capacity()
420 * If it is not a clik drive, break out ide_floppy_get_capacity()
429 drive->name, blocks * length / 1024, ide_floppy_get_capacity()
435 " not supported\n", drive->name, length); ide_floppy_get_capacity()
444 drive->name); ide_floppy_get_capacity()
445 drive->capacity64 = ide_floppy_get_capacity()
455 printk(KERN_ERR PFX "%s: No disk in drive\n", ide_floppy_get_capacity()
456 drive->name); ide_floppy_get_capacity()
460 "in drive\n", drive->name); ide_floppy_get_capacity()
468 if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) ide_floppy_get_capacity()
469 (void) ide_floppy_get_flexible_disk_page(drive, &pc); ide_floppy_get_capacity()
474 static void ide_floppy_setup(ide_drive_t *drive) ide_floppy_setup() argument
476 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_setup()
477 u16 *id = drive->id; ide_floppy_setup()
479 drive->pc_callback = ide_floppy_callback; ide_floppy_setup()
491 drive->atapi_flags |= IDE_AFLAG_ZIP_DRIVE; ide_floppy_setup()
493 drive->pc_delay = IDEFLOPPY_PC_DELAY; ide_floppy_setup()
494 blk_queue_max_hw_sectors(drive->queue, 64); ide_floppy_setup()
498 * Guess what? The IOMEGA Clik! drive also needs the above fix. It makes ide_floppy_setup()
502 blk_queue_max_hw_sectors(drive->queue, 64); ide_floppy_setup()
503 drive->atapi_flags |= IDE_AFLAG_CLIK_DRIVE; ide_floppy_setup()
505 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; ide_floppy_setup()
508 (void) ide_floppy_get_capacity(drive); ide_floppy_setup()
510 ide_proc_register_driver(drive, floppy->driver); ide_floppy_setup()
512 drive->dev_flags |= IDE_DFLAG_ATTACH; ide_floppy_setup()
515 static void ide_floppy_flush(ide_drive_t *drive) ide_floppy_flush() argument
519 static int ide_floppy_init_media(ide_drive_t *drive, struct gendisk *disk) ide_floppy_init_media() argument
523 if (ide_do_test_unit_ready(drive, disk)) ide_floppy_init_media()
524 ide_do_start_stop(drive, disk, 1); ide_floppy_init_media()
526 ret = ide_floppy_get_capacity(drive); ide_floppy_init_media()
528 set_capacity(disk, ide_gd_capacity(drive)); ide_floppy_init_media()
H A Dide-taskfile.c27 void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd) ide_tf_readback() argument
29 ide_hwif_t *hwif = drive->hwif; ide_tf_readback()
35 tp_ops->tf_read(drive, &cmd->tf, cmd->valid.in.tf); ide_tf_readback()
40 tp_ops->tf_read(drive, &cmd->hob, cmd->valid.in.hob); ide_tf_readback()
57 int taskfile_lib_get_identify(ide_drive_t *drive, u8 *buf) taskfile_lib_get_identify() argument
63 if (drive->media == ide_disk) taskfile_lib_get_identify()
71 return ide_raw_taskfile(drive, &cmd, buf, 1); taskfile_lib_get_identify()
78 ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd) do_rw_taskfile() argument
80 ide_hwif_t *hwif = drive->hwif; do_rw_taskfile()
89 drive->mult_count == 0) { do_rw_taskfile()
90 pr_err("%s: multimode not set!\n", drive->name); do_rw_taskfile()
100 ide_tf_dump(drive->name, cmd); do_rw_taskfile()
106 tp_ops->output_data(drive, cmd, data, 2); do_rw_taskfile()
115 cmd->tf.device |= drive->select; do_rw_taskfile()
118 tp_ops->tf_load(drive, &cmd->hob, cmd->valid.out.hob); do_rw_taskfile()
119 tp_ops->tf_load(drive, &cmd->tf, cmd->valid.out.tf); do_rw_taskfile()
127 return pre_task_out_intr(drive, cmd); do_rw_taskfile()
134 ide_execute_command(drive, cmd, handler, WAIT_WORSTCASE); do_rw_taskfile()
137 if (ide_dma_prepare(drive, cmd)) do_rw_taskfile()
140 ide_execute_command(drive, cmd, ide_dma_intr, 2 * WAIT_CMD); do_rw_taskfile()
141 dma_ops->dma_start(drive); do_rw_taskfile()
148 static ide_startstop_t task_no_data_intr(ide_drive_t *drive) task_no_data_intr() argument
150 ide_hwif_t *hwif = drive->hwif; task_no_data_intr()
168 drive->mult_req = drive->mult_count = 0; task_no_data_intr()
169 drive->special_flags |= IDE_SFLAG_RECALIBRATE; task_no_data_intr()
170 (void)ide_dump_status(drive, __func__, stat); task_no_data_intr()
174 ide_set_handler(drive, &task_no_data_intr, task_no_data_intr()
179 return ide_error(drive, "task_no_data_intr", stat); task_no_data_intr()
183 drive->mult_count = drive->mult_req; task_no_data_intr()
190 ide_complete_pm_rq(drive, rq); task_no_data_intr()
192 ide_finish_cmd(drive, cmd, stat); task_no_data_intr()
198 static u8 wait_drive_not_busy(ide_drive_t *drive) wait_drive_not_busy() argument
200 ide_hwif_t *hwif = drive->hwif; wait_drive_not_busy()
218 pr_err("%s: drive still BUSY!\n", drive->name); wait_drive_not_busy()
223 void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd, ide_pio_bytes() argument
226 ide_hwif_t *hwif = drive->hwif; ide_pio_bytes()
267 hwif->tp_ops->output_data(drive, cmd, buf, nr_bytes); ide_pio_bytes()
269 hwif->tp_ops->input_data(drive, cmd, buf, nr_bytes); ide_pio_bytes()
281 static void ide_pio_datablock(ide_drive_t *drive, struct ide_cmd *cmd, ide_pio_datablock() argument
286 u8 saved_io_32bit = drive->io_32bit; ide_pio_datablock()
292 drive->io_32bit = 0; ide_pio_datablock()
297 nr_bytes = min_t(unsigned, cmd->nleft, drive->mult_count << 9); ide_pio_datablock()
301 ide_pio_bytes(drive, cmd, write, nr_bytes); ide_pio_datablock()
303 drive->io_32bit = saved_io_32bit; ide_pio_datablock()
306 static void ide_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) ide_error_cmd() argument
314 nr_bytes -= drive->mult_count << 9; ide_error_cmd()
320 ide_complete_rq(drive, 0, nr_bytes); ide_error_cmd()
324 void ide_finish_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat) ide_finish_cmd() argument
326 struct request *rq = drive->hwif->rq; ide_finish_cmd()
327 u8 err = ide_read_error(drive), nsect = cmd->tf.nsect; ide_finish_cmd()
330 ide_complete_cmd(drive, cmd, stat, err); ide_finish_cmd()
334 ide_set_xfer_rate(drive, nsect); ide_finish_cmd()
335 ide_driveid_update(drive); ide_finish_cmd()
338 ide_complete_rq(drive, err ? -EIO : 0, blk_rq_bytes(rq)); ide_finish_cmd()
344 static ide_startstop_t task_pio_intr(ide_drive_t *drive) task_pio_intr() argument
346 ide_hwif_t *hwif = drive->hwif; task_pio_intr()
347 struct ide_cmd *cmd = &drive->hwif->cmd; task_pio_intr()
366 if (!OK_STAT(stat, DRIVE_READY, drive->bad_wstat)) task_pio_intr()
378 ide_pio_datablock(drive, cmd, write); task_pio_intr()
382 stat = wait_drive_not_busy(drive); task_pio_intr()
390 ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE); task_pio_intr()
394 ide_finish_cmd(drive, cmd, stat); task_pio_intr()
396 ide_complete_rq(drive, 0, blk_rq_sectors(cmd->rq) << 9); task_pio_intr()
399 ide_error_cmd(drive, cmd); task_pio_intr()
400 return ide_error(drive, __func__, stat); task_pio_intr()
403 static ide_startstop_t pre_task_out_intr(ide_drive_t *drive, pre_task_out_intr() argument
408 if (ide_wait_stat(&startstop, drive, ATA_DRQ, pre_task_out_intr()
409 drive->bad_wstat, WAIT_DRQ)) { pre_task_out_intr()
410 pr_err("%s: no DRQ after issuing %sWRITE%s\n", drive->name, pre_task_out_intr()
412 (drive->dev_flags & IDE_DFLAG_LBA48) ? "_EXT" : ""); pre_task_out_intr()
416 if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0) pre_task_out_intr()
419 ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE); pre_task_out_intr()
421 ide_pio_datablock(drive, cmd, 1); pre_task_out_intr()
426 int ide_raw_taskfile(ide_drive_t *drive, struct ide_cmd *cmd, u8 *buf, ide_raw_taskfile() argument
433 rq = blk_get_request(drive->queue, rw, __GFP_WAIT); ide_raw_taskfile()
443 error = blk_rq_map_kern(drive->queue, rq, buf, ide_raw_taskfile()
452 error = blk_execute_rq(drive->queue, NULL, rq, 0); ide_raw_taskfile()
460 int ide_no_data_taskfile(ide_drive_t *drive, struct ide_cmd *cmd) ide_no_data_taskfile() argument
464 return ide_raw_taskfile(drive, cmd, NULL, 0); ide_no_data_taskfile()
469 int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) ide_taskfile_ioctl() argument
530 if (drive->dev_flags & IDE_DFLAG_LBA48) { ide_taskfile_ioctl()
580 if (!drive->mult_count) { ide_taskfile_ioctl()
583 drive->name, __func__); ide_taskfile_ioctl()
599 if (!drive->mult_count) { ide_taskfile_ioctl()
602 drive->name, __func__); ide_taskfile_ioctl()
631 drive->name); ide_taskfile_ioctl()
637 err = ide_raw_taskfile(drive, &cmd, data_buf, nsect); ide_taskfile_ioctl()
645 if (drive->dev_flags & IDE_DFLAG_LBA48) ide_taskfile_ioctl()
H A Dide-pm.c7 ide_drive_t *drive = to_ide_device(dev); generic_ide_suspend() local
8 ide_drive_t *pair = ide_get_pair_dev(drive); generic_ide_suspend()
9 ide_hwif_t *hwif = drive->hwif; generic_ide_suspend()
16 if ((drive->dn & 1) == 0 || pair == NULL) generic_ide_suspend()
21 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); generic_ide_suspend()
29 ret = blk_execute_rq(drive->queue, NULL, rq, 0); generic_ide_suspend()
34 if ((drive->dn & 1) || pair == NULL) generic_ide_suspend()
43 ide_drive_t *drive = to_ide_device(dev); generic_ide_resume() local
44 ide_drive_t *pair = ide_get_pair_dev(drive); generic_ide_resume()
45 ide_hwif_t *hwif = drive->hwif; generic_ide_resume()
52 if ((drive->dn & 1) == 0 || pair == NULL) { generic_ide_resume()
57 ide_acpi_exec_tfs(drive); generic_ide_resume()
61 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); generic_ide_resume()
68 err = blk_execute_rq(drive->queue, NULL, rq, 1); generic_ide_resume()
75 drv->resume(drive); generic_ide_resume()
81 void ide_complete_power_step(ide_drive_t *drive, struct request *rq) ide_complete_power_step() argument
87 drive->name, pm->pm_step); ide_complete_power_step()
89 if (drive->media != ide_disk) ide_complete_power_step()
111 ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq) ide_start_power_step() argument
118 if (drive->media != ide_disk) ide_start_power_step()
121 if (ata_id_flush_enabled(drive->id) == 0 || ide_start_power_step()
122 (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) { ide_start_power_step()
123 ide_complete_power_step(drive, rq); ide_start_power_step()
126 if (ata_id_flush_ext_enabled(drive->id)) ide_start_power_step()
135 ide_set_max_pio(drive); ide_start_power_step()
139 if (drive->media != ide_disk) ide_start_power_step()
142 ide_complete_power_step(drive, rq); ide_start_power_step()
149 * Right now, all we do is call ide_set_dma(drive), ide_start_power_step()
151 * in struct drive etc... ide_start_power_step()
153 if (drive->hwif->dma_ops == NULL) ide_start_power_step()
158 ide_set_dma(drive); ide_start_power_step()
171 return do_rw_taskfile(drive, &cmd); ide_start_power_step()
176 * @drive: target drive
182 void ide_complete_pm_rq(ide_drive_t *drive, struct request *rq) ide_complete_pm_rq() argument
184 struct request_queue *q = drive->queue; ide_complete_pm_rq()
188 ide_complete_power_step(drive, rq); ide_complete_pm_rq()
193 printk("%s: completing PM request, %s\n", drive->name, ide_complete_pm_rq()
200 drive->dev_flags &= ~IDE_DFLAG_BLOCKED; ide_complete_pm_rq()
203 drive->hwif->rq = NULL; ide_complete_pm_rq()
209 void ide_check_pm_state(ide_drive_t *drive, struct request *rq) ide_check_pm_state() argument
215 /* Mark drive blocked when starting the suspend sequence. */ ide_check_pm_state()
216 drive->dev_flags |= IDE_DFLAG_BLOCKED; ide_check_pm_state()
221 * go away (with a looong timeout) as a drive on this hwif may ide_check_pm_state()
227 ide_hwif_t *hwif = drive->hwif; ide_check_pm_state()
229 struct request_queue *q = drive->queue; ide_check_pm_state()
233 printk("%s: Wakeup request inited, waiting for !BSY...\n", drive->name); ide_check_pm_state()
237 printk(KERN_WARNING "%s: bus not ready on wakeup\n", drive->name); ide_check_pm_state()
238 tp_ops->dev_select(drive); ide_check_pm_state()
242 printk(KERN_WARNING "%s: drive not ready on wakeup\n", drive->name); ide_check_pm_state()
H A Dide-cd_ioctl.c30 ide_drive_t *drive = cdi->handle; ide_cdrom_release_real() local
33 drive->atapi_flags &= ~IDE_AFLAG_TOC_VALID; ide_cdrom_release_real()
43 ide_drive_t *drive = cdi->handle; ide_cdrom_drive_status() local
51 stat = cdrom_check_status(drive, &sense); ide_cdrom_drive_status()
91 ide_drive_t *drive = cdi->handle; ide_cdrom_check_events_real() local
95 (void) cdrom_check_status(drive, NULL); ide_cdrom_check_events_real()
96 retval = (drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED) ? 1 : 0; ide_cdrom_check_events_real()
97 drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED; ide_cdrom_check_events_real()
107 int cdrom_eject(ide_drive_t *drive, int ejectflag, cdrom_eject() argument
110 struct cdrom_info *cd = drive->driver_data; cdrom_eject()
115 if ((drive->atapi_flags & IDE_AFLAG_NO_EJECT) && !ejectflag) cdrom_eject()
119 if ((drive->atapi_flags & IDE_AFLAG_DOOR_LOCKED) && ejectflag) cdrom_eject()
122 /* only tell drive to close tray if open, if it can do that */ cdrom_eject()
131 return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, sense, 0, 0); cdrom_eject()
136 int ide_cd_lockdoor(ide_drive_t *drive, int lockflag, ide_cd_lockdoor() argument
145 /* If the drive cannot lock the door, just pretend. */ ide_cd_lockdoor()
146 if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) { ide_cd_lockdoor()
156 stat = ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, ide_cd_lockdoor()
160 /* If we got an illegal field error, the drive ide_cd_lockdoor()
166 drive->name); ide_cd_lockdoor()
167 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; ide_cd_lockdoor()
177 drive->atapi_flags |= IDE_AFLAG_DOOR_LOCKED; ide_cd_lockdoor()
179 drive->atapi_flags &= ~IDE_AFLAG_DOOR_LOCKED; ide_cd_lockdoor()
187 ide_drive_t *drive = cdi->handle; ide_cdrom_tray_move() local
191 int stat = ide_cd_lockdoor(drive, 0, &sense); ide_cdrom_tray_move()
197 return cdrom_eject(drive, !position, &sense); ide_cdrom_tray_move()
202 ide_drive_t *drive = cdi->handle; ide_cdrom_lock_door() local
204 return ide_cd_lockdoor(drive, lock, NULL); ide_cdrom_lock_door()
213 ide_drive_t *drive = cdi->handle; ide_cdrom_select_speed() local
214 struct cdrom_info *cd = drive->driver_data; ide_cdrom_select_speed()
238 stat = ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, &sense, 0, 0); ide_cdrom_select_speed()
240 if (!ide_cdrom_get_capabilities(drive, buf)) { ide_cdrom_select_speed()
241 ide_cdrom_update_speed(drive, buf); ide_cdrom_select_speed()
252 ide_drive_t *drive = cdi->handle; ide_cdrom_get_last_session() local
253 struct cdrom_info *info = drive->driver_data; ide_cdrom_get_last_session()
257 if ((drive->atapi_flags & IDE_AFLAG_TOC_VALID) == 0 || !info->toc) { ide_cdrom_get_last_session()
258 ret = ide_cd_read_toc(drive, &sense); ide_cdrom_get_last_session()
273 ide_drive_t *drive = cdi->handle; ide_cdrom_get_mcn() local
287 stat = ide_cd_queue_pc(drive, cmd, 0, buf, &len, NULL, 0, 0); ide_cdrom_get_mcn()
300 ide_drive_t *drive = cdi->handle; ide_cdrom_reset() local
301 struct cdrom_info *cd = drive->driver_data; ide_cdrom_reset()
306 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); ide_cdrom_reset()
309 ret = blk_execute_rq(drive->queue, cd->disk, rq, 0); ide_cdrom_reset()
315 if (drive->atapi_flags & IDE_AFLAG_DOOR_LOCKED) ide_cdrom_reset()
316 (void)ide_cd_lockdoor(drive, 1, &sense); ide_cdrom_reset()
321 static int ide_cd_get_toc_entry(ide_drive_t *drive, int track, ide_cd_get_toc_entry() argument
324 struct cdrom_info *info = drive->driver_data; ide_cd_get_toc_entry()
331 if ((drive->atapi_flags & IDE_AFLAG_TOC_VALID) == 0) ide_cd_get_toc_entry()
350 static int ide_cd_fake_play_trkind(ide_drive_t *drive, void *arg) ide_cd_fake_play_trkind() argument
359 stat = ide_cd_get_toc_entry(drive, ti->cdti_trk0, &first_toc); ide_cd_fake_play_trkind()
363 stat = ide_cd_get_toc_entry(drive, ti->cdti_trk1, &last_toc); ide_cd_fake_play_trkind()
381 return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, &sense, 0, 0); ide_cd_fake_play_trkind()
384 static int ide_cd_read_tochdr(ide_drive_t *drive, void *arg) ide_cd_read_tochdr() argument
386 struct cdrom_info *cd = drive->driver_data; ide_cd_read_tochdr()
392 stat = ide_cd_read_toc(drive, NULL); ide_cd_read_tochdr()
403 static int ide_cd_read_tocentry(ide_drive_t *drive, void *arg) ide_cd_read_tocentry() argument
409 stat = ide_cd_get_toc_entry(drive, tocentry->cdte_track, &toce); ide_cd_read_tocentry()
429 ide_drive_t *drive = cdi->handle; ide_cdrom_audio_ioctl() local
437 return ide_cd_fake_play_trkind(drive, arg); ide_cdrom_audio_ioctl()
439 return ide_cd_read_tochdr(drive, arg); ide_cdrom_audio_ioctl()
441 return ide_cd_read_tocentry(drive, arg); ide_cdrom_audio_ioctl()
451 ide_drive_t *drive = cdi->handle; ide_cdrom_packet() local
471 cgc->stat = ide_cd_queue_pc(drive, cgc->cmd, ide_cdrom_packet()
H A Dide-probe.c43 * generic_id - add a generic drive id
44 * @drive: drive to make an ID block for
46 * Add a fake id field to the drive we are passed. This allows
48 * and make drive properties unconditional outside of this file
51 static void generic_id(ide_drive_t *drive) generic_id() argument
53 u16 *id = drive->id; generic_id()
55 id[ATA_ID_CUR_CYLS] = id[ATA_ID_CYLS] = drive->cyl; generic_id()
56 id[ATA_ID_CUR_HEADS] = id[ATA_ID_HEADS] = drive->head; generic_id()
57 id[ATA_ID_CUR_SECTORS] = id[ATA_ID_SECTORS] = drive->sect; generic_id()
60 static void ide_disk_init_chs(ide_drive_t *drive) ide_disk_init_chs() argument
62 u16 *id = drive->id; ide_disk_init_chs()
64 /* Extract geometry if we did not already have one for the drive */ ide_disk_init_chs()
65 if (!drive->cyl || !drive->head || !drive->sect) { ide_disk_init_chs()
66 drive->cyl = drive->bios_cyl = id[ATA_ID_CYLS]; ide_disk_init_chs()
67 drive->head = drive->bios_head = id[ATA_ID_HEADS]; ide_disk_init_chs()
68 drive->sect = drive->bios_sect = id[ATA_ID_SECTORS]; ide_disk_init_chs()
71 /* Handle logical geometry translation by the drive */ ide_disk_init_chs()
73 drive->cyl = id[ATA_ID_CUR_CYLS]; ide_disk_init_chs()
74 drive->head = id[ATA_ID_CUR_HEADS]; ide_disk_init_chs()
75 drive->sect = id[ATA_ID_CUR_SECTORS]; ide_disk_init_chs()
79 if (drive->head > 16 && id[ATA_ID_HEADS] && id[ATA_ID_HEADS] <= 16) { ide_disk_init_chs()
80 drive->cyl = id[ATA_ID_CYLS]; ide_disk_init_chs()
81 drive->head = id[ATA_ID_HEADS]; ide_disk_init_chs()
82 drive->sect = id[ATA_ID_SECTORS]; ide_disk_init_chs()
86 static void ide_disk_init_mult_count(ide_drive_t *drive) ide_disk_init_mult_count() argument
88 u16 *id = drive->id; ide_disk_init_mult_count()
97 drive->mult_req = id[ATA_ID_MULTSECT] & 0xff; ide_disk_init_mult_count()
99 if (drive->mult_req) ide_disk_init_mult_count()
100 drive->special_flags |= IDE_SFLAG_SET_MULTMODE; ide_disk_init_mult_count()
104 static void ide_classify_ata_dev(ide_drive_t *drive) ide_classify_ata_dev() argument
106 u16 *id = drive->id; ide_classify_ata_dev()
112 drive->dev_flags |= IDE_DFLAG_REMOVABLE; ide_classify_ata_dev()
114 drive->media = ide_disk; ide_classify_ata_dev()
116 if (!ata_id_has_unload(drive->id)) ide_classify_ata_dev()
117 drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; ide_classify_ata_dev()
119 printk(KERN_INFO "%s: %s, %s DISK drive\n", drive->name, m, ide_classify_ata_dev()
123 static void ide_classify_atapi_dev(ide_drive_t *drive) ide_classify_atapi_dev() argument
125 u16 *id = drive->id; ide_classify_atapi_dev()
129 printk(KERN_INFO "%s: %s, ATAPI ", drive->name, m); ide_classify_atapi_dev()
137 if (drive->media != ide_cdrom) { ide_classify_atapi_dev()
139 drive->dev_flags |= IDE_DFLAG_REMOVABLE; ide_classify_atapi_dev()
146 drive->dev_flags |= IDE_DFLAG_REMOVABLE; ide_classify_atapi_dev()
162 drive->dev_flags |= IDE_DFLAG_REMOVABLE; ide_classify_atapi_dev()
169 printk(KERN_CONT " drive\n"); ide_classify_atapi_dev()
170 drive->media = type; ide_classify_atapi_dev()
172 drive->ready_stat = 0; ide_classify_atapi_dev()
174 drive->atapi_flags |= IDE_AFLAG_DRQ_INTERRUPT; ide_classify_atapi_dev()
175 drive->dev_flags |= IDE_DFLAG_DOORLOCKING; ide_classify_atapi_dev()
177 drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; ide_classify_atapi_dev()
181 * do_identify - identify a drive
182 * @drive: drive to identify
186 * Called when we have issued a drive identify command to
191 static void do_identify(ide_drive_t *drive, u8 cmd, u16 *id) do_identify() argument
193 ide_hwif_t *hwif = drive->hwif; do_identify()
201 hwif->tp_ops->input_data(drive, NULL, id, SECTOR_SIZE); do_identify()
204 drive->dev_flags |= IDE_DFLAG_ID_READ; do_identify()
206 printk(KERN_INFO "%s: dumping identify data\n", drive->name); do_identify()
231 drive->dev_flags &= ~IDE_DFLAG_PRESENT; do_identify()
233 drive->dev_flags |= IDE_DFLAG_PRESENT; do_identify()
238 * @drive: drive to identify
243 * Sends an ATA(PI) IDENTIFY request to a drive and waits for a response.
250 int ide_dev_read_id(ide_drive_t *drive, u8 cmd, u16 *id, int irq_ctx) ide_dev_read_id() argument
252 ide_hwif_t *hwif = drive->hwif; ide_dev_read_id()
280 drive->name, s, a); ide_dev_read_id()
294 tp_ops->tf_load(drive, &tf, IDE_VALID_FEATURE); ide_dev_read_id()
297 /* ask drive for ID */ ide_dev_read_id()
304 rc = __ide_wait_stat(drive, ATA_DRQ, BAD_R_STAT, timeout, &s); ide_dev_read_id()
308 rc = ide_busy_sleep(drive, timeout, use_altstatus); ide_dev_read_id()
317 /* drive returned ID */ ide_dev_read_id()
318 do_identify(drive, cmd, id); ide_dev_read_id()
319 /* drive responded with ID */ ide_dev_read_id()
321 /* clear drive IRQ */ ide_dev_read_id()
324 /* drive refused ID */ ide_dev_read_id()
330 int ide_busy_sleep(ide_drive_t *drive, unsigned long timeout, int altstatus) ide_busy_sleep() argument
332 ide_hwif_t *hwif = drive->hwif; ide_busy_sleep()
338 msleep(50); /* give drive a breather */ ide_busy_sleep()
345 printk(KERN_ERR "%s: timeout in %s\n", drive->name, __func__); ide_busy_sleep()
347 return 1; /* drive timed-out */ ide_busy_sleep()
350 static u8 ide_read_device(ide_drive_t *drive) ide_read_device() argument
354 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_DEVICE); ide_read_device()
361 * @drive: drive to probe
364 * do_probe() has the difficult job of finding a drive if it exists,
368 * If a drive is "known" to exist (from CMOS or kernel parameters),
380 static int do_probe (ide_drive_t *drive, u8 cmd) do_probe() argument
382 ide_hwif_t *hwif = drive->hwif; do_probe()
384 u16 *id = drive->id; do_probe()
386 u8 present = !!(drive->dev_flags & IDE_DFLAG_PRESENT), stat; do_probe()
389 if (present && drive->media != ide_disk && cmd == ATA_CMD_ID_ATA) do_probe()
394 drive->name, present, drive->media, do_probe()
402 tp_ops->dev_select(drive); do_probe()
405 if (ide_read_device(drive) != drive->select && present == 0) { do_probe()
406 if (drive->dn & 1) { do_probe()
420 rc = ide_dev_read_id(drive, cmd, id, 0); do_probe()
423 rc = ide_dev_read_id(drive, cmd, id, 0); do_probe()
432 "resetting drive\n", drive->name, stat); do_probe()
434 tp_ops->dev_select(drive); do_probe()
437 (void)ide_busy_sleep(drive, WAIT_WORSTCASE, 0); do_probe()
438 rc = ide_dev_read_id(drive, cmd, id, 0); do_probe()
441 /* ensure drive IRQ is clear */ do_probe()
446 drive->name, stat); do_probe()
451 if (drive->dn & 1) { do_probe()
455 /* ensure drive irq is clear */ do_probe()
462 * probe_for_drives - upper level drive probe
463 * @drive: drive to probe for
465 * probe_for_drive() tests for existence of a given drive using do_probe()
473 static u8 probe_for_drive(ide_drive_t *drive) probe_for_drive() argument
479 drive->dev_flags &= ~IDE_DFLAG_ID_READ; probe_for_drive()
481 m = (char *)&drive->id[ATA_ID_PROD]; probe_for_drive()
485 if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0) { probe_for_drive()
488 rc = do_probe(drive, cmd); probe_for_drive()
492 rc = do_probe(drive, cmd); probe_for_drive()
495 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) probe_for_drive()
499 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { probe_for_drive()
500 if (drive->media == ide_disk) { probe_for_drive()
501 printk(KERN_INFO "%s: non-IDE drive, CHS=%d/%d/%d\n", probe_for_drive()
502 drive->name, drive->cyl, probe_for_drive()
503 drive->head, drive->sect); probe_for_drive()
504 } else if (drive->media == ide_cdrom) { probe_for_drive()
505 printk(KERN_INFO "%s: ATAPI cdrom (?)\n", drive->name); probe_for_drive()
508 printk(KERN_WARNING "%s: Unknown device on bus refused identification. Ignoring.\n", drive->name); probe_for_drive()
509 drive->dev_flags &= ~IDE_DFLAG_PRESENT; probe_for_drive()
513 ide_classify_atapi_dev(drive); probe_for_drive()
515 ide_classify_ata_dev(drive); probe_for_drive()
519 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) probe_for_drive()
522 /* The drive wasn't being helpful. Add generic info only */ probe_for_drive()
523 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { probe_for_drive()
524 generic_id(drive); probe_for_drive()
528 if (drive->media == ide_disk) { probe_for_drive()
529 ide_disk_init_chs(drive); probe_for_drive()
530 ide_disk_init_mult_count(drive); probe_for_drive()
579 * the drive is still doing it's poweron-reset sequence, that
585 * - Some CD/DVD/Writer combo drives tend to drive the bus during
600 ide_drive_t *drive; ide_port_wait_ready() local
618 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
620 if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0 || ide_port_for_each_dev()
621 (drive->dev_flags & IDE_DFLAG_PRESENT)) { ide_port_for_each_dev()
622 tp_ops->dev_select(drive); ide_port_for_each_dev()
630 drive->name); ide_port_for_each_dev()
645 * have the same drive viewed twice. This occurs with crap CF adapters
680 ide_drive_t *drive; ide_probe_port() local
702 * Second drive should only exist if first drive was found, ide_probe_port()
705 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
706 (void) probe_for_drive(drive); ide_port_for_each_dev()
707 if (drive->dev_flags & IDE_DFLAG_PRESENT) ide_port_for_each_dev()
724 ide_drive_t *drive; ide_port_tune_devices() local
727 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
728 ide_check_nien_quirk_list(drive); ide_port_for_each_present_dev()
731 port_ops->quirkproc(drive); ide_port_for_each_present_dev()
734 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
735 ide_set_max_pio(drive); ide_port_for_each_present_dev()
737 drive->dev_flags |= IDE_DFLAG_NICE1; ide_port_for_each_present_dev()
740 ide_set_dma(drive); ide_port_for_each_present_dev()
747 static int ide_init_queue(ide_drive_t *drive) ide_init_queue() argument
750 ide_hwif_t *hwif = drive->hwif; ide_init_queue()
766 q->queuedata = drive; ide_init_queue()
789 /* assign drive queue */ ide_init_queue()
790 drive->queue = q; ide_init_queue()
792 /* needs drive->queue to be set */ ide_init_queue()
793 ide_toggle_bounce(drive, 1); ide_init_queue()
801 * For any present drive:
806 ide_drive_t *drive; ide_port_setup_devices() local
810 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
811 if (ide_init_queue(drive)) { ide_port_for_each_present_dev()
813 drive->name); ide_port_for_each_present_dev()
814 drive->dev_flags &= ~IDE_DFLAG_PRESENT; ide_port_for_each_present_dev()
887 ide_drive_t *drive = hwif->devices[unit]; ata_probe() local
889 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) ata_probe()
892 if (drive->media == ide_disk) ata_probe()
894 if (drive->media == ide_cdrom || drive->media == ide_optical) ata_probe()
896 if (drive->media == ide_tape) ata_probe()
898 if (drive->media == ide_floppy) ata_probe()
936 void ide_init_disk(struct gendisk *disk, ide_drive_t *drive) ide_init_disk() argument
938 ide_hwif_t *hwif = drive->hwif; ide_init_disk()
939 unsigned int unit = drive->dn & 1; ide_init_disk()
944 disk->queue = drive->queue; ide_init_disk()
951 ide_drive_t *drive = container_of(dev, ide_drive_t, gendev); drive_release_dev() local
953 ide_proc_unregister_device(drive); drive_release_dev()
955 blk_cleanup_queue(drive->queue); drive_release_dev()
956 drive->queue = NULL; drive_release_dev()
958 drive->dev_flags &= ~IDE_DFLAG_PRESENT; drive_release_dev()
960 complete(&drive->gendev_rel_comp); drive_release_dev()
1002 ide_drive_t *drive; hwif_register_devices() local
1005 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
1006 struct device *dev = &drive->gendev; ide_port_for_each_present_dev()
1010 dev_set_drvdata(dev, drive); ide_port_for_each_present_dev()
1025 ide_drive_t *drive; ide_port_init_devices() local
1028 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
1029 drive->dn = i + hwif->channel * 2; ide_port_for_each_dev()
1032 drive->io_32bit = 1; ide_port_for_each_dev()
1034 drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT; ide_port_for_each_dev()
1036 drive->dev_flags |= IDE_DFLAG_UNMASK; ide_port_for_each_dev()
1038 drive->dev_flags |= IDE_DFLAG_NO_UNMASK; ide_port_for_each_dev()
1040 drive->pio_mode = XFER_PIO_0; ide_port_for_each_dev()
1043 port_ops->init_dev(drive); ide_port_for_each_dev()
1128 ide_drive_t *drive; ide_port_init_devices_data() local
1131 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
1133 u16 *saved_id = drive->id; ide_port_for_each_dev()
1135 memset(drive, 0, sizeof(*drive)); ide_port_for_each_dev()
1137 drive->id = saved_id; ide_port_for_each_dev()
1139 drive->media = ide_disk; ide_port_for_each_dev()
1140 drive->select = (i << 4) | ATA_DEVICE_OBS; ide_port_for_each_dev()
1141 drive->hwif = hwif; ide_port_for_each_dev()
1142 drive->ready_stat = ATA_DRDY; ide_port_for_each_dev()
1143 drive->bad_wstat = BAD_W_STAT; ide_port_for_each_dev()
1144 drive->special_flags = IDE_SFLAG_RECALIBRATE | ide_port_for_each_dev()
1146 drive->name[0] = 'h'; ide_port_for_each_dev()
1147 drive->name[1] = 'd'; ide_port_for_each_dev()
1148 drive->name[2] = 'a' + j; ide_port_for_each_dev()
1149 drive->max_failures = IDE_DEFAULT_MAX_FAILURES; ide_port_for_each_dev()
1151 INIT_LIST_HEAD(&drive->list); ide_port_for_each_dev()
1152 init_completion(&drive->gendev_rel_comp); ide_port_for_each_dev()
1240 ide_drive_t *drive; ide_port_free_devices() local
1243 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
1244 kfree(drive->id); ide_port_for_each_dev()
1245 kfree(drive); ide_port_for_each_dev()
1254 ide_drive_t *drive; ide_port_alloc_devices() local
1256 drive = kzalloc_node(sizeof(*drive), GFP_KERNEL, node); ide_port_alloc_devices()
1257 if (drive == NULL) ide_port_alloc_devices()
1268 drive->id = kzalloc_node(SECTOR_SIZE, GFP_KERNEL, node); ide_port_alloc_devices()
1269 if (drive->id == NULL) ide_port_alloc_devices()
1272 hwif->devices[i] = drive; ide_port_alloc_devices()
1490 ide_drive_t *drive; __ide_port_unregister_devices() local
1493 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
1494 device_unregister(&drive->gendev); ide_port_for_each_present_dev()
1495 wait_for_completion(&drive->gendev_rel_comp); ide_port_for_each_present_dev()
H A Dide-xfer-mode.c50 * ide_get_best_pio_mode - get PIO mode from drive
51 * @drive: drive to consider
55 * This routine returns the recommended PIO settings for a given drive,
56 * based on the drive->id information and the ide_pio_blacklist[].
62 static u8 ide_get_best_pio_mode(ide_drive_t *drive, u8 mode_wanted, u8 max_mode) ide_get_best_pio_mode() argument
64 u16 *id = drive->id; ide_get_best_pio_mode()
70 if ((drive->hwif->host_flags & IDE_HFLAG_PIO_NO_BLACKLIST) == 0) ide_get_best_pio_mode()
74 printk(KERN_INFO "%s: is on PIO blacklist\n", drive->name); ide_get_best_pio_mode()
101 drive->name); ide_get_best_pio_mode()
110 int ide_pio_need_iordy(ide_drive_t *drive, const u8 pio) ide_pio_need_iordy() argument
116 if (pio == 0 && (drive->hwif->port_flags & IDE_PFLAG_PROBING)) ide_pio_need_iordy()
118 return ata_id_pio_need_iordy(drive->id, pio); ide_pio_need_iordy()
122 int ide_set_pio_mode(ide_drive_t *drive, const u8 mode) ide_set_pio_mode() argument
124 ide_hwif_t *hwif = drive->hwif; ide_set_pio_mode()
138 drive->pio_mode = mode; ide_set_pio_mode()
139 port_ops->set_pio_mode(hwif, drive); ide_set_pio_mode()
144 if (ide_config_drive_speed(drive, mode)) ide_set_pio_mode()
146 drive->pio_mode = mode; ide_set_pio_mode()
147 port_ops->set_pio_mode(hwif, drive); ide_set_pio_mode()
150 drive->pio_mode = mode; ide_set_pio_mode()
151 port_ops->set_pio_mode(hwif, drive); ide_set_pio_mode()
152 return ide_config_drive_speed(drive, mode); ide_set_pio_mode()
156 int ide_set_dma_mode(ide_drive_t *drive, const u8 mode) ide_set_dma_mode() argument
158 ide_hwif_t *hwif = drive->hwif; ide_set_dma_mode()
168 if (ide_config_drive_speed(drive, mode)) ide_set_dma_mode()
170 drive->dma_mode = mode; ide_set_dma_mode()
171 port_ops->set_dma_mode(hwif, drive); ide_set_dma_mode()
174 drive->dma_mode = mode; ide_set_dma_mode()
175 port_ops->set_dma_mode(hwif, drive); ide_set_dma_mode()
176 return ide_config_drive_speed(drive, mode); ide_set_dma_mode()
182 void ide_set_pio(ide_drive_t *drive, u8 req_pio) ide_set_pio() argument
184 ide_hwif_t *hwif = drive->hwif; ide_set_pio()
196 pio = ide_get_best_pio_mode(drive, req_pio, host_pio); ide_set_pio()
204 drive->name, host_pio, req_pio, ide_set_pio()
207 (void)ide_set_pio_mode(drive, XFER_PIO_0 + pio); ide_set_pio()
213 * @drive: IDE device
222 static u8 ide_rate_filter(ide_drive_t *drive, u8 speed) ide_rate_filter() argument
224 ide_hwif_t *hwif = drive->hwif; ide_rate_filter()
225 u8 mode = ide_find_dma_mode(drive, speed); ide_rate_filter()
241 * @drive: drive to set
249 int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) ide_set_xfer_rate() argument
251 ide_hwif_t *hwif = drive->hwif; ide_set_xfer_rate()
258 rate = ide_rate_filter(drive, rate); ide_set_xfer_rate()
263 return ide_set_pio_mode(drive, rate); ide_set_xfer_rate()
265 return ide_set_dma_mode(drive, rate); ide_set_xfer_rate()
H A Dide-sysfs.c4 char *ide_media_string(ide_drive_t *drive) ide_media_string() argument
6 switch (drive->media) { ide_media_string()
25 ide_drive_t *drive = to_ide_device(dev); media_show() local
26 return sprintf(buf, "%s\n", ide_media_string(drive)); media_show()
33 ide_drive_t *drive = to_ide_device(dev); drivename_show() local
34 return sprintf(buf, "%s\n", drive->name); drivename_show()
41 ide_drive_t *drive = to_ide_device(dev); modalias_show() local
42 return sprintf(buf, "ide:m-%s\n", ide_media_string(drive)); modalias_show()
49 ide_drive_t *drive = to_ide_device(dev); model_show() local
50 return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_PROD]); model_show()
57 ide_drive_t *drive = to_ide_device(dev); firmware_show() local
58 return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_FW_REV]); firmware_show()
65 ide_drive_t *drive = to_ide_device(dev); serial_show() local
66 return sprintf(buf, "%s\n", (char *)&drive->id[ATA_ID_SERNO]); serial_show()
H A Dide-lib.c11 * @drive: drive to update
18 void ide_toggle_bounce(ide_drive_t *drive, int on) ide_toggle_bounce() argument
24 } else if (on && drive->media == ide_disk) { ide_toggle_bounce()
25 struct device *dev = drive->hwif->dev; ide_toggle_bounce()
31 if (drive->queue) ide_toggle_bounce()
32 blk_queue_bounce_limit(drive->queue, addr); ide_toggle_bounce()
51 static void ide_dump_sector(ide_drive_t *drive) ide_dump_sector() argument
55 u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); ide_dump_sector()
65 ide_tf_readback(drive, &cmd); ide_dump_sector()
75 static void ide_dump_ata_error(ide_drive_t *drive, u8 err) ide_dump_ata_error() argument
94 struct request *rq = drive->hwif->rq; ide_dump_ata_error()
96 ide_dump_sector(drive); ide_dump_ata_error()
105 static void ide_dump_atapi_error(ide_drive_t *drive, u8 err) ide_dump_atapi_error() argument
124 * @drive: drive that status applies to
129 * Combines the drive name, message and status byte to provide a
133 u8 ide_dump_status(ide_drive_t *drive, const char *msg, u8 stat) ide_dump_status() argument
137 printk(KERN_ERR "%s: %s: status=0x%02x { ", drive->name, msg, stat); ide_dump_status()
158 err = ide_read_error(drive); ide_dump_status()
159 printk(KERN_ERR "%s: %s: error=0x%02x ", drive->name, msg, err); ide_dump_status()
160 if (drive->media == ide_disk) ide_dump_status()
161 ide_dump_ata_error(drive, err); ide_dump_status()
163 ide_dump_atapi_error(drive, err); ide_dump_status()
167 drive->name, drive->hwif->cmd.tf.command); ide_dump_status()
H A Dide-iops.c30 void SELECT_MASK(ide_drive_t *drive, int mask) SELECT_MASK() argument
32 const struct ide_port_ops *port_ops = drive->hwif->port_ops; SELECT_MASK()
35 port_ops->maskproc(drive, mask); SELECT_MASK()
38 u8 ide_read_error(ide_drive_t *drive) ide_read_error() argument
42 drive->hwif->tp_ops->tf_read(drive, &tf, IDE_VALID_ERROR); ide_read_error()
95 * This routine busy-waits for the drive status to be not "busy".
105 int __ide_wait_stat(ide_drive_t *drive, u8 good, u8 bad, __ide_wait_stat() argument
108 ide_hwif_t *hwif = drive->hwif; __ide_wait_stat()
114 udelay(1); /* spec allows drive 400ns to assert "BUSY" */ __ide_wait_stat()
164 int ide_wait_stat(ide_startstop_t *startstop, ide_drive_t *drive, u8 good, ide_wait_stat() argument
171 if (drive->max_failures && (drive->failures > drive->max_failures)) { ide_wait_stat()
176 err = __ide_wait_stat(drive, good, bad, timeout, &stat); ide_wait_stat()
180 *startstop = ide_error(drive, s, stat); ide_wait_stat()
188 * ide_in_drive_list - look for drive in black/white list
189 * @id: drive identifier
192 * Look for a drive in the blacklist and the whitelist tables
193 * Returns 1 if the drive is found in the table.
228 u8 eighty_ninty_three(ide_drive_t *drive) eighty_ninty_three() argument
230 ide_hwif_t *hwif = drive->hwif; eighty_ninty_three()
231 u16 *id = drive->id; eighty_ninty_three()
239 drive->name); eighty_ninty_three()
273 if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED) eighty_ninty_three()
278 drive->name, eighty_ninty_three()
279 hwif->cbl == ATA_CBL_PATA80 ? "drive" : "host"); eighty_ninty_three()
281 drive->dev_flags |= IDE_DFLAG_UDMA33_WARNED; eighty_ninty_three()
299 void ide_check_nien_quirk_list(ide_drive_t *drive) ide_check_nien_quirk_list() argument
301 const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; ide_check_nien_quirk_list()
305 drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; ide_check_nien_quirk_list()
310 int ide_driveid_update(ide_drive_t *drive) ide_driveid_update() argument
319 SELECT_MASK(drive, 1); ide_driveid_update()
320 rc = ide_dev_read_id(drive, ATA_CMD_ID_ATA, id, 1); ide_driveid_update()
321 SELECT_MASK(drive, 0); ide_driveid_update()
326 drive->id[ATA_ID_UDMA_MODES] = id[ATA_ID_UDMA_MODES]; ide_driveid_update()
327 drive->id[ATA_ID_MWDMA_MODES] = id[ATA_ID_MWDMA_MODES]; ide_driveid_update()
328 drive->id[ATA_ID_SWDMA_MODES] = id[ATA_ID_SWDMA_MODES]; ide_driveid_update()
329 drive->id[ATA_ID_CFA_MODES] = id[ATA_ID_CFA_MODES]; ide_driveid_update()
337 printk(KERN_ERR "%s: %s: bad status\n", drive->name, __func__); ide_driveid_update()
342 int ide_config_drive_speed(ide_drive_t *drive, u8 speed) ide_config_drive_speed() argument
344 ide_hwif_t *hwif = drive->hwif; ide_config_drive_speed()
347 u16 *id = drive->id, i; ide_config_drive_speed()
353 hwif->dma_ops->dma_host_set(drive, 0); ide_config_drive_speed()
357 if ((speed & 0xf8) == XFER_PIO_0 && ata_id_has_iordy(drive->id) == 0) ide_config_drive_speed()
368 tp_ops->dev_select(drive); ide_config_drive_speed()
369 SELECT_MASK(drive, 1); ide_config_drive_speed()
377 tp_ops->tf_load(drive, &tf, IDE_VALID_FEATURE | IDE_VALID_NSECT); ide_config_drive_speed()
381 if (drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) ide_config_drive_speed()
384 error = __ide_wait_stat(drive, drive->ready_stat, ide_config_drive_speed()
388 SELECT_MASK(drive, 0); ide_config_drive_speed()
391 (void) ide_dump_status(drive, "set_drive_speed_status", stat); ide_config_drive_speed()
406 if (speed >= XFER_SW_DMA_0 && (drive->dev_flags & IDE_DFLAG_USING_DMA)) ide_config_drive_speed()
407 hwif->dma_ops->dma_host_set(drive, 1); ide_config_drive_speed()
409 ide_dma_off_quietly(drive); ide_config_drive_speed()
429 if (!drive->init_speed) ide_config_drive_speed()
430 drive->init_speed = speed; ide_config_drive_speed()
431 drive->current_speed = speed; ide_config_drive_speed()
437 * wait for an interrupt response from a drive. handler() points
444 void __ide_set_handler(ide_drive_t *drive, ide_handler_t *handler, __ide_set_handler() argument
447 ide_hwif_t *hwif = drive->hwif; __ide_set_handler()
456 void ide_set_handler(ide_drive_t *drive, ide_handler_t *handler, ide_set_handler() argument
459 ide_hwif_t *hwif = drive->hwif; ide_set_handler()
463 __ide_set_handler(drive, handler, timeout); ide_set_handler()
470 * @drive: IDE drive to issue the command against
481 void ide_execute_command(ide_drive_t *drive, struct ide_cmd *cmd, ide_execute_command() argument
484 ide_hwif_t *hwif = drive->hwif; ide_execute_command()
490 (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT)) ide_execute_command()
491 __ide_set_handler(drive, handler, timeout); ide_execute_command()
H A Dide.c33 * | IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
66 * @drive: device to get a reference to
71 int ide_device_get(ide_drive_t *drive) ide_device_get() argument
76 if (!get_device(&drive->gendev)) ide_device_get()
79 host_dev = drive->hwif->host->dev[0]; ide_device_get()
83 put_device(&drive->gendev); ide_device_get()
93 * @drive: device to release a reference on
98 void ide_device_put(ide_drive_t *drive) ide_device_put() argument
101 struct device *host_dev = drive->hwif->host->dev[0]; ide_device_put()
106 put_device(&drive->gendev); ide_device_put()
117 ide_drive_t *drive = to_ide_device(dev); ide_uevent() local
119 add_uevent_var(env, "MEDIA=%s", ide_media_string(drive)); ide_uevent()
120 add_uevent_var(env, "DRIVENAME=%s", drive->name); ide_uevent()
121 add_uevent_var(env, "MODALIAS=ide:m-%s", ide_media_string(drive)); ide_uevent()
127 ide_drive_t *drive = to_ide_device(dev); generic_ide_probe() local
130 return drv->probe ? drv->probe(drive) : -ENODEV; generic_ide_probe()
135 ide_drive_t *drive = to_ide_device(dev); generic_ide_remove() local
139 drv->remove(drive); generic_ide_remove()
146 ide_drive_t *drive = to_ide_device(dev); generic_ide_shutdown() local
150 drv->shutdown(drive); generic_ide_shutdown()
280 static void ide_dev_apply_params(ide_drive_t *drive, u8 unit) ide_dev_apply_params() argument
282 int i = drive->hwif->index * MAX_DRIVES + unit; ide_dev_apply_params()
285 printk(KERN_INFO "ide: disallowing DMA for %s\n", drive->name); ide_dev_apply_params()
286 drive->dev_flags |= IDE_DFLAG_NODMA; ide_dev_apply_params()
290 drive->name); ide_dev_apply_params()
291 drive->dev_flags |= IDE_DFLAG_NOFLUSH; ide_dev_apply_params()
295 drive->name); ide_dev_apply_params()
296 drive->dev_flags |= IDE_DFLAG_NOHPA; ide_dev_apply_params()
299 printk(KERN_INFO "ide: skipping probe for %s\n", drive->name); ide_dev_apply_params()
300 drive->dev_flags |= IDE_DFLAG_NOPROBE; ide_dev_apply_params()
304 drive->name); ide_dev_apply_params()
305 drive->bad_wstat = BAD_R_STAT; ide_dev_apply_params()
308 printk(KERN_INFO "ide: forcing %s as a CD-ROM\n", drive->name); ide_dev_apply_params()
309 drive->dev_flags |= IDE_DFLAG_PRESENT; ide_dev_apply_params()
310 drive->media = ide_cdrom; ide_dev_apply_params()
312 drive->ready_stat = 0; ide_dev_apply_params()
315 drive->cyl = drive->bios_cyl = ide_disks_chs[i].cyl; ide_dev_apply_params()
316 drive->head = drive->bios_head = ide_disks_chs[i].head; ide_dev_apply_params()
317 drive->sect = drive->bios_sect = ide_disks_chs[i].sect; ide_dev_apply_params()
320 drive->name, ide_dev_apply_params()
321 drive->cyl, drive->head, drive->sect); ide_dev_apply_params()
323 drive->dev_flags |= IDE_DFLAG_FORCED_GEOM | IDE_DFLAG_PRESENT; ide_dev_apply_params()
324 drive->media = ide_disk; ide_dev_apply_params()
325 drive->ready_stat = ATA_DRDY; ide_dev_apply_params()
356 ide_drive_t *drive; ide_port_apply_params() local
365 ide_port_for_each_dev(i, drive, hwif) ide_port_apply_params()
366 ide_dev_apply_params(drive, i); ide_port_apply_params()
H A Dide-cd.c65 if (ide_device_get(cd->drive)) ide_cd_get()
77 ide_drive_t *drive = cd->drive; ide_cd_put() local
81 ide_device_put(drive); ide_cd_put()
90 static void cdrom_saw_media_change(ide_drive_t *drive) cdrom_saw_media_change() argument
92 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; cdrom_saw_media_change()
93 drive->atapi_flags &= ~IDE_AFLAG_TOC_VALID; cdrom_saw_media_change()
96 static int cdrom_log_sense(ide_drive_t *drive, struct request *rq) cdrom_log_sense() argument
98 struct request_sense *sense = &drive->sense_data; cdrom_log_sense()
122 * reliably check if drive can auto-close cdrom_log_sense()
134 cdrom_saw_media_change(drive); cdrom_log_sense()
143 static void cdrom_analyze_sense_data(ide_drive_t *drive, cdrom_analyze_sense_data() argument
146 struct request_sense *sense = &drive->sense_data; cdrom_analyze_sense_data()
147 struct cdrom_info *info = drive->driver_data; cdrom_analyze_sense_data()
158 if (!cdrom_log_sense(drive, failed_command)) cdrom_analyze_sense_data()
186 if (queue_logical_block_size(drive->queue) == 2048) cdrom_analyze_sense_data()
202 drive->probed_capacity - sector < 4 * 75) cdrom_analyze_sense_data()
207 ide_cd_log_error(drive->name, failed_command, sense); cdrom_analyze_sense_data()
210 static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq) ide_cd_complete_failed_rq() argument
224 * Sense is always read into drive->sense_data. ide_cd_complete_failed_rq()
231 cdrom_analyze_sense_data(drive, failed); ide_cd_complete_failed_rq()
233 if (ide_end_rq(drive, failed, -EIO, blk_rq_bytes(failed))) ide_cd_complete_failed_rq()
236 cdrom_analyze_sense_data(drive, NULL); ide_cd_complete_failed_rq()
241 * Allow the drive 5 seconds to recover; some devices will return NOT_READY
247 static int ide_cd_breathe(ide_drive_t *drive, struct request *rq) ide_cd_breathe() argument
250 struct cdrom_info *info = drive->driver_data; ide_cd_breathe()
263 blk_delay_queue(drive->queue, 1); ide_cd_breathe()
274 static int cdrom_decode_status(ide_drive_t *drive, u8 stat) cdrom_decode_status() argument
276 ide_hwif_t *hwif = drive->hwif; cdrom_decode_status()
281 err = ide_read_error(drive); cdrom_decode_status()
290 * We got an error trying to get sense info from the drive cdrom_decode_status()
308 if (ide_cd_breathe(drive, rq)) cdrom_decode_status()
311 cdrom_saw_media_change(drive); cdrom_decode_status()
316 drive->name); cdrom_decode_status()
321 cdrom_saw_media_change(drive); cdrom_decode_status()
337 * to close the tray if the drive doesn't have that capability. cdrom_decode_status()
350 ide_dump_status(drive, "command error", stat); cdrom_decode_status()
359 ide_dump_status(drive, "media error " cdrom_decode_status()
366 ide_dump_status(drive, "media error (blank)", cdrom_decode_status()
375 ide_error(drive, "cdrom_decode_status", stat); cdrom_decode_status()
396 return ide_queue_sense_rq(drive, NULL) ? 2 : 1; cdrom_decode_status()
402 return ide_queue_sense_rq(drive, rq) ? 2 : 1; cdrom_decode_status()
407 static void ide_cd_request_sense_fixup(ide_drive_t *drive, struct ide_cmd *cmd) ide_cd_request_sense_fixup() argument
422 int ide_cd_queue_pc(ide_drive_t *drive, const unsigned char *cmd, ide_cd_queue_pc() argument
427 struct cdrom_info *info = drive->driver_data; ide_cd_queue_pc()
444 rq = blk_get_request(drive->queue, write, __GFP_WAIT); ide_cd_queue_pc()
452 error = blk_rq_map_kern(drive->queue, rq, buffer, ide_cd_queue_pc()
460 error = blk_execute_rq(drive->queue, info->disk, rq, 0); ide_cd_queue_pc()
480 cdrom_saw_media_change(drive); ide_cd_queue_pc()
484 * The drive is in the process of loading ide_cd_queue_pc()
486 * the drive time to complete the load. ide_cd_queue_pc()
506 static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) ide_cd_error_cmd() argument
514 ide_complete_rq(drive, 0, nr_bytes); ide_cd_error_cmd()
521 static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive) cdrom_newpc_intr() argument
523 ide_hwif_t *hwif = drive->hwif; cdrom_newpc_intr()
537 dma = drive->dma; cdrom_newpc_intr()
539 drive->dma = 0; cdrom_newpc_intr()
540 drive->waiting_for_dma = 0; cdrom_newpc_intr()
541 dma_error = hwif->dma_ops->dma_end(drive); cdrom_newpc_intr()
542 ide_dma_unmap_sg(drive, cmd); cdrom_newpc_intr()
544 printk(KERN_ERR PFX "%s: DMA %s error\n", drive->name, cdrom_newpc_intr()
546 ide_dma_off(drive); cdrom_newpc_intr()
554 rc = cdrom_decode_status(drive, stat); cdrom_newpc_intr()
565 return ide_error(drive, "dma error", stat); cdrom_newpc_intr()
570 ide_read_bcount_and_ireason(drive, &len, &ireason); cdrom_newpc_intr()
589 "(%u bytes)\n", drive->name, __func__, cdrom_newpc_intr()
596 ide_cd_request_sense_fixup(drive, cmd); cdrom_newpc_intr()
601 * suck out the remaining bytes from the drive in an cdrom_newpc_intr()
605 ide_pio_bytes(drive, cmd, write, thislen); cdrom_newpc_intr()
615 rc = ide_check_ireason(drive, rq, len, ireason, write); cdrom_newpc_intr()
632 ide_pio_bytes(drive, cmd, write, blen); cdrom_newpc_intr()
645 ide_pad_transfer(drive, write, len); cdrom_newpc_intr()
648 drive->name); cdrom_newpc_intr()
662 ide_set_handler(drive, cdrom_newpc_intr, timeout); cdrom_newpc_intr()
672 ide_cd_complete_failed_rq(drive, rq); cdrom_newpc_intr()
683 if (ide_cd_error_cmd(drive, cmd)) cdrom_newpc_intr()
693 ide_complete_rq(drive, uptodate ? 0 : -EIO, blk_rq_bytes(rq)); cdrom_newpc_intr()
696 ide_error(drive, "request sense failure", stat); cdrom_newpc_intr()
701 static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq) cdrom_start_rw() argument
703 struct cdrom_info *cd = drive->driver_data; cdrom_start_rw()
704 struct request_queue *q = drive->queue; cdrom_start_rw()
731 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); cdrom_start_rw()
741 static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq) cdrom_do_block_pc() argument
752 drive->dma = 0; cdrom_do_block_pc()
756 struct request_queue *q = drive->queue; cdrom_do_block_pc()
760 drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); cdrom_do_block_pc()
772 drive->dma = 0; cdrom_do_block_pc()
776 static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq, ide_cd_do_request() argument
786 if (drive->debug_mask & IDE_DBG_RQ) ide_cd_do_request()
791 if (cdrom_start_rw(drive, rq) == ide_stopped) ide_cd_do_request()
800 cdrom_do_block_pc(drive, rq); ide_cd_do_request()
811 ide_prep_sense(drive, rq); ide_cd_do_request()
822 ide_map_sg(drive, &cmd); ide_cd_do_request()
825 return ide_issue_pc(drive, &cmd); ide_cd_do_request()
832 ide_complete_rq(drive, uptodate ? 0 : -EIO, nsectors << 9); ide_cd_do_request()
853 int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) cdrom_check_status() argument
855 struct cdrom_info *info = drive->driver_data; cdrom_check_status()
870 return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, sense, 0, REQ_QUIET); cdrom_check_status()
873 static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, cdrom_read_capacity() argument
892 stat = ide_cd_queue_pc(drive, cmd, 0, &capbuf, &len, sense, 0, cdrom_read_capacity()
913 drive->name, blocklen); cdrom_read_capacity()
927 static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag, cdrom_read_tocentry() argument
946 return ide_cd_queue_pc(drive, cmd, 0, buf, &buflen, sense, 0, REQ_QUIET); cdrom_read_tocentry()
950 int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) ide_cd_read_toc() argument
953 struct cdrom_info *info = drive->driver_data; ide_cd_read_toc()
970 drive->name); ide_cd_read_toc()
980 (void) cdrom_check_status(drive, sense); ide_cd_read_toc()
982 if (drive->atapi_flags & IDE_AFLAG_TOC_VALID) ide_cd_read_toc()
986 stat = cdrom_read_capacity(drive, &toc->capacity, &sectors_per_frame, ide_cd_read_toc()
993 drive->probed_capacity = toc->capacity * sectors_per_frame; ide_cd_read_toc()
995 blk_queue_logical_block_size(drive->queue, ide_cd_read_toc()
999 stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr, ide_cd_read_toc()
1004 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { ide_cd_read_toc()
1016 stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0, ide_cd_read_toc()
1036 stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0, ide_cd_read_toc()
1045 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { ide_cd_read_toc()
1059 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { ide_cd_read_toc()
1065 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { ide_cd_read_toc()
1066 if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) ide_cd_read_toc()
1077 stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp, ide_cd_read_toc()
1089 if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { ide_cd_read_toc()
1091 stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp, ide_cd_read_toc()
1109 drive->probed_capacity = toc->capacity * sectors_per_frame; ide_cd_read_toc()
1113 drive->atapi_flags |= IDE_AFLAG_TOC_VALID; ide_cd_read_toc()
1118 int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf) ide_cdrom_get_capabilities() argument
1120 struct cdrom_info *info = drive->driver_data; ide_cdrom_get_capabilities()
1127 if ((drive->atapi_flags & IDE_AFLAG_FULL_CAPS_PAGE) == 0) ide_cdrom_get_capabilities()
1140 void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf) ide_cdrom_update_speed() argument
1142 struct cdrom_info *cd = drive->driver_data; ide_cdrom_update_speed()
1147 if (drive->atapi_flags & IDE_AFLAG_LE_SPEED_FIELDS) { ide_cdrom_update_speed()
1185 static int ide_cdrom_register(ide_drive_t *drive, int nslots) ide_cdrom_register() argument
1187 struct cdrom_info *info = drive->driver_data; ide_cdrom_register()
1195 devinfo->handle = drive; ide_cdrom_register()
1196 strcpy(devinfo->name, drive->name); ide_cdrom_register()
1198 if (drive->atapi_flags & IDE_AFLAG_NO_SPEED_SELECT) ide_cdrom_register()
1205 static int ide_cdrom_probe_capabilities(ide_drive_t *drive) ide_cdrom_probe_capabilities() argument
1207 struct cdrom_info *cd = drive->driver_data; ide_cdrom_probe_capabilities()
1214 drive->media, drive->atapi_flags); ide_cdrom_probe_capabilities()
1220 if (drive->media == ide_optical) { ide_cdrom_probe_capabilities()
1222 printk(KERN_ERR PFX "%s: ATAPI magneto-optical drive\n", ide_cdrom_probe_capabilities()
1223 drive->name); ide_cdrom_probe_capabilities()
1227 if (drive->atapi_flags & IDE_AFLAG_PRE_ATAPI12) { ide_cdrom_probe_capabilities()
1228 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; ide_cdrom_probe_capabilities()
1235 * with ide_cdrom_packet(), which extracts the drive from cdi->handle. ide_cdrom_probe_capabilities()
1239 cdi->handle = drive; ide_cdrom_probe_capabilities()
1242 if (ide_cdrom_get_capabilities(drive, buf)) ide_cdrom_probe_capabilities()
1246 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; ide_cdrom_probe_capabilities()
1248 drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; ide_cdrom_probe_capabilities()
1259 if ((buf[8 + 4] & 0x01) || (drive->atapi_flags & IDE_AFLAG_PLAY_AUDIO_OK)) ide_cdrom_probe_capabilities()
1265 (drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE)) ide_cdrom_probe_capabilities()
1278 ide_cdrom_update_speed(drive, buf); ide_cdrom_probe_capabilities()
1280 printk(KERN_INFO PFX "%s: ATAPI", drive->name); ide_cdrom_probe_capabilities()
1282 /* don't print speed if the drive reported 0 */ ide_cdrom_probe_capabilities()
1301 printk(KERN_CONT " drive"); ide_cdrom_probe_capabilities()
1391 static sector_t ide_cdrom_capacity(ide_drive_t *drive) ide_cdrom_capacity() argument
1395 if (cdrom_read_capacity(drive, &capacity, &sectors_per_frame, NULL)) ide_cdrom_capacity()
1403 ide_drive_t *drive = m->private; idecd_capacity_proc_show() local
1405 seq_printf(m, "%llu\n", (long long)ide_cdrom_capacity(drive)); idecd_capacity_proc_show()
1427 static ide_proc_entry_t *ide_cd_proc_entries(ide_drive_t *drive) ide_cd_proc_entries() argument
1432 static const struct ide_proc_devset *ide_cd_proc_devsets(ide_drive_t *drive) ide_cd_proc_devsets() argument
1444 /* Vertos 300, some versions of this drive like to talk BCD. */
1495 static int ide_cdrom_setup(ide_drive_t *drive) ide_cdrom_setup() argument
1497 struct cdrom_info *cd = drive->driver_data; ide_cdrom_setup()
1499 struct request_queue *q = drive->queue; ide_cdrom_setup()
1500 u16 *id = drive->id; ide_cdrom_setup()
1510 drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; ide_cdrom_setup()
1511 drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); ide_cdrom_setup()
1513 if ((drive->atapi_flags & IDE_AFLAG_VERTOS_300_SSD) && ide_cdrom_setup()
1515 drive->atapi_flags |= (IDE_AFLAG_TOCTRACKS_AS_BCD | ide_cdrom_setup()
1517 else if ((drive->atapi_flags & IDE_AFLAG_VERTOS_600_ESD) && ide_cdrom_setup()
1519 drive->atapi_flags |= IDE_AFLAG_TOCTRACKS_AS_BCD; ide_cdrom_setup()
1520 else if (drive->atapi_flags & IDE_AFLAG_SANYO_3CD) ide_cdrom_setup()
1524 nslots = ide_cdrom_probe_capabilities(drive); ide_cdrom_setup()
1528 if (ide_cdrom_register(drive, nslots)) { ide_cdrom_setup()
1530 " cdrom driver.\n", drive->name, __func__); ide_cdrom_setup()
1535 ide_proc_register_driver(drive, cd->driver); ide_cdrom_setup()
1539 static void ide_cd_remove(ide_drive_t *drive) ide_cd_remove() argument
1541 struct cdrom_info *info = drive->driver_data; ide_cd_remove()
1545 ide_proc_unregister_driver(drive, info->driver); ide_cd_remove()
1558 ide_drive_t *drive = info->drive; ide_cd_release() local
1564 if (devinfo->handle == drive) ide_cd_release()
1566 drive->driver_data = NULL; ide_cd_release()
1567 blk_queue_prep_rq(drive->queue, NULL); ide_cd_release()
1674 err = generic_ide_ioctl(info->drive, bdev, cmd, arg); idecd_locked_ioctl()
1706 ide_cd_read_toc(info->drive, &sense); idecd_revalidate_disk()
1726 static int ide_cd_probe(ide_drive_t *drive) ide_cd_probe() argument
1733 drive->driver_req, drive->media); ide_cd_probe()
1735 if (!strstr("ide-cdrom", drive->driver_req)) ide_cd_probe()
1738 if (drive->media != ide_cdrom && drive->media != ide_optical) ide_cd_probe()
1741 drive->debug_mask = debug_mask; ide_cd_probe()
1742 drive->irq_handler = cdrom_newpc_intr; ide_cd_probe()
1747 drive->name); ide_cd_probe()
1755 ide_init_disk(g, drive); ide_cd_probe()
1757 info->dev.parent = &drive->gendev; ide_cd_probe()
1759 dev_set_name(&info->dev, "%s", dev_name(&drive->gendev)); ide_cd_probe()
1764 info->drive = drive; ide_cd_probe()
1770 drive->driver_data = info; ide_cd_probe()
1773 g->driverfs_dev = &drive->gendev; ide_cd_probe()
1775 if (ide_cdrom_setup(drive)) { ide_cd_probe()
1780 ide_cd_read_toc(drive, &sense); ide_cd_probe()
H A Dide-tape.c141 ide_drive_t *drive; member in struct:ide_tape_obj
244 if (ide_device_get(tape->drive)) ide_tape_get()
256 ide_drive_t *drive = tape->drive; ide_tape_put() local
260 ide_device_put(drive); ide_tape_put()
268 static void idetape_analyze_error(ide_drive_t *drive) idetape_analyze_error() argument
270 idetape_tape_t *tape = drive->driver_data; idetape_analyze_error()
271 struct ide_atapi_pc *pc = drive->failed_pc; idetape_analyze_error()
272 struct request *rq = drive->hwif->rq; idetape_analyze_error()
326 static int ide_tape_callback(ide_drive_t *drive, int dsc) ide_tape_callback() argument
328 idetape_tape_t *tape = drive->driver_data; ide_tape_callback()
329 struct ide_atapi_pc *pc = drive->pc; ide_tape_callback()
330 struct request *rq = drive->hwif->rq; ide_tape_callback()
338 ide_tape_handle_dsc(drive); ide_tape_callback()
340 if (drive->failed_pc == pc) ide_tape_callback()
341 drive->failed_pc = NULL; ide_tape_callback()
345 idetape_analyze_error(drive); ide_tape_callback()
378 static void ide_tape_stall_queue(ide_drive_t *drive) ide_tape_stall_queue() argument
380 idetape_tape_t *tape = drive->driver_data; ide_tape_stall_queue()
383 drive->hwif->rq->cmd[0], tape->dsc_poll_freq); ide_tape_stall_queue()
387 ide_stall_queue(drive, tape->dsc_poll_freq); ide_tape_stall_queue()
390 static void ide_tape_handle_dsc(ide_drive_t *drive) ide_tape_handle_dsc() argument
392 idetape_tape_t *tape = drive->driver_data; ide_tape_handle_dsc()
399 ide_tape_stall_queue(drive); ide_tape_handle_dsc()
405 * The current Packet Command is available in drive->pc, and will not change
411 * 1. ide_tape_issue_pc will send the packet command to the drive, and will set
420 * Since the tape drive will not issue an interrupt, we have to poll for this
439 static ide_startstop_t ide_tape_issue_pc(ide_drive_t *drive, ide_tape_issue_pc() argument
443 idetape_tape_t *tape = drive->driver_data; ide_tape_issue_pc()
444 struct request *rq = drive->hwif->rq; ide_tape_issue_pc()
446 if (drive->failed_pc == NULL && pc->c[0] != REQUEST_SENSE) ide_tape_issue_pc()
447 drive->failed_pc = pc; ide_tape_issue_pc()
450 drive->pc = pc; ide_tape_issue_pc()
475 drive->failed_pc = NULL; ide_tape_issue_pc()
476 drive->pc_callback(drive, 0); ide_tape_issue_pc()
477 ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); ide_tape_issue_pc()
485 return ide_issue_pc(drive, cmd); ide_tape_issue_pc()
515 static ide_startstop_t idetape_media_access_finished(ide_drive_t *drive) idetape_media_access_finished() argument
517 ide_hwif_t *hwif = drive->hwif; idetape_media_access_finished()
518 idetape_tape_t *tape = drive->driver_data; idetape_media_access_finished()
519 struct ide_atapi_pc *pc = drive->pc; idetape_media_access_finished()
531 ide_retry_pc(drive); idetape_media_access_finished()
537 drive->failed_pc = NULL; idetape_media_access_finished()
539 drive->pc_callback(drive, 0); idetape_media_access_finished()
566 static ide_startstop_t idetape_do_request(ide_drive_t *drive, idetape_do_request() argument
569 ide_hwif_t *hwif = drive->hwif; idetape_do_request()
570 idetape_tape_t *tape = drive->driver_data; idetape_do_request()
583 if (drive->failed_pc && drive->pc->c[0] == REQUEST_SENSE) { idetape_do_request()
584 pc = drive->failed_pc; idetape_do_request()
594 if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 && idetape_do_request()
596 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC; idetape_do_request()
598 if (drive->dev_flags & IDE_DFLAG_POST_RESET) { idetape_do_request()
599 drive->atapi_flags |= IDE_AFLAG_IGNORE_DSC; idetape_do_request()
600 drive->dev_flags &= ~IDE_DFLAG_POST_RESET; idetape_do_request()
603 if (!(drive->atapi_flags & IDE_AFLAG_IGNORE_DSC) && idetape_do_request()
613 idetape_media_access_finished(drive); idetape_do_request()
616 return ide_do_reset(drive); idetape_do_request()
622 ide_tape_stall_queue(drive); idetape_do_request()
625 drive->atapi_flags &= ~IDE_AFLAG_IGNORE_DSC; idetape_do_request()
646 idetape_media_access_finished(drive); idetape_do_request()
653 ide_prep_sense(drive, rq); idetape_do_request()
663 ide_map_sg(drive, &cmd); idetape_do_request()
665 return ide_tape_issue_pc(drive, &cmd, pc); idetape_do_request()
672 static void idetape_create_write_filemark_cmd(ide_drive_t *drive, idetape_create_write_filemark_cmd() argument
681 static int idetape_wait_ready(ide_drive_t *drive, unsigned long timeout) idetape_wait_ready() argument
683 idetape_tape_t *tape = drive->driver_data; idetape_wait_ready()
688 set_bit(ilog2(IDE_AFLAG_MEDIUM_PRESENT), &drive->atapi_flags); idetape_wait_ready()
691 if (ide_do_test_unit_ready(drive, disk) == 0) idetape_wait_ready()
698 ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK); idetape_wait_ready()
709 static int idetape_flush_tape_buffers(ide_drive_t *drive) idetape_flush_tape_buffers() argument
711 struct ide_tape_obj *tape = drive->driver_data; idetape_flush_tape_buffers()
715 idetape_create_write_filemark_cmd(drive, &pc, 0); idetape_flush_tape_buffers()
716 rc = ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0); idetape_flush_tape_buffers()
719 idetape_wait_ready(drive, 60 * 5 * HZ); idetape_flush_tape_buffers()
723 static int ide_tape_read_position(ide_drive_t *drive) ide_tape_read_position() argument
725 idetape_tape_t *tape = drive->driver_data; ide_tape_read_position()
736 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) ide_tape_read_position()
749 &drive->atapi_flags); ide_tape_read_position()
758 &drive->atapi_flags); ide_tape_read_position()
765 static void idetape_create_locate_cmd(ide_drive_t *drive, idetape_create_locate_cmd() argument
777 static void __ide_tape_discard_merge_buffer(ide_drive_t *drive) __ide_tape_discard_merge_buffer() argument
779 idetape_tape_t *tape = drive->driver_data; __ide_tape_discard_merge_buffer()
784 clear_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags); __ide_tape_discard_merge_buffer()
800 static int idetape_position_tape(ide_drive_t *drive, unsigned int block, idetape_position_tape() argument
803 idetape_tape_t *tape = drive->driver_data; idetape_position_tape()
809 __ide_tape_discard_merge_buffer(drive); idetape_position_tape()
810 idetape_wait_ready(drive, 60 * 5 * HZ); idetape_position_tape()
811 idetape_create_locate_cmd(drive, &pc, block, partition, skip); idetape_position_tape()
812 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0); idetape_position_tape()
816 ret = ide_tape_read_position(drive); idetape_position_tape()
822 static void ide_tape_discard_merge_buffer(ide_drive_t *drive, ide_tape_discard_merge_buffer() argument
825 idetape_tape_t *tape = drive->driver_data; ide_tape_discard_merge_buffer()
828 __ide_tape_discard_merge_buffer(drive); ide_tape_discard_merge_buffer()
830 position = ide_tape_read_position(drive); ide_tape_discard_merge_buffer()
832 if (idetape_position_tape(drive, seek, 0, 0)) { ide_tape_discard_merge_buffer()
844 static int idetape_queue_rw_tail(ide_drive_t *drive, int cmd, int size) idetape_queue_rw_tail() argument
846 idetape_tape_t *tape = drive->driver_data; idetape_queue_rw_tail()
855 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); idetape_queue_rw_tail()
862 ret = blk_rq_map_kern(drive->queue, rq, tape->buf, size, idetape_queue_rw_tail()
868 blk_execute_rq(drive->queue, tape->disk, rq, 0); idetape_queue_rw_tail()
894 static void idetape_create_rewind_cmd(ide_drive_t *drive, idetape_create_rewind_cmd() argument
919 static void ide_tape_flush_merge_buffer(ide_drive_t *drive) ide_tape_flush_merge_buffer() argument
921 idetape_tape_t *tape = drive->driver_data; ide_tape_flush_merge_buffer()
932 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, aligned); ide_tape_flush_merge_buffer()
939 static int idetape_init_rw(ide_drive_t *drive, int dir) idetape_init_rw() argument
941 idetape_tape_t *tape = drive->driver_data; idetape_init_rw()
950 ide_tape_discard_merge_buffer(drive, 1); idetape_init_rw()
952 ide_tape_flush_merge_buffer(drive); idetape_init_rw()
953 idetape_flush_tape_buffers(drive); idetape_init_rw()
973 if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) { idetape_init_rw()
977 rc = idetape_queue_rw_tail(drive, cmd, 0); idetape_init_rw()
989 static void idetape_pad_zeros(ide_drive_t *drive, int bcount) idetape_pad_zeros() argument
991 idetape_tape_t *tape = drive->driver_data; idetape_pad_zeros()
998 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, count); idetape_pad_zeros()
1007 static int idetape_rewind_tape(ide_drive_t *drive) idetape_rewind_tape() argument
1009 struct ide_tape_obj *tape = drive->driver_data; idetape_rewind_tape()
1016 idetape_create_rewind_cmd(drive, &pc); idetape_rewind_tape()
1017 ret = ide_queue_pc_tail(drive, disk, &pc, NULL, 0); idetape_rewind_tape()
1021 ret = ide_tape_read_position(drive); idetape_rewind_tape()
1028 static int idetape_blkdev_ioctl(ide_drive_t *drive, unsigned int cmd, idetape_blkdev_ioctl() argument
1031 idetape_tape_t *tape = drive->driver_data; idetape_blkdev_ioctl()
1061 static int idetape_space_over_filemarks(ide_drive_t *drive, short mt_op, idetape_space_over_filemarks() argument
1064 idetape_tape_t *tape = drive->driver_data; idetape_space_over_filemarks()
1084 &drive->atapi_flags)) idetape_space_over_filemarks()
1086 ide_tape_discard_merge_buffer(drive, 0); idetape_space_over_filemarks()
1094 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); idetape_space_over_filemarks()
1099 retval = idetape_space_over_filemarks(drive, MTFSF, idetape_space_over_filemarks()
1104 return idetape_space_over_filemarks(drive, MTFSF, count); idetape_space_over_filemarks()
1131 ide_drive_t *drive = tape->drive; idetape_chrdev_read() local
1139 if (test_bit(ilog2(IDE_AFLAG_DETECT_BS), &drive->atapi_flags)) idetape_chrdev_read()
1145 rc = idetape_init_rw(drive, IDETAPE_DIR_READ); idetape_chrdev_read()
1156 &drive->atapi_flags)) idetape_chrdev_read()
1159 if (idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, idetape_chrdev_read()
1174 if (!done && test_bit(ilog2(IDE_AFLAG_FILEMARK), &drive->atapi_flags)) { idetape_chrdev_read()
1175 idetape_space_over_filemarks(drive, MTFSF, 1); idetape_chrdev_read()
1186 ide_drive_t *drive = tape->drive; idetape_chrdev_write() local
1191 /* The drive is write protected. */ idetape_chrdev_write()
1198 rc = idetape_init_rw(drive, IDETAPE_DIR_WRITE); idetape_chrdev_write()
1207 idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, idetape_chrdev_write()
1225 static int idetape_write_filemark(ide_drive_t *drive) idetape_write_filemark() argument
1227 struct ide_tape_obj *tape = drive->driver_data; idetape_write_filemark()
1231 idetape_create_write_filemark_cmd(drive, &pc, 1); idetape_write_filemark()
1232 if (ide_queue_pc_tail(drive, tape->disk, &pc, NULL, 0)) { idetape_write_filemark()
1252 static int idetape_mtioctop(ide_drive_t *drive, short mt_op, int mt_count) idetape_mtioctop() argument
1254 idetape_tape_t *tape = drive->driver_data; idetape_mtioctop()
1269 return idetape_space_over_filemarks(drive, mt_op, mt_count); idetape_mtioctop()
1278 ide_tape_discard_merge_buffer(drive, 1); idetape_mtioctop()
1280 retval = idetape_write_filemark(drive); idetape_mtioctop()
1286 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1287 if (idetape_rewind_tape(drive)) idetape_mtioctop()
1291 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1292 return ide_do_start_stop(drive, disk, IDETAPE_LU_LOAD_MASK); idetape_mtioctop()
1300 if (!ide_set_media_lock(drive, disk, 0)) idetape_mtioctop()
1303 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1304 retval = ide_do_start_stop(drive, disk, !IDETAPE_LU_LOAD_MASK); idetape_mtioctop()
1307 &drive->atapi_flags); idetape_mtioctop()
1310 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1311 return idetape_flush_tape_buffers(drive); idetape_mtioctop()
1313 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1314 return ide_do_start_stop(drive, disk, idetape_mtioctop()
1318 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); idetape_mtioctop()
1320 (void)idetape_rewind_tape(drive); idetape_mtioctop()
1322 return ide_queue_pc_tail(drive, disk, &pc, NULL, 0); idetape_mtioctop()
1330 &drive->atapi_flags); idetape_mtioctop()
1333 &drive->atapi_flags); idetape_mtioctop()
1336 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1337 return idetape_position_tape(drive, idetape_mtioctop()
1340 ide_tape_discard_merge_buffer(drive, 0); idetape_mtioctop()
1341 return idetape_position_tape(drive, 0, mt_count, 0); idetape_mtioctop()
1345 retval = ide_set_media_lock(drive, disk, 1); idetape_mtioctop()
1351 retval = ide_set_media_lock(drive, disk, 0); idetape_mtioctop()
1372 ide_drive_t *drive = tape->drive; do_idetape_chrdev_ioctl() local
1382 ide_tape_flush_merge_buffer(drive); do_idetape_chrdev_ioctl()
1383 idetape_flush_tape_buffers(drive); do_idetape_chrdev_ioctl()
1388 position = ide_tape_read_position(drive); do_idetape_chrdev_ioctl()
1396 return idetape_mtioctop(drive, mtop.mt_op, mtop.mt_count); do_idetape_chrdev_ioctl()
1418 ide_tape_discard_merge_buffer(drive, 1); do_idetape_chrdev_ioctl()
1419 return idetape_blkdev_ioctl(drive, cmd, arg); do_idetape_chrdev_ioctl()
1437 static void ide_tape_get_bsize_from_bdesc(ide_drive_t *drive) ide_tape_get_bsize_from_bdesc() argument
1439 idetape_tape_t *tape = drive->driver_data; ide_tape_get_bsize_from_bdesc()
1444 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) { ide_tape_get_bsize_from_bdesc()
1465 ide_drive_t *drive; idetape_chrdev_open() local
1480 drive = tape->drive; idetape_chrdev_open()
1493 if (test_and_set_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags)) { idetape_chrdev_open()
1498 retval = idetape_wait_ready(drive, 60 * HZ); idetape_chrdev_open()
1500 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags); idetape_chrdev_open()
1501 printk(KERN_ERR "ide-tape: %s: drive not ready\n", tape->name); idetape_chrdev_open()
1505 ide_tape_read_position(drive); idetape_chrdev_open()
1506 if (!test_bit(ilog2(IDE_AFLAG_ADDRESS_VALID), &drive->atapi_flags)) idetape_chrdev_open()
1507 (void)idetape_rewind_tape(drive); idetape_chrdev_open()
1509 /* Read block size and write protect status from drive. */ idetape_chrdev_open()
1510 ide_tape_get_bsize_from_bdesc(drive); idetape_chrdev_open()
1518 /* Make sure drive isn't write protected if user wants to write. */ idetape_chrdev_open()
1522 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags); idetape_chrdev_open()
1528 /* Lock the tape drive door so user can't eject. */ idetape_chrdev_open()
1530 if (!ide_set_media_lock(drive, tape->disk, 1)) { idetape_chrdev_open()
1547 static void idetape_write_release(ide_drive_t *drive, unsigned int minor) idetape_write_release() argument
1549 idetape_tape_t *tape = drive->driver_data; idetape_write_release()
1551 ide_tape_flush_merge_buffer(drive); idetape_write_release()
1554 idetape_pad_zeros(drive, tape->blk_size * idetape_write_release()
1559 idetape_write_filemark(drive); idetape_write_release()
1560 idetape_flush_tape_buffers(drive); idetape_write_release()
1561 idetape_flush_tape_buffers(drive); idetape_write_release()
1567 ide_drive_t *drive = tape->drive; idetape_chrdev_release() local
1572 tape = drive->driver_data; idetape_chrdev_release()
1577 idetape_write_release(drive, minor); idetape_chrdev_release()
1580 ide_tape_discard_merge_buffer(drive, 1); idetape_chrdev_release()
1584 &drive->atapi_flags)) idetape_chrdev_release()
1585 (void) idetape_rewind_tape(drive); idetape_chrdev_release()
1589 if (!ide_set_media_lock(drive, tape->disk, 0)) idetape_chrdev_release()
1593 clear_bit(ilog2(IDE_AFLAG_BUSY), &drive->atapi_flags); idetape_chrdev_release()
1601 static void idetape_get_inquiry_results(ide_drive_t *drive) idetape_get_inquiry_results() argument
1603 idetape_tape_t *tape = drive->driver_data; idetape_get_inquiry_results()
1609 if (ide_queue_pc_tail(drive, tape->disk, &pc, pc_buf, pc.req_xfer)) { idetape_get_inquiry_results()
1623 drive->name, tape->name, vendor_id, product_id, fw_rev); idetape_get_inquiry_results()
1630 static void idetape_get_mode_sense_results(ide_drive_t *drive) idetape_get_mode_sense_results() argument
1632 idetape_tape_t *tape = drive->driver_data; idetape_get_mode_sense_results()
1638 if (ide_queue_pc_tail(drive, tape->disk, &pc, buf, pc.req_xfer)) { idetape_get_mode_sense_results()
1660 "(assuming 650KB/sec)\n", drive->name); idetape_get_mode_sense_results()
1665 "(assuming 650KB/sec)\n", drive->name); idetape_get_mode_sense_results()
1673 drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING; idetape_get_mode_sense_results()
1683 static int get_##name(ide_drive_t *drive) \
1685 idetape_tape_t *tape = drive->driver_data; \
1690 static int set_##name(ide_drive_t *drive, int arg) \
1692 idetape_tape_t *tape = drive->driver_data; \
1706 static int mulf_tdsc(ide_drive_t *drive) { return 1000; } divf_tdsc() argument
1707 static int divf_tdsc(ide_drive_t *drive) { return HZ; } divf_buffer() argument
1708 static int divf_buffer(ide_drive_t *drive) { return 2; } divf_buffer_size() argument
1709 static int divf_buffer_size(ide_drive_t *drive) { return 1024; } divf_buffer_size() argument
1743 static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor) idetape_setup() argument
1752 drive->pc_callback = ide_tape_callback; idetape_setup()
1754 drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP; idetape_setup()
1756 if (drive->hwif->host_flags & IDE_HFLAG_NO_DSC) { idetape_setup()
1759 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP; idetape_setup()
1763 if (strstr((char *)&drive->id[ATA_ID_PROD], "Seagate STT3401")) idetape_setup()
1764 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP; idetape_setup()
1772 idetape_get_inquiry_results(drive); idetape_setup()
1773 idetape_get_mode_sense_results(drive); idetape_setup()
1774 ide_tape_get_bsize_from_bdesc(drive); idetape_setup()
1797 drive->name, tape->name, *(u16 *)&tape->caps[14], idetape_setup()
1801 (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : ""); idetape_setup()
1803 ide_proc_register_driver(drive, tape->driver); idetape_setup()
1806 static void ide_tape_remove(ide_drive_t *drive) ide_tape_remove() argument
1808 idetape_tape_t *tape = drive->driver_data; ide_tape_remove()
1810 ide_proc_unregister_driver(drive, tape->driver); ide_tape_remove()
1822 ide_drive_t *drive = tape->drive; ide_tape_release() local
1827 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP; ide_tape_release()
1828 drive->driver_data = NULL; ide_tape_release()
1841 ide_drive_t *drive = (ide_drive_t *) m->private; idetape_name_proc_show() local
1842 idetape_tape_t *tape = drive->driver_data; idetape_name_proc_show()
1867 static ide_proc_entry_t *ide_tape_proc_entries(ide_drive_t *drive) ide_tape_proc_entries() argument
1872 static const struct ide_proc_devset *ide_tape_proc_devsets(ide_drive_t *drive) ide_tape_proc_devsets() argument
1934 ide_drive_t *drive = tape->drive; idetape_ioctl() local
1938 err = generic_ide_ioctl(drive, bdev, cmd, arg); idetape_ioctl()
1940 err = idetape_blkdev_ioctl(drive, cmd, arg); idetape_ioctl()
1953 static int ide_tape_probe(ide_drive_t *drive) ide_tape_probe() argument
1961 if (!strstr(DRV_NAME, drive->driver_req)) ide_tape_probe()
1964 if (drive->media != ide_tape) ide_tape_probe()
1967 if ((drive->dev_flags & IDE_DFLAG_ID_READ) && ide_tape_probe()
1968 ide_check_atapi_device(drive, DRV_NAME) == 0) { ide_tape_probe()
1970 " the driver\n", drive->name); ide_tape_probe()
1976 drive->name); ide_tape_probe()
1984 ide_init_disk(g, drive); ide_tape_probe()
1986 tape->dev.parent = &drive->gendev; ide_tape_probe()
1988 dev_set_name(&tape->dev, "%s", dev_name(&drive->gendev)); ide_tape_probe()
1993 tape->drive = drive; ide_tape_probe()
1999 drive->driver_data = tape; ide_tape_probe()
2007 idetape_setup(drive, tape, minor); ide_tape_probe()
2009 device_create(idetape_sysfs_class, &drive->gendev, ide_tape_probe()
2011 device_create(idetape_sysfs_class, &drive->gendev, ide_tape_probe()
H A Dide-io.c57 int ide_end_rq(ide_drive_t *drive, struct request *rq, int error, ide_end_rq() argument
64 if ((drive->dev_flags & IDE_DFLAG_DMA_PIO_RETRY) && ide_end_rq()
65 drive->retry_pio <= 3) { ide_end_rq()
66 drive->dev_flags &= ~IDE_DFLAG_DMA_PIO_RETRY; ide_end_rq()
67 ide_dma_on(drive); ide_end_rq()
74 void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err) ide_complete_cmd() argument
76 const struct ide_tp_ops *tp_ops = drive->hwif->tp_ops; ide_complete_cmd()
87 tp_ops->input_data(drive, cmd, data, 2); ide_complete_cmd()
93 ide_tf_readback(drive, cmd); ide_complete_cmd()
99 drive->name); ide_complete_cmd()
100 ide_tf_dump(drive->name, cmd); ide_complete_cmd()
102 drive->dev_flags |= IDE_DFLAG_PARKED; ide_complete_cmd()
115 int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes) ide_complete_rq() argument
117 ide_hwif_t *hwif = drive->hwif; ide_complete_rq()
128 rc = ide_end_rq(drive, rq, error, nr_bytes); ide_complete_rq()
136 void ide_kill_rq(ide_drive_t *drive, struct request *rq) ide_kill_rq() argument
139 u8 media = drive->media; ide_kill_rq()
141 drive->failed_pc = NULL; ide_kill_rq()
152 ide_complete_rq(drive, -EIO, blk_rq_bytes(rq)); ide_kill_rq()
155 static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf) ide_tf_set_specify_cmd() argument
157 tf->nsect = drive->sect; ide_tf_set_specify_cmd()
158 tf->lbal = drive->sect; ide_tf_set_specify_cmd()
159 tf->lbam = drive->cyl; ide_tf_set_specify_cmd()
160 tf->lbah = drive->cyl >> 8; ide_tf_set_specify_cmd()
161 tf->device = (drive->head - 1) | drive->select; ide_tf_set_specify_cmd()
165 static void ide_tf_set_restore_cmd(ide_drive_t *drive, struct ide_taskfile *tf) ide_tf_set_restore_cmd() argument
167 tf->nsect = drive->sect; ide_tf_set_restore_cmd()
171 static void ide_tf_set_setmult_cmd(ide_drive_t *drive, struct ide_taskfile *tf) ide_tf_set_setmult_cmd() argument
173 tf->nsect = drive->mult_req; ide_tf_set_setmult_cmd()
179 * @drive: drive the command is for
182 * ATA_CMD_RESTORE and ATA_CMD_SET_MULTI commands to a drive.
185 static ide_startstop_t do_special(ide_drive_t *drive) do_special() argument
190 printk(KERN_DEBUG "%s: %s: 0x%02x\n", drive->name, __func__, do_special()
191 drive->special_flags); do_special()
193 if (drive->media != ide_disk) { do_special()
194 drive->special_flags = 0; do_special()
195 drive->mult_req = 0; do_special()
202 if (drive->special_flags & IDE_SFLAG_SET_GEOMETRY) { do_special()
203 drive->special_flags &= ~IDE_SFLAG_SET_GEOMETRY; do_special()
204 ide_tf_set_specify_cmd(drive, &cmd.tf); do_special()
205 } else if (drive->special_flags & IDE_SFLAG_RECALIBRATE) { do_special()
206 drive->special_flags &= ~IDE_SFLAG_RECALIBRATE; do_special()
207 ide_tf_set_restore_cmd(drive, &cmd.tf); do_special()
208 } else if (drive->special_flags & IDE_SFLAG_SET_MULTMODE) { do_special()
209 drive->special_flags &= ~IDE_SFLAG_SET_MULTMODE; do_special()
210 ide_tf_set_setmult_cmd(drive, &cmd.tf); do_special()
218 do_rw_taskfile(drive, &cmd); do_special()
223 void ide_map_sg(ide_drive_t *drive, struct ide_cmd *cmd) ide_map_sg() argument
225 ide_hwif_t *hwif = drive->hwif; ide_map_sg()
229 cmd->sg_nents = blk_rq_map_sg(drive->queue, rq, sg); ide_map_sg()
242 * execute_drive_command - issue special drive command
243 * @drive: the drive to issue the command on
246 * execute_drive_cmd() issues a special drive command, usually
248 * command can be a drive command, drive task or taskfile
253 static ide_startstop_t execute_drive_cmd (ide_drive_t *drive, execute_drive_cmd() argument
261 ide_map_sg(drive, cmd); execute_drive_cmd()
264 return do_rw_taskfile(drive, cmd); execute_drive_cmd()
272 printk("%s: DRIVE_CMD (null)\n", drive->name); execute_drive_cmd()
275 ide_complete_rq(drive, 0, blk_rq_bytes(rq)); execute_drive_cmd()
280 static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq) ide_special_rq() argument
287 return ide_do_park_unpark(drive, rq); ide_special_rq()
289 return ide_do_devset(drive, rq); ide_special_rq()
291 return ide_do_reset(drive); ide_special_rq()
306 static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq) start_request() argument
314 drive->hwif->name, (unsigned long) rq); start_request()
318 if (drive->max_failures && (drive->failures > drive->max_failures)) { start_request()
324 ide_check_pm_state(drive, rq); start_request()
326 drive->hwif->tp_ops->dev_select(drive); start_request()
327 if (ide_wait_stat(&startstop, drive, drive->ready_stat, start_request()
329 printk(KERN_ERR "%s: drive not ready for command\n", drive->name); start_request()
333 if (drive->special_flags == 0) { start_request()
337 * We reset the drive so we need to issue a SETFEATURES. start_request()
340 if (drive->current_speed == 0xff) start_request()
341 ide_config_drive_speed(drive, drive->desired_speed); start_request()
344 return execute_drive_cmd(drive, rq); start_request()
349 drive->name, pm->pm_step); start_request()
351 startstop = ide_start_power_step(drive, rq); start_request()
354 ide_complete_pm_rq(drive, rq); start_request()
365 return ide_special_rq(drive, rq); start_request()
369 return drv->do_request(drive, rq, blk_rq_pos(rq)); start_request()
371 return do_special(drive); start_request()
373 ide_kill_rq(drive, rq); start_request()
379 * @drive: drive to stall
382 * ide_stall_queue() can be used by a drive to give excess bandwidth back
386 void ide_stall_queue (ide_drive_t *drive, unsigned long timeout) ide_stall_queue() argument
390 drive->sleep = timeout + jiffies; ide_stall_queue()
391 drive->dev_flags |= IDE_DFLAG_SLEEPING; ide_stall_queue()
443 void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq) ide_requeue_and_plug() argument
445 struct request_queue *q = drive->queue; ide_requeue_and_plug()
458 ide_drive_t *drive = q->queuedata; do_ide_request() local
459 ide_hwif_t *hwif = drive->hwif; do_ide_request()
481 if (drive->dev_flags & IDE_DFLAG_SLEEPING && do_ide_request()
482 time_after(drive->sleep, jiffies)) { do_ide_request()
483 unsigned long left = jiffies - drive->sleep; do_ide_request()
507 hwif->cur_dev = drive; do_ide_request()
508 drive->dev_flags &= ~(IDE_DFLAG_SLEEPING | IDE_DFLAG_PARKED); do_ide_request()
517 rq = blk_fetch_request(drive->queue); do_ide_request()
540 if ((drive->dev_flags & IDE_DFLAG_BLOCKED) && do_ide_request()
551 startstop = start_request(drive, rq); do_ide_request()
576 static int drive_is_ready(ide_drive_t *drive) drive_is_ready() argument
578 ide_hwif_t *hwif = drive->hwif; drive_is_ready()
581 if (drive->waiting_for_dma) drive_is_ready()
582 return hwif->dma_ops->dma_test_irq(drive); drive_is_ready()
592 /* drive busy: definitely not interrupting */ drive_is_ready()
595 /* drive ready: *might* be interrupting */ drive_is_ready()
603 * An IDE command has timed out before the expected drive return
608 * invoking the handler and checking the drive DMA status. We
616 ide_drive_t *uninitialized_var(drive); ide_timer_expiry()
638 drive = hwif->cur_dev; ide_timer_expiry()
641 wait = expiry(drive); ide_timer_expiry()
664 startstop = handler(drive); ide_timer_expiry()
665 } else if (drive_is_ready(drive)) { ide_timer_expiry()
666 if (drive->waiting_for_dma) ide_timer_expiry()
667 hwif->dma_ops->dma_lost_irq(drive); ide_timer_expiry()
669 hwif->port_ops->clear_irq(drive); ide_timer_expiry()
672 drive->name); ide_timer_expiry()
673 startstop = handler(drive); ide_timer_expiry()
675 if (drive->waiting_for_dma) ide_timer_expiry()
676 startstop = ide_dma_timeout_retry(drive, wait); ide_timer_expiry()
678 startstop = ide_error(drive, "irq timeout", ide_timer_expiry()
694 ide_requeue_and_plug(drive, rq_in_flight); ide_timer_expiry()
709 * the drive enters "idle", "standby", or "sleep" mode, so if the status
720 * the drive is ready to accept one, in which case we know the drive is
722 * before completing the issuance of any new drive command, so we will not
756 * a command. hwif->cur_dev is the drive and hwif->handler is
774 ide_drive_t *uninitialized_var(drive); ide_intr()
797 * Not expecting an interrupt from this drive. ide_intr()
801 * or (2) a drive just entered sleep or standby mode, ide_intr()
824 drive = hwif->cur_dev; ide_intr()
826 if (!drive_is_ready(drive)) ide_intr()
843 hwif->port_ops->clear_irq(drive); ide_intr()
845 if (drive->dev_flags & IDE_DFLAG_UNMASK) ide_intr()
849 startstop = handler(drive); ide_intr()
872 ide_requeue_and_plug(drive, rq_in_flight); ide_intr()
879 void ide_pad_transfer(ide_drive_t *drive, int write, int len) ide_pad_transfer() argument
881 ide_hwif_t *hwif = drive->hwif; ide_pad_transfer()
886 hwif->tp_ops->output_data(drive, NULL, buf, min(4, len)); ide_pad_transfer()
888 hwif->tp_ops->input_data(drive, NULL, buf, min(4, len)); ide_pad_transfer()
H A Dide-disk_ioctl.c18 int ide_disk_ioctl(ide_drive_t *drive, struct block_device *bdev, fmode_t mode, ide_disk_ioctl() argument
24 err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_disk_ioctl_settings); ide_disk_ioctl()
28 err = generic_ide_ioctl(drive, bdev, cmd, arg); ide_disk_ioctl()
H A Dide-floppy_ioctl.c36 static int ide_floppy_get_format_capacities(ide_drive_t *drive, ide_floppy_get_format_capacities() argument
40 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_get_format_capacities()
53 if (ide_queue_pc_tail(drive, floppy->disk, pc, pc_buf, pc->req_xfer)) { ide_floppy_get_format_capacities()
119 static int ide_floppy_get_sfrp_bit(ide_drive_t *drive, struct ide_atapi_pc *pc) ide_floppy_get_sfrp_bit() argument
121 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_get_sfrp_bit()
124 drive->atapi_flags &= ~IDE_AFLAG_SRFP; ide_floppy_get_sfrp_bit()
129 if (ide_queue_pc_tail(drive, floppy->disk, pc, buf, pc->req_xfer)) ide_floppy_get_sfrp_bit()
133 drive->atapi_flags |= IDE_AFLAG_SRFP; ide_floppy_get_sfrp_bit()
138 static int ide_floppy_format_unit(ide_drive_t *drive, struct ide_atapi_pc *pc, ide_floppy_format_unit() argument
141 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_format_unit()
147 drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; ide_floppy_format_unit()
151 drive->dev_flags |= IDE_DFLAG_FORMAT_IN_PROGRESS; ide_floppy_format_unit()
154 * Send ATAPI_FORMAT_UNIT to the drive. ide_floppy_format_unit()
175 ide_floppy_get_sfrp_bit(drive, pc); ide_floppy_format_unit()
178 if (ide_queue_pc_tail(drive, floppy->disk, pc, buf, pc->req_xfer)) ide_floppy_format_unit()
183 drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; ide_floppy_format_unit()
193 * If the drive does not support format progress indication, we just check
197 static int ide_floppy_get_format_progress(ide_drive_t *drive, ide_floppy_get_format_progress() argument
201 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_get_format_progress()
205 if (drive->atapi_flags & IDE_AFLAG_SRFP) { ide_floppy_get_format_progress()
206 ide_create_request_sense_cmd(drive, pc); ide_floppy_get_format_progress()
207 if (ide_queue_pc_tail(drive, floppy->disk, pc, sense_buf, ide_floppy_get_format_progress()
218 ide_hwif_t *hwif = drive->hwif; ide_floppy_get_format_progress()
235 static int ide_floppy_lockdoor(ide_drive_t *drive, struct ide_atapi_pc *pc, ide_floppy_lockdoor() argument
238 struct ide_disk_obj *floppy = drive->driver_data; ide_floppy_lockdoor()
245 ide_set_media_lock(drive, disk, prevent); ide_floppy_lockdoor()
248 ide_do_start_stop(drive, disk, 2); ide_floppy_lockdoor()
253 static int ide_floppy_format_ioctl(ide_drive_t *drive, struct ide_atapi_pc *pc, ide_floppy_format_ioctl() argument
261 return ide_floppy_get_format_capacities(drive, pc, argp); ide_floppy_format_ioctl()
265 return ide_floppy_format_unit(drive, pc, (int __user *)argp); ide_floppy_format_ioctl()
267 return ide_floppy_get_format_progress(drive, pc, argp); ide_floppy_format_ioctl()
273 int ide_floppy_ioctl(ide_drive_t *drive, struct block_device *bdev, ide_floppy_ioctl() argument
282 err = ide_floppy_lockdoor(drive, &pc, arg, cmd); ide_floppy_ioctl()
286 err = ide_floppy_format_ioctl(drive, &pc, mode, cmd, argp); ide_floppy_ioctl()
298 err = generic_ide_ioctl(drive, bdev, cmd, arg); ide_floppy_ioctl()
H A Dide-ioctls.c19 int ide_setting_ioctl(ide_drive_t *drive, struct block_device *bdev, ide_setting_ioctl() argument
37 err = ds->get(drive); ide_setting_ioctl()
49 err = ide_devset_execute(drive, ds, arg); ide_setting_ioctl()
57 static int ide_get_identity_ioctl(ide_drive_t *drive, unsigned int cmd, ide_get_identity_ioctl() argument
64 if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { ide_get_identity_ioctl()
76 memcpy(id, drive->id, size); ide_get_identity_ioctl()
87 static int ide_get_nice_ioctl(ide_drive_t *drive, unsigned long arg) ide_get_nice_ioctl() argument
89 return put_user((!!(drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) ide_get_nice_ioctl()
91 (!!(drive->dev_flags & IDE_DFLAG_NICE1) ide_get_nice_ioctl()
95 static int ide_set_nice_ioctl(ide_drive_t *drive, unsigned long arg) ide_set_nice_ioctl() argument
101 (drive->media != ide_tape)) ide_set_nice_ioctl()
105 drive->dev_flags |= IDE_DFLAG_DSC_OVERLAP; ide_set_nice_ioctl()
107 drive->dev_flags &= ~IDE_DFLAG_DSC_OVERLAP; ide_set_nice_ioctl()
110 drive->dev_flags |= IDE_DFLAG_NICE1; ide_set_nice_ioctl()
112 drive->dev_flags &= ~IDE_DFLAG_NICE1; ide_set_nice_ioctl()
117 static int ide_cmd_ioctl(ide_drive_t *drive, unsigned long arg) ide_cmd_ioctl() argument
128 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); ide_cmd_ioctl()
130 err = blk_execute_rq(drive->queue, NULL, rq, 0); ide_cmd_ioctl()
167 xfer_rate = ide_find_dma_mode(drive, tf->nsect); ide_cmd_ioctl()
176 err = ide_raw_taskfile(drive, &cmd, buf, args[3]); ide_cmd_ioctl()
192 static int ide_task_ioctl(ide_drive_t *drive, unsigned long arg) ide_task_ioctl() argument
208 err = ide_no_data_taskfile(drive, &cmd); ide_task_ioctl()
219 static int generic_drive_reset(ide_drive_t *drive) generic_drive_reset() argument
224 rq = blk_get_request(drive->queue, READ, __GFP_WAIT); generic_drive_reset()
228 if (blk_execute_rq(drive->queue, NULL, rq, 1)) generic_drive_reset()
234 int generic_ide_ioctl(ide_drive_t *drive, struct block_device *bdev, generic_ide_ioctl() argument
239 err = ide_setting_ioctl(drive, bdev, cmd, arg, ide_ioctl_settings); generic_ide_ioctl()
248 return ide_get_identity_ioctl(drive, cmd, arg); generic_ide_ioctl()
250 return ide_get_nice_ioctl(drive, arg); generic_ide_ioctl()
254 return ide_set_nice_ioctl(drive, arg); generic_ide_ioctl()
259 if (drive->media == ide_disk) generic_ide_ioctl()
260 return ide_taskfile_ioctl(drive, arg); generic_ide_ioctl()
266 return ide_cmd_ioctl(drive, arg); generic_ide_ioctl()
270 return ide_task_ioctl(drive, arg); generic_ide_ioctl()
274 return generic_drive_reset(drive); generic_ide_ioctl()
H A Dqd65xx.c89 * This routine is invoked to prepare for access to a given drive.
92 static void qd65xx_dev_select(ide_drive_t *drive) qd65xx_dev_select() argument
94 u8 index = (( (QD_TIMREG(drive)) & 0x80 ) >> 7) | qd65xx_dev_select()
95 (QD_TIMREG(drive) & 0x02); qd65xx_dev_select()
97 if (timings[index] != QD_TIMING(drive)) qd65xx_dev_select()
98 outb(timings[index] = QD_TIMING(drive), QD_TIMREG(drive)); qd65xx_dev_select()
100 outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr); qd65xx_dev_select()
150 static int qd_find_disk_type (ide_drive_t *drive, qd_find_disk_type() argument
154 char *m = (char *)&drive->id[ATA_ID_PROD]; qd_find_disk_type()
165 printk(KERN_DEBUG "%s: listed !\n", drive->name); qd_find_disk_type()
180 static void qd_set_timing (ide_drive_t *drive, u8 timing) qd_set_timing() argument
182 unsigned long data = (unsigned long)ide_get_drivedata(drive); qd_set_timing()
186 ide_set_drivedata(drive, (void *)data); qd_set_timing()
188 printk(KERN_DEBUG "%s: %#x\n", drive->name, timing); qd_set_timing()
191 static void qd6500_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) qd6500_set_pio_mode() argument
193 u16 *id = drive->id; qd6500_set_pio_mode()
197 /* FIXME: use drive->pio_mode value */ qd6500_set_pio_mode()
198 if (!qd_find_disk_type(drive, &active_time, &recovery_time) && qd6500_set_pio_mode()
201 printk(KERN_INFO "%s: PIO mode%d\n", drive->name, qd6500_set_pio_mode()
204 recovery_time = drive->id[ATA_ID_EIDE_PIO] - 120; qd6500_set_pio_mode()
207 qd_set_timing(drive, qd6500_compute_timing(drive->hwif, qd6500_set_pio_mode()
211 static void qd6580_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) qd6580_set_pio_mode() argument
213 const u8 pio = drive->pio_mode - XFER_PIO_0; qd6580_set_pio_mode()
220 if (drive->id && !qd_find_disk_type(drive, &active_time, &recovery_time)) { qd6580_set_pio_mode()
221 cycle_time = ide_pio_cycle_time(drive, pio); qd6580_set_pio_mode()
230 printk(KERN_WARNING "%s: Strange recovery time !\n",drive->name); qd6580_set_pio_mode()
237 printk(KERN_WARNING "%s: Strange recovery time !\n",drive->name); qd6580_set_pio_mode()
248 printk(KERN_INFO "%s: PIO mode%d\n", drive->name,pio); qd6580_set_pio_mode()
251 if (!hwif->channel && drive->media != ide_disk) { qd6580_set_pio_mode()
255 drive->name, hwif->name); qd6580_set_pio_mode()
258 qd_set_timing(drive, qd6580_compute_timing(active_time, recovery_time)); qd6580_set_pio_mode()
289 static void __init qd6500_init_dev(ide_drive_t *drive) qd6500_init_dev() argument
291 ide_hwif_t *hwif = drive->hwif; qd6500_init_dev()
295 ide_set_drivedata(drive, (void *)QD6500_DEF_DATA); qd6500_init_dev()
298 static void __init qd6580_init_dev(ide_drive_t *drive) qd6580_init_dev() argument
300 ide_hwif_t *hwif = drive->hwif; qd6580_init_dev()
311 ide_set_drivedata(drive, (void *)((drive->dn & 1) ? t2 : t1)); qd6580_init_dev()
H A Dide-proc.c11 * Drive/Driver settings can be retrieved by reading the drive's
119 ide_drive_t *drive = (ide_drive_t *)m->private; ide_identify_proc_show() local
122 if (!drive) { ide_identify_proc_show()
130 if (taskfile_lib_get_identify(drive, buf) == 0) { ide_identify_proc_show()
181 * @drive: drive to read from
182 * @setting: drive setting
184 * Read a drive setting and return the value. The caller
192 static int ide_read_setting(ide_drive_t *drive, ide_read_setting() argument
199 val = ds->get(drive); ide_read_setting()
206 * @drive: drive to read from
207 * @setting: drive setting
210 * Write a drive setting if it is possible. The caller
222 static int ide_write_setting(ide_drive_t *drive, ide_write_setting() argument
234 return ide_devset_execute(drive, ds, val); ide_write_setting()
239 static int set_xfer_rate (ide_drive_t *drive, int arg) set_xfer_rate() argument
254 return ide_no_data_taskfile(drive, &cmd); set_xfer_rate()
285 ide_drive_t *drive = (ide_drive_t *) m->private; ide_settings_proc_show() local
292 d = drive->settings; ide_settings_proc_show()
306 mul_factor = setting->mulf ? setting->mulf(drive) : 1; ide_settings_proc_show()
307 div_factor = setting->divf ? setting->divf(drive) : 1; ide_settings_proc_show()
309 rc = ide_read_setting(drive, setting); ide_settings_proc_show()
336 ide_drive_t *drive = PDE_DATA(file_inode(file)); ide_settings_proc_write() local
412 if (drive->settings) ide_settings_proc_write()
413 setting = ide_find_setting(drive->settings, name); ide_settings_proc_write()
420 mul_factor = setting->mulf ? setting->mulf(drive) : 1; ide_settings_proc_write()
421 div_factor = setting->divf ? setting->divf(drive) : 1; ide_settings_proc_write()
422 ide_write_setting(drive, setting, val * div_factor / mul_factor); ide_settings_proc_write()
466 ide_drive_t *drive = (ide_drive_t *) m->private; ide_geometry_proc_show() local
469 drive->cyl, drive->head, drive->sect); ide_geometry_proc_show()
471 drive->bios_cyl, drive->bios_head, drive->bios_sect); ide_geometry_proc_show()
491 ide_drive_t *drive = (ide_drive_t *) seq->private; ide_dmodel_proc_show() local
492 char *m = (char *)&drive->id[ATA_ID_PROD]; ide_dmodel_proc_show()
513 ide_drive_t *drive = (ide_drive_t *)m->private; ide_driver_proc_show() local
514 struct device *dev = &drive->gendev; ide_driver_proc_show()
531 static int ide_replace_subdriver(ide_drive_t *drive, const char *driver) ide_replace_subdriver() argument
533 struct device *dev = &drive->gendev; ide_replace_subdriver()
539 strlcpy(drive->driver_req, driver, sizeof(drive->driver_req)); ide_replace_subdriver()
544 drive->driver_req[0] = 0; ide_replace_subdriver()
561 ide_drive_t *drive = PDE_DATA(file_inode(file)); ide_driver_proc_write() local
571 if (ide_replace_subdriver(drive, name)) ide_driver_proc_write()
587 ide_drive_t *drive = (ide_drive_t *) m->private; ide_media_proc_show() local
590 switch (drive->media) { ide_media_proc_show()
647 void ide_proc_register_driver(ide_drive_t *drive, struct ide_driver *driver) ide_proc_register_driver() argument
650 drive->settings = driver->proc_devsets(drive); ide_proc_register_driver()
653 ide_add_proc_entries(drive->proc, driver->proc_entries(drive), drive); ide_proc_register_driver()
660 * @drive: drive
664 * for a given drive.
669 void ide_proc_unregister_driver(ide_drive_t *drive, struct ide_driver *driver) ide_proc_unregister_driver() argument
671 ide_remove_proc_entries(drive->proc, driver->proc_entries(drive)); ide_proc_unregister_driver()
678 drive->settings = NULL; ide_proc_unregister_driver()
687 ide_drive_t *drive; ide_proc_port_register_devices() local
691 ide_port_for_each_dev(i, drive, hwif) { ide_port_for_each_dev()
692 if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) ide_port_for_each_dev()
695 drive->proc = proc_mkdir(drive->name, parent); ide_port_for_each_dev()
696 if (drive->proc) ide_port_for_each_dev()
697 ide_add_proc_entries(drive->proc, generic_drive_entries, drive); ide_port_for_each_dev()
698 sprintf(name, "ide%d/%s", (drive->name[2]-'a')/2, drive->name); ide_port_for_each_dev()
699 ent = proc_symlink(drive->name, proc_ide_root, name); ide_port_for_each_dev()
704 void ide_proc_unregister_device(ide_drive_t *drive) ide_proc_unregister_device() argument
706 if (drive->proc) { ide_proc_unregister_device()
707 ide_remove_proc_entries(drive->proc, generic_drive_entries); ide_proc_unregister_device()
708 remove_proc_entry(drive->name, proc_ide_root); ide_proc_unregister_device()
709 remove_proc_entry(drive->name, drive->hwif->proc); ide_proc_unregister_device()
710 drive->proc = NULL; ide_proc_unregister_device()
H A Dht6560b.c47 static inline u8 HT_CONFIG(ide_drive_t *drive) HT_CONFIG() argument
49 return ((unsigned long)ide_get_drivedata(drive) & 0xff00) >> 8; HT_CONFIG()
94 * Active Time for each drive. Smaller value gives higher speed.
97 static inline u8 HT_TIMING(ide_drive_t *drive) HT_TIMING() argument
99 return (unsigned long)ide_get_drivedata(drive) & 0x00ff; HT_TIMING()
112 * This routine is invoked from ide.c to prepare for access to a given drive.
114 static void ht6560b_dev_select(ide_drive_t *drive) ht6560b_dev_select() argument
116 ide_hwif_t *hwif = drive->hwif; ht6560b_dev_select()
124 select = HT_CONFIG(drive); ht6560b_dev_select()
125 timing = HT_TIMING(drive); ht6560b_dev_select()
131 if (drive->media != ide_disk || ht6560b_dev_select()
132 (drive->dev_flags & IDE_DFLAG_PRESENT) == 0) ht6560b_dev_select()
144 * Set timing for this drive: ht6560b_dev_select()
150 drive->name, select, timing); ht6560b_dev_select()
155 outb(drive->select | ATA_DEVICE_OBS, hwif->io_ports.device_addr); ht6560b_dev_select()
199 static u8 ht_pio2timings(ide_drive_t *drive, const u8 pio) ht_pio2timings() argument
209 cycle_time = ide_pio_cycle_time(drive, pio); ht_pio2timings()
232 printk("ht6560b: drive %s setting pio=%d recovery=%d (%dns) active=%d (%dns)\n", drive->name, pio, recovery_cycles, recovery_time, active_cycles, active_time); ht_pio2timings()
239 printk("ht6560b: drive %s setting pio=0\n", drive->name); ht_pio2timings()
251 static void ht_set_prefetch(ide_drive_t *drive, u8 state) ht_set_prefetch() argument
258 config = (unsigned long)ide_get_drivedata(drive); ht_set_prefetch()
265 drive->dev_flags |= IDE_DFLAG_NO_UNMASK; ht_set_prefetch()
266 drive->dev_flags &= ~IDE_DFLAG_UNMASK; ht_set_prefetch()
269 drive->dev_flags &= ~IDE_DFLAG_NO_UNMASK; ht_set_prefetch()
272 ide_set_drivedata(drive, (void *)config); ht_set_prefetch()
277 printk("ht6560b: drive %s prefetch mode %sabled\n", drive->name, (state ? "en" : "dis")); ht_set_prefetch()
281 static void ht6560b_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) ht6560b_set_pio_mode() argument
284 const u8 pio = drive->pio_mode - XFER_PIO_0; ht6560b_set_pio_mode()
290 ht_set_prefetch(drive, pio & 1); ht6560b_set_pio_mode()
294 timing = ht_pio2timings(drive, pio); ht6560b_set_pio_mode()
297 config = (unsigned long)ide_get_drivedata(drive); ht6560b_set_pio_mode()
300 ide_set_drivedata(drive, (void *)config); ht6560b_set_pio_mode()
304 printk("ht6560b: drive %s tuned to pio mode %#x timing=%#x\n", drive->name, pio, timing); ht6560b_set_pio_mode()
308 static void __init ht6560b_init_dev(ide_drive_t *drive) ht6560b_init_dev() argument
310 ide_hwif_t *hwif = drive->hwif; ht6560b_init_dev()
317 ide_set_drivedata(drive, (void *)t); ht6560b_init_dev()
H A Dit8213.c21 * @drive: drive
26 static void it8213_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) it8213_set_pio_mode() argument
29 int is_slave = drive->dn & 1; it8213_set_pio_mode()
37 const u8 pio = drive->pio_mode - XFER_PIO_0; it8213_set_pio_mode()
51 if (drive->media != ide_disk) it8213_set_pio_mode()
53 if (ide_pio_need_iordy(drive, pio)) it8213_set_pio_mode()
78 * @drive: drive
83 static void it8213_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) it8213_set_dma_mode() argument
87 int a_speed = 3 << (drive->dn * 4); it8213_set_dma_mode()
88 int u_flag = 1 << drive->dn; it8213_set_dma_mode()
89 int v_flag = 0x01 << drive->dn; it8213_set_dma_mode()
90 int w_flag = 0x10 << drive->dn; it8213_set_dma_mode()
94 const u8 speed = drive->dma_mode; it8213_set_dma_mode()
105 u_speed = min_t(u8, 2 - (udma & 1), udma) << (drive->dn * 4); it8213_set_dma_mode()
134 drive->pio_mode = it8213_set_dma_mode()
137 drive->pio_mode = XFER_PIO_2; /* for SWDMA2 */ it8213_set_dma_mode()
139 it8213_set_pio_mode(hwif, drive); it8213_set_dma_mode()
H A Dit821x.c83 u16 udma[2]; /* Cached UDMA values (per drive) */
105 * @drive: drive to tune
112 static void it821x_program(ide_drive_t *drive, u16 timing) it821x_program() argument
114 ide_hwif_t *hwif = drive->hwif; it821x_program()
131 * @drive: drive to tune
134 * Program the UDMA timing for this drive according to the
138 static void it821x_program_udma(ide_drive_t *drive, u16 timing) it821x_program_udma() argument
140 ide_hwif_t *hwif = drive->hwif; it821x_program_udma()
144 u8 unit = drive->dn & 1, conf; it821x_program_udma()
162 * @drive: drive to set up
168 static void it821x_clock_strategy(ide_drive_t *drive) it821x_clock_strategy() argument
170 ide_hwif_t *hwif = drive->hwif; it821x_clock_strategy()
173 ide_drive_t *pair = ide_get_pair_dev(drive); it821x_clock_strategy()
175 u8 unit = drive->dn & 1, v; it821x_clock_strategy()
213 * Reprogram the UDMA/PIO of the pair drive for the switch it821x_clock_strategy()
221 * Reprogram the UDMA/PIO of our drive for the switch. it821x_clock_strategy()
225 it821x_program_udma(drive, itdev->udma[unit]); it821x_clock_strategy()
226 it821x_program(drive, itdev->pio[unit]); it821x_clock_strategy()
233 * @drive: drive
239 static void it821x_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) it821x_set_pio_mode() argument
242 ide_drive_t *pair = ide_get_pair_dev(drive); it821x_set_pio_mode()
243 const u8 pio = drive->pio_mode - XFER_PIO_0; it821x_set_pio_mode()
244 u8 unit = drive->dn & 1, set_pio = pio; it821x_set_pio_mode()
266 it821x_clock_strategy(drive); it821x_set_pio_mode()
267 it821x_program(drive, itdev->pio[unit]); it821x_set_pio_mode()
272 * @drive: drive to set up
281 static void it821x_tune_mwdma(ide_drive_t *drive, u8 mode_wanted) it821x_tune_mwdma() argument
283 ide_hwif_t *hwif = drive->hwif; it821x_tune_mwdma()
286 u8 unit = drive->dn & 1, channel = hwif->channel, conf; it821x_tune_mwdma()
304 it821x_clock_strategy(drive); it821x_tune_mwdma()
306 /* it821x_program(drive, itdev->mwdma[unit]); */ it821x_tune_mwdma()
311 * @drive: drive to set up
318 static void it821x_tune_udma(ide_drive_t *drive, u8 mode_wanted) it821x_tune_udma() argument
320 ide_hwif_t *hwif = drive->hwif; it821x_tune_udma()
323 u8 unit = drive->dn & 1, channel = hwif->channel, conf; it821x_tune_udma()
343 it821x_clock_strategy(drive); it821x_tune_udma()
344 it821x_program_udma(drive, itdev->udma[unit]); it821x_tune_udma()
350 * @drive: drive for DMA
361 static void it821x_dma_start(ide_drive_t *drive) it821x_dma_start() argument
363 ide_hwif_t *hwif = drive->hwif; it821x_dma_start()
365 u8 unit = drive->dn & 1; it821x_dma_start()
368 it821x_program(drive, itdev->mwdma[unit]); it821x_dma_start()
370 it821x_program_udma(drive, itdev->udma[unit]); it821x_dma_start()
371 ide_dma_start(drive); it821x_dma_start()
376 * @drive: drive for DMA stop
383 static int it821x_dma_end(ide_drive_t *drive) it821x_dma_end() argument
385 ide_hwif_t *hwif = drive->hwif; it821x_dma_end()
387 int ret = ide_dma_end(drive); it821x_dma_end()
388 u8 unit = drive->dn & 1; it821x_dma_end()
391 it821x_program(drive, itdev->pio[unit]); it821x_dma_end()
398 * @drive: drive
403 static void it821x_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) it821x_set_dma_mode() argument
405 const u8 speed = drive->dma_mode; it821x_set_dma_mode()
413 it821x_tune_udma(drive, speed - XFER_UDMA_0); it821x_set_dma_mode()
415 it821x_tune_mwdma(drive, speed - XFER_MW_DMA_0); it821x_set_dma_mode()
435 * @drive: drive
437 * This callback is run after the drive has been probed but
442 static void it821x_quirkproc(ide_drive_t *drive) it821x_quirkproc() argument
444 struct it821x_dev *itdev = ide_get_hwifdata(drive->hwif); it821x_quirkproc()
445 u16 *id = drive->id; it821x_quirkproc()
454 drive->dev_flags |= IDE_DFLAG_UNMASK; it821x_quirkproc()
474 drive->name, id[147] ? "Bootable " : "", it821x_quirkproc()
495 drive->name); it821x_quirkproc()
505 drive->current_speed = XFER_MW_DMA_0; it821x_quirkproc()
H A Dide-dma-sff.c11 * @drive: the drive to place in DMA mode
13 * If the drive supports at least mode 2 DMA or UDMA of any kind
17 * on the good/bad drive lists.
20 int config_drive_for_dma(ide_drive_t *drive) config_drive_for_dma() argument
22 ide_hwif_t *hwif = drive->hwif; config_drive_for_dma()
23 u16 *id = drive->id; config_drive_for_dma()
25 if (drive->media != ide_disk) { config_drive_for_dma()
31 * Enable DMA on any drive that has config_drive_for_dma()
39 * Enable DMA on any drive that has mode2 DMA config_drive_for_dma()
47 if (ide_dma_good_drive(drive)) config_drive_for_dma()
76 * @drive: drive to control
82 void ide_dma_host_set(ide_drive_t *drive, int on) ide_dma_host_set() argument
84 ide_hwif_t *hwif = drive->hwif; ide_dma_host_set()
85 u8 unit = drive->dn & 1; ide_dma_host_set()
114 int ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) ide_build_dmatable() argument
116 ide_hwif_t *hwif = drive->hwif; ide_build_dmatable()
166 printk(KERN_ERR "%s: %s\n", drive->name, ide_build_dmatable()
175 * @drive: target device
187 int ide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) ide_dma_setup() argument
189 ide_hwif_t *hwif = drive->hwif; ide_dma_setup()
195 if (ide_build_dmatable(drive, cmd) == 0) { ide_dma_setup()
196 ide_map_sg(drive, cmd); ide_dma_setup()
225 * @drive: Drive that timed out
230 * secondary 'I don't care what the drive thinks' timeout here)
237 int ide_dma_sff_timer_expiry(ide_drive_t *drive) ide_dma_sff_timer_expiry() argument
239 ide_hwif_t *hwif = drive->hwif; ide_dma_sff_timer_expiry()
243 drive->name, __func__, dma_stat); ide_dma_sff_timer_expiry()
263 void ide_dma_start(ide_drive_t *drive) ide_dma_start() argument
265 ide_hwif_t *hwif = drive->hwif; ide_dma_start()
269 * been issued to the drive, as per the BM-IDE spec. ide_dma_start()
271 * we do this part before issuing the drive cmd. ide_dma_start()
285 int ide_dma_end(ide_drive_t *drive) ide_dma_end() argument
287 ide_hwif_t *hwif = drive->hwif; ide_dma_end()
316 int ide_dma_test_irq(ide_drive_t *drive) ide_dma_test_irq() argument
318 ide_hwif_t *hwif = drive->hwif; ide_dma_test_irq()
H A Dsl82c105.c42 static unsigned int get_pio_timings(ide_drive_t *drive, u8 pio) get_pio_timings() argument
49 cmd_off = (ide_pio_cycle_time(drive, pio) - 30 * cmd_on + 29) / 30; get_pio_timings()
57 if (ide_pio_need_iordy(drive, pio)) get_pio_timings()
66 static void sl82c105_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) sl82c105_set_pio_mode() argument
69 unsigned long timings = (unsigned long)ide_get_drivedata(drive); sl82c105_set_pio_mode()
70 int reg = 0x44 + drive->dn * 4; sl82c105_set_pio_mode()
72 const u8 pio = drive->pio_mode - XFER_PIO_0; sl82c105_set_pio_mode()
74 drv_ctrl = get_pio_timings(drive, pio); sl82c105_set_pio_mode()
82 ide_set_drivedata(drive, (void *)timings); sl82c105_set_pio_mode()
87 printk(KERN_DEBUG "%s: selected %s (%dns) (%04X)\n", drive->name, sl82c105_set_pio_mode()
89 ide_pio_cycle_time(drive, pio), drv_ctrl); sl82c105_set_pio_mode()
95 static void sl82c105_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) sl82c105_set_dma_mode() argument
98 unsigned long timings = (unsigned long)ide_get_drivedata(drive); sl82c105_set_dma_mode()
100 const u8 speed = drive->dma_mode; sl82c105_set_dma_mode()
110 ide_set_drivedata(drive, (void *)timings); sl82c105_set_dma_mode()
126 * when the drive wants to report an error condition).
144 * This function is called when the IDE timer expires, the drive
147 static void sl82c105_dma_lost_irq(ide_drive_t *drive) sl82c105_dma_lost_irq() argument
149 ide_hwif_t *hwif = drive->hwif; sl82c105_dma_lost_irq()
157 * Check the raw interrupt from the drive. sl82c105_dma_lost_irq()
161 printk(KERN_INFO "sl82c105: drive was requesting IRQ, " sl82c105_dma_lost_irq()
166 * host. The IDE layer will be handling the drive for us. sl82c105_dma_lost_irq()
185 static void sl82c105_dma_start(ide_drive_t *drive) sl82c105_dma_start() argument
187 ide_hwif_t *hwif = drive->hwif; sl82c105_dma_start()
189 int reg = 0x44 + drive->dn * 4; sl82c105_dma_start()
192 (unsigned long)ide_get_drivedata(drive) >> 16); sl82c105_dma_start()
195 ide_dma_start(drive); sl82c105_dma_start()
198 static void sl82c105_dma_clear(ide_drive_t *drive) sl82c105_dma_clear() argument
200 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sl82c105_dma_clear()
205 static int sl82c105_dma_end(ide_drive_t *drive) sl82c105_dma_end() argument
207 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sl82c105_dma_end()
208 int reg = 0x44 + drive->dn * 4; sl82c105_dma_end()
209 int ret = ide_dma_end(drive); sl82c105_dma_end()
212 (unsigned long)ide_get_drivedata(drive)); sl82c105_dma_end()
221 static void sl82c105_resetproc(ide_drive_t *drive) sl82c105_resetproc() argument
223 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sl82c105_resetproc()
H A Dide-disk_proc.c9 static int smart_enable(ide_drive_t *drive) smart_enable() argument
22 return ide_no_data_taskfile(drive, &cmd); smart_enable()
25 static int get_smart_data(ide_drive_t *drive, u8 *buf, u8 sub_cmd) get_smart_data() argument
40 return ide_raw_taskfile(drive, &cmd, buf, 1); get_smart_data()
45 ide_drive_t *drive = (ide_drive_t *) m->private; idedisk_cache_proc_show() local
47 if (drive->dev_flags & IDE_DFLAG_ID_READ) idedisk_cache_proc_show()
48 seq_printf(m, "%i\n", drive->id[ATA_ID_BUF_SIZE] / 2); idedisk_cache_proc_show()
69 ide_drive_t*drive = (ide_drive_t *)m->private; idedisk_capacity_proc_show() local
71 seq_printf(m, "%llu\n", (long long)ide_gd_capacity(drive)); idedisk_capacity_proc_show()
88 static int __idedisk_proc_show(struct seq_file *m, ide_drive_t *drive, u8 sub_cmd) __idedisk_proc_show() argument
96 (void)smart_enable(drive); __idedisk_proc_show()
98 if (get_smart_data(drive, buf, sub_cmd) == 0) { __idedisk_proc_show()
H A Dcs5536.c92 static void cs5536_program_dtc(ide_drive_t *drive, u8 tim) cs5536_program_dtc() argument
94 struct pci_dev *pdev = to_pci_dev(drive->hwif->dev); cs5536_program_dtc()
95 int dshift = (drive->dn & 1) ? IDE_D1_SHIFT : IDE_D0_SHIFT; cs5536_program_dtc()
129 * @drive: ATA device
132 static void cs5536_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5536_set_pio_mode() argument
147 ide_drive_t *pair = ide_get_pair_dev(drive); cs5536_set_pio_mode()
148 int cshift = (drive->dn & 1) ? IDE_CAST_D1_SHIFT : IDE_CAST_D0_SHIFT; cs5536_set_pio_mode()
149 unsigned long timings = (unsigned long)ide_get_drivedata(drive); cs5536_set_pio_mode()
151 const u8 pio = drive->pio_mode - XFER_PIO_0; cs5536_set_pio_mode()
159 ide_set_drivedata(drive, (void *)timings); cs5536_set_pio_mode()
161 cs5536_program_dtc(drive, drv_timings[pio]); cs5536_set_pio_mode()
177 * @drive: ATA device
180 static void cs5536_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5536_set_dma_mode() argument
191 int dshift = (drive->dn & 1) ? IDE_D1_SHIFT : IDE_D0_SHIFT; cs5536_set_dma_mode()
192 unsigned long timings = (unsigned long)ide_get_drivedata(drive); cs5536_set_dma_mode()
194 const u8 mode = drive->dma_mode; cs5536_set_dma_mode()
205 ide_set_drivedata(drive, (void *)timings); cs5536_set_dma_mode()
211 static void cs5536_dma_start(ide_drive_t *drive) cs5536_dma_start() argument
213 unsigned long timings = (unsigned long)ide_get_drivedata(drive); cs5536_dma_start()
215 if (drive->current_speed < XFER_UDMA_0 && cs5536_dma_start()
217 cs5536_program_dtc(drive, timings >> 8); cs5536_dma_start()
219 ide_dma_start(drive); cs5536_dma_start()
222 static int cs5536_dma_end(ide_drive_t *drive) cs5536_dma_end() argument
224 int ret = ide_dma_end(drive); cs5536_dma_end()
225 unsigned long timings = (unsigned long)ide_get_drivedata(drive); cs5536_dma_end()
227 if (drive->current_speed < XFER_UDMA_0 && cs5536_dma_end()
229 cs5536_program_dtc(drive, timings & IDE_DRV_MASK); cs5536_dma_end()
H A Datiixp.c46 * @drive: drive
51 static void atiixp_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) atiixp_set_pio_mode() argument
55 int timing_shift = (drive->dn ^ 1) * 8; atiixp_set_pio_mode()
58 const u8 pio = drive->pio_mode - XFER_PIO_0; atiixp_set_pio_mode()
63 pio_mode_data &= ~(0x07 << (drive->dn * 4)); atiixp_set_pio_mode()
64 pio_mode_data |= (pio << (drive->dn * 4)); atiixp_set_pio_mode()
79 * @drive: drive
85 static void atiixp_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) atiixp_set_dma_mode() argument
89 int timing_shift = (drive->dn ^ 1) * 8; atiixp_set_dma_mode()
93 const u8 speed = drive->dma_mode; atiixp_set_dma_mode()
101 tmp16 &= ~(0x07 << (drive->dn * 4)); atiixp_set_dma_mode()
102 tmp16 |= ((speed & 0x07) << (drive->dn * 4)); atiixp_set_dma_mode()
105 udma_ctl |= (1 << drive->dn); atiixp_set_dma_mode()
115 udma_ctl &= ~(1 << drive->dn); atiixp_set_dma_mode()
H A Dcs5535.c71 * @drive: Drive to set up
76 static void cs5535_set_speed(ide_drive_t *drive, const u8 speed) cs5535_set_speed() argument
79 u8 unit = drive->dn & 1; cs5535_set_speed()
83 ide_drive_t *pair = ide_get_pair_dev(drive); cs5535_set_speed()
95 /* Write the speed of the current drive */ cs5535_set_speed()
100 /* And if nessesary - change the speed of the other drive */ cs5535_set_speed()
133 * @drive: drive
138 static void cs5535_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5535_set_dma_mode() argument
140 cs5535_set_speed(drive, drive->dma_mode); cs5535_set_dma_mode()
146 * @drive: drive
151 static void cs5535_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5535_set_pio_mode() argument
153 cs5535_set_speed(drive, drive->pio_mode); cs5535_set_pio_mode()
H A Dit8172.c40 static void it8172_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) it8172_set_pio_mode() argument
45 const u8 pio = drive->pio_mode - XFER_PIO_0; it8172_set_pio_mode()
65 drive_enables &= drive->dn ? 0xc006 : 0xc060; it8172_set_pio_mode()
66 if (drive->media == ide_disk) it8172_set_pio_mode()
68 drive_enables |= 0x0004 << (drive->dn * 4); it8172_set_pio_mode()
69 if (ide_pio_need_iordy(drive, pio)) it8172_set_pio_mode()
71 drive_enables |= 0x0002 << (drive->dn * 4); it8172_set_pio_mode()
73 drive_timing &= drive->dn ? 0x00003f00 : 0x000fc000; it8172_set_pio_mode()
74 drive_timing |= timings[pio] << (drive->dn * 6 + 8); it8172_set_pio_mode()
80 static void it8172_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) it8172_set_dma_mode() argument
83 int a_speed = 3 << (drive->dn * 4); it8172_set_dma_mode()
84 int u_flag = 1 << drive->dn; it8172_set_dma_mode()
87 const u8 speed = drive->dma_mode; it8172_set_dma_mode()
94 u_speed = udma << (drive->dn * 4); it8172_set_dma_mode()
105 drive->pio_mode = it8172_set_dma_mode()
108 it8172_set_pio_mode(hwif, drive); it8172_set_dma_mode()
H A Dsis5513.c187 static u8 sis_ata133_get_base(ide_drive_t *drive) sis_ata133_get_base() argument
189 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata133_get_base()
194 return ((reg54 & 0x40000000) ? 0x70 : 0x40) + drive->dn * 4; sis_ata133_get_base()
197 static void sis_ata16_program_timings(ide_drive_t *drive, const u8 mode) sis_ata16_program_timings() argument
199 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata16_program_timings()
201 u8 drive_pci = 0x40 + drive->dn * 2; sis_ata16_program_timings()
220 static void sis_ata100_program_timings(ide_drive_t *drive, const u8 mode) sis_ata100_program_timings() argument
222 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata100_program_timings()
223 u8 t1, drive_pci = 0x40 + drive->dn * 2; sis_ata100_program_timings()
243 static void sis_ata133_program_timings(ide_drive_t *drive, const u8 mode) sis_ata133_program_timings() argument
245 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata133_program_timings()
247 u8 drive_pci = sis_ata133_get_base(drive), clk, idx; sis_ata133_program_timings()
265 static void sis_program_timings(ide_drive_t *drive, const u8 mode) sis_program_timings() argument
268 sis_ata16_program_timings(drive, mode); sis_program_timings()
270 sis_ata100_program_timings(drive, mode); sis_program_timings()
272 sis_ata133_program_timings(drive, mode); sis_program_timings()
275 static void config_drive_art_rwp(ide_drive_t *drive) config_drive_art_rwp() argument
277 ide_hwif_t *hwif = drive->hwif; config_drive_art_rwp()
284 rw_prefetch = reg4bh & ~(0x11 << drive->dn); config_drive_art_rwp()
286 if (drive->media == ide_disk) config_drive_art_rwp()
287 rw_prefetch |= 0x11 << drive->dn; config_drive_art_rwp()
293 static void sis_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) sis_set_pio_mode() argument
295 config_drive_art_rwp(drive); sis_set_pio_mode()
296 sis_program_timings(drive, drive->pio_mode); sis_set_pio_mode()
299 static void sis_ata133_program_udma_timings(ide_drive_t *drive, const u8 mode) sis_ata133_program_udma_timings() argument
301 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata133_program_udma_timings()
303 u8 drive_pci = sis_ata133_get_base(drive), clk, idx; sis_ata133_program_udma_timings()
318 static void sis_ata33_program_udma_timings(ide_drive_t *drive, const u8 mode) sis_ata33_program_udma_timings() argument
320 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata33_program_udma_timings()
321 u8 drive_pci = 0x40 + drive->dn * 2, reg = 0, i = chipset_family; sis_ata33_program_udma_timings()
335 static void sis_program_udma_timings(ide_drive_t *drive, const u8 mode) sis_program_udma_timings() argument
338 sis_ata133_program_udma_timings(drive, mode); sis_program_udma_timings()
340 sis_ata33_program_udma_timings(drive, mode); sis_program_udma_timings()
343 static void sis_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) sis_set_dma_mode() argument
345 const u8 speed = drive->dma_mode; sis_set_dma_mode()
348 sis_program_udma_timings(drive, speed); sis_set_dma_mode()
350 sis_program_timings(drive, speed); sis_set_dma_mode()
353 static u8 sis_ata133_udma_filter(ide_drive_t *drive) sis_ata133_udma_filter() argument
355 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); sis_ata133_udma_filter()
357 u8 drive_pci = sis_ata133_get_base(drive); sis_ata133_udma_filter()
458 2/ tell old chips to allow per drive IDE timings */ init_chipset_sis5513()
498 /* force per drive recovery and active timings init_chipset_sis5513()
H A Dpdc202xx_old.c24 static void pdc202xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) pdc202xx_set_mode() argument
27 u8 drive_pci = 0x60 + (drive->dn << 2); pdc202xx_set_mode()
28 const u8 speed = drive->dma_mode; pdc202xx_set_mode()
61 if (ide_pio_need_iordy(drive, speed - XFER_PIO_0)) pdc202xx_set_mode()
63 if (drive->media == ide_disk) pdc202xx_set_mode()
79 static void pdc202xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) pdc202xx_set_pio_mode() argument
81 drive->dma_mode = drive->pio_mode; pdc202xx_set_pio_mode()
82 pdc202xx_set_mode(hwif, drive); pdc202xx_set_pio_mode()
146 static void pdc202xx_dma_start(ide_drive_t *drive) pdc202xx_dma_start() argument
148 if (drive->current_speed > XFER_UDMA_2) pdc202xx_dma_start()
149 pdc_old_enable_66MHz_clock(drive->hwif); pdc202xx_dma_start()
150 if (drive->media != ide_disk || (drive->dev_flags & IDE_DFLAG_LBA48)) { pdc202xx_dma_start()
151 ide_hwif_t *hwif = drive->hwif; pdc202xx_dma_start()
165 ide_dma_start(drive); pdc202xx_dma_start()
168 static int pdc202xx_dma_end(ide_drive_t *drive) pdc202xx_dma_end() argument
170 if (drive->media != ide_disk || (drive->dev_flags & IDE_DFLAG_LBA48)) { pdc202xx_dma_end()
171 ide_hwif_t *hwif = drive->hwif; pdc202xx_dma_end()
180 if (drive->current_speed > XFER_UDMA_2) pdc202xx_dma_end()
181 pdc_old_disable_66MHz_clock(drive->hwif); pdc202xx_dma_end()
182 return ide_dma_end(drive); pdc202xx_dma_end()
H A Dsc1200.c81 static void sc1200_tunepio(ide_drive_t *drive, u8 pio) sc1200_tunepio() argument
83 ide_hwif_t *hwif = drive->hwif; sc1200_tunepio()
91 pci_write_config_dword(pdev, basereg + ((drive->dn & 1) << 3), sc1200_tunepio()
98 * different timings can still be chosen for each drive. We could
101 * by looking at our mate drive to see what it is capable of, before
102 * choosing a mode for our own drive.
104 static u8 sc1200_udma_filter(ide_drive_t *drive) sc1200_udma_filter() argument
106 ide_hwif_t *hwif = drive->hwif; sc1200_udma_filter()
107 ide_drive_t *mate = ide_get_pair_dev(drive); sc1200_udma_filter()
126 static void sc1200_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) sc1200_set_dma_mode() argument
132 const u8 mode = drive->dma_mode; sc1200_set_dma_mode()
158 if ((drive->dn & 1) == 0) { sc1200_set_dma_mode()
171 static int sc1200_dma_end(ide_drive_t *drive) sc1200_dma_end() argument
173 ide_hwif_t *hwif = drive->hwif; sc1200_dma_end()
191 * for both the chipset and drive.
197 static void sc1200_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) sc1200_set_pio_mode() argument
200 const u8 pio = drive->pio_mode - XFER_PIO_0; sc1200_set_pio_mode()
214 printk("SC1200: %s: changing (U)DMA mode\n", drive->name); sc1200_set_pio_mode()
215 ide_dma_off_quietly(drive); sc1200_set_pio_mode()
216 if (ide_set_dma_mode(drive, mode) == 0 && sc1200_set_pio_mode()
217 (drive->dev_flags & IDE_DFLAG_USING_DMA)) sc1200_set_pio_mode()
218 hwif->dma_ops->dma_host_set(drive, 1); sc1200_set_pio_mode()
222 sc1200_tunepio(drive, pio); sc1200_set_pio_mode()
H A Dns87415.c64 static void superio_tf_read(ide_drive_t *drive, struct ide_taskfile *tf, superio_tf_read() argument
67 struct ide_io_ports *io_ports = &drive->hwif->io_ports; superio_tf_read()
83 static void ns87415_dev_select(ide_drive_t *drive);
122 static void ns87415_prepare_drive (ide_drive_t *drive, unsigned int use_dma) ns87415_prepare_drive() argument
124 ide_hwif_t *hwif = drive->hwif; ns87415_prepare_drive()
135 if (drive->dev_flags & IDE_DFLAG_PRESENT) ns87415_prepare_drive()
140 /* Select PIO or DMA, DMA may only be selected for one drive/channel. */ ns87415_prepare_drive()
141 bit = 1 << (20 + (drive->dn & 1) + (hwif->channel << 1)); ns87415_prepare_drive()
142 other = 1 << (20 + (1 - (drive->dn & 1)) + (hwif->channel << 1)); ns87415_prepare_drive()
170 static void ns87415_dev_select(ide_drive_t *drive) ns87415_dev_select() argument
172 ns87415_prepare_drive(drive, ns87415_dev_select()
173 !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); ns87415_dev_select()
175 outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr); ns87415_dev_select()
178 static void ns87415_dma_start(ide_drive_t *drive) ns87415_dma_start() argument
180 ns87415_prepare_drive(drive, 1); ns87415_dma_start()
181 ide_dma_start(drive); ns87415_dma_start()
184 static int ns87415_dma_end(ide_drive_t *drive) ns87415_dma_end() argument
186 ide_hwif_t *hwif = drive->hwif; ns87415_dma_end()
198 ns87415_prepare_drive(drive, 0); ns87415_dma_end()
216 * Also, leave IRQ masked during drive probing, to prevent infinite init_hwif_ns87415()
219 * IRQs get unmasked in dev_select() when drive is first used. init_hwif_ns87415()
H A Dslc90e66.c21 static void slc90e66_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) slc90e66_set_pio_mode() argument
24 int is_slave = drive->dn & 1; slc90e66_set_pio_mode()
31 const u8 pio = drive->pio_mode - XFER_PIO_0; slc90e66_set_pio_mode()
46 if (drive->media == ide_disk) slc90e66_set_pio_mode()
48 if (ide_pio_need_iordy(drive, pio)) slc90e66_set_pio_mode()
75 static void slc90e66_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) slc90e66_set_dma_mode() argument
79 int sitre = 0, a_speed = 7 << (drive->dn * 4); slc90e66_set_dma_mode()
80 int u_speed = 0, u_flag = 1 << drive->dn; slc90e66_set_dma_mode()
82 const u8 speed = drive->dma_mode; slc90e66_set_dma_mode()
91 u_speed = (speed - XFER_UDMA_0) << (drive->dn * 4); slc90e66_set_dma_mode()
109 drive->pio_mode = slc90e66_set_dma_mode()
112 drive->pio_mode = XFER_PIO_2; /* for SWDMA2 */ slc90e66_set_dma_mode()
114 slc90e66_set_pio_mode(hwif, drive); slc90e66_set_dma_mode()
H A Dsgiioc4.c120 static int sgiioc4_clearirq(ide_drive_t *drive) sgiioc4_clearirq() argument
123 ide_hwif_t *hwif = drive->hwif; sgiioc4_clearirq()
160 __func__, drive->name, pci_stat_cmd_reg); sgiioc4_clearirq()
162 __func__, drive->name, sgiioc4_clearirq()
177 static void sgiioc4_dma_start(ide_drive_t *drive) sgiioc4_dma_start() argument
179 ide_hwif_t *hwif = drive->hwif; sgiioc4_dma_start()
203 static int sgiioc4_dma_end(ide_drive_t *drive) sgiioc4_dma_end() argument
206 ide_hwif_t *hwif = drive->hwif; sgiioc4_dma_end()
219 __func__, drive->name, ioc4_dma); sgiioc4_dma_end()
239 drive->name); sgiioc4_dma_end()
251 __func__, drive->name, bc_dev, bc_mem); sgiioc4_dma_end()
258 static void sgiioc4_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) sgiioc4_set_dma_mode() argument
263 static int sgiioc4_dma_test_irq(ide_drive_t *drive) sgiioc4_dma_test_irq() argument
265 return sgiioc4_checkirq(drive->hwif); sgiioc4_dma_test_irq()
268 static void sgiioc4_dma_host_set(ide_drive_t *drive, int on) sgiioc4_dma_host_set() argument
271 sgiioc4_clearirq(drive); sgiioc4_dma_host_set()
274 static void sgiioc4_resetproc(ide_drive_t *drive) sgiioc4_resetproc() argument
276 struct ide_cmd *cmd = &drive->hwif->cmd; sgiioc4_resetproc()
278 sgiioc4_dma_end(drive); sgiioc4_resetproc()
279 ide_dma_unmap_sg(drive, cmd); sgiioc4_resetproc()
280 sgiioc4_clearirq(drive); sgiioc4_resetproc()
283 static void sgiioc4_dma_lost_irq(ide_drive_t *drive) sgiioc4_dma_lost_irq() argument
285 sgiioc4_resetproc(drive); sgiioc4_dma_lost_irq()
287 ide_dma_lost_irq(drive); sgiioc4_dma_lost_irq()
357 static void sgiioc4_configure_for_dma(int dma_direction, ide_drive_t *drive) sgiioc4_configure_for_dma() argument
360 ide_hwif_t *hwif = drive->hwif; sgiioc4_configure_for_dma()
369 "transfer was still active\n", __func__, drive->name); sgiioc4_configure_for_dma()
375 "still 1\n", __func__, drive->name); sgiioc4_configure_for_dma()
382 __func__, drive->name, ioc4_dma); sgiioc4_configure_for_dma()
388 "still 1\n", __func__, drive->name); sgiioc4_configure_for_dma()
414 static int sgiioc4_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) sgiioc4_build_dmatable() argument
416 ide_hwif_t *hwif = drive->hwif; sgiioc4_build_dmatable()
431 drive->name); sgiioc4_build_dmatable()
472 static int sgiioc4_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) sgiioc4_dma_setup() argument
477 if (sgiioc4_build_dmatable(drive, cmd) == 0) sgiioc4_dma_setup()
488 sgiioc4_configure_for_dma(ddir, drive); sgiioc4_dma_setup()
H A Dtx4939ide.c107 static void tx4939ide_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) tx4939ide_set_pio_mode() argument
109 int is_slave = drive->dn; tx4939ide_set_pio_mode()
111 const u8 pio = drive->pio_mode - XFER_PIO_0; tx4939ide_set_pio_mode()
115 pair = ide_get_pair_dev(drive); tx4939ide_set_pio_mode()
120 * Transfer Mode for this drive. tx4939ide_set_pio_mode()
128 static void tx4939ide_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) tx4939ide_set_dma_mode() argument
131 const u8 mode = drive->dma_mode; tx4939ide_set_dma_mode()
133 /* Update Data Transfer Mode for this drive. */ tx4939ide_set_dma_mode()
138 if (drive->dn) { tx4939ide_set_dma_mode()
174 static void tx4939ide_clear_irq(ide_drive_t *drive) tx4939ide_clear_irq() argument
184 if (drive->waiting_for_dma) tx4939ide_clear_irq()
186 hwif = drive->hwif; tx4939ide_clear_irq()
201 static void tx4939ide_dma_host_set(ide_drive_t *drive, int on) tx4939ide_dma_host_set() argument
203 ide_hwif_t *hwif = drive->hwif; tx4939ide_dma_host_set()
204 u8 unit = drive->dn; tx4939ide_dma_host_set()
235 static int tx4939ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) tx4939ide_build_dmatable() argument
237 ide_hwif_t *hwif = drive->hwif; tx4939ide_build_dmatable()
279 printk(KERN_ERR "%s: %s\n", drive->name, tx4939ide_build_dmatable()
288 static int tx4939ide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) tx4939ide_dma_setup() argument
290 ide_hwif_t *hwif = drive->hwif; tx4939ide_dma_setup()
295 if (tx4939ide_build_dmatable(drive, cmd) == 0) tx4939ide_dma_setup()
307 tx4939ide_writew(SECTOR_SIZE / 2, base, drive->dn ? tx4939ide_dma_setup()
315 static int tx4939ide_dma_end(ide_drive_t *drive) tx4939ide_dma_end() argument
317 ide_hwif_t *hwif = drive->hwif; tx4939ide_dma_end()
343 static int tx4939ide_dma_test_irq(ide_drive_t *drive) tx4939ide_dma_test_irq() argument
345 ide_hwif_t *hwif = drive->hwif; tx4939ide_dma_test_irq()
422 static void tx4939ide_tf_load_fixup(ide_drive_t *drive) tx4939ide_tf_load_fixup() argument
424 ide_hwif_t *hwif = drive->hwif; tx4939ide_tf_load_fixup()
426 u16 sysctl = hwif->select_data >> (drive->dn ? 16 : 0); tx4939ide_tf_load_fixup()
437 static void tx4939ide_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, tx4939ide_tf_load() argument
440 ide_tf_load(drive, tf, valid); tx4939ide_tf_load()
443 tx4939ide_tf_load_fixup(drive); tx4939ide_tf_load()
449 static void tx4939ide_input_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, tx4939ide_input_data_swap() argument
452 unsigned long port = drive->hwif->io_ports.data_addr; tx4939ide_input_data_swap()
461 static void tx4939ide_output_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, tx4939ide_output_data_swap() argument
464 unsigned long port = drive->hwif->io_ports.data_addr; tx4939ide_output_data_swap()
H A Dsiimage.c23 * drive to "Single". "Master" will hang.
114 static inline unsigned long siimage_seldev(ide_drive_t *drive, int r) siimage_seldev() argument
116 ide_hwif_t *hwif = drive->hwif; siimage_seldev()
118 u8 unit = drive->dn & 1; siimage_seldev()
187 * @drive: IDE device
195 static u8 sil_pata_udma_filter(ide_drive_t *drive) sil_pata_udma_filter() argument
197 ide_hwif_t *hwif = drive->hwif; sil_pata_udma_filter()
223 static u8 sil_sata_udma_filter(ide_drive_t *drive) sil_sata_udma_filter() argument
225 char *m = (char *)&drive->id[ATA_ID_PROD]; sil_sata_udma_filter()
233 * @drive: drive
239 static void sil_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) sil_set_pio_mode() argument
245 ide_drive_t *pair = ide_get_pair_dev(drive); sil_set_pio_mode()
248 unsigned long addr = siimage_seldev(drive, 0x04); sil_set_pio_mode()
251 const u8 pio = drive->pio_mode - XFER_PIO_0; sil_set_pio_mode()
257 u8 unit = drive->dn & 1; sil_set_pio_mode()
281 if (ide_pio_need_iordy(drive, pio)) { sil_set_pio_mode()
293 * @drive: drive
298 static void sil_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) sil_set_dma_mode() argument
307 u8 mode = 0, unit = drive->dn & 1; sil_set_dma_mode()
311 unsigned long ma = siimage_seldev(drive, 0x08); sil_set_dma_mode()
312 unsigned long ua = siimage_seldev(drive, 0x0C); sil_set_dma_mode()
313 const u8 speed = drive->dma_mode; sil_set_dma_mode()
353 * @drive: drive we are testing
359 static int siimage_mmio_dma_test_irq(ide_drive_t *drive) siimage_mmio_dma_test_irq() argument
361 ide_hwif_t *hwif = drive->hwif; siimage_mmio_dma_test_irq()
377 drive->name, sata_error, watchdog, __func__); siimage_mmio_dma_test_irq()
393 static int siimage_dma_test_irq(ide_drive_t *drive) siimage_dma_test_irq() argument
395 if (drive->hwif->host_flags & IDE_HFLAG_MMIO) siimage_dma_test_irq()
396 return siimage_mmio_dma_test_irq(drive); siimage_dma_test_irq()
398 return ide_dma_test_irq(drive); siimage_dma_test_irq()
403 * @drive: drive we are resetting
409 static int sil_sata_reset_poll(ide_drive_t *drive) sil_sata_reset_poll() argument
411 ide_hwif_t *hwif = drive->hwif; sil_sata_reset_poll()
431 * @drive: IDE device being reset
437 static void sil_sata_pre_reset(ide_drive_t *drive) sil_sata_pre_reset() argument
439 if (drive->media == ide_disk) { sil_sata_pre_reset()
440 drive->special_flags &= sil_sata_pre_reset()
605 static int is_dev_seagate_sata(ide_drive_t *drive) is_dev_seagate_sata() argument
607 const char *s = (const char *)&drive->id[ATA_ID_PROD]; is_dev_seagate_sata()
614 "errata fix\n", drive->name); is_dev_seagate_sata()
623 * @drive: drive
625 * Called after drive probe we use this to decide whether the
630 static void sil_quirkproc(ide_drive_t *drive) sil_quirkproc() argument
632 ide_hwif_t *hwif = drive->hwif; sil_quirkproc()
635 if (!is_sata(hwif) || !is_dev_seagate_sata(drive)) sil_quirkproc()
H A Daec62xx.c84 static void aec6210_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) aec6210_set_mode() argument
92 const u8 speed = drive->dma_mode; aec6210_set_mode()
96 /* 0x40|(2*drive->dn): Active, 0x41|(2*drive->dn): Recovery */ aec6210_set_mode()
97 pci_read_config_word(dev, 0x40|(2*drive->dn), &d_conf); aec6210_set_mode()
100 pci_write_config_word(dev, 0x40|(2*drive->dn), d_conf); aec6210_set_mode()
105 tmp1 = ((0x00 << (2*drive->dn)) | (ultra & ~(3 << (2*drive->dn)))); aec6210_set_mode()
107 tmp2 = ((ultra_conf << (2*drive->dn)) | (tmp1 & ~(3 << (2*drive->dn)))); aec6210_set_mode()
112 static void aec6260_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) aec6260_set_mode() argument
117 u8 unit = drive->dn & 1; aec6260_set_mode()
120 const u8 speed = drive->dma_mode; aec6260_set_mode()
125 pci_read_config_byte(dev, 0x40|drive->dn, &drive_conf); aec6260_set_mode()
127 pci_write_config_byte(dev, 0x40|drive->dn, drive_conf); aec6260_set_mode()
137 static void aec_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) aec_set_pio_mode() argument
139 drive->dma_mode = drive->pio_mode; aec_set_pio_mode()
140 hwif->port_ops->set_dma_mode(hwif, drive); aec_set_pio_mode()
H A Dcy82c693.c56 static void cy82c693_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cy82c693_set_dma_mode() argument
58 const u8 mode = drive->dma_mode; cy82c693_set_dma_mode()
83 static void cy82c693_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cy82c693_set_pio_mode() argument
93 if (drive->dn > 1) { /* drive is on the secondary channel */ cy82c693_set_pio_mode()
98 drive->name); cy82c693_set_pio_mode()
103 ide_timing_compute(drive, drive->pio_mode, &t, T, 1); cy82c693_set_pio_mode()
111 if ((drive->dn & 1) == 0) { cy82c693_set_pio_mode()
113 * set master drive cy82c693_set_pio_mode()
129 * set slave drive cy82c693_set_pio_mode()
144 if (drive->dn > 1) cy82c693_set_pio_mode()
H A Dide-4drives.c14 static void ide_4drives_init_dev(ide_drive_t *drive) ide_4drives_init_dev() argument
16 if (drive->hwif->channel) ide_4drives_init_dev()
17 drive->select ^= 0x20; ide_4drives_init_dev()
H A Dcmd640.c58 * Version 0.07 Changed to more conservative drive tuning policy.
162 * Registers and masks for easy access by drive index:
173 * Current cmd640 timing values for each drive.
337 * Returns 1 if an IDE interface/drive exists at 0x170,
379 static void __set_prefetch_mode(ide_drive_t *drive, int mode) __set_prefetch_mode() argument
383 drive->dev_flags |= IDE_DFLAG_NO_UNMASK; __set_prefetch_mode()
384 drive->dev_flags &= ~IDE_DFLAG_UNMASK; __set_prefetch_mode()
386 drive->dev_flags &= ~IDE_DFLAG_NO_IO_32BIT; __set_prefetch_mode()
388 drive->dev_flags &= ~IDE_DFLAG_NO_UNMASK; __set_prefetch_mode()
389 drive->dev_flags |= IDE_DFLAG_NO_IO_32BIT; __set_prefetch_mode()
390 drive->io_32bit = 0; __set_prefetch_mode()
396 * Check whether prefetch is on for a drive,
399 static void __init check_prefetch(ide_drive_t *drive, unsigned int index) check_prefetch() argument
403 __set_prefetch_mode(drive, (b & prefetch_masks[index]) ? 0 : 1); check_prefetch()
408 * Sets prefetch mode for a drive.
410 static void set_prefetch_mode(ide_drive_t *drive, unsigned int index, int mode) set_prefetch_mode() argument
418 __set_prefetch_mode(drive, mode); set_prefetch_mode()
428 * Dump out current drive clocks settings
456 * for a drive into the cmd640 chipset registers to active them.
458 static void program_drive_counts(ide_drive_t *drive, unsigned int index) program_drive_counts() argument
466 * Set up address setup count and drive read/write timing registers. program_drive_counts()
468 * each drive. Secondary interface has one common set of registers, program_drive_counts()
472 ide_drive_t *peer = ide_get_pair_dev(drive); program_drive_counts()
512 * Set a specific pio_mode for a drive
514 static void cmd640_set_mode(ide_drive_t *drive, unsigned int index, cmd640_set_mode() argument
566 * In a perfect world, we might set the drive pio mode here cmd640_set_mode()
573 program_drive_counts(drive, index); cmd640_set_mode()
576 static void cmd640_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cmd640_set_pio_mode() argument
579 const u8 pio = drive->pio_mode - XFER_PIO_0; cmd640_set_pio_mode()
590 drive->name, (pio & 1) ? "en" : "dis"); cmd640_set_pio_mode()
594 set_prefetch_mode(drive, index, pio & 1); cmd640_set_pio_mode()
596 drive->name, (pio & 1) ? "en" : "dis"); cmd640_set_pio_mode()
600 cycle_time = ide_pio_cycle_time(drive, pio); cmd640_set_pio_mode()
601 cmd640_set_mode(drive, index, pio, cycle_time); cmd640_set_pio_mode()
604 drive->name, pio, cycle_time); cmd640_set_pio_mode()
610 static void __init cmd640_init_dev(ide_drive_t *drive) cmd640_init_dev() argument
612 unsigned int i = drive->hwif->channel * 2 + (drive->dn & 1); cmd640_init_dev()
617 * This way, the drive identify code has a better chance. cmd640_init_dev()
622 program_drive_counts(drive, i); cmd640_init_dev()
623 set_prefetch_mode(drive, i, 0); cmd640_init_dev()
624 printk(KERN_INFO DRV_NAME ": drive%d timings/prefetch cleared\n", i); cmd640_init_dev()
627 * Set the drive unmask flags to match the prefetch setting. cmd640_init_dev()
629 check_prefetch(drive, i); cmd640_init_dev()
630 printk(KERN_INFO DRV_NAME ": drive%d timings/prefetch(%s) preserved\n", cmd640_init_dev()
631 i, (drive->dev_flags & IDE_DFLAG_NO_IO_32BIT) ? "off" : "on"); cmd640_init_dev()
792 * for access to the drive's command register block, cmd640x_init()
H A Dcs5530.c45 * @drive: drive
53 static void cs5530_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5530_set_pio_mode() argument
57 const u8 pio = drive->pio_mode - XFER_PIO_0; cs5530_set_pio_mode()
59 outl(cs5530_pio_timings[format][pio], basereg + ((drive->dn & 1)<<3)); cs5530_set_pio_mode()
64 * @drive: drive
66 * cs5530_udma_filter() does UDMA mask filtering for the given drive
71 * different timings can still be chosen for each drive. We could
74 * by looking at our mate drive to see what it is capable of, before
75 * choosing a mode for our own drive.
81 static u8 cs5530_udma_filter(ide_drive_t *drive) cs5530_udma_filter() argument
83 ide_hwif_t *hwif = drive->hwif; cs5530_udma_filter()
84 ide_drive_t *mate = ide_get_pair_dev(drive); cs5530_udma_filter()
103 static void cs5530_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5530_set_dma_mode() argument
108 switch (drive->dma_mode) { cs5530_set_dma_mode()
119 if ((drive-> dn & 1) == 0) { /* are we configuring drive0? */ cs5530_set_dma_mode()
226 * performs channel-specific pre-initialization before drive probing.
H A Dide-floppy_proc.c10 ide_drive_t*drive = (ide_drive_t *)m->private; idefloppy_capacity_proc_show() local
12 seq_printf(m, "%llu\n", (long long)ide_gd_capacity(drive)); idefloppy_capacity_proc_show()
H A Dide-acpi.c201 * + _their_ children == drive objects */ ide_acpi_hwif_get_handle()
211 * do_drive_get_GTF - get the drive bootup default taskfile settings
212 * @drive: the drive for which the taskfile settings should be retrieved
225 static int do_drive_get_GTF(ide_drive_t *drive, do_drive_get_GTF() argument
238 if (!drive->acpidata->obj_handle) { do_drive_get_GTF()
239 DEBPRINT("No ACPI object found for %s\n", drive->name); do_drive_get_GTF()
249 status = acpi_evaluate_object(drive->acpidata->obj_handle, "_GTF", do_drive_get_GTF()
298 * do_drive_set_taskfiles - write the drive taskfile settings from _GTF
299 * @drive: the drive to which the taskfile command should be sent
306 static int do_drive_set_taskfiles(ide_drive_t *drive, do_drive_set_taskfiles() argument
338 err = ide_no_data_taskfile(drive, &cmd); do_drive_set_taskfiles()
350 * ide_acpi_exec_tfs - get then write drive taskfile settings
351 * @drive: the drive for which the taskfile settings should be
361 int ide_acpi_exec_tfs(ide_drive_t *drive) ide_acpi_exec_tfs() argument
368 DEBPRINT("call get_GTF, drive=%s port=%d\n", drive->name, drive->dn); ide_acpi_exec_tfs()
370 ret = do_drive_get_GTF(drive, &gtf_length, &gtf_address, &obj_loc); ide_acpi_exec_tfs()
376 DEBPRINT("call set_taskfiles, drive=%s\n", drive->name); ide_acpi_exec_tfs()
378 ret = do_drive_set_taskfiles(drive, gtf_length, gtf_address); ide_acpi_exec_tfs()
471 * Unfortunately drive->id is a mangled version which we can't readily
482 /* Give the GTM buffer + drive Identify data to the channel via the ide_acpi_push_timing()
517 ide_drive_t *drive; ide_acpi_set_state() local
529 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
530 if (drive->acpidata->obj_handle) ide_port_for_each_present_dev()
531 acpi_bus_set_power(drive->acpidata->obj_handle, ide_port_for_each_present_dev()
544 * The ACPI spec is not quite clear when the drive identify buffer
546 * is not the best of ideas as the drive might already being put to
567 ide_drive_t *drive; ide_acpi_port_init_devices() local
582 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
586 drive->name, hwif->channel, drive->dn & 1); ide_port_for_each_present_dev()
590 drive->dn & 1); ide_port_for_each_present_dev()
592 DEBPRINT("drive %s handle 0x%p\n", drive->name, dev_handle); ide_port_for_each_present_dev()
594 drive->acpidata->obj_handle = dev_handle; ide_port_for_each_present_dev()
598 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
599 err = taskfile_lib_get_identify(drive, drive->acpidata->idbuff); ide_port_for_each_present_dev()
602 drive->name, err); ide_port_for_each_present_dev()
618 ide_port_for_each_present_dev(i, drive, hwif) { ide_port_for_each_present_dev()
619 ide_acpi_exec_tfs(drive); ide_port_for_each_present_dev()
H A Dcmd64x.c54 static void cmd64x_program_timings(ide_drive_t *drive, u8 mode) cmd64x_program_timings() argument
56 ide_hwif_t *hwif = drive->hwif; cmd64x_program_timings()
57 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); cmd64x_program_timings()
68 ide_timing_compute(drive, mode, &t, T, 0); cmd64x_program_timings()
88 pci_write_config_byte(dev, drwtim_regs[drive->dn], cmd64x_program_timings()
93 * for each drive and the hardware selects the slowest timing itself. cmd64x_program_timings()
98 ide_drive_t *pair = ide_get_pair_dev(drive); cmd64x_program_timings()
120 (void) pci_read_config_byte (dev, arttim_regs[drive->dn], &arttim); cmd64x_program_timings()
125 (void) pci_write_config_byte(dev, arttim_regs[drive->dn], arttim); cmd64x_program_timings()
129 * Attempts to set drive's PIO mode.
133 static void cmd64x_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cmd64x_set_pio_mode() argument
135 const u8 pio = drive->pio_mode - XFER_PIO_0; cmd64x_set_pio_mode()
144 cmd64x_program_timings(drive, XFER_PIO_0 + pio); cmd64x_set_pio_mode()
147 static void cmd64x_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cmd64x_set_dma_mode() argument
150 u8 unit = drive->dn & 0x01; cmd64x_set_dma_mode()
152 const u8 speed = drive->dma_mode; cmd64x_set_dma_mode()
179 cmd64x_program_timings(drive, speed); cmd64x_set_dma_mode()
186 static void cmd648_clear_irq(ide_drive_t *drive) cmd648_clear_irq() argument
188 ide_hwif_t *hwif = drive->hwif; cmd648_clear_irq()
200 static void cmd64x_clear_irq(ide_drive_t *drive) cmd64x_clear_irq() argument
202 ide_hwif_t *hwif = drive->hwif; cmd64x_clear_irq()
249 static int cmd646_1_dma_end(ide_drive_t *drive) cmd646_1_dma_end() argument
251 ide_hwif_t *hwif = drive->hwif; cmd646_1_dma_end()
H A Dcs5520.c6 * typical IDE controllers they do bus mastering with the drive in
10 * drive for the right PIO mode. We must also ignore all the blacklists
11 * and the drive bus mastering DMA information.
60 static void cs5520_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5520_set_pio_mode() argument
63 int controller = drive->dn > 1 ? 1 : 0; cs5520_set_pio_mode()
64 const u8 pio = drive->pio_mode - XFER_PIO_0; cs5520_set_pio_mode()
75 pci_write_config_byte(pdev, 0x64 + 4*controller + (drive->dn&1), cs5520_set_pio_mode()
79 pci_write_config_byte(pdev, 0x66 + 4*controller + (drive->dn&1), cs5520_set_pio_mode()
84 static void cs5520_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) cs5520_set_dma_mode() argument
88 drive->pio_mode = XFER_PIO_0 + 0; cs5520_set_dma_mode()
89 cs5520_set_pio_mode(hwif, drive); cs5520_set_dma_mode()
H A Dalim15x3.c51 static void ali_fifo_control(ide_hwif_t *hwif, ide_drive_t *drive, int on) ali_fifo_control() argument
56 int shift = 4 * (drive->dn & 1); ali_fifo_control()
64 static void ali_program_timings(ide_hwif_t *hwif, ide_drive_t *drive, ali_program_timings() argument
70 u8 unit = drive->dn & 1, udma; ali_program_timings()
97 * @drive: drive
102 static void ali_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) ali_set_pio_mode() argument
104 ide_drive_t *pair = ide_get_pair_dev(drive); ali_set_pio_mode()
109 ide_timing_compute(drive, drive->pio_mode, &t, T, 1); ali_set_pio_mode()
126 ali_fifo_control(hwif, drive, (drive->media == ide_disk) ? 0x05 : 0x00); ali_set_pio_mode()
128 ali_program_timings(hwif, drive, &t, 0); ali_set_pio_mode()
133 * @drive: IDE device
143 static u8 ali_udma_filter(ide_drive_t *drive) ali_udma_filter() argument
146 if (drive->media != ide_disk) ali_udma_filter()
149 strstr((char *)&drive->id[ATA_ID_PROD], "WDC ")) ali_udma_filter()
153 return drive->hwif->ultra_mask; ali_udma_filter()
159 * @drive: drive
164 static void ali_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) ali_set_dma_mode() argument
168 ide_drive_t *pair = ide_get_pair_dev(drive); ali_set_dma_mode()
171 const u8 speed = drive->dma_mode; ali_set_dma_mode()
176 ide_timing_compute(drive, drive->dma_mode, &t, T, 1); ali_set_dma_mode()
190 ali_program_timings(hwif, drive, &t, 0); ali_set_dma_mode()
192 ali_program_timings(hwif, drive, NULL, ali_set_dma_mode()
204 * @drive: target device
210 static int ali_dma_check(ide_drive_t *drive, struct ide_cmd *cmd) ali_dma_check() argument
212 if (m5229_revision < 0xC2 && drive->media != ide_disk) { ali_dma_check()
H A Dtc86c001.c17 static void tc86c001_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) tc86c001_set_mode() argument
19 unsigned long scr_port = hwif->config_data + (drive->dn ? 0x02 : 0x00); tc86c001_set_mode()
21 const u8 speed = drive->dma_mode; tc86c001_set_mode()
45 static void tc86c001_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) tc86c001_set_pio_mode() argument
47 drive->dma_mode = drive->pio_mode; tc86c001_set_pio_mode()
48 tc86c001_set_mode(hwif, drive); tc86c001_set_pio_mode()
65 static int tc86c001_timer_expiry(ide_drive_t *drive) tc86c001_timer_expiry() argument
67 ide_hwif_t *hwif = drive->hwif; tc86c001_timer_expiry()
76 unsigned long twcr_port = sc_base + (drive->dn ? 0x06 : 0x04); tc86c001_timer_expiry()
80 "attempting recovery...\n", drive->name); tc86c001_timer_expiry()
106 return expiry(drive); tc86c001_timer_expiry()
112 static void tc86c001_dma_start(ide_drive_t *drive) tc86c001_dma_start() argument
114 ide_hwif_t *hwif = drive->hwif; tc86c001_dma_start()
116 unsigned long twcr_port = sc_base + (drive->dn ? 0x06 : 0x04); tc86c001_dma_start()
131 ide_dma_start(drive); tc86c001_dma_start()
H A Dtriflex.c37 static void triflex_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) triflex_set_mode() argument
42 u8 channel_offset = hwif->channel ? 0x74 : 0x70, unit = drive->dn & 1; triflex_set_mode()
46 switch (drive->dma_mode) { triflex_set_mode()
84 static void triflex_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) triflex_set_pio_mode() argument
86 drive->dma_mode = drive->pio_mode; triflex_set_pio_mode()
87 triflex_set_mode(hwif, drive); triflex_set_pio_mode()
H A Dide-timings.c81 u16 ide_pio_cycle_time(ide_drive_t *drive, u8 pio) ide_pio_cycle_time() argument
83 u16 *id = drive->id; ide_pio_cycle_time()
88 if (ata_id_has_iordy(drive->id)) ide_pio_cycle_time()
144 int ide_timing_compute(ide_drive_t *drive, u8 speed, ide_timing_compute() argument
147 u16 *id = drive->id; ide_timing_compute()
163 * If the drive is an EIDE drive, it can tell us it needs extended ide_timing_compute()
166 if (id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */ ide_timing_compute()
192 ide_timing_compute(drive, drive->pio_mode, &p, T, UT); ide_timing_compute()
H A Dtrm290.c145 static void trm290_prepare_drive (ide_drive_t *drive, unsigned int use_dma) trm290_prepare_drive() argument
147 ide_hwif_t *hwif = drive->hwif; trm290_prepare_drive()
164 if (drive->dev_flags & IDE_DFLAG_PRESENT) { trm290_prepare_drive()
174 static void trm290_dev_select(ide_drive_t *drive) trm290_dev_select() argument
176 trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); trm290_dev_select()
178 outb(drive->select | ATA_DEVICE_OBS, drive->hwif->io_ports.device_addr); trm290_dev_select()
181 static int trm290_dma_check(ide_drive_t *drive, struct ide_cmd *cmd) trm290_dma_check() argument
192 static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) trm290_dma_setup() argument
194 ide_hwif_t *hwif = drive->hwif; trm290_dma_setup()
197 count = ide_build_dmatable(drive, cmd); trm290_dma_setup()
209 static void trm290_dma_start(ide_drive_t *drive) trm290_dma_start() argument
211 trm290_prepare_drive(drive, 1); trm290_dma_start()
214 static int trm290_dma_end(ide_drive_t *drive) trm290_dma_end() argument
216 u16 status = inw(drive->hwif->dma_base + 2); trm290_dma_end()
218 trm290_prepare_drive(drive, 0); trm290_dma_end()
223 static int trm290_dma_test_irq(ide_drive_t *drive) trm290_dma_test_irq() argument
225 u16 status = inw(drive->hwif->dma_base + 2); trm290_dma_test_irq()
230 static void trm290_dma_host_set(ide_drive_t *drive, int on) trm290_dma_host_set() argument
H A Dpiix.c33 * drive hotswap [NOT YET SUPPORTED]
63 * @drive: drive
68 static void piix_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) piix_set_pio_mode() argument
71 int is_slave = drive->dn & 1; piix_set_pio_mode()
79 const u8 pio = drive->pio_mode - XFER_PIO_0; piix_set_pio_mode()
99 if (drive->media == ide_disk) piix_set_pio_mode()
101 if (ide_pio_need_iordy(drive, pio)) piix_set_pio_mode()
131 * @drive: drive
137 static void piix_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) piix_set_dma_mode() argument
141 int a_speed = 3 << (drive->dn * 4); piix_set_dma_mode()
142 int u_flag = 1 << drive->dn; piix_set_dma_mode()
143 int v_flag = 0x01 << drive->dn; piix_set_dma_mode()
144 int w_flag = 0x10 << drive->dn; piix_set_dma_mode()
149 const u8 speed = drive->dma_mode; piix_set_dma_mode()
161 u_speed = min_t(u8, 2 - (udma & 1), udma) << (drive->dn * 4); piix_set_dma_mode()
190 drive->pio_mode = piix_set_dma_mode()
193 drive->pio_mode = XFER_PIO_2; /* for SWDMA2 */ piix_set_dma_mode()
195 piix_set_pio_mode(hwif, drive); piix_set_dma_mode()
219 * @drive: IDE drive
225 static void ich_clear_irq(ide_drive_t *drive) ich_clear_irq() argument
227 ide_hwif_t *hwif = drive->hwif; ich_clear_irq()
235 if (drive->waiting_for_dma || hwif->dma_base == 0) ich_clear_irq()
H A Dfalconide.c66 static void falconide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, falconide_input_data() argument
69 unsigned long data_addr = drive->hwif->io_ports.data_addr; falconide_input_data()
71 if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { falconide_input_data()
79 static void falconide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, falconide_output_data() argument
82 unsigned long data_addr = drive->hwif->io_ports.data_addr; falconide_output_data()
84 if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { falconide_output_data()
H A Dq40ide.c73 static void q40ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, q40ide_input_data() argument
76 unsigned long data_addr = drive->hwif->io_ports.data_addr; q40ide_input_data()
78 if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { q40ide_input_data()
86 static void q40ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, q40ide_output_data() argument
89 unsigned long data_addr = drive->hwif->io_ports.data_addr; q40ide_output_data()
91 if (drive->media == ide_disk && cmd && (cmd->tf_flags & IDE_TFLAG_FS)) { q40ide_output_data()
H A Dide-io-std.c77 void ide_dev_select(ide_drive_t *drive) ide_dev_select() argument
79 ide_hwif_t *hwif = drive->hwif; ide_dev_select()
80 u8 select = drive->select | ATA_DEVICE_OBS; ide_dev_select()
89 void ide_tf_load(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) ide_tf_load() argument
91 ide_hwif_t *hwif = drive->hwif; ide_tf_load()
116 void ide_tf_read(ide_drive_t *drive, struct ide_taskfile *tf, u8 valid) ide_tf_read() argument
118 ide_hwif_t *hwif = drive->hwif; ide_tf_read()
164 void ide_input_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf, ide_input_data() argument
167 ide_hwif_t *hwif = drive->hwif; ide_input_data()
171 u8 io_32bit = drive->io_32bit; ide_input_data()
208 void ide_output_data(ide_drive_t *drive, struct ide_cmd *cmd, void *buf, ide_output_data() argument
211 ide_hwif_t *hwif = drive->hwif; ide_output_data()
215 u8 io_32bit = drive->io_32bit; ide_output_data()
H A Dicside.c165 * we write the command to the drive.
167 static void icside_maskproc(ide_drive_t *drive, int mask) icside_maskproc() argument
169 ide_hwif_t *hwif = drive->hwif; icside_maskproc()
207 * one drive can be accessed at one time. NOTE! We do not enforce that
216 * MW DMA specs that the drive provides in the IDENTIFY command.
237 static void icside_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) icside_set_dma_mode() argument
241 const u8 xfer_mode = drive->dma_mode; icside_set_dma_mode()
269 if (use_dma_info && drive->id[ATA_ID_EIDE_DMA_TIME] > cycle_time) icside_set_dma_mode()
270 cycle_time = drive->id[ATA_ID_EIDE_DMA_TIME]; icside_set_dma_mode()
272 ide_set_drivedata(drive, (void *)cycle_time); icside_set_dma_mode()
275 drive->name, ide_xfer_verbose(xfer_mode), icside_set_dma_mode()
284 static void icside_dma_host_set(ide_drive_t *drive, int on) icside_dma_host_set() argument
288 static int icside_dma_end(ide_drive_t *drive) icside_dma_end() argument
290 ide_hwif_t *hwif = drive->hwif; icside_dma_end()
298 static void icside_dma_start(ide_drive_t *drive) icside_dma_start() argument
300 ide_hwif_t *hwif = drive->hwif; icside_dma_start()
308 static int icside_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) icside_dma_setup() argument
310 ide_hwif_t *hwif = drive->hwif; icside_dma_setup()
328 icside_maskproc(drive, 0); icside_dma_setup()
336 * Select the correct timing for this drive. icside_dma_setup()
338 set_dma_speed(ec->dma, (unsigned long)ide_get_drivedata(drive)); icside_dma_setup()
350 static int icside_dma_test_irq(ide_drive_t *drive) icside_dma_test_irq() argument
352 ide_hwif_t *hwif = drive->hwif; icside_dma_test_irq()
H A Dau1xxx-ide.c93 static void au1xxx_input_data(ide_drive_t *drive, struct ide_cmd *cmd, au1xxx_input_data() argument
96 auide_insw(drive->hwif->io_ports.data_addr, buf, (len + 1) / 2); au1xxx_input_data()
99 static void au1xxx_output_data(ide_drive_t *drive, struct ide_cmd *cmd, au1xxx_output_data() argument
102 auide_outsw(drive->hwif->io_ports.data_addr, buf, (len + 1) / 2); au1xxx_output_data()
106 static void au1xxx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) au1xxx_set_pio_mode() argument
110 switch (drive->pio_mode - XFER_PIO_0) { au1xxx_set_pio_mode()
167 static void auide_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) auide_set_dma_mode() argument
171 switch (drive->dma_mode) { auide_set_dma_mode()
215 static int auide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) auide_build_dmatable() argument
217 ide_hwif_t *hwif = drive->hwif; auide_build_dmatable()
224 ahwif->drive = drive; auide_build_dmatable()
241 drive->name); auide_build_dmatable()
278 static int auide_dma_end(ide_drive_t *drive) auide_dma_end() argument
283 static void auide_dma_start(ide_drive_t *drive ) auide_dma_start()
288 static int auide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) auide_dma_setup() argument
290 if (auide_build_dmatable(drive, cmd) == 0) auide_dma_setup()
296 static int auide_dma_test_irq(ide_drive_t *drive) auide_dma_test_irq() argument
301 drive->waiting_for_dma++; auide_dma_test_irq()
302 if (drive->waiting_for_dma >= DMA_WAIT_TIMEOUT) { auide_dma_test_irq()
304 drive->name); auide_dma_test_irq()
311 static void auide_dma_host_set(ide_drive_t *drive, int on) auide_dma_host_set() argument
H A Dserverworks.c55 static int check_in_drive_lists (ide_drive_t *drive, const char **list) check_in_drive_lists() argument
57 char *m = (char *)&drive->id[ATA_ID_PROD]; check_in_drive_lists()
65 static u8 svwks_udma_filter(ide_drive_t *drive) svwks_udma_filter() argument
67 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); svwks_udma_filter()
81 if (mode > 2 && check_in_drive_lists(drive, svwks_bad_ata100)) svwks_udma_filter()
109 static void svwks_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) svwks_set_pio_mode() argument
115 const u8 pio = drive->pio_mode - XFER_PIO_0; svwks_set_pio_mode()
117 pci_write_config_byte(dev, drive_pci[drive->dn], pio_modes[pio]); svwks_set_pio_mode()
124 csb_pio &= ~(0x0f << (4 * drive->dn)); svwks_set_pio_mode()
125 csb_pio |= (pio << (4 * drive->dn)); svwks_set_pio_mode()
131 static void svwks_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) svwks_set_dma_mode() argument
138 const u8 speed = drive->dma_mode; svwks_set_dma_mode()
139 u8 unit = drive->dn & 1; svwks_set_dma_mode()
147 ultra_enable &= ~(0x01 << drive->dn); svwks_set_dma_mode()
152 ultra_enable |= (0x01 << drive->dn); svwks_set_dma_mode()
156 pci_write_config_byte(dev, drive_pci2[drive->dn], dma_timing); svwks_set_dma_mode()
H A Dali14xx.c71 /* timing parameter registers for each drive */
73 {0x03, 0x26, 0x04, 0x27}, /* drive 0 */
74 {0x05, 0x28, 0x06, 0x29}, /* drive 1 */
75 {0x2b, 0x30, 0x2c, 0x31}, /* drive 2 */
76 {0x2d, 0x32, 0x2e, 0x33}, /* drive 3 */
108 * Set PIO mode for the specified drive.
112 static void ali14xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) ali14xx_set_pio_mode() argument
119 const u8 pio = drive->pio_mode - XFER_PIO_0; ali14xx_set_pio_mode()
123 time1 = ide_pio_cycle_time(drive, pio); ali14xx_set_pio_mode()
132 drive->name, pio, time1, time2, param1, param2, param3, param4); ali14xx_set_pio_mode()
135 driveNum = (drive->hwif->index << 1) + (drive->dn & 1); ali14xx_set_pio_mode()
H A Dpmac.c409 ((void __iomem *)((drive)->hwif->io_ports.data_addr + (x)))
416 static void pmac_ide_apply_timings(ide_drive_t *drive) pmac_ide_apply_timings() argument
418 ide_hwif_t *hwif = drive->hwif; pmac_ide_apply_timings()
421 if (drive->dn & 1) pmac_ide_apply_timings()
433 static void pmac_ide_kauai_apply_timings(ide_drive_t *drive) pmac_ide_kauai_apply_timings() argument
435 ide_hwif_t *hwif = drive->hwif; pmac_ide_kauai_apply_timings()
438 if (drive->dn & 1) { pmac_ide_kauai_apply_timings()
449 * Force an update of controller timing values for a given drive
452 pmac_ide_do_update_timings(ide_drive_t *drive) pmac_ide_do_update_timings() argument
454 ide_hwif_t *hwif = drive->hwif; pmac_ide_do_update_timings()
460 pmac_ide_kauai_apply_timings(drive); pmac_ide_do_update_timings()
462 pmac_ide_apply_timings(drive); pmac_ide_do_update_timings()
465 static void pmac_dev_select(ide_drive_t *drive) pmac_dev_select() argument
467 pmac_ide_apply_timings(drive); pmac_dev_select()
469 writeb(drive->select | ATA_DEVICE_OBS, pmac_dev_select()
470 (void __iomem *)drive->hwif->io_ports.device_addr); pmac_dev_select()
473 static void pmac_kauai_dev_select(ide_drive_t *drive) pmac_kauai_dev_select() argument
475 pmac_ide_kauai_apply_timings(drive); pmac_kauai_dev_select()
477 writeb(drive->select | ATA_DEVICE_OBS, pmac_kauai_dev_select()
478 (void __iomem *)drive->hwif->io_ports.device_addr); pmac_kauai_dev_select()
496 * Old tuning functions (called on hdparm -p), sets up drive PIO timings
498 static void pmac_ide_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) pmac_ide_set_pio_mode() argument
501 const u8 pio = drive->pio_mode - XFER_PIO_0; pmac_ide_set_pio_mode()
508 /* which drive is it ? */ pmac_ide_set_pio_mode()
509 timings = &pmif->timings[drive->dn & 1]; pmac_ide_set_pio_mode()
512 cycle_time = ide_pio_cycle_time(drive, pio); pmac_ide_set_pio_mode()
570 drive->name, pio, *timings); pmac_ide_set_pio_mode()
574 pmac_ide_do_update_timings(drive); pmac_ide_set_pio_mode()
645 set_timings_mdma(ide_drive_t *drive, int intf_type, u32 *timings, u32 *timings2, set_timings_mdma() argument
648 u16 *id = drive->id; set_timings_mdma()
664 /* Check if drive provides explicit DMA cycle time */ set_timings_mdma()
701 drive->name, cycleTime, accessTime, recTime); set_timings_mdma()
774 drive->name, speed & 0xf, *timings); set_timings_mdma()
778 static void pmac_ide_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) pmac_ide_set_dma_mode() argument
783 u8 unit = drive->dn & 1; pmac_ide_set_dma_mode()
784 const u8 speed = drive->dma_mode; pmac_ide_set_dma_mode()
804 set_timings_mdma(drive, pmif->kind, &tl[0], &tl[1], speed); pmac_ide_set_dma_mode()
813 pmac_ide_do_update_timings(drive); pmac_ide_set_dma_mode()
907 /* Sanitize drive timings */ pmac_ide_do_resume()
945 static void pmac_ide_init_dev(ide_drive_t *drive) pmac_ide_init_dev() argument
947 ide_hwif_t *hwif = drive->hwif; pmac_ide_init_dev()
952 drive->dev_flags &= ~IDE_DFLAG_NOPROBE; pmac_ide_init_dev()
955 drive->dev_flags |= IDE_DFLAG_NOPROBE; pmac_ide_init_dev()
1457 static int pmac_ide_build_dmatable(ide_drive_t *drive, struct ide_cmd *cmd) pmac_ide_build_dmatable() argument
1459 ide_hwif_t *hwif = drive->hwif; pmac_ide_build_dmatable()
1487 "switching to PIO on Ohare chipset\n", drive->name); pmac_ide_build_dmatable()
1497 drive->name); pmac_ide_build_dmatable()
1525 printk(KERN_DEBUG "%s: empty DMA table?\n", drive->name); pmac_ide_build_dmatable()
1534 static int pmac_ide_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) pmac_ide_dma_setup() argument
1536 ide_hwif_t *hwif = drive->hwif; pmac_ide_dma_setup()
1538 u8 unit = drive->dn & 1, ata4 = (pmif->kind == controller_kl_ata4); pmac_ide_dma_setup()
1541 if (pmac_ide_build_dmatable(drive, cmd) == 0) pmac_ide_dma_setup()
1556 * to the drive.
1559 pmac_ide_dma_start(ide_drive_t *drive) pmac_ide_dma_start() argument
1561 ide_hwif_t *hwif = drive->hwif; pmac_ide_dma_start()
1576 pmac_ide_dma_end (ide_drive_t *drive) pmac_ide_dma_end() argument
1578 ide_hwif_t *hwif = drive->hwif; pmac_ide_dma_end()
1600 pmac_ide_dma_test_irq (ide_drive_t *drive) pmac_ide_dma_test_irq() argument
1602 ide_hwif_t *hwif = drive->hwif; pmac_ide_dma_test_irq()
1649 static void pmac_ide_dma_host_set(ide_drive_t *drive, int on) pmac_ide_dma_host_set() argument
1654 pmac_ide_dma_lost_irq (ide_drive_t *drive) pmac_ide_dma_lost_irq() argument
1656 ide_hwif_t *hwif = drive->hwif; pmac_ide_dma_lost_irq()
H A Dopti621.c65 static void opti621_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) opti621_set_pio_mode() argument
67 ide_drive_t *pair = ide_get_pair_dev(drive); opti621_set_pio_mode()
69 unsigned long mode = drive->pio_mode, pair_mode; opti621_set_pio_mode()
83 ide_set_drivedata(drive, (void *)mode); opti621_set_pio_mode()
113 write_reg(drive->dn & 1, MISC_REG); opti621_set_pio_mode()
119 /* use Register-A for drive 0 */ opti621_set_pio_mode()
120 /* use Register-B for drive 1 */ opti621_set_pio_mode()
H A Dtx4938ide.c59 static void tx4938ide_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) tx4938ide_set_pio_mode() argument
62 u8 safe = drive->pio_mode - XFER_PIO_0; tx4938ide_set_pio_mode()
65 pair = ide_get_pair_dev(drive); tx4938ide_set_pio_mode()
74 static void tx4938ide_input_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, tx4938ide_input_data_swap() argument
77 unsigned long port = drive->hwif->io_ports.data_addr; tx4938ide_input_data_swap()
86 static void tx4938ide_output_data_swap(ide_drive_t *drive, struct ide_cmd *cmd, tx4938ide_output_data_swap() argument
89 unsigned long port = drive->hwif->io_ports.data_addr; tx4938ide_output_data_swap()
H A Dumc8672.c33 * in the beginning of the driver, which sets the speed of drive 0 to 11 (there
58 #define UMC_DRIVE0 1 /* DOS measured drive speeds */
103 printk("umc8672: drive speeds [0 to 11]: %d %d %d %d\n", umc_set_speeds()
107 static void umc_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) umc_set_pio_mode() argument
111 const u8 pio = drive->pio_mode - XFER_PIO_0; umc_set_pio_mode()
114 drive->name, pio, pio_to_umc[pio]); umc_set_pio_mode()
120 current_speeds[drive->name[2] - 'a'] = pio_to_umc[pio]; umc_set_pio_mode()
H A Dhpt366.c22 * - add function for getting/setting power status of drive
37 * add drive timings for 66MHz PCI bus,
39 * add /proc display for per-drive PIO/DMA/UDMA mode and
80 * - optimize the UltraDMA filtering and the drive list lookup code
534 static int check_in_drive_list(ide_drive_t *drive, const char **list) check_in_drive_list() argument
536 char *m = (char *)&drive->id[ATA_ID_PROD]; check_in_drive_list()
557 static u8 hpt3xx_udma_filter(ide_drive_t *drive) hpt3xx_udma_filter() argument
559 ide_hwif_t *hwif = drive->hwif; hpt3xx_udma_filter()
566 check_in_drive_list(drive, bad_ata66_4)) hpt3xx_udma_filter()
570 check_in_drive_list(drive, bad_ata66_3)) hpt3xx_udma_filter()
575 check_in_drive_list(drive, bad_ata100_5)) hpt3xx_udma_filter()
580 check_in_drive_list(drive, bad_ata100_5)) hpt3xx_udma_filter()
586 if (ata_id_is_sata(drive->id)) hpt3xx_udma_filter()
593 return check_in_drive_list(drive, bad_ata33) ? 0x00 : mask; hpt3xx_udma_filter()
596 static u8 hpt3xx_mdma_filter(ide_drive_t *drive) hpt3xx_mdma_filter() argument
598 ide_hwif_t *hwif = drive->hwif; hpt3xx_mdma_filter()
606 if (ata_id_is_sata(drive->id)) hpt3xx_mdma_filter()
631 static void hpt3xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) hpt3xx_set_mode() argument
636 u8 itr_addr = 0x40 + (drive->dn * 4); hpt3xx_set_mode()
638 const u8 speed = drive->dma_mode; hpt3xx_set_mode()
655 static void hpt3xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) hpt3xx_set_pio_mode() argument
657 drive->dma_mode = drive->pio_mode; hpt3xx_set_pio_mode()
658 hpt3xx_set_mode(hwif, drive); hpt3xx_set_pio_mode()
661 static void hpt3xx_maskproc(ide_drive_t *drive, int mask) hpt3xx_maskproc() argument
663 ide_hwif_t *hwif = drive->hwif; hpt3xx_maskproc()
667 if ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) == 0) hpt3xx_maskproc()
691 static void hpt366_dma_lost_irq(ide_drive_t *drive) hpt366_dma_lost_irq() argument
693 struct pci_dev *dev = to_pci_dev(drive->hwif->dev); hpt366_dma_lost_irq()
700 drive->name, __func__, mcr1, mcr3, scr1); hpt366_dma_lost_irq()
703 ide_dma_lost_irq(drive); hpt366_dma_lost_irq()
706 static void hpt370_clear_engine(ide_drive_t *drive) hpt370_clear_engine() argument
708 ide_hwif_t *hwif = drive->hwif; hpt370_clear_engine()
715 static void hpt370_irq_timeout(ide_drive_t *drive) hpt370_irq_timeout() argument
717 ide_hwif_t *hwif = drive->hwif; hpt370_irq_timeout()
723 printk(KERN_DEBUG "%s: %d bytes in FIFO\n", drive->name, bfifo & 0x1ff); hpt370_irq_timeout()
729 hpt370_clear_engine(drive); hpt370_irq_timeout()
732 static void hpt370_dma_start(ide_drive_t *drive) hpt370_dma_start() argument
735 hpt370_clear_engine(drive); hpt370_dma_start()
737 ide_dma_start(drive); hpt370_dma_start()
740 static int hpt370_dma_end(ide_drive_t *drive) hpt370_dma_end() argument
742 ide_hwif_t *hwif = drive->hwif; hpt370_dma_end()
750 hpt370_irq_timeout(drive); hpt370_dma_end()
752 return ide_dma_end(drive); hpt370_dma_end()
756 static int hpt374_dma_test_irq(ide_drive_t *drive) hpt374_dma_test_irq() argument
758 ide_hwif_t *hwif = drive->hwif; hpt374_dma_test_irq()
765 // printk("%s: %d bytes in FIFO\n", drive->name, bfifo); hpt374_dma_test_irq()
777 static int hpt374_dma_end(ide_drive_t *drive) hpt374_dma_end() argument
779 ide_hwif_t *hwif = drive->hwif; hpt374_dma_end()
788 return ide_dma_end(drive); hpt374_dma_end()
832 * @drive: drive for command
839 static void hpt3xxn_rw_disk(ide_drive_t *drive, struct request *rq) hpt3xxn_rw_disk() argument
841 hpt3xxn_set_clock(drive->hwif, rq_data_dir(rq) ? 0x21 : 0x23); hpt3xxn_rw_disk()
H A Damd74xx.c82 static void amd_set_drive(ide_hwif_t *hwif, ide_drive_t *drive) amd_set_drive() argument
85 ide_drive_t *peer = ide_get_pair_dev(drive); amd_set_drive()
89 const u8 speed = drive->dma_mode; amd_set_drive()
94 ide_timing_compute(drive, speed, &t, T, UT); amd_set_drive()
104 amd_set_speed(dev, drive->dn, udma_mask, &t); amd_set_drive()
111 static void amd_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) amd_set_pio_mode() argument
113 drive->dma_mode = drive->pio_mode; amd_set_pio_mode()
114 amd_set_drive(hwif, drive); amd_set_pio_mode()
142 * The initialization callback. Initialize drive independent registers.
H A Dide-gd.h17 ide_drive_t *drive; member in struct:ide_disk_obj
H A Dqd65xx.h34 static inline u8 QD_TIMING(ide_drive_t *drive) QD_TIMING() argument
36 return (unsigned long)ide_get_drivedata(drive) & 0x00ff; QD_TIMING()
39 static inline u8 QD_TIMREG(ide_drive_t *drive) QD_TIMREG() argument
41 return ((unsigned long)ide_get_drivedata(drive) & 0xff00) >> 8; QD_TIMREG()
H A Dide-pio-blacklist.c55 { "ST3491A", 1 }, /* reports 3, should be 1 or 2 (depending on drive)
76 * ide_scan_pio_blacklist - check for a blacklisted drive
H A Dpalm_bk3710.c191 static void palm_bk3710_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) palm_bk3710_set_dma_mode() argument
193 int is_slave = drive->dn & 1; palm_bk3710_set_dma_mode()
195 const u8 xferspeed = drive->dma_mode; palm_bk3710_set_dma_mode()
202 drive->id[ATA_ID_EIDE_DMA_MIN], palm_bk3710_set_dma_mode()
207 static void palm_bk3710_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) palm_bk3710_set_pio_mode() argument
210 int is_slave = drive->dn & 1; palm_bk3710_set_pio_mode()
213 const u8 pio = drive->pio_mode - XFER_PIO_0; palm_bk3710_set_pio_mode()
216 * Obtain the drive PIO data for tuning the Palm Chip registers palm_bk3710_set_pio_mode()
218 cycle_time = ide_pio_cycle_time(drive, pio); palm_bk3710_set_pio_mode()
219 mate = ide_get_pair_dev(drive); palm_bk3710_set_pio_mode()
H A Dvia82cxxx.c173 * @drive: Drive to set up
179 static void via_set_drive(ide_hwif_t *hwif, ide_drive_t *drive) via_set_drive() argument
181 ide_drive_t *peer = ide_get_pair_dev(drive); via_set_drive()
187 const u8 speed = drive->dma_mode; via_set_drive()
199 ide_timing_compute(drive, speed, &t, T, UT); via_set_drive()
206 via_set_speed(hwif, drive->dn, &t); via_set_drive()
212 * @drive: drive
217 static void via_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) via_set_pio_mode() argument
219 drive->dma_mode = drive->pio_mode; via_set_pio_mode()
220 via_set_drive(hwif, drive); via_set_pio_mode()
294 * and initialize its drive independent registers.
H A Dide-cd.h80 ide_drive_t *drive; member in struct:cdrom_info
90 u8 max_speed; /* Max speed of the drive. */
91 u8 current_speed; /* Current speed of the drive. */
H A Djmicron.c83 static void jmicron_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) jmicron_set_pio_mode() argument
90 * @drive: drive
95 static void jmicron_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) jmicron_set_dma_mode() argument
H A Dpdc202xx_new.c132 static void pdcnew_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) pdcnew_set_dma_mode() argument
135 u8 adj = (drive->dn & 1) ? 0x08 : 0x00; pdcnew_set_dma_mode()
136 const u8 speed = drive->dma_mode; pdcnew_set_dma_mode()
139 * IDE core issues SETFEATURES_XFER to the drive first (thanks to pdcnew_set_dma_mode()
170 static void pdcnew_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) pdcnew_set_pio_mode() argument
173 u8 adj = (drive->dn & 1) ? 0x08 : 0x00; pdcnew_set_pio_mode()
174 const u8 pio = drive->pio_mode - XFER_PIO_0; pdcnew_set_pio_mode()
191 static void pdcnew_reset(ide_drive_t *drive) pdcnew_reset() argument
197 drive->hwif->channel ? "Secondary" : "Primary"); pdcnew_reset()
H A Dgayle.c71 static void gayle_a1200_clear_irq(ide_drive_t *drive) gayle_a1200_clear_irq() argument
73 ide_hwif_t *hwif = drive->hwif; gayle_a1200_clear_irq()
H A Dbuddha.c113 static void xsurf_clear_irq(ide_drive_t *drive) xsurf_clear_irq() argument
118 z_writeb(0, drive->hwif->io_ports.irq_addr); xsurf_clear_irq()
H A Ddtc2278.c71 static void dtc2278_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) dtc2278_set_pio_mode() argument
75 if (drive->pio_mode >= XFER_PIO_3) { dtc2278_set_pio_mode()
H A Dide-pci-generic.c36 static void netcell_quirkproc(ide_drive_t *drive) netcell_quirkproc() argument
39 drive->id[ATA_ID_CSF_DEFAULT] |= 0x4000; netcell_quirkproc()
H A Dmacide.c64 static void macide_clear_irq(ide_drive_t *drive) macide_clear_irq() argument
/linux-4.1.27/drivers/block/
H A Damiflop.c52 * - added trackbuffer for each drive to speed things up
108 #define FD_DD_3 0xffffffff /* double-density 3.5" (880K) drive */
109 #define FD_HD_3 0x55555555 /* high-density 3.5" (1760K) drive */
110 #define FD_DD_5 0xaaaaaaaa /* double-density 5.25" (440K) drive */
125 #define SELMASK(drive) (1 << (3 + (drive & 3)))
161 static volatile int selected = -1; /* currently selected drive */
239 static inline int try_fdc(int drive) try_fdc() argument
241 drive &= 3; try_fdc()
242 return ((fdc_busy < 0) || (fdc_busy == drive)); try_fdc()
245 static void get_fdc(int drive) get_fdc() argument
249 drive &= 3; get_fdc()
251 printk("get_fdc: drive %d fdc_busy %d fdc_nested %d\n",drive,fdc_busy,fdc_nested); get_fdc()
254 wait_event(fdc_wait, try_fdc(drive)); get_fdc()
255 fdc_busy = drive; get_fdc()
274 static void fd_select (int drive) fd_select() argument
278 drive&=3; fd_select()
280 printk("selecting %d\n",drive); fd_select()
282 if (drive == selected) fd_select()
284 get_fdc(drive); fd_select()
285 selected = drive; fd_select()
287 if (unit[drive].track % 2 != 0) fd_select()
289 if (unit[drive].motor == 1) fd_select()
293 prb &= ~SELMASK(drive); fd_select()
298 static void fd_deselect (int drive) fd_deselect() argument
303 drive&=3; fd_deselect()
305 printk("deselecting %d\n",drive); fd_deselect()
307 if (drive != selected) { fd_deselect()
308 printk(KERN_WARNING "Deselecting drive %d while %d was selected!\n",drive,selected); fd_deselect()
312 get_fdc(drive); fd_deselect()
362 printk (KERN_WARNING "DSKRDY not set after 1.5 seconds - assuming drive is spinning notwithstanding\n"); fd_motor_on()
369 static void fd_motor_off(unsigned long drive) fd_motor_off() argument
375 decusecount = drive & 0x40000000; fd_motor_off()
377 calledfromint = drive & 0x80000000; fd_motor_off()
378 drive&=3; fd_motor_off()
379 if (calledfromint && !try_fdc(drive)) { fd_motor_off()
381 motor_off_timer[drive].expires = jiffies + 1; fd_motor_off()
382 add_timer(motor_off_timer + drive); fd_motor_off()
385 unit[drive].motor = 0; fd_motor_off()
386 fd_select(drive); fd_motor_off()
388 fd_deselect(drive); fd_motor_off()
393 int drive; floppy_off() local
395 drive = nr & 3; floppy_off()
397 motor_off_timer[drive].data = nr | 0x80000000; floppy_off()
398 mod_timer(motor_off_timer + drive, jiffies + 3*HZ); floppy_off()
401 static int fd_calibrate(int drive) fd_calibrate() argument
406 drive &= 3; fd_calibrate()
407 get_fdc(drive); fd_calibrate()
408 if (!fd_motor_on (drive)) fd_calibrate()
410 fd_select (drive); fd_calibrate()
415 for (n = unit[drive].type->tracks/2; n != 0; --n) { fd_calibrate()
423 ms_delay(unit[drive].type->step_delay); fd_calibrate()
425 ms_delay (unit[drive].type->settle_time); fd_calibrate()
427 n = unit[drive].type->tracks + 20; fd_calibrate()
434 ms_delay(unit[drive].type->step_delay + 1); fd_calibrate()
438 printk (KERN_ERR "fd%d: calibrate failed, turning motor off\n", drive); fd_calibrate()
439 fd_motor_off (drive); fd_calibrate()
440 unit[drive].track = -1; fd_calibrate()
445 unit[drive].track = 0; fd_calibrate()
446 ms_delay(unit[drive].type->settle_time); fd_calibrate()
449 fd_deselect(drive); fd_calibrate()
453 static int fd_seek(int drive, int track) fd_seek() argument
459 printk("seeking drive %d to track %d\n",drive,track); fd_seek()
461 drive &= 3; fd_seek()
462 get_fdc(drive); fd_seek()
463 if (unit[drive].track == track) { fd_seek()
467 if (!fd_motor_on(drive)) { fd_seek()
471 if (unit[drive].track < 0 && !fd_calibrate(drive)) { fd_seek()
476 fd_select (drive); fd_seek()
477 cnt = unit[drive].track/2 - track/2; fd_seek()
487 if (track % 2 != unit[drive].track % 2) fd_seek()
488 ms_delay (unit[drive].type->side_time); fd_seek()
489 unit[drive].track = track; fd_seek()
492 fd_deselect(drive); fd_seek()
501 ms_delay (unit[drive].type->step_delay); fd_seek()
503 ms_delay (unit[drive].type->settle_time); fd_seek()
506 fd_deselect(drive); fd_seek()
510 static unsigned long fd_get_drive_id(int drive) fd_get_drive_id() argument
515 drive&=3; fd_get_drive_id()
516 get_fdc(drive); fd_get_drive_id()
520 SELECT(SELMASK(drive)); fd_get_drive_id()
522 DESELECT(SELMASK(drive)); fd_get_drive_id()
526 SELECT(SELMASK(drive)); fd_get_drive_id()
528 DESELECT(SELMASK(drive)); fd_get_drive_id()
533 SELECT(SELMASK(drive)); fd_get_drive_id()
540 DESELECT(SELMASK(drive)); fd_get_drive_id()
547 * As every (real) Amiga has at least a 3.5" DD drive as df0: fd_get_drive_id()
551 if(drive == 0 && id == FD_NODRIVE) fd_get_drive_id()
554 printk(KERN_NOTICE "fd: drive 0 didn't identify, setting default %08lx\n", (ulong)fd_def_df0); fd_get_drive_id()
578 static void raw_read(int drive) raw_read() argument
580 drive&=3; raw_read()
581 get_fdc(drive); raw_read()
583 fd_select(drive); raw_read()
592 custom.dsklen = unit[drive].type->read_size/sizeof(short) | DSKLEN_DMAEN; raw_read()
593 custom.dsklen = unit[drive].type->read_size/sizeof(short) | DSKLEN_DMAEN; raw_read()
600 fd_deselect(drive); raw_read()
604 static int raw_write(int drive) raw_write() argument
608 drive&=3; raw_write()
609 get_fdc(drive); /* corresponds to rel_fdc() in post_write() */ raw_write()
615 fd_select(drive); raw_write()
620 if ((ulong)unit[drive].track >= unit[drive].type->precomp2) raw_write()
622 else if ((ulong)unit[drive].track >= unit[drive].type->precomp1) raw_write()
628 custom.dsklen = unit[drive].type->write_size/sizeof(short) | DSKLEN_DMAEN|DSKLEN_WRITE; raw_write()
629 custom.dsklen = unit[drive].type->write_size/sizeof(short) | DSKLEN_DMAEN|DSKLEN_WRITE; raw_write()
639 static void post_write (unsigned long drive) post_write() argument
642 printk("post_write for drive %ld\n",drive); post_write()
644 drive &= 3; post_write()
649 unit[drive].dirty = 0; post_write()
651 fd_deselect(drive); post_write()
718 static int amiga_read(int drive) amiga_read() argument
726 drive&=3; amiga_read()
728 end = raw + unit[drive].type->read_size; amiga_read()
730 for (scnt = 0;scnt < unit[drive].dtype->sects * unit[drive].type->sect_mult; scnt++) { amiga_read()
757 if (hdr.track != unit[drive].track) { amiga_read()
758 printk(KERN_INFO "MFM_TRACK: %d, %d\n", hdr.track, unit[drive].track); amiga_read()
762 raw = decode ((ulong *)(unit[drive].trackbuf + hdr.sect*512), amiga_read()
764 csum = checksum((ulong *)(unit[drive].trackbuf + hdr.sect*512), 512); amiga_read()
771 ((ulong *)(unit[drive].trackbuf+hdr.sect*512))[0], amiga_read()
772 ((ulong *)(unit[drive].trackbuf+hdr.sect*512))[1], amiga_read()
773 ((ulong *)(unit[drive].trackbuf+hdr.sect*512))[2], amiga_read()
774 ((ulong *)(unit[drive].trackbuf+hdr.sect*512))[3]); amiga_read()
1033 static int dos_read(int drive) dos_read() argument
1041 drive&=3; dos_read()
1043 end = raw + unit[drive].type->read_size; dos_read()
1045 for (scnt=0; scnt < unit[drive].dtype->sects * unit[drive].type->sect_mult; scnt++) { dos_read()
1050 unit[drive].track,drive,scnt); dos_read()
1071 if (hdr.track != unit[drive].track/unit[drive].type->heads) { dos_read()
1074 unit[drive].track/unit[drive].type->heads); dos_read()
1078 if (hdr.side != unit[drive].track%unit[drive].type->heads) { dos_read()
1081 unit[drive].track%unit[drive].type->heads); dos_read()
1096 unit[drive].track, drive, scnt, hdr.sec); dos_read()
1111 raw = dos_decode((unsigned char *)(unit[drive].trackbuf + (hdr.sec - 1) * 512), (ushort *) raw, 512); dos_read()
1113 crc = dos_data_crc(unit[drive].trackbuf + (hdr.sec - 1) * 512); dos_read()
1120 ((ulong *)(unit[drive].trackbuf+(hdr.sec-1)*512))[0], dos_read()
1121 ((ulong *)(unit[drive].trackbuf+(hdr.sec-1)*512))[1], dos_read()
1122 ((ulong *)(unit[drive].trackbuf+(hdr.sec-1)*512))[2], dos_read()
1123 ((ulong *)(unit[drive].trackbuf+(hdr.sec-1)*512))[3]); dos_read()
1154 static unsigned long *ms_putsec(int drive, unsigned long *raw, int cnt) ms_putsec() argument
1161 drive&=3; ms_putsec()
1171 hdr.track=unit[drive].track/unit[drive].type->heads; ms_putsec()
1172 hdr.side=unit[drive].track%unit[drive].type->heads; ms_putsec()
1190 (unsigned char *)unit[drive].trackbuf+cnt*512,512); ms_putsec()
1194 crc[0]=dos_data_crc(unit[drive].trackbuf+cnt*512); ms_putsec()
1245 /* FIXME: this assumes the drive is still spinning -
1302 static int get_track(int drive, int track) get_track() argument
1306 drive&=3; get_track()
1307 if (unit[drive].track == track) get_track()
1309 get_fdc(drive); get_track()
1310 if (!fd_motor_on(drive)) { get_track()
1315 if (unit[drive].dirty == 1) { get_track()
1316 del_timer (flush_track_timer + drive); get_track()
1317 non_int_flush_track (drive); get_track()
1321 if (!fd_seek(drive, track)) get_track()
1323 raw_read(drive); get_track()
1324 error = (*unit[drive].dtype->read_fkt)(drive); get_track()
1330 unit[drive].track = -1; get_track()
1377 int drive; redo_fd_request() local
1391 drive = floppy - unit; redo_fd_request()
1415 if (get_track(drive, track) == -1) { redo_fd_request()
1425 /* keep the drive spinning while writes are scheduled */ redo_fd_request()
1426 if (!fd_motor_on(drive)) { redo_fd_request()
1438 mod_timer (flush_track_timer + drive, jiffies + 1); redo_fd_request()
1455 int drive = MINOR(bdev->bd_dev) & 3; fd_getgeo() local
1457 geo->heads = unit[drive].type->heads; fd_getgeo()
1458 geo->sectors = unit[drive].dtype->sects * unit[drive].type->sect_mult; fd_getgeo()
1459 geo->cylinders = unit[drive].type->tracks; fd_getgeo()
1467 int drive = p - unit; fd_locked_ioctl() local
1473 get_fdc(drive); fd_locked_ioctl()
1474 if (fd_ref[drive] > 1) { fd_locked_ioctl()
1479 if (fd_motor_on(drive) == 0) { fd_locked_ioctl()
1483 if (fd_calibrate(drive) == 0) { fd_locked_ioctl()
1487 floppy_off(drive); fd_locked_ioctl()
1493 get_fdc(drive); fd_locked_ioctl()
1494 if (fd_seek(drive,param) != 0){ fd_locked_ioctl()
1497 non_int_flush_track(drive); fd_locked_ioctl()
1499 floppy_off(drive); fd_locked_ioctl()
1506 floppy_off(drive); fd_locked_ioctl()
1522 del_timer (flush_track_timer + drive); fd_locked_ioctl()
1523 non_int_flush_track(drive); fd_locked_ioctl()
1533 printk(KERN_DEBUG "fd_ioctl: unknown cmd %d for drive %d.", fd_locked_ioctl()
1534 cmd, drive); fd_locked_ioctl()
1556 int drive; fd_probe() local
1558 drive = dev & 3; fd_probe()
1559 code = fd_get_drive_id(drive); fd_probe()
1561 /* get drive type */ fd_probe()
1567 printk(KERN_WARNING "fd_probe: unsupported drive type " fd_probe()
1569 unit[drive].type = &drive_types[num_dr_types-1]; /* FD_NODRIVE */ fd_probe()
1573 unit[drive].type = drive_types + type; fd_probe()
1574 unit[drive].track = -1; fd_probe()
1576 unit[drive].disk = -1; fd_probe()
1577 unit[drive].motor = 0; fd_probe()
1578 unit[drive].busy = 0; fd_probe()
1579 unit[drive].status = -1; fd_probe()
1585 * drive with different device numbers.
1589 int drive = MINOR(bdev->bd_dev) & 3; floppy_open() local
1595 old_dev = fd_device[drive]; floppy_open()
1597 if (fd_ref[drive] && old_dev != system) { floppy_open()
1607 get_fdc(drive); floppy_open()
1608 fd_select (drive); floppy_open()
1610 fd_deselect (drive); floppy_open()
1621 fd_ref[drive]++; floppy_open()
1622 fd_device[drive] = system; floppy_open()
1625 unit[drive].dtype=&data_types[system]; floppy_open()
1626 unit[drive].blocks=unit[drive].type->heads*unit[drive].type->tracks* floppy_open()
1627 data_types[system].sects*unit[drive].type->sect_mult; floppy_open()
1628 set_capacity(unit[drive].gendisk, unit[drive].blocks); floppy_open()
1630 printk(KERN_INFO "fd%d: accessing %s-disk with %s-layout\n",drive, floppy_open()
1631 unit[drive].type->name, data_types[system].name); floppy_open()
1640 int drive = p - unit; floppy_release() local
1643 if (unit[drive].dirty == 1) { floppy_release()
1644 del_timer (flush_track_timer + drive); floppy_release()
1645 non_int_flush_track (drive); floppy_release()
1648 if (!fd_ref[drive]--) { floppy_release()
1650 fd_ref[drive] = 0; floppy_release()
1654 floppy_off (drive | 0x40000000); floppy_release()
1662 * to the desired drive, but it will probably not survive the sleep if
1668 int drive = p - unit; amiga_check_events() local
1675 get_fdc(drive); amiga_check_events()
1676 fd_select (drive); amiga_check_events()
1678 fd_deselect (drive); amiga_check_events()
1683 fd_probe(drive); amiga_check_events()
1704 int drive,drives,nomem; fd_probe_drives() local
1709 for(drive=0;drive<FD_MAX_UNITS;drive++) { fd_probe_drives()
1711 fd_probe(drive); fd_probe_drives()
1712 if (unit[drive].type->code == FD_NODRIVE) fd_probe_drives()
1716 unit[drive].type->code = FD_NODRIVE; fd_probe_drives()
1719 unit[drive].gendisk = disk; fd_probe_drives()
1723 unit[drive].type->code = FD_NODRIVE; fd_probe_drives()
1728 if ((unit[drive].trackbuf = kmalloc(FLOPPY_MAX_SECTORS * 512, GFP_KERNEL)) == NULL) { fd_probe_drives()
1730 unit[drive].type = &drive_types[num_dr_types - 1]; /* FD_NODRIVE */ fd_probe_drives()
1734 printk("fd%d ",drive); fd_probe_drives()
1736 disk->first_minor = drive; fd_probe_drives()
1738 sprintf(disk->disk_name, "fd%d", drive); fd_probe_drives()
1739 disk->private_data = &unit[drive]; fd_probe_drives()
1755 int drive = *part & 3; floppy_find() local
1756 if (unit[drive].type->code == FD_NODRIVE) floppy_find()
1759 return get_disk(unit[drive].gendisk); floppy_find()
H A Dswim.c173 enum drive_location location; /* internal or external drive */
174 int head_number; /* single- or double-sided drive */
314 swim_write(base, mode0, EXTERNAL_DRIVE); /* clear drive 1 bit */ swim_drive()
315 swim_write(base, mode1, INTERNAL_DRIVE); /* set drive 0 bit */ swim_drive()
317 swim_write(base, mode0, INTERNAL_DRIVE); /* clear drive 0 bit */ swim_drive()
318 swim_write(base, mode1, EXTERNAL_DRIVE); /* set drive 1 bit */ swim_drive()
361 /* wait drive is ready */ swim_head()
780 int drive = (*part & 3); floppy_find() local
782 if (drive > swd->floppy_count) floppy_find()
786 return get_disk(swd->unit[drive].disk); floppy_find()
815 int drive; swim_floppy_init() local
836 for (drive = 0; drive < swd->floppy_count; drive++) { swim_floppy_init()
837 swd->unit[drive].disk = alloc_disk(1); swim_floppy_init()
838 if (swd->unit[drive].disk == NULL) { swim_floppy_init()
842 swd->unit[drive].swd = swd; swim_floppy_init()
852 for (drive = 0; drive < swd->floppy_count; drive++) { swim_floppy_init()
853 swd->unit[drive].disk->flags = GENHD_FL_REMOVABLE; swim_floppy_init()
854 swd->unit[drive].disk->major = FLOPPY_MAJOR; swim_floppy_init()
855 swd->unit[drive].disk->first_minor = drive; swim_floppy_init()
856 sprintf(swd->unit[drive].disk->disk_name, "fd%d", drive); swim_floppy_init()
857 swd->unit[drive].disk->fops = &floppy_fops; swim_floppy_init()
858 swd->unit[drive].disk->private_data = &swd->unit[drive]; swim_floppy_init()
859 swd->unit[drive].disk->queue = swd->queue; swim_floppy_init()
860 set_capacity(swd->unit[drive].disk, 2880); swim_floppy_init()
861 add_disk(swd->unit[drive].disk); swim_floppy_init()
871 while (drive--) swim_floppy_init()
872 put_disk(swd->unit[drive].disk); swim_floppy_init()
939 int drive; swim_remove() local
944 for (drive = 0; drive < swd->floppy_count; drive++) { swim_remove()
945 del_gendisk(swd->unit[drive].disk); swim_remove()
946 put_disk(swd->unit[drive].disk); swim_remove()
955 for (drive = 0; drive < swd->floppy_count; drive++) swim_remove()
956 floppy_eject(&swd->unit[drive]); swim_remove()
H A Dfloppy.c240 * motor of these drives causes system hangs on some PCI computers. drive
241 * 0 is the low bit (0x1), and drive 7 is the high bit (0x80). Bits are on if
242 * a drive is allowed.
298 #define UNIT(x) ((x) & 0x03) /* drive on fdc */
299 #define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */
300 /* reverse mapping from unit and fdc to drive */
308 #define UDP (&drive_params[drive])
309 #define UDRS (&drive_state[drive])
310 #define UDRWE (&write_errors[drive])
311 #define UFDCS (&fdc_state[FDC(drive)])
360 * this struct defines the different floppy drive types.
367 CMOS drive type
368 | Maximum data rate supported by drive type
421 * types (e.g. 360kB diskette in 1.2MB drive, etc.). Bit 1 of 'stretch'
601 static inline bool drive_no_geom(int drive) drive_no_geom() argument
603 return !current_type[drive] && !ITYPE(UDRS->fd_device); drive_no_geom()
607 static inline int fd_eject(int drive) fd_eject() argument
669 static void __reschedule_timeout(int drive, const char *message) __reschedule_timeout() argument
673 if (drive == current_reqD) __reschedule_timeout()
674 drive = current_drive; __reschedule_timeout()
676 if (drive < 0 || drive >= N_DRIVE) { __reschedule_timeout()
678 drive = 0; __reschedule_timeout()
688 static void reschedule_timeout(int drive, const char *message) reschedule_timeout() argument
693 __reschedule_timeout(drive, message); reschedule_timeout()
717 * 2. No floppy disk is in the drive. This is done in order to ensure that
718 * requests are quickly flushed in case there is no disk in the drive. It
720 * the drive.
726 * change line is set, this means either that no disk is in the drive, or
733 static int disk_change(int drive) disk_change() argument
735 int fdc = FDC(drive); disk_change()
739 if (!(FDCS->dor & (0x10 << UNIT(drive))) || disk_change()
740 (FDCS->dor & 3) != UNIT(drive) || fdc != FDC(drive)) { disk_change()
741 DPRINT("probing disk change on unselected drive\n"); disk_change()
742 DPRINT("drive=%d fdc=%d dor=%x\n", drive, FDC(drive), disk_change()
747 "checking disk change line for drive %d\n", drive); disk_change()
764 current_type[drive] != NULL) disk_change()
766 current_type[drive] = NULL; disk_change()
767 floppy_sizes[TOMINOR(drive)] = MAX_DISK_SIZE << 1; disk_change()
792 unsigned char drive; set_dor() local
804 drive = REVDRIVE(fdc, unit); set_dor()
807 disk_change(drive); set_dor()
814 drive = REVDRIVE(fdc, unit); set_dor()
836 int drive; reset_fdc_info() local
842 for (drive = 0; drive < N_DRIVE; drive++) reset_fdc_info()
843 if (FDC(drive) == fdc && (mode || UDRS->track != NEED_1_RECAL)) reset_fdc_info()
847 /* selects the fdc and drive, and enables the fdc's input/dma. */ set_fdc()
848 static void set_fdc(int drive) set_fdc() argument
850 if (drive >= 0 && drive < N_DRIVE) { set_fdc()
851 fdc = FDC(drive); set_fdc()
852 current_drive = drive; set_fdc()
869 static int lock_fdc(int drive, bool interruptible) lock_fdc() argument
880 reschedule_timeout(drive, "lock fdc"); lock_fdc()
881 set_fdc(drive); lock_fdc()
909 static void floppy_off(unsigned int drive) floppy_off() argument
912 int fdc = FDC(drive); floppy_off()
914 if (!(FDCS->dor & (0x10 << UNIT(drive)))) floppy_off()
917 del_timer(motor_off_timer + drive); floppy_off()
925 motor_off_timer[drive].expires = floppy_off()
928 add_timer(motor_off_timer + drive); floppy_off()
933 * stopping at current drive. This is done before any long operation, to
939 int drive; scandrives() local
947 drive = (saved_drive + i + 1) % N_DRIVE; scandrives()
950 set_fdc(drive); scandrives()
951 if (!(set_dor(fdc, ~3, UNIT(drive) | (0x10 << UNIT(drive))) & scandrives()
952 (0x10 << UNIT(drive)))) scandrives()
955 set_dor(fdc, ~(0x10 << UNIT(drive)), 0); scandrives()
997 /* this function makes sure that the disk stays in the drive during the
1333 /* Set the FDC's data transfer rate on behalf of the specified drive.
1346 /* TODO: some FDC/drive combinations (C&T 82C711 with TEAC 1.2MB) fdc_dtr()
1568 * the drive. seek_floppy()
1624 * reached track 0. Probably no drive. Raise an recal_interrupt()
1742 * Must do 4 FD_SENSEIs after reset because of ``drive polling''.
1839 /* avoid dma going to a random drive after shutdown */ floppy_shutdown()
1865 /* no read since this drive is running */ start_motor()
1898 * drive/controller combinations */ floppy_ready()
2058 static void set_floppy(int drive) set_floppy() argument
2065 _floppy = current_type[drive]; set_floppy()
2172 static int do_format(int drive, struct format_descr *tmp_format_req) do_format() argument
2176 if (lock_fdc(drive, true)) do_format()
2179 set_floppy(drive); do_format()
2208 unsigned int drive = (unsigned long)req->rq_disk->private_data; floppy_end_request() local
2217 floppy_off(drive); floppy_end_request()
2698 buffer_drive != current_drive || /* bad drive */ make_raw_rw_request()
2752 pr_info("buffer drive=%d\n", buffer_drive); make_raw_rw_request()
2818 int drive; redo_fd_request() local
2838 drive = (long)current_req->rq_disk->private_data; redo_fd_request()
2839 set_fdc(drive); redo_fd_request()
2842 set_floppy(drive); redo_fd_request()
2959 static int user_reset_fdc(int drive, int arg, bool interruptible) user_reset_fdc() argument
2963 if (lock_fdc(drive, interruptible)) user_reset_fdc()
2994 static const char *drive_name(int type, int drive) drive_name() argument
3175 int drive; raw_cmd_ioctl() local
3181 for (drive = 0; drive < N_DRIVE; drive++) { raw_cmd_ioctl()
3182 if (FDC(drive) != fdc) raw_cmd_ioctl()
3184 if (drive == current_drive) { raw_cmd_ioctl()
3231 int drive, int type, struct block_device *bdev) set_geometry()
3246 if (lock_fdc(drive, true)) { set_geometry()
3266 if (lock_fdc(drive, true)) set_geometry()
3275 user_params[drive] = *g; set_geometry()
3276 if (buffer_drive == drive) set_geometry()
3277 SUPBOUND(buffer_max, user_params[drive].sect); set_geometry()
3278 current_type[drive] = &user_params[drive]; set_geometry()
3279 floppy_sizes[drive] = user_params[drive].size; set_geometry()
3289 if (DRS->maxblock > user_params[drive].sect || set_geometry()
3291 ((user_params[drive].sect ^ oldStretch) & set_geometry()
3347 static int get_floppy_geometry(int drive, int type, struct floppy_struct **g) get_floppy_geometry() argument
3352 if (lock_fdc(drive, false)) get_floppy_geometry()
3357 *g = current_type[drive]; get_floppy_geometry()
3366 int drive = (long)bdev->bd_disk->private_data; fd_getgeo() local
3367 int type = ITYPE(drive_state[drive].fd_device); fd_getgeo()
3371 ret = get_floppy_geometry(drive, type, &g); fd_getgeo()
3384 int drive = (long)bdev->bd_disk->private_data; fd_locked_ioctl() local
3434 /* somebody else has this drive open */ fd_locked_ioctl()
3436 if (lock_fdc(drive, true)) fd_locked_ioctl()
3441 ret = fd_eject(UNIT(drive)); fd_locked_ioctl()
3448 if (lock_fdc(drive, true)) fd_locked_ioctl()
3450 current_type[drive] = NULL; fd_locked_ioctl()
3451 floppy_sizes[drive] = MAX_DISK_SIZE << 1; fd_locked_ioctl()
3456 return set_geometry(cmd, &inparam.g, drive, type, bdev); fd_locked_ioctl()
3458 ret = get_floppy_geometry(drive, type, fd_locked_ioctl()
3470 if (lock_fdc(drive, true)) fd_locked_ioctl()
3484 return do_format(drive, &inparam.f); fd_locked_ioctl()
3487 if (lock_fdc(drive, true)) fd_locked_ioctl()
3500 outparam = drive_name(type, drive); fd_locked_ioctl()
3510 if (lock_fdc(drive, true)) fd_locked_ioctl()
3520 return user_reset_fdc(drive, (int)param, true); fd_locked_ioctl()
3533 if (lock_fdc(drive, true)) fd_locked_ioctl()
3535 set_floppy(drive); fd_locked_ioctl()
3542 if (lock_fdc(drive, true)) fd_locked_ioctl()
3572 int drive; config_types() local
3574 /* read drive info out of physical CMOS */ config_types()
3575 drive = 0; config_types()
3578 drive = 1; config_types()
3582 /* FIXME: additional physical CMOS drive detection should go here */ config_types()
3584 for (drive = 0; drive < N_DRIVE; drive++) { config_types()
3594 allowed_drive_mask |= 1 << drive; config_types()
3596 allowed_drive_mask &= ~(1 << drive); config_types()
3607 pr_info("Floppy drive(s):"); config_types()
3612 pr_cont("%s fd%d is %s", prepend, drive, name); config_types()
3623 int drive = (long)disk->private_data; floppy_release() local
3632 opened_bdev[drive] = NULL; floppy_release()
3640 * drive with different device numbers.
3644 int drive = (long)bdev->bd_disk->private_data; floppy_open() local
3653 if (opened_bdev[drive] && opened_bdev[drive] != bdev) floppy_open()
3663 opened_bdev[drive] = bdev; floppy_open()
3668 /* if opening an ED drive, reserve a big buffer, floppy_open()
3699 set_capacity(disks[drive], floppy_sizes[new_dev]); floppy_open()
3701 if (buffer_drive == drive) floppy_open()
3730 opened_bdev[drive] = NULL; floppy_open()
3743 int drive = (long)disk->private_data; floppy_check_events() local
3750 lock_fdc(drive, false); floppy_check_events()
3757 test_bit(drive, &fake_change) || floppy_check_events()
3758 drive_no_geom(drive)) floppy_check_events()
3766 * a disk in the drive, and whether that disk is writable.
3770 int drive; member in struct:rb0_cbdata
3777 int drive = cbdata->drive; floppy_rb0_cb() local
3786 static int __floppy_read_block_0(struct block_device *bdev, int drive) __floppy_read_block_0() argument
3804 cbdata.drive = drive; __floppy_read_block_0()
3832 * there is a disk in the drive at all... Thus we also do it for fixed
3836 int drive = (long)disk->private_data; floppy_revalidate() local
3842 test_bit(drive, &fake_change) || floppy_revalidate()
3843 drive_no_geom(drive)) { floppy_revalidate()
3848 lock_fdc(drive, false); floppy_revalidate()
3851 if (!(cf || test_bit(drive, &fake_change) || drive_no_geom(drive))) { floppy_revalidate()
3857 if (buffer_drive == drive) floppy_revalidate()
3859 clear_bit(drive, &fake_change); floppy_revalidate()
3863 if (drive_no_geom(drive)) { floppy_revalidate()
3865 res = __floppy_read_block_0(opened_bdev[drive], drive); floppy_revalidate()
4014 DPRINT("bad drive for set_cmos\n"); set_cmos()
4107 int drive; floppy_cmos_show() local
4109 drive = p->id; floppy_cmos_show()
4151 static bool floppy_available(int drive) floppy_available() argument
4153 if (!(allowed_drive_mask & (1 << drive))) floppy_available()
4155 if (fdc_state[FDC(drive)].version == FDC_NONE) floppy_available()
4162 int drive = (*part & 3) | ((*part & 0x80) >> 5); floppy_find() local
4163 if (drive >= N_DRIVE || !floppy_available(drive)) floppy_find()
4168 return get_disk(disks[drive]); floppy_find()
4173 int i, unit, drive, err; do_floppy_init() local
4189 for (drive = 0; drive < N_DRIVE; drive++) { do_floppy_init()
4190 disks[drive] = alloc_disk(1); do_floppy_init()
4191 if (!disks[drive]) { do_floppy_init()
4196 disks[drive]->queue = blk_init_queue(do_fd_request, &floppy_lock); do_floppy_init()
4197 if (!disks[drive]->queue) { do_floppy_init()
4202 blk_queue_max_hw_sectors(disks[drive]->queue, 64); do_floppy_init()
4203 disks[drive]->major = FLOPPY_MAJOR; do_floppy_init()
4204 disks[drive]->first_minor = TOMINOR(drive); do_floppy_init()
4205 disks[drive]->fops = &floppy_fops; do_floppy_init()
4206 sprintf(disks[drive]->disk_name, "fd%d", drive); do_floppy_init()
4208 init_timer(&motor_off_timer[drive]); do_floppy_init()
4209 motor_off_timer[drive].data = drive; do_floppy_init()
4210 motor_off_timer[drive].function = motor_off_callback; do_floppy_init()
4266 /* initialise drive state */ do_floppy_init()
4267 for (drive = 0; drive < N_DRIVE; drive++) { do_floppy_init()
4327 for (drive = 0; drive < N_DRIVE; drive++) { do_floppy_init()
4328 if (!floppy_available(drive)) do_floppy_init()
4331 floppy_device[drive].name = floppy_device_name; do_floppy_init()
4332 floppy_device[drive].id = drive; do_floppy_init()
4333 floppy_device[drive].dev.release = floppy_device_release; do_floppy_init()
4334 floppy_device[drive].dev.groups = floppy_dev_groups; do_floppy_init()
4336 err = platform_device_register(&floppy_device[drive]); do_floppy_init()
4341 disks[drive]->private_data = (void *)(long)drive; do_floppy_init()
4342 disks[drive]->flags |= GENHD_FL_REMOVABLE; do_floppy_init()
4343 disks[drive]->driverfs_dev = &floppy_device[drive].dev; do_floppy_init()
4344 add_disk(disks[drive]); do_floppy_init()
4350 while (drive--) { do_floppy_init()
4351 if (floppy_available(drive)) { do_floppy_init()
4352 del_gendisk(disks[drive]); do_floppy_init()
4353 platform_device_unregister(&floppy_device[drive]); do_floppy_init()
4366 for (drive = 0; drive < N_DRIVE; drive++) { do_floppy_init()
4367 if (!disks[drive]) do_floppy_init()
4369 if (disks[drive]->queue) { do_floppy_init()
4370 del_timer_sync(&motor_off_timer[drive]); do_floppy_init()
4371 blk_cleanup_queue(disks[drive]->queue); do_floppy_init()
4372 disks[drive]->queue = NULL; do_floppy_init()
4374 put_disk(disks[drive]); do_floppy_init()
4507 int drive; floppy_release_irq_and_dma() local
4535 for (drive = 0; drive < N_FDC * 4; drive++) floppy_release_irq_and_dma()
4536 if (timer_pending(motor_off_timer + drive)) floppy_release_irq_and_dma()
4537 pr_info("motor off timer %d still active\n", drive); floppy_release_irq_and_dma()
4584 int drive; floppy_module_exit() local
4592 for (drive = 0; drive < N_DRIVE; drive++) { floppy_module_exit()
4593 del_timer_sync(&motor_off_timer[drive]); floppy_module_exit()
4595 if (floppy_available(drive)) { floppy_module_exit()
4596 del_gendisk(disks[drive]); floppy_module_exit()
4597 platform_device_unregister(&floppy_device[drive]); floppy_module_exit()
4599 blk_cleanup_queue(disks[drive]->queue); floppy_module_exit()
4605 if (!(allowed_drive_mask & (1 << drive)) || floppy_module_exit()
4606 fdc_state[FDC(drive)].version == FDC_NONE) floppy_module_exit()
4607 disks[drive]->queue = NULL; floppy_module_exit()
4609 put_disk(disks[drive]); floppy_module_exit()
3230 set_geometry(unsigned int cmd, struct floppy_struct *g, int drive, int type, struct block_device *bdev) set_geometry() argument
H A Dataflop.c11 * - Disk change detection and drive deselecting after motor-off
14 * don't have an HD drive :-(
19 * - Removed drive type (unknown on atari)
42 * - Let user set max. supported drive type (speeds up format
97 { "D360", 9, 720, 0, 1}, /* 1: 360kb in 720k or 1.2MB drive */
98 { "D720", 9,1440, 0, 0}, /* 2: 720kb in 720k or 1.2MB drive */
195 * MSch: User-provided type information. 'drive' points to
201 * User-provided permanent type information. 'drive' points to
210 int connected; /* !=0 : drive is connected */
226 #define UD unit[drive]
227 #define UDT unit[drive].disktype
284 #define IS_BUFFERED(drive,side,track) \
285 (BufferDrive == (drive) && BufferSide == (side) && BufferTrack == (track))
315 #define RECALIBRATE_ERRORS 4 /* After this many errors the drive
343 static void fd_select_drive( int drive );
349 static int do_format(int drive, int type, struct atari_format_descr *desc);
350 static void do_fd_action( int drive );
364 static void setup_req_params( int drive );
368 static void fd_probe( int drive );
369 static int fd_test_drive_present( int drive );
425 /* Select a drive, update the FDC's track register and set the correct
429 static void fd_select_drive( int drive ) fd_select_drive()
434 if (drive == SelectedDrive) fd_select_drive()
441 sound_ym.wd_data = (tmp | DSKDRVNONE) & ~(drive == 0 ? DSKDRV0 : DSKDRV1); fd_select_drive()
454 SelectedDrive = drive; fd_select_drive()
470 /* On Falcon, the drive B select line is used on the printer port, so fd_deselect()
479 * counts the index signals, which arrive only if one drive is selected.
487 /* no drive selected, needn't deselect anyone */ fd_motor_off_timer()
505 * in the drive and the FDC will leave the motor on forever (or, fd_motor_off_timer()
520 static int drive = 0; check_change() local
526 if (++drive > 1 || !UD.connected) check_change()
527 drive = 0; check_change()
536 ~(drive == 0 ? DSKDRV0 : DSKDRV1); check_change()
541 DPRINT(( "wpstat[%d] = %d\n", drive, stat )); check_change()
543 set_bit (drive, &changed_floppies); check_change()
646 static int do_format(int drive, int type, struct atari_format_descr *desc) do_format() argument
653 drive, desc->track, desc->head, desc->sect_offset )); do_format()
708 do_fd_action( drive ); do_format()
718 * required parameter settings (drive select, side select, track
726 static void do_fd_action( int drive ) do_fd_action()
732 if (IS_BUFFERED( drive, ReqSide, ReqTrack )) { do_fd_action()
737 setup_req_params( drive ); do_fd_action()
755 if (SelectedDrive != drive) do_fd_action()
756 fd_select_drive( drive ); do_fd_action()
811 /* Seek the drive to the requested track. The drive must have been
1332 unsigned int drive = p - unit; floppy_check_events() local
1333 if (test_bit (drive, &fake_change)) { floppy_check_events()
1337 if (test_bit (drive, &changed_floppies)) { floppy_check_events()
1354 unsigned int drive = p - unit; floppy_revalidate() local
1356 if (test_bit(drive, &changed_floppies) || floppy_revalidate()
1357 test_bit(drive, &fake_change) || floppy_revalidate()
1362 clear_bit(drive, &fake_change); floppy_revalidate()
1363 clear_bit(drive, &changed_floppies); floppy_revalidate()
1367 if (default_params[drive].blocks == 0) floppy_revalidate()
1370 UDT = &default_params[drive]; floppy_revalidate()
1378 static void setup_req_params( int drive ) setup_req_params()
1423 int drive, type; redo_fd_request() local
1440 drive = floppy - unit; redo_fd_request()
1444 /* drive not connected */ redo_fd_request()
1445 printk(KERN_ERR "Unknown Device: fd%d\n", drive ); redo_fd_request()
1461 printk(KERN_WARNING "fd%d: invalid disk format", drive ); redo_fd_request()
1466 printk(KERN_WARNING "fd%d: unsupported disk format", drive ); redo_fd_request()
1488 setup_req_params( drive ); redo_fd_request()
1489 do_fd_action( drive ); redo_fd_request()
1514 int drive = floppy - unit; fd_locked_ioctl() local
1534 drive, dtp, dtp->name); fd_locked_ioctl()
1558 * Currently, the drive geometry is cleared after each fd_locked_ioctl()
1579 drive, setprm.size, setprm.sect, setprm.stretch); fd_locked_ioctl()
1598 /* skip this one, invalid for drive ... */ fd_locked_ioctl()
1610 drive, dtp->name, dtp); fd_locked_ioctl()
1616 default_params[drive].name = dtp->name; fd_locked_ioctl()
1617 default_params[drive].spt = dtp->spt; fd_locked_ioctl()
1618 default_params[drive].blocks = dtp->blocks; fd_locked_ioctl()
1619 default_params[drive].fdc_speed = dtp->fdc_speed; fd_locked_ioctl()
1620 default_params[drive].stretch = dtp->stretch; fd_locked_ioctl()
1632 dtp = &default_params[drive]; fd_locked_ioctl()
1635 dtp = &user_params[drive]; fd_locked_ioctl()
1648 drive, dtp->blocks, dtp->spt, dtp->stretch); fd_locked_ioctl()
1676 return do_format(drive, type, &fmt_desc); fd_locked_ioctl()
1680 default_params[drive].blocks = 0; fd_locked_ioctl()
1686 set_bit(drive, &fake_change); fd_locked_ioctl()
1706 /* Initialize the 'unit' variable for drive 'drive' */
1708 static void __init fd_probe( int drive ) fd_probe()
1713 if (!fd_test_drive_present( drive )) fd_probe()
1718 switch( UserSteprate[drive] ) { fd_probe()
1742 /* This function tests the physical presence of a floppy drive (not
1746 * signal. This should now be raised if there is a drive connected
1747 * (and there is no hardware failure :-) Otherwise, the drive is
1751 static int __init fd_test_drive_present( int drive ) fd_test_drive_present()
1757 if (drive >= (MACH_IS_FALCON ? 1 : 2)) return( 0 ); fd_test_drive_present()
1758 fd_select_drive( drive ); fd_test_drive_present()
1800 int drive, cnt = 0; config_types() local
1806 printk(KERN_INFO "Probing floppy drive(s):\n"); config_types()
1807 for( drive = 0; drive < FD_MAX_UNITS; drive++ ) { config_types()
1808 fd_probe( drive ); config_types()
1810 printk(KERN_INFO "fd%d\n", drive); config_types()
1838 * drive with different device numbers.
1913 int drive = *part & 3; floppy_find() local
1915 if (drive >= FD_MAX_UNITS || type > NUM_DISK_MINORS) floppy_find()
1918 return get_disk(unit[drive].disk); floppy_find()
2017 printk(KERN_ERR "ataflop_setup: bad drive type\n" ); atari_floppy_setup()
H A Dhd.c14 * IRQ-unmask, drive-id, multiple-mode, support for ">16 heads",
66 #define HD_CURRENT 0x1f6 /* 101dhhhh , d=drive, hhhh=head */
290 static int controller_ready(unsigned int drive, unsigned int head) controller_ready() argument
297 outb_p(0xA0 | (drive<<4) | head, HD_CURRENT); controller_ready()
397 * drive enters "idle", "standby", or "sleep" mode, so if the status looks
575 * data/cmds with a drive, because some drives seem to have very poor
699 int drive; hd_init() local
717 * We don't know anything about the drive. This means hd_init()
718 * that you *MUST* specify the drive parameters to the hd_init()
724 * drive, and if we're using this legacy driver, it's hd_init()
726 * legacy data off an ST-506 drive. Either way, it's hd_init()
735 for (drive = 0 ; drive < NR_HD ; drive++) { hd_init()
737 struct hd_i_struct *p = &hd_info[drive]; hd_init()
741 disk->first_minor = drive << 6; hd_init()
743 sprintf(disk->disk_name, "hd%c", 'a'+drive); hd_init()
747 p->unit = drive; hd_init()
748 hd_gendisk[drive] = disk; hd_init()
769 for (drive = 0; drive < NR_HD; drive++) hd_init()
770 add_disk(hd_gendisk[drive]); hd_init()
779 for (drive = 0; drive < NR_HD; drive++) hd_init()
780 put_disk(hd_gendisk[drive]); hd_init()
788 while (drive--) hd_init()
789 put_disk(hd_gendisk[drive]); hd_init()
H A Dcpqarray.c1141 * ida_ioctl does some miscellaneous stuff like reporting drive geometry,
1687 /* Get controllers info for this logical drive */ getgeometry()
1691 * If can't get controller info, set the logical drive map to 0, getgeometry()
1706 * Initialize logical drive map to zero getgeometry()
1710 * Get drive geometry for all logical drives getgeometry()
1725 Send "Identify logical drive status" cmd getgeometry()
1731 If can't get logical drive status, set getgeometry()
1732 the logical drive map to 0, so the getgeometry()
1739 " failed to report status of logical drive %d\n" getgeometry()
1745 Make sure the logical drive is configured getgeometry()
1752 logical drive won't be set and getgeometry()
1785 } /* end of if logical drive configured */ getgeometry()
/linux-4.1.27/include/linux/platform_data/
H A Dst1232_pdata.h7 * Use this if you want the driver to drive the reset pin.
H A Dsi5351.h50 * enum si5351_drive_strength - Si5351 clock output drive strength
52 * @SI5351_DRIVE_2MA: 2mA clock output drive strength
53 * @SI5351_DRIVE_4MA: 4mA clock output drive strength
54 * @SI5351_DRIVE_6MA: 6mA clock output drive strength
55 * @SI5351_DRIVE_8MA: 8mA clock output drive strength
88 * @drive: output drive strength
94 enum si5351_drive_strength drive; member in struct:si5351_clkout_config
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/bios/
H A Di2c.c94 info->drive = DCB_I2C_UNUSED; dcb_i2c_parse()
101 info->drive = nv_ro08(bios, ent + 0); dcb_i2c_parse()
105 info->drive = nv_ro08(bios, ent + 1); dcb_i2c_parse()
108 info->drive = nv_ro08(bios, ent + 0) & 0x0f; dcb_i2c_parse()
118 info->drive = (nv_ro16(bios, ent + 0) & 0x01f) >> 0; dcb_i2c_parse()
119 if (info->drive == 0x1f) dcb_i2c_parse()
120 info->drive = DCB_I2C_UNUSED; dcb_i2c_parse()
145 info->drive = nv_ro08(bios, ent + 4); dcb_i2c_parse()
146 if (!info->drive) info->drive = 0x3f; dcb_i2c_parse()
151 info->drive = nv_ro08(bios, ent + 6); dcb_i2c_parse()
152 if (!info->drive) info->drive = 0x37; dcb_i2c_parse()
/linux-4.1.27/arch/powerpc/include/asm/
H A Dmediabay.h12 #define MB_FD 0 /* media bay contains floppy drive (automatic eject ?) */
13 #define MB_FD1 1 /* media bay contains floppy drive (manual eject ?) */
15 #define MB_CD 3 /* media bay contains ATA drive such as CD or ZIP */
/linux-4.1.27/include/sound/
H A Dadau1373.h2 * Analog Devices ADAU1373 Audio Codec drive
H A Dwm8955.h19 /* Configure LOUT2/ROUT2 to drive a speaker */
/linux-4.1.27/include/linux/
H A Damifd.h30 unsigned long code; /* code returned from drive */
31 char *name; /* description of drive */
53 int disk; /* disk in drive (-1 == unknown) */
55 int busy; /* true when drive is active */
H A Dide.h197 * Now for the data we need to maintain per-drive: ide_drive_t
220 ide_stopped, /* no drive operation was started */
221 ide_started, /* a drive operation was started, handler was set */
380 /* Drive is a pre ATAPI 1.2 drive. */
388 /* We think that the drive door is locked. */
400 /* Avoid commands not supported in Clik drive */
483 char name[4]; /* drive name, such as "hda" */
493 const struct ide_proc_devset *settings; /* /proc/ide/ drive settings */
506 u8 select; /* basic drive/head select reg value */
519 u8 ready_stat; /* min status value for drive ready */
541 int crc_count; /* crc counter to reduce drive speed */
612 * @maskproc: special host masking for drive selection
613 * @quirkproc: check host's drive quirk list
750 /* current drive */
808 * configurable drive settings
826 static int get_##name(ide_drive_t *drive) \
828 return drive->field; \
832 static int set_##name(ide_drive_t *drive, int arg) \
834 drive->field = arg; \
839 static int get_##name(ide_drive_t *drive) \
841 return !!(drive->dev_flags & flag); \
845 static int set_##name(ide_drive_t *drive, int arg) \
848 drive->dev_flags |= flag; \
850 drive->dev_flags &= ~flag; \
939 static inline void ide_proc_unregister_device(ide_drive_t *drive) { ; } ide_proc_unregister_port() argument
941 static inline void ide_proc_register_driver(ide_drive_t *drive, ide_proc_register_driver() argument
943 static inline void ide_proc_unregister_driver(ide_drive_t *drive, ide_proc_unregister_driver() argument
963 if (unlikely(drive->debug_mask & lvl)) \
1073 extern int ide_devset_execute(ide_drive_t *drive,
1079 void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd);
1132 void ide_retry_pc(ide_drive_t *drive);
1134 void ide_prep_sense(ide_drive_t *drive, struct request *rq);
1135 int ide_queue_sense_rq(ide_drive_t *drive, void *special);
1159 extern int taskfile_lib_get_identify(ide_drive_t *drive, u8 *);
1163 extern void ide_stall_queue(ide_drive_t *drive, unsigned long timeout);
1168 extern void ide_requeue_and_plug(ide_drive_t *drive, struct request *rq);
1349 static inline u8 ide_max_dma_mode(ide_drive_t *drive) ide_max_dma_mode() argument
1351 return ide_find_dma_mode(drive, XFER_UDMA_6); ide_max_dma_mode()
1379 static inline int config_drive_for_dma(ide_drive_t *drive) { return 0; } config_drive_for_dma() argument
1386 static inline u8 ide_find_dma_mode(ide_drive_t *drive, u8 speed) { return 0; } ide_max_dma_mode() argument
1387 static inline u8 ide_max_dma_mode(ide_drive_t *drive) { return 0; } ide_dma_off_quietly() argument
1388 static inline void ide_dma_off_quietly(ide_drive_t *drive) { ; } ide_dma_off() argument
1389 static inline void ide_dma_off(ide_drive_t *drive) { ; } ide_dma_on() argument
1390 static inline void ide_dma_on(ide_drive_t *drive) { ; } ide_dma_verbose() argument
1391 static inline void ide_dma_verbose(ide_drive_t *drive) { ; } ide_set_dma() argument
1392 static inline int ide_set_dma(ide_drive_t *drive) { return 1; } ide_check_dma_crc() argument
1393 static inline void ide_check_dma_crc(ide_drive_t *drive) { ; } ide_dma_intr() argument
1394 static inline ide_startstop_t ide_dma_intr(ide_drive_t *drive) { return ide_stopped; } ide_dma_timeout_retry() argument
1395 static inline ide_startstop_t ide_dma_timeout_retry(ide_drive_t *drive, int error) { return ide_stopped; } ide_release_dma_engine() argument
1397 static inline int ide_dma_prepare(ide_drive_t *drive, ide_dma_prepare() argument
1399 static inline void ide_dma_unmap_sg(ide_drive_t *drive, ide_dma_unmap_sg() argument
1406 extern int ide_acpi_exec_tfs(ide_drive_t *drive);
1415 static inline int ide_acpi_exec_tfs(ide_drive_t *drive) { return 0; } ide_acpi_get_timing() argument
1454 extern void ide_toggle_bounce(ide_drive_t *drive, int on);
1502 static inline void ide_set_pio(ide_drive_t *drive, u8 pio) { ; } ide_set_xfer_rate() argument
1503 static inline int ide_set_xfer_rate(ide_drive_t *drive, u8 rate) { return -1; } ide_set_xfer_rate() argument
1506 static inline void ide_set_max_pio(ide_drive_t *drive) ide_set_max_pio() argument
1508 ide_set_pio(drive, 255); ide_set_max_pio()
1527 static inline ide_drive_t *ide_get_pair_dev(ide_drive_t *drive) ide_get_pair_dev() argument
1529 ide_drive_t *peer = drive->hwif->devices[(drive->dn ^ 1) & 1]; ide_get_pair_dev()
1534 static inline void *ide_get_drivedata(ide_drive_t *drive) ide_get_drivedata() argument
1536 return drive->drive_data; ide_get_drivedata()
1539 static inline void ide_set_drivedata(ide_drive_t *drive, void *data) ide_set_drivedata() argument
1541 drive->drive_data = data; ide_set_drivedata()
H A Dadfs_fs.h7 * Calculate the boot block checksum on an ADFS drive. Note that this will
H A Damifdreg.h18 #define DSKSEL3 (0x1<<6) /* select drive 3 when low */
19 #define DSKSEL2 (0x1<<5) /* select drive 2 when low */
20 #define DSKSEL1 (0x1<<4) /* select drive 1 when low */
21 #define DSKSEL0 (0x1<<3) /* select drive 0 when low */
H A Dscx200_gpio.h38 /* drive the GPIO signal high */
49 /* drive the GPIO signal low */
60 /* drive the GPIO signal to state */
H A Ddynamic_debug.h11 * These fields are used to drive the user interface
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/i2c/
H A Dnv04.c34 u8 drive; member in struct:nv04_i2c_port
43 u8 val = nv_rdvgac(priv, 0, port->drive); nv04_i2c_drive_scl()
46 nv_wrvgac(priv, 0, port->drive, val | 0x01); nv04_i2c_drive_scl()
54 u8 val = nv_rdvgac(priv, 0, port->drive); nv04_i2c_drive_sda()
57 nv_wrvgac(priv, 0, port->drive, val | 0x01); nv04_i2c_drive_sda()
99 port->drive = info->drive; nv04_i2c_port_ctor()
H A Dnv50.c92 if (info->drive >= nv50_i2c_addr_nr) nv50_i2c_port_ctor()
96 port->addr = nv50_i2c_addr[info->drive]; nv50_i2c_port_ctor()
H A Dgf110.c66 port->addr = 0x00d014 + (info->drive * 0x20); gf110_i2c_port_ctor()
H A Dnv4e.c92 port->addr = 0x600800 + info->drive; nv4e_i2c_port_ctor()
/linux-4.1.27/drivers/scsi/
H A Dgdth_ioctl.h14 #define GDTIOCTL_HDRLIST (GDTIOCTL_MASK | 4) /* get host drive list */
16 #define GDTIOCTL_LOCKDRV (GDTIOCTL_MASK | 6) /* lock host drive */
28 #define MAX_LDRIVES 255 /* max. log. drive count */
30 #define MAX_HDRIVES 100 /* max. host drive count */
32 #define MAX_HDRIVES MAX_LDRIVES /* max. host drive count */
54 u16 DeviceNo; /* number of cache drive */
62 u16 DeviceNo; /* number of cache drive */
196 u8 drive_cnt; /* drive count */
216 u16 hdr_no; /* host drive number */
260 } hdr_list[MAX_HDRIVES]; /* index is host drive number */
280 u8 drive_cnt; /* drive count */
323 u16 hdr_no; /* drive no. */
329 } hdr_list[MAX_HDRIVES]; /* index is host drive number */
335 u16 number; /* bus/host drive number */
H A Dgdth.h211 #define GDT_RESERVE_DRV 20 /* reserve host drive */
212 #define GDT_RELEASE_DRV 21 /* release host drive */
236 #define SCSI_DR_INFO 0x00 /* SCSI drive info */
238 #define SCSI_DR_LIST 0x06 /* SCSI drive list */
244 #define ARRAY_INFO 0x12 /* array drive info */
245 #define ARRAY_DRV_LIST 0x0f /* array drive list */
246 #define ARRAY_DRV_LIST2 0x34 /* array drive list (new) */
248 #define CACHE_DRV_CNT 0x01 /* cache drive count */
249 #define CACHE_DRV_LIST 0x02 /* cache drive list */
252 #define CACHE_DRV_INFO 0x07 /* cache drive info */
258 #define HOST_GET 0x10001L /* get host drive list */
266 #define S_CACHE_UNKNOWN 12 /* cache serv.: drive unknown */
358 /* SCSI drive info */
381 u8 orphan; /* flag: drive fragment */
382 u32 last_error; /* sense key or drive state */
405 u32 drive_cnt; /* drive count */
410 /* get SCSI drive numbers */
478 /* array drive component */
481 u8 al_cache_drive; /* cache drive number */
482 u8 al_status; /* cache drive state */
486 /* array drive information */
490 u8 ai_state; /* array drive state */
496 u32 ai_err_info; /* failed cache drive */
497 u8 ai_name[8]; /* name of the array drive */
502 gdth_arraycomp_str ai_drives[35]; /* drive components: */
503 u8 ai_drive_entries; /* number of drive components */
506 u8 ai_ext_state; /* extended array drive state */
511 /* get array drive list */
515 u8 is_arrayd; /* Flag: is array drive? */
517 u8 is_parity; /* Flag: is parity drive? */
518 u8 is_hotfix; /* Flag: is hotfix drive? */
553 /* cache drive info */
555 u8 cd_name[8]; /* cache drive name */
559 u8 cd_initialized; /* drive is initialized */
566 u32 ld_slave; /* log. drive index */
567 u32 ld_dtype; /* type of logical drive */
569 u8 ld_name[8]; /* log. drive name */
654 /* get host drive info */
656 char name[8]; /* host drive name */
658 u8 host_drive; /* host drive number */
659 u8 log_drive; /* log. drive (master) */
671 u8 clust_drvtype; /* cluster drive type */
874 u8 present; /* Flag: host drive present? */
875 u8 is_logdrv; /* Flag: log. drive (master)? */
876 u8 is_arraydrv; /* Flag: array drive? */
877 u8 is_master; /* Flag: array drive master? */
878 u8 is_parity; /* Flag: parity drive? */
879 u8 is_hotfix; /* Flag: hotfix drive? */
880 u8 master_no; /* number of master drive */
881 u8 lock; /* drive locked? (hot plug) */
886 u8 ldr_no; /* log. drive no. */
H A Dgdth_proc.c29 int orig_length, drive, wb_mode; gdth_set_asc_info() local
41 drive = -1; gdth_set_asc_info()
49 drive = (int)(*buffer-'0'); gdth_set_asc_info()
52 drive = drive*10 + (int)(*buffer-'0'); gdth_set_asc_info()
55 printk("GDT: Flushing host drive %d .. ",drive); gdth_set_asc_info()
61 if (drive != -1 && i != drive) gdth_set_asc_info()
78 printk("\nNo host drive found !\n"); gdth_set_asc_info()
259 /* 2.b drive info */ gdth_show_info()
345 /* 3.a log. drive info */ gdth_show_info()
346 TRACE2(("cache_drv_info() drive no %d\n",drv_no)); gdth_show_info()
426 /* 4.a array drive info */ gdth_show_info()
427 TRACE2(("array_info() drive no %d\n",i)); gdth_show_info()
487 /* 5.a get host drive list */ gdth_show_info()
H A Dst_options.h13 between the user buffer and tape drive. If this is not possible, driver
56 separately for each drive using the MTSTOPTIONS ioctl. */
77 /* If ST_AUTO_LOCK is non-zero, the drive door is locked at the first
101 /* Time to wait for the drive to become ready if blocking open */
H A Dmegaraid.h32 * number of I/O completed on each logical drive and how many interrupts
307 u8 drive_insert_count; /* drive insertion count */
343 u8 drive_inserted_count; /* Increase with every drive inserted
345 u8 inserted_drive; /* Channel:Id of inserted drive */
417 u8 status; /* Status of the logical drive */
612 each logical drive */
615 drive */
618 drive */
621 logical drive */
624 logical drive */
627 logical drive */
641 * logical drive set as boot drive
685 #define OP_DEL_LOGDRV 0x1C /* delete logical drive */
730 * Physical drive states.
740 * Raid logical drive states.
834 int boot_pdrv_enabled; /* boot from physical drive */
835 int boot_pdrv_ch; /* boot physical drive channel */
836 int boot_pdrv_tgt; /* boot physical drive target */
841 int read_ldidmap; /* set after logical drive deltion. The
842 logical drive number must be read from the
845 drive needs to be done. Stop
850 u8 logdrv_chan[MAX_CHANNELS+NVIRT_CHAN]; /* logical drive are on
H A Dimm.h3 * the Iomega ZIP Plus drive
23 * It manages to find the drive which is a good start. Writing data during
27 * PS: Took four hours of coding after I bought a drive.
H A Deata_generic.h148 #define HA_SREADY 0x40 /* drive ready */
149 #define HA_SBUSY 0x80 /* drive busy */
190 __u8 ready:1; /* drive ready */
196 __u8 irq:1; /* set when drive interrupt is asserted */
370 __u8 id; /* drive id */
371 __u8 lun; /* drive lun */
379 struct drive_geom_emul drv[2]; /* drive structures */
H A Dosst_options.h64 separately for each drive using the MTSTOPTIONS ioctl. */
85 /* If OSST_AUTO_LOCK is non-zero, the drive door is locked at the first
H A Dsr.h42 unsigned readcd_known:1; /* drive supports READ_CD (0xbe) */
H A Dsr_vendor.c174 no_multi = 0; /* flag: the drive can't handle multisession */ sr_cd_check()
194 sr_printk(KERN_INFO, cd, "Hmm, seems the drive " sr_cd_check()
249 sr_printk(KERN_INFO, cd, "Hmm, seems the drive " sr_cd_check()
H A Dhpsa_cmd.h665 __le32 total_blocks; /* number for sectors on drive */
669 u8 firmware_revision[8]; /* drive firmware revision */
671 u8 compaq_drive_stamp; /* 0 means drive not stamped */
729 u8 scsi_lun; /* SCSI LUN for phys drive */
734 u8 phys_box_on_bus; /* phys enclosure this drive resides */
735 u8 phys_bay_in_box; /* phys drv bay this drive resides */
737 u8 device_type; /* type of drive */
H A Dconstants.c922 {0x5D10, "Hardware impending failure general hard drive failure"},
923 {0x5D11, "Hardware impending failure drive error rate too high"},
934 {0x5D1C, "Hardware impending failure drive calibration retry count"},
935 {0x5D20, "Controller impending failure general hard drive failure"},
936 {0x5D21, "Controller impending failure drive error rate too high"},
947 {0x5D2C, "Controller impending failure drive calibration retry count"},
948 {0x5D30, "Data channel impending failure general hard drive failure"},
949 {0x5D31, "Data channel impending failure drive error rate too high"},
960 {0x5D3C, "Data channel impending failure drive calibration retry "
962 {0x5D40, "Servo impending failure general hard drive failure"},
963 {0x5D41, "Servo impending failure drive error rate too high"},
974 {0x5D4C, "Servo impending failure drive calibration retry count"},
975 {0x5D50, "Spindle impending failure general hard drive failure"},
976 {0x5D51, "Spindle impending failure drive error rate too high"},
987 {0x5D5C, "Spindle impending failure drive calibration retry count"},
988 {0x5D60, "Firmware impending failure general hard drive failure"},
989 {0x5D61, "Firmware impending failure drive error rate too high"},
1000 {0x5D6C, "Firmware impending failure drive calibration retry count"},
H A Dmegaraid.c403 * delete logical drive opertion. If it is, don't run megaraid_queue_lck()
454 * Calculate the logical drive number based on the information in scsi command
472 * If we have a logical drive with boot enabled, project it first mega_get_ldrv_num()
486 * If "delete logical drive" feature is enabled on this controller. mega_get_ldrv_num()
487 * Do only if at least one delete logical drive operation was done. mega_get_ldrv_num()
489 * Also, after logical drive deletion, instead of logical drive number, mega_get_ldrv_num()
490 * the value returned should be 0x80+logical drive id. mega_get_ldrv_num()
514 * also finds out if the commands is intended for a logical drive or a
532 int ldrv_num = 0; /* logical drive number */ mega_build_cmd()
540 * The theory: If physical drive is chosen for boot, all the physical mega_build_cmd()
599 * max_ldrv_num increases by 0x80 if some logical drive was mega_build_cmd()
626 * Logical drive commands mega_build_cmd()
771 * Take modulo 0x80, since the logical drive mega_build_cmd()
773 * drive was deleted mega_build_cmd()
897 * Passthru drive commands mega_build_cmd()
1515 * Maintain an error counter for the logical drive. mega_cmd_done()
1523 * Logical drive number increases by 0x80 when mega_cmd_done()
1524 * a logical drive is deleted mega_cmd_done()
1533 * Logical drive number increases by 0x80 when mega_cmd_done()
1534 * a logical drive is deleted mega_cmd_done()
2499 * @start - starting logical drive to display
2500 * @end - ending logical drive to display
2596 * information about each logical drive. proc_show_rdrv()
2598 seq_printf(m, "Logical drive:%2d:, ", i); proc_show_rdrv()
2620 * for this logical drive. proc_show_rdrv()
3105 * Check for the validity of the logical drive number megadev_ioctl()
3147 * Deletion of logical drive is a special case. The adapter megadev_ioctl()
3703 * Find out which device is the boot device. Note, any logical drive or any
3748 * If MSB is set, a physical drive is set as boot mega_get_boot_drv()
3827 * @logdrv - logical drive to be deleted
3829 * Delete the specified logical drive. It is the responsibility of the user
3858 * If delete operation was successful, add 0x80 to the logical drive mega_del_logdrv()
3901 * After deleting first logical drive, the logical drives must be mega_do_del_logdrv()
3902 * addressed by adding 0x80 to the logical drive id. mega_do_del_logdrv()
4148 * delete logical drive opertion. If it is, don't run mega_internal_command()
4415 * Find out if a logical drive is set as the boot drive. If megaraid_probe_one()
4416 * there is one, will make that as the first logical drive. megaraid_probe_one()
4417 * ROMB: Do we have to boot from a physical drive. Then all megaraid_probe_one()
H A D3w-9xxx.h104 {0x002D, "Background rebuild error on source drive"},
105 {0x002E, "Replace failed because replacement drive too small"},
107 {0x0030, "Unsupported ATA drive"},
156 {0x010E, "Specified port has invalid drive"},
168 {0x0124, "Replace drive capacity too small"},
245 {0x0255, "CreateUnit descriptor specifies a drive already in use"},
H A Dfdomain.c78 Please note that the drive ordering that Future Domain implemented in BIOS
81 more than one drive, then the drive ordering will be the reverse of that
1592 int drive; fdomain_16x0_biosparam() local
1606 The drive parameter table seems to start at 0x1f30. fdomain_16x0_biosparam()
1609 The last 4 bytes appear to be the drive's size in sectors. fdomain_16x0_biosparam()
1610 The other bytes in the drive parameter table are unknown. fdomain_16x0_biosparam()
1622 0x1f2d is a drive count (i.e., not including tapes) fdomain_16x0_biosparam()
1631 The drive parameter table starts at 0x1f33. fdomain_16x0_biosparam()
1640 The drive parameter table starts at 0x1f70. Each entry is fdomain_16x0_biosparam()
1648 drive = MINOR(bdev->bd_dev) >> 4; fdomain_16x0_biosparam()
1655 offset = 0x1f33 + drive * 25; fdomain_16x0_biosparam()
1658 offset = 0x1f36 + drive * 15; fdomain_16x0_biosparam()
1661 offset = 0x1f34 + drive * 15; fdomain_16x0_biosparam()
1664 offset = 0x1f31 + drive * 25; fdomain_16x0_biosparam()
1674 memcpy_fromio( &i, bios_mem + 0x1f71 + drive * 10, fdomain_16x0_biosparam()
H A Dst.h91 int drv_block; /* The block where the drive head is */
97 /* The tape drive descriptor */
/linux-4.1.27/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/
H A Di2c.h16 u8 drive; member in struct:dcb_i2c_entry
/linux-4.1.27/drivers/power/reset/
H A Dgpio-poweroff.c32 /* drive it active, also inactive->active edge */ gpio_poweroff_do_poweroff()
35 /* drive inactive, also active->inactive edge */ gpio_poweroff_do_poweroff()
39 /* drive it active, also inactive->active edge */ gpio_poweroff_do_poweroff()
H A Dgpio-restart.c40 /* drive it active, also inactive->active edge */ gpio_restart_notify()
44 /* drive inactive, also active->inactive edge */ gpio_restart_notify()
48 /* drive it active, also inactive->active edge */ gpio_restart_notify()
/linux-4.1.27/drivers/s390/char/
H A Dhmcdrv_mod.c22 MODULE_DESCRIPTION("HMC drive DVD access");
H A Dhmcdrv_ftp.c25 * struct hmcdrv_ftp_ops - HMC drive FTP operations
57 /* Description of all HMC drive FTP commands hmcdrv_ftp_cmd_getid()
105 * hmcdrv_ftp_parse() - HMC drive FTP command parser
155 * hmcdrv_ftp_do() - perform a HMC drive FTP, with data from kernel-space
180 * hmcdrv_ftp_probe() - probe for the HMC drive FTP service
225 * hmcdrv_ftp_cmd() - Perform a HMC drive FTP, with data from user-space
286 * hmcdrv_ftp_startup() - startup of HMC drive FTP functionality for a
330 * hmcdrv_ftp_shutdown() - shutdown of HMC drive FTP functionality for a
H A Dhmcdrv_ftp.h14 * HMC drive FTP Service max. length of path (w/ EOS)
19 * enum hmcdrv_ftp_cmdid - HMC drive FTP commands
H A Dhmcdrv_cache.c107 * hmcdrv_cache_do() - do a HMC drive CD/DVD transfer with cache update
126 * assemble a new HMC drive FTP cmd specification (pointing hmcdrv_cache_do()
167 * hmcdrv_cache_cmd() - perform a cached HMC drive CD/DVD transfer
210 * hmcdrv_cache_startup() - startup of HMC drive cache
238 * hmcdrv_cache_shutdown() - shutdown of HMC drive cache
H A Dtape_34xx.c65 * means that the drive is 'neither ready nor on-line' it is __tape_34xx_medium_sense()
67 * the drive isn't online... __tape_34xx_medium_sense()
224 /* A medium was inserted in the drive. */ tape_34xx_unsolicited_irq()
273 * Handle data overrun between cu and drive. The channel speed might
488 * Path equipment check. Might be drive adapter error, buffer tape_34xx_unit_check()
498 * but the drive is displaying a drive check message. Can tape_34xx_unit_check()
549 * Not capable. This indicates either that the drive fails tape_34xx_unit_check()
551 * is not supported by the drive. tape_34xx_unit_check()
577 * Unload failure. The drive cannot maintain tape tension tape_34xx_unit_check()
588 * - cu cannot recover from a drive detected error tape_34xx_unit_check()
589 * - a check code message is shown on drive display tape_34xx_unit_check()
667 /* The drive is assigned to a different channel path. */ tape_34xx_unit_check()
675 * the drive address may not be set correctly. tape_34xx_unit_check()
700 * CU and drive incompatible. The drive requests micro-program tape_34xx_unit_check()
784 * which could cause damage to the tape or the drive. tape_34xx_unit_check()
898 * helps the tape drive to speed up searching for a specific block.
H A Dhmcdrv_dev.c8 * assigned HMC drive CD/DVD-ROM. It works as follows: First create the
280 * hmcdrv_dev_init() - creates a HMC drive CD/DVD device
282 * This function creates a HMC drive CD/DVD kernel device and an associated
353 * hmcdrv_dev_exit() - destroys a HMC drive CD/DVD device
/linux-4.1.27/arch/ia64/hp/sim/
H A Dhpsim_setup.c37 ROOT_DEV = Root_SDA1; /* default to first SCSI drive */ hpsim_setup()
/linux-4.1.27/arch/arm/boot/dts/
H A Dmxs-pinfunc.h17 /* fsl,drive-strength property */
/linux-4.1.27/arch/arm/mach-pxa/
H A Dreset.c61 /* drive it low */ do_gpio_reset()
64 /* rising edge or drive high */ do_gpio_reset()
/linux-4.1.27/drivers/macintosh/
H A Dwindfarm_pm121.c25 * controls with a tiny difference. The control-ids of hard-drive-fan
82 * ref : optical-drive-fan
87 * control : optical-drive-fan
88 * ref : hard-drive-fan
103 * control : hard-drive-fan
104 * sensor : hard-drive-temp
113 * control : hard-drive-fan
114 * sensor : hard-drive-temp
125 * control : optical-drive-fan
126 * sensor : optical-drive-temp
135 * control : optical-drive-fan
136 * sensor : optical-drive-temp
147 * control : hard-drive-fan
169 * control : optical-drive-fan
179 * control : hard-drive-fan
895 all = pm121_register_control(ct, "optical-drive-fan", FAN_OD) && all; pm121_new_control()
896 all = pm121_register_control(ct, "hard-drive-fan", FAN_HD) && all; pm121_new_control()
933 all = pm121_register_sensor(sr, "hard-drive-temp", pm121_new_sensor()
935 all = pm121_register_sensor(sr, "optical-drive-temp", pm121_new_sensor()
H A Dwindfarm_smu_controls.c211 fct->ctrl.name = "drive-bay-fan"; smu_fan_create()
220 else if (!strcmp(l, "Hard Drive") || !strcmp(l, "Hard drive")) smu_fan_create()
221 fct->ctrl.name = "drive-bay-fan"; smu_fan_create()
223 fct->ctrl.name = "hard-drive-fan"; smu_fan_create()
225 fct->ctrl.name = "optical-drive-fan"; smu_fan_create()
H A Dwindfarm_lm75_sensor.c111 if (!strcmp(loc, "Hard drive") || !strcmp(loc, "DRIVE BAY")) wf_lm75_probe()
116 name = "optical-drive-temp"; wf_lm75_probe()
118 name = "hard-drive-temp"; wf_lm75_probe()
/linux-4.1.27/drivers/scsi/megaraid/
H A Dmbox_defs.h99 * Physical drive states.
109 * Raid logical drive states.
148 * @logdrv : logical drive number
217 * @logdrv : logical drive number if command for LD
267 * @logdrv : logical drive number if command for LD
437 * @drive_insert_count : drive insertion count
496 * @drive_inserted_count : increase with every drive inserted
497 * @inserted_drive : channel:Id of inserted drive
534 * @size : size of each logical drive
536 * @state : state of each logical drive
549 * @pdrv_state : state of each physical drive
630 * @status : status of the logical drive
648 * logdrv_40ld_t - logical drive definition for 40LD controllers
659 * logdrv_8ld_span8_t - logical drive definition for 8LD controllers
663 * 8-LD logical drive with up to 8 spans
672 * logdrv_8ld_span4_t - logical drive definition for 8LD controllers
676 * 8-LD logical drive with up to 4 spans
755 * @boot_drv : logical drive set as boot drive, 0..7 - for 8LD cards,
H A Dmega_common.h144 * device in question is a logical drive.
225 * @target : target id of the device or logical drive number
226 * @islogical : set if the command is for the logical drive
229 * the corresponding physical channel and target or logical drive number
238 * Get an index into our table of drive ids mapping \
/linux-4.1.27/drivers/block/paride/
H A Dpcd.c9 port ATAPI CD-ROM drive, but if their individual parameters are
24 the corresponding drive. (required)
27 supports this drive. These numbers are
42 Set this to 0 to choose the master drive, 1 to
44 first drive found.
195 int drive; /* master/slave */ member in struct:pcd_unit
217 static struct pcd_unit *pcd_current; /* current request's drive */
307 cd->drive = (*drives[unit])[D_SLV]; pcd_init_units()
381 write_reg(cd, 6, 0xa0 + 0x10 * cd->drive); pcd_command()
544 write_reg(cd, 6, 0xa0 + 0x10 * cd->drive); pcd_reset()
621 cd->name, cd->drive ? "Slave" : "Master"); pcd_identify()
632 printk("%s: %s: %s\n", cd->name, cd->drive ? "Slave" : "Master", id); pcd_identify()
638 * returns 0, with id set if drive is detected
639 * -1, if drive detection failed
644 for (cd->drive = 0; cd->drive <= 1; cd->drive++) pcd_probe()
648 cd->drive = ms; pcd_probe()
723 printk("%s: No CD-ROM drive found\n", name); pcd_detect()
H A Dpt.c17 port ATAPI tape drive, but if their individual parameters are
35 the corresponding drive. (required)
38 supports this drive. These numbers are
53 Set this to 0 to choose the master drive, 1 to
55 first drive found.
221 int drive; /* drive */ member in struct:pt_unit
268 return 0xa0+0x10*tape->drive; DRIVE()
547 tape->name, tape->drive, dt); pt_identify()
570 printk("%s: %s %s, %s", tape->name, mf, id, ms[tape->drive]); pt_identify()
584 * returns 0, with id set if drive is detected
585 * -1, if drive detection failed
589 if (tape->drive == -1) { pt_probe()
590 for (tape->drive = 0; tape->drive <= 1; tape->drive++) pt_probe()
617 tape->drive = DU[D_SLV]; pt_detect()
647 printk("%s: No ATAPI tape drive detected\n", name); pt_detect()
H A Dfriq.c10 CD-ROM drive. It is also used in LS-120 drives by
13 The battery powered drive requires software support to
14 control the power to the drive. This module enables the
15 drive power when the high level driver (pcd) is loaded
H A Dpg.c58 the corresponding drive. (required)
61 supports this drive. These numbers are
76 Set this to 0 to choose the master drive, 1 to
78 first drive found.
216 int drive; /* drive */ member in struct:pg
255 dev->drive = parm[D_SLV]; pg_init_units()
279 return 0xa0+0x10*dev->drive; DRIVE()
454 printk("%s: %s %s, %s\n", dev->name, mf, id, ms[dev->drive]); pg_identify()
461 * returns 0, with id set if drive is detected
462 * -1, if drive detection failed
466 if (dev->drive == -1) { pg_probe()
467 for (dev->drive = 0; dev->drive <= 1; dev->drive++) pg_probe()
H A Dpf.c9 port ATAPI disk drive, but if their individual parameters are
24 the corresponding drive. (required)
27 supports this drive. These numbers are
42 Set this to 0 to choose the master drive, 1 to
44 first drive found.
47 One example is the ATAPI PD/CD drive from
49 CD drive on LUN 0 and a PD drive on LUN 1.
235 int drive; /* drive */ member in struct:pf_unit
292 pf->drive = (*drives[unit])[D_SLV]; pf_init_units()
430 write_reg(pf, 6, 0xa0+0x10*pf->drive); pf_command()
541 write_reg(pf, 6, 0xa0+0x10*pf->drive); pf_reset()
620 pf->name, pf->drive, pf->lun, bs); pf_get_capacity()
641 pf->name, pf->drive, pf->lun, dt); pf_identify()
657 pf->name, mf, id, ms[pf->drive], pf->lun, dt); pf_identify()
671 /* returns 0, with id set if drive is detected
672 -1, if drive detection failed
676 if (pf->drive == -1) { pf_probe()
677 for (pf->drive = 0; pf->drive <= 1; pf->drive++) pf_probe()
H A Dpd.c9 port IDE drive, but if their individual parameters are
24 the corresponding drive. (required)
27 supports this drive. These numbers are
42 should use the CHS geometry provided by the drive
59 Set this to 0 to choose the master drive, 1 to
61 first drive found.
232 int drive; /* master=0 slave=1 */ member in struct:pd_unit
272 return 0xa0+0x10*disk->drive; DRIVE()
289 { /* called only for MASTER drive */ pd_reset()
385 static struct pd_unit *pd_current; /* current request's drive */
658 settings on the SLAVE drive. pd_identify()
661 if (disk->drive == 0) pd_identify()
692 disk->drive ? "slave" : "master", pd_identify()
845 if (disk->drive == -1) { pd_probe_drive()
846 for (disk->drive = 0; disk->drive <= 1; disk->drive++) pd_probe_drive()
867 disk->drive = parm[D_SLV]; pd_detect()
906 printk("%s: no valid drive found\n", name); pd_detect()
/linux-4.1.27/block/partitions/
H A Dacorn.c177 * with pointer to next 'drive'. adfspart_check_CUMANA()
252 * Alloc : hda = whole drive
253 * hda1 = ADFS partition on first drive.
351 * Alloc : hda = whole drive
352 * hda1 = ADFS partition 0 on first drive.
353 * hda2 = ADFS partition 1 on first drive.
447 * Alloc : hda = whole drive
448 * hda1 = ADFS partition 0 on first drive.
449 * hda2 = ADFS partition 1 on first drive.
/linux-4.1.27/arch/arm/include/asm/
H A Dfloppy.h52 /* Floppy_selects is the list of DOR's to select drive fd
55 * in the order that they are found. This is done by seeking the drive
57 * then there is no floppy drive present. [to be put back in again]
/linux-4.1.27/arch/mn10300/kernel/
H A Dprofile.c24 /* use timer 11 to drive the profiling interrupts */ profile_init()
/linux-4.1.27/Documentation/cdrom/
H A Dcdrom-standard.tex53 devices; the way a particular drive reacts to a `standard' $ioctl()$
67 When the \cdrom\ was developed, the interface between the \cdrom\ drive
75 most of the `NoName' manufacturers). In cases where a new drive really
90 capabilities of a particular drive, in an {\fo ad hoc\/} manner. More
106 of the low-level device drivers for each \cdrom\ drive. By adding this
125 more than one \cdrom\ drive, possibly of mixed types. It is important
128 drive. In the months that I was busy writing a \linux\ driver for it,
132 16 speed \cdrom\ drive, and 24 speed drives are common.
145 drive behavior, and to provide a common set of services to the various
206 This structure contains information about a particular \cdrom\ drive,
211 Registering a particular \cdrom\ drive with the \UCD\ is done by the
260 \cdrom\ hardware and/or low-level \cdrom\ driver when a \cdrom\ drive
266 driver\/} rather than the {\em drive}. Nomenclature has always been
278 The drive-specific, minor-like information that is registered with
301 struct and specifications of properties of the drive are stored in this
305 in $ops\to capability$, if a specific drive doesn't support a feature
307 drive, measured in units of normal audio speed (176\,kB/sec raw data or
309 number of discs the drive can hold simultaneously, if it is designed
311 because they describe properties of the drive, which don't change after
314 A few registers contain variables local to the \cdrom\ drive. The
321 data that is specific to a minor drive, can be accessed through $handle$,
370 \label{drive status}
373 information on the status of the drive (not the status of the disc,
374 which may or may not be in the drive). If the drive is not a changer,
413 drive allows this. The value of $lock$ controls the desired locking
426 are several reasons for changing the speed of a \cdrom\ drive. Badly
439 drive, measured in units of standard cdrom speed (176\,kB/sec raw data
440 or 150\,kB/sec file system data). So to request that a \cdrom\ drive
443 maximum data-rate or real-time audio rate. If the drive doesn't have
450 If the drive can store multiple discs (a juke-box) this function
483 This call should perform a hard-reset on the drive (although in
484 circumstances that a hard-reset is necessary, a drive may very well not
486 caller only after the drive has finished resetting. If the drive is no
551 of a \cdrom\ drive. This can be done by ORing any number of
560 CDC_SELECT_DISC& drive is juke-box\cr
567 CDC_DRIVE_STATUS& driver implements drive status\cr
572 inform \cdromc\ of what the driver can do. If the drive found
577 \cdrom\ drive might be a caddy system, which can't load the tray, and
578 hence for this drive the $cdrom_device_info$ struct will have set
595 have made the drive's support available to the \linux\ community. The
637 $ioctl$ commands, regardless of the state the drive is in.
639 On the other hand, when used as a removable-media disc drive (what the
641 disc drive is ready for operation upon opening the device. In the old
644 attempt for mounting a \cdrom\ on an empty drive occurs. This is not a
647 drive for a couple of seconds, after which the system complains it
649 removable medium in a drive, and we believe we should exploit that
654 These two ways of using a \cdrom\ drive, principally for data and
681 successful, unless the whole device doesn't exist. The drive will take
727 it is verified that a disc is in the drive and, if $CDO_CHECK_TYPE$ is
730 system corruption. If the drive is opened for audio ($O_NONBLOCK$ is
876 $arg$ is checked against the maximum head rate of the drive found in the
888 \item[CDROM_DRIVE_STATUS] Returns the status of the drive by a call to
889 $drive_status()$. Return values are defined in section~\ref{drive
891 current playing activity of the drive; this can be polled through an
897 drive. It should be viewed as a complement to $CDROM_DRIVE_STATUS$.
899 disc that is inserted in the drive. This functionality used to be
938 \item[CDROMRESET] Reset the drive.
940 drive. Refer to section \ref{capability} for more information on
942 \item[CDROM_LOCKDOOR] Locks the door of the drive. $arg == \rm0$
961 $\&<your-drive>_fops$ to $\&cdrom_fops$.
963 $$register_cdrom(\&<your-drive>_info);$$
/linux-4.1.27/drivers/ata/
H A Dpata_palmld.c65 /* remap drive's physical memory address */ palmld_pata_probe()
78 /* reset the drive */ palmld_pata_probe()
H A Dpata_oldpiix.c11 * does drive selection and we use this to reload the timings.
97 * Clear the other drive's timing bits. oldpiix_set_piomode()
158 /* If the drive MWDMA is faster than it can do PIO then oldpiix_set_dmamode()
166 clear the other drive TIME register as a precaution */ oldpiix_set_dmamode()
H A Dpata_acpi.c122 acpi->gtm.drive[unit].pio = t->cycle; pacpi_set_piomode()
146 acpi->gtm.drive[unit].dma = t->udma; pacpi_set_dmamode()
149 acpi->gtm.drive[unit].dma = t->cycle; pacpi_set_dmamode()
H A Dpata_cs5520.c6 * typical IDE controllers they do bus mastering with the drive in
10 * drive for the right PIO mode. We must also ignore all the blacklists
11 * and the drive bus mastering DMA information. Also to confuse matters
H A Dpata_radisys.c68 drive timing bits */ radisys_set_piomode()
119 /* If the drive MWDMA is faster than it can do PIO then radisys_set_dmamode()
126 clear the other drive TIME register as a precaution */ radisys_set_dmamode()
H A Dpata_amd.c31 * @adev: drive being configured
261 /* Both host-side and drive-side detection results are worthless on NV
296 gtm->drive[0].dma, gtm->drive[1].dma, gtm->flags); nv_mode_filter()
/linux-4.1.27/drivers/pinctrl/
H A Dpinconf-generic.c38 PCONFDUMP(PIN_CONFIG_DRIVE_PUSH_PULL, "output drive push pull", NULL, false),
39 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_DRAIN, "output drive open drain", NULL, false),
40 PCONFDUMP(PIN_CONFIG_DRIVE_OPEN_SOURCE, "output drive open source", NULL, false),
41 PCONFDUMP(PIN_CONFIG_DRIVE_STRENGTH, "output drive strength", "mA", true),
159 { "drive-push-pull", PIN_CONFIG_DRIVE_PUSH_PULL, 0 },
160 { "drive-open-drain", PIN_CONFIG_DRIVE_OPEN_DRAIN, 0 },
161 { "drive-open-source", PIN_CONFIG_DRIVE_OPEN_SOURCE, 0 },
162 { "drive-strength", PIN_CONFIG_DRIVE_STRENGTH, 0 },
/linux-4.1.27/include/uapi/linux/
H A Dpktcdvd.h32 * use drive write caching -- we need deferred error handling to be
33 * able to successfully recover with this option (drive will return good
H A Dmtio.h25 #define MTRESET 0 /* +reset drive in case of problems */
34 #define MTOFFL 7 /* rewind and put the drive offline (eject?) */
53 #define MTSETDRVBUFFER 24 /* set the drive buffering according to SCSI-2 */
59 #define MTLOCK 28 /* lock the drive door */
60 #define MTUNLOCK 29 /* unlock the drive door */
104 #define MT_ISTEAC_MT2ST 0x12 /* Teac MT-2ST 155mb drive, Teac DC-1 card (Wangtek type) */
H A Dfd.h120 /* get drive type: 5 1/4 or 3 1/2 */
170 * Auto-detection. Each drive type has eight formats which are
176 int checkfreq; /* how often should the drive be checked for disk
178 int native_format; /* native format of this drive */
194 /* set/get drive parameters */
198 * Current drive state (not directly modifiable by user, readonly)
228 unsigned long last_checked; /* when was the drive last checked for a disk
237 /* get drive state: GET returns the cached state, POLL polls for new state */
279 * position of these drive heads. By allowing such
H A Dcdrom.h32 * - drive = open("/dev/cdrom", O_RDONLY);
33 * + drive = open("/dev/cdrom", O_RDONLY | O_NONBLOCK);
41 /* When a driver supports a certain function, but the cdrom drive we are
62 #define CDROMSTOP 0x5307 /* Stop the cdrom drive */
63 #define CDROMSTART 0x5308 /* Start the cdrom drive */
82 #define CDROMRESET 0x5312 /* hard-reset the drive */
83 #define CDROMVOLREAD 0x5313 /* Get the drive's volume setting
106 * drive spindown time. They should be implemented in the
145 #define CDROM_SEND_PACKET 0x5393 /* send a packet to the drive */
382 #define CDC_DRIVE_STATUS 0x800 /* driver implements drive status */
384 #define CDC_CD_R 0x2000 /* drive is a CD-R */
385 #define CDC_CD_RW 0x4000 /* drive is a CD-RW */
386 #define CDC_DVD 0x8000 /* drive is a DVD */
387 #define CDC_DVD_R 0x10000 /* drive can write DVD-R */
388 #define CDC_DVD_RAM 0x20000 /* drive can write DVD-RAM */
389 #define CDC_MO_DRIVE 0x40000 /* drive is an MO device */
390 #define CDC_MRW 0x80000 /* drive can read MRW */
391 #define CDC_MRW_W 0x100000 /* drive can write MRW */
394 /* drive status possibilities returned by CDROM_DRIVE_STATUS ioctl */
422 * per drive - SCSI CD-ROM's use minors to differentiate between the
H A Dfdreg.h31 #define STATUS_BUSYMASK 0x0F /* drive busy mask */
38 #define ST0_DS 0x03 /* drive select mask */
64 #define ST3_DS 0x08 /* drive is double-sided */
66 #define ST3_RY 0x20 /* drive is ready */
96 #define FD_DRIVESPEC 0x8e /* drive specification: Access to the
H A Dhdreg.h202 #define WIN_SPECIFY 0x91 /* set drive geometry translation */
234 #define WIN_IDLEIMMEDIATE 0xE1 /* force drive to become "ready" */
245 #define WIN_IDENTIFY 0xEC /* ask drive to identify itself */
248 #define WIN_SETFEATURES 0xEF /* set special drive features */
304 #define SETFEATURES_PREFETCH 0xAB /* Sets drive prefetch value */
353 #define HDIO_DRIVE_TASK 0x031e /* execute task and special drive command */
354 #define HDIO_DRIVE_CMD 0x031f /* execute a special drive command */
440 unsigned short cur_capacity0; /* Obsolete, l total sectors on drive */
646 * IDE "nice" flags. These are used on a per drive basis to determine
/linux-4.1.27/include/video/
H A Ddisplay_timing.h24 /* drive data on pos. edge */
26 /* drive data on neg. edge */
/linux-4.1.27/drivers/video/fbdev/matrox/
H A Dmatroxfb_DAC1064.h36 /* drive DVI by standard(0)/DVI(1) PLL */
39 /* drive CRTC1 by standard(0)/DVI(1) PLL */
41 /* drive CRTC2 by standard(0)/DVI(1) PLL */
/linux-4.1.27/arch/m68k/include/asm/
H A Dsun3xflop.h80 * drive attached to a Sun controller sun3x_82072_fd_outb()
81 * and it will be at drive zero. sun3x_82072_fd_outb()
260 #define fd_eject(drive) sun3x_eject()
/linux-4.1.27/drivers/media/pci/cx88/
H A Dcx88-vp3054-i2c.c51 vp3054_i2c->state |= 0x0100; /* drive pin */ vp3054_bit_setscl()
68 vp3054_i2c->state |= 0x0200; /* drive pin */ vp3054_bit_setsda()
/linux-4.1.27/arch/sparc/include/asm/
H A Dfloppy_64.h19 * Define this to enable exchanging drive 0 and 1 if only drive 1 is
78 #define fd_eject(drive) sun_fdops.fd_eject(drive)
274 static int sun_fd_eject(int drive) sun_fd_eject() argument
427 static int sun_pci_fd_eject(int drive) sun_pci_fd_eject() argument
498 static int sun_pci_fd_test_drive(unsigned long port, int drive) sun_pci_fd_test_drive() argument
506 data = (0x10 << drive) | 0x0c | drive; sun_pci_fd_test_drive()
510 sun_pci_fd_out_byte(port, drive & 0x03, FIFO); sun_pci_fd_test_drive()
695 * Set the drive exchange bit in FCR on NS87303,
H A Dpci_64.h29 * can drive enough of the 64 bits.
H A Dauxio_32.h14 * Secondly, it controls various floppy drive parameters.
/linux-4.1.27/drivers/pinctrl/freescale/
H A Dpinctrl-mxs.h73 u16 drive; member in struct:mxs_regs
/linux-4.1.27/drivers/net/wireless/brcm80211/brcmfmac/
H A Dof.c54 if (of_property_read_u32(np, "brcm,drive-strength", &val) == 0) brcmf_of_probe()
/linux-4.1.27/drivers/gpio/
H A Dgpio-stp-xway.c26 * peripheral controller used to drive external shift register cascades. At most
28 * to drive the 2 LSBs of the cascade automatically.
56 /* let the adsl core drive the 2 LSBs */
86 u8 groups; /* we can drive 1-3 groups of 8bit each */
/linux-4.1.27/drivers/gpu/drm/nouveau/nvkm/subdev/gpio/
H A Dpriv.h45 int (*drive)(struct nvkm_gpio *, int line, int dir, int out); member in struct:nvkm_gpio_impl
H A Dg94.c70 .drive = nv50_gpio_drive,
H A Dgf110.c81 .drive = gf110_gpio_drive,
H A Dgk104.c70 .drive = gf110_gpio_drive,
H A Dnv10.c113 .drive = nv10_gpio_drive,
H A Dnv50.c125 .drive = nv50_gpio_drive,
/linux-4.1.27/drivers/media/dvb-frontends/
H A Ddrxk.h22 * @mpeg_out_clk_strength: DRXK Mpeg output clock drive strength.
H A Ddib7000p.c2386 static int dib7090_host_bus_drive(struct dib7000p_state *state, u8 drive) dib7090_host_bus_drive() argument
2390 /* drive host bus 2, 3, 4 */ dib7090_host_bus_drive()
2392 reg |= (drive << 12) | (drive << 6) | drive; dib7090_host_bus_drive()
2395 /* drive host bus 5,6 */ dib7090_host_bus_drive()
2397 reg |= (drive << 8) | (drive << 2); dib7090_host_bus_drive()
2400 /* drive host bus 7, 8, 9 */ dib7090_host_bus_drive()
2402 reg |= (drive << 12) | (drive << 6) | drive; dib7090_host_bus_drive()
2405 /* drive host bus 10, 11 */ dib7090_host_bus_drive()
2407 reg |= (drive << 8) | (drive << 2); dib7090_host_bus_drive()
2410 /* drive host bus 12, 13, 14 */ dib7090_host_bus_drive()
2412 reg |= (drive << 12) | (drive << 6) | drive; dib7090_host_bus_drive()
/linux-4.1.27/arch/sh/boot/romimage/
H A Dmmcif-sh7724.c53 /* high drive capability for MMC pins */ mmcif_loader()
/linux-4.1.27/arch/ia64/dig/
H A Dsetup.c37 ROOT_DEV = Root_SDA2; /* default to second partition on first drive */ dig_setup()
/linux-4.1.27/drivers/input/keyboard/
H A Dqt2160.c92 u32 drive, pwmen; qt2160_led_work() local
96 drive = qt2160_read(client, QT2160_CMD_DRIVE_X); qt2160_led_work()
99 drive |= (1 << led->id); qt2160_led_work()
103 drive &= ~(1 << led->id); qt2160_led_work()
106 qt2160_write(client, QT2160_CMD_DRIVE_X, drive); qt2160_led_work()
/linux-4.1.27/drivers/staging/fbtft/
H A Dfb_bd663474.c109 write_reg(par, 0x402, 0x0000); /* First screen drive position (1) */ init_display()
110 write_reg(par, 0x403, 0x013f); /* First screen drive position (2) */ init_display()
/linux-4.1.27/drivers/usb/gadget/legacy/
H A Dmass_storage.c18 * appearing to the host as a disk drive or as a CD-ROM drive. In
/linux-4.1.27/include/linux/regulator/
H A Dfixed.h35 * will be in output and drive to low/high accordingly.
/linux-4.1.27/arch/arm/plat-pxa/include/plat/
H A Dmfp.h343 * drive strength = fast 3mA (MFP_DS03X)
349 * pin drive strength
353 * pin drive strength and low power mode
/linux-4.1.27/drivers/pinctrl/bcm/
H A Dpinctrl-cygnus-gpio.c16 * PINCONF such as bias pull up/down, and drive strength are also supported
51 /* drive strength control for ASIU GPIO */
54 /* drive strength control for CCM/CRMU (AON) GPIO */
430 /* make sure drive strength is supported */ cygnus_gpio_set_strength()
445 dev_dbg(chip->dev, "gpio:%u set drive strength:%d mA\n", gpio, cygnus_gpio_set_strength()
722 * pull up, pull down, and drive strength, when the pin is configured to GPIO
/linux-4.1.27/drivers/net/wireless/rtl818x/rtl8180/
H A Dmax2820.c102 /* While philips SA2400 drive the PA bias from max2820_rf_set_channel()
/linux-4.1.27/drivers/staging/sm750fb/
H A Dddk750_swi2c.c120 * signal because the i2c will fail when other device try to drive the
121 * signal due to SM50x will drive the signal to always high.
157 * signal because the i2c will fail when other device try to drive the
158 * signal due to SM50x will drive the signal to always high.
/linux-4.1.27/drivers/pcmcia/
H A Dbcm63xx_pcmcia.c190 /* drive VS1 low, float VS2 */ __get_socket_status()
201 /* float VS1, drive VS2 low */ __get_socket_status()
217 /* drive both VS pin to 0 again */ __get_socket_status()
397 /* initialize pcmcia control register, drive VS[12] to 0, bcm63xx_drv_pcmcia_probe()
/linux-4.1.27/arch/tile/kernel/
H A Dpmc.c88 * routines drive the perf count interrupts orthogonally.
/linux-4.1.27/arch/mips/ath25/
H A Dar2315_regs.h342 #define AR2315_LBCONF_INT_CTR1 0x00040000 /* GND drive, Vdd is high-Z */
343 #define AR2315_LBCONF_INT_CTR2 0x00080000 /* GND high-Z, Vdd drive */
344 #define AR2315_LBCONF_INT_CTR3 0x000c0000 /* GND drive, Vdd drive */
/linux-4.1.27/drivers/gpu/drm/rcar-du/
H A Drcar_du_drv.h43 * specify the valid SoC outputs, which CRTCs can drive the output, and the type
/linux-4.1.27/drivers/video/fbdev/
H A Dvalkyriefb.c423 /* drive each sense line low in turn and collect the other 2 */ read_valkyrie_sense()
424 out_8(&p->valkyrie_regs->msense.r, 4); /* drive A low */ read_valkyrie_sense()
427 out_8(&p->valkyrie_regs->msense.r, 2); /* drive B low */ read_valkyrie_sense()
431 out_8(&p->valkyrie_regs->msense.r, 1); /* drive C low */ read_valkyrie_sense()
/linux-4.1.27/include/uapi/sound/
H A Demu10k1.h180 #define A_EXTIN_OPT_SPDIF_L 0x04 /* audigy drive Optical SPDIF - left */
182 #define A_EXTIN_LINE2_L 0x08 /* audigy drive line2/mic2 - left */
186 #define A_EXTIN_AUX2_L 0x0c /* audigy drive aux2 - left */
194 #define A_EXTOUT_HEADPHONE_L 0x04 /* headphone audigy drive left */
/linux-4.1.27/arch/sh/boards/mach-landisk/
H A Dgio.c5 * LANDISK and USL-5P Button, LED and GIO driver drive function.
/linux-4.1.27/Documentation/laptops/
H A Ddslm.c44 D(printf(" drive state is: %d\n", state)); check_powermode()
/linux-4.1.27/include/linux/i2c/
H A Dadp8860.h141 * useful if the ADP8863 charge pump is used to drive an external load.
/linux-4.1.27/drivers/md/
H A Dlinear.c219 /* Adding a drive to a linear array allows the array to grow. linear_add()
220 * It is permitted if the new drive has a matching superblock linear_add()

Completed in 6965 milliseconds

1234