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