Lines Matching refs:drive
8 static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq,
11 ide_hwif_t *hwif = drive->hwif;
14 ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
20 if ((drive->dev_flags & IDE_DFLAG_LBA) &&
26 drive->crc_count++;
38 int nsect = drive->mult_count ? drive->mult_count : 1;
40 ide_pad_transfer(drive, READ, nsect * SECTOR_SIZE);
44 ide_kill_rq(drive, rq);
53 return ide_do_reset(drive);
57 drive->special_flags |= IDE_SFLAG_RECALIBRATE;
64 static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq,
67 ide_hwif_t *hwif = drive->hwif;
70 ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
82 ide_kill_rq(drive, rq);
86 return ide_do_reset(drive);
94 static ide_startstop_t __ide_error(ide_drive_t *drive, struct request *rq,
97 if (drive->media == ide_disk)
98 return ide_ata_error(drive, rq, stat, err);
99 return ide_atapi_error(drive, rq, stat, err);
104 * @drive: drive the error occurred on
108 * ide_error() takes action based on the error returned by the drive.
115 ide_startstop_t ide_error(ide_drive_t *drive, const char *msg, u8 stat)
120 err = ide_dump_status(drive, msg, stat);
122 rq = drive->hwif->rq;
132 ide_complete_cmd(drive, cmd, stat, err);
135 ide_complete_pm_rq(drive, rq);
139 ide_complete_rq(drive, err ? BLK_STS_IOERR : BLK_STS_OK, blk_rq_bytes(rq));
143 return __ide_error(drive, rq, stat, err);
147 static inline void ide_complete_drive_reset(ide_drive_t *drive, blk_status_t err)
149 struct request *rq = drive->hwif->rq;
155 ide_complete_rq(drive, err, blk_rq_bytes(rq));
164 * every 50ms during an atapi drive reset operation. If the drive has not yet
168 static ide_startstop_t atapi_reset_pollfunc(ide_drive_t *drive)
170 ide_hwif_t *hwif = drive->hwif;
174 tp_ops->dev_select(drive);
179 printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name);
182 ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20);
189 drive->name, stat);
191 return do_reset1(drive, 1);
195 ide_complete_drive_reset(drive, BLK_STS_OK);
224 static ide_startstop_t reset_pollfunc(ide_drive_t *drive)
226 ide_hwif_t *hwif = drive->hwif;
232 err = port_ops->reset_poll(drive);
235 hwif->name, drive->name);
244 ide_set_handler(drive, &reset_pollfunc, HZ/20);
250 drive->failures++;
253 tmp = ide_read_error(drive);
257 drive->failures = 0;
260 drive->failures++;
266 ide_complete_drive_reset(drive, err);
270 static void ide_disk_pre_reset(ide_drive_t *drive)
272 int legacy = (drive->id[ATA_ID_CFS_ENABLE_2] & 0x0400) ? 0 : 1;
274 drive->special_flags =
277 drive->mult_count = 0;
278 drive->dev_flags &= ~IDE_DFLAG_PARKED;
280 if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0 &&
281 (drive->dev_flags & IDE_DFLAG_USING_DMA) == 0)
282 drive->mult_req = 0;
284 if (drive->mult_req != drive->mult_count)
285 drive->special_flags |= IDE_SFLAG_SET_MULTMODE;
288 static void pre_reset(ide_drive_t *drive)
290 const struct ide_port_ops *port_ops = drive->hwif->port_ops;
292 if (drive->media == ide_disk)
293 ide_disk_pre_reset(drive);
295 drive->dev_flags |= IDE_DFLAG_POST_RESET;
297 if (drive->dev_flags & IDE_DFLAG_USING_DMA) {
298 if (drive->crc_count)
299 ide_check_dma_crc(drive);
301 ide_dma_off(drive);
304 if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0) {
305 if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) {
306 drive->dev_flags &= ~IDE_DFLAG_UNMASK;
307 drive->io_32bit = 0;
313 port_ops->pre_reset(drive);
315 if (drive->current_speed != 0xff)
316 drive->desired_speed = drive->current_speed;
317 drive->current_speed = 0xff;
321 * do_reset1() attempts to recover a confused drive by resetting it.
322 * Unfortunately, resetting a disk drive actually resets all devices on
324 * interface rather than resetting the drive.
335 static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi)
337 ide_hwif_t *hwif = drive->hwif;
352 if (drive->media != ide_disk && !do_not_try_atapi) {
353 pre_reset(drive);
354 tp_ops->dev_select(drive);
360 __ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20);
396 ide_complete_drive_reset(drive, BLK_STS_IOERR);
414 ((drive->dev_flags & IDE_DFLAG_NIEN_QUIRK) ? 0 : ATA_NIEN) |
420 __ide_set_handler(drive, &reset_pollfunc, HZ/20);
429 port_ops->resetproc(drive);
436 * ide_do_reset() is the entry point to the drive/interface reset code.
439 ide_startstop_t ide_do_reset(ide_drive_t *drive)
441 return do_reset1(drive, 0);