SCSI: support for allocating large scatterlists
[linux-2.6-block.git] / drivers / ata / libata-core.c
CommitLineData
1da177e4 1/*
af36d7f0
JG
2 * libata-core.c - helper library for ATA
3 *
4 * Maintained by: Jeff Garzik <jgarzik@pobox.com>
5 * Please ALWAYS copy linux-ide@vger.kernel.org
6 * on emails.
7 *
8 * Copyright 2003-2004 Red Hat, Inc. All rights reserved.
9 * Copyright 2003-2004 Jeff Garzik
10 *
11 *
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2, or (at your option)
15 * any later version.
16 *
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; see the file COPYING. If not, write to
24 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
25 *
26 *
27 * libata documentation is available via 'make {ps|pdf}docs',
28 * as Documentation/DocBook/libata.*
29 *
30 * Hardware documentation available from http://www.t13.org/ and
31 * http://www.sata-io.org/
32 *
1da177e4
LT
33 */
34
1da177e4
LT
35#include <linux/kernel.h>
36#include <linux/module.h>
37#include <linux/pci.h>
38#include <linux/init.h>
39#include <linux/list.h>
40#include <linux/mm.h>
41#include <linux/highmem.h>
42#include <linux/spinlock.h>
43#include <linux/blkdev.h>
44#include <linux/delay.h>
45#include <linux/timer.h>
46#include <linux/interrupt.h>
47#include <linux/completion.h>
48#include <linux/suspend.h>
49#include <linux/workqueue.h>
67846b30 50#include <linux/jiffies.h>
378f058c 51#include <linux/scatterlist.h>
1da177e4 52#include <scsi/scsi.h>
193515d5 53#include <scsi/scsi_cmnd.h>
1da177e4
LT
54#include <scsi/scsi_host.h>
55#include <linux/libata.h>
56#include <asm/io.h>
57#include <asm/semaphore.h>
58#include <asm/byteorder.h>
59
60#include "libata.h"
61
fda0efc5 62
d7bb4cc7 63/* debounce timing parameters in msecs { interval, duration, timeout } */
e9c83914
TH
64const unsigned long sata_deb_timing_normal[] = { 5, 100, 2000 };
65const unsigned long sata_deb_timing_hotplug[] = { 25, 500, 2000 };
66const unsigned long sata_deb_timing_long[] = { 100, 2000, 5000 };
d7bb4cc7 67
3373efd8
TH
68static unsigned int ata_dev_init_params(struct ata_device *dev,
69 u16 heads, u16 sectors);
70static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
9f45cbd3 71static unsigned int ata_dev_set_AN(struct ata_device *dev, u8 enable);
3373efd8 72static void ata_dev_xfermask(struct ata_device *dev);
75683fe7 73static unsigned long ata_dev_blacklisted(const struct ata_device *dev);
1da177e4 74
f3187195 75unsigned int ata_print_id = 1;
1da177e4
LT
76static struct workqueue_struct *ata_wq;
77
453b07ac
TH
78struct workqueue_struct *ata_aux_wq;
79
418dc1f5 80int atapi_enabled = 1;
1623c81e
JG
81module_param(atapi_enabled, int, 0444);
82MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
83
95de719a
AL
84int atapi_dmadir = 0;
85module_param(atapi_dmadir, int, 0444);
86MODULE_PARM_DESC(atapi_dmadir, "Enable ATAPI DMADIR bridge support (0=off, 1=on)");
87
baf4fdfa
ML
88int atapi_passthru16 = 1;
89module_param(atapi_passthru16, int, 0444);
90MODULE_PARM_DESC(atapi_passthru16, "Enable ATA_16 passthru for ATAPI devices; on by default (0=off, 1=on)");
91
c3c013a2
JG
92int libata_fua = 0;
93module_param_named(fua, libata_fua, int, 0444);
94MODULE_PARM_DESC(fua, "FUA support (0=off, 1=on)");
95
1e999736
AC
96static int ata_ignore_hpa = 0;
97module_param_named(ignore_hpa, ata_ignore_hpa, int, 0644);
98MODULE_PARM_DESC(ignore_hpa, "Ignore HPA limit (0=keep BIOS limits, 1=ignore limits, using full disk)");
99
b3a70601
AC
100static int libata_dma_mask = ATA_DMA_MASK_ATA|ATA_DMA_MASK_ATAPI|ATA_DMA_MASK_CFA;
101module_param_named(dma, libata_dma_mask, int, 0444);
102MODULE_PARM_DESC(dma, "DMA enable/disable (0x1==ATA, 0x2==ATAPI, 0x4==CF)");
103
a8601e5f
AM
104static int ata_probe_timeout = ATA_TMOUT_INTERNAL / HZ;
105module_param(ata_probe_timeout, int, 0444);
106MODULE_PARM_DESC(ata_probe_timeout, "Set ATA probing timeout (seconds)");
107
6ebe9d86 108int libata_noacpi = 0;
d7d0dad6 109module_param_named(noacpi, libata_noacpi, int, 0444);
6ebe9d86 110MODULE_PARM_DESC(noacpi, "Disables the use of ACPI in probe/suspend/resume when set");
11ef697b 111
1da177e4
LT
112MODULE_AUTHOR("Jeff Garzik");
113MODULE_DESCRIPTION("Library module for ATA devices");
114MODULE_LICENSE("GPL");
115MODULE_VERSION(DRV_VERSION);
116
0baab86b 117
1da177e4
LT
118/**
119 * ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
120 * @tf: Taskfile to convert
1da177e4 121 * @pmp: Port multiplier port
9977126c
TH
122 * @is_cmd: This FIS is for command
123 * @fis: Buffer into which data will output
1da177e4
LT
124 *
125 * Converts a standard ATA taskfile to a Serial ATA
126 * FIS structure (Register - Host to Device).
127 *
128 * LOCKING:
129 * Inherited from caller.
130 */
9977126c 131void ata_tf_to_fis(const struct ata_taskfile *tf, u8 pmp, int is_cmd, u8 *fis)
1da177e4 132{
9977126c
TH
133 fis[0] = 0x27; /* Register - Host to Device FIS */
134 fis[1] = pmp & 0xf; /* Port multiplier number*/
135 if (is_cmd)
136 fis[1] |= (1 << 7); /* bit 7 indicates Command FIS */
137
1da177e4
LT
138 fis[2] = tf->command;
139 fis[3] = tf->feature;
140
141 fis[4] = tf->lbal;
142 fis[5] = tf->lbam;
143 fis[6] = tf->lbah;
144 fis[7] = tf->device;
145
146 fis[8] = tf->hob_lbal;
147 fis[9] = tf->hob_lbam;
148 fis[10] = tf->hob_lbah;
149 fis[11] = tf->hob_feature;
150
151 fis[12] = tf->nsect;
152 fis[13] = tf->hob_nsect;
153 fis[14] = 0;
154 fis[15] = tf->ctl;
155
156 fis[16] = 0;
157 fis[17] = 0;
158 fis[18] = 0;
159 fis[19] = 0;
160}
161
162/**
163 * ata_tf_from_fis - Convert SATA FIS to ATA taskfile
164 * @fis: Buffer from which data will be input
165 * @tf: Taskfile to output
166 *
e12a1be6 167 * Converts a serial ATA FIS structure to a standard ATA taskfile.
1da177e4
LT
168 *
169 * LOCKING:
170 * Inherited from caller.
171 */
172
057ace5e 173void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf)
1da177e4
LT
174{
175 tf->command = fis[2]; /* status */
176 tf->feature = fis[3]; /* error */
177
178 tf->lbal = fis[4];
179 tf->lbam = fis[5];
180 tf->lbah = fis[6];
181 tf->device = fis[7];
182
183 tf->hob_lbal = fis[8];
184 tf->hob_lbam = fis[9];
185 tf->hob_lbah = fis[10];
186
187 tf->nsect = fis[12];
188 tf->hob_nsect = fis[13];
189}
190
8cbd6df1
AL
191static const u8 ata_rw_cmds[] = {
192 /* pio multi */
193 ATA_CMD_READ_MULTI,
194 ATA_CMD_WRITE_MULTI,
195 ATA_CMD_READ_MULTI_EXT,
196 ATA_CMD_WRITE_MULTI_EXT,
9a3dccc4
TH
197 0,
198 0,
199 0,
200 ATA_CMD_WRITE_MULTI_FUA_EXT,
8cbd6df1
AL
201 /* pio */
202 ATA_CMD_PIO_READ,
203 ATA_CMD_PIO_WRITE,
204 ATA_CMD_PIO_READ_EXT,
205 ATA_CMD_PIO_WRITE_EXT,
9a3dccc4
TH
206 0,
207 0,
208 0,
209 0,
8cbd6df1
AL
210 /* dma */
211 ATA_CMD_READ,
212 ATA_CMD_WRITE,
213 ATA_CMD_READ_EXT,
9a3dccc4
TH
214 ATA_CMD_WRITE_EXT,
215 0,
216 0,
217 0,
218 ATA_CMD_WRITE_FUA_EXT
8cbd6df1 219};
1da177e4
LT
220
221/**
8cbd6df1 222 * ata_rwcmd_protocol - set taskfile r/w commands and protocol
bd056d7e
TH
223 * @tf: command to examine and configure
224 * @dev: device tf belongs to
1da177e4 225 *
2e9edbf8 226 * Examine the device configuration and tf->flags to calculate
8cbd6df1 227 * the proper read/write commands and protocol to use.
1da177e4
LT
228 *
229 * LOCKING:
230 * caller.
231 */
bd056d7e 232static int ata_rwcmd_protocol(struct ata_taskfile *tf, struct ata_device *dev)
1da177e4 233{
9a3dccc4 234 u8 cmd;
1da177e4 235
9a3dccc4 236 int index, fua, lba48, write;
2e9edbf8 237
9a3dccc4 238 fua = (tf->flags & ATA_TFLAG_FUA) ? 4 : 0;
8cbd6df1
AL
239 lba48 = (tf->flags & ATA_TFLAG_LBA48) ? 2 : 0;
240 write = (tf->flags & ATA_TFLAG_WRITE) ? 1 : 0;
1da177e4 241
8cbd6df1
AL
242 if (dev->flags & ATA_DFLAG_PIO) {
243 tf->protocol = ATA_PROT_PIO;
9a3dccc4 244 index = dev->multi_count ? 0 : 8;
9af5c9c9 245 } else if (lba48 && (dev->link->ap->flags & ATA_FLAG_PIO_LBA48)) {
8d238e01
AC
246 /* Unable to use DMA due to host limitation */
247 tf->protocol = ATA_PROT_PIO;
0565c26d 248 index = dev->multi_count ? 0 : 8;
8cbd6df1
AL
249 } else {
250 tf->protocol = ATA_PROT_DMA;
9a3dccc4 251 index = 16;
8cbd6df1 252 }
1da177e4 253
9a3dccc4
TH
254 cmd = ata_rw_cmds[index + fua + lba48 + write];
255 if (cmd) {
256 tf->command = cmd;
257 return 0;
258 }
259 return -1;
1da177e4
LT
260}
261
35b649fe
TH
262/**
263 * ata_tf_read_block - Read block address from ATA taskfile
264 * @tf: ATA taskfile of interest
265 * @dev: ATA device @tf belongs to
266 *
267 * LOCKING:
268 * None.
269 *
270 * Read block address from @tf. This function can handle all
271 * three address formats - LBA, LBA48 and CHS. tf->protocol and
272 * flags select the address format to use.
273 *
274 * RETURNS:
275 * Block address read from @tf.
276 */
277u64 ata_tf_read_block(struct ata_taskfile *tf, struct ata_device *dev)
278{
279 u64 block = 0;
280
281 if (tf->flags & ATA_TFLAG_LBA) {
282 if (tf->flags & ATA_TFLAG_LBA48) {
283 block |= (u64)tf->hob_lbah << 40;
284 block |= (u64)tf->hob_lbam << 32;
285 block |= tf->hob_lbal << 24;
286 } else
287 block |= (tf->device & 0xf) << 24;
288
289 block |= tf->lbah << 16;
290 block |= tf->lbam << 8;
291 block |= tf->lbal;
292 } else {
293 u32 cyl, head, sect;
294
295 cyl = tf->lbam | (tf->lbah << 8);
296 head = tf->device & 0xf;
297 sect = tf->lbal;
298
299 block = (cyl * dev->heads + head) * dev->sectors + sect;
300 }
301
302 return block;
303}
304
bd056d7e
TH
305/**
306 * ata_build_rw_tf - Build ATA taskfile for given read/write request
307 * @tf: Target ATA taskfile
308 * @dev: ATA device @tf belongs to
309 * @block: Block address
310 * @n_block: Number of blocks
311 * @tf_flags: RW/FUA etc...
312 * @tag: tag
313 *
314 * LOCKING:
315 * None.
316 *
317 * Build ATA taskfile @tf for read/write request described by
318 * @block, @n_block, @tf_flags and @tag on @dev.
319 *
320 * RETURNS:
321 *
322 * 0 on success, -ERANGE if the request is too large for @dev,
323 * -EINVAL if the request is invalid.
324 */
325int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
326 u64 block, u32 n_block, unsigned int tf_flags,
327 unsigned int tag)
328{
329 tf->flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
330 tf->flags |= tf_flags;
331
6d1245bf 332 if (ata_ncq_enabled(dev) && likely(tag != ATA_TAG_INTERNAL)) {
bd056d7e
TH
333 /* yay, NCQ */
334 if (!lba_48_ok(block, n_block))
335 return -ERANGE;
336
337 tf->protocol = ATA_PROT_NCQ;
338 tf->flags |= ATA_TFLAG_LBA | ATA_TFLAG_LBA48;
339
340 if (tf->flags & ATA_TFLAG_WRITE)
341 tf->command = ATA_CMD_FPDMA_WRITE;
342 else
343 tf->command = ATA_CMD_FPDMA_READ;
344
345 tf->nsect = tag << 3;
346 tf->hob_feature = (n_block >> 8) & 0xff;
347 tf->feature = n_block & 0xff;
348
349 tf->hob_lbah = (block >> 40) & 0xff;
350 tf->hob_lbam = (block >> 32) & 0xff;
351 tf->hob_lbal = (block >> 24) & 0xff;
352 tf->lbah = (block >> 16) & 0xff;
353 tf->lbam = (block >> 8) & 0xff;
354 tf->lbal = block & 0xff;
355
356 tf->device = 1 << 6;
357 if (tf->flags & ATA_TFLAG_FUA)
358 tf->device |= 1 << 7;
359 } else if (dev->flags & ATA_DFLAG_LBA) {
360 tf->flags |= ATA_TFLAG_LBA;
361
362 if (lba_28_ok(block, n_block)) {
363 /* use LBA28 */
364 tf->device |= (block >> 24) & 0xf;
365 } else if (lba_48_ok(block, n_block)) {
366 if (!(dev->flags & ATA_DFLAG_LBA48))
367 return -ERANGE;
368
369 /* use LBA48 */
370 tf->flags |= ATA_TFLAG_LBA48;
371
372 tf->hob_nsect = (n_block >> 8) & 0xff;
373
374 tf->hob_lbah = (block >> 40) & 0xff;
375 tf->hob_lbam = (block >> 32) & 0xff;
376 tf->hob_lbal = (block >> 24) & 0xff;
377 } else
378 /* request too large even for LBA48 */
379 return -ERANGE;
380
381 if (unlikely(ata_rwcmd_protocol(tf, dev) < 0))
382 return -EINVAL;
383
384 tf->nsect = n_block & 0xff;
385
386 tf->lbah = (block >> 16) & 0xff;
387 tf->lbam = (block >> 8) & 0xff;
388 tf->lbal = block & 0xff;
389
390 tf->device |= ATA_LBA;
391 } else {
392 /* CHS */
393 u32 sect, head, cyl, track;
394
395 /* The request -may- be too large for CHS addressing. */
396 if (!lba_28_ok(block, n_block))
397 return -ERANGE;
398
399 if (unlikely(ata_rwcmd_protocol(tf, dev) < 0))
400 return -EINVAL;
401
402 /* Convert LBA to CHS */
403 track = (u32)block / dev->sectors;
404 cyl = track / dev->heads;
405 head = track % dev->heads;
406 sect = (u32)block % dev->sectors + 1;
407
408 DPRINTK("block %u track %u cyl %u head %u sect %u\n",
409 (u32)block, track, cyl, head, sect);
410
411 /* Check whether the converted CHS can fit.
412 Cylinder: 0-65535
413 Head: 0-15
414 Sector: 1-255*/
415 if ((cyl >> 16) || (head >> 4) || (sect >> 8) || (!sect))
416 return -ERANGE;
417
418 tf->nsect = n_block & 0xff; /* Sector count 0 means 256 sectors */
419 tf->lbal = sect;
420 tf->lbam = cyl;
421 tf->lbah = cyl >> 8;
422 tf->device |= head;
423 }
424
425 return 0;
426}
427
cb95d562
TH
428/**
429 * ata_pack_xfermask - Pack pio, mwdma and udma masks into xfer_mask
430 * @pio_mask: pio_mask
431 * @mwdma_mask: mwdma_mask
432 * @udma_mask: udma_mask
433 *
434 * Pack @pio_mask, @mwdma_mask and @udma_mask into a single
435 * unsigned int xfer_mask.
436 *
437 * LOCKING:
438 * None.
439 *
440 * RETURNS:
441 * Packed xfer_mask.
442 */
443static unsigned int ata_pack_xfermask(unsigned int pio_mask,
444 unsigned int mwdma_mask,
445 unsigned int udma_mask)
446{
447 return ((pio_mask << ATA_SHIFT_PIO) & ATA_MASK_PIO) |
448 ((mwdma_mask << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA) |
449 ((udma_mask << ATA_SHIFT_UDMA) & ATA_MASK_UDMA);
450}
451
c0489e4e
TH
452/**
453 * ata_unpack_xfermask - Unpack xfer_mask into pio, mwdma and udma masks
454 * @xfer_mask: xfer_mask to unpack
455 * @pio_mask: resulting pio_mask
456 * @mwdma_mask: resulting mwdma_mask
457 * @udma_mask: resulting udma_mask
458 *
459 * Unpack @xfer_mask into @pio_mask, @mwdma_mask and @udma_mask.
460 * Any NULL distination masks will be ignored.
461 */
462static void ata_unpack_xfermask(unsigned int xfer_mask,
463 unsigned int *pio_mask,
464 unsigned int *mwdma_mask,
465 unsigned int *udma_mask)
466{
467 if (pio_mask)
468 *pio_mask = (xfer_mask & ATA_MASK_PIO) >> ATA_SHIFT_PIO;
469 if (mwdma_mask)
470 *mwdma_mask = (xfer_mask & ATA_MASK_MWDMA) >> ATA_SHIFT_MWDMA;
471 if (udma_mask)
472 *udma_mask = (xfer_mask & ATA_MASK_UDMA) >> ATA_SHIFT_UDMA;
473}
474
cb95d562 475static const struct ata_xfer_ent {
be9a50c8 476 int shift, bits;
cb95d562
TH
477 u8 base;
478} ata_xfer_tbl[] = {
479 { ATA_SHIFT_PIO, ATA_BITS_PIO, XFER_PIO_0 },
480 { ATA_SHIFT_MWDMA, ATA_BITS_MWDMA, XFER_MW_DMA_0 },
481 { ATA_SHIFT_UDMA, ATA_BITS_UDMA, XFER_UDMA_0 },
482 { -1, },
483};
484
485/**
486 * ata_xfer_mask2mode - Find matching XFER_* for the given xfer_mask
487 * @xfer_mask: xfer_mask of interest
488 *
489 * Return matching XFER_* value for @xfer_mask. Only the highest
490 * bit of @xfer_mask is considered.
491 *
492 * LOCKING:
493 * None.
494 *
495 * RETURNS:
496 * Matching XFER_* value, 0 if no match found.
497 */
498static u8 ata_xfer_mask2mode(unsigned int xfer_mask)
499{
500 int highbit = fls(xfer_mask) - 1;
501 const struct ata_xfer_ent *ent;
502
503 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
504 if (highbit >= ent->shift && highbit < ent->shift + ent->bits)
505 return ent->base + highbit - ent->shift;
506 return 0;
507}
508
509/**
510 * ata_xfer_mode2mask - Find matching xfer_mask for XFER_*
511 * @xfer_mode: XFER_* of interest
512 *
513 * Return matching xfer_mask for @xfer_mode.
514 *
515 * LOCKING:
516 * None.
517 *
518 * RETURNS:
519 * Matching xfer_mask, 0 if no match found.
520 */
521static unsigned int ata_xfer_mode2mask(u8 xfer_mode)
522{
523 const struct ata_xfer_ent *ent;
524
525 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
526 if (xfer_mode >= ent->base && xfer_mode < ent->base + ent->bits)
527 return 1 << (ent->shift + xfer_mode - ent->base);
528 return 0;
529}
530
531/**
532 * ata_xfer_mode2shift - Find matching xfer_shift for XFER_*
533 * @xfer_mode: XFER_* of interest
534 *
535 * Return matching xfer_shift for @xfer_mode.
536 *
537 * LOCKING:
538 * None.
539 *
540 * RETURNS:
541 * Matching xfer_shift, -1 if no match found.
542 */
543static int ata_xfer_mode2shift(unsigned int xfer_mode)
544{
545 const struct ata_xfer_ent *ent;
546
547 for (ent = ata_xfer_tbl; ent->shift >= 0; ent++)
548 if (xfer_mode >= ent->base && xfer_mode < ent->base + ent->bits)
549 return ent->shift;
550 return -1;
551}
552
1da177e4 553/**
1da7b0d0
TH
554 * ata_mode_string - convert xfer_mask to string
555 * @xfer_mask: mask of bits supported; only highest bit counts.
1da177e4
LT
556 *
557 * Determine string which represents the highest speed
1da7b0d0 558 * (highest bit in @modemask).
1da177e4
LT
559 *
560 * LOCKING:
561 * None.
562 *
563 * RETURNS:
564 * Constant C string representing highest speed listed in
1da7b0d0 565 * @mode_mask, or the constant C string "<n/a>".
1da177e4 566 */
1da7b0d0 567static const char *ata_mode_string(unsigned int xfer_mask)
1da177e4 568{
75f554bc
TH
569 static const char * const xfer_mode_str[] = {
570 "PIO0",
571 "PIO1",
572 "PIO2",
573 "PIO3",
574 "PIO4",
b352e57d
AC
575 "PIO5",
576 "PIO6",
75f554bc
TH
577 "MWDMA0",
578 "MWDMA1",
579 "MWDMA2",
b352e57d
AC
580 "MWDMA3",
581 "MWDMA4",
75f554bc
TH
582 "UDMA/16",
583 "UDMA/25",
584 "UDMA/33",
585 "UDMA/44",
586 "UDMA/66",
587 "UDMA/100",
588 "UDMA/133",
589 "UDMA7",
590 };
1da7b0d0 591 int highbit;
1da177e4 592
1da7b0d0
TH
593 highbit = fls(xfer_mask) - 1;
594 if (highbit >= 0 && highbit < ARRAY_SIZE(xfer_mode_str))
595 return xfer_mode_str[highbit];
1da177e4 596 return "<n/a>";
1da177e4
LT
597}
598
4c360c81
TH
599static const char *sata_spd_string(unsigned int spd)
600{
601 static const char * const spd_str[] = {
602 "1.5 Gbps",
603 "3.0 Gbps",
604 };
605
606 if (spd == 0 || (spd - 1) >= ARRAY_SIZE(spd_str))
607 return "<unknown>";
608 return spd_str[spd - 1];
609}
610
3373efd8 611void ata_dev_disable(struct ata_device *dev)
0b8efb0a 612{
09d7f9b0 613 if (ata_dev_enabled(dev)) {
9af5c9c9 614 if (ata_msg_drv(dev->link->ap))
09d7f9b0 615 ata_dev_printk(dev, KERN_WARNING, "disabled\n");
4ae72a1e
TH
616 ata_down_xfermask_limit(dev, ATA_DNXFER_FORCE_PIO0 |
617 ATA_DNXFER_QUIET);
0b8efb0a
TH
618 dev->class++;
619 }
620}
621
1da177e4 622/**
0d5ff566 623 * ata_devchk - PATA device presence detection
1da177e4
LT
624 * @ap: ATA channel to examine
625 * @device: Device to examine (starting at zero)
626 *
627 * This technique was originally described in
628 * Hale Landis's ATADRVR (www.ata-atapi.com), and
629 * later found its way into the ATA/ATAPI spec.
630 *
631 * Write a pattern to the ATA shadow registers,
632 * and if a device is present, it will respond by
633 * correctly storing and echoing back the
634 * ATA shadow register contents.
635 *
636 * LOCKING:
637 * caller.
638 */
639
0d5ff566 640static unsigned int ata_devchk(struct ata_port *ap, unsigned int device)
1da177e4
LT
641{
642 struct ata_ioports *ioaddr = &ap->ioaddr;
643 u8 nsect, lbal;
644
645 ap->ops->dev_select(ap, device);
646
0d5ff566
TH
647 iowrite8(0x55, ioaddr->nsect_addr);
648 iowrite8(0xaa, ioaddr->lbal_addr);
1da177e4 649
0d5ff566
TH
650 iowrite8(0xaa, ioaddr->nsect_addr);
651 iowrite8(0x55, ioaddr->lbal_addr);
1da177e4 652
0d5ff566
TH
653 iowrite8(0x55, ioaddr->nsect_addr);
654 iowrite8(0xaa, ioaddr->lbal_addr);
1da177e4 655
0d5ff566
TH
656 nsect = ioread8(ioaddr->nsect_addr);
657 lbal = ioread8(ioaddr->lbal_addr);
1da177e4
LT
658
659 if ((nsect == 0x55) && (lbal == 0xaa))
660 return 1; /* we found a device */
661
662 return 0; /* nothing found */
663}
664
1da177e4
LT
665/**
666 * ata_dev_classify - determine device type based on ATA-spec signature
667 * @tf: ATA taskfile register set for device to be identified
668 *
669 * Determine from taskfile register contents whether a device is
670 * ATA or ATAPI, as per "Signature and persistence" section
671 * of ATA/PI spec (volume 1, sect 5.14).
672 *
673 * LOCKING:
674 * None.
675 *
676 * RETURNS:
633273a3
TH
677 * Device type, %ATA_DEV_ATA, %ATA_DEV_ATAPI, %ATA_DEV_PMP or
678 * %ATA_DEV_UNKNOWN the event of failure.
1da177e4 679 */
057ace5e 680unsigned int ata_dev_classify(const struct ata_taskfile *tf)
1da177e4
LT
681{
682 /* Apple's open source Darwin code hints that some devices only
683 * put a proper signature into the LBA mid/high registers,
684 * So, we only check those. It's sufficient for uniqueness.
633273a3
TH
685 *
686 * ATA/ATAPI-7 (d1532v1r1: Feb. 19, 2003) specified separate
687 * signatures for ATA and ATAPI devices attached on SerialATA,
688 * 0x3c/0xc3 and 0x69/0x96 respectively. However, SerialATA
689 * spec has never mentioned about using different signatures
690 * for ATA/ATAPI devices. Then, Serial ATA II: Port
691 * Multiplier specification began to use 0x69/0x96 to identify
692 * port multpliers and 0x3c/0xc3 to identify SEMB device.
693 * ATA/ATAPI-7 dropped descriptions about 0x3c/0xc3 and
694 * 0x69/0x96 shortly and described them as reserved for
695 * SerialATA.
696 *
697 * We follow the current spec and consider that 0x69/0x96
698 * identifies a port multiplier and 0x3c/0xc3 a SEMB device.
1da177e4 699 */
633273a3 700 if ((tf->lbam == 0) && (tf->lbah == 0)) {
1da177e4
LT
701 DPRINTK("found ATA device by sig\n");
702 return ATA_DEV_ATA;
703 }
704
633273a3 705 if ((tf->lbam == 0x14) && (tf->lbah == 0xeb)) {
1da177e4
LT
706 DPRINTK("found ATAPI device by sig\n");
707 return ATA_DEV_ATAPI;
708 }
709
633273a3
TH
710 if ((tf->lbam == 0x69) && (tf->lbah == 0x96)) {
711 DPRINTK("found PMP device by sig\n");
712 return ATA_DEV_PMP;
713 }
714
715 if ((tf->lbam == 0x3c) && (tf->lbah == 0xc3)) {
716 printk("ata: SEMB device ignored\n");
717 return ATA_DEV_SEMB_UNSUP; /* not yet */
718 }
719
1da177e4
LT
720 DPRINTK("unknown device\n");
721 return ATA_DEV_UNKNOWN;
722}
723
724/**
725 * ata_dev_try_classify - Parse returned ATA device signature
3f19859e
TH
726 * @dev: ATA device to classify (starting at zero)
727 * @present: device seems present
b4dc7623 728 * @r_err: Value of error register on completion
1da177e4
LT
729 *
730 * After an event -- SRST, E.D.D., or SATA COMRESET -- occurs,
731 * an ATA/ATAPI-defined set of values is placed in the ATA
732 * shadow registers, indicating the results of device detection
733 * and diagnostics.
734 *
735 * Select the ATA device, and read the values from the ATA shadow
736 * registers. Then parse according to the Error register value,
737 * and the spec-defined values examined by ata_dev_classify().
738 *
739 * LOCKING:
740 * caller.
b4dc7623
TH
741 *
742 * RETURNS:
743 * Device type - %ATA_DEV_ATA, %ATA_DEV_ATAPI or %ATA_DEV_NONE.
1da177e4 744 */
3f19859e
TH
745unsigned int ata_dev_try_classify(struct ata_device *dev, int present,
746 u8 *r_err)
1da177e4 747{
3f19859e 748 struct ata_port *ap = dev->link->ap;
1da177e4
LT
749 struct ata_taskfile tf;
750 unsigned int class;
751 u8 err;
752
3f19859e 753 ap->ops->dev_select(ap, dev->devno);
1da177e4
LT
754
755 memset(&tf, 0, sizeof(tf));
756
1da177e4 757 ap->ops->tf_read(ap, &tf);
0169e284 758 err = tf.feature;
b4dc7623
TH
759 if (r_err)
760 *r_err = err;
1da177e4 761
93590859 762 /* see if device passed diags: if master then continue and warn later */
3f19859e 763 if (err == 0 && dev->devno == 0)
93590859 764 /* diagnostic fail : do nothing _YET_ */
3f19859e 765 dev->horkage |= ATA_HORKAGE_DIAGNOSTIC;
93590859 766 else if (err == 1)
1da177e4 767 /* do nothing */ ;
3f19859e 768 else if ((dev->devno == 0) && (err == 0x81))
1da177e4
LT
769 /* do nothing */ ;
770 else
b4dc7623 771 return ATA_DEV_NONE;
1da177e4 772
b4dc7623 773 /* determine if device is ATA or ATAPI */
1da177e4 774 class = ata_dev_classify(&tf);
b4dc7623 775
d7fbee05
TH
776 if (class == ATA_DEV_UNKNOWN) {
777 /* If the device failed diagnostic, it's likely to
778 * have reported incorrect device signature too.
779 * Assume ATA device if the device seems present but
780 * device signature is invalid with diagnostic
781 * failure.
782 */
783 if (present && (dev->horkage & ATA_HORKAGE_DIAGNOSTIC))
784 class = ATA_DEV_ATA;
785 else
786 class = ATA_DEV_NONE;
787 } else if ((class == ATA_DEV_ATA) && (ata_chk_status(ap) == 0))
788 class = ATA_DEV_NONE;
789
b4dc7623 790 return class;
1da177e4
LT
791}
792
793/**
6a62a04d 794 * ata_id_string - Convert IDENTIFY DEVICE page into string
1da177e4
LT
795 * @id: IDENTIFY DEVICE results we will examine
796 * @s: string into which data is output
797 * @ofs: offset into identify device page
798 * @len: length of string to return. must be an even number.
799 *
800 * The strings in the IDENTIFY DEVICE page are broken up into
801 * 16-bit chunks. Run through the string, and output each
802 * 8-bit chunk linearly, regardless of platform.
803 *
804 * LOCKING:
805 * caller.
806 */
807
6a62a04d
TH
808void ata_id_string(const u16 *id, unsigned char *s,
809 unsigned int ofs, unsigned int len)
1da177e4
LT
810{
811 unsigned int c;
812
813 while (len > 0) {
814 c = id[ofs] >> 8;
815 *s = c;
816 s++;
817
818 c = id[ofs] & 0xff;
819 *s = c;
820 s++;
821
822 ofs++;
823 len -= 2;
824 }
825}
826
0e949ff3 827/**
6a62a04d 828 * ata_id_c_string - Convert IDENTIFY DEVICE page into C string
0e949ff3
TH
829 * @id: IDENTIFY DEVICE results we will examine
830 * @s: string into which data is output
831 * @ofs: offset into identify device page
832 * @len: length of string to return. must be an odd number.
833 *
6a62a04d 834 * This function is identical to ata_id_string except that it
0e949ff3
TH
835 * trims trailing spaces and terminates the resulting string with
836 * null. @len must be actual maximum length (even number) + 1.
837 *
838 * LOCKING:
839 * caller.
840 */
6a62a04d
TH
841void ata_id_c_string(const u16 *id, unsigned char *s,
842 unsigned int ofs, unsigned int len)
0e949ff3
TH
843{
844 unsigned char *p;
845
846 WARN_ON(!(len & 1));
847
6a62a04d 848 ata_id_string(id, s, ofs, len - 1);
0e949ff3
TH
849
850 p = s + strnlen(s, len - 1);
851 while (p > s && p[-1] == ' ')
852 p--;
853 *p = '\0';
854}
0baab86b 855
db6f8759
TH
856static u64 ata_id_n_sectors(const u16 *id)
857{
858 if (ata_id_has_lba(id)) {
859 if (ata_id_has_lba48(id))
860 return ata_id_u64(id, 100);
861 else
862 return ata_id_u32(id, 60);
863 } else {
864 if (ata_id_current_chs_valid(id))
865 return ata_id_u32(id, 57);
866 else
867 return id[1] * id[3] * id[6];
868 }
869}
870
1e999736
AC
871static u64 ata_tf_to_lba48(struct ata_taskfile *tf)
872{
873 u64 sectors = 0;
874
875 sectors |= ((u64)(tf->hob_lbah & 0xff)) << 40;
876 sectors |= ((u64)(tf->hob_lbam & 0xff)) << 32;
877 sectors |= (tf->hob_lbal & 0xff) << 24;
878 sectors |= (tf->lbah & 0xff) << 16;
879 sectors |= (tf->lbam & 0xff) << 8;
880 sectors |= (tf->lbal & 0xff);
881
882 return ++sectors;
883}
884
885static u64 ata_tf_to_lba(struct ata_taskfile *tf)
886{
887 u64 sectors = 0;
888
889 sectors |= (tf->device & 0x0f) << 24;
890 sectors |= (tf->lbah & 0xff) << 16;
891 sectors |= (tf->lbam & 0xff) << 8;
892 sectors |= (tf->lbal & 0xff);
893
894 return ++sectors;
895}
896
897/**
c728a914
TH
898 * ata_read_native_max_address - Read native max address
899 * @dev: target device
900 * @max_sectors: out parameter for the result native max address
1e999736 901 *
c728a914
TH
902 * Perform an LBA48 or LBA28 native size query upon the device in
903 * question.
1e999736 904 *
c728a914
TH
905 * RETURNS:
906 * 0 on success, -EACCES if command is aborted by the drive.
907 * -EIO on other errors.
1e999736 908 */
c728a914 909static int ata_read_native_max_address(struct ata_device *dev, u64 *max_sectors)
1e999736 910{
c728a914 911 unsigned int err_mask;
1e999736 912 struct ata_taskfile tf;
c728a914 913 int lba48 = ata_id_has_lba48(dev->id);
1e999736
AC
914
915 ata_tf_init(dev, &tf);
916
c728a914 917 /* always clear all address registers */
1e999736 918 tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
1e999736 919
c728a914
TH
920 if (lba48) {
921 tf.command = ATA_CMD_READ_NATIVE_MAX_EXT;
922 tf.flags |= ATA_TFLAG_LBA48;
923 } else
924 tf.command = ATA_CMD_READ_NATIVE_MAX;
1e999736 925
1e999736 926 tf.protocol |= ATA_PROT_NODATA;
c728a914
TH
927 tf.device |= ATA_LBA;
928
2b789108 929 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
c728a914
TH
930 if (err_mask) {
931 ata_dev_printk(dev, KERN_WARNING, "failed to read native "
932 "max address (err_mask=0x%x)\n", err_mask);
933 if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED))
934 return -EACCES;
935 return -EIO;
936 }
1e999736 937
c728a914
TH
938 if (lba48)
939 *max_sectors = ata_tf_to_lba48(&tf);
940 else
941 *max_sectors = ata_tf_to_lba(&tf);
93328e11
AC
942 if (dev->horkage & ATA_HORKAGE_HPA_SIZE)
943 (*max_sectors)--;
c728a914 944 return 0;
1e999736
AC
945}
946
947/**
c728a914
TH
948 * ata_set_max_sectors - Set max sectors
949 * @dev: target device
6b38d1d1 950 * @new_sectors: new max sectors value to set for the device
1e999736 951 *
c728a914
TH
952 * Set max sectors of @dev to @new_sectors.
953 *
954 * RETURNS:
955 * 0 on success, -EACCES if command is aborted or denied (due to
956 * previous non-volatile SET_MAX) by the drive. -EIO on other
957 * errors.
1e999736 958 */
05027adc 959static int ata_set_max_sectors(struct ata_device *dev, u64 new_sectors)
1e999736 960{
c728a914 961 unsigned int err_mask;
1e999736 962 struct ata_taskfile tf;
c728a914 963 int lba48 = ata_id_has_lba48(dev->id);
1e999736
AC
964
965 new_sectors--;
966
967 ata_tf_init(dev, &tf);
968
1e999736 969 tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
c728a914
TH
970
971 if (lba48) {
972 tf.command = ATA_CMD_SET_MAX_EXT;
973 tf.flags |= ATA_TFLAG_LBA48;
974
975 tf.hob_lbal = (new_sectors >> 24) & 0xff;
976 tf.hob_lbam = (new_sectors >> 32) & 0xff;
977 tf.hob_lbah = (new_sectors >> 40) & 0xff;
1e582ba4 978 } else {
c728a914
TH
979 tf.command = ATA_CMD_SET_MAX;
980
1e582ba4
TH
981 tf.device |= (new_sectors >> 24) & 0xf;
982 }
983
1e999736 984 tf.protocol |= ATA_PROT_NODATA;
c728a914 985 tf.device |= ATA_LBA;
1e999736
AC
986
987 tf.lbal = (new_sectors >> 0) & 0xff;
988 tf.lbam = (new_sectors >> 8) & 0xff;
989 tf.lbah = (new_sectors >> 16) & 0xff;
1e999736 990
2b789108 991 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
c728a914
TH
992 if (err_mask) {
993 ata_dev_printk(dev, KERN_WARNING, "failed to set "
994 "max address (err_mask=0x%x)\n", err_mask);
995 if (err_mask == AC_ERR_DEV &&
996 (tf.feature & (ATA_ABORTED | ATA_IDNF)))
997 return -EACCES;
998 return -EIO;
999 }
1000
c728a914 1001 return 0;
1e999736
AC
1002}
1003
1004/**
1005 * ata_hpa_resize - Resize a device with an HPA set
1006 * @dev: Device to resize
1007 *
1008 * Read the size of an LBA28 or LBA48 disk with HPA features and resize
1009 * it if required to the full size of the media. The caller must check
1010 * the drive has the HPA feature set enabled.
05027adc
TH
1011 *
1012 * RETURNS:
1013 * 0 on success, -errno on failure.
1e999736 1014 */
05027adc 1015static int ata_hpa_resize(struct ata_device *dev)
1e999736 1016{
05027adc
TH
1017 struct ata_eh_context *ehc = &dev->link->eh_context;
1018 int print_info = ehc->i.flags & ATA_EHI_PRINTINFO;
1019 u64 sectors = ata_id_n_sectors(dev->id);
1020 u64 native_sectors;
c728a914 1021 int rc;
a617c09f 1022
05027adc
TH
1023 /* do we need to do it? */
1024 if (dev->class != ATA_DEV_ATA ||
1025 !ata_id_has_lba(dev->id) || !ata_id_hpa_enabled(dev->id) ||
1026 (dev->horkage & ATA_HORKAGE_BROKEN_HPA))
c728a914 1027 return 0;
1e999736 1028
05027adc
TH
1029 /* read native max address */
1030 rc = ata_read_native_max_address(dev, &native_sectors);
1031 if (rc) {
1032 /* If HPA isn't going to be unlocked, skip HPA
1033 * resizing from the next try.
1034 */
1035 if (!ata_ignore_hpa) {
1036 ata_dev_printk(dev, KERN_WARNING, "HPA support seems "
1037 "broken, will skip HPA handling\n");
1038 dev->horkage |= ATA_HORKAGE_BROKEN_HPA;
1039
1040 /* we can continue if device aborted the command */
1041 if (rc == -EACCES)
1042 rc = 0;
1e999736 1043 }
37301a55 1044
05027adc
TH
1045 return rc;
1046 }
1047
1048 /* nothing to do? */
1049 if (native_sectors <= sectors || !ata_ignore_hpa) {
1050 if (!print_info || native_sectors == sectors)
1051 return 0;
1052
1053 if (native_sectors > sectors)
1054 ata_dev_printk(dev, KERN_INFO,
1055 "HPA detected: current %llu, native %llu\n",
1056 (unsigned long long)sectors,
1057 (unsigned long long)native_sectors);
1058 else if (native_sectors < sectors)
1059 ata_dev_printk(dev, KERN_WARNING,
1060 "native sectors (%llu) is smaller than "
1061 "sectors (%llu)\n",
1062 (unsigned long long)native_sectors,
1063 (unsigned long long)sectors);
1064 return 0;
1065 }
1066
1067 /* let's unlock HPA */
1068 rc = ata_set_max_sectors(dev, native_sectors);
1069 if (rc == -EACCES) {
1070 /* if device aborted the command, skip HPA resizing */
1071 ata_dev_printk(dev, KERN_WARNING, "device aborted resize "
1072 "(%llu -> %llu), skipping HPA handling\n",
1073 (unsigned long long)sectors,
1074 (unsigned long long)native_sectors);
1075 dev->horkage |= ATA_HORKAGE_BROKEN_HPA;
1076 return 0;
1077 } else if (rc)
1078 return rc;
1079
1080 /* re-read IDENTIFY data */
1081 rc = ata_dev_reread_id(dev, 0);
1082 if (rc) {
1083 ata_dev_printk(dev, KERN_ERR, "failed to re-read IDENTIFY "
1084 "data after HPA resizing\n");
1085 return rc;
1086 }
1087
1088 if (print_info) {
1089 u64 new_sectors = ata_id_n_sectors(dev->id);
1090 ata_dev_printk(dev, KERN_INFO,
1091 "HPA unlocked: %llu -> %llu, native %llu\n",
1092 (unsigned long long)sectors,
1093 (unsigned long long)new_sectors,
1094 (unsigned long long)native_sectors);
1095 }
1096
1097 return 0;
1e999736
AC
1098}
1099
10305f0f
A
1100/**
1101 * ata_id_to_dma_mode - Identify DMA mode from id block
1102 * @dev: device to identify
cc261267 1103 * @unknown: mode to assume if we cannot tell
10305f0f
A
1104 *
1105 * Set up the timing values for the device based upon the identify
1106 * reported values for the DMA mode. This function is used by drivers
1107 * which rely upon firmware configured modes, but wish to report the
1108 * mode correctly when possible.
1109 *
1110 * In addition we emit similarly formatted messages to the default
1111 * ata_dev_set_mode handler, in order to provide consistency of
1112 * presentation.
1113 */
1114
1115void ata_id_to_dma_mode(struct ata_device *dev, u8 unknown)
1116{
1117 unsigned int mask;
1118 u8 mode;
1119
1120 /* Pack the DMA modes */
1121 mask = ((dev->id[63] >> 8) << ATA_SHIFT_MWDMA) & ATA_MASK_MWDMA;
1122 if (dev->id[53] & 0x04)
1123 mask |= ((dev->id[88] >> 8) << ATA_SHIFT_UDMA) & ATA_MASK_UDMA;
1124
1125 /* Select the mode in use */
1126 mode = ata_xfer_mask2mode(mask);
1127
1128 if (mode != 0) {
1129 ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
1130 ata_mode_string(mask));
1131 } else {
1132 /* SWDMA perhaps ? */
1133 mode = unknown;
1134 ata_dev_printk(dev, KERN_INFO, "configured for DMA\n");
1135 }
1136
1137 /* Configure the device reporting */
1138 dev->xfer_mode = mode;
1139 dev->xfer_shift = ata_xfer_mode2shift(mode);
1140}
1141
0baab86b
EF
1142/**
1143 * ata_noop_dev_select - Select device 0/1 on ATA bus
1144 * @ap: ATA channel to manipulate
1145 * @device: ATA device (numbered from zero) to select
1146 *
1147 * This function performs no actual function.
1148 *
1149 * May be used as the dev_select() entry in ata_port_operations.
1150 *
1151 * LOCKING:
1152 * caller.
1153 */
1da177e4
LT
1154void ata_noop_dev_select (struct ata_port *ap, unsigned int device)
1155{
1156}
1157
0baab86b 1158
1da177e4
LT
1159/**
1160 * ata_std_dev_select - Select device 0/1 on ATA bus
1161 * @ap: ATA channel to manipulate
1162 * @device: ATA device (numbered from zero) to select
1163 *
1164 * Use the method defined in the ATA specification to
1165 * make either device 0, or device 1, active on the
0baab86b
EF
1166 * ATA channel. Works with both PIO and MMIO.
1167 *
1168 * May be used as the dev_select() entry in ata_port_operations.
1da177e4
LT
1169 *
1170 * LOCKING:
1171 * caller.
1172 */
1173
1174void ata_std_dev_select (struct ata_port *ap, unsigned int device)
1175{
1176 u8 tmp;
1177
1178 if (device == 0)
1179 tmp = ATA_DEVICE_OBS;
1180 else
1181 tmp = ATA_DEVICE_OBS | ATA_DEV1;
1182
0d5ff566 1183 iowrite8(tmp, ap->ioaddr.device_addr);
1da177e4
LT
1184 ata_pause(ap); /* needed; also flushes, for mmio */
1185}
1186
1187/**
1188 * ata_dev_select - Select device 0/1 on ATA bus
1189 * @ap: ATA channel to manipulate
1190 * @device: ATA device (numbered from zero) to select
1191 * @wait: non-zero to wait for Status register BSY bit to clear
1192 * @can_sleep: non-zero if context allows sleeping
1193 *
1194 * Use the method defined in the ATA specification to
1195 * make either device 0, or device 1, active on the
1196 * ATA channel.
1197 *
1198 * This is a high-level version of ata_std_dev_select(),
1199 * which additionally provides the services of inserting
1200 * the proper pauses and status polling, where needed.
1201 *
1202 * LOCKING:
1203 * caller.
1204 */
1205
1206void ata_dev_select(struct ata_port *ap, unsigned int device,
1207 unsigned int wait, unsigned int can_sleep)
1208{
88574551 1209 if (ata_msg_probe(ap))
44877b4e
TH
1210 ata_port_printk(ap, KERN_INFO, "ata_dev_select: ENTER, "
1211 "device %u, wait %u\n", device, wait);
1da177e4
LT
1212
1213 if (wait)
1214 ata_wait_idle(ap);
1215
1216 ap->ops->dev_select(ap, device);
1217
1218 if (wait) {
9af5c9c9 1219 if (can_sleep && ap->link.device[device].class == ATA_DEV_ATAPI)
1da177e4
LT
1220 msleep(150);
1221 ata_wait_idle(ap);
1222 }
1223}
1224
1225/**
1226 * ata_dump_id - IDENTIFY DEVICE info debugging output
0bd3300a 1227 * @id: IDENTIFY DEVICE page to dump
1da177e4 1228 *
0bd3300a
TH
1229 * Dump selected 16-bit words from the given IDENTIFY DEVICE
1230 * page.
1da177e4
LT
1231 *
1232 * LOCKING:
1233 * caller.
1234 */
1235
0bd3300a 1236static inline void ata_dump_id(const u16 *id)
1da177e4
LT
1237{
1238 DPRINTK("49==0x%04x "
1239 "53==0x%04x "
1240 "63==0x%04x "
1241 "64==0x%04x "
1242 "75==0x%04x \n",
0bd3300a
TH
1243 id[49],
1244 id[53],
1245 id[63],
1246 id[64],
1247 id[75]);
1da177e4
LT
1248 DPRINTK("80==0x%04x "
1249 "81==0x%04x "
1250 "82==0x%04x "
1251 "83==0x%04x "
1252 "84==0x%04x \n",
0bd3300a
TH
1253 id[80],
1254 id[81],
1255 id[82],
1256 id[83],
1257 id[84]);
1da177e4
LT
1258 DPRINTK("88==0x%04x "
1259 "93==0x%04x\n",
0bd3300a
TH
1260 id[88],
1261 id[93]);
1da177e4
LT
1262}
1263
cb95d562
TH
1264/**
1265 * ata_id_xfermask - Compute xfermask from the given IDENTIFY data
1266 * @id: IDENTIFY data to compute xfer mask from
1267 *
1268 * Compute the xfermask for this device. This is not as trivial
1269 * as it seems if we must consider early devices correctly.
1270 *
1271 * FIXME: pre IDE drive timing (do we care ?).
1272 *
1273 * LOCKING:
1274 * None.
1275 *
1276 * RETURNS:
1277 * Computed xfermask
1278 */
1279static unsigned int ata_id_xfermask(const u16 *id)
1280{
1281 unsigned int pio_mask, mwdma_mask, udma_mask;
1282
1283 /* Usual case. Word 53 indicates word 64 is valid */
1284 if (id[ATA_ID_FIELD_VALID] & (1 << 1)) {
1285 pio_mask = id[ATA_ID_PIO_MODES] & 0x03;
1286 pio_mask <<= 3;
1287 pio_mask |= 0x7;
1288 } else {
1289 /* If word 64 isn't valid then Word 51 high byte holds
1290 * the PIO timing number for the maximum. Turn it into
1291 * a mask.
1292 */
7a0f1c8a 1293 u8 mode = (id[ATA_ID_OLD_PIO_MODES] >> 8) & 0xFF;
46767aeb
AC
1294 if (mode < 5) /* Valid PIO range */
1295 pio_mask = (2 << mode) - 1;
1296 else
1297 pio_mask = 1;
cb95d562
TH
1298
1299 /* But wait.. there's more. Design your standards by
1300 * committee and you too can get a free iordy field to
1301 * process. However its the speeds not the modes that
1302 * are supported... Note drivers using the timing API
1303 * will get this right anyway
1304 */
1305 }
1306
1307 mwdma_mask = id[ATA_ID_MWDMA_MODES] & 0x07;
fb21f0d0 1308
b352e57d
AC
1309 if (ata_id_is_cfa(id)) {
1310 /*
1311 * Process compact flash extended modes
1312 */
1313 int pio = id[163] & 0x7;
1314 int dma = (id[163] >> 3) & 7;
1315
1316 if (pio)
1317 pio_mask |= (1 << 5);
1318 if (pio > 1)
1319 pio_mask |= (1 << 6);
1320 if (dma)
1321 mwdma_mask |= (1 << 3);
1322 if (dma > 1)
1323 mwdma_mask |= (1 << 4);
1324 }
1325
fb21f0d0
TH
1326 udma_mask = 0;
1327 if (id[ATA_ID_FIELD_VALID] & (1 << 2))
1328 udma_mask = id[ATA_ID_UDMA_MODES] & 0xff;
cb95d562
TH
1329
1330 return ata_pack_xfermask(pio_mask, mwdma_mask, udma_mask);
1331}
1332
86e45b6b
TH
1333/**
1334 * ata_port_queue_task - Queue port_task
1335 * @ap: The ata_port to queue port_task for
e2a7f77a 1336 * @fn: workqueue function to be scheduled
65f27f38 1337 * @data: data for @fn to use
e2a7f77a 1338 * @delay: delay time for workqueue function
86e45b6b
TH
1339 *
1340 * Schedule @fn(@data) for execution after @delay jiffies using
1341 * port_task. There is one port_task per port and it's the
1342 * user(low level driver)'s responsibility to make sure that only
1343 * one task is active at any given time.
1344 *
1345 * libata core layer takes care of synchronization between
1346 * port_task and EH. ata_port_queue_task() may be ignored for EH
1347 * synchronization.
1348 *
1349 * LOCKING:
1350 * Inherited from caller.
1351 */
65f27f38 1352void ata_port_queue_task(struct ata_port *ap, work_func_t fn, void *data,
86e45b6b
TH
1353 unsigned long delay)
1354{
65f27f38
DH
1355 PREPARE_DELAYED_WORK(&ap->port_task, fn);
1356 ap->port_task_data = data;
86e45b6b 1357
45a66c1c
ON
1358 /* may fail if ata_port_flush_task() in progress */
1359 queue_delayed_work(ata_wq, &ap->port_task, delay);
86e45b6b
TH
1360}
1361
1362/**
1363 * ata_port_flush_task - Flush port_task
1364 * @ap: The ata_port to flush port_task for
1365 *
1366 * After this function completes, port_task is guranteed not to
1367 * be running or scheduled.
1368 *
1369 * LOCKING:
1370 * Kernel thread context (may sleep)
1371 */
1372void ata_port_flush_task(struct ata_port *ap)
1373{
86e45b6b
TH
1374 DPRINTK("ENTER\n");
1375
45a66c1c 1376 cancel_rearming_delayed_work(&ap->port_task);
86e45b6b 1377
0dd4b21f
BP
1378 if (ata_msg_ctl(ap))
1379 ata_port_printk(ap, KERN_DEBUG, "%s: EXIT\n", __FUNCTION__);
86e45b6b
TH
1380}
1381
7102d230 1382static void ata_qc_complete_internal(struct ata_queued_cmd *qc)
a2a7a662 1383{
77853bf2 1384 struct completion *waiting = qc->private_data;
a2a7a662 1385
a2a7a662 1386 complete(waiting);
a2a7a662
TH
1387}
1388
1389/**
2432697b 1390 * ata_exec_internal_sg - execute libata internal command
a2a7a662
TH
1391 * @dev: Device to which the command is sent
1392 * @tf: Taskfile registers for the command and the result
d69cf37d 1393 * @cdb: CDB for packet command
a2a7a662 1394 * @dma_dir: Data tranfer direction of the command
2432697b
TH
1395 * @sg: sg list for the data buffer of the command
1396 * @n_elem: Number of sg entries
2b789108 1397 * @timeout: Timeout in msecs (0 for default)
a2a7a662
TH
1398 *
1399 * Executes libata internal command with timeout. @tf contains
1400 * command on entry and result on return. Timeout and error
1401 * conditions are reported via return value. No recovery action
1402 * is taken after a command times out. It's caller's duty to
1403 * clean up after timeout.
1404 *
1405 * LOCKING:
1406 * None. Should be called with kernel context, might sleep.
551e8889
TH
1407 *
1408 * RETURNS:
1409 * Zero on success, AC_ERR_* mask on failure
a2a7a662 1410 */
2432697b
TH
1411unsigned ata_exec_internal_sg(struct ata_device *dev,
1412 struct ata_taskfile *tf, const u8 *cdb,
1413 int dma_dir, struct scatterlist *sg,
2b789108 1414 unsigned int n_elem, unsigned long timeout)
a2a7a662 1415{
9af5c9c9
TH
1416 struct ata_link *link = dev->link;
1417 struct ata_port *ap = link->ap;
a2a7a662
TH
1418 u8 command = tf->command;
1419 struct ata_queued_cmd *qc;
2ab7db1f 1420 unsigned int tag, preempted_tag;
dedaf2b0 1421 u32 preempted_sactive, preempted_qc_active;
da917d69 1422 int preempted_nr_active_links;
60be6b9a 1423 DECLARE_COMPLETION_ONSTACK(wait);
a2a7a662 1424 unsigned long flags;
77853bf2 1425 unsigned int err_mask;
d95a717f 1426 int rc;
a2a7a662 1427
ba6a1308 1428 spin_lock_irqsave(ap->lock, flags);
a2a7a662 1429
e3180499 1430 /* no internal command while frozen */
b51e9e5d 1431 if (ap->pflags & ATA_PFLAG_FROZEN) {
ba6a1308 1432 spin_unlock_irqrestore(ap->lock, flags);
e3180499
TH
1433 return AC_ERR_SYSTEM;
1434 }
1435
2ab7db1f 1436 /* initialize internal qc */
a2a7a662 1437
2ab7db1f
TH
1438 /* XXX: Tag 0 is used for drivers with legacy EH as some
1439 * drivers choke if any other tag is given. This breaks
1440 * ata_tag_internal() test for those drivers. Don't use new
1441 * EH stuff without converting to it.
1442 */
1443 if (ap->ops->error_handler)
1444 tag = ATA_TAG_INTERNAL;
1445 else
1446 tag = 0;
1447
6cec4a39 1448 if (test_and_set_bit(tag, &ap->qc_allocated))
2ab7db1f 1449 BUG();
f69499f4 1450 qc = __ata_qc_from_tag(ap, tag);
2ab7db1f
TH
1451
1452 qc->tag = tag;
1453 qc->scsicmd = NULL;
1454 qc->ap = ap;
1455 qc->dev = dev;
1456 ata_qc_reinit(qc);
1457
9af5c9c9
TH
1458 preempted_tag = link->active_tag;
1459 preempted_sactive = link->sactive;
dedaf2b0 1460 preempted_qc_active = ap->qc_active;
da917d69 1461 preempted_nr_active_links = ap->nr_active_links;
9af5c9c9
TH
1462 link->active_tag = ATA_TAG_POISON;
1463 link->sactive = 0;
dedaf2b0 1464 ap->qc_active = 0;
da917d69 1465 ap->nr_active_links = 0;
2ab7db1f
TH
1466
1467 /* prepare & issue qc */
a2a7a662 1468 qc->tf = *tf;
d69cf37d
TH
1469 if (cdb)
1470 memcpy(qc->cdb, cdb, ATAPI_CDB_LEN);
e61e0672 1471 qc->flags |= ATA_QCFLAG_RESULT_TF;
a2a7a662
TH
1472 qc->dma_dir = dma_dir;
1473 if (dma_dir != DMA_NONE) {
2432697b
TH
1474 unsigned int i, buflen = 0;
1475
1476 for (i = 0; i < n_elem; i++)
1477 buflen += sg[i].length;
1478
1479 ata_sg_init(qc, sg, n_elem);
49c80429 1480 qc->nbytes = buflen;
a2a7a662
TH
1481 }
1482
77853bf2 1483 qc->private_data = &wait;
a2a7a662
TH
1484 qc->complete_fn = ata_qc_complete_internal;
1485
8e0e694a 1486 ata_qc_issue(qc);
a2a7a662 1487
ba6a1308 1488 spin_unlock_irqrestore(ap->lock, flags);
a2a7a662 1489
2b789108
TH
1490 if (!timeout)
1491 timeout = ata_probe_timeout * 1000 / HZ;
1492
1493 rc = wait_for_completion_timeout(&wait, msecs_to_jiffies(timeout));
d95a717f
TH
1494
1495 ata_port_flush_task(ap);
41ade50c 1496
d95a717f 1497 if (!rc) {
ba6a1308 1498 spin_lock_irqsave(ap->lock, flags);
a2a7a662
TH
1499
1500 /* We're racing with irq here. If we lose, the
1501 * following test prevents us from completing the qc
d95a717f
TH
1502 * twice. If we win, the port is frozen and will be
1503 * cleaned up by ->post_internal_cmd().
a2a7a662 1504 */
77853bf2 1505 if (qc->flags & ATA_QCFLAG_ACTIVE) {
d95a717f
TH
1506 qc->err_mask |= AC_ERR_TIMEOUT;
1507
1508 if (ap->ops->error_handler)
1509 ata_port_freeze(ap);
1510 else
1511 ata_qc_complete(qc);
f15a1daf 1512
0dd4b21f
BP
1513 if (ata_msg_warn(ap))
1514 ata_dev_printk(dev, KERN_WARNING,
88574551 1515 "qc timeout (cmd 0x%x)\n", command);
a2a7a662
TH
1516 }
1517
ba6a1308 1518 spin_unlock_irqrestore(ap->lock, flags);
a2a7a662
TH
1519 }
1520
d95a717f
TH
1521 /* do post_internal_cmd */
1522 if (ap->ops->post_internal_cmd)
1523 ap->ops->post_internal_cmd(qc);
1524
a51d644a
TH
1525 /* perform minimal error analysis */
1526 if (qc->flags & ATA_QCFLAG_FAILED) {
1527 if (qc->result_tf.command & (ATA_ERR | ATA_DF))
1528 qc->err_mask |= AC_ERR_DEV;
1529
1530 if (!qc->err_mask)
1531 qc->err_mask |= AC_ERR_OTHER;
1532
1533 if (qc->err_mask & ~AC_ERR_OTHER)
1534 qc->err_mask &= ~AC_ERR_OTHER;
d95a717f
TH
1535 }
1536
15869303 1537 /* finish up */
ba6a1308 1538 spin_lock_irqsave(ap->lock, flags);
15869303 1539
e61e0672 1540 *tf = qc->result_tf;
77853bf2
TH
1541 err_mask = qc->err_mask;
1542
1543 ata_qc_free(qc);
9af5c9c9
TH
1544 link->active_tag = preempted_tag;
1545 link->sactive = preempted_sactive;
dedaf2b0 1546 ap->qc_active = preempted_qc_active;
da917d69 1547 ap->nr_active_links = preempted_nr_active_links;
77853bf2 1548
1f7dd3e9
TH
1549 /* XXX - Some LLDDs (sata_mv) disable port on command failure.
1550 * Until those drivers are fixed, we detect the condition
1551 * here, fail the command with AC_ERR_SYSTEM and reenable the
1552 * port.
1553 *
1554 * Note that this doesn't change any behavior as internal
1555 * command failure results in disabling the device in the
1556 * higher layer for LLDDs without new reset/EH callbacks.
1557 *
1558 * Kill the following code as soon as those drivers are fixed.
1559 */
198e0fed 1560 if (ap->flags & ATA_FLAG_DISABLED) {
1f7dd3e9
TH
1561 err_mask |= AC_ERR_SYSTEM;
1562 ata_port_probe(ap);
1563 }
1564
ba6a1308 1565 spin_unlock_irqrestore(ap->lock, flags);
15869303 1566
77853bf2 1567 return err_mask;
a2a7a662
TH
1568}
1569
2432697b 1570/**
33480a0e 1571 * ata_exec_internal - execute libata internal command
2432697b
TH
1572 * @dev: Device to which the command is sent
1573 * @tf: Taskfile registers for the command and the result
1574 * @cdb: CDB for packet command
1575 * @dma_dir: Data tranfer direction of the command
1576 * @buf: Data buffer of the command
1577 * @buflen: Length of data buffer
2b789108 1578 * @timeout: Timeout in msecs (0 for default)
2432697b
TH
1579 *
1580 * Wrapper around ata_exec_internal_sg() which takes simple
1581 * buffer instead of sg list.
1582 *
1583 * LOCKING:
1584 * None. Should be called with kernel context, might sleep.
1585 *
1586 * RETURNS:
1587 * Zero on success, AC_ERR_* mask on failure
1588 */
1589unsigned ata_exec_internal(struct ata_device *dev,
1590 struct ata_taskfile *tf, const u8 *cdb,
2b789108
TH
1591 int dma_dir, void *buf, unsigned int buflen,
1592 unsigned long timeout)
2432697b 1593{
33480a0e
TH
1594 struct scatterlist *psg = NULL, sg;
1595 unsigned int n_elem = 0;
2432697b 1596
33480a0e
TH
1597 if (dma_dir != DMA_NONE) {
1598 WARN_ON(!buf);
1599 sg_init_one(&sg, buf, buflen);
1600 psg = &sg;
1601 n_elem++;
1602 }
2432697b 1603
2b789108
TH
1604 return ata_exec_internal_sg(dev, tf, cdb, dma_dir, psg, n_elem,
1605 timeout);
2432697b
TH
1606}
1607
977e6b9f
TH
1608/**
1609 * ata_do_simple_cmd - execute simple internal command
1610 * @dev: Device to which the command is sent
1611 * @cmd: Opcode to execute
1612 *
1613 * Execute a 'simple' command, that only consists of the opcode
1614 * 'cmd' itself, without filling any other registers
1615 *
1616 * LOCKING:
1617 * Kernel thread context (may sleep).
1618 *
1619 * RETURNS:
1620 * Zero on success, AC_ERR_* mask on failure
e58eb583 1621 */
77b08fb5 1622unsigned int ata_do_simple_cmd(struct ata_device *dev, u8 cmd)
e58eb583
TH
1623{
1624 struct ata_taskfile tf;
e58eb583
TH
1625
1626 ata_tf_init(dev, &tf);
1627
1628 tf.command = cmd;
1629 tf.flags |= ATA_TFLAG_DEVICE;
1630 tf.protocol = ATA_PROT_NODATA;
1631
2b789108 1632 return ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
e58eb583
TH
1633}
1634
1bc4ccff
AC
1635/**
1636 * ata_pio_need_iordy - check if iordy needed
1637 * @adev: ATA device
1638 *
1639 * Check if the current speed of the device requires IORDY. Used
1640 * by various controllers for chip configuration.
1641 */
a617c09f 1642
1bc4ccff
AC
1643unsigned int ata_pio_need_iordy(const struct ata_device *adev)
1644{
432729f0
AC
1645 /* Controller doesn't support IORDY. Probably a pointless check
1646 as the caller should know this */
9af5c9c9 1647 if (adev->link->ap->flags & ATA_FLAG_NO_IORDY)
1bc4ccff 1648 return 0;
432729f0
AC
1649 /* PIO3 and higher it is mandatory */
1650 if (adev->pio_mode > XFER_PIO_2)
1651 return 1;
1652 /* We turn it on when possible */
1653 if (ata_id_has_iordy(adev->id))
1bc4ccff 1654 return 1;
432729f0
AC
1655 return 0;
1656}
2e9edbf8 1657
432729f0
AC
1658/**
1659 * ata_pio_mask_no_iordy - Return the non IORDY mask
1660 * @adev: ATA device
1661 *
1662 * Compute the highest mode possible if we are not using iordy. Return
1663 * -1 if no iordy mode is available.
1664 */
a617c09f 1665
432729f0
AC
1666static u32 ata_pio_mask_no_iordy(const struct ata_device *adev)
1667{
1bc4ccff 1668 /* If we have no drive specific rule, then PIO 2 is non IORDY */
1bc4ccff 1669 if (adev->id[ATA_ID_FIELD_VALID] & 2) { /* EIDE */
432729f0 1670 u16 pio = adev->id[ATA_ID_EIDE_PIO];
1bc4ccff
AC
1671 /* Is the speed faster than the drive allows non IORDY ? */
1672 if (pio) {
1673 /* This is cycle times not frequency - watch the logic! */
1674 if (pio > 240) /* PIO2 is 240nS per cycle */
432729f0
AC
1675 return 3 << ATA_SHIFT_PIO;
1676 return 7 << ATA_SHIFT_PIO;
1bc4ccff
AC
1677 }
1678 }
432729f0 1679 return 3 << ATA_SHIFT_PIO;
1bc4ccff
AC
1680}
1681
1da177e4 1682/**
49016aca 1683 * ata_dev_read_id - Read ID data from the specified device
49016aca
TH
1684 * @dev: target device
1685 * @p_class: pointer to class of the target device (may be changed)
bff04647 1686 * @flags: ATA_READID_* flags
fe635c7e 1687 * @id: buffer to read IDENTIFY data into
1da177e4 1688 *
49016aca
TH
1689 * Read ID data from the specified device. ATA_CMD_ID_ATA is
1690 * performed on ATA devices and ATA_CMD_ID_ATAPI on ATAPI
aec5c3c1
TH
1691 * devices. This function also issues ATA_CMD_INIT_DEV_PARAMS
1692 * for pre-ATA4 drives.
1da177e4 1693 *
50a99018
AC
1694 * FIXME: ATA_CMD_ID_ATA is optional for early drives and right
1695 * now we abort if we hit that case.
1696 *
1da177e4 1697 * LOCKING:
49016aca
TH
1698 * Kernel thread context (may sleep)
1699 *
1700 * RETURNS:
1701 * 0 on success, -errno otherwise.
1da177e4 1702 */
a9beec95 1703int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
bff04647 1704 unsigned int flags, u16 *id)
1da177e4 1705{
9af5c9c9 1706 struct ata_port *ap = dev->link->ap;
49016aca 1707 unsigned int class = *p_class;
a0123703 1708 struct ata_taskfile tf;
49016aca
TH
1709 unsigned int err_mask = 0;
1710 const char *reason;
54936f8b 1711 int may_fallback = 1, tried_spinup = 0;
49016aca 1712 int rc;
1da177e4 1713
0dd4b21f 1714 if (ata_msg_ctl(ap))
44877b4e 1715 ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER\n", __FUNCTION__);
1da177e4 1716
49016aca 1717 ata_dev_select(ap, dev->devno, 1, 1); /* select device 0/1 */
49016aca 1718 retry:
3373efd8 1719 ata_tf_init(dev, &tf);
a0123703 1720
49016aca
TH
1721 switch (class) {
1722 case ATA_DEV_ATA:
a0123703 1723 tf.command = ATA_CMD_ID_ATA;
49016aca
TH
1724 break;
1725 case ATA_DEV_ATAPI:
a0123703 1726 tf.command = ATA_CMD_ID_ATAPI;
49016aca
TH
1727 break;
1728 default:
1729 rc = -ENODEV;
1730 reason = "unsupported class";
1731 goto err_out;
1da177e4
LT
1732 }
1733
a0123703 1734 tf.protocol = ATA_PROT_PIO;
81afe893
TH
1735
1736 /* Some devices choke if TF registers contain garbage. Make
1737 * sure those are properly initialized.
1738 */
1739 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
1740
1741 /* Device presence detection is unreliable on some
1742 * controllers. Always poll IDENTIFY if available.
1743 */
1744 tf.flags |= ATA_TFLAG_POLLING;
1da177e4 1745
3373efd8 1746 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
2b789108 1747 id, sizeof(id[0]) * ATA_ID_WORDS, 0);
a0123703 1748 if (err_mask) {
800b3996 1749 if (err_mask & AC_ERR_NODEV_HINT) {
55a8e2c8 1750 DPRINTK("ata%u.%d: NODEV after polling detection\n",
44877b4e 1751 ap->print_id, dev->devno);
55a8e2c8
TH
1752 return -ENOENT;
1753 }
1754
54936f8b
TH
1755 /* Device or controller might have reported the wrong
1756 * device class. Give a shot at the other IDENTIFY if
1757 * the current one is aborted by the device.
1758 */
1759 if (may_fallback &&
1760 (err_mask == AC_ERR_DEV) && (tf.feature & ATA_ABORTED)) {
1761 may_fallback = 0;
1762
1763 if (class == ATA_DEV_ATA)
1764 class = ATA_DEV_ATAPI;
1765 else
1766 class = ATA_DEV_ATA;
1767 goto retry;
1768 }
1769
49016aca
TH
1770 rc = -EIO;
1771 reason = "I/O error";
1da177e4
LT
1772 goto err_out;
1773 }
1774
54936f8b
TH
1775 /* Falling back doesn't make sense if ID data was read
1776 * successfully at least once.
1777 */
1778 may_fallback = 0;
1779
49016aca 1780 swap_buf_le16(id, ATA_ID_WORDS);
1da177e4 1781
49016aca 1782 /* sanity check */
a4f5749b 1783 rc = -EINVAL;
6070068b 1784 reason = "device reports invalid type";
a4f5749b
TH
1785
1786 if (class == ATA_DEV_ATA) {
1787 if (!ata_id_is_ata(id) && !ata_id_is_cfa(id))
1788 goto err_out;
1789 } else {
1790 if (ata_id_is_ata(id))
1791 goto err_out;
49016aca
TH
1792 }
1793
169439c2
ML
1794 if (!tried_spinup && (id[2] == 0x37c8 || id[2] == 0x738c)) {
1795 tried_spinup = 1;
1796 /*
1797 * Drive powered-up in standby mode, and requires a specific
1798 * SET_FEATURES spin-up subcommand before it will accept
1799 * anything other than the original IDENTIFY command.
1800 */
1801 ata_tf_init(dev, &tf);
1802 tf.command = ATA_CMD_SET_FEATURES;
1803 tf.feature = SETFEATURES_SPINUP;
1804 tf.protocol = ATA_PROT_NODATA;
1805 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
2b789108
TH
1806 err_mask = ata_exec_internal(dev, &tf, NULL,
1807 DMA_NONE, NULL, 0, 0);
fb0582f9 1808 if (err_mask && id[2] != 0x738c) {
169439c2
ML
1809 rc = -EIO;
1810 reason = "SPINUP failed";
1811 goto err_out;
1812 }
1813 /*
1814 * If the drive initially returned incomplete IDENTIFY info,
1815 * we now must reissue the IDENTIFY command.
1816 */
1817 if (id[2] == 0x37c8)
1818 goto retry;
1819 }
1820
bff04647 1821 if ((flags & ATA_READID_POSTRESET) && class == ATA_DEV_ATA) {
49016aca
TH
1822 /*
1823 * The exact sequence expected by certain pre-ATA4 drives is:
1824 * SRST RESET
50a99018
AC
1825 * IDENTIFY (optional in early ATA)
1826 * INITIALIZE DEVICE PARAMETERS (later IDE and ATA)
49016aca
TH
1827 * anything else..
1828 * Some drives were very specific about that exact sequence.
50a99018
AC
1829 *
1830 * Note that ATA4 says lba is mandatory so the second check
1831 * shoud never trigger.
49016aca
TH
1832 */
1833 if (ata_id_major_version(id) < 4 || !ata_id_has_lba(id)) {
3373efd8 1834 err_mask = ata_dev_init_params(dev, id[3], id[6]);
49016aca
TH
1835 if (err_mask) {
1836 rc = -EIO;
1837 reason = "INIT_DEV_PARAMS failed";
1838 goto err_out;
1839 }
1840
1841 /* current CHS translation info (id[53-58]) might be
1842 * changed. reread the identify device info.
1843 */
bff04647 1844 flags &= ~ATA_READID_POSTRESET;
49016aca
TH
1845 goto retry;
1846 }
1847 }
1848
1849 *p_class = class;
fe635c7e 1850
49016aca
TH
1851 return 0;
1852
1853 err_out:
88574551 1854 if (ata_msg_warn(ap))
0dd4b21f 1855 ata_dev_printk(dev, KERN_WARNING, "failed to IDENTIFY "
88574551 1856 "(%s, err_mask=0x%x)\n", reason, err_mask);
49016aca
TH
1857 return rc;
1858}
1859
3373efd8 1860static inline u8 ata_dev_knobble(struct ata_device *dev)
4b2f3ede 1861{
9af5c9c9
TH
1862 struct ata_port *ap = dev->link->ap;
1863 return ((ap->cbl == ATA_CBL_SATA) && (!ata_id_is_sata(dev->id)));
4b2f3ede
TH
1864}
1865
a6e6ce8e
TH
1866static void ata_dev_config_ncq(struct ata_device *dev,
1867 char *desc, size_t desc_sz)
1868{
9af5c9c9 1869 struct ata_port *ap = dev->link->ap;
a6e6ce8e
TH
1870 int hdepth = 0, ddepth = ata_id_queue_depth(dev->id);
1871
1872 if (!ata_id_has_ncq(dev->id)) {
1873 desc[0] = '\0';
1874 return;
1875 }
75683fe7 1876 if (dev->horkage & ATA_HORKAGE_NONCQ) {
6919a0a6
AC
1877 snprintf(desc, desc_sz, "NCQ (not used)");
1878 return;
1879 }
a6e6ce8e 1880 if (ap->flags & ATA_FLAG_NCQ) {
cca3974e 1881 hdepth = min(ap->scsi_host->can_queue, ATA_MAX_QUEUE - 1);
a6e6ce8e
TH
1882 dev->flags |= ATA_DFLAG_NCQ;
1883 }
1884
1885 if (hdepth >= ddepth)
1886 snprintf(desc, desc_sz, "NCQ (depth %d)", ddepth);
1887 else
1888 snprintf(desc, desc_sz, "NCQ (depth %d/%d)", hdepth, ddepth);
1889}
1890
49016aca 1891/**
ffeae418 1892 * ata_dev_configure - Configure the specified ATA/ATAPI device
ffeae418
TH
1893 * @dev: Target device to configure
1894 *
1895 * Configure @dev according to @dev->id. Generic and low-level
1896 * driver specific fixups are also applied.
49016aca
TH
1897 *
1898 * LOCKING:
ffeae418
TH
1899 * Kernel thread context (may sleep)
1900 *
1901 * RETURNS:
1902 * 0 on success, -errno otherwise
49016aca 1903 */
efdaedc4 1904int ata_dev_configure(struct ata_device *dev)
49016aca 1905{
9af5c9c9
TH
1906 struct ata_port *ap = dev->link->ap;
1907 struct ata_eh_context *ehc = &dev->link->eh_context;
6746544c 1908 int print_info = ehc->i.flags & ATA_EHI_PRINTINFO;
1148c3a7 1909 const u16 *id = dev->id;
ff8854b2 1910 unsigned int xfer_mask;
b352e57d 1911 char revbuf[7]; /* XYZ-99\0 */
3f64f565
EM
1912 char fwrevbuf[ATA_ID_FW_REV_LEN+1];
1913 char modelbuf[ATA_ID_PROD_LEN+1];
e6d902a3 1914 int rc;
49016aca 1915
0dd4b21f 1916 if (!ata_dev_enabled(dev) && ata_msg_info(ap)) {
44877b4e
TH
1917 ata_dev_printk(dev, KERN_INFO, "%s: ENTER/EXIT -- nodev\n",
1918 __FUNCTION__);
ffeae418 1919 return 0;
49016aca
TH
1920 }
1921
0dd4b21f 1922 if (ata_msg_probe(ap))
44877b4e 1923 ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER\n", __FUNCTION__);
1da177e4 1924
75683fe7
TH
1925 /* set horkage */
1926 dev->horkage |= ata_dev_blacklisted(dev);
1927
6746544c
TH
1928 /* let ACPI work its magic */
1929 rc = ata_acpi_on_devcfg(dev);
1930 if (rc)
1931 return rc;
08573a86 1932
05027adc
TH
1933 /* massage HPA, do it early as it might change IDENTIFY data */
1934 rc = ata_hpa_resize(dev);
1935 if (rc)
1936 return rc;
1937
c39f5ebe 1938 /* print device capabilities */
0dd4b21f 1939 if (ata_msg_probe(ap))
88574551
TH
1940 ata_dev_printk(dev, KERN_DEBUG,
1941 "%s: cfg 49:%04x 82:%04x 83:%04x 84:%04x "
1942 "85:%04x 86:%04x 87:%04x 88:%04x\n",
0dd4b21f 1943 __FUNCTION__,
f15a1daf
TH
1944 id[49], id[82], id[83], id[84],
1945 id[85], id[86], id[87], id[88]);
c39f5ebe 1946
208a9933 1947 /* initialize to-be-configured parameters */
ea1dd4e1 1948 dev->flags &= ~ATA_DFLAG_CFG_MASK;
208a9933
TH
1949 dev->max_sectors = 0;
1950 dev->cdb_len = 0;
1951 dev->n_sectors = 0;
1952 dev->cylinders = 0;
1953 dev->heads = 0;
1954 dev->sectors = 0;
1955
1da177e4
LT
1956 /*
1957 * common ATA, ATAPI feature tests
1958 */
1959
ff8854b2 1960 /* find max transfer mode; for printk only */
1148c3a7 1961 xfer_mask = ata_id_xfermask(id);
1da177e4 1962
0dd4b21f
BP
1963 if (ata_msg_probe(ap))
1964 ata_dump_id(id);
1da177e4 1965
ef143d57
AL
1966 /* SCSI only uses 4-char revisions, dump full 8 chars from ATA */
1967 ata_id_c_string(dev->id, fwrevbuf, ATA_ID_FW_REV,
1968 sizeof(fwrevbuf));
1969
1970 ata_id_c_string(dev->id, modelbuf, ATA_ID_PROD,
1971 sizeof(modelbuf));
1972
1da177e4
LT
1973 /* ATA-specific feature tests */
1974 if (dev->class == ATA_DEV_ATA) {
b352e57d
AC
1975 if (ata_id_is_cfa(id)) {
1976 if (id[162] & 1) /* CPRM may make this media unusable */
44877b4e
TH
1977 ata_dev_printk(dev, KERN_WARNING,
1978 "supports DRM functions and may "
1979 "not be fully accessable.\n");
b352e57d
AC
1980 snprintf(revbuf, 7, "CFA");
1981 }
1982 else
1983 snprintf(revbuf, 7, "ATA-%d", ata_id_major_version(id));
1984
1148c3a7 1985 dev->n_sectors = ata_id_n_sectors(id);
2940740b 1986
3f64f565
EM
1987 if (dev->id[59] & 0x100)
1988 dev->multi_count = dev->id[59] & 0xff;
1989
1148c3a7 1990 if (ata_id_has_lba(id)) {
4c2d721a 1991 const char *lba_desc;
a6e6ce8e 1992 char ncq_desc[20];
8bf62ece 1993
4c2d721a
TH
1994 lba_desc = "LBA";
1995 dev->flags |= ATA_DFLAG_LBA;
1148c3a7 1996 if (ata_id_has_lba48(id)) {
8bf62ece 1997 dev->flags |= ATA_DFLAG_LBA48;
4c2d721a 1998 lba_desc = "LBA48";
6fc49adb
TH
1999
2000 if (dev->n_sectors >= (1UL << 28) &&
2001 ata_id_has_flush_ext(id))
2002 dev->flags |= ATA_DFLAG_FLUSH_EXT;
4c2d721a 2003 }
8bf62ece 2004
a6e6ce8e
TH
2005 /* config NCQ */
2006 ata_dev_config_ncq(dev, ncq_desc, sizeof(ncq_desc));
2007
8bf62ece 2008 /* print device info to dmesg */
3f64f565
EM
2009 if (ata_msg_drv(ap) && print_info) {
2010 ata_dev_printk(dev, KERN_INFO,
2011 "%s: %s, %s, max %s\n",
2012 revbuf, modelbuf, fwrevbuf,
2013 ata_mode_string(xfer_mask));
2014 ata_dev_printk(dev, KERN_INFO,
2015 "%Lu sectors, multi %u: %s %s\n",
f15a1daf 2016 (unsigned long long)dev->n_sectors,
3f64f565
EM
2017 dev->multi_count, lba_desc, ncq_desc);
2018 }
ffeae418 2019 } else {
8bf62ece
AL
2020 /* CHS */
2021
2022 /* Default translation */
1148c3a7
TH
2023 dev->cylinders = id[1];
2024 dev->heads = id[3];
2025 dev->sectors = id[6];
8bf62ece 2026
1148c3a7 2027 if (ata_id_current_chs_valid(id)) {
8bf62ece 2028 /* Current CHS translation is valid. */
1148c3a7
TH
2029 dev->cylinders = id[54];
2030 dev->heads = id[55];
2031 dev->sectors = id[56];
8bf62ece
AL
2032 }
2033
2034 /* print device info to dmesg */
3f64f565 2035 if (ata_msg_drv(ap) && print_info) {
88574551 2036 ata_dev_printk(dev, KERN_INFO,
3f64f565
EM
2037 "%s: %s, %s, max %s\n",
2038 revbuf, modelbuf, fwrevbuf,
2039 ata_mode_string(xfer_mask));
a84471fe 2040 ata_dev_printk(dev, KERN_INFO,
3f64f565
EM
2041 "%Lu sectors, multi %u, CHS %u/%u/%u\n",
2042 (unsigned long long)dev->n_sectors,
2043 dev->multi_count, dev->cylinders,
2044 dev->heads, dev->sectors);
2045 }
07f6f7d0
AL
2046 }
2047
6e7846e9 2048 dev->cdb_len = 16;
1da177e4
LT
2049 }
2050
2051 /* ATAPI-specific feature tests */
2c13b7ce 2052 else if (dev->class == ATA_DEV_ATAPI) {
854c73a2
TH
2053 const char *cdb_intr_string = "";
2054 const char *atapi_an_string = "";
7d77b247 2055 u32 sntf;
08a556db 2056
1148c3a7 2057 rc = atapi_cdb_len(id);
1da177e4 2058 if ((rc < 12) || (rc > ATAPI_CDB_LEN)) {
0dd4b21f 2059 if (ata_msg_warn(ap))
88574551
TH
2060 ata_dev_printk(dev, KERN_WARNING,
2061 "unsupported CDB len\n");
ffeae418 2062 rc = -EINVAL;
1da177e4
LT
2063 goto err_out_nosup;
2064 }
6e7846e9 2065 dev->cdb_len = (unsigned int) rc;
1da177e4 2066
7d77b247
TH
2067 /* Enable ATAPI AN if both the host and device have
2068 * the support. If PMP is attached, SNTF is required
2069 * to enable ATAPI AN to discern between PHY status
2070 * changed notifications and ATAPI ANs.
9f45cbd3 2071 */
7d77b247
TH
2072 if ((ap->flags & ATA_FLAG_AN) && ata_id_has_atapi_AN(id) &&
2073 (!ap->nr_pmp_links ||
2074 sata_scr_read(&ap->link, SCR_NOTIFICATION, &sntf) == 0)) {
854c73a2
TH
2075 unsigned int err_mask;
2076
9f45cbd3 2077 /* issue SET feature command to turn this on */
854c73a2
TH
2078 err_mask = ata_dev_set_AN(dev, SETFEATURES_SATA_ENABLE);
2079 if (err_mask)
9f45cbd3 2080 ata_dev_printk(dev, KERN_ERR,
854c73a2
TH
2081 "failed to enable ATAPI AN "
2082 "(err_mask=0x%x)\n", err_mask);
2083 else {
9f45cbd3 2084 dev->flags |= ATA_DFLAG_AN;
854c73a2
TH
2085 atapi_an_string = ", ATAPI AN";
2086 }
9f45cbd3
KCA
2087 }
2088
08a556db 2089 if (ata_id_cdb_intr(dev->id)) {
312f7da2 2090 dev->flags |= ATA_DFLAG_CDB_INTR;
08a556db
AL
2091 cdb_intr_string = ", CDB intr";
2092 }
312f7da2 2093
1da177e4 2094 /* print device info to dmesg */
5afc8142 2095 if (ata_msg_drv(ap) && print_info)
ef143d57 2096 ata_dev_printk(dev, KERN_INFO,
854c73a2 2097 "ATAPI: %s, %s, max %s%s%s\n",
ef143d57 2098 modelbuf, fwrevbuf,
12436c30 2099 ata_mode_string(xfer_mask),
854c73a2 2100 cdb_intr_string, atapi_an_string);
1da177e4
LT
2101 }
2102
914ed354
TH
2103 /* determine max_sectors */
2104 dev->max_sectors = ATA_MAX_SECTORS;
2105 if (dev->flags & ATA_DFLAG_LBA48)
2106 dev->max_sectors = ATA_MAX_SECTORS_LBA48;
2107
93590859
AC
2108 if (dev->horkage & ATA_HORKAGE_DIAGNOSTIC) {
2109 /* Let the user know. We don't want to disallow opens for
2110 rescue purposes, or in case the vendor is just a blithering
2111 idiot */
2112 if (print_info) {
2113 ata_dev_printk(dev, KERN_WARNING,
2114"Drive reports diagnostics failure. This may indicate a drive\n");
2115 ata_dev_printk(dev, KERN_WARNING,
2116"fault or invalid emulation. Contact drive vendor for information.\n");
2117 }
2118 }
2119
4b2f3ede 2120 /* limit bridge transfers to udma5, 200 sectors */
3373efd8 2121 if (ata_dev_knobble(dev)) {
5afc8142 2122 if (ata_msg_drv(ap) && print_info)
f15a1daf
TH
2123 ata_dev_printk(dev, KERN_INFO,
2124 "applying bridge limits\n");
5a529139 2125 dev->udma_mask &= ATA_UDMA5;
4b2f3ede
TH
2126 dev->max_sectors = ATA_MAX_SECTORS;
2127 }
2128
75683fe7 2129 if (dev->horkage & ATA_HORKAGE_MAX_SEC_128)
03ec52de
TH
2130 dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
2131 dev->max_sectors);
18d6e9d5 2132
4b2f3ede 2133 if (ap->ops->dev_config)
cd0d3bbc 2134 ap->ops->dev_config(dev);
4b2f3ede 2135
0dd4b21f
BP
2136 if (ata_msg_probe(ap))
2137 ata_dev_printk(dev, KERN_DEBUG, "%s: EXIT, drv_stat = 0x%x\n",
2138 __FUNCTION__, ata_chk_status(ap));
ffeae418 2139 return 0;
1da177e4
LT
2140
2141err_out_nosup:
0dd4b21f 2142 if (ata_msg_probe(ap))
88574551
TH
2143 ata_dev_printk(dev, KERN_DEBUG,
2144 "%s: EXIT, err\n", __FUNCTION__);
ffeae418 2145 return rc;
1da177e4
LT
2146}
2147
be0d18df 2148/**
2e41e8e6 2149 * ata_cable_40wire - return 40 wire cable type
be0d18df
AC
2150 * @ap: port
2151 *
2e41e8e6 2152 * Helper method for drivers which want to hardwire 40 wire cable
be0d18df
AC
2153 * detection.
2154 */
2155
2156int ata_cable_40wire(struct ata_port *ap)
2157{
2158 return ATA_CBL_PATA40;
2159}
2160
2161/**
2e41e8e6 2162 * ata_cable_80wire - return 80 wire cable type
be0d18df
AC
2163 * @ap: port
2164 *
2e41e8e6 2165 * Helper method for drivers which want to hardwire 80 wire cable
be0d18df
AC
2166 * detection.
2167 */
2168
2169int ata_cable_80wire(struct ata_port *ap)
2170{
2171 return ATA_CBL_PATA80;
2172}
2173
2174/**
2175 * ata_cable_unknown - return unknown PATA cable.
2176 * @ap: port
2177 *
2178 * Helper method for drivers which have no PATA cable detection.
2179 */
2180
2181int ata_cable_unknown(struct ata_port *ap)
2182{
2183 return ATA_CBL_PATA_UNK;
2184}
2185
2186/**
2187 * ata_cable_sata - return SATA cable type
2188 * @ap: port
2189 *
2190 * Helper method for drivers which have SATA cables
2191 */
2192
2193int ata_cable_sata(struct ata_port *ap)
2194{
2195 return ATA_CBL_SATA;
2196}
2197
1da177e4
LT
2198/**
2199 * ata_bus_probe - Reset and probe ATA bus
2200 * @ap: Bus to probe
2201 *
0cba632b
JG
2202 * Master ATA bus probing function. Initiates a hardware-dependent
2203 * bus reset, then attempts to identify any devices found on
2204 * the bus.
2205 *
1da177e4 2206 * LOCKING:
0cba632b 2207 * PCI/etc. bus probe sem.
1da177e4
LT
2208 *
2209 * RETURNS:
96072e69 2210 * Zero on success, negative errno otherwise.
1da177e4
LT
2211 */
2212
80289167 2213int ata_bus_probe(struct ata_port *ap)
1da177e4 2214{
28ca5c57 2215 unsigned int classes[ATA_MAX_DEVICES];
14d2bac1 2216 int tries[ATA_MAX_DEVICES];
f58229f8 2217 int rc;
e82cbdb9 2218 struct ata_device *dev;
1da177e4 2219
28ca5c57 2220 ata_port_probe(ap);
c19ba8af 2221
f58229f8
TH
2222 ata_link_for_each_dev(dev, &ap->link)
2223 tries[dev->devno] = ATA_PROBE_MAX_TRIES;
14d2bac1
TH
2224
2225 retry:
2044470c 2226 /* reset and determine device classes */
52783c5d 2227 ap->ops->phy_reset(ap);
2061a47a 2228
f58229f8 2229 ata_link_for_each_dev(dev, &ap->link) {
52783c5d
TH
2230 if (!(ap->flags & ATA_FLAG_DISABLED) &&
2231 dev->class != ATA_DEV_UNKNOWN)
2232 classes[dev->devno] = dev->class;
2233 else
2234 classes[dev->devno] = ATA_DEV_NONE;
2044470c 2235
52783c5d 2236 dev->class = ATA_DEV_UNKNOWN;
28ca5c57 2237 }
1da177e4 2238
52783c5d 2239 ata_port_probe(ap);
2044470c 2240
b6079ca4
AC
2241 /* after the reset the device state is PIO 0 and the controller
2242 state is undefined. Record the mode */
2243
f58229f8
TH
2244 ata_link_for_each_dev(dev, &ap->link)
2245 dev->pio_mode = XFER_PIO_0;
b6079ca4 2246
f31f0cc2
JG
2247 /* read IDENTIFY page and configure devices. We have to do the identify
2248 specific sequence bass-ackwards so that PDIAG- is released by
2249 the slave device */
2250
f58229f8
TH
2251 ata_link_for_each_dev(dev, &ap->link) {
2252 if (tries[dev->devno])
2253 dev->class = classes[dev->devno];
ffeae418 2254
14d2bac1 2255 if (!ata_dev_enabled(dev))
ffeae418 2256 continue;
ffeae418 2257
bff04647
TH
2258 rc = ata_dev_read_id(dev, &dev->class, ATA_READID_POSTRESET,
2259 dev->id);
14d2bac1
TH
2260 if (rc)
2261 goto fail;
f31f0cc2
JG
2262 }
2263
be0d18df
AC
2264 /* Now ask for the cable type as PDIAG- should have been released */
2265 if (ap->ops->cable_detect)
2266 ap->cbl = ap->ops->cable_detect(ap);
2267
614fe29b
AC
2268 /* We may have SATA bridge glue hiding here irrespective of the
2269 reported cable types and sensed types */
2270 ata_link_for_each_dev(dev, &ap->link) {
2271 if (!ata_dev_enabled(dev))
2272 continue;
2273 /* SATA drives indicate we have a bridge. We don't know which
2274 end of the link the bridge is which is a problem */
2275 if (ata_id_is_sata(dev->id))
2276 ap->cbl = ATA_CBL_SATA;
2277 }
2278
f31f0cc2
JG
2279 /* After the identify sequence we can now set up the devices. We do
2280 this in the normal order so that the user doesn't get confused */
2281
f58229f8 2282 ata_link_for_each_dev(dev, &ap->link) {
f31f0cc2
JG
2283 if (!ata_dev_enabled(dev))
2284 continue;
14d2bac1 2285
9af5c9c9 2286 ap->link.eh_context.i.flags |= ATA_EHI_PRINTINFO;
efdaedc4 2287 rc = ata_dev_configure(dev);
9af5c9c9 2288 ap->link.eh_context.i.flags &= ~ATA_EHI_PRINTINFO;
14d2bac1
TH
2289 if (rc)
2290 goto fail;
1da177e4
LT
2291 }
2292
e82cbdb9 2293 /* configure transfer mode */
0260731f 2294 rc = ata_set_mode(&ap->link, &dev);
4ae72a1e 2295 if (rc)
51713d35 2296 goto fail;
1da177e4 2297
f58229f8
TH
2298 ata_link_for_each_dev(dev, &ap->link)
2299 if (ata_dev_enabled(dev))
e82cbdb9 2300 return 0;
1da177e4 2301
e82cbdb9
TH
2302 /* no device present, disable port */
2303 ata_port_disable(ap);
96072e69 2304 return -ENODEV;
14d2bac1
TH
2305
2306 fail:
4ae72a1e
TH
2307 tries[dev->devno]--;
2308
14d2bac1
TH
2309 switch (rc) {
2310 case -EINVAL:
4ae72a1e 2311 /* eeek, something went very wrong, give up */
14d2bac1
TH
2312 tries[dev->devno] = 0;
2313 break;
4ae72a1e
TH
2314
2315 case -ENODEV:
2316 /* give it just one more chance */
2317 tries[dev->devno] = min(tries[dev->devno], 1);
14d2bac1 2318 case -EIO:
4ae72a1e
TH
2319 if (tries[dev->devno] == 1) {
2320 /* This is the last chance, better to slow
2321 * down than lose it.
2322 */
936fd732 2323 sata_down_spd_limit(&ap->link);
4ae72a1e
TH
2324 ata_down_xfermask_limit(dev, ATA_DNXFER_PIO);
2325 }
14d2bac1
TH
2326 }
2327
4ae72a1e 2328 if (!tries[dev->devno])
3373efd8 2329 ata_dev_disable(dev);
ec573755 2330
14d2bac1 2331 goto retry;
1da177e4
LT
2332}
2333
2334/**
0cba632b
JG
2335 * ata_port_probe - Mark port as enabled
2336 * @ap: Port for which we indicate enablement
1da177e4 2337 *
0cba632b
JG
2338 * Modify @ap data structure such that the system
2339 * thinks that the entire port is enabled.
2340 *
cca3974e 2341 * LOCKING: host lock, or some other form of
0cba632b 2342 * serialization.
1da177e4
LT
2343 */
2344
2345void ata_port_probe(struct ata_port *ap)
2346{
198e0fed 2347 ap->flags &= ~ATA_FLAG_DISABLED;
1da177e4
LT
2348}
2349
3be680b7
TH
2350/**
2351 * sata_print_link_status - Print SATA link status
936fd732 2352 * @link: SATA link to printk link status about
3be680b7
TH
2353 *
2354 * This function prints link speed and status of a SATA link.
2355 *
2356 * LOCKING:
2357 * None.
2358 */
936fd732 2359void sata_print_link_status(struct ata_link *link)
3be680b7 2360{
6d5f9732 2361 u32 sstatus, scontrol, tmp;
3be680b7 2362
936fd732 2363 if (sata_scr_read(link, SCR_STATUS, &sstatus))
3be680b7 2364 return;
936fd732 2365 sata_scr_read(link, SCR_CONTROL, &scontrol);
3be680b7 2366
936fd732 2367 if (ata_link_online(link)) {
3be680b7 2368 tmp = (sstatus >> 4) & 0xf;
936fd732 2369 ata_link_printk(link, KERN_INFO,
f15a1daf
TH
2370 "SATA link up %s (SStatus %X SControl %X)\n",
2371 sata_spd_string(tmp), sstatus, scontrol);
3be680b7 2372 } else {
936fd732 2373 ata_link_printk(link, KERN_INFO,
f15a1daf
TH
2374 "SATA link down (SStatus %X SControl %X)\n",
2375 sstatus, scontrol);
3be680b7
TH
2376 }
2377}
2378
1da177e4 2379/**
780a87f7
JG
2380 * __sata_phy_reset - Wake/reset a low-level SATA PHY
2381 * @ap: SATA port associated with target SATA PHY.
1da177e4 2382 *
780a87f7
JG
2383 * This function issues commands to standard SATA Sxxx
2384 * PHY registers, to wake up the phy (and device), and
2385 * clear any reset condition.
1da177e4
LT
2386 *
2387 * LOCKING:
0cba632b 2388 * PCI/etc. bus probe sem.
1da177e4
LT
2389 *
2390 */
2391void __sata_phy_reset(struct ata_port *ap)
2392{
936fd732 2393 struct ata_link *link = &ap->link;
1da177e4 2394 unsigned long timeout = jiffies + (HZ * 5);
936fd732 2395 u32 sstatus;
1da177e4
LT
2396
2397 if (ap->flags & ATA_FLAG_SATA_RESET) {
cdcca89e 2398 /* issue phy wake/reset */
936fd732 2399 sata_scr_write_flush(link, SCR_CONTROL, 0x301);
62ba2841
TH
2400 /* Couldn't find anything in SATA I/II specs, but
2401 * AHCI-1.1 10.4.2 says at least 1 ms. */
2402 mdelay(1);
1da177e4 2403 }
81952c54 2404 /* phy wake/clear reset */
936fd732 2405 sata_scr_write_flush(link, SCR_CONTROL, 0x300);
1da177e4
LT
2406
2407 /* wait for phy to become ready, if necessary */
2408 do {
2409 msleep(200);
936fd732 2410 sata_scr_read(link, SCR_STATUS, &sstatus);
1da177e4
LT
2411 if ((sstatus & 0xf) != 1)
2412 break;
2413 } while (time_before(jiffies, timeout));
2414
3be680b7 2415 /* print link status */
936fd732 2416 sata_print_link_status(link);
656563e3 2417
3be680b7 2418 /* TODO: phy layer with polling, timeouts, etc. */
936fd732 2419 if (!ata_link_offline(link))
1da177e4 2420 ata_port_probe(ap);
3be680b7 2421 else
1da177e4 2422 ata_port_disable(ap);
1da177e4 2423
198e0fed 2424 if (ap->flags & ATA_FLAG_DISABLED)
1da177e4
LT
2425 return;
2426
2427 if (ata_busy_sleep(ap, ATA_TMOUT_BOOT_QUICK, ATA_TMOUT_BOOT)) {
2428 ata_port_disable(ap);
2429 return;
2430 }
2431
2432 ap->cbl = ATA_CBL_SATA;
2433}
2434
2435/**
780a87f7
JG
2436 * sata_phy_reset - Reset SATA bus.
2437 * @ap: SATA port associated with target SATA PHY.
1da177e4 2438 *
780a87f7
JG
2439 * This function resets the SATA bus, and then probes
2440 * the bus for devices.
1da177e4
LT
2441 *
2442 * LOCKING:
0cba632b 2443 * PCI/etc. bus probe sem.
1da177e4
LT
2444 *
2445 */
2446void sata_phy_reset(struct ata_port *ap)
2447{
2448 __sata_phy_reset(ap);
198e0fed 2449 if (ap->flags & ATA_FLAG_DISABLED)
1da177e4
LT
2450 return;
2451 ata_bus_reset(ap);
2452}
2453
ebdfca6e
AC
2454/**
2455 * ata_dev_pair - return other device on cable
ebdfca6e
AC
2456 * @adev: device
2457 *
2458 * Obtain the other device on the same cable, or if none is
2459 * present NULL is returned
2460 */
2e9edbf8 2461
3373efd8 2462struct ata_device *ata_dev_pair(struct ata_device *adev)
ebdfca6e 2463{
9af5c9c9
TH
2464 struct ata_link *link = adev->link;
2465 struct ata_device *pair = &link->device[1 - adev->devno];
e1211e3f 2466 if (!ata_dev_enabled(pair))
ebdfca6e
AC
2467 return NULL;
2468 return pair;
2469}
2470
1da177e4 2471/**
780a87f7
JG
2472 * ata_port_disable - Disable port.
2473 * @ap: Port to be disabled.
1da177e4 2474 *
780a87f7
JG
2475 * Modify @ap data structure such that the system
2476 * thinks that the entire port is disabled, and should
2477 * never attempt to probe or communicate with devices
2478 * on this port.
2479 *
cca3974e 2480 * LOCKING: host lock, or some other form of
780a87f7 2481 * serialization.
1da177e4
LT
2482 */
2483
2484void ata_port_disable(struct ata_port *ap)
2485{
9af5c9c9
TH
2486 ap->link.device[0].class = ATA_DEV_NONE;
2487 ap->link.device[1].class = ATA_DEV_NONE;
198e0fed 2488 ap->flags |= ATA_FLAG_DISABLED;
1da177e4
LT
2489}
2490
1c3fae4d 2491/**
3c567b7d 2492 * sata_down_spd_limit - adjust SATA spd limit downward
936fd732 2493 * @link: Link to adjust SATA spd limit for
1c3fae4d 2494 *
936fd732 2495 * Adjust SATA spd limit of @link downward. Note that this
1c3fae4d 2496 * function only adjusts the limit. The change must be applied
3c567b7d 2497 * using sata_set_spd().
1c3fae4d
TH
2498 *
2499 * LOCKING:
2500 * Inherited from caller.
2501 *
2502 * RETURNS:
2503 * 0 on success, negative errno on failure
2504 */
936fd732 2505int sata_down_spd_limit(struct ata_link *link)
1c3fae4d 2506{
81952c54
TH
2507 u32 sstatus, spd, mask;
2508 int rc, highbit;
1c3fae4d 2509
936fd732 2510 if (!sata_scr_valid(link))
008a7896
TH
2511 return -EOPNOTSUPP;
2512
2513 /* If SCR can be read, use it to determine the current SPD.
936fd732 2514 * If not, use cached value in link->sata_spd.
008a7896 2515 */
936fd732 2516 rc = sata_scr_read(link, SCR_STATUS, &sstatus);
008a7896
TH
2517 if (rc == 0)
2518 spd = (sstatus >> 4) & 0xf;
2519 else
936fd732 2520 spd = link->sata_spd;
1c3fae4d 2521
936fd732 2522 mask = link->sata_spd_limit;
1c3fae4d
TH
2523 if (mask <= 1)
2524 return -EINVAL;
008a7896
TH
2525
2526 /* unconditionally mask off the highest bit */
1c3fae4d
TH
2527 highbit = fls(mask) - 1;
2528 mask &= ~(1 << highbit);
2529
008a7896
TH
2530 /* Mask off all speeds higher than or equal to the current
2531 * one. Force 1.5Gbps if current SPD is not available.
2532 */
2533 if (spd > 1)
2534 mask &= (1 << (spd - 1)) - 1;
2535 else
2536 mask &= 1;
2537
2538 /* were we already at the bottom? */
1c3fae4d
TH
2539 if (!mask)
2540 return -EINVAL;
2541
936fd732 2542 link->sata_spd_limit = mask;
1c3fae4d 2543
936fd732 2544 ata_link_printk(link, KERN_WARNING, "limiting SATA link speed to %s\n",
f15a1daf 2545 sata_spd_string(fls(mask)));
1c3fae4d
TH
2546
2547 return 0;
2548}
2549
936fd732 2550static int __sata_set_spd_needed(struct ata_link *link, u32 *scontrol)
1c3fae4d
TH
2551{
2552 u32 spd, limit;
2553
936fd732 2554 if (link->sata_spd_limit == UINT_MAX)
1c3fae4d
TH
2555 limit = 0;
2556 else
936fd732 2557 limit = fls(link->sata_spd_limit);
1c3fae4d
TH
2558
2559 spd = (*scontrol >> 4) & 0xf;
2560 *scontrol = (*scontrol & ~0xf0) | ((limit & 0xf) << 4);
2561
2562 return spd != limit;
2563}
2564
2565/**
3c567b7d 2566 * sata_set_spd_needed - is SATA spd configuration needed
936fd732 2567 * @link: Link in question
1c3fae4d
TH
2568 *
2569 * Test whether the spd limit in SControl matches
936fd732 2570 * @link->sata_spd_limit. This function is used to determine
1c3fae4d
TH
2571 * whether hardreset is necessary to apply SATA spd
2572 * configuration.
2573 *
2574 * LOCKING:
2575 * Inherited from caller.
2576 *
2577 * RETURNS:
2578 * 1 if SATA spd configuration is needed, 0 otherwise.
2579 */
936fd732 2580int sata_set_spd_needed(struct ata_link *link)
1c3fae4d
TH
2581{
2582 u32 scontrol;
2583
936fd732 2584 if (sata_scr_read(link, SCR_CONTROL, &scontrol))
1c3fae4d
TH
2585 return 0;
2586
936fd732 2587 return __sata_set_spd_needed(link, &scontrol);
1c3fae4d
TH
2588}
2589
2590/**
3c567b7d 2591 * sata_set_spd - set SATA spd according to spd limit
936fd732 2592 * @link: Link to set SATA spd for
1c3fae4d 2593 *
936fd732 2594 * Set SATA spd of @link according to sata_spd_limit.
1c3fae4d
TH
2595 *
2596 * LOCKING:
2597 * Inherited from caller.
2598 *
2599 * RETURNS:
2600 * 0 if spd doesn't need to be changed, 1 if spd has been
81952c54 2601 * changed. Negative errno if SCR registers are inaccessible.
1c3fae4d 2602 */
936fd732 2603int sata_set_spd(struct ata_link *link)
1c3fae4d
TH
2604{
2605 u32 scontrol;
81952c54 2606 int rc;
1c3fae4d 2607
936fd732 2608 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
81952c54 2609 return rc;
1c3fae4d 2610
936fd732 2611 if (!__sata_set_spd_needed(link, &scontrol))
1c3fae4d
TH
2612 return 0;
2613
936fd732 2614 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol)))
81952c54
TH
2615 return rc;
2616
1c3fae4d
TH
2617 return 1;
2618}
2619
452503f9
AC
2620/*
2621 * This mode timing computation functionality is ported over from
2622 * drivers/ide/ide-timing.h and was originally written by Vojtech Pavlik
2623 */
2624/*
b352e57d 2625 * PIO 0-4, MWDMA 0-2 and UDMA 0-6 timings (in nanoseconds).
452503f9 2626 * These were taken from ATA/ATAPI-6 standard, rev 0a, except
b352e57d
AC
2627 * for UDMA6, which is currently supported only by Maxtor drives.
2628 *
2629 * For PIO 5/6 MWDMA 3/4 see the CFA specification 3.0.
452503f9
AC
2630 */
2631
2632static const struct ata_timing ata_timing[] = {
2633
2634 { XFER_UDMA_6, 0, 0, 0, 0, 0, 0, 0, 15 },
2635 { XFER_UDMA_5, 0, 0, 0, 0, 0, 0, 0, 20 },
2636 { XFER_UDMA_4, 0, 0, 0, 0, 0, 0, 0, 30 },
2637 { XFER_UDMA_3, 0, 0, 0, 0, 0, 0, 0, 45 },
2638
b352e57d
AC
2639 { XFER_MW_DMA_4, 25, 0, 0, 0, 55, 20, 80, 0 },
2640 { XFER_MW_DMA_3, 25, 0, 0, 0, 65, 25, 100, 0 },
452503f9
AC
2641 { XFER_UDMA_2, 0, 0, 0, 0, 0, 0, 0, 60 },
2642 { XFER_UDMA_1, 0, 0, 0, 0, 0, 0, 0, 80 },
2643 { XFER_UDMA_0, 0, 0, 0, 0, 0, 0, 0, 120 },
2644
2645/* { XFER_UDMA_SLOW, 0, 0, 0, 0, 0, 0, 0, 150 }, */
2e9edbf8 2646
452503f9
AC
2647 { XFER_MW_DMA_2, 25, 0, 0, 0, 70, 25, 120, 0 },
2648 { XFER_MW_DMA_1, 45, 0, 0, 0, 80, 50, 150, 0 },
2649 { XFER_MW_DMA_0, 60, 0, 0, 0, 215, 215, 480, 0 },
2e9edbf8 2650
452503f9
AC
2651 { XFER_SW_DMA_2, 60, 0, 0, 0, 120, 120, 240, 0 },
2652 { XFER_SW_DMA_1, 90, 0, 0, 0, 240, 240, 480, 0 },
2653 { XFER_SW_DMA_0, 120, 0, 0, 0, 480, 480, 960, 0 },
2654
b352e57d
AC
2655 { XFER_PIO_6, 10, 55, 20, 80, 55, 20, 80, 0 },
2656 { XFER_PIO_5, 15, 65, 25, 100, 65, 25, 100, 0 },
452503f9
AC
2657 { XFER_PIO_4, 25, 70, 25, 120, 70, 25, 120, 0 },
2658 { XFER_PIO_3, 30, 80, 70, 180, 80, 70, 180, 0 },
2659
2660 { XFER_PIO_2, 30, 290, 40, 330, 100, 90, 240, 0 },
2661 { XFER_PIO_1, 50, 290, 93, 383, 125, 100, 383, 0 },
2662 { XFER_PIO_0, 70, 290, 240, 600, 165, 150, 600, 0 },
2663
2664/* { XFER_PIO_SLOW, 120, 290, 240, 960, 290, 240, 960, 0 }, */
2665
2666 { 0xFF }
2667};
2668
2669#define ENOUGH(v,unit) (((v)-1)/(unit)+1)
2670#define EZ(v,unit) ((v)?ENOUGH(v,unit):0)
2671
2672static void ata_timing_quantize(const struct ata_timing *t, struct ata_timing *q, int T, int UT)
2673{
2674 q->setup = EZ(t->setup * 1000, T);
2675 q->act8b = EZ(t->act8b * 1000, T);
2676 q->rec8b = EZ(t->rec8b * 1000, T);
2677 q->cyc8b = EZ(t->cyc8b * 1000, T);
2678 q->active = EZ(t->active * 1000, T);
2679 q->recover = EZ(t->recover * 1000, T);
2680 q->cycle = EZ(t->cycle * 1000, T);
2681 q->udma = EZ(t->udma * 1000, UT);
2682}
2683
2684void ata_timing_merge(const struct ata_timing *a, const struct ata_timing *b,
2685 struct ata_timing *m, unsigned int what)
2686{
2687 if (what & ATA_TIMING_SETUP ) m->setup = max(a->setup, b->setup);
2688 if (what & ATA_TIMING_ACT8B ) m->act8b = max(a->act8b, b->act8b);
2689 if (what & ATA_TIMING_REC8B ) m->rec8b = max(a->rec8b, b->rec8b);
2690 if (what & ATA_TIMING_CYC8B ) m->cyc8b = max(a->cyc8b, b->cyc8b);
2691 if (what & ATA_TIMING_ACTIVE ) m->active = max(a->active, b->active);
2692 if (what & ATA_TIMING_RECOVER) m->recover = max(a->recover, b->recover);
2693 if (what & ATA_TIMING_CYCLE ) m->cycle = max(a->cycle, b->cycle);
2694 if (what & ATA_TIMING_UDMA ) m->udma = max(a->udma, b->udma);
2695}
2696
2697static const struct ata_timing* ata_timing_find_mode(unsigned short speed)
2698{
2699 const struct ata_timing *t;
2700
2701 for (t = ata_timing; t->mode != speed; t++)
91190758 2702 if (t->mode == 0xFF)
452503f9 2703 return NULL;
2e9edbf8 2704 return t;
452503f9
AC
2705}
2706
2707int ata_timing_compute(struct ata_device *adev, unsigned short speed,
2708 struct ata_timing *t, int T, int UT)
2709{
2710 const struct ata_timing *s;
2711 struct ata_timing p;
2712
2713 /*
2e9edbf8 2714 * Find the mode.
75b1f2f8 2715 */
452503f9
AC
2716
2717 if (!(s = ata_timing_find_mode(speed)))
2718 return -EINVAL;
2719
75b1f2f8
AL
2720 memcpy(t, s, sizeof(*s));
2721
452503f9
AC
2722 /*
2723 * If the drive is an EIDE drive, it can tell us it needs extended
2724 * PIO/MW_DMA cycle timing.
2725 */
2726
2727 if (adev->id[ATA_ID_FIELD_VALID] & 2) { /* EIDE drive */
2728 memset(&p, 0, sizeof(p));
2729 if(speed >= XFER_PIO_0 && speed <= XFER_SW_DMA_0) {
2730 if (speed <= XFER_PIO_2) p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO];
2731 else p.cycle = p.cyc8b = adev->id[ATA_ID_EIDE_PIO_IORDY];
2732 } else if(speed >= XFER_MW_DMA_0 && speed <= XFER_MW_DMA_2) {
2733 p.cycle = adev->id[ATA_ID_EIDE_DMA_MIN];
2734 }
2735 ata_timing_merge(&p, t, t, ATA_TIMING_CYCLE | ATA_TIMING_CYC8B);
2736 }
2737
2738 /*
2739 * Convert the timing to bus clock counts.
2740 */
2741
75b1f2f8 2742 ata_timing_quantize(t, t, T, UT);
452503f9
AC
2743
2744 /*
c893a3ae
RD
2745 * Even in DMA/UDMA modes we still use PIO access for IDENTIFY,
2746 * S.M.A.R.T * and some other commands. We have to ensure that the
2747 * DMA cycle timing is slower/equal than the fastest PIO timing.
452503f9
AC
2748 */
2749
fd3367af 2750 if (speed > XFER_PIO_6) {
452503f9
AC
2751 ata_timing_compute(adev, adev->pio_mode, &p, T, UT);
2752 ata_timing_merge(&p, t, t, ATA_TIMING_ALL);
2753 }
2754
2755 /*
c893a3ae 2756 * Lengthen active & recovery time so that cycle time is correct.
452503f9
AC
2757 */
2758
2759 if (t->act8b + t->rec8b < t->cyc8b) {
2760 t->act8b += (t->cyc8b - (t->act8b + t->rec8b)) / 2;
2761 t->rec8b = t->cyc8b - t->act8b;
2762 }
2763
2764 if (t->active + t->recover < t->cycle) {
2765 t->active += (t->cycle - (t->active + t->recover)) / 2;
2766 t->recover = t->cycle - t->active;
2767 }
a617c09f 2768
4f701d1e
AC
2769 /* In a few cases quantisation may produce enough errors to
2770 leave t->cycle too low for the sum of active and recovery
2771 if so we must correct this */
2772 if (t->active + t->recover > t->cycle)
2773 t->cycle = t->active + t->recover;
452503f9
AC
2774
2775 return 0;
2776}
2777
cf176e1a
TH
2778/**
2779 * ata_down_xfermask_limit - adjust dev xfer masks downward
cf176e1a 2780 * @dev: Device to adjust xfer masks
458337db 2781 * @sel: ATA_DNXFER_* selector
cf176e1a
TH
2782 *
2783 * Adjust xfer masks of @dev downward. Note that this function
2784 * does not apply the change. Invoking ata_set_mode() afterwards
2785 * will apply the limit.
2786 *
2787 * LOCKING:
2788 * Inherited from caller.
2789 *
2790 * RETURNS:
2791 * 0 on success, negative errno on failure
2792 */
458337db 2793int ata_down_xfermask_limit(struct ata_device *dev, unsigned int sel)
cf176e1a 2794{
458337db
TH
2795 char buf[32];
2796 unsigned int orig_mask, xfer_mask;
2797 unsigned int pio_mask, mwdma_mask, udma_mask;
2798 int quiet, highbit;
cf176e1a 2799
458337db
TH
2800 quiet = !!(sel & ATA_DNXFER_QUIET);
2801 sel &= ~ATA_DNXFER_QUIET;
cf176e1a 2802
458337db
TH
2803 xfer_mask = orig_mask = ata_pack_xfermask(dev->pio_mask,
2804 dev->mwdma_mask,
2805 dev->udma_mask);
2806 ata_unpack_xfermask(xfer_mask, &pio_mask, &mwdma_mask, &udma_mask);
cf176e1a 2807
458337db
TH
2808 switch (sel) {
2809 case ATA_DNXFER_PIO:
2810 highbit = fls(pio_mask) - 1;
2811 pio_mask &= ~(1 << highbit);
2812 break;
2813
2814 case ATA_DNXFER_DMA:
2815 if (udma_mask) {
2816 highbit = fls(udma_mask) - 1;
2817 udma_mask &= ~(1 << highbit);
2818 if (!udma_mask)
2819 return -ENOENT;
2820 } else if (mwdma_mask) {
2821 highbit = fls(mwdma_mask) - 1;
2822 mwdma_mask &= ~(1 << highbit);
2823 if (!mwdma_mask)
2824 return -ENOENT;
2825 }
2826 break;
2827
2828 case ATA_DNXFER_40C:
2829 udma_mask &= ATA_UDMA_MASK_40C;
2830 break;
2831
2832 case ATA_DNXFER_FORCE_PIO0:
2833 pio_mask &= 1;
2834 case ATA_DNXFER_FORCE_PIO:
2835 mwdma_mask = 0;
2836 udma_mask = 0;
2837 break;
2838
458337db
TH
2839 default:
2840 BUG();
2841 }
2842
2843 xfer_mask &= ata_pack_xfermask(pio_mask, mwdma_mask, udma_mask);
2844
2845 if (!(xfer_mask & ATA_MASK_PIO) || xfer_mask == orig_mask)
2846 return -ENOENT;
2847
2848 if (!quiet) {
2849 if (xfer_mask & (ATA_MASK_MWDMA | ATA_MASK_UDMA))
2850 snprintf(buf, sizeof(buf), "%s:%s",
2851 ata_mode_string(xfer_mask),
2852 ata_mode_string(xfer_mask & ATA_MASK_PIO));
2853 else
2854 snprintf(buf, sizeof(buf), "%s",
2855 ata_mode_string(xfer_mask));
2856
2857 ata_dev_printk(dev, KERN_WARNING,
2858 "limiting speed to %s\n", buf);
2859 }
cf176e1a
TH
2860
2861 ata_unpack_xfermask(xfer_mask, &dev->pio_mask, &dev->mwdma_mask,
2862 &dev->udma_mask);
2863
cf176e1a 2864 return 0;
cf176e1a
TH
2865}
2866
3373efd8 2867static int ata_dev_set_mode(struct ata_device *dev)
1da177e4 2868{
9af5c9c9 2869 struct ata_eh_context *ehc = &dev->link->eh_context;
83206a29
TH
2870 unsigned int err_mask;
2871 int rc;
1da177e4 2872
e8384607 2873 dev->flags &= ~ATA_DFLAG_PIO;
1da177e4
LT
2874 if (dev->xfer_shift == ATA_SHIFT_PIO)
2875 dev->flags |= ATA_DFLAG_PIO;
2876
3373efd8 2877 err_mask = ata_dev_set_xfermode(dev);
11750a40
A
2878 /* Old CFA may refuse this command, which is just fine */
2879 if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
2880 err_mask &= ~AC_ERR_DEV;
0bc2a79a
AC
2881 /* Some very old devices and some bad newer ones fail any kind of
2882 SET_XFERMODE request but support PIO0-2 timings and no IORDY */
2883 if (dev->xfer_shift == ATA_SHIFT_PIO && !ata_id_has_iordy(dev->id) &&
2884 dev->pio_mode <= XFER_PIO_2)
2885 err_mask &= ~AC_ERR_DEV;
83206a29 2886 if (err_mask) {
f15a1daf
TH
2887 ata_dev_printk(dev, KERN_ERR, "failed to set xfermode "
2888 "(err_mask=0x%x)\n", err_mask);
83206a29
TH
2889 return -EIO;
2890 }
1da177e4 2891
baa1e78a 2892 ehc->i.flags |= ATA_EHI_POST_SETMODE;
422c9daa 2893 rc = ata_dev_revalidate(dev, ATA_DEV_UNKNOWN, 0);
baa1e78a 2894 ehc->i.flags &= ~ATA_EHI_POST_SETMODE;
5eb45c02 2895 if (rc)
83206a29 2896 return rc;
48a8a14f 2897
23e71c3d
TH
2898 DPRINTK("xfer_shift=%u, xfer_mode=0x%x\n",
2899 dev->xfer_shift, (int)dev->xfer_mode);
1da177e4 2900
f15a1daf
TH
2901 ata_dev_printk(dev, KERN_INFO, "configured for %s\n",
2902 ata_mode_string(ata_xfer_mode2mask(dev->xfer_mode)));
83206a29 2903 return 0;
1da177e4
LT
2904}
2905
1da177e4 2906/**
04351821 2907 * ata_do_set_mode - Program timings and issue SET FEATURES - XFER
0260731f 2908 * @link: link on which timings will be programmed
e82cbdb9 2909 * @r_failed_dev: out paramter for failed device
1da177e4 2910 *
04351821
A
2911 * Standard implementation of the function used to tune and set
2912 * ATA device disk transfer mode (PIO3, UDMA6, etc.). If
2913 * ata_dev_set_mode() fails, pointer to the failing device is
e82cbdb9 2914 * returned in @r_failed_dev.
780a87f7 2915 *
1da177e4 2916 * LOCKING:
0cba632b 2917 * PCI/etc. bus probe sem.
e82cbdb9
TH
2918 *
2919 * RETURNS:
2920 * 0 on success, negative errno otherwise
1da177e4 2921 */
04351821 2922
0260731f 2923int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
1da177e4 2924{
0260731f 2925 struct ata_port *ap = link->ap;
e8e0619f 2926 struct ata_device *dev;
f58229f8 2927 int rc = 0, used_dma = 0, found = 0;
3adcebb2 2928
a6d5a51c 2929 /* step 1: calculate xfer_mask */
f58229f8 2930 ata_link_for_each_dev(dev, link) {
acf356b1 2931 unsigned int pio_mask, dma_mask;
b3a70601 2932 unsigned int mode_mask;
a6d5a51c 2933
e1211e3f 2934 if (!ata_dev_enabled(dev))
a6d5a51c
TH
2935 continue;
2936
b3a70601
AC
2937 mode_mask = ATA_DMA_MASK_ATA;
2938 if (dev->class == ATA_DEV_ATAPI)
2939 mode_mask = ATA_DMA_MASK_ATAPI;
2940 else if (ata_id_is_cfa(dev->id))
2941 mode_mask = ATA_DMA_MASK_CFA;
2942
3373efd8 2943 ata_dev_xfermask(dev);
1da177e4 2944
acf356b1
TH
2945 pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0);
2946 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask);
b3a70601
AC
2947
2948 if (libata_dma_mask & mode_mask)
2949 dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask);
2950 else
2951 dma_mask = 0;
2952
acf356b1
TH
2953 dev->pio_mode = ata_xfer_mask2mode(pio_mask);
2954 dev->dma_mode = ata_xfer_mask2mode(dma_mask);
5444a6f4 2955
4f65977d 2956 found = 1;
5444a6f4
AC
2957 if (dev->dma_mode)
2958 used_dma = 1;
a6d5a51c 2959 }
4f65977d 2960 if (!found)
e82cbdb9 2961 goto out;
a6d5a51c
TH
2962
2963 /* step 2: always set host PIO timings */
f58229f8 2964 ata_link_for_each_dev(dev, link) {
e8e0619f
TH
2965 if (!ata_dev_enabled(dev))
2966 continue;
2967
2968 if (!dev->pio_mode) {
f15a1daf 2969 ata_dev_printk(dev, KERN_WARNING, "no PIO support\n");
e8e0619f 2970 rc = -EINVAL;
e82cbdb9 2971 goto out;
e8e0619f
TH
2972 }
2973
2974 dev->xfer_mode = dev->pio_mode;
2975 dev->xfer_shift = ATA_SHIFT_PIO;
2976 if (ap->ops->set_piomode)
2977 ap->ops->set_piomode(ap, dev);
2978 }
1da177e4 2979
a6d5a51c 2980 /* step 3: set host DMA timings */
f58229f8 2981 ata_link_for_each_dev(dev, link) {
e8e0619f
TH
2982 if (!ata_dev_enabled(dev) || !dev->dma_mode)
2983 continue;
2984
2985 dev->xfer_mode = dev->dma_mode;
2986 dev->xfer_shift = ata_xfer_mode2shift(dev->dma_mode);
2987 if (ap->ops->set_dmamode)
2988 ap->ops->set_dmamode(ap, dev);
2989 }
1da177e4
LT
2990
2991 /* step 4: update devices' xfer mode */
f58229f8 2992 ata_link_for_each_dev(dev, link) {
18d90deb 2993 /* don't update suspended devices' xfer mode */
9666f400 2994 if (!ata_dev_enabled(dev))
83206a29
TH
2995 continue;
2996
3373efd8 2997 rc = ata_dev_set_mode(dev);
5bbc53f4 2998 if (rc)
e82cbdb9 2999 goto out;
83206a29 3000 }
1da177e4 3001
e8e0619f
TH
3002 /* Record simplex status. If we selected DMA then the other
3003 * host channels are not permitted to do so.
5444a6f4 3004 */
cca3974e 3005 if (used_dma && (ap->host->flags & ATA_HOST_SIMPLEX))
032af1ce 3006 ap->host->simplex_claimed = ap;
5444a6f4 3007
e82cbdb9
TH
3008 out:
3009 if (rc)
3010 *r_failed_dev = dev;
3011 return rc;
1da177e4
LT
3012}
3013
04351821
A
3014/**
3015 * ata_set_mode - Program timings and issue SET FEATURES - XFER
0260731f 3016 * @link: link on which timings will be programmed
04351821
A
3017 * @r_failed_dev: out paramter for failed device
3018 *
3019 * Set ATA device disk transfer mode (PIO3, UDMA6, etc.). If
3020 * ata_set_mode() fails, pointer to the failing device is
3021 * returned in @r_failed_dev.
3022 *
3023 * LOCKING:
3024 * PCI/etc. bus probe sem.
3025 *
3026 * RETURNS:
3027 * 0 on success, negative errno otherwise
3028 */
0260731f 3029int ata_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
04351821 3030{
0260731f
TH
3031 struct ata_port *ap = link->ap;
3032
04351821
A
3033 /* has private set_mode? */
3034 if (ap->ops->set_mode)
0260731f
TH
3035 return ap->ops->set_mode(link, r_failed_dev);
3036 return ata_do_set_mode(link, r_failed_dev);
04351821
A
3037}
3038
1fdffbce
JG
3039/**
3040 * ata_tf_to_host - issue ATA taskfile to host controller
3041 * @ap: port to which command is being issued
3042 * @tf: ATA taskfile register set
3043 *
3044 * Issues ATA taskfile register set to ATA host controller,
3045 * with proper synchronization with interrupt handler and
3046 * other threads.
3047 *
3048 * LOCKING:
cca3974e 3049 * spin_lock_irqsave(host lock)
1fdffbce
JG
3050 */
3051
3052static inline void ata_tf_to_host(struct ata_port *ap,
3053 const struct ata_taskfile *tf)
3054{
3055 ap->ops->tf_load(ap, tf);
3056 ap->ops->exec_command(ap, tf);
3057}
3058
1da177e4
LT
3059/**
3060 * ata_busy_sleep - sleep until BSY clears, or timeout
3061 * @ap: port containing status register to be polled
3062 * @tmout_pat: impatience timeout
3063 * @tmout: overall timeout
3064 *
780a87f7
JG
3065 * Sleep until ATA Status register bit BSY clears,
3066 * or a timeout occurs.
3067 *
d1adc1bb
TH
3068 * LOCKING:
3069 * Kernel thread context (may sleep).
3070 *
3071 * RETURNS:
3072 * 0 on success, -errno otherwise.
1da177e4 3073 */
d1adc1bb
TH
3074int ata_busy_sleep(struct ata_port *ap,
3075 unsigned long tmout_pat, unsigned long tmout)
1da177e4
LT
3076{
3077 unsigned long timer_start, timeout;
3078 u8 status;
3079
3080 status = ata_busy_wait(ap, ATA_BUSY, 300);
3081 timer_start = jiffies;
3082 timeout = timer_start + tmout_pat;
d1adc1bb
TH
3083 while (status != 0xff && (status & ATA_BUSY) &&
3084 time_before(jiffies, timeout)) {
1da177e4
LT
3085 msleep(50);
3086 status = ata_busy_wait(ap, ATA_BUSY, 3);
3087 }
3088
d1adc1bb 3089 if (status != 0xff && (status & ATA_BUSY))
f15a1daf 3090 ata_port_printk(ap, KERN_WARNING,
35aa7a43
JG
3091 "port is slow to respond, please be patient "
3092 "(Status 0x%x)\n", status);
1da177e4
LT
3093
3094 timeout = timer_start + tmout;
d1adc1bb
TH
3095 while (status != 0xff && (status & ATA_BUSY) &&
3096 time_before(jiffies, timeout)) {
1da177e4
LT
3097 msleep(50);
3098 status = ata_chk_status(ap);
3099 }
3100
d1adc1bb
TH
3101 if (status == 0xff)
3102 return -ENODEV;
3103
1da177e4 3104 if (status & ATA_BUSY) {
f15a1daf 3105 ata_port_printk(ap, KERN_ERR, "port failed to respond "
35aa7a43
JG
3106 "(%lu secs, Status 0x%x)\n",
3107 tmout / HZ, status);
d1adc1bb 3108 return -EBUSY;
1da177e4
LT
3109 }
3110
3111 return 0;
3112}
3113
d4b2bab4
TH
3114/**
3115 * ata_wait_ready - sleep until BSY clears, or timeout
3116 * @ap: port containing status register to be polled
3117 * @deadline: deadline jiffies for the operation
3118 *
3119 * Sleep until ATA Status register bit BSY clears, or timeout
3120 * occurs.
3121 *
3122 * LOCKING:
3123 * Kernel thread context (may sleep).
3124 *
3125 * RETURNS:
3126 * 0 on success, -errno otherwise.
3127 */
3128int ata_wait_ready(struct ata_port *ap, unsigned long deadline)
3129{
3130 unsigned long start = jiffies;
3131 int warned = 0;
3132
3133 while (1) {
3134 u8 status = ata_chk_status(ap);
3135 unsigned long now = jiffies;
3136
3137 if (!(status & ATA_BUSY))
3138 return 0;
936fd732 3139 if (!ata_link_online(&ap->link) && status == 0xff)
d4b2bab4
TH
3140 return -ENODEV;
3141 if (time_after(now, deadline))
3142 return -EBUSY;
3143
3144 if (!warned && time_after(now, start + 5 * HZ) &&
3145 (deadline - now > 3 * HZ)) {
3146 ata_port_printk(ap, KERN_WARNING,
3147 "port is slow to respond, please be patient "
3148 "(Status 0x%x)\n", status);
3149 warned = 1;
3150 }
3151
3152 msleep(50);
3153 }
3154}
3155
3156static int ata_bus_post_reset(struct ata_port *ap, unsigned int devmask,
3157 unsigned long deadline)
1da177e4
LT
3158{
3159 struct ata_ioports *ioaddr = &ap->ioaddr;
3160 unsigned int dev0 = devmask & (1 << 0);
3161 unsigned int dev1 = devmask & (1 << 1);
9b89391c 3162 int rc, ret = 0;
1da177e4
LT
3163
3164 /* if device 0 was found in ata_devchk, wait for its
3165 * BSY bit to clear
3166 */
d4b2bab4
TH
3167 if (dev0) {
3168 rc = ata_wait_ready(ap, deadline);
9b89391c
TH
3169 if (rc) {
3170 if (rc != -ENODEV)
3171 return rc;
3172 ret = rc;
3173 }
d4b2bab4 3174 }
1da177e4 3175
e141d999
TH
3176 /* if device 1 was found in ata_devchk, wait for register
3177 * access briefly, then wait for BSY to clear.
1da177e4 3178 */
e141d999
TH
3179 if (dev1) {
3180 int i;
1da177e4
LT
3181
3182 ap->ops->dev_select(ap, 1);
e141d999
TH
3183
3184 /* Wait for register access. Some ATAPI devices fail
3185 * to set nsect/lbal after reset, so don't waste too
3186 * much time on it. We're gonna wait for !BSY anyway.
3187 */
3188 for (i = 0; i < 2; i++) {
3189 u8 nsect, lbal;
3190
3191 nsect = ioread8(ioaddr->nsect_addr);
3192 lbal = ioread8(ioaddr->lbal_addr);
3193 if ((nsect == 1) && (lbal == 1))
3194 break;
3195 msleep(50); /* give drive a breather */
3196 }
3197
d4b2bab4 3198 rc = ata_wait_ready(ap, deadline);
9b89391c
TH
3199 if (rc) {
3200 if (rc != -ENODEV)
3201 return rc;
3202 ret = rc;
3203 }
d4b2bab4 3204 }
1da177e4
LT
3205
3206 /* is all this really necessary? */
3207 ap->ops->dev_select(ap, 0);
3208 if (dev1)
3209 ap->ops->dev_select(ap, 1);
3210 if (dev0)
3211 ap->ops->dev_select(ap, 0);
d4b2bab4 3212
9b89391c 3213 return ret;
1da177e4
LT
3214}
3215
d4b2bab4
TH
3216static int ata_bus_softreset(struct ata_port *ap, unsigned int devmask,
3217 unsigned long deadline)
1da177e4
LT
3218{
3219 struct ata_ioports *ioaddr = &ap->ioaddr;
681c80b5
AC
3220 struct ata_device *dev;
3221 int i = 0;
1da177e4 3222
44877b4e 3223 DPRINTK("ata%u: bus reset via SRST\n", ap->print_id);
1da177e4
LT
3224
3225 /* software reset. causes dev0 to be selected */
0d5ff566
TH
3226 iowrite8(ap->ctl, ioaddr->ctl_addr);
3227 udelay(20); /* FIXME: flush */
3228 iowrite8(ap->ctl | ATA_SRST, ioaddr->ctl_addr);
3229 udelay(20); /* FIXME: flush */
3230 iowrite8(ap->ctl, ioaddr->ctl_addr);
1da177e4 3231
681c80b5
AC
3232 /* If we issued an SRST then an ATA drive (not ATAPI)
3233 * may have changed configuration and be in PIO0 timing. If
3234 * we did a hard reset (or are coming from power on) this is
3235 * true for ATA or ATAPI. Until we've set a suitable controller
3236 * mode we should not touch the bus as we may be talking too fast.
3237 */
3238
3239 ata_link_for_each_dev(dev, &ap->link)
3240 dev->pio_mode = XFER_PIO_0;
3241
3242 /* If the controller has a pio mode setup function then use
3243 it to set the chipset to rights. Don't touch the DMA setup
3244 as that will be dealt with when revalidating */
3245 if (ap->ops->set_piomode) {
3246 ata_link_for_each_dev(dev, &ap->link)
3247 if (devmask & (1 << i++))
3248 ap->ops->set_piomode(ap, dev);
3249 }
3250
1da177e4
LT
3251 /* spec mandates ">= 2ms" before checking status.
3252 * We wait 150ms, because that was the magic delay used for
3253 * ATAPI devices in Hale Landis's ATADRVR, for the period of time
3254 * between when the ATA command register is written, and then
3255 * status is checked. Because waiting for "a while" before
3256 * checking status is fine, post SRST, we perform this magic
3257 * delay here as well.
09c7ad79
AC
3258 *
3259 * Old drivers/ide uses the 2mS rule and then waits for ready
1da177e4
LT
3260 */
3261 msleep(150);
3262
2e9edbf8 3263 /* Before we perform post reset processing we want to see if
298a41ca
TH
3264 * the bus shows 0xFF because the odd clown forgets the D7
3265 * pulldown resistor.
3266 */
d1adc1bb 3267 if (ata_check_status(ap) == 0xFF)
9b89391c 3268 return -ENODEV;
09c7ad79 3269
d4b2bab4 3270 return ata_bus_post_reset(ap, devmask, deadline);
1da177e4
LT
3271}
3272
3273/**
3274 * ata_bus_reset - reset host port and associated ATA channel
3275 * @ap: port to reset
3276 *
3277 * This is typically the first time we actually start issuing
3278 * commands to the ATA channel. We wait for BSY to clear, then
3279 * issue EXECUTE DEVICE DIAGNOSTIC command, polling for its
3280 * result. Determine what devices, if any, are on the channel
3281 * by looking at the device 0/1 error register. Look at the signature
3282 * stored in each device's taskfile registers, to determine if
3283 * the device is ATA or ATAPI.
3284 *
3285 * LOCKING:
0cba632b 3286 * PCI/etc. bus probe sem.
cca3974e 3287 * Obtains host lock.
1da177e4
LT
3288 *
3289 * SIDE EFFECTS:
198e0fed 3290 * Sets ATA_FLAG_DISABLED if bus reset fails.
1da177e4
LT
3291 */
3292
3293void ata_bus_reset(struct ata_port *ap)
3294{
9af5c9c9 3295 struct ata_device *device = ap->link.device;
1da177e4
LT
3296 struct ata_ioports *ioaddr = &ap->ioaddr;
3297 unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
3298 u8 err;
aec5c3c1 3299 unsigned int dev0, dev1 = 0, devmask = 0;
9b89391c 3300 int rc;
1da177e4 3301
44877b4e 3302 DPRINTK("ENTER, host %u, port %u\n", ap->print_id, ap->port_no);
1da177e4
LT
3303
3304 /* determine if device 0/1 are present */
3305 if (ap->flags & ATA_FLAG_SATA_RESET)
3306 dev0 = 1;
3307 else {
3308 dev0 = ata_devchk(ap, 0);
3309 if (slave_possible)
3310 dev1 = ata_devchk(ap, 1);
3311 }
3312
3313 if (dev0)
3314 devmask |= (1 << 0);
3315 if (dev1)
3316 devmask |= (1 << 1);
3317
3318 /* select device 0 again */
3319 ap->ops->dev_select(ap, 0);
3320
3321 /* issue bus reset */
9b89391c
TH
3322 if (ap->flags & ATA_FLAG_SRST) {
3323 rc = ata_bus_softreset(ap, devmask, jiffies + 40 * HZ);
3324 if (rc && rc != -ENODEV)
aec5c3c1 3325 goto err_out;
9b89391c 3326 }
1da177e4
LT
3327
3328 /*
3329 * determine by signature whether we have ATA or ATAPI devices
3330 */
3f19859e 3331 device[0].class = ata_dev_try_classify(&device[0], dev0, &err);
1da177e4 3332 if ((slave_possible) && (err != 0x81))
3f19859e 3333 device[1].class = ata_dev_try_classify(&device[1], dev1, &err);
1da177e4 3334
1da177e4 3335 /* is double-select really necessary? */
9af5c9c9 3336 if (device[1].class != ATA_DEV_NONE)
1da177e4 3337 ap->ops->dev_select(ap, 1);
9af5c9c9 3338 if (device[0].class != ATA_DEV_NONE)
1da177e4
LT
3339 ap->ops->dev_select(ap, 0);
3340
3341 /* if no devices were detected, disable this port */
9af5c9c9
TH
3342 if ((device[0].class == ATA_DEV_NONE) &&
3343 (device[1].class == ATA_DEV_NONE))
1da177e4
LT
3344 goto err_out;
3345
3346 if (ap->flags & (ATA_FLAG_SATA_RESET | ATA_FLAG_SRST)) {
3347 /* set up device control for ATA_FLAG_SATA_RESET */
0d5ff566 3348 iowrite8(ap->ctl, ioaddr->ctl_addr);
1da177e4
LT
3349 }
3350
3351 DPRINTK("EXIT\n");
3352 return;
3353
3354err_out:
f15a1daf 3355 ata_port_printk(ap, KERN_ERR, "disabling port\n");
ac8869d5 3356 ata_port_disable(ap);
1da177e4
LT
3357
3358 DPRINTK("EXIT\n");
3359}
3360
d7bb4cc7 3361/**
936fd732
TH
3362 * sata_link_debounce - debounce SATA phy status
3363 * @link: ATA link to debounce SATA phy status for
d7bb4cc7 3364 * @params: timing parameters { interval, duratinon, timeout } in msec
d4b2bab4 3365 * @deadline: deadline jiffies for the operation
d7bb4cc7 3366 *
936fd732 3367* Make sure SStatus of @link reaches stable state, determined by
d7bb4cc7
TH
3368 * holding the same value where DET is not 1 for @duration polled
3369 * every @interval, before @timeout. Timeout constraints the
d4b2bab4
TH
3370 * beginning of the stable state. Because DET gets stuck at 1 on
3371 * some controllers after hot unplugging, this functions waits
d7bb4cc7
TH
3372 * until timeout then returns 0 if DET is stable at 1.
3373 *
d4b2bab4
TH
3374 * @timeout is further limited by @deadline. The sooner of the
3375 * two is used.
3376 *
d7bb4cc7
TH
3377 * LOCKING:
3378 * Kernel thread context (may sleep)
3379 *
3380 * RETURNS:
3381 * 0 on success, -errno on failure.
3382 */
936fd732
TH
3383int sata_link_debounce(struct ata_link *link, const unsigned long *params,
3384 unsigned long deadline)
7a7921e8 3385{
d7bb4cc7 3386 unsigned long interval_msec = params[0];
d4b2bab4
TH
3387 unsigned long duration = msecs_to_jiffies(params[1]);
3388 unsigned long last_jiffies, t;
d7bb4cc7
TH
3389 u32 last, cur;
3390 int rc;
3391
d4b2bab4
TH
3392 t = jiffies + msecs_to_jiffies(params[2]);
3393 if (time_before(t, deadline))
3394 deadline = t;
3395
936fd732 3396 if ((rc = sata_scr_read(link, SCR_STATUS, &cur)))
d7bb4cc7
TH
3397 return rc;
3398 cur &= 0xf;
3399
3400 last = cur;
3401 last_jiffies = jiffies;
3402
3403 while (1) {
3404 msleep(interval_msec);
936fd732 3405 if ((rc = sata_scr_read(link, SCR_STATUS, &cur)))
d7bb4cc7
TH
3406 return rc;
3407 cur &= 0xf;
3408
3409 /* DET stable? */
3410 if (cur == last) {
d4b2bab4 3411 if (cur == 1 && time_before(jiffies, deadline))
d7bb4cc7
TH
3412 continue;
3413 if (time_after(jiffies, last_jiffies + duration))
3414 return 0;
3415 continue;
3416 }
3417
3418 /* unstable, start over */
3419 last = cur;
3420 last_jiffies = jiffies;
3421
f1545154
TH
3422 /* Check deadline. If debouncing failed, return
3423 * -EPIPE to tell upper layer to lower link speed.
3424 */
d4b2bab4 3425 if (time_after(jiffies, deadline))
f1545154 3426 return -EPIPE;
d7bb4cc7
TH
3427 }
3428}
3429
3430/**
936fd732
TH
3431 * sata_link_resume - resume SATA link
3432 * @link: ATA link to resume SATA
d7bb4cc7 3433 * @params: timing parameters { interval, duratinon, timeout } in msec
d4b2bab4 3434 * @deadline: deadline jiffies for the operation
d7bb4cc7 3435 *
936fd732 3436 * Resume SATA phy @link and debounce it.
d7bb4cc7
TH
3437 *
3438 * LOCKING:
3439 * Kernel thread context (may sleep)
3440 *
3441 * RETURNS:
3442 * 0 on success, -errno on failure.
3443 */
936fd732
TH
3444int sata_link_resume(struct ata_link *link, const unsigned long *params,
3445 unsigned long deadline)
d7bb4cc7
TH
3446{
3447 u32 scontrol;
81952c54
TH
3448 int rc;
3449
936fd732 3450 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
81952c54 3451 return rc;
7a7921e8 3452
852ee16a 3453 scontrol = (scontrol & 0x0f0) | 0x300;
81952c54 3454
936fd732 3455 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol)))
81952c54 3456 return rc;
7a7921e8 3457
d7bb4cc7
TH
3458 /* Some PHYs react badly if SStatus is pounded immediately
3459 * after resuming. Delay 200ms before debouncing.
3460 */
3461 msleep(200);
7a7921e8 3462
936fd732 3463 return sata_link_debounce(link, params, deadline);
7a7921e8
TH
3464}
3465
f5914a46
TH
3466/**
3467 * ata_std_prereset - prepare for reset
cc0680a5 3468 * @link: ATA link to be reset
d4b2bab4 3469 * @deadline: deadline jiffies for the operation
f5914a46 3470 *
cc0680a5 3471 * @link is about to be reset. Initialize it. Failure from
b8cffc6a
TH
3472 * prereset makes libata abort whole reset sequence and give up
3473 * that port, so prereset should be best-effort. It does its
3474 * best to prepare for reset sequence but if things go wrong, it
3475 * should just whine, not fail.
f5914a46
TH
3476 *
3477 * LOCKING:
3478 * Kernel thread context (may sleep)
3479 *
3480 * RETURNS:
3481 * 0 on success, -errno otherwise.
3482 */
cc0680a5 3483int ata_std_prereset(struct ata_link *link, unsigned long deadline)
f5914a46 3484{
cc0680a5 3485 struct ata_port *ap = link->ap;
936fd732 3486 struct ata_eh_context *ehc = &link->eh_context;
e9c83914 3487 const unsigned long *timing = sata_ehc_deb_timing(ehc);
f5914a46
TH
3488 int rc;
3489
31daabda 3490 /* handle link resume */
28324304 3491 if ((ehc->i.flags & ATA_EHI_RESUME_LINK) &&
0c88758b 3492 (link->flags & ATA_LFLAG_HRST_TO_RESUME))
28324304
TH
3493 ehc->i.action |= ATA_EH_HARDRESET;
3494
633273a3
TH
3495 /* Some PMPs don't work with only SRST, force hardreset if PMP
3496 * is supported.
3497 */
3498 if (ap->flags & ATA_FLAG_PMP)
3499 ehc->i.action |= ATA_EH_HARDRESET;
3500
f5914a46
TH
3501 /* if we're about to do hardreset, nothing more to do */
3502 if (ehc->i.action & ATA_EH_HARDRESET)
3503 return 0;
3504
936fd732 3505 /* if SATA, resume link */
a16abc0b 3506 if (ap->flags & ATA_FLAG_SATA) {
936fd732 3507 rc = sata_link_resume(link, timing, deadline);
b8cffc6a
TH
3508 /* whine about phy resume failure but proceed */
3509 if (rc && rc != -EOPNOTSUPP)
cc0680a5 3510 ata_link_printk(link, KERN_WARNING, "failed to resume "
f5914a46 3511 "link for reset (errno=%d)\n", rc);
f5914a46
TH
3512 }
3513
3514 /* Wait for !BSY if the controller can wait for the first D2H
3515 * Reg FIS and we don't know that no device is attached.
3516 */
0c88758b 3517 if (!(link->flags & ATA_LFLAG_SKIP_D2H_BSY) && !ata_link_offline(link)) {
b8cffc6a 3518 rc = ata_wait_ready(ap, deadline);
6dffaf61 3519 if (rc && rc != -ENODEV) {
cc0680a5 3520 ata_link_printk(link, KERN_WARNING, "device not ready "
b8cffc6a
TH
3521 "(errno=%d), forcing hardreset\n", rc);
3522 ehc->i.action |= ATA_EH_HARDRESET;
3523 }
3524 }
f5914a46
TH
3525
3526 return 0;
3527}
3528
c2bd5804
TH
3529/**
3530 * ata_std_softreset - reset host port via ATA SRST
cc0680a5 3531 * @link: ATA link to reset
c2bd5804 3532 * @classes: resulting classes of attached devices
d4b2bab4 3533 * @deadline: deadline jiffies for the operation
c2bd5804 3534 *
52783c5d 3535 * Reset host port using ATA SRST.
c2bd5804
TH
3536 *
3537 * LOCKING:
3538 * Kernel thread context (may sleep)
3539 *
3540 * RETURNS:
3541 * 0 on success, -errno otherwise.
3542 */
cc0680a5 3543int ata_std_softreset(struct ata_link *link, unsigned int *classes,
d4b2bab4 3544 unsigned long deadline)
c2bd5804 3545{
cc0680a5 3546 struct ata_port *ap = link->ap;
c2bd5804 3547 unsigned int slave_possible = ap->flags & ATA_FLAG_SLAVE_POSS;
d4b2bab4
TH
3548 unsigned int devmask = 0;
3549 int rc;
c2bd5804
TH
3550 u8 err;
3551
3552 DPRINTK("ENTER\n");
3553
936fd732 3554 if (ata_link_offline(link)) {
3a39746a
TH
3555 classes[0] = ATA_DEV_NONE;
3556 goto out;
3557 }
3558
c2bd5804
TH
3559 /* determine if device 0/1 are present */
3560 if (ata_devchk(ap, 0))
3561 devmask |= (1 << 0);
3562 if (slave_possible && ata_devchk(ap, 1))
3563 devmask |= (1 << 1);
3564
c2bd5804
TH
3565 /* select device 0 again */
3566 ap->ops->dev_select(ap, 0);
3567
3568 /* issue bus reset */
3569 DPRINTK("about to softreset, devmask=%x\n", devmask);
d4b2bab4 3570 rc = ata_bus_softreset(ap, devmask, deadline);
9b89391c 3571 /* if link is occupied, -ENODEV too is an error */
936fd732 3572 if (rc && (rc != -ENODEV || sata_scr_valid(link))) {
cc0680a5 3573 ata_link_printk(link, KERN_ERR, "SRST failed (errno=%d)\n", rc);
d4b2bab4 3574 return rc;
c2bd5804
TH
3575 }
3576
3577 /* determine by signature whether we have ATA or ATAPI devices */
3f19859e
TH
3578 classes[0] = ata_dev_try_classify(&link->device[0],
3579 devmask & (1 << 0), &err);
c2bd5804 3580 if (slave_possible && err != 0x81)
3f19859e
TH
3581 classes[1] = ata_dev_try_classify(&link->device[1],
3582 devmask & (1 << 1), &err);
c2bd5804 3583
3a39746a 3584 out:
c2bd5804
TH
3585 DPRINTK("EXIT, classes[0]=%u [1]=%u\n", classes[0], classes[1]);
3586 return 0;
3587}
3588
3589/**
cc0680a5
TH
3590 * sata_link_hardreset - reset link via SATA phy reset
3591 * @link: link to reset
b6103f6d 3592 * @timing: timing parameters { interval, duratinon, timeout } in msec
d4b2bab4 3593 * @deadline: deadline jiffies for the operation
c2bd5804 3594 *
cc0680a5 3595 * SATA phy-reset @link using DET bits of SControl register.
c2bd5804
TH
3596 *
3597 * LOCKING:
3598 * Kernel thread context (may sleep)
3599 *
3600 * RETURNS:
3601 * 0 on success, -errno otherwise.
3602 */
cc0680a5 3603int sata_link_hardreset(struct ata_link *link, const unsigned long *timing,
d4b2bab4 3604 unsigned long deadline)
c2bd5804 3605{
852ee16a 3606 u32 scontrol;
81952c54 3607 int rc;
852ee16a 3608
c2bd5804
TH
3609 DPRINTK("ENTER\n");
3610
936fd732 3611 if (sata_set_spd_needed(link)) {
1c3fae4d
TH
3612 /* SATA spec says nothing about how to reconfigure
3613 * spd. To be on the safe side, turn off phy during
3614 * reconfiguration. This works for at least ICH7 AHCI
3615 * and Sil3124.
3616 */
936fd732 3617 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
b6103f6d 3618 goto out;
81952c54 3619
a34b6fc0 3620 scontrol = (scontrol & 0x0f0) | 0x304;
81952c54 3621
936fd732 3622 if ((rc = sata_scr_write(link, SCR_CONTROL, scontrol)))
b6103f6d 3623 goto out;
1c3fae4d 3624
936fd732 3625 sata_set_spd(link);
1c3fae4d
TH
3626 }
3627
3628 /* issue phy wake/reset */
936fd732 3629 if ((rc = sata_scr_read(link, SCR_CONTROL, &scontrol)))
b6103f6d 3630 goto out;
81952c54 3631
852ee16a 3632 scontrol = (scontrol & 0x0f0) | 0x301;
81952c54 3633
936fd732 3634 if ((rc = sata_scr_write_flush(link, SCR_CONTROL, scontrol)))
b6103f6d 3635 goto out;
c2bd5804 3636
1c3fae4d 3637 /* Couldn't find anything in SATA I/II specs, but AHCI-1.1
c2bd5804
TH
3638 * 10.4.2 says at least 1 ms.
3639 */
3640 msleep(1);
3641
936fd732
TH
3642 /* bring link back */
3643 rc = sata_link_resume(link, timing, deadline);
b6103f6d
TH
3644 out:
3645 DPRINTK("EXIT, rc=%d\n", rc);
3646 return rc;
3647}
3648
3649/**
3650 * sata_std_hardreset - reset host port via SATA phy reset
cc0680a5 3651 * @link: link to reset
b6103f6d 3652 * @class: resulting class of attached device
d4b2bab4 3653 * @deadline: deadline jiffies for the operation
b6103f6d
TH
3654 *
3655 * SATA phy-reset host port using DET bits of SControl register,
3656 * wait for !BSY and classify the attached device.
3657 *
3658 * LOCKING:
3659 * Kernel thread context (may sleep)
3660 *
3661 * RETURNS:
3662 * 0 on success, -errno otherwise.
3663 */
cc0680a5 3664int sata_std_hardreset(struct ata_link *link, unsigned int *class,
d4b2bab4 3665 unsigned long deadline)
b6103f6d 3666{
cc0680a5 3667 struct ata_port *ap = link->ap;
936fd732 3668 const unsigned long *timing = sata_ehc_deb_timing(&link->eh_context);
b6103f6d
TH
3669 int rc;
3670
3671 DPRINTK("ENTER\n");
3672
3673 /* do hardreset */
cc0680a5 3674 rc = sata_link_hardreset(link, timing, deadline);
b6103f6d 3675 if (rc) {
cc0680a5 3676 ata_link_printk(link, KERN_ERR,
b6103f6d
TH
3677 "COMRESET failed (errno=%d)\n", rc);
3678 return rc;
3679 }
c2bd5804 3680
c2bd5804 3681 /* TODO: phy layer with polling, timeouts, etc. */
936fd732 3682 if (ata_link_offline(link)) {
c2bd5804
TH
3683 *class = ATA_DEV_NONE;
3684 DPRINTK("EXIT, link offline\n");
3685 return 0;
3686 }
3687
34fee227
TH
3688 /* wait a while before checking status, see SRST for more info */
3689 msleep(150);
3690
633273a3
TH
3691 /* If PMP is supported, we have to do follow-up SRST. Note
3692 * that some PMPs don't send D2H Reg FIS after hardreset at
3693 * all if the first port is empty. Wait for it just for a
3694 * second and request follow-up SRST.
3695 */
3696 if (ap->flags & ATA_FLAG_PMP) {
3697 ata_wait_ready(ap, jiffies + HZ);
3698 return -EAGAIN;
3699 }
3700
d4b2bab4 3701 rc = ata_wait_ready(ap, deadline);
9b89391c
TH
3702 /* link occupied, -ENODEV too is an error */
3703 if (rc) {
cc0680a5 3704 ata_link_printk(link, KERN_ERR,
d4b2bab4
TH
3705 "COMRESET failed (errno=%d)\n", rc);
3706 return rc;
c2bd5804
TH
3707 }
3708
3a39746a
TH
3709 ap->ops->dev_select(ap, 0); /* probably unnecessary */
3710
3f19859e 3711 *class = ata_dev_try_classify(link->device, 1, NULL);
c2bd5804
TH
3712
3713 DPRINTK("EXIT, class=%u\n", *class);
3714 return 0;
3715}
3716
3717/**
3718 * ata_std_postreset - standard postreset callback
cc0680a5 3719 * @link: the target ata_link
c2bd5804
TH
3720 * @classes: classes of attached devices
3721 *
3722 * This function is invoked after a successful reset. Note that
3723 * the device might have been reset more than once using
3724 * different reset methods before postreset is invoked.
c2bd5804 3725 *
c2bd5804
TH
3726 * LOCKING:
3727 * Kernel thread context (may sleep)
3728 */
cc0680a5 3729void ata_std_postreset(struct ata_link *link, unsigned int *classes)
c2bd5804 3730{
cc0680a5 3731 struct ata_port *ap = link->ap;
dc2b3515
TH
3732 u32 serror;
3733
c2bd5804
TH
3734 DPRINTK("ENTER\n");
3735
c2bd5804 3736 /* print link status */
936fd732 3737 sata_print_link_status(link);
c2bd5804 3738
dc2b3515 3739 /* clear SError */
936fd732
TH
3740 if (sata_scr_read(link, SCR_ERROR, &serror) == 0)
3741 sata_scr_write(link, SCR_ERROR, serror);
dc2b3515 3742
c2bd5804
TH
3743 /* is double-select really necessary? */
3744 if (classes[0] != ATA_DEV_NONE)
3745 ap->ops->dev_select(ap, 1);
3746 if (classes[1] != ATA_DEV_NONE)
3747 ap->ops->dev_select(ap, 0);
3748
3a39746a
TH
3749 /* bail out if no device is present */
3750 if (classes[0] == ATA_DEV_NONE && classes[1] == ATA_DEV_NONE) {
3751 DPRINTK("EXIT, no device\n");
3752 return;
3753 }
3754
3755 /* set up device control */
0d5ff566
TH
3756 if (ap->ioaddr.ctl_addr)
3757 iowrite8(ap->ctl, ap->ioaddr.ctl_addr);
c2bd5804
TH
3758
3759 DPRINTK("EXIT\n");
3760}
3761
623a3128
TH
3762/**
3763 * ata_dev_same_device - Determine whether new ID matches configured device
623a3128
TH
3764 * @dev: device to compare against
3765 * @new_class: class of the new device
3766 * @new_id: IDENTIFY page of the new device
3767 *
3768 * Compare @new_class and @new_id against @dev and determine
3769 * whether @dev is the device indicated by @new_class and
3770 * @new_id.
3771 *
3772 * LOCKING:
3773 * None.
3774 *
3775 * RETURNS:
3776 * 1 if @dev matches @new_class and @new_id, 0 otherwise.
3777 */
3373efd8
TH
3778static int ata_dev_same_device(struct ata_device *dev, unsigned int new_class,
3779 const u16 *new_id)
623a3128
TH
3780{
3781 const u16 *old_id = dev->id;
a0cf733b
TH
3782 unsigned char model[2][ATA_ID_PROD_LEN + 1];
3783 unsigned char serial[2][ATA_ID_SERNO_LEN + 1];
623a3128
TH
3784
3785 if (dev->class != new_class) {
f15a1daf
TH
3786 ata_dev_printk(dev, KERN_INFO, "class mismatch %d != %d\n",
3787 dev->class, new_class);
623a3128
TH
3788 return 0;
3789 }
3790
a0cf733b
TH
3791 ata_id_c_string(old_id, model[0], ATA_ID_PROD, sizeof(model[0]));
3792 ata_id_c_string(new_id, model[1], ATA_ID_PROD, sizeof(model[1]));
3793 ata_id_c_string(old_id, serial[0], ATA_ID_SERNO, sizeof(serial[0]));
3794 ata_id_c_string(new_id, serial[1], ATA_ID_SERNO, sizeof(serial[1]));
623a3128
TH
3795
3796 if (strcmp(model[0], model[1])) {
f15a1daf
TH
3797 ata_dev_printk(dev, KERN_INFO, "model number mismatch "
3798 "'%s' != '%s'\n", model[0], model[1]);
623a3128
TH
3799 return 0;
3800 }
3801
3802 if (strcmp(serial[0], serial[1])) {
f15a1daf
TH
3803 ata_dev_printk(dev, KERN_INFO, "serial number mismatch "
3804 "'%s' != '%s'\n", serial[0], serial[1]);
623a3128
TH
3805 return 0;
3806 }
3807
623a3128
TH
3808 return 1;
3809}
3810
3811/**
fe30911b 3812 * ata_dev_reread_id - Re-read IDENTIFY data
3fae450c 3813 * @dev: target ATA device
bff04647 3814 * @readid_flags: read ID flags
623a3128
TH
3815 *
3816 * Re-read IDENTIFY page and make sure @dev is still attached to
3817 * the port.
3818 *
3819 * LOCKING:
3820 * Kernel thread context (may sleep)
3821 *
3822 * RETURNS:
3823 * 0 on success, negative errno otherwise
3824 */
fe30911b 3825int ata_dev_reread_id(struct ata_device *dev, unsigned int readid_flags)
623a3128 3826{
5eb45c02 3827 unsigned int class = dev->class;
9af5c9c9 3828 u16 *id = (void *)dev->link->ap->sector_buf;
623a3128
TH
3829 int rc;
3830
fe635c7e 3831 /* read ID data */
bff04647 3832 rc = ata_dev_read_id(dev, &class, readid_flags, id);
623a3128 3833 if (rc)
fe30911b 3834 return rc;
623a3128
TH
3835
3836 /* is the device still there? */
fe30911b
TH
3837 if (!ata_dev_same_device(dev, class, id))
3838 return -ENODEV;
623a3128 3839
fe635c7e 3840 memcpy(dev->id, id, sizeof(id[0]) * ATA_ID_WORDS);
fe30911b
TH
3841 return 0;
3842}
3843
3844/**
3845 * ata_dev_revalidate - Revalidate ATA device
3846 * @dev: device to revalidate
422c9daa 3847 * @new_class: new class code
fe30911b
TH
3848 * @readid_flags: read ID flags
3849 *
3850 * Re-read IDENTIFY page, make sure @dev is still attached to the
3851 * port and reconfigure it according to the new IDENTIFY page.
3852 *
3853 * LOCKING:
3854 * Kernel thread context (may sleep)
3855 *
3856 * RETURNS:
3857 * 0 on success, negative errno otherwise
3858 */
422c9daa
TH
3859int ata_dev_revalidate(struct ata_device *dev, unsigned int new_class,
3860 unsigned int readid_flags)
fe30911b 3861{
6ddcd3b0 3862 u64 n_sectors = dev->n_sectors;
fe30911b
TH
3863 int rc;
3864
3865 if (!ata_dev_enabled(dev))
3866 return -ENODEV;
3867
422c9daa
TH
3868 /* fail early if !ATA && !ATAPI to avoid issuing [P]IDENTIFY to PMP */
3869 if (ata_class_enabled(new_class) &&
3870 new_class != ATA_DEV_ATA && new_class != ATA_DEV_ATAPI) {
3871 ata_dev_printk(dev, KERN_INFO, "class mismatch %u != %u\n",
3872 dev->class, new_class);
3873 rc = -ENODEV;
3874 goto fail;
3875 }
3876
fe30911b
TH
3877 /* re-read ID */
3878 rc = ata_dev_reread_id(dev, readid_flags);
3879 if (rc)
3880 goto fail;
623a3128
TH
3881
3882 /* configure device according to the new ID */
efdaedc4 3883 rc = ata_dev_configure(dev);
6ddcd3b0
TH
3884 if (rc)
3885 goto fail;
3886
3887 /* verify n_sectors hasn't changed */
b54eebd6
TH
3888 if (dev->class == ATA_DEV_ATA && n_sectors &&
3889 dev->n_sectors != n_sectors) {
6ddcd3b0
TH
3890 ata_dev_printk(dev, KERN_INFO, "n_sectors mismatch "
3891 "%llu != %llu\n",
3892 (unsigned long long)n_sectors,
3893 (unsigned long long)dev->n_sectors);
8270bec4
TH
3894
3895 /* restore original n_sectors */
3896 dev->n_sectors = n_sectors;
3897
6ddcd3b0
TH
3898 rc = -ENODEV;
3899 goto fail;
3900 }
3901
3902 return 0;
623a3128
TH
3903
3904 fail:
f15a1daf 3905 ata_dev_printk(dev, KERN_ERR, "revalidation failed (errno=%d)\n", rc);
623a3128
TH
3906 return rc;
3907}
3908
6919a0a6
AC
3909struct ata_blacklist_entry {
3910 const char *model_num;
3911 const char *model_rev;
3912 unsigned long horkage;
3913};
3914
3915static const struct ata_blacklist_entry ata_device_blacklist [] = {
3916 /* Devices with DMA related problems under Linux */
3917 { "WDC AC11000H", NULL, ATA_HORKAGE_NODMA },
3918 { "WDC AC22100H", NULL, ATA_HORKAGE_NODMA },
3919 { "WDC AC32500H", NULL, ATA_HORKAGE_NODMA },
3920 { "WDC AC33100H", NULL, ATA_HORKAGE_NODMA },
3921 { "WDC AC31600H", NULL, ATA_HORKAGE_NODMA },
3922 { "WDC AC32100H", "24.09P07", ATA_HORKAGE_NODMA },
3923 { "WDC AC23200L", "21.10N21", ATA_HORKAGE_NODMA },
3924 { "Compaq CRD-8241B", NULL, ATA_HORKAGE_NODMA },
3925 { "CRD-8400B", NULL, ATA_HORKAGE_NODMA },
3926 { "CRD-8480B", NULL, ATA_HORKAGE_NODMA },
3927 { "CRD-8482B", NULL, ATA_HORKAGE_NODMA },
3928 { "CRD-84", NULL, ATA_HORKAGE_NODMA },
3929 { "SanDisk SDP3B", NULL, ATA_HORKAGE_NODMA },
3930 { "SanDisk SDP3B-64", NULL, ATA_HORKAGE_NODMA },
3931 { "SANYO CD-ROM CRD", NULL, ATA_HORKAGE_NODMA },
3932 { "HITACHI CDR-8", NULL, ATA_HORKAGE_NODMA },
3933 { "HITACHI CDR-8335", NULL, ATA_HORKAGE_NODMA },
3934 { "HITACHI CDR-8435", NULL, ATA_HORKAGE_NODMA },
3935 { "Toshiba CD-ROM XM-6202B", NULL, ATA_HORKAGE_NODMA },
3936 { "TOSHIBA CD-ROM XM-1702BC", NULL, ATA_HORKAGE_NODMA },
3937 { "CD-532E-A", NULL, ATA_HORKAGE_NODMA },
3938 { "E-IDE CD-ROM CR-840",NULL, ATA_HORKAGE_NODMA },
3939 { "CD-ROM Drive/F5A", NULL, ATA_HORKAGE_NODMA },
3940 { "WPI CDD-820", NULL, ATA_HORKAGE_NODMA },
3941 { "SAMSUNG CD-ROM SC-148C", NULL, ATA_HORKAGE_NODMA },
3942 { "SAMSUNG CD-ROM SC", NULL, ATA_HORKAGE_NODMA },
6919a0a6
AC
3943 { "ATAPI CD-ROM DRIVE 40X MAXIMUM",NULL,ATA_HORKAGE_NODMA },
3944 { "_NEC DV5800A", NULL, ATA_HORKAGE_NODMA },
3945 { "SAMSUNG CD-ROM SN-124","N001", ATA_HORKAGE_NODMA },
39f19886 3946 { "Seagate STT20000A", NULL, ATA_HORKAGE_NODMA },
5acd50f6 3947 { "IOMEGA ZIP 250 ATAPI", NULL, ATA_HORKAGE_NODMA }, /* temporary fix */
39ce7128
TH
3948 { "IOMEGA ZIP 250 ATAPI Floppy",
3949 NULL, ATA_HORKAGE_NODMA },
3af9a77a
TH
3950 /* Odd clown on sil3726/4726 PMPs */
3951 { "Config Disk", NULL, ATA_HORKAGE_NODMA |
3952 ATA_HORKAGE_SKIP_PM },
6919a0a6 3953
18d6e9d5 3954 /* Weird ATAPI devices */
40a1d531 3955 { "TORiSAN DVD-ROM DRD-N216", NULL, ATA_HORKAGE_MAX_SEC_128 },
18d6e9d5 3956
6919a0a6
AC
3957 /* Devices we expect to fail diagnostics */
3958
3959 /* Devices where NCQ should be avoided */
3960 /* NCQ is slow */
3961 { "WDC WD740ADFD-00", NULL, ATA_HORKAGE_NONCQ },
09125ea6
TH
3962 /* http://thread.gmane.org/gmane.linux.ide/14907 */
3963 { "FUJITSU MHT2060BH", NULL, ATA_HORKAGE_NONCQ },
7acfaf30 3964 /* NCQ is broken */
539cc7c7 3965 { "Maxtor *", "BANC*", ATA_HORKAGE_NONCQ },
0e3dbc01 3966 { "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ },
0b0a43e0
DM
3967 { "HITACHI HDS7250SASUN500G*", NULL, ATA_HORKAGE_NONCQ },
3968 { "HITACHI HDS7225SBSUN250G*", NULL, ATA_HORKAGE_NONCQ },
da6f0ec2 3969 { "ST380817AS", "3.42", ATA_HORKAGE_NONCQ },
539cc7c7 3970
36e337d0
RH
3971 /* Blacklist entries taken from Silicon Image 3124/3132
3972 Windows driver .inf file - also several Linux problem reports */
3973 { "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, },
3974 { "HTS541080G9SA00", "MB4OC60D", ATA_HORKAGE_NONCQ, },
3975 { "HTS541010G9SA00", "MBZOC60D", ATA_HORKAGE_NONCQ, },
bd9c5a39
TH
3976 /* Drives which do spurious command completion */
3977 { "HTS541680J9SA00", "SB2IC7EP", ATA_HORKAGE_NONCQ, },
2f8fcebb 3978 { "HTS541612J9SA00", "SBDIC7JP", ATA_HORKAGE_NONCQ, },
70edb185 3979 { "HDT722516DLA380", "V43OA96A", ATA_HORKAGE_NONCQ, },
e14cbfa6 3980 { "Hitachi HTS541616J9SA00", "SB4OC70P", ATA_HORKAGE_NONCQ, },
2f8fcebb 3981 { "WDC WD740ADFD-00NLR1", NULL, ATA_HORKAGE_NONCQ, },
7f567620 3982 { "WDC WD3200AAJS-00RYA0", "12.01B01", ATA_HORKAGE_NONCQ, },
a520f261 3983 { "FUJITSU MHV2080BH", "00840028", ATA_HORKAGE_NONCQ, },
7f567620 3984 { "ST9120822AS", "3.CLF", ATA_HORKAGE_NONCQ, },
3fb6589c 3985 { "ST9160821AS", "3.CLF", ATA_HORKAGE_NONCQ, },
954bb005 3986 { "ST9160821AS", "3.ALD", ATA_HORKAGE_NONCQ, },
13587960 3987 { "ST9160821AS", "3.CCD", ATA_HORKAGE_NONCQ, },
7f567620
TH
3988 { "ST3160812AS", "3.ADJ", ATA_HORKAGE_NONCQ, },
3989 { "ST980813AS", "3.ADB", ATA_HORKAGE_NONCQ, },
5d6aca8d 3990 { "SAMSUNG HD401LJ", "ZZ100-15", ATA_HORKAGE_NONCQ, },
6919a0a6 3991
16c55b03
TH
3992 /* devices which puke on READ_NATIVE_MAX */
3993 { "HDS724040KLSA80", "KFAOA20N", ATA_HORKAGE_BROKEN_HPA, },
3994 { "WDC WD3200JD-00KLB0", "WD-WCAMR1130137", ATA_HORKAGE_BROKEN_HPA },
3995 { "WDC WD2500JD-00HBB0", "WD-WMAL71490727", ATA_HORKAGE_BROKEN_HPA },
3996 { "MAXTOR 6L080L4", "A93.0500", ATA_HORKAGE_BROKEN_HPA },
6919a0a6 3997
93328e11
AC
3998 /* Devices which report 1 sector over size HPA */
3999 { "ST340823A", NULL, ATA_HORKAGE_HPA_SIZE, },
4000 { "ST320413A", NULL, ATA_HORKAGE_HPA_SIZE, },
4001
6919a0a6
AC
4002 /* End Marker */
4003 { }
1da177e4 4004};
2e9edbf8 4005
539cc7c7
JG
4006int strn_pattern_cmp(const char *patt, const char *name, int wildchar)
4007{
4008 const char *p;
4009 int len;
4010
4011 /*
4012 * check for trailing wildcard: *\0
4013 */
4014 p = strchr(patt, wildchar);
4015 if (p && ((*(p + 1)) == 0))
4016 len = p - patt;
317b50b8 4017 else {
539cc7c7 4018 len = strlen(name);
317b50b8
AP
4019 if (!len) {
4020 if (!*patt)
4021 return 0;
4022 return -1;
4023 }
4024 }
539cc7c7
JG
4025
4026 return strncmp(patt, name, len);
4027}
4028
75683fe7 4029static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
1da177e4 4030{
8bfa79fc
TH
4031 unsigned char model_num[ATA_ID_PROD_LEN + 1];
4032 unsigned char model_rev[ATA_ID_FW_REV_LEN + 1];
6919a0a6 4033 const struct ata_blacklist_entry *ad = ata_device_blacklist;
3a778275 4034
8bfa79fc
TH
4035 ata_id_c_string(dev->id, model_num, ATA_ID_PROD, sizeof(model_num));
4036 ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
1da177e4 4037
6919a0a6 4038 while (ad->model_num) {
539cc7c7 4039 if (!strn_pattern_cmp(ad->model_num, model_num, '*')) {
6919a0a6
AC
4040 if (ad->model_rev == NULL)
4041 return ad->horkage;
539cc7c7 4042 if (!strn_pattern_cmp(ad->model_rev, model_rev, '*'))
6919a0a6 4043 return ad->horkage;
f4b15fef 4044 }
6919a0a6 4045 ad++;
f4b15fef 4046 }
1da177e4
LT
4047 return 0;
4048}
4049
6919a0a6
AC
4050static int ata_dma_blacklisted(const struct ata_device *dev)
4051{
4052 /* We don't support polling DMA.
4053 * DMA blacklist those ATAPI devices with CDB-intr (and use PIO)
4054 * if the LLDD handles only interrupts in the HSM_ST_LAST state.
4055 */
9af5c9c9 4056 if ((dev->link->ap->flags & ATA_FLAG_PIO_POLLING) &&
6919a0a6
AC
4057 (dev->flags & ATA_DFLAG_CDB_INTR))
4058 return 1;
75683fe7 4059 return (dev->horkage & ATA_HORKAGE_NODMA) ? 1 : 0;
6919a0a6
AC
4060}
4061
a6d5a51c
TH
4062/**
4063 * ata_dev_xfermask - Compute supported xfermask of the given device
a6d5a51c
TH
4064 * @dev: Device to compute xfermask for
4065 *
acf356b1
TH
4066 * Compute supported xfermask of @dev and store it in
4067 * dev->*_mask. This function is responsible for applying all
4068 * known limits including host controller limits, device
4069 * blacklist, etc...
a6d5a51c
TH
4070 *
4071 * LOCKING:
4072 * None.
a6d5a51c 4073 */
3373efd8 4074static void ata_dev_xfermask(struct ata_device *dev)
1da177e4 4075{
9af5c9c9
TH
4076 struct ata_link *link = dev->link;
4077 struct ata_port *ap = link->ap;
cca3974e 4078 struct ata_host *host = ap->host;
a6d5a51c 4079 unsigned long xfer_mask;
1da177e4 4080
37deecb5 4081 /* controller modes available */
565083e1
TH
4082 xfer_mask = ata_pack_xfermask(ap->pio_mask,
4083 ap->mwdma_mask, ap->udma_mask);
4084
8343f889 4085 /* drive modes available */
37deecb5
TH
4086 xfer_mask &= ata_pack_xfermask(dev->pio_mask,
4087 dev->mwdma_mask, dev->udma_mask);
4088 xfer_mask &= ata_id_xfermask(dev->id);
565083e1 4089
b352e57d
AC
4090 /*
4091 * CFA Advanced TrueIDE timings are not allowed on a shared
4092 * cable
4093 */
4094 if (ata_dev_pair(dev)) {
4095 /* No PIO5 or PIO6 */
4096 xfer_mask &= ~(0x03 << (ATA_SHIFT_PIO + 5));
4097 /* No MWDMA3 or MWDMA 4 */
4098 xfer_mask &= ~(0x03 << (ATA_SHIFT_MWDMA + 3));
4099 }
4100
37deecb5
TH
4101 if (ata_dma_blacklisted(dev)) {
4102 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
f15a1daf
TH
4103 ata_dev_printk(dev, KERN_WARNING,
4104 "device is on DMA blacklist, disabling DMA\n");
37deecb5 4105 }
a6d5a51c 4106
14d66ab7
PV
4107 if ((host->flags & ATA_HOST_SIMPLEX) &&
4108 host->simplex_claimed && host->simplex_claimed != ap) {
37deecb5
TH
4109 xfer_mask &= ~(ATA_MASK_MWDMA | ATA_MASK_UDMA);
4110 ata_dev_printk(dev, KERN_WARNING, "simplex DMA is claimed by "
4111 "other device, disabling DMA\n");
5444a6f4 4112 }
565083e1 4113
e424675f
JG
4114 if (ap->flags & ATA_FLAG_NO_IORDY)
4115 xfer_mask &= ata_pio_mask_no_iordy(dev);
4116
5444a6f4 4117 if (ap->ops->mode_filter)
a76b62ca 4118 xfer_mask = ap->ops->mode_filter(dev, xfer_mask);
5444a6f4 4119
8343f889
RH
4120 /* Apply cable rule here. Don't apply it early because when
4121 * we handle hot plug the cable type can itself change.
4122 * Check this last so that we know if the transfer rate was
4123 * solely limited by the cable.
4124 * Unknown or 80 wire cables reported host side are checked
4125 * drive side as well. Cases where we know a 40wire cable
4126 * is used safely for 80 are not checked here.
4127 */
4128 if (xfer_mask & (0xF8 << ATA_SHIFT_UDMA))
4129 /* UDMA/44 or higher would be available */
4130 if((ap->cbl == ATA_CBL_PATA40) ||
4131 (ata_drive_40wire(dev->id) &&
4132 (ap->cbl == ATA_CBL_PATA_UNK ||
4133 ap->cbl == ATA_CBL_PATA80))) {
4134 ata_dev_printk(dev, KERN_WARNING,
4135 "limited to UDMA/33 due to 40-wire cable\n");
4136 xfer_mask &= ~(0xF8 << ATA_SHIFT_UDMA);
4137 }
4138
565083e1
TH
4139 ata_unpack_xfermask(xfer_mask, &dev->pio_mask,
4140 &dev->mwdma_mask, &dev->udma_mask);
1da177e4
LT
4141}
4142
1da177e4
LT
4143/**
4144 * ata_dev_set_xfermode - Issue SET FEATURES - XFER MODE command
1da177e4
LT
4145 * @dev: Device to which command will be sent
4146 *
780a87f7
JG
4147 * Issue SET FEATURES - XFER MODE command to device @dev
4148 * on port @ap.
4149 *
1da177e4 4150 * LOCKING:
0cba632b 4151 * PCI/etc. bus probe sem.
83206a29
TH
4152 *
4153 * RETURNS:
4154 * 0 on success, AC_ERR_* mask otherwise.
1da177e4
LT
4155 */
4156
3373efd8 4157static unsigned int ata_dev_set_xfermode(struct ata_device *dev)
1da177e4 4158{
a0123703 4159 struct ata_taskfile tf;
83206a29 4160 unsigned int err_mask;
1da177e4
LT
4161
4162 /* set up set-features taskfile */
4163 DPRINTK("set features - xfer mode\n");
4164
464cf177
TH
4165 /* Some controllers and ATAPI devices show flaky interrupt
4166 * behavior after setting xfer mode. Use polling instead.
4167 */
3373efd8 4168 ata_tf_init(dev, &tf);
a0123703
TH
4169 tf.command = ATA_CMD_SET_FEATURES;
4170 tf.feature = SETFEATURES_XFER;
464cf177 4171 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_POLLING;
a0123703
TH
4172 tf.protocol = ATA_PROT_NODATA;
4173 tf.nsect = dev->xfer_mode;
1da177e4 4174
2b789108 4175 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
9f45cbd3
KCA
4176
4177 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4178 return err_mask;
4179}
4180
4181/**
4182 * ata_dev_set_AN - Issue SET FEATURES - SATA FEATURES
4183 * @dev: Device to which command will be sent
4184 * @enable: Whether to enable or disable the feature
4185 *
4186 * Issue SET FEATURES - SATA FEATURES command to device @dev
4187 * on port @ap with sector count set to indicate Asynchronous
4188 * Notification feature
4189 *
4190 * LOCKING:
4191 * PCI/etc. bus probe sem.
4192 *
4193 * RETURNS:
4194 * 0 on success, AC_ERR_* mask otherwise.
4195 */
4196static unsigned int ata_dev_set_AN(struct ata_device *dev, u8 enable)
4197{
4198 struct ata_taskfile tf;
4199 unsigned int err_mask;
4200
4201 /* set up set-features taskfile */
4202 DPRINTK("set features - SATA features\n");
4203
4204 ata_tf_init(dev, &tf);
4205 tf.command = ATA_CMD_SET_FEATURES;
4206 tf.feature = enable;
4207 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
4208 tf.protocol = ATA_PROT_NODATA;
4209 tf.nsect = SATA_AN;
4210
2b789108 4211 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
1da177e4 4212
83206a29
TH
4213 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4214 return err_mask;
1da177e4
LT
4215}
4216
8bf62ece
AL
4217/**
4218 * ata_dev_init_params - Issue INIT DEV PARAMS command
8bf62ece 4219 * @dev: Device to which command will be sent
e2a7f77a
RD
4220 * @heads: Number of heads (taskfile parameter)
4221 * @sectors: Number of sectors (taskfile parameter)
8bf62ece
AL
4222 *
4223 * LOCKING:
6aff8f1f
TH
4224 * Kernel thread context (may sleep)
4225 *
4226 * RETURNS:
4227 * 0 on success, AC_ERR_* mask otherwise.
8bf62ece 4228 */
3373efd8
TH
4229static unsigned int ata_dev_init_params(struct ata_device *dev,
4230 u16 heads, u16 sectors)
8bf62ece 4231{
a0123703 4232 struct ata_taskfile tf;
6aff8f1f 4233 unsigned int err_mask;
8bf62ece
AL
4234
4235 /* Number of sectors per track 1-255. Number of heads 1-16 */
4236 if (sectors < 1 || sectors > 255 || heads < 1 || heads > 16)
00b6f5e9 4237 return AC_ERR_INVALID;
8bf62ece
AL
4238
4239 /* set up init dev params taskfile */
4240 DPRINTK("init dev params \n");
4241
3373efd8 4242 ata_tf_init(dev, &tf);
a0123703
TH
4243 tf.command = ATA_CMD_INIT_DEV_PARAMS;
4244 tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
4245 tf.protocol = ATA_PROT_NODATA;
4246 tf.nsect = sectors;
4247 tf.device |= (heads - 1) & 0x0f; /* max head = num. of heads - 1 */
8bf62ece 4248
2b789108 4249 err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
18b2466c
AC
4250 /* A clean abort indicates an original or just out of spec drive
4251 and we should continue as we issue the setup based on the
4252 drive reported working geometry */
4253 if (err_mask == AC_ERR_DEV && (tf.feature & ATA_ABORTED))
4254 err_mask = 0;
8bf62ece 4255
6aff8f1f
TH
4256 DPRINTK("EXIT, err_mask=%x\n", err_mask);
4257 return err_mask;
8bf62ece
AL
4258}
4259
1da177e4 4260/**
0cba632b
JG
4261 * ata_sg_clean - Unmap DMA memory associated with command
4262 * @qc: Command containing DMA memory to be released
4263 *
4264 * Unmap all mapped DMA memory associated with this command.
1da177e4
LT
4265 *
4266 * LOCKING:
cca3974e 4267 * spin_lock_irqsave(host lock)
1da177e4 4268 */
70e6ad0c 4269void ata_sg_clean(struct ata_queued_cmd *qc)
1da177e4
LT
4270{
4271 struct ata_port *ap = qc->ap;
cedc9a47 4272 struct scatterlist *sg = qc->__sg;
1da177e4 4273 int dir = qc->dma_dir;
cedc9a47 4274 void *pad_buf = NULL;
1da177e4 4275
a4631474
TH
4276 WARN_ON(!(qc->flags & ATA_QCFLAG_DMAMAP));
4277 WARN_ON(sg == NULL);
1da177e4
LT
4278
4279 if (qc->flags & ATA_QCFLAG_SINGLE)
f131883e 4280 WARN_ON(qc->n_elem > 1);
1da177e4 4281
2c13b7ce 4282 VPRINTK("unmapping %u sg elements\n", qc->n_elem);
1da177e4 4283
cedc9a47
JG
4284 /* if we padded the buffer out to 32-bit bound, and data
4285 * xfer direction is from-device, we must copy from the
4286 * pad buffer back into the supplied buffer
4287 */
4288 if (qc->pad_len && !(qc->tf.flags & ATA_TFLAG_WRITE))
4289 pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
4290
4291 if (qc->flags & ATA_QCFLAG_SG) {
e1410f2d 4292 if (qc->n_elem)
2f1f610b 4293 dma_unmap_sg(ap->dev, sg, qc->n_elem, dir);
cedc9a47
JG
4294 /* restore last sg */
4295 sg[qc->orig_n_elem - 1].length += qc->pad_len;
4296 if (pad_buf) {
4297 struct scatterlist *psg = &qc->pad_sgent;
4298 void *addr = kmap_atomic(psg->page, KM_IRQ0);
4299 memcpy(addr + psg->offset, pad_buf, qc->pad_len);
dfa15988 4300 kunmap_atomic(addr, KM_IRQ0);
cedc9a47
JG
4301 }
4302 } else {
2e242fa9 4303 if (qc->n_elem)
2f1f610b 4304 dma_unmap_single(ap->dev,
e1410f2d
JG
4305 sg_dma_address(&sg[0]), sg_dma_len(&sg[0]),
4306 dir);
cedc9a47
JG
4307 /* restore sg */
4308 sg->length += qc->pad_len;
4309 if (pad_buf)
4310 memcpy(qc->buf_virt + sg->length - qc->pad_len,
4311 pad_buf, qc->pad_len);
4312 }
1da177e4
LT
4313
4314 qc->flags &= ~ATA_QCFLAG_DMAMAP;
cedc9a47 4315 qc->__sg = NULL;
1da177e4
LT
4316}
4317
4318/**
4319 * ata_fill_sg - Fill PCI IDE PRD table
4320 * @qc: Metadata associated with taskfile to be transferred
4321 *
780a87f7
JG
4322 * Fill PCI IDE PRD (scatter-gather) table with segments
4323 * associated with the current disk command.
4324 *
1da177e4 4325 * LOCKING:
cca3974e 4326 * spin_lock_irqsave(host lock)
1da177e4
LT
4327 *
4328 */
4329static void ata_fill_sg(struct ata_queued_cmd *qc)
4330{
1da177e4 4331 struct ata_port *ap = qc->ap;
cedc9a47
JG
4332 struct scatterlist *sg;
4333 unsigned int idx;
1da177e4 4334
a4631474 4335 WARN_ON(qc->__sg == NULL);
f131883e 4336 WARN_ON(qc->n_elem == 0 && qc->pad_len == 0);
1da177e4
LT
4337
4338 idx = 0;
cedc9a47 4339 ata_for_each_sg(sg, qc) {
1da177e4
LT
4340 u32 addr, offset;
4341 u32 sg_len, len;
4342
4343 /* determine if physical DMA addr spans 64K boundary.
4344 * Note h/w doesn't support 64-bit, so we unconditionally
4345 * truncate dma_addr_t to u32.
4346 */
4347 addr = (u32) sg_dma_address(sg);
4348 sg_len = sg_dma_len(sg);
4349
4350 while (sg_len) {
4351 offset = addr & 0xffff;
4352 len = sg_len;
4353 if ((offset + sg_len) > 0x10000)
4354 len = 0x10000 - offset;
4355
4356 ap->prd[idx].addr = cpu_to_le32(addr);
4357 ap->prd[idx].flags_len = cpu_to_le32(len & 0xffff);
4358 VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
4359
4360 idx++;
4361 sg_len -= len;
4362 addr += len;
4363 }
4364 }
4365
4366 if (idx)
4367 ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
4368}
b9a4197e 4369
d26fc955
AC
4370/**
4371 * ata_fill_sg_dumb - Fill PCI IDE PRD table
4372 * @qc: Metadata associated with taskfile to be transferred
4373 *
4374 * Fill PCI IDE PRD (scatter-gather) table with segments
4375 * associated with the current disk command. Perform the fill
4376 * so that we avoid writing any length 64K records for
4377 * controllers that don't follow the spec.
4378 *
4379 * LOCKING:
4380 * spin_lock_irqsave(host lock)
4381 *
4382 */
4383static void ata_fill_sg_dumb(struct ata_queued_cmd *qc)
4384{
4385 struct ata_port *ap = qc->ap;
4386 struct scatterlist *sg;
4387 unsigned int idx;
4388
4389 WARN_ON(qc->__sg == NULL);
4390 WARN_ON(qc->n_elem == 0 && qc->pad_len == 0);
4391
4392 idx = 0;
4393 ata_for_each_sg(sg, qc) {
4394 u32 addr, offset;
4395 u32 sg_len, len, blen;
4396
4397 /* determine if physical DMA addr spans 64K boundary.
4398 * Note h/w doesn't support 64-bit, so we unconditionally
4399 * truncate dma_addr_t to u32.
4400 */
4401 addr = (u32) sg_dma_address(sg);
4402 sg_len = sg_dma_len(sg);
4403
4404 while (sg_len) {
4405 offset = addr & 0xffff;
4406 len = sg_len;
4407 if ((offset + sg_len) > 0x10000)
4408 len = 0x10000 - offset;
4409
4410 blen = len & 0xffff;
4411 ap->prd[idx].addr = cpu_to_le32(addr);
4412 if (blen == 0) {
4413 /* Some PATA chipsets like the CS5530 can't
4414 cope with 0x0000 meaning 64K as the spec says */
4415 ap->prd[idx].flags_len = cpu_to_le32(0x8000);
4416 blen = 0x8000;
4417 ap->prd[++idx].addr = cpu_to_le32(addr + 0x8000);
4418 }
4419 ap->prd[idx].flags_len = cpu_to_le32(blen);
4420 VPRINTK("PRD[%u] = (0x%X, 0x%X)\n", idx, addr, len);
4421
4422 idx++;
4423 sg_len -= len;
4424 addr += len;
4425 }
4426 }
4427
4428 if (idx)
4429 ap->prd[idx - 1].flags_len |= cpu_to_le32(ATA_PRD_EOT);
4430}
4431
1da177e4
LT
4432/**
4433 * ata_check_atapi_dma - Check whether ATAPI DMA can be supported
4434 * @qc: Metadata associated with taskfile to check
4435 *
780a87f7
JG
4436 * Allow low-level driver to filter ATA PACKET commands, returning
4437 * a status indicating whether or not it is OK to use DMA for the
4438 * supplied PACKET command.
4439 *
1da177e4 4440 * LOCKING:
cca3974e 4441 * spin_lock_irqsave(host lock)
0cba632b 4442 *
1da177e4
LT
4443 * RETURNS: 0 when ATAPI DMA can be used
4444 * nonzero otherwise
4445 */
4446int ata_check_atapi_dma(struct ata_queued_cmd *qc)
4447{
4448 struct ata_port *ap = qc->ap;
b9a4197e
TH
4449
4450 /* Don't allow DMA if it isn't multiple of 16 bytes. Quite a
4451 * few ATAPI devices choke on such DMA requests.
4452 */
4453 if (unlikely(qc->nbytes & 15))
4454 return 1;
6f23a31d 4455
1da177e4 4456 if (ap->ops->check_atapi_dma)
b9a4197e 4457 return ap->ops->check_atapi_dma(qc);
1da177e4 4458
b9a4197e 4459 return 0;
1da177e4 4460}
b9a4197e 4461
31cc23b3
TH
4462/**
4463 * ata_std_qc_defer - Check whether a qc needs to be deferred
4464 * @qc: ATA command in question
4465 *
4466 * Non-NCQ commands cannot run with any other command, NCQ or
4467 * not. As upper layer only knows the queue depth, we are
4468 * responsible for maintaining exclusion. This function checks
4469 * whether a new command @qc can be issued.
4470 *
4471 * LOCKING:
4472 * spin_lock_irqsave(host lock)
4473 *
4474 * RETURNS:
4475 * ATA_DEFER_* if deferring is needed, 0 otherwise.
4476 */
4477int ata_std_qc_defer(struct ata_queued_cmd *qc)
4478{
4479 struct ata_link *link = qc->dev->link;
4480
4481 if (qc->tf.protocol == ATA_PROT_NCQ) {
4482 if (!ata_tag_valid(link->active_tag))
4483 return 0;
4484 } else {
4485 if (!ata_tag_valid(link->active_tag) && !link->sactive)
4486 return 0;
4487 }
4488
4489 return ATA_DEFER_LINK;
4490}
4491
1da177e4
LT
4492/**
4493 * ata_qc_prep - Prepare taskfile for submission
4494 * @qc: Metadata associated with taskfile to be prepared
4495 *
780a87f7
JG
4496 * Prepare ATA taskfile for submission.
4497 *
1da177e4 4498 * LOCKING:
cca3974e 4499 * spin_lock_irqsave(host lock)
1da177e4
LT
4500 */
4501void ata_qc_prep(struct ata_queued_cmd *qc)
4502{
4503 if (!(qc->flags & ATA_QCFLAG_DMAMAP))
4504 return;
4505
4506 ata_fill_sg(qc);
4507}
4508
d26fc955
AC
4509/**
4510 * ata_dumb_qc_prep - Prepare taskfile for submission
4511 * @qc: Metadata associated with taskfile to be prepared
4512 *
4513 * Prepare ATA taskfile for submission.
4514 *
4515 * LOCKING:
4516 * spin_lock_irqsave(host lock)
4517 */
4518void ata_dumb_qc_prep(struct ata_queued_cmd *qc)
4519{
4520 if (!(qc->flags & ATA_QCFLAG_DMAMAP))
4521 return;
4522
4523 ata_fill_sg_dumb(qc);
4524}
4525
e46834cd
BK
4526void ata_noop_qc_prep(struct ata_queued_cmd *qc) { }
4527
0cba632b
JG
4528/**
4529 * ata_sg_init_one - Associate command with memory buffer
4530 * @qc: Command to be associated
4531 * @buf: Memory buffer
4532 * @buflen: Length of memory buffer, in bytes.
4533 *
4534 * Initialize the data-related elements of queued_cmd @qc
4535 * to point to a single memory buffer, @buf of byte length @buflen.
4536 *
4537 * LOCKING:
cca3974e 4538 * spin_lock_irqsave(host lock)
0cba632b
JG
4539 */
4540
1da177e4
LT
4541void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf, unsigned int buflen)
4542{
1da177e4
LT
4543 qc->flags |= ATA_QCFLAG_SINGLE;
4544
cedc9a47 4545 qc->__sg = &qc->sgent;
1da177e4 4546 qc->n_elem = 1;
cedc9a47 4547 qc->orig_n_elem = 1;
1da177e4 4548 qc->buf_virt = buf;
233277ca 4549 qc->nbytes = buflen;
1da177e4 4550
61c0596c 4551 sg_init_one(&qc->sgent, buf, buflen);
1da177e4
LT
4552}
4553
0cba632b
JG
4554/**
4555 * ata_sg_init - Associate command with scatter-gather table.
4556 * @qc: Command to be associated
4557 * @sg: Scatter-gather table.
4558 * @n_elem: Number of elements in s/g table.
4559 *
4560 * Initialize the data-related elements of queued_cmd @qc
4561 * to point to a scatter-gather table @sg, containing @n_elem
4562 * elements.
4563 *
4564 * LOCKING:
cca3974e 4565 * spin_lock_irqsave(host lock)
0cba632b
JG
4566 */
4567
1da177e4
LT
4568void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
4569 unsigned int n_elem)
4570{
4571 qc->flags |= ATA_QCFLAG_SG;
cedc9a47 4572 qc->__sg = sg;
1da177e4 4573 qc->n_elem = n_elem;
cedc9a47 4574 qc->orig_n_elem = n_elem;
1da177e4
LT
4575}
4576
4577/**
0cba632b
JG
4578 * ata_sg_setup_one - DMA-map the memory buffer associated with a command.
4579 * @qc: Command with memory buffer to be mapped.
4580 *
4581 * DMA-map the memory buffer associated with queued_cmd @qc.
1da177e4
LT
4582 *
4583 * LOCKING:
cca3974e 4584 * spin_lock_irqsave(host lock)
1da177e4
LT
4585 *
4586 * RETURNS:
0cba632b 4587 * Zero on success, negative on error.
1da177e4
LT
4588 */
4589
4590static int ata_sg_setup_one(struct ata_queued_cmd *qc)
4591{
4592 struct ata_port *ap = qc->ap;
4593 int dir = qc->dma_dir;
cedc9a47 4594 struct scatterlist *sg = qc->__sg;
1da177e4 4595 dma_addr_t dma_address;
2e242fa9 4596 int trim_sg = 0;
1da177e4 4597
cedc9a47
JG
4598 /* we must lengthen transfers to end on a 32-bit boundary */
4599 qc->pad_len = sg->length & 3;
4600 if (qc->pad_len) {
4601 void *pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
4602 struct scatterlist *psg = &qc->pad_sgent;
4603
a4631474 4604 WARN_ON(qc->dev->class != ATA_DEV_ATAPI);
cedc9a47
JG
4605
4606 memset(pad_buf, 0, ATA_DMA_PAD_SZ);
4607
4608 if (qc->tf.flags & ATA_TFLAG_WRITE)
4609 memcpy(pad_buf, qc->buf_virt + sg->length - qc->pad_len,
4610 qc->pad_len);
4611
4612 sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
4613 sg_dma_len(psg) = ATA_DMA_PAD_SZ;
4614 /* trim sg */
4615 sg->length -= qc->pad_len;
2e242fa9
TH
4616 if (sg->length == 0)
4617 trim_sg = 1;
cedc9a47
JG
4618
4619 DPRINTK("padding done, sg->length=%u pad_len=%u\n",
4620 sg->length, qc->pad_len);
4621 }
4622
2e242fa9
TH
4623 if (trim_sg) {
4624 qc->n_elem--;
e1410f2d
JG
4625 goto skip_map;
4626 }
4627
2f1f610b 4628 dma_address = dma_map_single(ap->dev, qc->buf_virt,
32529e01 4629 sg->length, dir);
537a95d9
TH
4630 if (dma_mapping_error(dma_address)) {
4631 /* restore sg */
4632 sg->length += qc->pad_len;
1da177e4 4633 return -1;
537a95d9 4634 }
1da177e4
LT
4635
4636 sg_dma_address(sg) = dma_address;
32529e01 4637 sg_dma_len(sg) = sg->length;
1da177e4 4638
2e242fa9 4639skip_map:
1da177e4
LT
4640 DPRINTK("mapped buffer of %d bytes for %s\n", sg_dma_len(sg),
4641 qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
4642
4643 return 0;
4644}
4645
4646/**
0cba632b
JG
4647 * ata_sg_setup - DMA-map the scatter-gather table associated with a command.
4648 * @qc: Command with scatter-gather table to be mapped.
4649 *
4650 * DMA-map the scatter-gather table associated with queued_cmd @qc.
1da177e4
LT
4651 *
4652 * LOCKING:
cca3974e 4653 * spin_lock_irqsave(host lock)
1da177e4
LT
4654 *
4655 * RETURNS:
0cba632b 4656 * Zero on success, negative on error.
1da177e4
LT
4657 *
4658 */
4659
4660static int ata_sg_setup(struct ata_queued_cmd *qc)
4661{
4662 struct ata_port *ap = qc->ap;
cedc9a47
JG
4663 struct scatterlist *sg = qc->__sg;
4664 struct scatterlist *lsg = &sg[qc->n_elem - 1];
e1410f2d 4665 int n_elem, pre_n_elem, dir, trim_sg = 0;
1da177e4 4666
44877b4e 4667 VPRINTK("ENTER, ata%u\n", ap->print_id);
a4631474 4668 WARN_ON(!(qc->flags & ATA_QCFLAG_SG));
1da177e4 4669
cedc9a47
JG
4670 /* we must lengthen transfers to end on a 32-bit boundary */
4671 qc->pad_len = lsg->length & 3;
4672 if (qc->pad_len) {
4673 void *pad_buf = ap->pad + (qc->tag * ATA_DMA_PAD_SZ);
4674 struct scatterlist *psg = &qc->pad_sgent;
4675 unsigned int offset;
4676
a4631474 4677 WARN_ON(qc->dev->class != ATA_DEV_ATAPI);
cedc9a47
JG
4678
4679 memset(pad_buf, 0, ATA_DMA_PAD_SZ);
4680
4681 /*
4682 * psg->page/offset are used to copy to-be-written
4683 * data in this function or read data in ata_sg_clean.
4684 */
4685 offset = lsg->offset + lsg->length - qc->pad_len;
4686 psg->page = nth_page(lsg->page, offset >> PAGE_SHIFT);
4687 psg->offset = offset_in_page(offset);
4688
4689 if (qc->tf.flags & ATA_TFLAG_WRITE) {
4690 void *addr = kmap_atomic(psg->page, KM_IRQ0);
4691 memcpy(pad_buf, addr + psg->offset, qc->pad_len);
dfa15988 4692 kunmap_atomic(addr, KM_IRQ0);
cedc9a47
JG
4693 }
4694
4695 sg_dma_address(psg) = ap->pad_dma + (qc->tag * ATA_DMA_PAD_SZ);
4696 sg_dma_len(psg) = ATA_DMA_PAD_SZ;
4697 /* trim last sg */
4698 lsg->length -= qc->pad_len;
e1410f2d
JG
4699 if (lsg->length == 0)
4700 trim_sg = 1;
cedc9a47
JG
4701
4702 DPRINTK("padding done, sg[%d].length=%u pad_len=%u\n",
4703 qc->n_elem - 1, lsg->length, qc->pad_len);
4704 }
4705
e1410f2d
JG
4706 pre_n_elem = qc->n_elem;
4707 if (trim_sg && pre_n_elem)
4708 pre_n_elem--;
4709
4710 if (!pre_n_elem) {
4711 n_elem = 0;
4712 goto skip_map;
4713 }
4714
1da177e4 4715 dir = qc->dma_dir;
2f1f610b 4716 n_elem = dma_map_sg(ap->dev, sg, pre_n_elem, dir);
537a95d9
TH
4717 if (n_elem < 1) {
4718 /* restore last sg */
4719 lsg->length += qc->pad_len;
1da177e4 4720 return -1;
537a95d9 4721 }
1da177e4
LT
4722
4723 DPRINTK("%d sg elements mapped\n", n_elem);
4724
e1410f2d 4725skip_map:
1da177e4
LT
4726 qc->n_elem = n_elem;
4727
4728 return 0;
4729}
4730
0baab86b 4731/**
c893a3ae 4732 * swap_buf_le16 - swap halves of 16-bit words in place
0baab86b
EF
4733 * @buf: Buffer to swap
4734 * @buf_words: Number of 16-bit words in buffer.
4735 *
4736 * Swap halves of 16-bit words if needed to convert from
4737 * little-endian byte order to native cpu byte order, or
4738 * vice-versa.
4739 *
4740 * LOCKING:
6f0ef4fa 4741 * Inherited from caller.
0baab86b 4742 */
1da177e4
LT
4743void swap_buf_le16(u16 *buf, unsigned int buf_words)
4744{
4745#ifdef __BIG_ENDIAN
4746 unsigned int i;
4747
4748 for (i = 0; i < buf_words; i++)
4749 buf[i] = le16_to_cpu(buf[i]);
4750#endif /* __BIG_ENDIAN */
4751}
4752
6ae4cfb5 4753/**
0d5ff566 4754 * ata_data_xfer - Transfer data by PIO
a6b2c5d4 4755 * @adev: device to target
6ae4cfb5
AL
4756 * @buf: data buffer
4757 * @buflen: buffer length
344babaa 4758 * @write_data: read/write
6ae4cfb5
AL
4759 *
4760 * Transfer data from/to the device data register by PIO.
4761 *
4762 * LOCKING:
4763 * Inherited from caller.
6ae4cfb5 4764 */
0d5ff566
TH
4765void ata_data_xfer(struct ata_device *adev, unsigned char *buf,
4766 unsigned int buflen, int write_data)
1da177e4 4767{
9af5c9c9 4768 struct ata_port *ap = adev->link->ap;
6ae4cfb5 4769 unsigned int words = buflen >> 1;
1da177e4 4770
6ae4cfb5 4771 /* Transfer multiple of 2 bytes */
1da177e4 4772 if (write_data)
0d5ff566 4773 iowrite16_rep(ap->ioaddr.data_addr, buf, words);
1da177e4 4774 else
0d5ff566 4775 ioread16_rep(ap->ioaddr.data_addr, buf, words);
6ae4cfb5
AL
4776
4777 /* Transfer trailing 1 byte, if any. */
4778 if (unlikely(buflen & 0x01)) {
4779 u16 align_buf[1] = { 0 };
4780 unsigned char *trailing_buf = buf + buflen - 1;
4781
4782 if (write_data) {
4783 memcpy(align_buf, trailing_buf, 1);
0d5ff566 4784 iowrite16(le16_to_cpu(align_buf[0]), ap->ioaddr.data_addr);
6ae4cfb5 4785 } else {
0d5ff566 4786 align_buf[0] = cpu_to_le16(ioread16(ap->ioaddr.data_addr));
6ae4cfb5
AL
4787 memcpy(trailing_buf, align_buf, 1);
4788 }
4789 }
1da177e4
LT
4790}
4791
75e99585 4792/**
0d5ff566 4793 * ata_data_xfer_noirq - Transfer data by PIO
75e99585
AC
4794 * @adev: device to target
4795 * @buf: data buffer
4796 * @buflen: buffer length
4797 * @write_data: read/write
4798 *
88574551 4799 * Transfer data from/to the device data register by PIO. Do the
75e99585
AC
4800 * transfer with interrupts disabled.
4801 *
4802 * LOCKING:
4803 * Inherited from caller.
4804 */
0d5ff566
TH
4805void ata_data_xfer_noirq(struct ata_device *adev, unsigned char *buf,
4806 unsigned int buflen, int write_data)
75e99585
AC
4807{
4808 unsigned long flags;
4809 local_irq_save(flags);
0d5ff566 4810 ata_data_xfer(adev, buf, buflen, write_data);
75e99585
AC
4811 local_irq_restore(flags);
4812}
4813
4814
6ae4cfb5 4815/**
5a5dbd18 4816 * ata_pio_sector - Transfer a sector of data.
6ae4cfb5
AL
4817 * @qc: Command on going
4818 *
5a5dbd18 4819 * Transfer qc->sect_size bytes of data from/to the ATA device.
6ae4cfb5
AL
4820 *
4821 * LOCKING:
4822 * Inherited from caller.
4823 */
4824
1da177e4
LT
4825static void ata_pio_sector(struct ata_queued_cmd *qc)
4826{
4827 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
cedc9a47 4828 struct scatterlist *sg = qc->__sg;
1da177e4
LT
4829 struct ata_port *ap = qc->ap;
4830 struct page *page;
4831 unsigned int offset;
4832 unsigned char *buf;
4833
5a5dbd18 4834 if (qc->curbytes == qc->nbytes - qc->sect_size)
14be71f4 4835 ap->hsm_task_state = HSM_ST_LAST;
1da177e4
LT
4836
4837 page = sg[qc->cursg].page;
726f0785 4838 offset = sg[qc->cursg].offset + qc->cursg_ofs;
1da177e4
LT
4839
4840 /* get the current page and offset */
4841 page = nth_page(page, (offset >> PAGE_SHIFT));
4842 offset %= PAGE_SIZE;
4843
1da177e4
LT
4844 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
4845
91b8b313
AL
4846 if (PageHighMem(page)) {
4847 unsigned long flags;
4848
a6b2c5d4 4849 /* FIXME: use a bounce buffer */
91b8b313
AL
4850 local_irq_save(flags);
4851 buf = kmap_atomic(page, KM_IRQ0);
083958d3 4852
91b8b313 4853 /* do the actual data transfer */
5a5dbd18 4854 ap->ops->data_xfer(qc->dev, buf + offset, qc->sect_size, do_write);
1da177e4 4855
91b8b313
AL
4856 kunmap_atomic(buf, KM_IRQ0);
4857 local_irq_restore(flags);
4858 } else {
4859 buf = page_address(page);
5a5dbd18 4860 ap->ops->data_xfer(qc->dev, buf + offset, qc->sect_size, do_write);
91b8b313 4861 }
1da177e4 4862
5a5dbd18
ML
4863 qc->curbytes += qc->sect_size;
4864 qc->cursg_ofs += qc->sect_size;
1da177e4 4865
726f0785 4866 if (qc->cursg_ofs == (&sg[qc->cursg])->length) {
1da177e4
LT
4867 qc->cursg++;
4868 qc->cursg_ofs = 0;
4869 }
1da177e4 4870}
1da177e4 4871
07f6f7d0 4872/**
5a5dbd18 4873 * ata_pio_sectors - Transfer one or many sectors.
07f6f7d0
AL
4874 * @qc: Command on going
4875 *
5a5dbd18 4876 * Transfer one or many sectors of data from/to the
07f6f7d0
AL
4877 * ATA device for the DRQ request.
4878 *
4879 * LOCKING:
4880 * Inherited from caller.
4881 */
1da177e4 4882
07f6f7d0
AL
4883static void ata_pio_sectors(struct ata_queued_cmd *qc)
4884{
4885 if (is_multi_taskfile(&qc->tf)) {
4886 /* READ/WRITE MULTIPLE */
4887 unsigned int nsect;
4888
587005de 4889 WARN_ON(qc->dev->multi_count == 0);
1da177e4 4890
5a5dbd18 4891 nsect = min((qc->nbytes - qc->curbytes) / qc->sect_size,
726f0785 4892 qc->dev->multi_count);
07f6f7d0
AL
4893 while (nsect--)
4894 ata_pio_sector(qc);
4895 } else
4896 ata_pio_sector(qc);
4cc980b3
AL
4897
4898 ata_altstatus(qc->ap); /* flush */
07f6f7d0
AL
4899}
4900
c71c1857
AL
4901/**
4902 * atapi_send_cdb - Write CDB bytes to hardware
4903 * @ap: Port to which ATAPI device is attached.
4904 * @qc: Taskfile currently active
4905 *
4906 * When device has indicated its readiness to accept
4907 * a CDB, this function is called. Send the CDB.
4908 *
4909 * LOCKING:
4910 * caller.
4911 */
4912
4913static void atapi_send_cdb(struct ata_port *ap, struct ata_queued_cmd *qc)
4914{
4915 /* send SCSI cdb */
4916 DPRINTK("send cdb\n");
db024d53 4917 WARN_ON(qc->dev->cdb_len < 12);
c71c1857 4918
a6b2c5d4 4919 ap->ops->data_xfer(qc->dev, qc->cdb, qc->dev->cdb_len, 1);
c71c1857
AL
4920 ata_altstatus(ap); /* flush */
4921
4922 switch (qc->tf.protocol) {
4923 case ATA_PROT_ATAPI:
4924 ap->hsm_task_state = HSM_ST;
4925 break;
4926 case ATA_PROT_ATAPI_NODATA:
4927 ap->hsm_task_state = HSM_ST_LAST;
4928 break;
4929 case ATA_PROT_ATAPI_DMA:
4930 ap->hsm_task_state = HSM_ST_LAST;
4931 /* initiate bmdma */
4932 ap->ops->bmdma_start(qc);
4933 break;
4934 }
1da177e4
LT
4935}
4936
6ae4cfb5
AL
4937/**
4938 * __atapi_pio_bytes - Transfer data from/to the ATAPI device.
4939 * @qc: Command on going
4940 * @bytes: number of bytes
4941 *
4942 * Transfer Transfer data from/to the ATAPI device.
4943 *
4944 * LOCKING:
4945 * Inherited from caller.
4946 *
4947 */
4948
1da177e4
LT
4949static void __atapi_pio_bytes(struct ata_queued_cmd *qc, unsigned int bytes)
4950{
4951 int do_write = (qc->tf.flags & ATA_TFLAG_WRITE);
cedc9a47 4952 struct scatterlist *sg = qc->__sg;
1da177e4
LT
4953 struct ata_port *ap = qc->ap;
4954 struct page *page;
4955 unsigned char *buf;
4956 unsigned int offset, count;
4957
563a6e1f 4958 if (qc->curbytes + bytes >= qc->nbytes)
14be71f4 4959 ap->hsm_task_state = HSM_ST_LAST;
1da177e4
LT
4960
4961next_sg:
563a6e1f 4962 if (unlikely(qc->cursg >= qc->n_elem)) {
7fb6ec28 4963 /*
563a6e1f
AL
4964 * The end of qc->sg is reached and the device expects
4965 * more data to transfer. In order not to overrun qc->sg
4966 * and fulfill length specified in the byte count register,
4967 * - for read case, discard trailing data from the device
4968 * - for write case, padding zero data to the device
4969 */
4970 u16 pad_buf[1] = { 0 };
4971 unsigned int words = bytes >> 1;
4972 unsigned int i;
4973
4974 if (words) /* warning if bytes > 1 */
f15a1daf
TH
4975 ata_dev_printk(qc->dev, KERN_WARNING,
4976 "%u bytes trailing data\n", bytes);
563a6e1f
AL
4977
4978 for (i = 0; i < words; i++)
a6b2c5d4 4979 ap->ops->data_xfer(qc->dev, (unsigned char*)pad_buf, 2, do_write);
563a6e1f 4980
14be71f4 4981 ap->hsm_task_state = HSM_ST_LAST;
563a6e1f
AL
4982 return;
4983 }
4984
cedc9a47 4985 sg = &qc->__sg[qc->cursg];
1da177e4 4986
1da177e4
LT
4987 page = sg->page;
4988 offset = sg->offset + qc->cursg_ofs;
4989
4990 /* get the current page and offset */
4991 page = nth_page(page, (offset >> PAGE_SHIFT));
4992 offset %= PAGE_SIZE;
4993
6952df03 4994 /* don't overrun current sg */
32529e01 4995 count = min(sg->length - qc->cursg_ofs, bytes);
1da177e4
LT
4996
4997 /* don't cross page boundaries */
4998 count = min(count, (unsigned int)PAGE_SIZE - offset);
4999
7282aa4b
AL
5000 DPRINTK("data %s\n", qc->tf.flags & ATA_TFLAG_WRITE ? "write" : "read");
5001
91b8b313
AL
5002 if (PageHighMem(page)) {
5003 unsigned long flags;
5004
a6b2c5d4 5005 /* FIXME: use bounce buffer */
91b8b313
AL
5006 local_irq_save(flags);
5007 buf = kmap_atomic(page, KM_IRQ0);
083958d3 5008
91b8b313 5009 /* do the actual data transfer */
a6b2c5d4 5010 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write);
7282aa4b 5011
91b8b313
AL
5012 kunmap_atomic(buf, KM_IRQ0);
5013 local_irq_restore(flags);
5014 } else {
5015 buf = page_address(page);
a6b2c5d4 5016 ap->ops->data_xfer(qc->dev, buf + offset, count, do_write);
91b8b313 5017 }
1da177e4
LT
5018
5019 bytes -= count;
5020 qc->curbytes += count;
5021 qc->cursg_ofs += count;
5022
32529e01 5023 if (qc->cursg_ofs == sg->length) {
1da177e4
LT
5024 qc->cursg++;
5025 qc->cursg_ofs = 0;
5026 }
5027
563a6e1f 5028 if (bytes)
1da177e4 5029 goto next_sg;
1da177e4
LT
5030}
5031
6ae4cfb5
AL
5032/**
5033 * atapi_pio_bytes - Transfer data from/to the ATAPI device.
5034 * @qc: Command on going
5035 *
5036 * Transfer Transfer data from/to the ATAPI device.
5037 *
5038 * LOCKING:
5039 * Inherited from caller.
6ae4cfb5
AL
5040 */
5041
1da177e4
LT
5042static void atapi_pio_bytes(struct ata_queued_cmd *qc)
5043{
5044 struct ata_port *ap = qc->ap;
5045 struct ata_device *dev = qc->dev;
5046 unsigned int ireason, bc_lo, bc_hi, bytes;
5047 int i_write, do_write = (qc->tf.flags & ATA_TFLAG_WRITE) ? 1 : 0;
5048
eec4c3f3
AL
5049 /* Abuse qc->result_tf for temp storage of intermediate TF
5050 * here to save some kernel stack usage.
5051 * For normal completion, qc->result_tf is not relevant. For
5052 * error, qc->result_tf is later overwritten by ata_qc_complete().
5053 * So, the correctness of qc->result_tf is not affected.
5054 */
5055 ap->ops->tf_read(ap, &qc->result_tf);
5056 ireason = qc->result_tf.nsect;
5057 bc_lo = qc->result_tf.lbam;
5058 bc_hi = qc->result_tf.lbah;
1da177e4
LT
5059 bytes = (bc_hi << 8) | bc_lo;
5060
5061 /* shall be cleared to zero, indicating xfer of data */
5062 if (ireason & (1 << 0))
5063 goto err_out;
5064
5065 /* make sure transfer direction matches expected */
5066 i_write = ((ireason & (1 << 1)) == 0) ? 1 : 0;
5067 if (do_write != i_write)
5068 goto err_out;
5069
44877b4e 5070 VPRINTK("ata%u: xfering %d bytes\n", ap->print_id, bytes);
312f7da2 5071
1da177e4 5072 __atapi_pio_bytes(qc, bytes);
4cc980b3 5073 ata_altstatus(ap); /* flush */
1da177e4
LT
5074
5075 return;
5076
5077err_out:
f15a1daf 5078 ata_dev_printk(dev, KERN_INFO, "ATAPI check failed\n");
11a56d24 5079 qc->err_mask |= AC_ERR_HSM;
14be71f4 5080 ap->hsm_task_state = HSM_ST_ERR;
1da177e4
LT
5081}
5082
5083/**
c234fb00
AL
5084 * ata_hsm_ok_in_wq - Check if the qc can be handled in the workqueue.
5085 * @ap: the target ata_port
5086 * @qc: qc on going
1da177e4 5087 *
c234fb00
AL
5088 * RETURNS:
5089 * 1 if ok in workqueue, 0 otherwise.
1da177e4 5090 */
c234fb00
AL
5091
5092static inline int ata_hsm_ok_in_wq(struct ata_port *ap, struct ata_queued_cmd *qc)
1da177e4 5093{
c234fb00
AL
5094 if (qc->tf.flags & ATA_TFLAG_POLLING)
5095 return 1;
1da177e4 5096
c234fb00
AL
5097 if (ap->hsm_task_state == HSM_ST_FIRST) {
5098 if (qc->tf.protocol == ATA_PROT_PIO &&
5099 (qc->tf.flags & ATA_TFLAG_WRITE))
5100 return 1;
1da177e4 5101
c234fb00
AL
5102 if (is_atapi_taskfile(&qc->tf) &&
5103 !(qc->dev->flags & ATA_DFLAG_CDB_INTR))
5104 return 1;
fe79e683
AL
5105 }
5106
c234fb00
AL
5107 return 0;
5108}
1da177e4 5109
c17ea20d
TH
5110/**
5111 * ata_hsm_qc_complete - finish a qc running on standard HSM
5112 * @qc: Command to complete
5113 * @in_wq: 1 if called from workqueue, 0 otherwise
5114 *
5115 * Finish @qc which is running on standard HSM.
5116 *
5117 * LOCKING:
cca3974e 5118 * If @in_wq is zero, spin_lock_irqsave(host lock).
c17ea20d
TH
5119 * Otherwise, none on entry and grabs host lock.
5120 */
5121static void ata_hsm_qc_complete(struct ata_queued_cmd *qc, int in_wq)
5122{
5123 struct ata_port *ap = qc->ap;
5124 unsigned long flags;
5125
5126 if (ap->ops->error_handler) {
5127 if (in_wq) {
ba6a1308 5128 spin_lock_irqsave(ap->lock, flags);
c17ea20d 5129
cca3974e
JG
5130 /* EH might have kicked in while host lock is
5131 * released.
c17ea20d
TH
5132 */
5133 qc = ata_qc_from_tag(ap, qc->tag);
5134 if (qc) {
5135 if (likely(!(qc->err_mask & AC_ERR_HSM))) {
83625006 5136 ap->ops->irq_on(ap);
c17ea20d
TH
5137 ata_qc_complete(qc);
5138 } else
5139 ata_port_freeze(ap);
5140 }
5141
ba6a1308 5142 spin_unlock_irqrestore(ap->lock, flags);
c17ea20d
TH
5143 } else {
5144 if (likely(!(qc->err_mask & AC_ERR_HSM)))
5145 ata_qc_complete(qc);
5146 else
5147 ata_port_freeze(ap);
5148 }
5149 } else {
5150 if (in_wq) {
ba6a1308 5151 spin_lock_irqsave(ap->lock, flags);
83625006 5152 ap->ops->irq_on(ap);
c17ea20d 5153 ata_qc_complete(qc);
ba6a1308 5154 spin_unlock_irqrestore(ap->lock, flags);
c17ea20d
TH
5155 } else
5156 ata_qc_complete(qc);
5157 }
5158}
5159
bb5cb290
AL
5160/**
5161 * ata_hsm_move - move the HSM to the next state.
5162 * @ap: the target ata_port
5163 * @qc: qc on going
5164 * @status: current device status
5165 * @in_wq: 1 if called from workqueue, 0 otherwise
5166 *
5167 * RETURNS:
5168 * 1 when poll next status needed, 0 otherwise.
5169 */
9a1004d0
TH
5170int ata_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
5171 u8 status, int in_wq)
e2cec771 5172{
bb5cb290
AL
5173 unsigned long flags = 0;
5174 int poll_next;
5175
6912ccd5
AL
5176 WARN_ON((qc->flags & ATA_QCFLAG_ACTIVE) == 0);
5177
bb5cb290
AL
5178 /* Make sure ata_qc_issue_prot() does not throw things
5179 * like DMA polling into the workqueue. Notice that
5180 * in_wq is not equivalent to (qc->tf.flags & ATA_TFLAG_POLLING).
5181 */
c234fb00 5182 WARN_ON(in_wq != ata_hsm_ok_in_wq(ap, qc));
bb5cb290 5183
e2cec771 5184fsm_start:
999bb6f4 5185 DPRINTK("ata%u: protocol %d task_state %d (dev_stat 0x%X)\n",
44877b4e 5186 ap->print_id, qc->tf.protocol, ap->hsm_task_state, status);
999bb6f4 5187
e2cec771
AL
5188 switch (ap->hsm_task_state) {
5189 case HSM_ST_FIRST:
bb5cb290
AL
5190 /* Send first data block or PACKET CDB */
5191
5192 /* If polling, we will stay in the work queue after
5193 * sending the data. Otherwise, interrupt handler
5194 * takes over after sending the data.
5195 */
5196 poll_next = (qc->tf.flags & ATA_TFLAG_POLLING);
5197
e2cec771 5198 /* check device status */
3655d1d3
AL
5199 if (unlikely((status & ATA_DRQ) == 0)) {
5200 /* handle BSY=0, DRQ=0 as error */
5201 if (likely(status & (ATA_ERR | ATA_DF)))
5202 /* device stops HSM for abort/error */
5203 qc->err_mask |= AC_ERR_DEV;
5204 else
5205 /* HSM violation. Let EH handle this */
5206 qc->err_mask |= AC_ERR_HSM;
5207
14be71f4 5208 ap->hsm_task_state = HSM_ST_ERR;
e2cec771 5209 goto fsm_start;
1da177e4
LT
5210 }
5211
71601958
AL
5212 /* Device should not ask for data transfer (DRQ=1)
5213 * when it finds something wrong.
eee6c32f
AL
5214 * We ignore DRQ here and stop the HSM by
5215 * changing hsm_task_state to HSM_ST_ERR and
5216 * let the EH abort the command or reset the device.
71601958
AL
5217 */
5218 if (unlikely(status & (ATA_ERR | ATA_DF))) {
44877b4e
TH
5219 ata_port_printk(ap, KERN_WARNING, "DRQ=1 with device "
5220 "error, dev_stat 0x%X\n", status);
3655d1d3 5221 qc->err_mask |= AC_ERR_HSM;
eee6c32f
AL
5222 ap->hsm_task_state = HSM_ST_ERR;
5223 goto fsm_start;
71601958 5224 }
1da177e4 5225
bb5cb290
AL
5226 /* Send the CDB (atapi) or the first data block (ata pio out).
5227 * During the state transition, interrupt handler shouldn't
5228 * be invoked before the data transfer is complete and
5229 * hsm_task_state is changed. Hence, the following locking.
5230 */
5231 if (in_wq)
ba6a1308 5232 spin_lock_irqsave(ap->lock, flags);
1da177e4 5233
bb5cb290
AL
5234 if (qc->tf.protocol == ATA_PROT_PIO) {
5235 /* PIO data out protocol.
5236 * send first data block.
5237 */
0565c26d 5238
bb5cb290
AL
5239 /* ata_pio_sectors() might change the state
5240 * to HSM_ST_LAST. so, the state is changed here
5241 * before ata_pio_sectors().
5242 */
5243 ap->hsm_task_state = HSM_ST;
5244 ata_pio_sectors(qc);
bb5cb290
AL
5245 } else
5246 /* send CDB */
5247 atapi_send_cdb(ap, qc);
5248
5249 if (in_wq)
ba6a1308 5250 spin_unlock_irqrestore(ap->lock, flags);
bb5cb290
AL
5251
5252 /* if polling, ata_pio_task() handles the rest.
5253 * otherwise, interrupt handler takes over from here.
5254 */
e2cec771 5255 break;
1c848984 5256
e2cec771
AL
5257 case HSM_ST:
5258 /* complete command or read/write the data register */
5259 if (qc->tf.protocol == ATA_PROT_ATAPI) {
5260 /* ATAPI PIO protocol */
5261 if ((status & ATA_DRQ) == 0) {
3655d1d3
AL
5262 /* No more data to transfer or device error.
5263 * Device error will be tagged in HSM_ST_LAST.
5264 */
e2cec771
AL
5265 ap->hsm_task_state = HSM_ST_LAST;
5266 goto fsm_start;
5267 }
1da177e4 5268
71601958
AL
5269 /* Device should not ask for data transfer (DRQ=1)
5270 * when it finds something wrong.
eee6c32f
AL
5271 * We ignore DRQ here and stop the HSM by
5272 * changing hsm_task_state to HSM_ST_ERR and
5273 * let the EH abort the command or reset the device.
71601958
AL
5274 */
5275 if (unlikely(status & (ATA_ERR | ATA_DF))) {
44877b4e
TH
5276 ata_port_printk(ap, KERN_WARNING, "DRQ=1 with "
5277 "device error, dev_stat 0x%X\n",
5278 status);
3655d1d3 5279 qc->err_mask |= AC_ERR_HSM;
eee6c32f
AL
5280 ap->hsm_task_state = HSM_ST_ERR;
5281 goto fsm_start;
71601958 5282 }
1da177e4 5283
e2cec771 5284 atapi_pio_bytes(qc);
7fb6ec28 5285
e2cec771
AL
5286 if (unlikely(ap->hsm_task_state == HSM_ST_ERR))
5287 /* bad ireason reported by device */
5288 goto fsm_start;
1da177e4 5289
e2cec771
AL
5290 } else {
5291 /* ATA PIO protocol */
5292 if (unlikely((status & ATA_DRQ) == 0)) {
5293 /* handle BSY=0, DRQ=0 as error */
3655d1d3
AL
5294 if (likely(status & (ATA_ERR | ATA_DF)))
5295 /* device stops HSM for abort/error */
5296 qc->err_mask |= AC_ERR_DEV;
5297 else
55a8e2c8
TH
5298 /* HSM violation. Let EH handle this.
5299 * Phantom devices also trigger this
5300 * condition. Mark hint.
5301 */
5302 qc->err_mask |= AC_ERR_HSM |
5303 AC_ERR_NODEV_HINT;
3655d1d3 5304
e2cec771
AL
5305 ap->hsm_task_state = HSM_ST_ERR;
5306 goto fsm_start;
5307 }
1da177e4 5308
eee6c32f
AL
5309 /* For PIO reads, some devices may ask for
5310 * data transfer (DRQ=1) alone with ERR=1.
5311 * We respect DRQ here and transfer one
5312 * block of junk data before changing the
5313 * hsm_task_state to HSM_ST_ERR.
5314 *
5315 * For PIO writes, ERR=1 DRQ=1 doesn't make
5316 * sense since the data block has been
5317 * transferred to the device.
71601958
AL
5318 */
5319 if (unlikely(status & (ATA_ERR | ATA_DF))) {
71601958
AL
5320 /* data might be corrputed */
5321 qc->err_mask |= AC_ERR_DEV;
eee6c32f
AL
5322
5323 if (!(qc->tf.flags & ATA_TFLAG_WRITE)) {
5324 ata_pio_sectors(qc);
eee6c32f
AL
5325 status = ata_wait_idle(ap);
5326 }
5327
3655d1d3
AL
5328 if (status & (ATA_BUSY | ATA_DRQ))
5329 qc->err_mask |= AC_ERR_HSM;
5330
eee6c32f
AL
5331 /* ata_pio_sectors() might change the
5332 * state to HSM_ST_LAST. so, the state
5333 * is changed after ata_pio_sectors().
5334 */
5335 ap->hsm_task_state = HSM_ST_ERR;
5336 goto fsm_start;
71601958
AL
5337 }
5338
e2cec771
AL
5339 ata_pio_sectors(qc);
5340
5341 if (ap->hsm_task_state == HSM_ST_LAST &&
5342 (!(qc->tf.flags & ATA_TFLAG_WRITE))) {
5343 /* all data read */
52a32205 5344 status = ata_wait_idle(ap);
e2cec771
AL
5345 goto fsm_start;
5346 }
5347 }
5348
bb5cb290 5349 poll_next = 1;
1da177e4
LT
5350 break;
5351
14be71f4 5352 case HSM_ST_LAST:
6912ccd5
AL
5353 if (unlikely(!ata_ok(status))) {
5354 qc->err_mask |= __ac_err_mask(status);
e2cec771
AL
5355 ap->hsm_task_state = HSM_ST_ERR;
5356 goto fsm_start;
5357 }
5358
5359 /* no more data to transfer */
4332a771 5360 DPRINTK("ata%u: dev %u command complete, drv_stat 0x%x\n",
44877b4e 5361 ap->print_id, qc->dev->devno, status);
e2cec771 5362
6912ccd5
AL
5363 WARN_ON(qc->err_mask);
5364
e2cec771 5365 ap->hsm_task_state = HSM_ST_IDLE;
1da177e4 5366
e2cec771 5367 /* complete taskfile transaction */
c17ea20d 5368 ata_hsm_qc_complete(qc, in_wq);
bb5cb290
AL
5369
5370 poll_next = 0;
1da177e4
LT
5371 break;
5372
14be71f4 5373 case HSM_ST_ERR:
e2cec771
AL
5374 /* make sure qc->err_mask is available to
5375 * know what's wrong and recover
5376 */
5377 WARN_ON(qc->err_mask == 0);
5378
5379 ap->hsm_task_state = HSM_ST_IDLE;
bb5cb290 5380
999bb6f4 5381 /* complete taskfile transaction */
c17ea20d 5382 ata_hsm_qc_complete(qc, in_wq);
bb5cb290
AL
5383
5384 poll_next = 0;
e2cec771
AL
5385 break;
5386 default:
bb5cb290 5387 poll_next = 0;
6912ccd5 5388 BUG();
1da177e4
LT
5389 }
5390
bb5cb290 5391 return poll_next;
1da177e4
LT
5392}
5393
65f27f38 5394static void ata_pio_task(struct work_struct *work)
8061f5f0 5395{
65f27f38
DH
5396 struct ata_port *ap =
5397 container_of(work, struct ata_port, port_task.work);
5398 struct ata_queued_cmd *qc = ap->port_task_data;
8061f5f0 5399 u8 status;
a1af3734 5400 int poll_next;
8061f5f0 5401
7fb6ec28 5402fsm_start:
a1af3734 5403 WARN_ON(ap->hsm_task_state == HSM_ST_IDLE);
8061f5f0 5404
a1af3734
AL
5405 /*
5406 * This is purely heuristic. This is a fast path.
5407 * Sometimes when we enter, BSY will be cleared in
5408 * a chk-status or two. If not, the drive is probably seeking
5409 * or something. Snooze for a couple msecs, then
5410 * chk-status again. If still busy, queue delayed work.
5411 */
5412 status = ata_busy_wait(ap, ATA_BUSY, 5);
5413 if (status & ATA_BUSY) {
5414 msleep(2);
5415 status = ata_busy_wait(ap, ATA_BUSY, 10);
5416 if (status & ATA_BUSY) {
31ce6dae 5417 ata_port_queue_task(ap, ata_pio_task, qc, ATA_SHORT_PAUSE);
a1af3734
AL
5418 return;
5419 }
8061f5f0
TH
5420 }
5421
a1af3734
AL
5422 /* move the HSM */
5423 poll_next = ata_hsm_move(ap, qc, status, 1);
8061f5f0 5424
a1af3734
AL
5425 /* another command or interrupt handler
5426 * may be running at this point.
5427 */
5428 if (poll_next)
7fb6ec28 5429 goto fsm_start;
8061f5f0
TH
5430}
5431
1da177e4
LT
5432/**
5433 * ata_qc_new - Request an available ATA command, for queueing
5434 * @ap: Port associated with device @dev
5435 * @dev: Device from whom we request an available command structure
5436 *
5437 * LOCKING:
0cba632b 5438 * None.
1da177e4
LT
5439 */
5440
5441static struct ata_queued_cmd *ata_qc_new(struct ata_port *ap)
5442{
5443 struct ata_queued_cmd *qc = NULL;
5444 unsigned int i;
5445
e3180499 5446 /* no command while frozen */
b51e9e5d 5447 if (unlikely(ap->pflags & ATA_PFLAG_FROZEN))
e3180499
TH
5448 return NULL;
5449
2ab7db1f
TH
5450 /* the last tag is reserved for internal command. */
5451 for (i = 0; i < ATA_MAX_QUEUE - 1; i++)
6cec4a39 5452 if (!test_and_set_bit(i, &ap->qc_allocated)) {
f69499f4 5453 qc = __ata_qc_from_tag(ap, i);
1da177e4
LT
5454 break;
5455 }
5456
5457 if (qc)
5458 qc->tag = i;
5459
5460 return qc;
5461}
5462
5463/**
5464 * ata_qc_new_init - Request an available ATA command, and initialize it
1da177e4
LT
5465 * @dev: Device from whom we request an available command structure
5466 *
5467 * LOCKING:
0cba632b 5468 * None.
1da177e4
LT
5469 */
5470
3373efd8 5471struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev)
1da177e4 5472{
9af5c9c9 5473 struct ata_port *ap = dev->link->ap;
1da177e4
LT
5474 struct ata_queued_cmd *qc;
5475
5476 qc = ata_qc_new(ap);
5477 if (qc) {
1da177e4
LT
5478 qc->scsicmd = NULL;
5479 qc->ap = ap;
5480 qc->dev = dev;
1da177e4 5481
2c13b7ce 5482 ata_qc_reinit(qc);
1da177e4
LT
5483 }
5484
5485 return qc;
5486}
5487
1da177e4
LT
5488/**
5489 * ata_qc_free - free unused ata_queued_cmd
5490 * @qc: Command to complete
5491 *
5492 * Designed to free unused ata_queued_cmd object
5493 * in case something prevents using it.
5494 *
5495 * LOCKING:
cca3974e 5496 * spin_lock_irqsave(host lock)
1da177e4
LT
5497 */
5498void ata_qc_free(struct ata_queued_cmd *qc)
5499{
4ba946e9
TH
5500 struct ata_port *ap = qc->ap;
5501 unsigned int tag;
5502
a4631474 5503 WARN_ON(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
1da177e4 5504
4ba946e9
TH
5505 qc->flags = 0;
5506 tag = qc->tag;
5507 if (likely(ata_tag_valid(tag))) {
4ba946e9 5508 qc->tag = ATA_TAG_POISON;
6cec4a39 5509 clear_bit(tag, &ap->qc_allocated);
4ba946e9 5510 }
1da177e4
LT
5511}
5512
76014427 5513void __ata_qc_complete(struct ata_queued_cmd *qc)
1da177e4 5514{
dedaf2b0 5515 struct ata_port *ap = qc->ap;
9af5c9c9 5516 struct ata_link *link = qc->dev->link;
dedaf2b0 5517
a4631474
TH
5518 WARN_ON(qc == NULL); /* ata_qc_from_tag _might_ return NULL */
5519 WARN_ON(!(qc->flags & ATA_QCFLAG_ACTIVE));
1da177e4
LT
5520
5521 if (likely(qc->flags & ATA_QCFLAG_DMAMAP))
5522 ata_sg_clean(qc);
5523
7401abf2 5524 /* command should be marked inactive atomically with qc completion */
da917d69 5525 if (qc->tf.protocol == ATA_PROT_NCQ) {
9af5c9c9 5526 link->sactive &= ~(1 << qc->tag);
da917d69
TH
5527 if (!link->sactive)
5528 ap->nr_active_links--;
5529 } else {
9af5c9c9 5530 link->active_tag = ATA_TAG_POISON;
da917d69
TH
5531 ap->nr_active_links--;
5532 }
5533
5534 /* clear exclusive status */
5535 if (unlikely(qc->flags & ATA_QCFLAG_CLEAR_EXCL &&
5536 ap->excl_link == link))
5537 ap->excl_link = NULL;
7401abf2 5538
3f3791d3
AL
5539 /* atapi: mark qc as inactive to prevent the interrupt handler
5540 * from completing the command twice later, before the error handler
5541 * is called. (when rc != 0 and atapi request sense is needed)
5542 */
5543 qc->flags &= ~ATA_QCFLAG_ACTIVE;
dedaf2b0 5544 ap->qc_active &= ~(1 << qc->tag);
3f3791d3 5545
1da177e4 5546 /* call completion callback */
77853bf2 5547 qc->complete_fn(qc);
1da177e4
LT
5548}
5549
39599a53
TH
5550static void fill_result_tf(struct ata_queued_cmd *qc)
5551{
5552 struct ata_port *ap = qc->ap;
5553
39599a53 5554 qc->result_tf.flags = qc->tf.flags;
4742d54f 5555 ap->ops->tf_read(ap, &qc->result_tf);
39599a53
TH
5556}
5557
f686bcb8
TH
5558/**
5559 * ata_qc_complete - Complete an active ATA command
5560 * @qc: Command to complete
5561 * @err_mask: ATA Status register contents
5562 *
5563 * Indicate to the mid and upper layers that an ATA
5564 * command has completed, with either an ok or not-ok status.
5565 *
5566 * LOCKING:
cca3974e 5567 * spin_lock_irqsave(host lock)
f686bcb8
TH
5568 */
5569void ata_qc_complete(struct ata_queued_cmd *qc)
5570{
5571 struct ata_port *ap = qc->ap;
5572
5573 /* XXX: New EH and old EH use different mechanisms to
5574 * synchronize EH with regular execution path.
5575 *
5576 * In new EH, a failed qc is marked with ATA_QCFLAG_FAILED.
5577 * Normal execution path is responsible for not accessing a
5578 * failed qc. libata core enforces the rule by returning NULL
5579 * from ata_qc_from_tag() for failed qcs.
5580 *
5581 * Old EH depends on ata_qc_complete() nullifying completion
5582 * requests if ATA_QCFLAG_EH_SCHEDULED is set. Old EH does
5583 * not synchronize with interrupt handler. Only PIO task is
5584 * taken care of.
5585 */
5586 if (ap->ops->error_handler) {
b51e9e5d 5587 WARN_ON(ap->pflags & ATA_PFLAG_FROZEN);
f686bcb8
TH
5588
5589 if (unlikely(qc->err_mask))
5590 qc->flags |= ATA_QCFLAG_FAILED;
5591
5592 if (unlikely(qc->flags & ATA_QCFLAG_FAILED)) {
5593 if (!ata_tag_internal(qc->tag)) {
5594 /* always fill result TF for failed qc */
39599a53 5595 fill_result_tf(qc);
f686bcb8
TH
5596 ata_qc_schedule_eh(qc);
5597 return;
5598 }
5599 }
5600
5601 /* read result TF if requested */
5602 if (qc->flags & ATA_QCFLAG_RESULT_TF)
39599a53 5603 fill_result_tf(qc);
f686bcb8
TH
5604
5605 __ata_qc_complete(qc);
5606 } else {
5607 if (qc->flags & ATA_QCFLAG_EH_SCHEDULED)
5608 return;
5609
5610 /* read result TF if failed or requested */
5611 if (qc->err_mask || qc->flags & ATA_QCFLAG_RESULT_TF)
39599a53 5612 fill_result_tf(qc);
f686bcb8
TH
5613
5614 __ata_qc_complete(qc);
5615 }
5616}
5617
dedaf2b0
TH
5618/**
5619 * ata_qc_complete_multiple - Complete multiple qcs successfully
5620 * @ap: port in question
5621 * @qc_active: new qc_active mask
5622 * @finish_qc: LLDD callback invoked before completing a qc
5623 *
5624 * Complete in-flight commands. This functions is meant to be
5625 * called from low-level driver's interrupt routine to complete
5626 * requests normally. ap->qc_active and @qc_active is compared
5627 * and commands are completed accordingly.
5628 *
5629 * LOCKING:
cca3974e 5630 * spin_lock_irqsave(host lock)
dedaf2b0
TH
5631 *
5632 * RETURNS:
5633 * Number of completed commands on success, -errno otherwise.
5634 */
5635int ata_qc_complete_multiple(struct ata_port *ap, u32 qc_active,
5636 void (*finish_qc)(struct ata_queued_cmd *))
5637{
5638 int nr_done = 0;
5639 u32 done_mask;
5640 int i;
5641
5642 done_mask = ap->qc_active ^ qc_active;
5643
5644 if (unlikely(done_mask & qc_active)) {
5645 ata_port_printk(ap, KERN_ERR, "illegal qc_active transition "
5646 "(%08x->%08x)\n", ap->qc_active, qc_active);
5647 return -EINVAL;
5648 }
5649
5650 for (i = 0; i < ATA_MAX_QUEUE; i++) {
5651 struct ata_queued_cmd *qc;
5652
5653 if (!(done_mask & (1 << i)))
5654 continue;
5655
5656 if ((qc = ata_qc_from_tag(ap, i))) {
5657 if (finish_qc)
5658 finish_qc(qc);
5659 ata_qc_complete(qc);
5660 nr_done++;
5661 }
5662 }
5663
5664 return nr_done;
5665}
5666
1da177e4
LT
5667static inline int ata_should_dma_map(struct ata_queued_cmd *qc)
5668{
5669 struct ata_port *ap = qc->ap;
5670
5671 switch (qc->tf.protocol) {
3dc1d881 5672 case ATA_PROT_NCQ:
1da177e4
LT
5673 case ATA_PROT_DMA:
5674 case ATA_PROT_ATAPI_DMA:
5675 return 1;
5676
5677 case ATA_PROT_ATAPI:
5678 case ATA_PROT_PIO:
1da177e4
LT
5679 if (ap->flags & ATA_FLAG_PIO_DMA)
5680 return 1;
5681
5682 /* fall through */
5683
5684 default:
5685 return 0;
5686 }
5687
5688 /* never reached */
5689}
5690
5691/**
5692 * ata_qc_issue - issue taskfile to device
5693 * @qc: command to issue to device
5694 *
5695 * Prepare an ATA command to submission to device.
5696 * This includes mapping the data into a DMA-able
5697 * area, filling in the S/G table, and finally
5698 * writing the taskfile to hardware, starting the command.
5699 *
5700 * LOCKING:
cca3974e 5701 * spin_lock_irqsave(host lock)
1da177e4 5702 */
8e0e694a 5703void ata_qc_issue(struct ata_queued_cmd *qc)
1da177e4
LT
5704{
5705 struct ata_port *ap = qc->ap;
9af5c9c9 5706 struct ata_link *link = qc->dev->link;
1da177e4 5707
dedaf2b0
TH
5708 /* Make sure only one non-NCQ command is outstanding. The
5709 * check is skipped for old EH because it reuses active qc to
5710 * request ATAPI sense.
5711 */
9af5c9c9 5712 WARN_ON(ap->ops->error_handler && ata_tag_valid(link->active_tag));
dedaf2b0
TH
5713
5714 if (qc->tf.protocol == ATA_PROT_NCQ) {
9af5c9c9 5715 WARN_ON(link->sactive & (1 << qc->tag));
da917d69
TH
5716
5717 if (!link->sactive)
5718 ap->nr_active_links++;
9af5c9c9 5719 link->sactive |= 1 << qc->tag;
dedaf2b0 5720 } else {
9af5c9c9 5721 WARN_ON(link->sactive);
da917d69
TH
5722
5723 ap->nr_active_links++;
9af5c9c9 5724 link->active_tag = qc->tag;
dedaf2b0
TH
5725 }
5726
e4a70e76 5727 qc->flags |= ATA_QCFLAG_ACTIVE;
dedaf2b0 5728 ap->qc_active |= 1 << qc->tag;
e4a70e76 5729
1da177e4
LT
5730 if (ata_should_dma_map(qc)) {
5731 if (qc->flags & ATA_QCFLAG_SG) {
5732 if (ata_sg_setup(qc))
8e436af9 5733 goto sg_err;
1da177e4
LT
5734 } else if (qc->flags & ATA_QCFLAG_SINGLE) {
5735 if (ata_sg_setup_one(qc))
8e436af9 5736 goto sg_err;
1da177e4
LT
5737 }
5738 } else {
5739 qc->flags &= ~ATA_QCFLAG_DMAMAP;
5740 }
5741
5742 ap->ops->qc_prep(qc);
5743
8e0e694a
TH
5744 qc->err_mask |= ap->ops->qc_issue(qc);
5745 if (unlikely(qc->err_mask))
5746 goto err;
5747 return;
1da177e4 5748
8e436af9
TH
5749sg_err:
5750 qc->flags &= ~ATA_QCFLAG_DMAMAP;
8e0e694a
TH
5751 qc->err_mask |= AC_ERR_SYSTEM;
5752err:
5753 ata_qc_complete(qc);
1da177e4
LT
5754}
5755
5756/**
5757 * ata_qc_issue_prot - issue taskfile to device in proto-dependent manner
5758 * @qc: command to issue to device
5759 *
5760 * Using various libata functions and hooks, this function
5761 * starts an ATA command. ATA commands are grouped into
5762 * classes called "protocols", and issuing each type of protocol
5763 * is slightly different.
5764 *
0baab86b
EF
5765 * May be used as the qc_issue() entry in ata_port_operations.
5766 *
1da177e4 5767 * LOCKING:
cca3974e 5768 * spin_lock_irqsave(host lock)
1da177e4
LT
5769 *
5770 * RETURNS:
9a3d9eb0 5771 * Zero on success, AC_ERR_* mask on failure
1da177e4
LT
5772 */
5773
9a3d9eb0 5774unsigned int ata_qc_issue_prot(struct ata_queued_cmd *qc)
1da177e4
LT
5775{
5776 struct ata_port *ap = qc->ap;
5777
e50362ec
AL
5778 /* Use polling pio if the LLD doesn't handle
5779 * interrupt driven pio and atapi CDB interrupt.
5780 */
5781 if (ap->flags & ATA_FLAG_PIO_POLLING) {
5782 switch (qc->tf.protocol) {
5783 case ATA_PROT_PIO:
e3472cbe 5784 case ATA_PROT_NODATA:
e50362ec
AL
5785 case ATA_PROT_ATAPI:
5786 case ATA_PROT_ATAPI_NODATA:
5787 qc->tf.flags |= ATA_TFLAG_POLLING;
5788 break;
5789 case ATA_PROT_ATAPI_DMA:
5790 if (qc->dev->flags & ATA_DFLAG_CDB_INTR)
3a778275 5791 /* see ata_dma_blacklisted() */
e50362ec
AL
5792 BUG();
5793 break;
5794 default:
5795 break;
5796 }
5797 }
5798
312f7da2 5799 /* select the device */
1da177e4
LT
5800 ata_dev_select(ap, qc->dev->devno, 1, 0);
5801
312f7da2 5802 /* start the command */
1da177e4
LT
5803 switch (qc->tf.protocol) {
5804 case ATA_PROT_NODATA:
312f7da2
AL
5805 if (qc->tf.flags & ATA_TFLAG_POLLING)
5806 ata_qc_set_polling(qc);
5807
e5338254 5808 ata_tf_to_host(ap, &qc->tf);
312f7da2
AL
5809 ap->hsm_task_state = HSM_ST_LAST;
5810
5811 if (qc->tf.flags & ATA_TFLAG_POLLING)
31ce6dae 5812 ata_port_queue_task(ap, ata_pio_task, qc, 0);
312f7da2 5813
1da177e4
LT
5814 break;
5815
5816 case ATA_PROT_DMA:
587005de 5817 WARN_ON(qc->tf.flags & ATA_TFLAG_POLLING);
312f7da2 5818
1da177e4
LT
5819 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */
5820 ap->ops->bmdma_setup(qc); /* set up bmdma */
5821 ap->ops->bmdma_start(qc); /* initiate bmdma */
312f7da2 5822 ap->hsm_task_state = HSM_ST_LAST;
1da177e4
LT
5823 break;
5824
312f7da2
AL
5825 case ATA_PROT_PIO:
5826 if (qc->tf.flags & ATA_TFLAG_POLLING)
5827 ata_qc_set_polling(qc);
1da177e4 5828
e5338254 5829 ata_tf_to_host(ap, &qc->tf);
312f7da2 5830
54f00389
AL
5831 if (qc->tf.flags & ATA_TFLAG_WRITE) {
5832 /* PIO data out protocol */
5833 ap->hsm_task_state = HSM_ST_FIRST;
31ce6dae 5834 ata_port_queue_task(ap, ata_pio_task, qc, 0);
54f00389
AL
5835
5836 /* always send first data block using
e27486db 5837 * the ata_pio_task() codepath.
54f00389 5838 */
312f7da2 5839 } else {
54f00389
AL
5840 /* PIO data in protocol */
5841 ap->hsm_task_state = HSM_ST;
5842
5843 if (qc->tf.flags & ATA_TFLAG_POLLING)
31ce6dae 5844 ata_port_queue_task(ap, ata_pio_task, qc, 0);
54f00389
AL
5845
5846 /* if polling, ata_pio_task() handles the rest.
5847 * otherwise, interrupt handler takes over from here.
5848 */
312f7da2
AL
5849 }
5850
1da177e4
LT
5851 break;
5852
1da177e4 5853 case ATA_PROT_ATAPI:
1da177e4 5854 case ATA_PROT_ATAPI_NODATA:
312f7da2
AL
5855 if (qc->tf.flags & ATA_TFLAG_POLLING)
5856 ata_qc_set_polling(qc);
5857
e5338254 5858 ata_tf_to_host(ap, &qc->tf);
f6ef65e6 5859
312f7da2
AL
5860 ap->hsm_task_state = HSM_ST_FIRST;
5861
5862 /* send cdb by polling if no cdb interrupt */
5863 if ((!(qc->dev->flags & ATA_DFLAG_CDB_INTR)) ||
5864 (qc->tf.flags & ATA_TFLAG_POLLING))
31ce6dae 5865 ata_port_queue_task(ap, ata_pio_task, qc, 0);
1da177e4
LT
5866 break;
5867
5868 case ATA_PROT_ATAPI_DMA:
587005de 5869 WARN_ON(qc->tf.flags & ATA_TFLAG_POLLING);
312f7da2 5870
1da177e4
LT
5871 ap->ops->tf_load(ap, &qc->tf); /* load tf registers */
5872 ap->ops->bmdma_setup(qc); /* set up bmdma */
312f7da2
AL
5873 ap->hsm_task_state = HSM_ST_FIRST;
5874
5875 /* send cdb by polling if no cdb interrupt */
5876 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
31ce6dae 5877 ata_port_queue_task(ap, ata_pio_task, qc, 0);
1da177e4
LT
5878 break;
5879
5880 default:
5881 WARN_ON(1);
9a3d9eb0 5882 return AC_ERR_SYSTEM;
1da177e4
LT
5883 }
5884
5885 return 0;
5886}
5887
1da177e4
LT
5888/**
5889 * ata_host_intr - Handle host interrupt for given (port, task)
5890 * @ap: Port on which interrupt arrived (possibly...)
5891 * @qc: Taskfile currently active in engine
5892 *
5893 * Handle host interrupt for given queued command. Currently,
5894 * only DMA interrupts are handled. All other commands are
5895 * handled via polling with interrupts disabled (nIEN bit).
5896 *
5897 * LOCKING:
cca3974e 5898 * spin_lock_irqsave(host lock)
1da177e4
LT
5899 *
5900 * RETURNS:
5901 * One if interrupt was handled, zero if not (shared irq).
5902 */
5903
5904inline unsigned int ata_host_intr (struct ata_port *ap,
5905 struct ata_queued_cmd *qc)
5906{
9af5c9c9 5907 struct ata_eh_info *ehi = &ap->link.eh_info;
312f7da2 5908 u8 status, host_stat = 0;
1da177e4 5909
312f7da2 5910 VPRINTK("ata%u: protocol %d task_state %d\n",
44877b4e 5911 ap->print_id, qc->tf.protocol, ap->hsm_task_state);
1da177e4 5912
312f7da2
AL
5913 /* Check whether we are expecting interrupt in this state */
5914 switch (ap->hsm_task_state) {
5915 case HSM_ST_FIRST:
6912ccd5
AL
5916 /* Some pre-ATAPI-4 devices assert INTRQ
5917 * at this state when ready to receive CDB.
5918 */
1da177e4 5919
312f7da2
AL
5920 /* Check the ATA_DFLAG_CDB_INTR flag is enough here.
5921 * The flag was turned on only for atapi devices.
5922 * No need to check is_atapi_taskfile(&qc->tf) again.
5923 */
5924 if (!(qc->dev->flags & ATA_DFLAG_CDB_INTR))
1da177e4 5925 goto idle_irq;
1da177e4 5926 break;
312f7da2
AL
5927 case HSM_ST_LAST:
5928 if (qc->tf.protocol == ATA_PROT_DMA ||
5929 qc->tf.protocol == ATA_PROT_ATAPI_DMA) {
5930 /* check status of DMA engine */
5931 host_stat = ap->ops->bmdma_status(ap);
44877b4e
TH
5932 VPRINTK("ata%u: host_stat 0x%X\n",
5933 ap->print_id, host_stat);
312f7da2
AL
5934
5935 /* if it's not our irq... */
5936 if (!(host_stat & ATA_DMA_INTR))
5937 goto idle_irq;
5938
5939 /* before we do anything else, clear DMA-Start bit */
5940 ap->ops->bmdma_stop(qc);
a4f16610
AL
5941
5942 if (unlikely(host_stat & ATA_DMA_ERR)) {
5943 /* error when transfering data to/from memory */
5944 qc->err_mask |= AC_ERR_HOST_BUS;
5945 ap->hsm_task_state = HSM_ST_ERR;
5946 }
312f7da2
AL
5947 }
5948 break;
5949 case HSM_ST:
5950 break;
1da177e4
LT
5951 default:
5952 goto idle_irq;
5953 }
5954
312f7da2
AL
5955 /* check altstatus */
5956 status = ata_altstatus(ap);
5957 if (status & ATA_BUSY)
5958 goto idle_irq;
1da177e4 5959
312f7da2
AL
5960 /* check main status, clearing INTRQ */
5961 status = ata_chk_status(ap);
5962 if (unlikely(status & ATA_BUSY))
5963 goto idle_irq;
1da177e4 5964
312f7da2
AL
5965 /* ack bmdma irq events */
5966 ap->ops->irq_clear(ap);
1da177e4 5967
bb5cb290 5968 ata_hsm_move(ap, qc, status, 0);
ea54763f
TH
5969
5970 if (unlikely(qc->err_mask) && (qc->tf.protocol == ATA_PROT_DMA ||
5971 qc->tf.protocol == ATA_PROT_ATAPI_DMA))
5972 ata_ehi_push_desc(ehi, "BMDMA stat 0x%x", host_stat);
5973
1da177e4
LT
5974 return 1; /* irq handled */
5975
5976idle_irq:
5977 ap->stats.idle_irq++;
5978
5979#ifdef ATA_IRQ_TRAP
5980 if ((ap->stats.idle_irq % 1000) == 0) {
6d32d30f
JG
5981 ata_chk_status(ap);
5982 ap->ops->irq_clear(ap);
f15a1daf 5983 ata_port_printk(ap, KERN_WARNING, "irq trap\n");
23cfce89 5984 return 1;
1da177e4
LT
5985 }
5986#endif
5987 return 0; /* irq not handled */
5988}
5989
5990/**
5991 * ata_interrupt - Default ATA host interrupt handler
0cba632b 5992 * @irq: irq line (unused)
cca3974e 5993 * @dev_instance: pointer to our ata_host information structure
1da177e4 5994 *
0cba632b
JG
5995 * Default interrupt handler for PCI IDE devices. Calls
5996 * ata_host_intr() for each port that is not disabled.
5997 *
1da177e4 5998 * LOCKING:
cca3974e 5999 * Obtains host lock during operation.
1da177e4
LT
6000 *
6001 * RETURNS:
0cba632b 6002 * IRQ_NONE or IRQ_HANDLED.
1da177e4
LT
6003 */
6004
7d12e780 6005irqreturn_t ata_interrupt (int irq, void *dev_instance)
1da177e4 6006{
cca3974e 6007 struct ata_host *host = dev_instance;
1da177e4
LT
6008 unsigned int i;
6009 unsigned int handled = 0;
6010 unsigned long flags;
6011
6012 /* TODO: make _irqsave conditional on x86 PCI IDE legacy mode */
cca3974e 6013 spin_lock_irqsave(&host->lock, flags);
1da177e4 6014
cca3974e 6015 for (i = 0; i < host->n_ports; i++) {
1da177e4
LT
6016 struct ata_port *ap;
6017
cca3974e 6018 ap = host->ports[i];
c1389503 6019 if (ap &&
029f5468 6020 !(ap->flags & ATA_FLAG_DISABLED)) {
1da177e4
LT
6021 struct ata_queued_cmd *qc;
6022
9af5c9c9 6023 qc = ata_qc_from_tag(ap, ap->link.active_tag);
312f7da2 6024 if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)) &&
21b1ed74 6025 (qc->flags & ATA_QCFLAG_ACTIVE))
1da177e4
LT
6026 handled |= ata_host_intr(ap, qc);
6027 }
6028 }
6029
cca3974e 6030 spin_unlock_irqrestore(&host->lock, flags);
1da177e4
LT
6031
6032 return IRQ_RETVAL(handled);
6033}
6034
34bf2170
TH
6035/**
6036 * sata_scr_valid - test whether SCRs are accessible
936fd732 6037 * @link: ATA link to test SCR accessibility for
34bf2170 6038 *
936fd732 6039 * Test whether SCRs are accessible for @link.
34bf2170
TH
6040 *
6041 * LOCKING:
6042 * None.
6043 *
6044 * RETURNS:
6045 * 1 if SCRs are accessible, 0 otherwise.
6046 */
936fd732 6047int sata_scr_valid(struct ata_link *link)
34bf2170 6048{
936fd732
TH
6049 struct ata_port *ap = link->ap;
6050
a16abc0b 6051 return (ap->flags & ATA_FLAG_SATA) && ap->ops->scr_read;
34bf2170
TH
6052}
6053
6054/**
6055 * sata_scr_read - read SCR register of the specified port
936fd732 6056 * @link: ATA link to read SCR for
34bf2170
TH
6057 * @reg: SCR to read
6058 * @val: Place to store read value
6059 *
936fd732 6060 * Read SCR register @reg of @link into *@val. This function is
633273a3
TH
6061 * guaranteed to succeed if @link is ap->link, the cable type of
6062 * the port is SATA and the port implements ->scr_read.
34bf2170
TH
6063 *
6064 * LOCKING:
633273a3 6065 * None if @link is ap->link. Kernel thread context otherwise.
34bf2170
TH
6066 *
6067 * RETURNS:
6068 * 0 on success, negative errno on failure.
6069 */
936fd732 6070int sata_scr_read(struct ata_link *link, int reg, u32 *val)
34bf2170 6071{
633273a3
TH
6072 if (ata_is_host_link(link)) {
6073 struct ata_port *ap = link->ap;
936fd732 6074
633273a3
TH
6075 if (sata_scr_valid(link))
6076 return ap->ops->scr_read(ap, reg, val);
6077 return -EOPNOTSUPP;
6078 }
6079
6080 return sata_pmp_scr_read(link, reg, val);
34bf2170
TH
6081}
6082
6083/**
6084 * sata_scr_write - write SCR register of the specified port
936fd732 6085 * @link: ATA link to write SCR for
34bf2170
TH
6086 * @reg: SCR to write
6087 * @val: value to write
6088 *
936fd732 6089 * Write @val to SCR register @reg of @link. This function is
633273a3
TH
6090 * guaranteed to succeed if @link is ap->link, the cable type of
6091 * the port is SATA and the port implements ->scr_read.
34bf2170
TH
6092 *
6093 * LOCKING:
633273a3 6094 * None if @link is ap->link. Kernel thread context otherwise.
34bf2170
TH
6095 *
6096 * RETURNS:
6097 * 0 on success, negative errno on failure.
6098 */
936fd732 6099int sata_scr_write(struct ata_link *link, int reg, u32 val)
34bf2170 6100{
633273a3
TH
6101 if (ata_is_host_link(link)) {
6102 struct ata_port *ap = link->ap;
6103
6104 if (sata_scr_valid(link))
6105 return ap->ops->scr_write(ap, reg, val);
6106 return -EOPNOTSUPP;
6107 }
936fd732 6108
633273a3 6109 return sata_pmp_scr_write(link, reg, val);
34bf2170
TH
6110}
6111
6112/**
6113 * sata_scr_write_flush - write SCR register of the specified port and flush
936fd732 6114 * @link: ATA link to write SCR for
34bf2170
TH
6115 * @reg: SCR to write
6116 * @val: value to write
6117 *
6118 * This function is identical to sata_scr_write() except that this
6119 * function performs flush after writing to the register.
6120 *
6121 * LOCKING:
633273a3 6122 * None if @link is ap->link. Kernel thread context otherwise.
34bf2170
TH
6123 *
6124 * RETURNS:
6125 * 0 on success, negative errno on failure.
6126 */
936fd732 6127int sata_scr_write_flush(struct ata_link *link, int reg, u32 val)
34bf2170 6128{
633273a3
TH
6129 if (ata_is_host_link(link)) {
6130 struct ata_port *ap = link->ap;
6131 int rc;
da3dbb17 6132
633273a3
TH
6133 if (sata_scr_valid(link)) {
6134 rc = ap->ops->scr_write(ap, reg, val);
6135 if (rc == 0)
6136 rc = ap->ops->scr_read(ap, reg, &val);
6137 return rc;
6138 }
6139 return -EOPNOTSUPP;
34bf2170 6140 }
633273a3
TH
6141
6142 return sata_pmp_scr_write(link, reg, val);
34bf2170
TH
6143}
6144
6145/**
936fd732
TH
6146 * ata_link_online - test whether the given link is online
6147 * @link: ATA link to test
34bf2170 6148 *
936fd732
TH
6149 * Test whether @link is online. Note that this function returns
6150 * 0 if online status of @link cannot be obtained, so
6151 * ata_link_online(link) != !ata_link_offline(link).
34bf2170
TH
6152 *
6153 * LOCKING:
6154 * None.
6155 *
6156 * RETURNS:
6157 * 1 if the port online status is available and online.
6158 */
936fd732 6159int ata_link_online(struct ata_link *link)
34bf2170
TH
6160{
6161 u32 sstatus;
6162
936fd732
TH
6163 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
6164 (sstatus & 0xf) == 0x3)
34bf2170
TH
6165 return 1;
6166 return 0;
6167}
6168
6169/**
936fd732
TH
6170 * ata_link_offline - test whether the given link is offline
6171 * @link: ATA link to test
34bf2170 6172 *
936fd732
TH
6173 * Test whether @link is offline. Note that this function
6174 * returns 0 if offline status of @link cannot be obtained, so
6175 * ata_link_online(link) != !ata_link_offline(link).
34bf2170
TH
6176 *
6177 * LOCKING:
6178 * None.
6179 *
6180 * RETURNS:
6181 * 1 if the port offline status is available and offline.
6182 */
936fd732 6183int ata_link_offline(struct ata_link *link)
34bf2170
TH
6184{
6185 u32 sstatus;
6186
936fd732
TH
6187 if (sata_scr_read(link, SCR_STATUS, &sstatus) == 0 &&
6188 (sstatus & 0xf) != 0x3)
34bf2170
TH
6189 return 1;
6190 return 0;
6191}
0baab86b 6192
77b08fb5 6193int ata_flush_cache(struct ata_device *dev)
9b847548 6194{
977e6b9f 6195 unsigned int err_mask;
9b847548
JA
6196 u8 cmd;
6197
6198 if (!ata_try_flush_cache(dev))
6199 return 0;
6200
6fc49adb 6201 if (dev->flags & ATA_DFLAG_FLUSH_EXT)
9b847548
JA
6202 cmd = ATA_CMD_FLUSH_EXT;
6203 else
6204 cmd = ATA_CMD_FLUSH;
6205
4f34337b
AC
6206 /* This is wrong. On a failed flush we get back the LBA of the lost
6207 sector and we should (assuming it wasn't aborted as unknown) issue
6208 a further flush command to continue the writeback until it
6209 does not error */
977e6b9f
TH
6210 err_mask = ata_do_simple_cmd(dev, cmd);
6211 if (err_mask) {
6212 ata_dev_printk(dev, KERN_ERR, "failed to flush cache\n");
6213 return -EIO;
6214 }
6215
6216 return 0;
9b847548
JA
6217}
6218
6ffa01d8 6219#ifdef CONFIG_PM
cca3974e
JG
6220static int ata_host_request_pm(struct ata_host *host, pm_message_t mesg,
6221 unsigned int action, unsigned int ehi_flags,
6222 int wait)
500530f6
TH
6223{
6224 unsigned long flags;
6225 int i, rc;
6226
cca3974e
JG
6227 for (i = 0; i < host->n_ports; i++) {
6228 struct ata_port *ap = host->ports[i];
e3667ebf 6229 struct ata_link *link;
500530f6
TH
6230
6231 /* Previous resume operation might still be in
6232 * progress. Wait for PM_PENDING to clear.
6233 */
6234 if (ap->pflags & ATA_PFLAG_PM_PENDING) {
6235 ata_port_wait_eh(ap);
6236 WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
6237 }
6238
6239 /* request PM ops to EH */
6240 spin_lock_irqsave(ap->lock, flags);
6241
6242 ap->pm_mesg = mesg;
6243 if (wait) {
6244 rc = 0;
6245 ap->pm_result = &rc;
6246 }
6247
6248 ap->pflags |= ATA_PFLAG_PM_PENDING;
e3667ebf
TH
6249 __ata_port_for_each_link(link, ap) {
6250 link->eh_info.action |= action;
6251 link->eh_info.flags |= ehi_flags;
6252 }
500530f6
TH
6253
6254 ata_port_schedule_eh(ap);
6255
6256 spin_unlock_irqrestore(ap->lock, flags);
6257
6258 /* wait and check result */
6259 if (wait) {
6260 ata_port_wait_eh(ap);
6261 WARN_ON(ap->pflags & ATA_PFLAG_PM_PENDING);
6262 if (rc)
6263 return rc;
6264 }
6265 }
6266
6267 return 0;
6268}
6269
6270/**
cca3974e
JG
6271 * ata_host_suspend - suspend host
6272 * @host: host to suspend
500530f6
TH
6273 * @mesg: PM message
6274 *
cca3974e 6275 * Suspend @host. Actual operation is performed by EH. This
500530f6
TH
6276 * function requests EH to perform PM operations and waits for EH
6277 * to finish.
6278 *
6279 * LOCKING:
6280 * Kernel thread context (may sleep).
6281 *
6282 * RETURNS:
6283 * 0 on success, -errno on failure.
6284 */
cca3974e 6285int ata_host_suspend(struct ata_host *host, pm_message_t mesg)
500530f6 6286{
9666f400 6287 int rc;
500530f6 6288
cca3974e 6289 rc = ata_host_request_pm(host, mesg, 0, ATA_EHI_QUIET, 1);
9666f400
TH
6290 if (rc == 0)
6291 host->dev->power.power_state = mesg;
500530f6
TH
6292 return rc;
6293}
6294
6295/**
cca3974e
JG
6296 * ata_host_resume - resume host
6297 * @host: host to resume
500530f6 6298 *
cca3974e 6299 * Resume @host. Actual operation is performed by EH. This
500530f6
TH
6300 * function requests EH to perform PM operations and returns.
6301 * Note that all resume operations are performed parallely.
6302 *
6303 * LOCKING:
6304 * Kernel thread context (may sleep).
6305 */
cca3974e 6306void ata_host_resume(struct ata_host *host)
500530f6 6307{
cca3974e
JG
6308 ata_host_request_pm(host, PMSG_ON, ATA_EH_SOFTRESET,
6309 ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET, 0);
6310 host->dev->power.power_state = PMSG_ON;
500530f6 6311}
6ffa01d8 6312#endif
500530f6 6313
c893a3ae
RD
6314/**
6315 * ata_port_start - Set port up for dma.
6316 * @ap: Port to initialize
6317 *
6318 * Called just after data structures for each port are
6319 * initialized. Allocates space for PRD table.
6320 *
6321 * May be used as the port_start() entry in ata_port_operations.
6322 *
6323 * LOCKING:
6324 * Inherited from caller.
6325 */
f0d36efd 6326int ata_port_start(struct ata_port *ap)
1da177e4 6327{
2f1f610b 6328 struct device *dev = ap->dev;
6037d6bb 6329 int rc;
1da177e4 6330
f0d36efd
TH
6331 ap->prd = dmam_alloc_coherent(dev, ATA_PRD_TBL_SZ, &ap->prd_dma,
6332 GFP_KERNEL);
1da177e4
LT
6333 if (!ap->prd)
6334 return -ENOMEM;
6335
6037d6bb 6336 rc = ata_pad_alloc(ap, dev);
f0d36efd 6337 if (rc)
6037d6bb 6338 return rc;
1da177e4 6339
f0d36efd
TH
6340 DPRINTK("prd alloc, virt %p, dma %llx\n", ap->prd,
6341 (unsigned long long)ap->prd_dma);
1da177e4
LT
6342 return 0;
6343}
6344
3ef3b43d
TH
6345/**
6346 * ata_dev_init - Initialize an ata_device structure
6347 * @dev: Device structure to initialize
6348 *
6349 * Initialize @dev in preparation for probing.
6350 *
6351 * LOCKING:
6352 * Inherited from caller.
6353 */
6354void ata_dev_init(struct ata_device *dev)
6355{
9af5c9c9
TH
6356 struct ata_link *link = dev->link;
6357 struct ata_port *ap = link->ap;
72fa4b74
TH
6358 unsigned long flags;
6359
5a04bf4b 6360 /* SATA spd limit is bound to the first device */
9af5c9c9
TH
6361 link->sata_spd_limit = link->hw_sata_spd_limit;
6362 link->sata_spd = 0;
5a04bf4b 6363
72fa4b74
TH
6364 /* High bits of dev->flags are used to record warm plug
6365 * requests which occur asynchronously. Synchronize using
cca3974e 6366 * host lock.
72fa4b74 6367 */
ba6a1308 6368 spin_lock_irqsave(ap->lock, flags);
72fa4b74 6369 dev->flags &= ~ATA_DFLAG_INIT_MASK;
3dcc323f 6370 dev->horkage = 0;
ba6a1308 6371 spin_unlock_irqrestore(ap->lock, flags);
3ef3b43d 6372
72fa4b74
TH
6373 memset((void *)dev + ATA_DEVICE_CLEAR_OFFSET, 0,
6374 sizeof(*dev) - ATA_DEVICE_CLEAR_OFFSET);
3ef3b43d
TH
6375 dev->pio_mask = UINT_MAX;
6376 dev->mwdma_mask = UINT_MAX;
6377 dev->udma_mask = UINT_MAX;
6378}
6379
4fb37a25
TH
6380/**
6381 * ata_link_init - Initialize an ata_link structure
6382 * @ap: ATA port link is attached to
6383 * @link: Link structure to initialize
8989805d 6384 * @pmp: Port multiplier port number
4fb37a25
TH
6385 *
6386 * Initialize @link.
6387 *
6388 * LOCKING:
6389 * Kernel thread context (may sleep)
6390 */
fb7fd614 6391void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)
4fb37a25
TH
6392{
6393 int i;
6394
6395 /* clear everything except for devices */
6396 memset(link, 0, offsetof(struct ata_link, device[0]));
6397
6398 link->ap = ap;
8989805d 6399 link->pmp = pmp;
4fb37a25
TH
6400 link->active_tag = ATA_TAG_POISON;
6401 link->hw_sata_spd_limit = UINT_MAX;
6402
6403 /* can't use iterator, ap isn't initialized yet */
6404 for (i = 0; i < ATA_MAX_DEVICES; i++) {
6405 struct ata_device *dev = &link->device[i];
6406
6407 dev->link = link;
6408 dev->devno = dev - link->device;
6409 ata_dev_init(dev);
6410 }
6411}
6412
6413/**
6414 * sata_link_init_spd - Initialize link->sata_spd_limit
6415 * @link: Link to configure sata_spd_limit for
6416 *
6417 * Initialize @link->[hw_]sata_spd_limit to the currently
6418 * configured value.
6419 *
6420 * LOCKING:
6421 * Kernel thread context (may sleep).
6422 *
6423 * RETURNS:
6424 * 0 on success, -errno on failure.
6425 */
fb7fd614 6426int sata_link_init_spd(struct ata_link *link)
4fb37a25
TH
6427{
6428 u32 scontrol, spd;
6429 int rc;
6430
6431 rc = sata_scr_read(link, SCR_CONTROL, &scontrol);
6432 if (rc)
6433 return rc;
6434
6435 spd = (scontrol >> 4) & 0xf;
6436 if (spd)
6437 link->hw_sata_spd_limit &= (1 << spd) - 1;
6438
6439 link->sata_spd_limit = link->hw_sata_spd_limit;
6440
6441 return 0;
6442}
6443
1da177e4 6444/**
f3187195
TH
6445 * ata_port_alloc - allocate and initialize basic ATA port resources
6446 * @host: ATA host this allocated port belongs to
1da177e4 6447 *
f3187195
TH
6448 * Allocate and initialize basic ATA port resources.
6449 *
6450 * RETURNS:
6451 * Allocate ATA port on success, NULL on failure.
0cba632b 6452 *
1da177e4 6453 * LOCKING:
f3187195 6454 * Inherited from calling layer (may sleep).
1da177e4 6455 */
f3187195 6456struct ata_port *ata_port_alloc(struct ata_host *host)
1da177e4 6457{
f3187195 6458 struct ata_port *ap;
1da177e4 6459
f3187195
TH
6460 DPRINTK("ENTER\n");
6461
6462 ap = kzalloc(sizeof(*ap), GFP_KERNEL);
6463 if (!ap)
6464 return NULL;
6465
f4d6d004 6466 ap->pflags |= ATA_PFLAG_INITIALIZING;
cca3974e 6467 ap->lock = &host->lock;
198e0fed 6468 ap->flags = ATA_FLAG_DISABLED;
f3187195 6469 ap->print_id = -1;
1da177e4 6470 ap->ctl = ATA_DEVCTL_OBS;
cca3974e 6471 ap->host = host;
f3187195 6472 ap->dev = host->dev;
1da177e4 6473 ap->last_ctl = 0xFF;
bd5d825c
BP
6474
6475#if defined(ATA_VERBOSE_DEBUG)
6476 /* turn on all debugging levels */
6477 ap->msg_enable = 0x00FF;
6478#elif defined(ATA_DEBUG)
6479 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_INFO | ATA_MSG_CTL | ATA_MSG_WARN | ATA_MSG_ERR;
88574551 6480#else
0dd4b21f 6481 ap->msg_enable = ATA_MSG_DRV | ATA_MSG_ERR | ATA_MSG_WARN;
bd5d825c 6482#endif
1da177e4 6483
65f27f38
DH
6484 INIT_DELAYED_WORK(&ap->port_task, NULL);
6485 INIT_DELAYED_WORK(&ap->hotplug_task, ata_scsi_hotplug);
6486 INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
a72ec4ce 6487 INIT_LIST_HEAD(&ap->eh_done_q);
c6cf9e99 6488 init_waitqueue_head(&ap->eh_wait_q);
5ddf24c5
TH
6489 init_timer_deferrable(&ap->fastdrain_timer);
6490 ap->fastdrain_timer.function = ata_eh_fastdrain_timerfn;
6491 ap->fastdrain_timer.data = (unsigned long)ap;
1da177e4 6492
838df628 6493 ap->cbl = ATA_CBL_NONE;
838df628 6494
8989805d 6495 ata_link_init(ap, &ap->link, 0);
1da177e4
LT
6496
6497#ifdef ATA_IRQ_TRAP
6498 ap->stats.unhandled_irq = 1;
6499 ap->stats.idle_irq = 1;
6500#endif
1da177e4 6501 return ap;
1da177e4
LT
6502}
6503
f0d36efd
TH
6504static void ata_host_release(struct device *gendev, void *res)
6505{
6506 struct ata_host *host = dev_get_drvdata(gendev);
6507 int i;
6508
6509 for (i = 0; i < host->n_ports; i++) {
6510 struct ata_port *ap = host->ports[i];
6511
ecef7253
TH
6512 if (!ap)
6513 continue;
6514
6515 if ((host->flags & ATA_HOST_STARTED) && ap->ops->port_stop)
f0d36efd 6516 ap->ops->port_stop(ap);
f0d36efd
TH
6517 }
6518
ecef7253 6519 if ((host->flags & ATA_HOST_STARTED) && host->ops->host_stop)
f0d36efd 6520 host->ops->host_stop(host);
1aa56cca 6521
1aa506e4
TH
6522 for (i = 0; i < host->n_ports; i++) {
6523 struct ata_port *ap = host->ports[i];
6524
4911487a
TH
6525 if (!ap)
6526 continue;
6527
6528 if (ap->scsi_host)
1aa506e4
TH
6529 scsi_host_put(ap->scsi_host);
6530
633273a3 6531 kfree(ap->pmp_link);
4911487a 6532 kfree(ap);
1aa506e4
TH
6533 host->ports[i] = NULL;
6534 }
6535
1aa56cca 6536 dev_set_drvdata(gendev, NULL);
f0d36efd
TH
6537}
6538
f3187195
TH
6539/**
6540 * ata_host_alloc - allocate and init basic ATA host resources
6541 * @dev: generic device this host is associated with
6542 * @max_ports: maximum number of ATA ports associated with this host
6543 *
6544 * Allocate and initialize basic ATA host resources. LLD calls
6545 * this function to allocate a host, initializes it fully and
6546 * attaches it using ata_host_register().
6547 *
6548 * @max_ports ports are allocated and host->n_ports is
6549 * initialized to @max_ports. The caller is allowed to decrease
6550 * host->n_ports before calling ata_host_register(). The unused
6551 * ports will be automatically freed on registration.
6552 *
6553 * RETURNS:
6554 * Allocate ATA host on success, NULL on failure.
6555 *
6556 * LOCKING:
6557 * Inherited from calling layer (may sleep).
6558 */
6559struct ata_host *ata_host_alloc(struct device *dev, int max_ports)
6560{
6561 struct ata_host *host;
6562 size_t sz;
6563 int i;
6564
6565 DPRINTK("ENTER\n");
6566
6567 if (!devres_open_group(dev, NULL, GFP_KERNEL))
6568 return NULL;
6569
6570 /* alloc a container for our list of ATA ports (buses) */
6571 sz = sizeof(struct ata_host) + (max_ports + 1) * sizeof(void *);
6572 /* alloc a container for our list of ATA ports (buses) */
6573 host = devres_alloc(ata_host_release, sz, GFP_KERNEL);
6574 if (!host)
6575 goto err_out;
6576
6577 devres_add(dev, host);
6578 dev_set_drvdata(dev, host);
6579
6580 spin_lock_init(&host->lock);
6581 host->dev = dev;
6582 host->n_ports = max_ports;
6583
6584 /* allocate ports bound to this host */
6585 for (i = 0; i < max_ports; i++) {
6586 struct ata_port *ap;
6587
6588 ap = ata_port_alloc(host);
6589 if (!ap)
6590 goto err_out;
6591
6592 ap->port_no = i;
6593 host->ports[i] = ap;
6594 }
6595
6596 devres_remove_group(dev, NULL);
6597 return host;
6598
6599 err_out:
6600 devres_release_group(dev, NULL);
6601 return NULL;
6602}
6603
f5cda257
TH
6604/**
6605 * ata_host_alloc_pinfo - alloc host and init with port_info array
6606 * @dev: generic device this host is associated with
6607 * @ppi: array of ATA port_info to initialize host with
6608 * @n_ports: number of ATA ports attached to this host
6609 *
6610 * Allocate ATA host and initialize with info from @ppi. If NULL
6611 * terminated, @ppi may contain fewer entries than @n_ports. The
6612 * last entry will be used for the remaining ports.
6613 *
6614 * RETURNS:
6615 * Allocate ATA host on success, NULL on failure.
6616 *
6617 * LOCKING:
6618 * Inherited from calling layer (may sleep).
6619 */
6620struct ata_host *ata_host_alloc_pinfo(struct device *dev,
6621 const struct ata_port_info * const * ppi,
6622 int n_ports)
6623{
6624 const struct ata_port_info *pi;
6625 struct ata_host *host;
6626 int i, j;
6627
6628 host = ata_host_alloc(dev, n_ports);
6629 if (!host)
6630 return NULL;
6631
6632 for (i = 0, j = 0, pi = NULL; i < host->n_ports; i++) {
6633 struct ata_port *ap = host->ports[i];
6634
6635 if (ppi[j])
6636 pi = ppi[j++];
6637
6638 ap->pio_mask = pi->pio_mask;
6639 ap->mwdma_mask = pi->mwdma_mask;
6640 ap->udma_mask = pi->udma_mask;
6641 ap->flags |= pi->flags;
0c88758b 6642 ap->link.flags |= pi->link_flags;
f5cda257
TH
6643 ap->ops = pi->port_ops;
6644
6645 if (!host->ops && (pi->port_ops != &ata_dummy_port_ops))
6646 host->ops = pi->port_ops;
6647 if (!host->private_data && pi->private_data)
6648 host->private_data = pi->private_data;
6649 }
6650
6651 return host;
6652}
6653
ecef7253
TH
6654/**
6655 * ata_host_start - start and freeze ports of an ATA host
6656 * @host: ATA host to start ports for
6657 *
6658 * Start and then freeze ports of @host. Started status is
6659 * recorded in host->flags, so this function can be called
6660 * multiple times. Ports are guaranteed to get started only
f3187195
TH
6661 * once. If host->ops isn't initialized yet, its set to the
6662 * first non-dummy port ops.
ecef7253
TH
6663 *
6664 * LOCKING:
6665 * Inherited from calling layer (may sleep).
6666 *
6667 * RETURNS:
6668 * 0 if all ports are started successfully, -errno otherwise.
6669 */
6670int ata_host_start(struct ata_host *host)
6671{
6672 int i, rc;
6673
6674 if (host->flags & ATA_HOST_STARTED)
6675 return 0;
6676
6677 for (i = 0; i < host->n_ports; i++) {
6678 struct ata_port *ap = host->ports[i];
6679
f3187195
TH
6680 if (!host->ops && !ata_port_is_dummy(ap))
6681 host->ops = ap->ops;
6682
ecef7253
TH
6683 if (ap->ops->port_start) {
6684 rc = ap->ops->port_start(ap);
6685 if (rc) {
6686 ata_port_printk(ap, KERN_ERR, "failed to "
6687 "start port (errno=%d)\n", rc);
6688 goto err_out;
6689 }
6690 }
6691
6692 ata_eh_freeze_port(ap);
6693 }
6694
6695 host->flags |= ATA_HOST_STARTED;
6696 return 0;
6697
6698 err_out:
6699 while (--i >= 0) {
6700 struct ata_port *ap = host->ports[i];
6701
6702 if (ap->ops->port_stop)
6703 ap->ops->port_stop(ap);
6704 }
6705 return rc;
6706}
6707
b03732f0 6708/**
cca3974e
JG
6709 * ata_sas_host_init - Initialize a host struct
6710 * @host: host to initialize
6711 * @dev: device host is attached to
6712 * @flags: host flags
6713 * @ops: port_ops
b03732f0
BK
6714 *
6715 * LOCKING:
6716 * PCI/etc. bus probe sem.
6717 *
6718 */
f3187195 6719/* KILLME - the only user left is ipr */
cca3974e
JG
6720void ata_host_init(struct ata_host *host, struct device *dev,
6721 unsigned long flags, const struct ata_port_operations *ops)
b03732f0 6722{
cca3974e
JG
6723 spin_lock_init(&host->lock);
6724 host->dev = dev;
6725 host->flags = flags;
6726 host->ops = ops;
b03732f0
BK
6727}
6728
f3187195
TH
6729/**
6730 * ata_host_register - register initialized ATA host
6731 * @host: ATA host to register
6732 * @sht: template for SCSI host
6733 *
6734 * Register initialized ATA host. @host is allocated using
6735 * ata_host_alloc() and fully initialized by LLD. This function
6736 * starts ports, registers @host with ATA and SCSI layers and
6737 * probe registered devices.
6738 *
6739 * LOCKING:
6740 * Inherited from calling layer (may sleep).
6741 *
6742 * RETURNS:
6743 * 0 on success, -errno otherwise.
6744 */
6745int ata_host_register(struct ata_host *host, struct scsi_host_template *sht)
6746{
6747 int i, rc;
6748
6749 /* host must have been started */
6750 if (!(host->flags & ATA_HOST_STARTED)) {
6751 dev_printk(KERN_ERR, host->dev,
6752 "BUG: trying to register unstarted host\n");
6753 WARN_ON(1);
6754 return -EINVAL;
6755 }
6756
6757 /* Blow away unused ports. This happens when LLD can't
6758 * determine the exact number of ports to allocate at
6759 * allocation time.
6760 */
6761 for (i = host->n_ports; host->ports[i]; i++)
6762 kfree(host->ports[i]);
6763
6764 /* give ports names and add SCSI hosts */
6765 for (i = 0; i < host->n_ports; i++)
6766 host->ports[i]->print_id = ata_print_id++;
6767
6768 rc = ata_scsi_add_hosts(host, sht);
6769 if (rc)
6770 return rc;
6771
fafbae87
TH
6772 /* associate with ACPI nodes */
6773 ata_acpi_associate(host);
6774
f3187195
TH
6775 /* set cable, sata_spd_limit and report */
6776 for (i = 0; i < host->n_ports; i++) {
6777 struct ata_port *ap = host->ports[i];
f3187195
TH
6778 unsigned long xfer_mask;
6779
6780 /* set SATA cable type if still unset */
6781 if (ap->cbl == ATA_CBL_NONE && (ap->flags & ATA_FLAG_SATA))
6782 ap->cbl = ATA_CBL_SATA;
6783
6784 /* init sata_spd_limit to the current value */
4fb37a25 6785 sata_link_init_spd(&ap->link);
f3187195 6786
cbcdd875 6787 /* print per-port info to dmesg */
f3187195
TH
6788 xfer_mask = ata_pack_xfermask(ap->pio_mask, ap->mwdma_mask,
6789 ap->udma_mask);
6790
abf6e8ed 6791 if (!ata_port_is_dummy(ap)) {
cbcdd875
TH
6792 ata_port_printk(ap, KERN_INFO,
6793 "%cATA max %s %s\n",
a16abc0b 6794 (ap->flags & ATA_FLAG_SATA) ? 'S' : 'P',
f3187195 6795 ata_mode_string(xfer_mask),
cbcdd875 6796 ap->link.eh_info.desc);
abf6e8ed
TH
6797 ata_ehi_clear_desc(&ap->link.eh_info);
6798 } else
f3187195
TH
6799 ata_port_printk(ap, KERN_INFO, "DUMMY\n");
6800 }
6801
6802 /* perform each probe synchronously */
6803 DPRINTK("probe begin\n");
6804 for (i = 0; i < host->n_ports; i++) {
6805 struct ata_port *ap = host->ports[i];
6806 int rc;
6807
6808 /* probe */
6809 if (ap->ops->error_handler) {
9af5c9c9 6810 struct ata_eh_info *ehi = &ap->link.eh_info;
f3187195
TH
6811 unsigned long flags;
6812
6813 ata_port_probe(ap);
6814
6815 /* kick EH for boot probing */
6816 spin_lock_irqsave(ap->lock, flags);
6817
f58229f8
TH
6818 ehi->probe_mask =
6819 (1 << ata_link_max_devices(&ap->link)) - 1;
f3187195
TH
6820 ehi->action |= ATA_EH_SOFTRESET;
6821 ehi->flags |= ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET;
6822
f4d6d004 6823 ap->pflags &= ~ATA_PFLAG_INITIALIZING;
f3187195
TH
6824 ap->pflags |= ATA_PFLAG_LOADING;
6825 ata_port_schedule_eh(ap);
6826
6827 spin_unlock_irqrestore(ap->lock, flags);
6828
6829 /* wait for EH to finish */
6830 ata_port_wait_eh(ap);
6831 } else {
6832 DPRINTK("ata%u: bus probe begin\n", ap->print_id);
6833 rc = ata_bus_probe(ap);
6834 DPRINTK("ata%u: bus probe end\n", ap->print_id);
6835
6836 if (rc) {
6837 /* FIXME: do something useful here?
6838 * Current libata behavior will
6839 * tear down everything when
6840 * the module is removed
6841 * or the h/w is unplugged.
6842 */
6843 }
6844 }
6845 }
6846
6847 /* probes are done, now scan each port's disk(s) */
6848 DPRINTK("host probe begin\n");
6849 for (i = 0; i < host->n_ports; i++) {
6850 struct ata_port *ap = host->ports[i];
6851
1ae46317 6852 ata_scsi_scan_host(ap, 1);
f3187195
TH
6853 }
6854
6855 return 0;
6856}
6857
f5cda257
TH
6858/**
6859 * ata_host_activate - start host, request IRQ and register it
6860 * @host: target ATA host
6861 * @irq: IRQ to request
6862 * @irq_handler: irq_handler used when requesting IRQ
6863 * @irq_flags: irq_flags used when requesting IRQ
6864 * @sht: scsi_host_template to use when registering the host
6865 *
6866 * After allocating an ATA host and initializing it, most libata
6867 * LLDs perform three steps to activate the host - start host,
6868 * request IRQ and register it. This helper takes necessasry
6869 * arguments and performs the three steps in one go.
6870 *
6871 * LOCKING:
6872 * Inherited from calling layer (may sleep).
6873 *
6874 * RETURNS:
6875 * 0 on success, -errno otherwise.
6876 */
6877int ata_host_activate(struct ata_host *host, int irq,
6878 irq_handler_t irq_handler, unsigned long irq_flags,
6879 struct scsi_host_template *sht)
6880{
cbcdd875 6881 int i, rc;
f5cda257
TH
6882
6883 rc = ata_host_start(host);
6884 if (rc)
6885 return rc;
6886
6887 rc = devm_request_irq(host->dev, irq, irq_handler, irq_flags,
6888 dev_driver_string(host->dev), host);
6889 if (rc)
6890 return rc;
6891
cbcdd875
TH
6892 for (i = 0; i < host->n_ports; i++)
6893 ata_port_desc(host->ports[i], "irq %d", irq);
4031826b 6894
f5cda257
TH
6895 rc = ata_host_register(host, sht);
6896 /* if failed, just free the IRQ and leave ports alone */
6897 if (rc)
6898 devm_free_irq(host->dev, irq, host);
6899
6900 return rc;
6901}
6902
720ba126
TH
6903/**
6904 * ata_port_detach - Detach ATA port in prepration of device removal
6905 * @ap: ATA port to be detached
6906 *
6907 * Detach all ATA devices and the associated SCSI devices of @ap;
6908 * then, remove the associated SCSI host. @ap is guaranteed to
6909 * be quiescent on return from this function.
6910 *
6911 * LOCKING:
6912 * Kernel thread context (may sleep).
6913 */
6914void ata_port_detach(struct ata_port *ap)
6915{
6916 unsigned long flags;
41bda9c9 6917 struct ata_link *link;
f58229f8 6918 struct ata_device *dev;
720ba126
TH
6919
6920 if (!ap->ops->error_handler)
c3cf30a9 6921 goto skip_eh;
720ba126
TH
6922
6923 /* tell EH we're leaving & flush EH */
ba6a1308 6924 spin_lock_irqsave(ap->lock, flags);
b51e9e5d 6925 ap->pflags |= ATA_PFLAG_UNLOADING;
ba6a1308 6926 spin_unlock_irqrestore(ap->lock, flags);
720ba126
TH
6927
6928 ata_port_wait_eh(ap);
6929
6930 /* EH is now guaranteed to see UNLOADING, so no new device
6931 * will be attached. Disable all existing devices.
6932 */
ba6a1308 6933 spin_lock_irqsave(ap->lock, flags);
720ba126 6934
41bda9c9
TH
6935 ata_port_for_each_link(link, ap) {
6936 ata_link_for_each_dev(dev, link)
6937 ata_dev_disable(dev);
6938 }
720ba126 6939
ba6a1308 6940 spin_unlock_irqrestore(ap->lock, flags);
720ba126
TH
6941
6942 /* Final freeze & EH. All in-flight commands are aborted. EH
6943 * will be skipped and retrials will be terminated with bad
6944 * target.
6945 */
ba6a1308 6946 spin_lock_irqsave(ap->lock, flags);
720ba126 6947 ata_port_freeze(ap); /* won't be thawed */
ba6a1308 6948 spin_unlock_irqrestore(ap->lock, flags);
720ba126
TH
6949
6950 ata_port_wait_eh(ap);
45a66c1c 6951 cancel_rearming_delayed_work(&ap->hotplug_task);
720ba126 6952
c3cf30a9 6953 skip_eh:
720ba126 6954 /* remove the associated SCSI host */
cca3974e 6955 scsi_remove_host(ap->scsi_host);
720ba126
TH
6956}
6957
0529c159
TH
6958/**
6959 * ata_host_detach - Detach all ports of an ATA host
6960 * @host: Host to detach
6961 *
6962 * Detach all ports of @host.
6963 *
6964 * LOCKING:
6965 * Kernel thread context (may sleep).
6966 */
6967void ata_host_detach(struct ata_host *host)
6968{
6969 int i;
6970
6971 for (i = 0; i < host->n_ports; i++)
6972 ata_port_detach(host->ports[i]);
6973}
6974
1da177e4
LT
6975/**
6976 * ata_std_ports - initialize ioaddr with standard port offsets.
6977 * @ioaddr: IO address structure to be initialized
0baab86b
EF
6978 *
6979 * Utility function which initializes data_addr, error_addr,
6980 * feature_addr, nsect_addr, lbal_addr, lbam_addr, lbah_addr,
6981 * device_addr, status_addr, and command_addr to standard offsets
6982 * relative to cmd_addr.
6983 *
6984 * Does not set ctl_addr, altstatus_addr, bmdma_addr, or scr_addr.
1da177e4 6985 */
0baab86b 6986
1da177e4
LT
6987void ata_std_ports(struct ata_ioports *ioaddr)
6988{
6989 ioaddr->data_addr = ioaddr->cmd_addr + ATA_REG_DATA;
6990 ioaddr->error_addr = ioaddr->cmd_addr + ATA_REG_ERR;
6991 ioaddr->feature_addr = ioaddr->cmd_addr + ATA_REG_FEATURE;
6992 ioaddr->nsect_addr = ioaddr->cmd_addr + ATA_REG_NSECT;
6993 ioaddr->lbal_addr = ioaddr->cmd_addr + ATA_REG_LBAL;
6994 ioaddr->lbam_addr = ioaddr->cmd_addr + ATA_REG_LBAM;
6995 ioaddr->lbah_addr = ioaddr->cmd_addr + ATA_REG_LBAH;
6996 ioaddr->device_addr = ioaddr->cmd_addr + ATA_REG_DEVICE;
6997 ioaddr->status_addr = ioaddr->cmd_addr + ATA_REG_STATUS;
6998 ioaddr->command_addr = ioaddr->cmd_addr + ATA_REG_CMD;
6999}
7000
0baab86b 7001
374b1873
JG
7002#ifdef CONFIG_PCI
7003
1da177e4
LT
7004/**
7005 * ata_pci_remove_one - PCI layer callback for device removal
7006 * @pdev: PCI device that was removed
7007 *
b878ca5d
TH
7008 * PCI layer indicates to libata via this hook that hot-unplug or
7009 * module unload event has occurred. Detach all ports. Resource
7010 * release is handled via devres.
1da177e4
LT
7011 *
7012 * LOCKING:
7013 * Inherited from PCI layer (may sleep).
7014 */
f0d36efd 7015void ata_pci_remove_one(struct pci_dev *pdev)
1da177e4 7016{
2855568b 7017 struct device *dev = &pdev->dev;
cca3974e 7018 struct ata_host *host = dev_get_drvdata(dev);
1da177e4 7019
b878ca5d 7020 ata_host_detach(host);
1da177e4
LT
7021}
7022
7023/* move to PCI subsystem */
057ace5e 7024int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits)
1da177e4
LT
7025{
7026 unsigned long tmp = 0;
7027
7028 switch (bits->width) {
7029 case 1: {
7030 u8 tmp8 = 0;
7031 pci_read_config_byte(pdev, bits->reg, &tmp8);
7032 tmp = tmp8;
7033 break;
7034 }
7035 case 2: {
7036 u16 tmp16 = 0;
7037 pci_read_config_word(pdev, bits->reg, &tmp16);
7038 tmp = tmp16;
7039 break;
7040 }
7041 case 4: {
7042 u32 tmp32 = 0;
7043 pci_read_config_dword(pdev, bits->reg, &tmp32);
7044 tmp = tmp32;
7045 break;
7046 }
7047
7048 default:
7049 return -EINVAL;
7050 }
7051
7052 tmp &= bits->mask;
7053
7054 return (tmp == bits->val) ? 1 : 0;
7055}
9b847548 7056
6ffa01d8 7057#ifdef CONFIG_PM
3c5100c1 7058void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg)
9b847548
JA
7059{
7060 pci_save_state(pdev);
4c90d971 7061 pci_disable_device(pdev);
500530f6 7062
4c90d971 7063 if (mesg.event == PM_EVENT_SUSPEND)
500530f6 7064 pci_set_power_state(pdev, PCI_D3hot);
9b847548
JA
7065}
7066
553c4aa6 7067int ata_pci_device_do_resume(struct pci_dev *pdev)
9b847548 7068{
553c4aa6
TH
7069 int rc;
7070
9b847548
JA
7071 pci_set_power_state(pdev, PCI_D0);
7072 pci_restore_state(pdev);
553c4aa6 7073
b878ca5d 7074 rc = pcim_enable_device(pdev);
553c4aa6
TH
7075 if (rc) {
7076 dev_printk(KERN_ERR, &pdev->dev,
7077 "failed to enable device after resume (%d)\n", rc);
7078 return rc;
7079 }
7080
9b847548 7081 pci_set_master(pdev);
553c4aa6 7082 return 0;
500530f6
TH
7083}
7084
3c5100c1 7085int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg)
500530f6 7086{
cca3974e 7087 struct ata_host *host = dev_get_drvdata(&pdev->dev);
500530f6
TH
7088 int rc = 0;
7089
cca3974e 7090 rc = ata_host_suspend(host, mesg);
500530f6
TH
7091 if (rc)
7092 return rc;
7093
3c5100c1 7094 ata_pci_device_do_suspend(pdev, mesg);
500530f6
TH
7095
7096 return 0;
7097}
7098
7099int ata_pci_device_resume(struct pci_dev *pdev)
7100{
cca3974e 7101 struct ata_host *host = dev_get_drvdata(&pdev->dev);
553c4aa6 7102 int rc;
500530f6 7103
553c4aa6
TH
7104 rc = ata_pci_device_do_resume(pdev);
7105 if (rc == 0)
7106 ata_host_resume(host);
7107 return rc;
9b847548 7108}
6ffa01d8
TH
7109#endif /* CONFIG_PM */
7110
1da177e4
LT
7111#endif /* CONFIG_PCI */
7112
7113
1da177e4
LT
7114static int __init ata_init(void)
7115{
a8601e5f 7116 ata_probe_timeout *= HZ;
1da177e4
LT
7117 ata_wq = create_workqueue("ata");
7118 if (!ata_wq)
7119 return -ENOMEM;
7120
453b07ac
TH
7121 ata_aux_wq = create_singlethread_workqueue("ata_aux");
7122 if (!ata_aux_wq) {
7123 destroy_workqueue(ata_wq);
7124 return -ENOMEM;
7125 }
7126
1da177e4
LT
7127 printk(KERN_DEBUG "libata version " DRV_VERSION " loaded.\n");
7128 return 0;
7129}
7130
7131static void __exit ata_exit(void)
7132{
7133 destroy_workqueue(ata_wq);
453b07ac 7134 destroy_workqueue(ata_aux_wq);
1da177e4
LT
7135}
7136
a4625085 7137subsys_initcall(ata_init);
1da177e4
LT
7138module_exit(ata_exit);
7139
67846b30 7140static unsigned long ratelimit_time;
34af946a 7141static DEFINE_SPINLOCK(ata_ratelimit_lock);
67846b30
JG
7142
7143int ata_ratelimit(void)
7144{
7145 int rc;
7146 unsigned long flags;
7147
7148 spin_lock_irqsave(&ata_ratelimit_lock, flags);
7149
7150 if (time_after(jiffies, ratelimit_time)) {
7151 rc = 1;
7152 ratelimit_time = jiffies + (HZ/5);
7153 } else
7154 rc = 0;
7155
7156 spin_unlock_irqrestore(&ata_ratelimit_lock, flags);
7157
7158 return rc;
7159}
7160
c22daff4
TH
7161/**
7162 * ata_wait_register - wait until register value changes
7163 * @reg: IO-mapped register
7164 * @mask: Mask to apply to read register value
7165 * @val: Wait condition
7166 * @interval_msec: polling interval in milliseconds
7167 * @timeout_msec: timeout in milliseconds
7168 *
7169 * Waiting for some bits of register to change is a common
7170 * operation for ATA controllers. This function reads 32bit LE
7171 * IO-mapped register @reg and tests for the following condition.
7172 *
7173 * (*@reg & mask) != val
7174 *
7175 * If the condition is met, it returns; otherwise, the process is
7176 * repeated after @interval_msec until timeout.
7177 *
7178 * LOCKING:
7179 * Kernel thread context (may sleep)
7180 *
7181 * RETURNS:
7182 * The final register value.
7183 */
7184u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
7185 unsigned long interval_msec,
7186 unsigned long timeout_msec)
7187{
7188 unsigned long timeout;
7189 u32 tmp;
7190
7191 tmp = ioread32(reg);
7192
7193 /* Calculate timeout _after_ the first read to make sure
7194 * preceding writes reach the controller before starting to
7195 * eat away the timeout.
7196 */
7197 timeout = jiffies + (timeout_msec * HZ) / 1000;
7198
7199 while ((tmp & mask) == val && time_before(jiffies, timeout)) {
7200 msleep(interval_msec);
7201 tmp = ioread32(reg);
7202 }
7203
7204 return tmp;
7205}
7206
dd5b06c4
TH
7207/*
7208 * Dummy port_ops
7209 */
7210static void ata_dummy_noret(struct ata_port *ap) { }
7211static int ata_dummy_ret0(struct ata_port *ap) { return 0; }
7212static void ata_dummy_qc_noret(struct ata_queued_cmd *qc) { }
7213
7214static u8 ata_dummy_check_status(struct ata_port *ap)
7215{
7216 return ATA_DRDY;
7217}
7218
7219static unsigned int ata_dummy_qc_issue(struct ata_queued_cmd *qc)
7220{
7221 return AC_ERR_SYSTEM;
7222}
7223
7224const struct ata_port_operations ata_dummy_port_ops = {
dd5b06c4
TH
7225 .check_status = ata_dummy_check_status,
7226 .check_altstatus = ata_dummy_check_status,
7227 .dev_select = ata_noop_dev_select,
7228 .qc_prep = ata_noop_qc_prep,
7229 .qc_issue = ata_dummy_qc_issue,
7230 .freeze = ata_dummy_noret,
7231 .thaw = ata_dummy_noret,
7232 .error_handler = ata_dummy_noret,
7233 .post_internal_cmd = ata_dummy_qc_noret,
7234 .irq_clear = ata_dummy_noret,
7235 .port_start = ata_dummy_ret0,
7236 .port_stop = ata_dummy_noret,
7237};
7238
21b0ad4f
TH
7239const struct ata_port_info ata_dummy_port_info = {
7240 .port_ops = &ata_dummy_port_ops,
7241};
7242
1da177e4
LT
7243/*
7244 * libata is essentially a library of internal helper functions for
7245 * low-level ATA host controller drivers. As such, the API/ABI is
7246 * likely to change as new drivers are added and updated.
7247 * Do not depend on ABI/API stability.
7248 */
7249
e9c83914
TH
7250EXPORT_SYMBOL_GPL(sata_deb_timing_normal);
7251EXPORT_SYMBOL_GPL(sata_deb_timing_hotplug);
7252EXPORT_SYMBOL_GPL(sata_deb_timing_long);
dd5b06c4 7253EXPORT_SYMBOL_GPL(ata_dummy_port_ops);
21b0ad4f 7254EXPORT_SYMBOL_GPL(ata_dummy_port_info);
1da177e4
LT
7255EXPORT_SYMBOL_GPL(ata_std_bios_param);
7256EXPORT_SYMBOL_GPL(ata_std_ports);
cca3974e 7257EXPORT_SYMBOL_GPL(ata_host_init);
f3187195 7258EXPORT_SYMBOL_GPL(ata_host_alloc);
f5cda257 7259EXPORT_SYMBOL_GPL(ata_host_alloc_pinfo);
ecef7253 7260EXPORT_SYMBOL_GPL(ata_host_start);
f3187195 7261EXPORT_SYMBOL_GPL(ata_host_register);
f5cda257 7262EXPORT_SYMBOL_GPL(ata_host_activate);
0529c159 7263EXPORT_SYMBOL_GPL(ata_host_detach);
1da177e4
LT
7264EXPORT_SYMBOL_GPL(ata_sg_init);
7265EXPORT_SYMBOL_GPL(ata_sg_init_one);
9a1004d0 7266EXPORT_SYMBOL_GPL(ata_hsm_move);
f686bcb8 7267EXPORT_SYMBOL_GPL(ata_qc_complete);
dedaf2b0 7268EXPORT_SYMBOL_GPL(ata_qc_complete_multiple);
1da177e4 7269EXPORT_SYMBOL_GPL(ata_qc_issue_prot);
1da177e4
LT
7270EXPORT_SYMBOL_GPL(ata_tf_load);
7271EXPORT_SYMBOL_GPL(ata_tf_read);
7272EXPORT_SYMBOL_GPL(ata_noop_dev_select);
7273EXPORT_SYMBOL_GPL(ata_std_dev_select);
43727fbc 7274EXPORT_SYMBOL_GPL(sata_print_link_status);
1da177e4
LT
7275EXPORT_SYMBOL_GPL(ata_tf_to_fis);
7276EXPORT_SYMBOL_GPL(ata_tf_from_fis);
7277EXPORT_SYMBOL_GPL(ata_check_status);
7278EXPORT_SYMBOL_GPL(ata_altstatus);
1da177e4
LT
7279EXPORT_SYMBOL_GPL(ata_exec_command);
7280EXPORT_SYMBOL_GPL(ata_port_start);
d92e74d3 7281EXPORT_SYMBOL_GPL(ata_sff_port_start);
1da177e4 7282EXPORT_SYMBOL_GPL(ata_interrupt);
04351821 7283EXPORT_SYMBOL_GPL(ata_do_set_mode);
0d5ff566
TH
7284EXPORT_SYMBOL_GPL(ata_data_xfer);
7285EXPORT_SYMBOL_GPL(ata_data_xfer_noirq);
31cc23b3 7286EXPORT_SYMBOL_GPL(ata_std_qc_defer);
1da177e4 7287EXPORT_SYMBOL_GPL(ata_qc_prep);
d26fc955 7288EXPORT_SYMBOL_GPL(ata_dumb_qc_prep);
e46834cd 7289EXPORT_SYMBOL_GPL(ata_noop_qc_prep);
1da177e4
LT
7290EXPORT_SYMBOL_GPL(ata_bmdma_setup);
7291EXPORT_SYMBOL_GPL(ata_bmdma_start);
7292EXPORT_SYMBOL_GPL(ata_bmdma_irq_clear);
7293EXPORT_SYMBOL_GPL(ata_bmdma_status);
7294EXPORT_SYMBOL_GPL(ata_bmdma_stop);
6d97dbd7
TH
7295EXPORT_SYMBOL_GPL(ata_bmdma_freeze);
7296EXPORT_SYMBOL_GPL(ata_bmdma_thaw);
7297EXPORT_SYMBOL_GPL(ata_bmdma_drive_eh);
7298EXPORT_SYMBOL_GPL(ata_bmdma_error_handler);
7299EXPORT_SYMBOL_GPL(ata_bmdma_post_internal_cmd);
1da177e4 7300EXPORT_SYMBOL_GPL(ata_port_probe);
10305f0f 7301EXPORT_SYMBOL_GPL(ata_dev_disable);
3c567b7d 7302EXPORT_SYMBOL_GPL(sata_set_spd);
936fd732
TH
7303EXPORT_SYMBOL_GPL(sata_link_debounce);
7304EXPORT_SYMBOL_GPL(sata_link_resume);
1da177e4
LT
7305EXPORT_SYMBOL_GPL(sata_phy_reset);
7306EXPORT_SYMBOL_GPL(__sata_phy_reset);
7307EXPORT_SYMBOL_GPL(ata_bus_reset);
f5914a46 7308EXPORT_SYMBOL_GPL(ata_std_prereset);
c2bd5804 7309EXPORT_SYMBOL_GPL(ata_std_softreset);
cc0680a5 7310EXPORT_SYMBOL_GPL(sata_link_hardreset);
c2bd5804
TH
7311EXPORT_SYMBOL_GPL(sata_std_hardreset);
7312EXPORT_SYMBOL_GPL(ata_std_postreset);
2e9edbf8
JG
7313EXPORT_SYMBOL_GPL(ata_dev_classify);
7314EXPORT_SYMBOL_GPL(ata_dev_pair);
1da177e4 7315EXPORT_SYMBOL_GPL(ata_port_disable);
67846b30 7316EXPORT_SYMBOL_GPL(ata_ratelimit);
c22daff4 7317EXPORT_SYMBOL_GPL(ata_wait_register);
6f8b9958 7318EXPORT_SYMBOL_GPL(ata_busy_sleep);
d4b2bab4 7319EXPORT_SYMBOL_GPL(ata_wait_ready);
86e45b6b 7320EXPORT_SYMBOL_GPL(ata_port_queue_task);
1da177e4
LT
7321EXPORT_SYMBOL_GPL(ata_scsi_ioctl);
7322EXPORT_SYMBOL_GPL(ata_scsi_queuecmd);
1da177e4 7323EXPORT_SYMBOL_GPL(ata_scsi_slave_config);
83c47bcb 7324EXPORT_SYMBOL_GPL(ata_scsi_slave_destroy);
a6e6ce8e 7325EXPORT_SYMBOL_GPL(ata_scsi_change_queue_depth);
1da177e4 7326EXPORT_SYMBOL_GPL(ata_host_intr);
34bf2170
TH
7327EXPORT_SYMBOL_GPL(sata_scr_valid);
7328EXPORT_SYMBOL_GPL(sata_scr_read);
7329EXPORT_SYMBOL_GPL(sata_scr_write);
7330EXPORT_SYMBOL_GPL(sata_scr_write_flush);
936fd732
TH
7331EXPORT_SYMBOL_GPL(ata_link_online);
7332EXPORT_SYMBOL_GPL(ata_link_offline);
6ffa01d8 7333#ifdef CONFIG_PM
cca3974e
JG
7334EXPORT_SYMBOL_GPL(ata_host_suspend);
7335EXPORT_SYMBOL_GPL(ata_host_resume);
6ffa01d8 7336#endif /* CONFIG_PM */
6a62a04d
TH
7337EXPORT_SYMBOL_GPL(ata_id_string);
7338EXPORT_SYMBOL_GPL(ata_id_c_string);
10305f0f 7339EXPORT_SYMBOL_GPL(ata_id_to_dma_mode);
1da177e4
LT
7340EXPORT_SYMBOL_GPL(ata_scsi_simulate);
7341
1bc4ccff 7342EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
452503f9
AC
7343EXPORT_SYMBOL_GPL(ata_timing_compute);
7344EXPORT_SYMBOL_GPL(ata_timing_merge);
7345
1da177e4
LT
7346#ifdef CONFIG_PCI
7347EXPORT_SYMBOL_GPL(pci_test_config_bits);
d583bc18 7348EXPORT_SYMBOL_GPL(ata_pci_init_sff_host);
1626aeb8 7349EXPORT_SYMBOL_GPL(ata_pci_init_bmdma);
d583bc18 7350EXPORT_SYMBOL_GPL(ata_pci_prepare_sff_host);
1da177e4
LT
7351EXPORT_SYMBOL_GPL(ata_pci_init_one);
7352EXPORT_SYMBOL_GPL(ata_pci_remove_one);
6ffa01d8 7353#ifdef CONFIG_PM
500530f6
TH
7354EXPORT_SYMBOL_GPL(ata_pci_device_do_suspend);
7355EXPORT_SYMBOL_GPL(ata_pci_device_do_resume);
9b847548
JA
7356EXPORT_SYMBOL_GPL(ata_pci_device_suspend);
7357EXPORT_SYMBOL_GPL(ata_pci_device_resume);
6ffa01d8 7358#endif /* CONFIG_PM */
67951ade
AC
7359EXPORT_SYMBOL_GPL(ata_pci_default_filter);
7360EXPORT_SYMBOL_GPL(ata_pci_clear_simplex);
1da177e4 7361#endif /* CONFIG_PCI */
9b847548 7362
31f88384 7363EXPORT_SYMBOL_GPL(sata_pmp_qc_defer_cmd_switch);
3af9a77a
TH
7364EXPORT_SYMBOL_GPL(sata_pmp_std_prereset);
7365EXPORT_SYMBOL_GPL(sata_pmp_std_hardreset);
7366EXPORT_SYMBOL_GPL(sata_pmp_std_postreset);
7367EXPORT_SYMBOL_GPL(sata_pmp_do_eh);
7368
b64bbc39
TH
7369EXPORT_SYMBOL_GPL(__ata_ehi_push_desc);
7370EXPORT_SYMBOL_GPL(ata_ehi_push_desc);
7371EXPORT_SYMBOL_GPL(ata_ehi_clear_desc);
cbcdd875
TH
7372EXPORT_SYMBOL_GPL(ata_port_desc);
7373#ifdef CONFIG_PCI
7374EXPORT_SYMBOL_GPL(ata_port_pbar_desc);
7375#endif /* CONFIG_PCI */
ece1d636 7376EXPORT_SYMBOL_GPL(ata_eng_timeout);
7b70fc03 7377EXPORT_SYMBOL_GPL(ata_port_schedule_eh);
dbd82616 7378EXPORT_SYMBOL_GPL(ata_link_abort);
7b70fc03 7379EXPORT_SYMBOL_GPL(ata_port_abort);
e3180499 7380EXPORT_SYMBOL_GPL(ata_port_freeze);
7d77b247 7381EXPORT_SYMBOL_GPL(sata_async_notification);
e3180499
TH
7382EXPORT_SYMBOL_GPL(ata_eh_freeze_port);
7383EXPORT_SYMBOL_GPL(ata_eh_thaw_port);
ece1d636
TH
7384EXPORT_SYMBOL_GPL(ata_eh_qc_complete);
7385EXPORT_SYMBOL_GPL(ata_eh_qc_retry);
022bdb07 7386EXPORT_SYMBOL_GPL(ata_do_eh);
83625006 7387EXPORT_SYMBOL_GPL(ata_irq_on);
a619f981 7388EXPORT_SYMBOL_GPL(ata_dev_try_classify);
be0d18df
AC
7389
7390EXPORT_SYMBOL_GPL(ata_cable_40wire);
7391EXPORT_SYMBOL_GPL(ata_cable_80wire);
7392EXPORT_SYMBOL_GPL(ata_cable_unknown);
7393EXPORT_SYMBOL_GPL(ata_cable_sata);