Merge branch 'topic/asoc' into for-linus
[linux-2.6] / drivers / ide / ide-io.c
1 /*
2  *      IDE I/O functions
3  *
4  *      Basic PIO and command management functionality.
5  *
6  * This code was split off from ide.c. See ide.c for history and original
7  * copyrights.
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License as published by the
11  * Free Software Foundation; either version 2, or (at your option) any
12  * later version.
13  *
14  * This program is distributed in the hope that it will be useful, but
15  * WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
17  * General Public License for more details.
18  *
19  * For the avoidance of doubt the "preferred form" of this code is one which
20  * is in an open non patent encumbered format. Where cryptographic key signing
21  * forms part of the process of creating an executable the information
22  * including keys needed to generate an equivalently functional executable
23  * are deemed to be part of the source code.
24  */
25  
26  
27 #include <linux/module.h>
28 #include <linux/types.h>
29 #include <linux/string.h>
30 #include <linux/kernel.h>
31 #include <linux/timer.h>
32 #include <linux/mm.h>
33 #include <linux/interrupt.h>
34 #include <linux/major.h>
35 #include <linux/errno.h>
36 #include <linux/genhd.h>
37 #include <linux/blkpg.h>
38 #include <linux/slab.h>
39 #include <linux/init.h>
40 #include <linux/pci.h>
41 #include <linux/delay.h>
42 #include <linux/ide.h>
43 #include <linux/completion.h>
44 #include <linux/reboot.h>
45 #include <linux/cdrom.h>
46 #include <linux/seq_file.h>
47 #include <linux/device.h>
48 #include <linux/kmod.h>
49 #include <linux/scatterlist.h>
50 #include <linux/bitops.h>
51
52 #include <asm/byteorder.h>
53 #include <asm/irq.h>
54 #include <asm/uaccess.h>
55 #include <asm/io.h>
56
57 int ide_end_rq(ide_drive_t *drive, struct request *rq, int error,
58                unsigned int nr_bytes)
59 {
60         /*
61          * decide whether to reenable DMA -- 3 is a random magic for now,
62          * if we DMA timeout more than 3 times, just stay in PIO
63          */
64         if ((drive->dev_flags & IDE_DFLAG_DMA_PIO_RETRY) &&
65             drive->retry_pio <= 3) {
66                 drive->dev_flags &= ~IDE_DFLAG_DMA_PIO_RETRY;
67                 ide_dma_on(drive);
68         }
69
70         return blk_end_request(rq, error, nr_bytes);
71 }
72 EXPORT_SYMBOL_GPL(ide_end_rq);
73
74 void ide_complete_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat, u8 err)
75 {
76         const struct ide_tp_ops *tp_ops = drive->hwif->tp_ops;
77         struct ide_taskfile *tf = &cmd->tf;
78         struct request *rq = cmd->rq;
79         u8 tf_cmd = tf->command;
80
81         tf->error = err;
82         tf->status = stat;
83
84         if (cmd->ftf_flags & IDE_FTFLAG_IN_DATA) {
85                 u8 data[2];
86
87                 tp_ops->input_data(drive, cmd, data, 2);
88
89                 cmd->tf.data  = data[0];
90                 cmd->hob.data = data[1];
91         }
92
93         ide_tf_readback(drive, cmd);
94
95         if ((cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) &&
96             tf_cmd == ATA_CMD_IDLEIMMEDIATE) {
97                 if (tf->lbal != 0xc4) {
98                         printk(KERN_ERR "%s: head unload failed!\n",
99                                drive->name);
100                         ide_tf_dump(drive->name, cmd);
101                 } else
102                         drive->dev_flags |= IDE_DFLAG_PARKED;
103         }
104
105         if (rq && rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
106                 memcpy(rq->special, cmd, sizeof(*cmd));
107
108         if (cmd->tf_flags & IDE_TFLAG_DYN)
109                 kfree(cmd);
110 }
111
112 /* obsolete, blk_rq_bytes() should be used instead */
113 unsigned int ide_rq_bytes(struct request *rq)
114 {
115         if (blk_pc_request(rq))
116                 return rq->data_len;
117         else
118                 return rq->hard_cur_sectors << 9;
119 }
120 EXPORT_SYMBOL_GPL(ide_rq_bytes);
121
122 int ide_complete_rq(ide_drive_t *drive, int error, unsigned int nr_bytes)
123 {
124         ide_hwif_t *hwif = drive->hwif;
125         struct request *rq = hwif->rq;
126         int rc;
127
128         /*
129          * if failfast is set on a request, override number of sectors
130          * and complete the whole request right now
131          */
132         if (blk_noretry_request(rq) && error <= 0)
133                 nr_bytes = rq->hard_nr_sectors << 9;
134
135         rc = ide_end_rq(drive, rq, error, nr_bytes);
136         if (rc == 0)
137                 hwif->rq = NULL;
138
139         return rc;
140 }
141 EXPORT_SYMBOL(ide_complete_rq);
142
143 void ide_kill_rq(ide_drive_t *drive, struct request *rq)
144 {
145         u8 drv_req = blk_special_request(rq) && rq->rq_disk;
146         u8 media = drive->media;
147
148         drive->failed_pc = NULL;
149
150         if ((media == ide_floppy || media == ide_tape) && drv_req) {
151                 rq->errors = 0;
152                 ide_complete_rq(drive, 0, blk_rq_bytes(rq));
153         } else {
154                 if (media == ide_tape)
155                         rq->errors = IDE_DRV_ERROR_GENERAL;
156                 else if (blk_fs_request(rq) == 0 && rq->errors == 0)
157                         rq->errors = -EIO;
158                 ide_complete_rq(drive, -EIO, ide_rq_bytes(rq));
159         }
160 }
161
162 static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
163 {
164         tf->nsect   = drive->sect;
165         tf->lbal    = drive->sect;
166         tf->lbam    = drive->cyl;
167         tf->lbah    = drive->cyl >> 8;
168         tf->device  = (drive->head - 1) | drive->select;
169         tf->command = ATA_CMD_INIT_DEV_PARAMS;
170 }
171
172 static void ide_tf_set_restore_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
173 {
174         tf->nsect   = drive->sect;
175         tf->command = ATA_CMD_RESTORE;
176 }
177
178 static void ide_tf_set_setmult_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
179 {
180         tf->nsect   = drive->mult_req;
181         tf->command = ATA_CMD_SET_MULTI;
182 }
183
184 static ide_startstop_t ide_disk_special(ide_drive_t *drive)
185 {
186         special_t *s = &drive->special;
187         struct ide_cmd cmd;
188
189         memset(&cmd, 0, sizeof(cmd));
190         cmd.protocol = ATA_PROT_NODATA;
191
192         if (s->b.set_geometry) {
193                 s->b.set_geometry = 0;
194                 ide_tf_set_specify_cmd(drive, &cmd.tf);
195         } else if (s->b.recalibrate) {
196                 s->b.recalibrate = 0;
197                 ide_tf_set_restore_cmd(drive, &cmd.tf);
198         } else if (s->b.set_multmode) {
199                 s->b.set_multmode = 0;
200                 ide_tf_set_setmult_cmd(drive, &cmd.tf);
201         } else if (s->all) {
202                 int special = s->all;
203                 s->all = 0;
204                 printk(KERN_ERR "%s: bad special flag: 0x%02x\n", drive->name, special);
205                 return ide_stopped;
206         }
207
208         cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE;
209         cmd.valid.in.tf  = IDE_VALID_IN_TF  | IDE_VALID_DEVICE;
210         cmd.tf_flags = IDE_TFLAG_CUSTOM_HANDLER;
211
212         do_rw_taskfile(drive, &cmd);
213
214         return ide_started;
215 }
216
217 /**
218  *      do_special              -       issue some special commands
219  *      @drive: drive the command is for
220  *
221  *      do_special() is used to issue ATA_CMD_INIT_DEV_PARAMS,
222  *      ATA_CMD_RESTORE and ATA_CMD_SET_MULTI commands to a drive.
223  *
224  *      It used to do much more, but has been scaled back.
225  */
226
227 static ide_startstop_t do_special (ide_drive_t *drive)
228 {
229         special_t *s = &drive->special;
230
231 #ifdef DEBUG
232         printk("%s: do_special: 0x%02x\n", drive->name, s->all);
233 #endif
234         if (drive->media == ide_disk)
235                 return ide_disk_special(drive);
236
237         s->all = 0;
238         drive->mult_req = 0;
239         return ide_stopped;
240 }
241
242 void ide_map_sg(ide_drive_t *drive, struct ide_cmd *cmd)
243 {
244         ide_hwif_t *hwif = drive->hwif;
245         struct scatterlist *sg = hwif->sg_table;
246         struct request *rq = cmd->rq;
247
248         if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE) {
249                 sg_init_one(sg, rq->buffer, rq->nr_sectors * SECTOR_SIZE);
250                 cmd->sg_nents = 1;
251         } else if (!rq->bio) {
252                 sg_init_one(sg, rq->data, rq->data_len);
253                 cmd->sg_nents = 1;
254         } else
255                 cmd->sg_nents = blk_rq_map_sg(drive->queue, rq, sg);
256 }
257 EXPORT_SYMBOL_GPL(ide_map_sg);
258
259 void ide_init_sg_cmd(struct ide_cmd *cmd, unsigned int nr_bytes)
260 {
261         cmd->nbytes = cmd->nleft = nr_bytes;
262         cmd->cursg_ofs = 0;
263         cmd->cursg = NULL;
264 }
265 EXPORT_SYMBOL_GPL(ide_init_sg_cmd);
266
267 /**
268  *      execute_drive_command   -       issue special drive command
269  *      @drive: the drive to issue the command on
270  *      @rq: the request structure holding the command
271  *
272  *      execute_drive_cmd() issues a special drive command,  usually 
273  *      initiated by ioctl() from the external hdparm program. The
274  *      command can be a drive command, drive task or taskfile 
275  *      operation. Weirdly you can call it with NULL to wait for
276  *      all commands to finish. Don't do this as that is due to change
277  */
278
279 static ide_startstop_t execute_drive_cmd (ide_drive_t *drive,
280                 struct request *rq)
281 {
282         struct ide_cmd *cmd = rq->special;
283
284         if (cmd) {
285                 if (cmd->protocol == ATA_PROT_PIO) {
286                         ide_init_sg_cmd(cmd, rq->nr_sectors << 9);
287                         ide_map_sg(drive, cmd);
288                 }
289
290                 return do_rw_taskfile(drive, cmd);
291         }
292
293         /*
294          * NULL is actually a valid way of waiting for
295          * all current requests to be flushed from the queue.
296          */
297 #ifdef DEBUG
298         printk("%s: DRIVE_CMD (null)\n", drive->name);
299 #endif
300         rq->errors = 0;
301         ide_complete_rq(drive, 0, blk_rq_bytes(rq));
302
303         return ide_stopped;
304 }
305
306 static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
307 {
308         u8 cmd = rq->cmd[0];
309
310         switch (cmd) {
311         case REQ_PARK_HEADS:
312         case REQ_UNPARK_HEADS:
313                 return ide_do_park_unpark(drive, rq);
314         case REQ_DEVSET_EXEC:
315                 return ide_do_devset(drive, rq);
316         case REQ_DRIVE_RESET:
317                 return ide_do_reset(drive);
318         default:
319                 BUG();
320         }
321 }
322
323 /**
324  *      start_request   -       start of I/O and command issuing for IDE
325  *
326  *      start_request() initiates handling of a new I/O request. It
327  *      accepts commands and I/O (read/write) requests.
328  *
329  *      FIXME: this function needs a rename
330  */
331  
332 static ide_startstop_t start_request (ide_drive_t *drive, struct request *rq)
333 {
334         ide_startstop_t startstop;
335
336         BUG_ON(!blk_rq_started(rq));
337
338 #ifdef DEBUG
339         printk("%s: start_request: current=0x%08lx\n",
340                 drive->hwif->name, (unsigned long) rq);
341 #endif
342
343         /* bail early if we've exceeded max_failures */
344         if (drive->max_failures && (drive->failures > drive->max_failures)) {
345                 rq->cmd_flags |= REQ_FAILED;
346                 goto kill_rq;
347         }
348
349         if (blk_pm_request(rq))
350                 ide_check_pm_state(drive, rq);
351
352         drive->hwif->tp_ops->dev_select(drive);
353         if (ide_wait_stat(&startstop, drive, drive->ready_stat,
354                           ATA_BUSY | ATA_DRQ, WAIT_READY)) {
355                 printk(KERN_ERR "%s: drive not ready for command\n", drive->name);
356                 return startstop;
357         }
358         if (!drive->special.all) {
359                 struct ide_driver *drv;
360
361                 /*
362                  * We reset the drive so we need to issue a SETFEATURES.
363                  * Do it _after_ do_special() restored device parameters.
364                  */
365                 if (drive->current_speed == 0xff)
366                         ide_config_drive_speed(drive, drive->desired_speed);
367
368                 if (rq->cmd_type == REQ_TYPE_ATA_TASKFILE)
369                         return execute_drive_cmd(drive, rq);
370                 else if (blk_pm_request(rq)) {
371                         struct request_pm_state *pm = rq->data;
372 #ifdef DEBUG_PM
373                         printk("%s: start_power_step(step: %d)\n",
374                                 drive->name, pm->pm_step);
375 #endif
376                         startstop = ide_start_power_step(drive, rq);
377                         if (startstop == ide_stopped &&
378                             pm->pm_step == IDE_PM_COMPLETED)
379                                 ide_complete_pm_rq(drive, rq);
380                         return startstop;
381                 } else if (!rq->rq_disk && blk_special_request(rq))
382                         /*
383                          * TODO: Once all ULDs have been modified to
384                          * check for specific op codes rather than
385                          * blindly accepting any special request, the
386                          * check for ->rq_disk above may be replaced
387                          * by a more suitable mechanism or even
388                          * dropped entirely.
389                          */
390                         return ide_special_rq(drive, rq);
391
392                 drv = *(struct ide_driver **)rq->rq_disk->private_data;
393
394                 return drv->do_request(drive, rq, rq->sector);
395         }
396         return do_special(drive);
397 kill_rq:
398         ide_kill_rq(drive, rq);
399         return ide_stopped;
400 }
401
402 /**
403  *      ide_stall_queue         -       pause an IDE device
404  *      @drive: drive to stall
405  *      @timeout: time to stall for (jiffies)
406  *
407  *      ide_stall_queue() can be used by a drive to give excess bandwidth back
408  *      to the port by sleeping for timeout jiffies.
409  */
410  
411 void ide_stall_queue (ide_drive_t *drive, unsigned long timeout)
412 {
413         if (timeout > WAIT_WORSTCASE)
414                 timeout = WAIT_WORSTCASE;
415         drive->sleep = timeout + jiffies;
416         drive->dev_flags |= IDE_DFLAG_SLEEPING;
417 }
418 EXPORT_SYMBOL(ide_stall_queue);
419
420 static inline int ide_lock_port(ide_hwif_t *hwif)
421 {
422         if (hwif->busy)
423                 return 1;
424
425         hwif->busy = 1;
426
427         return 0;
428 }
429
430 static inline void ide_unlock_port(ide_hwif_t *hwif)
431 {
432         hwif->busy = 0;
433 }
434
435 static inline int ide_lock_host(struct ide_host *host, ide_hwif_t *hwif)
436 {
437         int rc = 0;
438
439         if (host->host_flags & IDE_HFLAG_SERIALIZE) {
440                 rc = test_and_set_bit_lock(IDE_HOST_BUSY, &host->host_busy);
441                 if (rc == 0) {
442                         if (host->get_lock)
443                                 host->get_lock(ide_intr, hwif);
444                 }
445         }
446         return rc;
447 }
448
449 static inline void ide_unlock_host(struct ide_host *host)
450 {
451         if (host->host_flags & IDE_HFLAG_SERIALIZE) {
452                 if (host->release_lock)
453                         host->release_lock();
454                 clear_bit_unlock(IDE_HOST_BUSY, &host->host_busy);
455         }
456 }
457
458 /*
459  * Issue a new request to a device.
460  */
461 void do_ide_request(struct request_queue *q)
462 {
463         ide_drive_t     *drive = q->queuedata;
464         ide_hwif_t      *hwif = drive->hwif;
465         struct ide_host *host = hwif->host;
466         struct request  *rq = NULL;
467         ide_startstop_t startstop;
468
469         /*
470          * drive is doing pre-flush, ordered write, post-flush sequence. even
471          * though that is 3 requests, it must be seen as a single transaction.
472          * we must not preempt this drive until that is complete
473          */
474         if (blk_queue_flushing(q))
475                 /*
476                  * small race where queue could get replugged during
477                  * the 3-request flush cycle, just yank the plug since
478                  * we want it to finish asap
479                  */
480                 blk_remove_plug(q);
481
482         spin_unlock_irq(q->queue_lock);
483
484         if (ide_lock_host(host, hwif))
485                 goto plug_device_2;
486
487         spin_lock_irq(&hwif->lock);
488
489         if (!ide_lock_port(hwif)) {
490                 ide_hwif_t *prev_port;
491 repeat:
492                 prev_port = hwif->host->cur_port;
493                 hwif->rq = NULL;
494
495                 if (drive->dev_flags & IDE_DFLAG_SLEEPING &&
496                     time_after(drive->sleep, jiffies)) {
497                         ide_unlock_port(hwif);
498                         goto plug_device;
499                 }
500
501                 if ((hwif->host->host_flags & IDE_HFLAG_SERIALIZE) &&
502                     hwif != prev_port) {
503                         /*
504                          * set nIEN for previous port, drives in the
505                          * quirk_list may not like intr setups/cleanups
506                          */
507                         if (prev_port && prev_port->cur_dev->quirk_list == 0)
508                                 prev_port->tp_ops->write_devctl(prev_port,
509                                                                 ATA_NIEN |
510                                                                 ATA_DEVCTL_OBS);
511
512                         hwif->host->cur_port = hwif;
513                 }
514                 hwif->cur_dev = drive;
515                 drive->dev_flags &= ~(IDE_DFLAG_SLEEPING | IDE_DFLAG_PARKED);
516
517                 spin_unlock_irq(&hwif->lock);
518                 spin_lock_irq(q->queue_lock);
519                 /*
520                  * we know that the queue isn't empty, but this can happen
521                  * if the q->prep_rq_fn() decides to kill a request
522                  */
523                 rq = elv_next_request(drive->queue);
524                 spin_unlock_irq(q->queue_lock);
525                 spin_lock_irq(&hwif->lock);
526
527                 if (!rq) {
528                         ide_unlock_port(hwif);
529                         goto out;
530                 }
531
532                 /*
533                  * Sanity: don't accept a request that isn't a PM request
534                  * if we are currently power managed. This is very important as
535                  * blk_stop_queue() doesn't prevent the elv_next_request()
536                  * above to return us whatever is in the queue. Since we call
537                  * ide_do_request() ourselves, we end up taking requests while
538                  * the queue is blocked...
539                  * 
540                  * We let requests forced at head of queue with ide-preempt
541                  * though. I hope that doesn't happen too much, hopefully not
542                  * unless the subdriver triggers such a thing in its own PM
543                  * state machine.
544                  */
545                 if ((drive->dev_flags & IDE_DFLAG_BLOCKED) &&
546                     blk_pm_request(rq) == 0 &&
547                     (rq->cmd_flags & REQ_PREEMPT) == 0) {
548                         /* there should be no pending command at this point */
549                         ide_unlock_port(hwif);
550                         goto plug_device;
551                 }
552
553                 hwif->rq = rq;
554
555                 spin_unlock_irq(&hwif->lock);
556                 startstop = start_request(drive, rq);
557                 spin_lock_irq(&hwif->lock);
558
559                 if (startstop == ide_stopped)
560                         goto repeat;
561         } else
562                 goto plug_device;
563 out:
564         spin_unlock_irq(&hwif->lock);
565         if (rq == NULL)
566                 ide_unlock_host(host);
567         spin_lock_irq(q->queue_lock);
568         return;
569
570 plug_device:
571         spin_unlock_irq(&hwif->lock);
572         ide_unlock_host(host);
573 plug_device_2:
574         spin_lock_irq(q->queue_lock);
575
576         if (!elv_queue_empty(q))
577                 blk_plug_device(q);
578 }
579
580 static void ide_plug_device(ide_drive_t *drive)
581 {
582         struct request_queue *q = drive->queue;
583         unsigned long flags;
584
585         spin_lock_irqsave(q->queue_lock, flags);
586         if (!elv_queue_empty(q))
587                 blk_plug_device(q);
588         spin_unlock_irqrestore(q->queue_lock, flags);
589 }
590
591 static int drive_is_ready(ide_drive_t *drive)
592 {
593         ide_hwif_t *hwif = drive->hwif;
594         u8 stat = 0;
595
596         if (drive->waiting_for_dma)
597                 return hwif->dma_ops->dma_test_irq(drive);
598
599         if (hwif->io_ports.ctl_addr &&
600             (hwif->host_flags & IDE_HFLAG_BROKEN_ALTSTATUS) == 0)
601                 stat = hwif->tp_ops->read_altstatus(hwif);
602         else
603                 /* Note: this may clear a pending IRQ!! */
604                 stat = hwif->tp_ops->read_status(hwif);
605
606         if (stat & ATA_BUSY)
607                 /* drive busy: definitely not interrupting */
608                 return 0;
609
610         /* drive ready: *might* be interrupting */
611         return 1;
612 }
613
614 /**
615  *      ide_timer_expiry        -       handle lack of an IDE interrupt
616  *      @data: timer callback magic (hwif)
617  *
618  *      An IDE command has timed out before the expected drive return
619  *      occurred. At this point we attempt to clean up the current
620  *      mess. If the current handler includes an expiry handler then
621  *      we invoke the expiry handler, and providing it is happy the
622  *      work is done. If that fails we apply generic recovery rules
623  *      invoking the handler and checking the drive DMA status. We
624  *      have an excessively incestuous relationship with the DMA
625  *      logic that wants cleaning up.
626  */
627  
628 void ide_timer_expiry (unsigned long data)
629 {
630         ide_hwif_t      *hwif = (ide_hwif_t *)data;
631         ide_drive_t     *uninitialized_var(drive);
632         ide_handler_t   *handler;
633         unsigned long   flags;
634         int             wait = -1;
635         int             plug_device = 0;
636
637         spin_lock_irqsave(&hwif->lock, flags);
638
639         handler = hwif->handler;
640
641         if (handler == NULL || hwif->req_gen != hwif->req_gen_timer) {
642                 /*
643                  * Either a marginal timeout occurred
644                  * (got the interrupt just as timer expired),
645                  * or we were "sleeping" to give other devices a chance.
646                  * Either way, we don't really want to complain about anything.
647                  */
648         } else {
649                 ide_expiry_t *expiry = hwif->expiry;
650                 ide_startstop_t startstop = ide_stopped;
651
652                 drive = hwif->cur_dev;
653
654                 if (expiry) {
655                         wait = expiry(drive);
656                         if (wait > 0) { /* continue */
657                                 /* reset timer */
658                                 hwif->timer.expires = jiffies + wait;
659                                 hwif->req_gen_timer = hwif->req_gen;
660                                 add_timer(&hwif->timer);
661                                 spin_unlock_irqrestore(&hwif->lock, flags);
662                                 return;
663                         }
664                 }
665                 hwif->handler = NULL;
666                 hwif->expiry = NULL;
667                 /*
668                  * We need to simulate a real interrupt when invoking
669                  * the handler() function, which means we need to
670                  * globally mask the specific IRQ:
671                  */
672                 spin_unlock(&hwif->lock);
673                 /* disable_irq_nosync ?? */
674                 disable_irq(hwif->irq);
675                 /* local CPU only, as if we were handling an interrupt */
676                 local_irq_disable();
677                 if (hwif->polling) {
678                         startstop = handler(drive);
679                 } else if (drive_is_ready(drive)) {
680                         if (drive->waiting_for_dma)
681                                 hwif->dma_ops->dma_lost_irq(drive);
682                         if (hwif->ack_intr)
683                                 hwif->ack_intr(hwif);
684                         printk(KERN_WARNING "%s: lost interrupt\n",
685                                 drive->name);
686                         startstop = handler(drive);
687                 } else {
688                         if (drive->waiting_for_dma)
689                                 startstop = ide_dma_timeout_retry(drive, wait);
690                         else
691                                 startstop = ide_error(drive, "irq timeout",
692                                         hwif->tp_ops->read_status(hwif));
693                 }
694                 spin_lock_irq(&hwif->lock);
695                 enable_irq(hwif->irq);
696                 if (startstop == ide_stopped) {
697                         ide_unlock_port(hwif);
698                         plug_device = 1;
699                 }
700         }
701         spin_unlock_irqrestore(&hwif->lock, flags);
702
703         if (plug_device) {
704                 ide_unlock_host(hwif->host);
705                 ide_plug_device(drive);
706         }
707 }
708
709 /**
710  *      unexpected_intr         -       handle an unexpected IDE interrupt
711  *      @irq: interrupt line
712  *      @hwif: port being processed
713  *
714  *      There's nothing really useful we can do with an unexpected interrupt,
715  *      other than reading the status register (to clear it), and logging it.
716  *      There should be no way that an irq can happen before we're ready for it,
717  *      so we needn't worry much about losing an "important" interrupt here.
718  *
719  *      On laptops (and "green" PCs), an unexpected interrupt occurs whenever
720  *      the drive enters "idle", "standby", or "sleep" mode, so if the status
721  *      looks "good", we just ignore the interrupt completely.
722  *
723  *      This routine assumes __cli() is in effect when called.
724  *
725  *      If an unexpected interrupt happens on irq15 while we are handling irq14
726  *      and if the two interfaces are "serialized" (CMD640), then it looks like
727  *      we could screw up by interfering with a new request being set up for 
728  *      irq15.
729  *
730  *      In reality, this is a non-issue.  The new command is not sent unless 
731  *      the drive is ready to accept one, in which case we know the drive is
732  *      not trying to interrupt us.  And ide_set_handler() is always invoked
733  *      before completing the issuance of any new drive command, so we will not
734  *      be accidentally invoked as a result of any valid command completion
735  *      interrupt.
736  */
737
738 static void unexpected_intr(int irq, ide_hwif_t *hwif)
739 {
740         u8 stat = hwif->tp_ops->read_status(hwif);
741
742         if (!OK_STAT(stat, ATA_DRDY, BAD_STAT)) {
743                 /* Try to not flood the console with msgs */
744                 static unsigned long last_msgtime, count;
745                 ++count;
746
747                 if (time_after(jiffies, last_msgtime + HZ)) {
748                         last_msgtime = jiffies;
749                         printk(KERN_ERR "%s: unexpected interrupt, "
750                                 "status=0x%02x, count=%ld\n",
751                                 hwif->name, stat, count);
752                 }
753         }
754 }
755
756 /**
757  *      ide_intr        -       default IDE interrupt handler
758  *      @irq: interrupt number
759  *      @dev_id: hwif
760  *      @regs: unused weirdness from the kernel irq layer
761  *
762  *      This is the default IRQ handler for the IDE layer. You should
763  *      not need to override it. If you do be aware it is subtle in
764  *      places
765  *
766  *      hwif is the interface in the group currently performing
767  *      a command. hwif->cur_dev is the drive and hwif->handler is
768  *      the IRQ handler to call. As we issue a command the handlers
769  *      step through multiple states, reassigning the handler to the
770  *      next step in the process. Unlike a smart SCSI controller IDE
771  *      expects the main processor to sequence the various transfer
772  *      stages. We also manage a poll timer to catch up with most
773  *      timeout situations. There are still a few where the handlers
774  *      don't ever decide to give up.
775  *
776  *      The handler eventually returns ide_stopped to indicate the
777  *      request completed. At this point we issue the next request
778  *      on the port and the process begins again.
779  */
780
781 irqreturn_t ide_intr (int irq, void *dev_id)
782 {
783         ide_hwif_t *hwif = (ide_hwif_t *)dev_id;
784         struct ide_host *host = hwif->host;
785         ide_drive_t *uninitialized_var(drive);
786         ide_handler_t *handler;
787         unsigned long flags;
788         ide_startstop_t startstop;
789         irqreturn_t irq_ret = IRQ_NONE;
790         int plug_device = 0;
791
792         if (host->host_flags & IDE_HFLAG_SERIALIZE) {
793                 if (hwif != host->cur_port)
794                         goto out_early;
795         }
796
797         spin_lock_irqsave(&hwif->lock, flags);
798
799         if (hwif->ack_intr && hwif->ack_intr(hwif) == 0)
800                 goto out;
801
802         handler = hwif->handler;
803
804         if (handler == NULL || hwif->polling) {
805                 /*
806                  * Not expecting an interrupt from this drive.
807                  * That means this could be:
808                  *      (1) an interrupt from another PCI device
809                  *      sharing the same PCI INT# as us.
810                  * or   (2) a drive just entered sleep or standby mode,
811                  *      and is interrupting to let us know.
812                  * or   (3) a spurious interrupt of unknown origin.
813                  *
814                  * For PCI, we cannot tell the difference,
815                  * so in that case we just ignore it and hope it goes away.
816                  */
817                 if ((host->irq_flags & IRQF_SHARED) == 0) {
818                         /*
819                          * Probably not a shared PCI interrupt,
820                          * so we can safely try to do something about it:
821                          */
822                         unexpected_intr(irq, hwif);
823                 } else {
824                         /*
825                          * Whack the status register, just in case
826                          * we have a leftover pending IRQ.
827                          */
828                         (void)hwif->tp_ops->read_status(hwif);
829                 }
830                 goto out;
831         }
832
833         drive = hwif->cur_dev;
834
835         if (!drive_is_ready(drive))
836                 /*
837                  * This happens regularly when we share a PCI IRQ with
838                  * another device.  Unfortunately, it can also happen
839                  * with some buggy drives that trigger the IRQ before
840                  * their status register is up to date.  Hopefully we have
841                  * enough advance overhead that the latter isn't a problem.
842                  */
843                 goto out;
844
845         hwif->handler = NULL;
846         hwif->expiry = NULL;
847         hwif->req_gen++;
848         del_timer(&hwif->timer);
849         spin_unlock(&hwif->lock);
850
851         if (hwif->port_ops && hwif->port_ops->clear_irq)
852                 hwif->port_ops->clear_irq(drive);
853
854         if (drive->dev_flags & IDE_DFLAG_UNMASK)
855                 local_irq_enable_in_hardirq();
856
857         /* service this interrupt, may set handler for next interrupt */
858         startstop = handler(drive);
859
860         spin_lock_irq(&hwif->lock);
861         /*
862          * Note that handler() may have set things up for another
863          * interrupt to occur soon, but it cannot happen until
864          * we exit from this routine, because it will be the
865          * same irq as is currently being serviced here, and Linux
866          * won't allow another of the same (on any CPU) until we return.
867          */
868         if (startstop == ide_stopped) {
869                 BUG_ON(hwif->handler);
870                 ide_unlock_port(hwif);
871                 plug_device = 1;
872         }
873         irq_ret = IRQ_HANDLED;
874 out:
875         spin_unlock_irqrestore(&hwif->lock, flags);
876 out_early:
877         if (plug_device) {
878                 ide_unlock_host(hwif->host);
879                 ide_plug_device(drive);
880         }
881
882         return irq_ret;
883 }
884 EXPORT_SYMBOL_GPL(ide_intr);
885
886 void ide_pad_transfer(ide_drive_t *drive, int write, int len)
887 {
888         ide_hwif_t *hwif = drive->hwif;
889         u8 buf[4] = { 0 };
890
891         while (len > 0) {
892                 if (write)
893                         hwif->tp_ops->output_data(drive, NULL, buf, min(4, len));
894                 else
895                         hwif->tp_ops->input_data(drive, NULL, buf, min(4, len));
896                 len -= 4;
897         }
898 }
899 EXPORT_SYMBOL_GPL(ide_pad_transfer);