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