Commit 327fa1c29466b8fe471a91fc11e9c6171163c81a

Authored by Bartlomiej Zolnierkiewicz
1 parent 122f06f8bc

ide: move error handling code to ide-eh.c (v2)

Do some CodingStyle fixups in <linux/ide.h> while at it.

v2:
Add missing <linux/delay.h> include (reported by Stephen Rothwell).

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

Showing 5 changed files with 440 additions and 431 deletions Side-by-side Diff

drivers/ide/Makefile
... ... @@ -6,7 +6,7 @@
6 6  
7 7 ide-core-y += ide.o ide-ioctls.o ide-io.o ide-iops.o ide-lib.o ide-probe.o \
8 8 ide-taskfile.o ide-pm.o ide-park.o ide-sysfs.o ide-devsets.o \
9   - ide-io-std.o
  9 + ide-io-std.o ide-eh.o
10 10  
11 11 # core IDE code
12 12 ide-core-$(CONFIG_IDE_XFER_MODE) += ide-pio-blacklist.o ide-xfer-mode.o
drivers/ide/ide-eh.c
  1 +
  2 +#include <linux/kernel.h>
  3 +#include <linux/ide.h>
  4 +#include <linux/delay.h>
  5 +
  6 +static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq,
  7 + u8 stat, u8 err)
  8 +{
  9 + ide_hwif_t *hwif = drive->hwif;
  10 +
  11 + if ((stat & ATA_BUSY) ||
  12 + ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
  13 + /* other bits are useless when BUSY */
  14 + rq->errors |= ERROR_RESET;
  15 + } else if (stat & ATA_ERR) {
  16 + /* err has different meaning on cdrom and tape */
  17 + if (err == ATA_ABORTED) {
  18 + if ((drive->dev_flags & IDE_DFLAG_LBA) &&
  19 + /* some newer drives don't support ATA_CMD_INIT_DEV_PARAMS */
  20 + hwif->tp_ops->read_status(hwif) == ATA_CMD_INIT_DEV_PARAMS)
  21 + return ide_stopped;
  22 + } else if ((err & BAD_CRC) == BAD_CRC) {
  23 + /* UDMA crc error, just retry the operation */
  24 + drive->crc_count++;
  25 + } else if (err & (ATA_BBK | ATA_UNC)) {
  26 + /* retries won't help these */
  27 + rq->errors = ERROR_MAX;
  28 + } else if (err & ATA_TRK0NF) {
  29 + /* help it find track zero */
  30 + rq->errors |= ERROR_RECAL;
  31 + }
  32 + }
  33 +
  34 + if ((stat & ATA_DRQ) && rq_data_dir(rq) == READ &&
  35 + (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) {
  36 + int nsect = drive->mult_count ? drive->mult_count : 1;
  37 +
  38 + ide_pad_transfer(drive, READ, nsect * SECTOR_SIZE);
  39 + }
  40 +
  41 + if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
  42 + ide_kill_rq(drive, rq);
  43 + return ide_stopped;
  44 + }
  45 +
  46 + if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ))
  47 + rq->errors |= ERROR_RESET;
  48 +
  49 + if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
  50 + ++rq->errors;
  51 + return ide_do_reset(drive);
  52 + }
  53 +
  54 + if ((rq->errors & ERROR_RECAL) == ERROR_RECAL)
  55 + drive->special.b.recalibrate = 1;
  56 +
  57 + ++rq->errors;
  58 +
  59 + return ide_stopped;
  60 +}
  61 +
  62 +static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq,
  63 + u8 stat, u8 err)
  64 +{
  65 + ide_hwif_t *hwif = drive->hwif;
  66 +
  67 + if ((stat & ATA_BUSY) ||
  68 + ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
  69 + /* other bits are useless when BUSY */
  70 + rq->errors |= ERROR_RESET;
  71 + } else {
  72 + /* add decoding error stuff */
  73 + }
  74 +
  75 + if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ))
  76 + /* force an abort */
  77 + hwif->tp_ops->exec_command(hwif, ATA_CMD_IDLEIMMEDIATE);
  78 +
  79 + if (rq->errors >= ERROR_MAX) {
  80 + ide_kill_rq(drive, rq);
  81 + } else {
  82 + if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
  83 + ++rq->errors;
  84 + return ide_do_reset(drive);
  85 + }
  86 + ++rq->errors;
  87 + }
  88 +
  89 + return ide_stopped;
  90 +}
  91 +
  92 +static ide_startstop_t __ide_error(ide_drive_t *drive, struct request *rq,
  93 + u8 stat, u8 err)
  94 +{
  95 + if (drive->media == ide_disk)
  96 + return ide_ata_error(drive, rq, stat, err);
  97 + return ide_atapi_error(drive, rq, stat, err);
  98 +}
  99 +
  100 +/**
  101 + * ide_error - handle an error on the IDE
  102 + * @drive: drive the error occurred on
  103 + * @msg: message to report
  104 + * @stat: status bits
  105 + *
  106 + * ide_error() takes action based on the error returned by the drive.
  107 + * For normal I/O that may well include retries. We deal with
  108 + * both new-style (taskfile) and old style command handling here.
  109 + * In the case of taskfile command handling there is work left to
  110 + * do
  111 + */
  112 +
  113 +ide_startstop_t ide_error(ide_drive_t *drive, const char *msg, u8 stat)
  114 +{
  115 + struct request *rq;
  116 + u8 err;
  117 +
  118 + err = ide_dump_status(drive, msg, stat);
  119 +
  120 + rq = drive->hwif->rq;
  121 + if (rq == NULL)
  122 + return ide_stopped;
  123 +
  124 + /* retry only "normal" I/O: */
  125 + if (!blk_fs_request(rq)) {
  126 + rq->errors = 1;
  127 + ide_end_drive_cmd(drive, stat, err);
  128 + return ide_stopped;
  129 + }
  130 +
  131 + return __ide_error(drive, rq, stat, err);
  132 +}
  133 +EXPORT_SYMBOL_GPL(ide_error);
  134 +
  135 +static inline void ide_complete_drive_reset(ide_drive_t *drive, int err)
  136 +{
  137 + struct request *rq = drive->hwif->rq;
  138 +
  139 + if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET)
  140 + ide_end_request(drive, err ? err : 1, 0);
  141 +}
  142 +
  143 +/* needed below */
  144 +static ide_startstop_t do_reset1(ide_drive_t *, int);
  145 +
  146 +/*
  147 + * atapi_reset_pollfunc() gets invoked to poll the interface for completion
  148 + * every 50ms during an atapi drive reset operation. If the drive has not yet
  149 + * responded, and we have not yet hit our maximum waiting time, then the timer
  150 + * is restarted for another 50ms.
  151 + */
  152 +static ide_startstop_t atapi_reset_pollfunc(ide_drive_t *drive)
  153 +{
  154 + ide_hwif_t *hwif = drive->hwif;
  155 + u8 stat;
  156 +
  157 + SELECT_DRIVE(drive);
  158 + udelay(10);
  159 + stat = hwif->tp_ops->read_status(hwif);
  160 +
  161 + if (OK_STAT(stat, 0, ATA_BUSY))
  162 + printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name);
  163 + else {
  164 + if (time_before(jiffies, hwif->poll_timeout)) {
  165 + ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20,
  166 + NULL);
  167 + /* continue polling */
  168 + return ide_started;
  169 + }
  170 + /* end of polling */
  171 + hwif->polling = 0;
  172 + printk(KERN_ERR "%s: ATAPI reset timed-out, status=0x%02x\n",
  173 + drive->name, stat);
  174 + /* do it the old fashioned way */
  175 + return do_reset1(drive, 1);
  176 + }
  177 + /* done polling */
  178 + hwif->polling = 0;
  179 + ide_complete_drive_reset(drive, 0);
  180 + return ide_stopped;
  181 +}
  182 +
  183 +static void ide_reset_report_error(ide_hwif_t *hwif, u8 err)
  184 +{
  185 + static const char *err_master_vals[] =
  186 + { NULL, "passed", "formatter device error",
  187 + "sector buffer error", "ECC circuitry error",
  188 + "controlling MPU error" };
  189 +
  190 + u8 err_master = err & 0x7f;
  191 +
  192 + printk(KERN_ERR "%s: reset: master: ", hwif->name);
  193 + if (err_master && err_master < 6)
  194 + printk(KERN_CONT "%s", err_master_vals[err_master]);
  195 + else
  196 + printk(KERN_CONT "error (0x%02x?)", err);
  197 + if (err & 0x80)
  198 + printk(KERN_CONT "; slave: failed");
  199 + printk(KERN_CONT "\n");
  200 +}
  201 +
  202 +/*
  203 + * reset_pollfunc() gets invoked to poll the interface for completion every 50ms
  204 + * during an ide reset operation. If the drives have not yet responded,
  205 + * and we have not yet hit our maximum waiting time, then the timer is restarted
  206 + * for another 50ms.
  207 + */
  208 +static ide_startstop_t reset_pollfunc(ide_drive_t *drive)
  209 +{
  210 + ide_hwif_t *hwif = drive->hwif;
  211 + const struct ide_port_ops *port_ops = hwif->port_ops;
  212 + u8 tmp;
  213 + int err = 0;
  214 +
  215 + if (port_ops && port_ops->reset_poll) {
  216 + err = port_ops->reset_poll(drive);
  217 + if (err) {
  218 + printk(KERN_ERR "%s: host reset_poll failure for %s.\n",
  219 + hwif->name, drive->name);
  220 + goto out;
  221 + }
  222 + }
  223 +
  224 + tmp = hwif->tp_ops->read_status(hwif);
  225 +
  226 + if (!OK_STAT(tmp, 0, ATA_BUSY)) {
  227 + if (time_before(jiffies, hwif->poll_timeout)) {
  228 + ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
  229 + /* continue polling */
  230 + return ide_started;
  231 + }
  232 + printk(KERN_ERR "%s: reset timed-out, status=0x%02x\n",
  233 + hwif->name, tmp);
  234 + drive->failures++;
  235 + err = -EIO;
  236 + } else {
  237 + tmp = ide_read_error(drive);
  238 +
  239 + if (tmp == 1) {
  240 + printk(KERN_INFO "%s: reset: success\n", hwif->name);
  241 + drive->failures = 0;
  242 + } else {
  243 + ide_reset_report_error(hwif, tmp);
  244 + drive->failures++;
  245 + err = -EIO;
  246 + }
  247 + }
  248 +out:
  249 + hwif->polling = 0; /* done polling */
  250 + ide_complete_drive_reset(drive, err);
  251 + return ide_stopped;
  252 +}
  253 +
  254 +static void ide_disk_pre_reset(ide_drive_t *drive)
  255 +{
  256 + int legacy = (drive->id[ATA_ID_CFS_ENABLE_2] & 0x0400) ? 0 : 1;
  257 +
  258 + drive->special.all = 0;
  259 + drive->special.b.set_geometry = legacy;
  260 + drive->special.b.recalibrate = legacy;
  261 +
  262 + drive->mult_count = 0;
  263 + drive->dev_flags &= ~IDE_DFLAG_PARKED;
  264 +
  265 + if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0 &&
  266 + (drive->dev_flags & IDE_DFLAG_USING_DMA) == 0)
  267 + drive->mult_req = 0;
  268 +
  269 + if (drive->mult_req != drive->mult_count)
  270 + drive->special.b.set_multmode = 1;
  271 +}
  272 +
  273 +static void pre_reset(ide_drive_t *drive)
  274 +{
  275 + const struct ide_port_ops *port_ops = drive->hwif->port_ops;
  276 +
  277 + if (drive->media == ide_disk)
  278 + ide_disk_pre_reset(drive);
  279 + else
  280 + drive->dev_flags |= IDE_DFLAG_POST_RESET;
  281 +
  282 + if (drive->dev_flags & IDE_DFLAG_USING_DMA) {
  283 + if (drive->crc_count)
  284 + ide_check_dma_crc(drive);
  285 + else
  286 + ide_dma_off(drive);
  287 + }
  288 +
  289 + if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0) {
  290 + if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) {
  291 + drive->dev_flags &= ~IDE_DFLAG_UNMASK;
  292 + drive->io_32bit = 0;
  293 + }
  294 + return;
  295 + }
  296 +
  297 + if (port_ops && port_ops->pre_reset)
  298 + port_ops->pre_reset(drive);
  299 +
  300 + if (drive->current_speed != 0xff)
  301 + drive->desired_speed = drive->current_speed;
  302 + drive->current_speed = 0xff;
  303 +}
  304 +
  305 +/*
  306 + * do_reset1() attempts to recover a confused drive by resetting it.
  307 + * Unfortunately, resetting a disk drive actually resets all devices on
  308 + * the same interface, so it can really be thought of as resetting the
  309 + * interface rather than resetting the drive.
  310 + *
  311 + * ATAPI devices have their own reset mechanism which allows them to be
  312 + * individually reset without clobbering other devices on the same interface.
  313 + *
  314 + * Unfortunately, the IDE interface does not generate an interrupt to let
  315 + * us know when the reset operation has finished, so we must poll for this.
  316 + * Equally poor, though, is the fact that this may a very long time to complete,
  317 + * (up to 30 seconds worstcase). So, instead of busy-waiting here for it,
  318 + * we set a timer to poll at 50ms intervals.
  319 + */
  320 +static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi)
  321 +{
  322 + ide_hwif_t *hwif = drive->hwif;
  323 + struct ide_io_ports *io_ports = &hwif->io_ports;
  324 + const struct ide_tp_ops *tp_ops = hwif->tp_ops;
  325 + const struct ide_port_ops *port_ops;
  326 + ide_drive_t *tdrive;
  327 + unsigned long flags, timeout;
  328 + int i;
  329 + DEFINE_WAIT(wait);
  330 +
  331 + spin_lock_irqsave(&hwif->lock, flags);
  332 +
  333 + /* We must not reset with running handlers */
  334 + BUG_ON(hwif->handler != NULL);
  335 +
  336 + /* For an ATAPI device, first try an ATAPI SRST. */
  337 + if (drive->media != ide_disk && !do_not_try_atapi) {
  338 + pre_reset(drive);
  339 + SELECT_DRIVE(drive);
  340 + udelay(20);
  341 + tp_ops->exec_command(hwif, ATA_CMD_DEV_RESET);
  342 + ndelay(400);
  343 + hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
  344 + hwif->polling = 1;
  345 + __ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL);
  346 + spin_unlock_irqrestore(&hwif->lock, flags);
  347 + return ide_started;
  348 + }
  349 +
  350 + /* We must not disturb devices in the IDE_DFLAG_PARKED state. */
  351 + do {
  352 + unsigned long now;
  353 +
  354 + prepare_to_wait(&ide_park_wq, &wait, TASK_UNINTERRUPTIBLE);
  355 + timeout = jiffies;
  356 + ide_port_for_each_present_dev(i, tdrive, hwif) {
  357 + if ((tdrive->dev_flags & IDE_DFLAG_PARKED) &&
  358 + time_after(tdrive->sleep, timeout))
  359 + timeout = tdrive->sleep;
  360 + }
  361 +
  362 + now = jiffies;
  363 + if (time_before_eq(timeout, now))
  364 + break;
  365 +
  366 + spin_unlock_irqrestore(&hwif->lock, flags);
  367 + timeout = schedule_timeout_uninterruptible(timeout - now);
  368 + spin_lock_irqsave(&hwif->lock, flags);
  369 + } while (timeout);
  370 + finish_wait(&ide_park_wq, &wait);
  371 +
  372 + /*
  373 + * First, reset any device state data we were maintaining
  374 + * for any of the drives on this interface.
  375 + */
  376 + ide_port_for_each_dev(i, tdrive, hwif)
  377 + pre_reset(tdrive);
  378 +
  379 + if (io_ports->ctl_addr == 0) {
  380 + spin_unlock_irqrestore(&hwif->lock, flags);
  381 + ide_complete_drive_reset(drive, -ENXIO);
  382 + return ide_stopped;
  383 + }
  384 +
  385 + /*
  386 + * Note that we also set nIEN while resetting the device,
  387 + * to mask unwanted interrupts from the interface during the reset.
  388 + * However, due to the design of PC hardware, this will cause an
  389 + * immediate interrupt due to the edge transition it produces.
  390 + * This single interrupt gives us a "fast poll" for drives that
  391 + * recover from reset very quickly, saving us the first 50ms wait time.
  392 + *
  393 + * TODO: add ->softreset method and stop abusing ->set_irq
  394 + */
  395 + /* set SRST and nIEN */
  396 + tp_ops->set_irq(hwif, 4);
  397 + /* more than enough time */
  398 + udelay(10);
  399 + /* clear SRST, leave nIEN (unless device is on the quirk list) */
  400 + tp_ops->set_irq(hwif, drive->quirk_list == 2);
  401 + /* more than enough time */
  402 + udelay(10);
  403 + hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
  404 + hwif->polling = 1;
  405 + __ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
  406 +
  407 + /*
  408 + * Some weird controller like resetting themselves to a strange
  409 + * state when the disks are reset this way. At least, the Winbond
  410 + * 553 documentation says that
  411 + */
  412 + port_ops = hwif->port_ops;
  413 + if (port_ops && port_ops->resetproc)
  414 + port_ops->resetproc(drive);
  415 +
  416 + spin_unlock_irqrestore(&hwif->lock, flags);
  417 + return ide_started;
  418 +}
  419 +
  420 +/*
  421 + * ide_do_reset() is the entry point to the drive/interface reset code.
  422 + */
  423 +
  424 +ide_startstop_t ide_do_reset(ide_drive_t *drive)
  425 +{
  426 + return do_reset1(drive, 0);
  427 +}
  428 +EXPORT_SYMBOL(ide_do_reset);
