1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef __LINUX_LIBATA_H__
27#define __LINUX_LIBATA_H__
28
29#include <linux/delay.h>
30#include <linux/jiffies.h>
31#include <linux/interrupt.h>
32#include <linux/dma-mapping.h>
33#include <linux/scatterlist.h>
34#include <linux/io.h>
35#include <linux/ata.h>
36#include <linux/workqueue.h>
37#include <scsi/scsi_host.h>
38#include <linux/acpi.h>
39#include <linux/cdrom.h>
40
41
42
43
44
45#ifdef CONFIG_ATA_NONSTANDARD
46#include <asm/libata-portmap.h>
47#else
48#include <asm-generic/libata-portmap.h>
49#endif
50
51
52
53
54
55#undef ATA_DEBUG
56#undef ATA_VERBOSE_DEBUG
57#undef ATA_IRQ_TRAP
58#undef ATA_NDEBUG
59
60
61
62#ifdef ATA_DEBUG
63#define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __func__, ## args)
64#ifdef ATA_VERBOSE_DEBUG
65#define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __func__, ## args)
66#else
67#define VPRINTK(fmt, args...)
68#endif
69#else
70#define DPRINTK(fmt, args...)
71#define VPRINTK(fmt, args...)
72#endif
73
74#define BPRINTK(fmt, args...) if (ap->flags & ATA_FLAG_DEBUGMSG) printk(KERN_ERR "%s: " fmt, __func__, ## args)
75
76
77#define HAVE_LIBATA_MSG 1
78
79enum {
80 ATA_MSG_DRV = 0x0001,
81 ATA_MSG_INFO = 0x0002,
82 ATA_MSG_PROBE = 0x0004,
83 ATA_MSG_WARN = 0x0008,
84 ATA_MSG_MALLOC = 0x0010,
85 ATA_MSG_CTL = 0x0020,
86 ATA_MSG_INTR = 0x0040,
87 ATA_MSG_ERR = 0x0080,
88};
89
90#define ata_msg_drv(p) ((p)->msg_enable & ATA_MSG_DRV)
91#define ata_msg_info(p) ((p)->msg_enable & ATA_MSG_INFO)
92#define ata_msg_probe(p) ((p)->msg_enable & ATA_MSG_PROBE)
93#define ata_msg_warn(p) ((p)->msg_enable & ATA_MSG_WARN)
94#define ata_msg_malloc(p) ((p)->msg_enable & ATA_MSG_MALLOC)
95#define ata_msg_ctl(p) ((p)->msg_enable & ATA_MSG_CTL)
96#define ata_msg_intr(p) ((p)->msg_enable & ATA_MSG_INTR)
97#define ata_msg_err(p) ((p)->msg_enable & ATA_MSG_ERR)
98
99static inline u32 ata_msg_init(int dval, int default_msg_enable_bits)
100{
101 if (dval < 0 || dval >= (sizeof(u32) * 8))
102 return default_msg_enable_bits;
103 if (!dval)
104 return 0;
105 return (1 << dval) - 1;
106}
107
108
109#define ATA_TAG_POISON 0xfafbfcfdU
110
111enum {
112
113 LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
114 LIBATA_DUMB_MAX_PRD = ATA_MAX_PRD / 4,
115 ATA_DEF_QUEUE = 1,
116
117 ATA_MAX_QUEUE = 32,
118 ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1,
119 ATA_SHORT_PAUSE = 16,
120
121 ATAPI_MAX_DRAIN = 16 << 10,
122
123 ATA_ALL_DEVICES = (1 << ATA_MAX_DEVICES) - 1,
124
125 ATA_SHT_EMULATED = 1,
126 ATA_SHT_CMD_PER_LUN = 1,
127 ATA_SHT_THIS_ID = -1,
128 ATA_SHT_USE_CLUSTERING = 1,
129
130
131 ATA_DFLAG_LBA = (1 << 0),
132 ATA_DFLAG_LBA48 = (1 << 1),
133 ATA_DFLAG_CDB_INTR = (1 << 2),
134 ATA_DFLAG_NCQ = (1 << 3),
135 ATA_DFLAG_FLUSH_EXT = (1 << 4),
136 ATA_DFLAG_ACPI_PENDING = (1 << 5),
137 ATA_DFLAG_ACPI_FAILED = (1 << 6),
138 ATA_DFLAG_AN = (1 << 7),
139 ATA_DFLAG_HIPM = (1 << 8),
140 ATA_DFLAG_DIPM = (1 << 9),
141 ATA_DFLAG_DMADIR = (1 << 10),
142 ATA_DFLAG_CFG_MASK = (1 << 12) - 1,
143
144 ATA_DFLAG_PIO = (1 << 12),
145 ATA_DFLAG_NCQ_OFF = (1 << 13),
146 ATA_DFLAG_SLEEPING = (1 << 15),
147 ATA_DFLAG_DUBIOUS_XFER = (1 << 16),
148 ATA_DFLAG_NO_UNLOAD = (1 << 17),
149 ATA_DFLAG_INIT_MASK = (1 << 24) - 1,
150
151 ATA_DFLAG_DETACH = (1 << 24),
152 ATA_DFLAG_DETACHED = (1 << 25),
153
154 ATA_DEV_UNKNOWN = 0,
155 ATA_DEV_ATA = 1,
156 ATA_DEV_ATA_UNSUP = 2,
157 ATA_DEV_ATAPI = 3,
158 ATA_DEV_ATAPI_UNSUP = 4,
159 ATA_DEV_PMP = 5,
160 ATA_DEV_PMP_UNSUP = 6,
161 ATA_DEV_SEMB = 7,
162 ATA_DEV_SEMB_UNSUP = 8,
163 ATA_DEV_NONE = 9,
164
165
166 ATA_LFLAG_NO_HRST = (1 << 1),
167 ATA_LFLAG_NO_SRST = (1 << 2),
168 ATA_LFLAG_ASSUME_ATA = (1 << 3),
169 ATA_LFLAG_ASSUME_SEMB = (1 << 4),
170 ATA_LFLAG_ASSUME_CLASS = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB,
171 ATA_LFLAG_NO_RETRY = (1 << 5),
172 ATA_LFLAG_DISABLED = (1 << 6),
173 ATA_LFLAG_SW_ACTIVITY = (1 << 7),
174
175
176 ATA_FLAG_SLAVE_POSS = (1 << 0),
177
178 ATA_FLAG_SATA = (1 << 1),
179 ATA_FLAG_NO_LEGACY = (1 << 2),
180 ATA_FLAG_MMIO = (1 << 3),
181 ATA_FLAG_SRST = (1 << 4),
182 ATA_FLAG_SATA_RESET = (1 << 5),
183 ATA_FLAG_NO_ATAPI = (1 << 6),
184 ATA_FLAG_PIO_DMA = (1 << 7),
185 ATA_FLAG_PIO_LBA48 = (1 << 8),
186 ATA_FLAG_PIO_POLLING = (1 << 9),
187
188 ATA_FLAG_NCQ = (1 << 10),
189 ATA_FLAG_NO_POWEROFF_SPINDOWN = (1 << 11),
190 ATA_FLAG_NO_HIBERNATE_SPINDOWN = (1 << 12),
191 ATA_FLAG_DEBUGMSG = (1 << 13),
192 ATA_FLAG_FPDMA_AA = (1 << 14),
193 ATA_FLAG_IGN_SIMPLEX = (1 << 15),
194 ATA_FLAG_NO_IORDY = (1 << 16),
195 ATA_FLAG_ACPI_SATA = (1 << 17),
196 ATA_FLAG_AN = (1 << 18),
197 ATA_FLAG_PMP = (1 << 19),
198 ATA_FLAG_IPM = (1 << 20),
199 ATA_FLAG_EM = (1 << 21),
200
201 ATA_FLAG_SW_ACTIVITY = (1 << 22),
202
203
204
205
206
207
208 ATA_FLAG_DISABLED = (1 << 23),
209
210
211
212
213
214 ATA_PFLAG_EH_PENDING = (1 << 0),
215 ATA_PFLAG_EH_IN_PROGRESS = (1 << 1),
216 ATA_PFLAG_FROZEN = (1 << 2),
217 ATA_PFLAG_RECOVERED = (1 << 3),
218 ATA_PFLAG_LOADING = (1 << 4),
219 ATA_PFLAG_SCSI_HOTPLUG = (1 << 6),
220 ATA_PFLAG_INITIALIZING = (1 << 7),
221 ATA_PFLAG_RESETTING = (1 << 8),
222 ATA_PFLAG_UNLOADING = (1 << 9),
223 ATA_PFLAG_UNLOADED = (1 << 10),
224
225 ATA_PFLAG_SUSPENDED = (1 << 17),
226 ATA_PFLAG_PM_PENDING = (1 << 18),
227 ATA_PFLAG_INIT_GTM_VALID = (1 << 19),
228
229 ATA_PFLAG_PIO32 = (1 << 20),
230 ATA_PFLAG_PIO32CHANGE = (1 << 21),
231
232
233 ATA_QCFLAG_ACTIVE = (1 << 0),
234 ATA_QCFLAG_DMAMAP = (1 << 1),
235 ATA_QCFLAG_IO = (1 << 3),
236 ATA_QCFLAG_RESULT_TF = (1 << 4),
237 ATA_QCFLAG_CLEAR_EXCL = (1 << 5),
238 ATA_QCFLAG_QUIET = (1 << 6),
239 ATA_QCFLAG_RETRY = (1 << 7),
240
241 ATA_QCFLAG_FAILED = (1 << 16),
242 ATA_QCFLAG_SENSE_VALID = (1 << 17),
243 ATA_QCFLAG_EH_SCHEDULED = (1 << 18),
244
245
246 ATA_HOST_SIMPLEX = (1 << 0),
247 ATA_HOST_STARTED = (1 << 1),
248 ATA_HOST_PARALLEL_SCAN = (1 << 2),
249
250
251
252
253 ATA_TMOUT_BOOT = 30000,
254 ATA_TMOUT_BOOT_QUICK = 7000,
255 ATA_TMOUT_INTERNAL_QUICK = 5000,
256 ATA_TMOUT_MAX_PARK = 30000,
257
258
259
260
261
262
263 ATA_TMOUT_FF_WAIT = 800,
264
265
266
267
268
269
270
271
272
273
274
275 ATA_WAIT_AFTER_RESET = 150,
276
277
278
279
280
281
282 ATA_TMOUT_PMP_SRST_WAIT = 5000,
283
284
285 BUS_UNKNOWN = 0,
286 BUS_DMA = 1,
287 BUS_IDLE = 2,
288 BUS_NOINTR = 3,
289 BUS_NODATA = 4,
290 BUS_TIMER = 5,
291 BUS_PIO = 6,
292 BUS_EDD = 7,
293 BUS_IDENTIFY = 8,
294 BUS_PACKET = 9,
295
296
297 PORT_UNKNOWN = 0,
298 PORT_ENABLED = 1,
299 PORT_DISABLED = 2,
300
301
302
303
304 ATA_NR_PIO_MODES = 7,
305 ATA_NR_MWDMA_MODES = 5,
306 ATA_NR_UDMA_MODES = 8,
307
308 ATA_SHIFT_PIO = 0,
309 ATA_SHIFT_MWDMA = ATA_SHIFT_PIO + ATA_NR_PIO_MODES,
310 ATA_SHIFT_UDMA = ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES,
311
312
313 ATA_DMA_PAD_SZ = 4,
314
315
316 ATA_ERING_SIZE = 32,
317
318
319 ATA_DEFER_LINK = 1,
320 ATA_DEFER_PORT = 2,
321
322
323 ATA_EH_DESC_LEN = 80,
324
325
326 ATA_EH_REVALIDATE = (1 << 0),
327 ATA_EH_SOFTRESET = (1 << 1),
328 ATA_EH_HARDRESET = (1 << 2),
329 ATA_EH_RESET = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
330 ATA_EH_ENABLE_LINK = (1 << 3),
331 ATA_EH_LPM = (1 << 4),
332 ATA_EH_PARK = (1 << 5),
333
334 ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE | ATA_EH_PARK,
335 ATA_EH_ALL_ACTIONS = ATA_EH_REVALIDATE | ATA_EH_RESET |
336 ATA_EH_ENABLE_LINK | ATA_EH_LPM,
337
338
339 ATA_EHI_HOTPLUGGED = (1 << 0),
340 ATA_EHI_NO_AUTOPSY = (1 << 2),
341 ATA_EHI_QUIET = (1 << 3),
342
343 ATA_EHI_DID_SOFTRESET = (1 << 16),
344 ATA_EHI_DID_HARDRESET = (1 << 17),
345 ATA_EHI_PRINTINFO = (1 << 18),
346 ATA_EHI_SETMODE = (1 << 19),
347 ATA_EHI_POST_SETMODE = (1 << 20),
348
349 ATA_EHI_DID_RESET = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,
350
351
352 ATA_EHI_TO_SLAVE_MASK = ATA_EHI_NO_AUTOPSY | ATA_EHI_QUIET,
353
354
355 ATA_EH_MAX_TRIES = 5,
356
357
358 ATA_PROBE_MAX_TRIES = 3,
359 ATA_EH_DEV_TRIES = 3,
360 ATA_EH_PMP_TRIES = 5,
361 ATA_EH_PMP_LINK_TRIES = 3,
362
363 SATA_PMP_RW_TIMEOUT = 3000,
364
365
366
367
368 ATA_EH_CMD_TIMEOUT_TABLE_SIZE = 5,
369
370
371
372
373 ATA_HORKAGE_DIAGNOSTIC = (1 << 0),
374 ATA_HORKAGE_NODMA = (1 << 1),
375 ATA_HORKAGE_NONCQ = (1 << 2),
376 ATA_HORKAGE_MAX_SEC_128 = (1 << 3),
377 ATA_HORKAGE_BROKEN_HPA = (1 << 4),
378 ATA_HORKAGE_DISABLE = (1 << 5),
379 ATA_HORKAGE_HPA_SIZE = (1 << 6),
380 ATA_HORKAGE_IPM = (1 << 7),
381 ATA_HORKAGE_IVB = (1 << 8),
382 ATA_HORKAGE_STUCK_ERR = (1 << 9),
383 ATA_HORKAGE_BRIDGE_OK = (1 << 10),
384 ATA_HORKAGE_ATAPI_MOD16_DMA = (1 << 11),
385
386 ATA_HORKAGE_FIRMWARE_WARN = (1 << 12),
387 ATA_HORKAGE_1_5_GBPS = (1 << 13),
388 ATA_HORKAGE_NOSETXFER = (1 << 14),
389 ATA_HORKAGE_BROKEN_FPDMA_AA = (1 << 15),
390
391
392
393 ATA_DMA_MASK_ATA = (1 << 0),
394 ATA_DMA_MASK_ATAPI = (1 << 1),
395 ATA_DMA_MASK_CFA = (1 << 2),
396
397
398 ATAPI_READ = 0,
399 ATAPI_WRITE = 1,
400 ATAPI_READ_CD = 2,
401 ATAPI_PASS_THRU = 3,
402 ATAPI_MISC = 4,
403
404
405 ATA_TIMING_SETUP = (1 << 0),
406 ATA_TIMING_ACT8B = (1 << 1),
407 ATA_TIMING_REC8B = (1 << 2),
408 ATA_TIMING_CYC8B = (1 << 3),
409 ATA_TIMING_8BIT = ATA_TIMING_ACT8B | ATA_TIMING_REC8B |
410 ATA_TIMING_CYC8B,
411 ATA_TIMING_ACTIVE = (1 << 4),
412 ATA_TIMING_RECOVER = (1 << 5),
413 ATA_TIMING_DMACK_HOLD = (1 << 6),
414 ATA_TIMING_CYCLE = (1 << 7),
415 ATA_TIMING_UDMA = (1 << 8),
416 ATA_TIMING_ALL = ATA_TIMING_SETUP | ATA_TIMING_ACT8B |
417 ATA_TIMING_REC8B | ATA_TIMING_CYC8B |
418 ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER |
419 ATA_TIMING_DMACK_HOLD | ATA_TIMING_CYCLE |
420 ATA_TIMING_UDMA,
421
422
423 ATA_ACPI_FILTER_SETXFER = 1 << 0,
424 ATA_ACPI_FILTER_LOCK = 1 << 1,
425 ATA_ACPI_FILTER_DIPM = 1 << 2,
426 ATA_ACPI_FILTER_FPDMA_OFFSET = 1 << 3,
427 ATA_ACPI_FILTER_FPDMA_AA = 1 << 4,
428
429 ATA_ACPI_FILTER_DEFAULT = ATA_ACPI_FILTER_SETXFER |
430 ATA_ACPI_FILTER_LOCK |
431 ATA_ACPI_FILTER_DIPM,
432};
433
434enum ata_xfer_mask {
435 ATA_MASK_PIO = ((1LU << ATA_NR_PIO_MODES) - 1)
436 << ATA_SHIFT_PIO,
437 ATA_MASK_MWDMA = ((1LU << ATA_NR_MWDMA_MODES) - 1)
438 << ATA_SHIFT_MWDMA,
439 ATA_MASK_UDMA = ((1LU << ATA_NR_UDMA_MODES) - 1)
440 << ATA_SHIFT_UDMA,
441};
442
443enum hsm_task_states {
444 HSM_ST_IDLE,
445 HSM_ST_FIRST,
446
447 HSM_ST,
448 HSM_ST_LAST,
449 HSM_ST_ERR,
450};
451
452enum ata_completion_errors {
453 AC_ERR_DEV = (1 << 0),
454 AC_ERR_HSM = (1 << 1),
455 AC_ERR_TIMEOUT = (1 << 2),
456 AC_ERR_MEDIA = (1 << 3),
457 AC_ERR_ATA_BUS = (1 << 4),
458 AC_ERR_HOST_BUS = (1 << 5),
459 AC_ERR_SYSTEM = (1 << 6),
460 AC_ERR_INVALID = (1 << 7),
461 AC_ERR_OTHER = (1 << 8),
462 AC_ERR_NODEV_HINT = (1 << 9),
463 AC_ERR_NCQ = (1 << 10),
464};
465
466
467struct scsi_device;
468struct ata_port_operations;
469struct ata_port;
470struct ata_link;
471struct ata_queued_cmd;
472
473
474typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
475typedef int (*ata_prereset_fn_t)(struct ata_link *link, unsigned long deadline);
476typedef int (*ata_reset_fn_t)(struct ata_link *link, unsigned int *classes,
477 unsigned long deadline);
478typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes);
479
480
481
482
483
484enum link_pm {
485 NOT_AVAILABLE,
486 MIN_POWER,
487 MAX_PERFORMANCE,
488 MEDIUM_POWER,
489};
490extern struct device_attribute dev_attr_link_power_management_policy;
491extern struct device_attribute dev_attr_unload_heads;
492extern struct device_attribute dev_attr_em_message_type;
493extern struct device_attribute dev_attr_em_message;
494extern struct device_attribute dev_attr_sw_activity;
495
496enum sw_activity {
497 OFF,
498 BLINK_ON,
499 BLINK_OFF,
500};
501
502#ifdef CONFIG_ATA_SFF
503struct ata_ioports {
504 void __iomem *cmd_addr;
505 void __iomem *data_addr;
506 void __iomem *error_addr;
507 void __iomem *feature_addr;
508 void __iomem *nsect_addr;
509 void __iomem *lbal_addr;
510 void __iomem *lbam_addr;
511 void __iomem *lbah_addr;
512 void __iomem *device_addr;
513 void __iomem *status_addr;
514 void __iomem *command_addr;
515 void __iomem *altstatus_addr;
516 void __iomem *ctl_addr;
517 void __iomem *bmdma_addr;
518 void __iomem *scr_addr;
519};
520#endif
521
522struct ata_host {
523 spinlock_t lock;
524 struct device *dev;
525 void __iomem * const *iomap;
526 unsigned int n_ports;
527 void *private_data;
528 struct ata_port_operations *ops;
529 unsigned long flags;
530#ifdef CONFIG_ATA_ACPI
531 acpi_handle acpi_handle;
532#endif
533 struct ata_port *simplex_claimed;
534 struct ata_port *ports[0];
535};
536
537struct ata_queued_cmd {
538 struct ata_port *ap;
539 struct ata_device *dev;
540
541 struct scsi_cmnd *scsicmd;
542 void (*scsidone)(struct scsi_cmnd *);
543
544 struct ata_taskfile tf;
545 u8 cdb[ATAPI_CDB_LEN];
546
547 unsigned long flags;
548 unsigned int tag;
549 unsigned int n_elem;
550 unsigned int orig_n_elem;
551
552 int dma_dir;
553
554 unsigned int sect_size;
555
556 unsigned int nbytes;
557 unsigned int extrabytes;
558 unsigned int curbytes;
559
560 struct scatterlist *cursg;
561 unsigned int cursg_ofs;
562
563 struct scatterlist sgent;
564
565 struct scatterlist *sg;
566
567 unsigned int err_mask;
568 struct ata_taskfile result_tf;
569 ata_qc_cb_t complete_fn;
570
571 void *private_data;
572 void *lldd_task;
573};
574
575struct ata_port_stats {
576 unsigned long unhandled_irq;
577 unsigned long idle_irq;
578 unsigned long rw_reqbuf;
579};
580
581struct ata_ering_entry {
582 unsigned int eflags;
583 unsigned int err_mask;
584 u64 timestamp;
585};
586
587struct ata_ering {
588 int cursor;
589 struct ata_ering_entry ring[ATA_ERING_SIZE];
590};
591
592struct ata_device {
593 struct ata_link *link;
594 unsigned int devno;
595 unsigned int horkage;
596 unsigned long flags;
597 struct scsi_device *sdev;
598#ifdef CONFIG_ATA_ACPI
599 acpi_handle acpi_handle;
600 union acpi_object *gtf_cache;
601 unsigned int gtf_filter;
602#endif
603
604 u64 n_sectors;
605 u64 n_native_sectors;
606 unsigned int class;
607 unsigned long unpark_deadline;
608
609 u8 pio_mode;
610 u8 dma_mode;
611 u8 xfer_mode;
612 unsigned int xfer_shift;
613
614 unsigned int multi_count;
615
616 unsigned int max_sectors;
617 unsigned int cdb_len;
618
619
620 unsigned long pio_mask;
621 unsigned long mwdma_mask;
622 unsigned long udma_mask;
623
624
625 u16 cylinders;
626 u16 heads;
627 u16 sectors;
628
629 union {
630 u16 id[ATA_ID_WORDS];
631 u32 gscr[SATA_PMP_GSCR_DWORDS];
632 };
633
634
635 int spdn_cnt;
636
637 struct ata_ering ering;
638};
639
640
641
642
643#define ATA_DEVICE_CLEAR_BEGIN offsetof(struct ata_device, n_sectors)
644#define ATA_DEVICE_CLEAR_END offsetof(struct ata_device, ering)
645
646struct ata_eh_info {
647 struct ata_device *dev;
648 u32 serror;
649 unsigned int err_mask;
650 unsigned int action;
651 unsigned int dev_action[ATA_MAX_DEVICES];
652 unsigned int flags;
653
654 unsigned int probe_mask;
655
656 char desc[ATA_EH_DESC_LEN];
657 int desc_len;
658};
659
660struct ata_eh_context {
661 struct ata_eh_info i;
662 int tries[ATA_MAX_DEVICES];
663 int cmd_timeout_idx[ATA_MAX_DEVICES]
664 [ATA_EH_CMD_TIMEOUT_TABLE_SIZE];
665 unsigned int classes[ATA_MAX_DEVICES];
666 unsigned int did_probe_mask;
667 unsigned int unloaded_mask;
668 unsigned int saved_ncq_enabled;
669 u8 saved_xfer_mode[ATA_MAX_DEVICES];
670
671 unsigned long last_reset;
672};
673
674struct ata_acpi_drive
675{
676 u32 pio;
677 u32 dma;
678} __packed;
679
680struct ata_acpi_gtm {
681 struct ata_acpi_drive drive[2];
682 u32 flags;
683} __packed;
684
685struct ata_link {
686 struct ata_port *ap;
687 int pmp;
688
689 unsigned int active_tag;
690 u32 sactive;
691
692 unsigned int flags;
693
694 u32 saved_scontrol;
695 unsigned int hw_sata_spd_limit;
696 unsigned int sata_spd_limit;
697 unsigned int sata_spd;
698
699
700 struct ata_eh_info eh_info;
701
702 struct ata_eh_context eh_context;
703
704 struct ata_device device[ATA_MAX_DEVICES];
705};
706
707struct ata_port {
708 struct Scsi_Host *scsi_host;
709 struct ata_port_operations *ops;
710 spinlock_t *lock;
711
712
713 unsigned long flags;
714
715 unsigned int pflags;
716 unsigned int print_id;
717 unsigned int port_no;
718
719 struct ata_prd *prd;
720 dma_addr_t prd_dma;
721
722#ifdef CONFIG_ATA_SFF
723 struct ata_ioports ioaddr;
724#endif
725
726 u8 ctl;
727 u8 last_ctl;
728 unsigned int pio_mask;
729 unsigned int mwdma_mask;
730 unsigned int udma_mask;
731 unsigned int cbl;
732
733 struct ata_queued_cmd qcmd[ATA_MAX_QUEUE];
734 unsigned long qc_allocated;
735 unsigned int qc_active;
736 int nr_active_links;
737
738 struct ata_link link;
739 struct ata_link *slave_link;
740
741 int nr_pmp_links;
742 struct ata_link *pmp_link;
743 struct ata_link *excl_link;
744
745 struct ata_port_stats stats;
746 struct ata_host *host;
747 struct device *dev;
748
749 void *port_task_data;
750 struct delayed_work port_task;
751 struct delayed_work hotplug_task;
752 struct work_struct scsi_rescan_task;
753
754 unsigned int hsm_task_state;
755
756 u32 msg_enable;
757 struct list_head eh_done_q;
758 wait_queue_head_t eh_wait_q;
759 int eh_tries;
760 struct completion park_req_pending;
761
762 pm_message_t pm_mesg;
763 int *pm_result;
764 enum link_pm pm_policy;
765
766 struct timer_list fastdrain_timer;
767 unsigned long fastdrain_cnt;
768
769 int em_message_type;
770 void *private_data;
771
772#ifdef CONFIG_ATA_ACPI
773 acpi_handle acpi_handle;
774 struct ata_acpi_gtm __acpi_init_gtm;
775#endif
776
777 u8 sector_buf[ATA_SECT_SIZE] ____cacheline_aligned;
778};
779
780
781
782
783
784
785#define ATA_OP_NULL (void *)(unsigned long)(-ENOENT)
786
787struct ata_port_operations {
788
789
790
791 int (*qc_defer)(struct ata_queued_cmd *qc);
792 int (*check_atapi_dma)(struct ata_queued_cmd *qc);
793 void (*qc_prep)(struct ata_queued_cmd *qc);
794 unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
795 bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
796
797
798
799
800 int (*cable_detect)(struct ata_port *ap);
801 unsigned long (*mode_filter)(struct ata_device *dev, unsigned long xfer_mask);
802 void (*set_piomode)(struct ata_port *ap, struct ata_device *dev);
803 void (*set_dmamode)(struct ata_port *ap, struct ata_device *dev);
804 int (*set_mode)(struct ata_link *link, struct ata_device **r_failed_dev);
805 unsigned int (*read_id)(struct ata_device *dev, struct ata_taskfile *tf, u16 *id);
806
807 void (*dev_config)(struct ata_device *dev);
808
809 void (*freeze)(struct ata_port *ap);
810 void (*thaw)(struct ata_port *ap);
811 ata_prereset_fn_t prereset;
812 ata_reset_fn_t softreset;
813 ata_reset_fn_t hardreset;
814 ata_postreset_fn_t postreset;
815 ata_prereset_fn_t pmp_prereset;
816 ata_reset_fn_t pmp_softreset;
817 ata_reset_fn_t pmp_hardreset;
818 ata_postreset_fn_t pmp_postreset;
819 void (*error_handler)(struct ata_port *ap);
820 void (*lost_interrupt)(struct ata_port *ap);
821 void (*post_internal_cmd)(struct ata_queued_cmd *qc);
822
823
824
825
826 int (*scr_read)(struct ata_link *link, unsigned int sc_reg, u32 *val);
827 int (*scr_write)(struct ata_link *link, unsigned int sc_reg, u32 val);
828 void (*pmp_attach)(struct ata_port *ap);
829 void (*pmp_detach)(struct ata_port *ap);
830 int (*enable_pm)(struct ata_port *ap, enum link_pm policy);
831 void (*disable_pm)(struct ata_port *ap);
832
833
834
835
836 int (*port_suspend)(struct ata_port *ap, pm_message_t mesg);
837 int (*port_resume)(struct ata_port *ap);
838 int (*port_start)(struct ata_port *ap);
839 void (*port_stop)(struct ata_port *ap);
840 void (*host_stop)(struct ata_host *host);
841
842#ifdef CONFIG_ATA_SFF
843
844
845
846 void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
847 u8 (*sff_check_status)(struct ata_port *ap);
848 u8 (*sff_check_altstatus)(struct ata_port *ap);
849 void (*sff_tf_load)(struct ata_port *ap, const struct ata_taskfile *tf);
850 void (*sff_tf_read)(struct ata_port *ap, struct ata_taskfile *tf);
851 void (*sff_exec_command)(struct ata_port *ap,
852 const struct ata_taskfile *tf);
853 unsigned int (*sff_data_xfer)(struct ata_device *dev,
854 unsigned char *buf, unsigned int buflen, int rw);
855 u8 (*sff_irq_on)(struct ata_port *);
856 void (*sff_irq_clear)(struct ata_port *);
857
858 void (*bmdma_setup)(struct ata_queued_cmd *qc);
859 void (*bmdma_start)(struct ata_queued_cmd *qc);
860 void (*bmdma_stop)(struct ata_queued_cmd *qc);
861 u8 (*bmdma_status)(struct ata_port *ap);
862
863 void (*drain_fifo)(struct ata_queued_cmd *qc);
864#endif
865
866 ssize_t (*em_show)(struct ata_port *ap, char *buf);
867 ssize_t (*em_store)(struct ata_port *ap, const char *message,
868 size_t size);
869 ssize_t (*sw_activity_show)(struct ata_device *dev, char *buf);
870 ssize_t (*sw_activity_store)(struct ata_device *dev,
871 enum sw_activity val);
872
873
874
875 void (*phy_reset)(struct ata_port *ap);
876 void (*eng_timeout)(struct ata_port *ap);
877
878
879
880
881
882 const struct ata_port_operations *inherits;
883};
884
885struct ata_port_info {
886 unsigned long flags;
887 unsigned long link_flags;
888 unsigned long pio_mask;
889 unsigned long mwdma_mask;
890 unsigned long udma_mask;
891 struct ata_port_operations *port_ops;
892 void *private_data;
893};
894
895struct ata_timing {
896 unsigned short mode;
897 unsigned short setup;
898 unsigned short act8b;
899 unsigned short rec8b;
900 unsigned short cyc8b;
901 unsigned short active;
902 unsigned short recover;
903 unsigned short dmack_hold;
904 unsigned short cycle;
905 unsigned short udma;
906};
907
908
909
910
911extern const unsigned long sata_deb_timing_normal[];
912extern const unsigned long sata_deb_timing_hotplug[];
913extern const unsigned long sata_deb_timing_long[];
914
915extern struct ata_port_operations ata_dummy_port_ops;
916extern const struct ata_port_info ata_dummy_port_info;
917
918static inline const unsigned long *
919sata_ehc_deb_timing(struct ata_eh_context *ehc)
920{
921 if (ehc->i.flags & ATA_EHI_HOTPLUGGED)
922 return sata_deb_timing_hotplug;
923 else
924 return sata_deb_timing_normal;
925}
926
927static inline int ata_port_is_dummy(struct ata_port *ap)
928{
929 return ap->ops == &ata_dummy_port_ops;
930}
931
932extern void ata_port_probe(struct ata_port *);
933extern int sata_set_spd(struct ata_link *link);
934extern int ata_std_prereset(struct ata_link *link, unsigned long deadline);
935extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
936 int (*check_ready)(struct ata_link *link));
937extern int sata_link_debounce(struct ata_link *link,
938 const unsigned long *params, unsigned long deadline);
939extern int sata_link_resume(struct ata_link *link, const unsigned long *params,
940 unsigned long deadline);
941extern int sata_link_hardreset(struct ata_link *link,
942 const unsigned long *timing, unsigned long deadline,
943 bool *online, int (*check_ready)(struct ata_link *));
944extern int sata_std_hardreset(struct ata_link *link, unsigned int *class,
945 unsigned long deadline);
946extern void ata_std_postreset(struct ata_link *link, unsigned int *classes);
947extern void ata_port_disable(struct ata_port *);
948
949extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports);
950extern struct ata_host *ata_host_alloc_pinfo(struct device *dev,
951 const struct ata_port_info * const * ppi, int n_ports);
952extern int ata_slave_link_init(struct ata_port *ap);
953extern int ata_host_start(struct ata_host *host);
954extern int ata_host_register(struct ata_host *host,
955 struct scsi_host_template *sht);
956extern int ata_host_activate(struct ata_host *host, int irq,
957 irq_handler_t irq_handler, unsigned long irq_flags,
958 struct scsi_host_template *sht);
959extern void ata_host_detach(struct ata_host *host);
960extern void ata_host_init(struct ata_host *, struct device *,
961 unsigned long, struct ata_port_operations *);
962extern int ata_scsi_detect(struct scsi_host_template *sht);
963extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
964extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
965extern int ata_sas_scsi_ioctl(struct ata_port *ap, struct scsi_device *dev,
966 int cmd, void __user *arg);
967extern void ata_sas_port_destroy(struct ata_port *);
968extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
969 struct ata_port_info *, struct Scsi_Host *);
970extern int ata_sas_port_init(struct ata_port *);
971extern int ata_sas_port_start(struct ata_port *ap);
972extern void ata_sas_port_stop(struct ata_port *ap);
973extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
974extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
975 struct ata_port *ap);
976extern int sata_scr_valid(struct ata_link *link);
977extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);
978extern int sata_scr_write(struct ata_link *link, int reg, u32 val);
979extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);
980extern bool ata_link_online(struct ata_link *link);
981extern bool ata_link_offline(struct ata_link *link);
982#ifdef CONFIG_PM
983extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
984extern void ata_host_resume(struct ata_host *host);
985#endif
986extern int ata_ratelimit(void);
987extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
988 unsigned long interval, unsigned long timeout);
989extern int atapi_cmd_type(u8 opcode);
990extern void ata_tf_to_fis(const struct ata_taskfile *tf,
991 u8 pmp, int is_cmd, u8 *fis);
992extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);
993extern unsigned long ata_pack_xfermask(unsigned long pio_mask,
994 unsigned long mwdma_mask, unsigned long udma_mask);
995extern void ata_unpack_xfermask(unsigned long xfer_mask,
996 unsigned long *pio_mask, unsigned long *mwdma_mask,
997 unsigned long *udma_mask);
998extern u8 ata_xfer_mask2mode(unsigned long xfer_mask);
999extern unsigned long ata_xfer_mode2mask(u8 xfer_mode);
1000extern int ata_xfer_mode2shift(unsigned long xfer_mode);
1001extern const char *ata_mode_string(unsigned long xfer_mask);
1002extern unsigned long ata_id_xfermask(const u16 *id);
1003extern int ata_port_start(struct ata_port *ap);
1004extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
1005extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
1006extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
1007 unsigned int n_elem);
1008extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
1009extern void ata_dev_disable(struct ata_device *adev);
1010extern void ata_id_string(const u16 *id, unsigned char *s,
1011 unsigned int ofs, unsigned int len);
1012extern void ata_id_c_string(const u16 *id, unsigned char *s,
1013 unsigned int ofs, unsigned int len);
1014extern unsigned int ata_do_dev_read_id(struct ata_device *dev,
1015 struct ata_taskfile *tf, u16 *id);
1016extern void ata_qc_complete(struct ata_queued_cmd *qc);
1017extern int ata_qc_complete_multiple(struct ata_port *ap, u32 qc_active);
1018extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
1019 void (*done)(struct scsi_cmnd *));
1020extern int ata_std_bios_param(struct scsi_device *sdev,
1021 struct block_device *bdev,
1022 sector_t capacity, int geom[]);
1023extern int ata_scsi_slave_config(struct scsi_device *sdev);
1024extern void ata_scsi_slave_destroy(struct scsi_device *sdev);
1025extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
1026 int queue_depth);
1027extern struct ata_device *ata_dev_pair(struct ata_device *adev);
1028extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
1029
1030extern int ata_cable_40wire(struct ata_port *ap);
1031extern int ata_cable_80wire(struct ata_port *ap);
1032extern int ata_cable_sata(struct ata_port *ap);
1033extern int ata_cable_ignore(struct ata_port *ap);
1034extern int ata_cable_unknown(struct ata_port *ap);
1035
1036extern void ata_pio_queue_task(struct ata_port *ap, void *data,
1037 unsigned long delay);
1038
1039
1040extern unsigned int ata_pio_need_iordy(const struct ata_device *);
1041extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);
1042extern int ata_timing_compute(struct ata_device *, unsigned short,
1043 struct ata_timing *, int, int);
1044extern void ata_timing_merge(const struct ata_timing *,
1045 const struct ata_timing *, struct ata_timing *,
1046 unsigned int);
1047extern u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle);
1048
1049
1050#ifdef CONFIG_PCI
1051struct pci_dev;
1052
1053struct pci_bits {
1054 unsigned int reg;
1055 unsigned int width;
1056 unsigned long mask;
1057 unsigned long val;
1058};
1059
1060extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits);
1061extern void ata_pci_remove_one(struct pci_dev *pdev);
1062
1063#ifdef CONFIG_PM
1064extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg);
1065extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev);
1066extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
1067extern int ata_pci_device_resume(struct pci_dev *pdev);
1068#endif
1069#endif
1070
1071
1072
1073
1074#ifdef CONFIG_ATA_ACPI
1075static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
1076{
1077 if (ap->pflags & ATA_PFLAG_INIT_GTM_VALID)
1078 return &ap->__acpi_init_gtm;
1079 return NULL;
1080}
1081int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
1082int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
1083unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev,
1084 const struct ata_acpi_gtm *gtm);
1085int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm);
1086#else
1087static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
1088{
1089 return NULL;
1090}
1091
1092static inline int ata_acpi_stm(const struct ata_port *ap,
1093 struct ata_acpi_gtm *stm)
1094{
1095 return -ENOSYS;
1096}
1097
1098static inline int ata_acpi_gtm(const struct ata_port *ap,
1099 struct ata_acpi_gtm *stm)
1100{
1101 return -ENOSYS;
1102}
1103
1104static inline unsigned int ata_acpi_gtm_xfermask(struct ata_device *dev,
1105 const struct ata_acpi_gtm *gtm)
1106{
1107 return 0;
1108}
1109
1110static inline int ata_acpi_cbl_80wire(struct ata_port *ap,
1111 const struct ata_acpi_gtm *gtm)
1112{
1113 return 0;
1114}
1115#endif
1116
1117
1118
1119
1120extern void ata_port_schedule_eh(struct ata_port *ap);
1121extern int ata_link_abort(struct ata_link *link);
1122extern int ata_port_abort(struct ata_port *ap);
1123extern int ata_port_freeze(struct ata_port *ap);
1124extern int sata_async_notification(struct ata_port *ap);
1125
1126extern void ata_eh_freeze_port(struct ata_port *ap);
1127extern void ata_eh_thaw_port(struct ata_port *ap);
1128
1129extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
1130extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);
1131extern void ata_eh_analyze_ncq_error(struct ata_link *link);
1132
1133extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
1134 ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
1135 ata_postreset_fn_t postreset);
1136extern void ata_std_error_handler(struct ata_port *ap);
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159extern const struct ata_port_operations ata_base_port_ops;
1160extern const struct ata_port_operations sata_port_ops;
1161extern struct device_attribute *ata_common_sdev_attrs[];
1162
1163#define ATA_BASE_SHT(drv_name) \
1164 .module = THIS_MODULE, \
1165 .name = drv_name, \
1166 .ioctl = ata_scsi_ioctl, \
1167 .queuecommand = ata_scsi_queuecmd, \
1168 .can_queue = ATA_DEF_QUEUE, \
1169 .this_id = ATA_SHT_THIS_ID, \
1170 .cmd_per_lun = ATA_SHT_CMD_PER_LUN, \
1171 .emulated = ATA_SHT_EMULATED, \
1172 .use_clustering = ATA_SHT_USE_CLUSTERING, \
1173 .proc_name = drv_name, \
1174 .slave_configure = ata_scsi_slave_config, \
1175 .slave_destroy = ata_scsi_slave_destroy, \
1176 .bios_param = ata_std_bios_param, \
1177 .sdev_attrs = ata_common_sdev_attrs
1178
1179#define ATA_NCQ_SHT(drv_name) \
1180 ATA_BASE_SHT(drv_name), \
1181 .change_queue_depth = ata_scsi_change_queue_depth
1182
1183
1184
1185
1186#ifdef CONFIG_SATA_PMP
1187static inline bool sata_pmp_supported(struct ata_port *ap)
1188{
1189 return ap->flags & ATA_FLAG_PMP;
1190}
1191
1192static inline bool sata_pmp_attached(struct ata_port *ap)
1193{
1194 return ap->nr_pmp_links != 0;
1195}
1196
1197static inline int ata_is_host_link(const struct ata_link *link)
1198{
1199 return link == &link->ap->link || link == link->ap->slave_link;
1200}
1201#else
1202static inline bool sata_pmp_supported(struct ata_port *ap)
1203{
1204 return false;
1205}
1206
1207static inline bool sata_pmp_attached(struct ata_port *ap)
1208{
1209 return false;
1210}
1211
1212static inline int ata_is_host_link(const struct ata_link *link)
1213{
1214 return 1;
1215}
1216#endif
1217
1218static inline int sata_srst_pmp(struct ata_link *link)
1219{
1220 if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
1221 return SATA_PMP_CTRL_PORT;
1222 return link->pmp;
1223}
1224
1225
1226
1227
1228#define ata_port_printk(ap, lv, fmt, args...) \
1229 printk("%sata%u: "fmt, lv, (ap)->print_id , ##args)
1230
1231#define ata_link_printk(link, lv, fmt, args...) do { \
1232 if (sata_pmp_attached((link)->ap) || (link)->ap->slave_link) \
1233 printk("%sata%u.%02u: "fmt, lv, (link)->ap->print_id, \
1234 (link)->pmp , ##args); \
1235 else \
1236 printk("%sata%u: "fmt, lv, (link)->ap->print_id , ##args); \
1237 } while(0)
1238
1239#define ata_dev_printk(dev, lv, fmt, args...) \
1240 printk("%sata%u.%02u: "fmt, lv, (dev)->link->ap->print_id, \
1241 (dev)->link->pmp + (dev)->devno , ##args)
1242
1243
1244
1245
1246extern void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
1247 __attribute__ ((format (printf, 2, 3)));
1248extern void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
1249 __attribute__ ((format (printf, 2, 3)));
1250extern void ata_ehi_clear_desc(struct ata_eh_info *ehi);
1251
1252static inline void ata_ehi_hotplugged(struct ata_eh_info *ehi)
1253{
1254 ehi->probe_mask |= (1 << ATA_MAX_DEVICES) - 1;
1255 ehi->flags |= ATA_EHI_HOTPLUGGED;
1256 ehi->action |= ATA_EH_RESET | ATA_EH_ENABLE_LINK;
1257 ehi->err_mask |= AC_ERR_ATA_BUS;
1258}
1259
1260
1261
1262
1263extern void ata_port_desc(struct ata_port *ap, const char *fmt, ...)
1264 __attribute__ ((format (printf, 2, 3)));
1265#ifdef CONFIG_PCI
1266extern void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
1267 const char *name);
1268#endif
1269
1270static inline unsigned int ata_tag_valid(unsigned int tag)
1271{
1272 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
1273}
1274
1275static inline unsigned int ata_tag_internal(unsigned int tag)
1276{
1277 return tag == ATA_TAG_INTERNAL;
1278}
1279
1280
1281
1282
1283static inline unsigned int ata_class_enabled(unsigned int class)
1284{
1285 return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI ||
1286 class == ATA_DEV_PMP || class == ATA_DEV_SEMB;
1287}
1288
1289static inline unsigned int ata_class_disabled(unsigned int class)
1290{
1291 return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP ||
1292 class == ATA_DEV_PMP_UNSUP || class == ATA_DEV_SEMB_UNSUP;
1293}
1294
1295static inline unsigned int ata_class_absent(unsigned int class)
1296{
1297 return !ata_class_enabled(class) && !ata_class_disabled(class);
1298}
1299
1300static inline unsigned int ata_dev_enabled(const struct ata_device *dev)
1301{
1302 return ata_class_enabled(dev->class);
1303}
1304
1305static inline unsigned int ata_dev_disabled(const struct ata_device *dev)
1306{
1307 return ata_class_disabled(dev->class);
1308}
1309
1310static inline unsigned int ata_dev_absent(const struct ata_device *dev)
1311{
1312 return ata_class_absent(dev->class);
1313}
1314
1315
1316
1317
1318static inline int ata_link_max_devices(const struct ata_link *link)
1319{
1320 if (ata_is_host_link(link) && link->ap->flags & ATA_FLAG_SLAVE_POSS)
1321 return 2;
1322 return 1;
1323}
1324
1325static inline int ata_link_active(struct ata_link *link)
1326{
1327 return ata_tag_valid(link->active_tag) || link->sactive;
1328}
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342enum ata_link_iter_mode {
1343 ATA_LITER_EDGE,
1344
1345 ATA_LITER_HOST_FIRST,
1346 ATA_LITER_PMP_FIRST,
1347
1348};
1349
1350enum ata_dev_iter_mode {
1351 ATA_DITER_ENABLED,
1352 ATA_DITER_ENABLED_REVERSE,
1353 ATA_DITER_ALL,
1354 ATA_DITER_ALL_REVERSE,
1355};
1356
1357extern struct ata_link *ata_link_next(struct ata_link *link,
1358 struct ata_port *ap,
1359 enum ata_link_iter_mode mode);
1360
1361extern struct ata_device *ata_dev_next(struct ata_device *dev,
1362 struct ata_link *link,
1363 enum ata_dev_iter_mode mode);
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379#define ata_for_each_link(link, ap, mode) \
1380 for ((link) = ata_link_next(NULL, (ap), ATA_LITER_##mode); (link); \
1381 (link) = ata_link_next((link), (ap), ATA_LITER_##mode))
1382
1383#define ata_for_each_dev(dev, link, mode) \
1384 for ((dev) = ata_dev_next(NULL, (link), ATA_DITER_##mode); (dev); \
1385 (dev) = ata_dev_next((dev), (link), ATA_DITER_##mode))
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397static inline int ata_ncq_enabled(struct ata_device *dev)
1398{
1399 return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF |
1400 ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ;
1401}
1402
1403static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
1404{
1405 qc->tf.ctl |= ATA_NIEN;
1406}
1407
1408static inline struct ata_queued_cmd *__ata_qc_from_tag(struct ata_port *ap,
1409 unsigned int tag)
1410{
1411 if (likely(ata_tag_valid(tag)))
1412 return &ap->qcmd[tag];
1413 return NULL;
1414}
1415
1416static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
1417 unsigned int tag)
1418{
1419 struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1420
1421 if (unlikely(!qc) || !ap->ops->error_handler)
1422 return qc;
1423
1424 if ((qc->flags & (ATA_QCFLAG_ACTIVE |
1425 ATA_QCFLAG_FAILED)) == ATA_QCFLAG_ACTIVE)
1426 return qc;
1427
1428 return NULL;
1429}
1430
1431static inline unsigned int ata_qc_raw_nbytes(struct ata_queued_cmd *qc)
1432{
1433 return qc->nbytes - min(qc->extrabytes, qc->nbytes);
1434}
1435
1436static inline void ata_tf_init(struct ata_device *dev, struct ata_taskfile *tf)
1437{
1438 memset(tf, 0, sizeof(*tf));
1439
1440 tf->ctl = dev->link->ap->ctl;
1441 if (dev->devno == 0)
1442 tf->device = ATA_DEVICE_OBS;
1443 else
1444 tf->device = ATA_DEVICE_OBS | ATA_DEV1;
1445}
1446
1447static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
1448{
1449 qc->dma_dir = DMA_NONE;
1450 qc->sg = NULL;
1451 qc->flags = 0;
1452 qc->cursg = NULL;
1453 qc->cursg_ofs = 0;
1454 qc->nbytes = qc->extrabytes = qc->curbytes = 0;
1455 qc->n_elem = 0;
1456 qc->err_mask = 0;
1457 qc->sect_size = ATA_SECT_SIZE;
1458
1459 ata_tf_init(qc->dev, &qc->tf);
1460
1461
1462 qc->result_tf.command = ATA_DRDY;
1463 qc->result_tf.feature = 0;
1464}
1465
1466static inline int ata_try_flush_cache(const struct ata_device *dev)
1467{
1468 return ata_id_wcache_enabled(dev->id) ||
1469 ata_id_has_flush(dev->id) ||
1470 ata_id_has_flush_ext(dev->id);
1471}
1472
1473static inline unsigned int ac_err_mask(u8 status)
1474{
1475 if (status & (ATA_BUSY | ATA_DRQ))
1476 return AC_ERR_HSM;
1477 if (status & (ATA_ERR | ATA_DF))
1478 return AC_ERR_DEV;
1479 return 0;
1480}
1481
1482static inline unsigned int __ac_err_mask(u8 status)
1483{
1484 unsigned int mask = ac_err_mask(status);
1485 if (mask == 0)
1486 return AC_ERR_OTHER;
1487 return mask;
1488}
1489
1490static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
1491{
1492 return *(struct ata_port **)&host->hostdata[0];
1493}
1494
1495static inline int ata_check_ready(u8 status)
1496{
1497 if (!(status & ATA_BUSY))
1498 return 1;
1499
1500
1501 if (status == 0xff)
1502 return -ENODEV;
1503
1504 return 0;
1505}
1506
1507static inline unsigned long ata_deadline(unsigned long from_jiffies,
1508 unsigned long timeout_msecs)
1509{
1510 return from_jiffies + msecs_to_jiffies(timeout_msecs);
1511}
1512
1513
1514
1515
1516
1517static inline int ata_using_mwdma(struct ata_device *adev)
1518{
1519 if (adev->dma_mode >= XFER_MW_DMA_0 && adev->dma_mode <= XFER_MW_DMA_4)
1520 return 1;
1521 return 0;
1522}
1523
1524static inline int ata_using_udma(struct ata_device *adev)
1525{
1526 if (adev->dma_mode >= XFER_UDMA_0 && adev->dma_mode <= XFER_UDMA_7)
1527 return 1;
1528 return 0;
1529}
1530
1531static inline int ata_dma_enabled(struct ata_device *adev)
1532{
1533 return (adev->dma_mode == 0xFF ? 0 : 1);
1534}
1535
1536
1537
1538
1539#ifdef CONFIG_SATA_PMP
1540
1541extern const struct ata_port_operations sata_pmp_port_ops;
1542
1543extern int sata_pmp_qc_defer_cmd_switch(struct ata_queued_cmd *qc);
1544extern void sata_pmp_error_handler(struct ata_port *ap);
1545
1546#else
1547
1548#define sata_pmp_port_ops sata_port_ops
1549#define sata_pmp_qc_defer_cmd_switch ata_std_qc_defer
1550#define sata_pmp_error_handler ata_std_error_handler
1551
1552#endif
1553
1554
1555
1556
1557
1558#ifdef CONFIG_ATA_SFF
1559
1560extern const struct ata_port_operations ata_sff_port_ops;
1561extern const struct ata_port_operations ata_bmdma_port_ops;
1562extern const struct ata_port_operations ata_bmdma32_port_ops;
1563
1564
1565#define ATA_PIO_SHT(drv_name) \
1566 ATA_BASE_SHT(drv_name), \
1567 .sg_tablesize = LIBATA_MAX_PRD, \
1568 .dma_boundary = ATA_DMA_BOUNDARY
1569
1570#define ATA_BMDMA_SHT(drv_name) \
1571 ATA_BASE_SHT(drv_name), \
1572 .sg_tablesize = LIBATA_MAX_PRD, \
1573 .dma_boundary = ATA_DMA_BOUNDARY
1574
1575extern void ata_sff_qc_prep(struct ata_queued_cmd *qc);
1576extern void ata_sff_dumb_qc_prep(struct ata_queued_cmd *qc);
1577extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device);
1578extern u8 ata_sff_check_status(struct ata_port *ap);
1579extern void ata_sff_pause(struct ata_port *ap);
1580extern void ata_sff_dma_pause(struct ata_port *ap);
1581extern int ata_sff_busy_sleep(struct ata_port *ap,
1582 unsigned long timeout_pat, unsigned long timeout);
1583extern int ata_sff_wait_ready(struct ata_link *link, unsigned long deadline);
1584extern void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
1585extern void ata_sff_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
1586extern void ata_sff_exec_command(struct ata_port *ap,
1587 const struct ata_taskfile *tf);
1588extern unsigned int ata_sff_data_xfer(struct ata_device *dev,
1589 unsigned char *buf, unsigned int buflen, int rw);
1590extern unsigned int ata_sff_data_xfer32(struct ata_device *dev,
1591 unsigned char *buf, unsigned int buflen, int rw);
1592extern unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev,
1593 unsigned char *buf, unsigned int buflen, int rw);
1594extern u8 ata_sff_irq_on(struct ata_port *ap);
1595extern void ata_sff_irq_clear(struct ata_port *ap);
1596extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
1597 u8 status, int in_wq);
1598extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc);
1599extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc);
1600extern unsigned int ata_sff_host_intr(struct ata_port *ap,
1601 struct ata_queued_cmd *qc);
1602extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance);
1603extern void ata_sff_lost_interrupt(struct ata_port *ap);
1604extern void ata_sff_freeze(struct ata_port *ap);
1605extern void ata_sff_thaw(struct ata_port *ap);
1606extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline);
1607extern unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
1608 u8 *r_err);
1609extern int ata_sff_wait_after_reset(struct ata_link *link, unsigned int devmask,
1610 unsigned long deadline);
1611extern int ata_sff_softreset(struct ata_link *link, unsigned int *classes,
1612 unsigned long deadline);
1613extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class,
1614 unsigned long deadline);
1615extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes);
1616extern void ata_sff_drain_fifo(struct ata_queued_cmd *qc);
1617extern void ata_sff_error_handler(struct ata_port *ap);
1618extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc);
1619extern int ata_sff_port_start(struct ata_port *ap);
1620extern int ata_sff_port_start32(struct ata_port *ap);
1621extern void ata_sff_std_ports(struct ata_ioports *ioaddr);
1622extern unsigned long ata_bmdma_mode_filter(struct ata_device *dev,
1623 unsigned long xfer_mask);
1624extern void ata_bmdma_setup(struct ata_queued_cmd *qc);
1625extern void ata_bmdma_start(struct ata_queued_cmd *qc);
1626extern void ata_bmdma_stop(struct ata_queued_cmd *qc);
1627extern u8 ata_bmdma_status(struct ata_port *ap);
1628extern void ata_bus_reset(struct ata_port *ap);
1629
1630#ifdef CONFIG_PCI
1631extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev);
1632extern int ata_pci_bmdma_init(struct ata_host *host);
1633extern int ata_pci_sff_init_host(struct ata_host *host);
1634extern int ata_pci_sff_prepare_host(struct pci_dev *pdev,
1635 const struct ata_port_info * const * ppi,
1636 struct ata_host **r_host);
1637extern int ata_pci_sff_activate_host(struct ata_host *host,
1638 irq_handler_t irq_handler,
1639 struct scsi_host_template *sht);
1640extern int ata_pci_sff_init_one(struct pci_dev *pdev,
1641 const struct ata_port_info * const * ppi,
1642 struct scsi_host_template *sht, void *host_priv);
1643#endif
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658static inline u8 ata_sff_busy_wait(struct ata_port *ap, unsigned int bits,
1659 unsigned int max)
1660{
1661 u8 status;
1662
1663 do {
1664 udelay(10);
1665 status = ap->ops->sff_check_status(ap);
1666 max--;
1667 } while (status != 0xff && (status & bits) && (max > 0));
1668
1669 return status;
1670}
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682static inline u8 ata_wait_idle(struct ata_port *ap)
1683{
1684 u8 status = ata_sff_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
1685
1686#ifdef ATA_DEBUG
1687 if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ)))
1688 ata_port_printk(ap, KERN_DEBUG, "abnormal Status 0x%X\n",
1689 status);
1690#endif
1691
1692 return status;
1693}
1694#endif
1695
1696#endif
1697