drivers/ide/ide-io.c
... ... @@ -196,7 +196,7 @@
196 196 }
197 197 EXPORT_SYMBOL(ide_end_drive_cmd);
198 198  
199   -static void ide_kill_rq(ide_drive_t *drive, struct request *rq)
  199 +void ide_kill_rq(ide_drive_t *drive, struct request *rq)
200 200 {
201 201 if (rq->rq_disk) {
202 202 struct ide_driver *drv;
... ... @@ -206,133 +206,6 @@
206 206 } else
207 207 ide_end_request(drive, 0, 0);
208 208 }
209   -
210   -static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, u8 stat, u8 err)
211   -{
212   - ide_hwif_t *hwif = drive->hwif;
213   -
214   - if ((stat & ATA_BUSY) ||
215   - ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
216   - /* other bits are useless when BUSY */
217   - rq->errors |= ERROR_RESET;
218   - } else if (stat & ATA_ERR) {
219   - /* err has different meaning on cdrom and tape */
220   - if (err == ATA_ABORTED) {
221   - if ((drive->dev_flags & IDE_DFLAG_LBA) &&
222   - /* some newer drives don't support ATA_CMD_INIT_DEV_PARAMS */
223   - hwif->tp_ops->read_status(hwif) == ATA_CMD_INIT_DEV_PARAMS)
224   - return ide_stopped;
225   - } else if ((err & BAD_CRC) == BAD_CRC) {
226   - /* UDMA crc error, just retry the operation */
227   - drive->crc_count++;
228   - } else if (err & (ATA_BBK | ATA_UNC)) {
229   - /* retries won't help these */
230   - rq->errors = ERROR_MAX;
231   - } else if (err & ATA_TRK0NF) {
232   - /* help it find track zero */
233   - rq->errors |= ERROR_RECAL;
234   - }
235   - }
236   -
237   - if ((stat & ATA_DRQ) && rq_data_dir(rq) == READ &&
238   - (hwif->host_flags & IDE_HFLAG_ERROR_STOPS_FIFO) == 0) {
239   - int nsect = drive->mult_count ? drive->mult_count : 1;
240   -
241   - ide_pad_transfer(drive, READ, nsect * SECTOR_SIZE);
242   - }
243   -
244   - if (rq->errors >= ERROR_MAX || blk_noretry_request(rq)) {
245   - ide_kill_rq(drive, rq);
246   - return ide_stopped;
247   - }
248   -
249   - if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ))
250   - rq->errors |= ERROR_RESET;
251   -
252   - if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
253   - ++rq->errors;
254   - return ide_do_reset(drive);
255   - }
256   -
257   - if ((rq->errors & ERROR_RECAL) == ERROR_RECAL)
258   - drive->special.b.recalibrate = 1;
259   -
260   - ++rq->errors;
261   -
262   - return ide_stopped;
263   -}
264   -
265   -static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq, u8 stat, u8 err)
266   -{
267   - ide_hwif_t *hwif = drive->hwif;
268   -
269   - if ((stat & ATA_BUSY) ||
270   - ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) {
271   - /* other bits are useless when BUSY */
272   - rq->errors |= ERROR_RESET;
273   - } else {
274   - /* add decoding error stuff */
275   - }
276   -
277   - if (hwif->tp_ops->read_status(hwif) & (ATA_BUSY | ATA_DRQ))
278   - /* force an abort */
279   - hwif->tp_ops->exec_command(hwif, ATA_CMD_IDLEIMMEDIATE);
280   -
281   - if (rq->errors >= ERROR_MAX) {
282   - ide_kill_rq(drive, rq);
283   - } else {
284   - if ((rq->errors & ERROR_RESET) == ERROR_RESET) {
285   - ++rq->errors;
286   - return ide_do_reset(drive);
287   - }
288   - ++rq->errors;
289   - }
290   -
291   - return ide_stopped;
292   -}
293   -
294   -static ide_startstop_t
295   -__ide_error(ide_drive_t *drive, struct request *rq, u8 stat, u8 err)
296   -{
297   - if (drive->media == ide_disk)
298   - return ide_ata_error(drive, rq, stat, err);
299   - return ide_atapi_error(drive, rq, stat, err);
300   -}
301   -
302   -/**
303   - * ide_error - handle an error on the IDE
304   - * @drive: drive the error occurred on
305   - * @msg: message to report
306   - * @stat: status bits
307   - *
308   - * ide_error() takes action based on the error returned by the drive.
309   - * For normal I/O that may well include retries. We deal with
310   - * both new-style (taskfile) and old style command handling here.
311   - * In the case of taskfile command handling there is work left to
312   - * do
313   - */
314   -
315   -ide_startstop_t ide_error (ide_drive_t *drive, const char *msg, u8 stat)
316   -{
317   - struct request *rq;
318   - u8 err;
319   -
320   - err = ide_dump_status(drive, msg, stat);
321   -
322   - rq = drive->hwif->rq;
323   - if (rq == NULL)
324   - return ide_stopped;
325   -
326   - /* retry only "normal" I/O: */
327   - if (!blk_fs_request(rq)) {
328   - rq->errors = 1;
329   - ide_end_drive_cmd(drive, stat, err);
330   - return ide_stopped;
331   - }
332   -
333   - return __ide_error(drive, rq, stat, err);
334   -}
335   -EXPORT_SYMBOL_GPL(ide_error);
336 209  
337 210 static void ide_tf_set_specify_cmd(ide_drive_t *drive, struct ide_taskfile *tf)
338 211 {
drivers/ide/ide-iops.c
... ... @@ -446,8 +446,8 @@
446 446 *
447 447 * See also ide_execute_command
448 448 */
449   -static void __ide_set_handler (ide_drive_t *drive, ide_handler_t *handler,
450   - unsigned int timeout, ide_expiry_t *expiry)
  449 +void __ide_set_handler(ide_drive_t *drive, ide_handler_t *handler,
  450 + unsigned int timeout, ide_expiry_t *expiry)
451 451 {
452 452 ide_hwif_t *hwif = drive->hwif;
453 453  
... ... @@ -516,301 +516,6 @@
516 516 spin_unlock_irqrestore(&hwif->lock, flags);
517 517 }
518 518 EXPORT_SYMBOL_GPL(ide_execute_pkt_cmd);
519   -
520   -static inline void ide_complete_drive_reset(ide_drive_t *drive, int err)
521   -{
522   - struct request *rq = drive->hwif->rq;
523   -
524   - if (rq && blk_special_request(rq) && rq->cmd[0] == REQ_DRIVE_RESET)
525   - ide_end_request(drive, err ? err : 1, 0);
526   -}
527   -
528   -/* needed below */
529   -static ide_startstop_t do_reset1(ide_drive_t *, int);
530   -
531   -/*
532   - * atapi_reset_pollfunc() gets invoked to poll the interface for completion
533   - * every 50ms during an atapi drive reset operation. If the drive has not yet
534   - * responded, and we have not yet hit our maximum waiting time, then the timer
535   - * is restarted for another 50ms.
536   - */
537   -static ide_startstop_t atapi_reset_pollfunc(ide_drive_t *drive)
538   -{
539   - ide_hwif_t *hwif = drive->hwif;
540   - u8 stat;
541   -
542   - SELECT_DRIVE(drive);
543   - udelay(10);
544   - stat = hwif->tp_ops->read_status(hwif);
545   -
546   - if (OK_STAT(stat, 0, ATA_BUSY))
547   - printk(KERN_INFO "%s: ATAPI reset complete\n", drive->name);
548   - else {
549   - if (time_before(jiffies, hwif->poll_timeout)) {
550   - ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20,
551   - NULL);
552   - /* continue polling */
553   - return ide_started;
554   - }
555   - /* end of polling */
556   - hwif->polling = 0;
557   - printk(KERN_ERR "%s: ATAPI reset timed-out, status=0x%02x\n",
558   - drive->name, stat);
559   - /* do it the old fashioned way */
560   - return do_reset1(drive, 1);
561   - }
562   - /* done polling */
563   - hwif->polling = 0;
564   - ide_complete_drive_reset(drive, 0);
565   - return ide_stopped;
566   -}
567   -
568   -static void ide_reset_report_error(ide_hwif_t *hwif, u8 err)
569   -{
570   - static const char *err_master_vals[] =
571   - { NULL, "passed", "formatter device error",
572   - "sector buffer error", "ECC circuitry error",
573   - "controlling MPU error" };
574   -
575   - u8 err_master = err & 0x7f;
576   -
577   - printk(KERN_ERR "%s: reset: master: ", hwif->name);
578   - if (err_master && err_master < 6)
579   - printk(KERN_CONT "%s", err_master_vals[err_master]);
580   - else
581   - printk(KERN_CONT "error (0x%02x?)", err);
582   - if (err & 0x80)
583   - printk(KERN_CONT "; slave: failed");
584   - printk(KERN_CONT "\n");
585   -}
586   -
587   -/*
588   - * reset_pollfunc() gets invoked to poll the interface for completion every 50ms
589   - * during an ide reset operation. If the drives have not yet responded,
590   - * and we have not yet hit our maximum waiting time, then the timer is restarted
591   - * for another 50ms.
592   - */
593   -static ide_startstop_t reset_pollfunc(ide_drive_t *drive)
594   -{
595   - ide_hwif_t *hwif = drive->hwif;
596   - const struct ide_port_ops *port_ops = hwif->port_ops;
597   - u8 tmp;
598   - int err = 0;
599   -
600   - if (port_ops && port_ops->reset_poll) {
601   - err = port_ops->reset_poll(drive);
602   - if (err) {
603   - printk(KERN_ERR "%s: host reset_poll failure for %s.\n",
604   - hwif->name, drive->name);
605   - goto out;
606   - }
607   - }
608   -
609   - tmp = hwif->tp_ops->read_status(hwif);
610   -
611   - if (!OK_STAT(tmp, 0, ATA_BUSY)) {
612   - if (time_before(jiffies, hwif->poll_timeout)) {
613   - ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
614   - /* continue polling */
615   - return ide_started;
616   - }
617   - printk(KERN_ERR "%s: reset timed-out, status=0x%02x\n",
618   - hwif->name, tmp);
619   - drive->failures++;
620   - err = -EIO;
621   - } else {
622   - tmp = ide_read_error(drive);
623   -
624   - if (tmp == 1) {
625   - printk(KERN_INFO "%s: reset: success\n", hwif->name);
626   - drive->failures = 0;
627   - } else {
628   - ide_reset_report_error(hwif, tmp);
629   - drive->failures++;
630   - err = -EIO;
631   - }
632   - }
633   -out:
634   - hwif->polling = 0; /* done polling */
635   - ide_complete_drive_reset(drive, err);
636   - return ide_stopped;
637   -}
638   -
639   -static void ide_disk_pre_reset(ide_drive_t *drive)
640   -{
641   - int legacy = (drive->id[ATA_ID_CFS_ENABLE_2] & 0x0400) ? 0 : 1;
642   -
643   - drive->special.all = 0;
644   - drive->special.b.set_geometry = legacy;
645   - drive->special.b.recalibrate = legacy;
646   -
647   - drive->mult_count = 0;
648   - drive->dev_flags &= ~IDE_DFLAG_PARKED;
649   -
650   - if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0 &&
651   - (drive->dev_flags & IDE_DFLAG_USING_DMA) == 0)
652   - drive->mult_req = 0;
653   -
654   - if (drive->mult_req != drive->mult_count)
655   - drive->special.b.set_multmode = 1;
656   -}
657   -
658   -static void pre_reset(ide_drive_t *drive)
659   -{
660   - const struct ide_port_ops *port_ops = drive->hwif->port_ops;
661   -
662   - if (drive->media == ide_disk)
663   - ide_disk_pre_reset(drive);
664   - else
665   - drive->dev_flags |= IDE_DFLAG_POST_RESET;
666   -
667   - if (drive->dev_flags & IDE_DFLAG_USING_DMA) {
668   - if (drive->crc_count)
669   - ide_check_dma_crc(drive);
670   - else
671   - ide_dma_off(drive);
672   - }
673   -
674   - if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0) {
675   - if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) {
676   - drive->dev_flags &= ~IDE_DFLAG_UNMASK;
677   - drive->io_32bit = 0;
678   - }
679   - return;
680   - }
681   -
682   - if (port_ops && port_ops->pre_reset)
683   - port_ops->pre_reset(drive);
684   -
685   - if (drive->current_speed != 0xff)
686   - drive->desired_speed = drive->current_speed;
687   - drive->current_speed = 0xff;
688   -}
689   -
690   -/*
691   - * do_reset1() attempts to recover a confused drive by resetting it.
692   - * Unfortunately, resetting a disk drive actually resets all devices on
693   - * the same interface, so it can really be thought of as resetting the
694   - * interface rather than resetting the drive.
695   - *
696   - * ATAPI devices have their own reset mechanism which allows them to be
697   - * individually reset without clobbering other devices on the same interface.
698   - *
699   - * Unfortunately, the IDE interface does not generate an interrupt to let
700   - * us know when the reset operation has finished, so we must poll for this.
701   - * Equally poor, though, is the fact that this may a very long time to complete,
702   - * (up to 30 seconds worstcase). So, instead of busy-waiting here for it,
703   - * we set a timer to poll at 50ms intervals.
704   - */
705   -static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi)
706   -{
707   - ide_hwif_t *hwif = drive->hwif;
708   - struct ide_io_ports *io_ports = &hwif->io_ports;
709   - const struct ide_tp_ops *tp_ops = hwif->tp_ops;
710   - const struct ide_port_ops *port_ops;
711   - ide_drive_t *tdrive;
712   - unsigned long flags, timeout;
713   - int i;
714   - DEFINE_WAIT(wait);
715   -
716   - spin_lock_irqsave(&hwif->lock, flags);
717   -
718   - /* We must not reset with running handlers */
719   - BUG_ON(hwif->handler != NULL);
720   -
721   - /* For an ATAPI device, first try an ATAPI SRST. */
722   - if (drive->media != ide_disk && !do_not_try_atapi) {
723   - pre_reset(drive);
724   - SELECT_DRIVE(drive);
725   - udelay(20);
726   - tp_ops->exec_command(hwif, ATA_CMD_DEV_RESET);
727   - ndelay(400);
728   - hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
729   - hwif->polling = 1;
730   - __ide_set_handler(drive, &atapi_reset_pollfunc, HZ/20, NULL);
731   - spin_unlock_irqrestore(&hwif->lock, flags);
732   - return ide_started;
733   - }
734   -
735   - /* We must not disturb devices in the IDE_DFLAG_PARKED state. */
736   - do {
737   - unsigned long now;
738   -
739   - prepare_to_wait(&ide_park_wq, &wait, TASK_UNINTERRUPTIBLE);
740   - timeout = jiffies;
741   - ide_port_for_each_present_dev(i, tdrive, hwif) {
742   - if ((tdrive->dev_flags & IDE_DFLAG_PARKED) &&
743   - time_after(tdrive->sleep, timeout))
744   - timeout = tdrive->sleep;
745   - }
746   -
747   - now = jiffies;
748   - if (time_before_eq(timeout, now))
749   - break;
750   -
751   - spin_unlock_irqrestore(&hwif->lock, flags);
752   - timeout = schedule_timeout_uninterruptible(timeout - now);
753   - spin_lock_irqsave(&hwif->lock, flags);
754   - } while (timeout);
755   - finish_wait(&ide_park_wq, &wait);
756   -
757   - /*
758   - * First, reset any device state data we were maintaining
759   - * for any of the drives on this interface.
760   - */
761   - ide_port_for_each_dev(i, tdrive, hwif)
762   - pre_reset(tdrive);
763   -
764   - if (io_ports->ctl_addr == 0) {
765   - spin_unlock_irqrestore(&hwif->lock, flags);
766   - ide_complete_drive_reset(drive, -ENXIO);
767   - return ide_stopped;
768   - }
769   -
770   - /*
771   - * Note that we also set nIEN while resetting the device,
772   - * to mask unwanted interrupts from the interface during the reset.
773   - * However, due to the design of PC hardware, this will cause an
774   - * immediate interrupt due to the edge transition it produces.
775   - * This single interrupt gives us a "fast poll" for drives that
776   - * recover from reset very quickly, saving us the first 50ms wait time.
777   - *
778   - * TODO: add ->softreset method and stop abusing ->set_irq
779   - */
780   - /* set SRST and nIEN */
781   - tp_ops->set_irq(hwif, 4);
782   - /* more than enough time */
783   - udelay(10);
784   - /* clear SRST, leave nIEN (unless device is on the quirk list) */
785   - tp_ops->set_irq(hwif, drive->quirk_list == 2);
786   - /* more than enough time */
787   - udelay(10);
788   - hwif->poll_timeout = jiffies + WAIT_WORSTCASE;
789   - hwif->polling = 1;
790   - __ide_set_handler(drive, &reset_pollfunc, HZ/20, NULL);
791   -
792   - /*
793   - * Some weird controller like resetting themselves to a strange
794   - * state when the disks are reset this way. At least, the Winbond
795   - * 553 documentation says that
796   - */
797   - port_ops = hwif->port_ops;
798   - if (port_ops && port_ops->resetproc)
799   - port_ops->resetproc(drive);
800   -
801   - spin_unlock_irqrestore(&hwif->lock, flags);
802   - return ide_started;
803   -}
804   -
805   -/*
806   - * ide_do_reset() is the entry point to the drive/interface reset code.
807   - */
808   -
809   -ide_startstop_t ide_do_reset(ide_drive_t *drive)
810   -{
811   - return do_reset1(drive, 0);
812   -}
813   -EXPORT_SYMBOL(ide_do_reset);
814 519  
815 520 /*
816 521 * ide_wait_not_busy() waits for the currently selected device on the hwif
... ... @@ -1146,11 +1146,14 @@
1146 1146 extern int ide_vlb_clk;
1147 1147 extern int ide_pci_clk;
1148 1148  
1149   -extern int ide_end_request (ide_drive_t *drive, int uptodate, int nrsecs);
1150   -int ide_end_dequeued_request(ide_drive_t *drive, struct request *rq,
1151   - int uptodate, int nr_sectors);
  1149 +int ide_end_request(ide_drive_t *, int, int);
  1150 +int ide_end_dequeued_request(ide_drive_t *, struct request *, int, int);
  1151 +void ide_kill_rq(ide_drive_t *, struct request *);
1152 1152  
1153   -extern void ide_set_handler (ide_drive_t *drive, ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry);
  1153 +void __ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
  1154 + ide_expiry_t *);
  1155 +void ide_set_handler(ide_drive_t *, ide_handler_t *, unsigned int,
  1156 + ide_expiry_t *);
1154 1157  
1155 1158 void ide_execute_command(ide_drive_t *, u8, ide_handler_t *, unsigned int,
1156 1159 ide_expiry_t *);