blob: bd0df84cfd877a05271597a1ac96a01d83de9ee9 [file] [log] [blame]
Linus Torvalds1da177e2005-04-16 15:20:36 -07001/*
2 Copyright 2003-2004 Red Hat, Inc. All rights reserved.
3 Copyright 2003-2004 Jeff Garzik
4
5 The contents of this file are subject to the Open
6 Software License version 1.1 that can be found at
7 http://www.opensource.org/licenses/osl-1.1.txt and is included herein
8 by reference.
9
10 Alternatively, the contents of this file may be used under the terms
11 of the GNU General Public License version 2 (the "GPL") as distributed
12 in the kernel source COPYING file, in which case the provisions of
13 the GPL are applicable instead of the above. If you wish to allow
14 the use of your version of this file only under the terms of the
15 GPL and not to allow others to use your version of this file under
16 the OSL, indicate your decision by deleting the provisions above and
17 replace them with the notice and other provisions required by the GPL.
18 If you do not delete the provisions above, a recipient may use your
19 version of this file under either the OSL or the GPL.
20
21 */
22
23#ifndef __LINUX_LIBATA_H__
24#define __LINUX_LIBATA_H__
25
26#include <linux/delay.h>
27#include <linux/interrupt.h>
28#include <linux/pci.h>
29#include <asm/io.h>
30#include <linux/ata.h>
31#include <linux/workqueue.h>
32
33/*
34 * compile-time options
35 */
36#undef ATA_DEBUG /* debugging output */
37#undef ATA_VERBOSE_DEBUG /* yet more debugging output */
38#undef ATA_IRQ_TRAP /* define to ack screaming irqs */
39#undef ATA_NDEBUG /* define to disable quick runtime checks */
40#undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */
41#undef ATA_ENABLE_PATA /* define to enable PATA support in some
42 * low-level drivers */
43#undef ATAPI_ENABLE_DMADIR /* enables ATAPI DMADIR bridge support */
44
45
46/* note: prints function name for you */
47#ifdef ATA_DEBUG
48#define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
49#ifdef ATA_VERBOSE_DEBUG
50#define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
51#else
52#define VPRINTK(fmt, args...)
53#endif /* ATA_VERBOSE_DEBUG */
54#else
55#define DPRINTK(fmt, args...)
56#define VPRINTK(fmt, args...)
57#endif /* ATA_DEBUG */
58
59#ifdef ATA_NDEBUG
60#define assert(expr)
61#else
62#define assert(expr) \
63 if(unlikely(!(expr))) { \
64 printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
65 #expr,__FILE__,__FUNCTION__,__LINE__); \
66 }
67#endif
68
69/* defines only for the constants which don't work well as enums */
70#define ATA_TAG_POISON 0xfafbfcfdU
71
72/* move to PCI layer? */
73static inline struct device *pci_dev_to_dev(struct pci_dev *pdev)
74{
75 return &pdev->dev;
76}
77
78enum {
79 /* various global constants */
80 LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
81 ATA_MAX_PORTS = 8,
82 ATA_DEF_QUEUE = 1,
83 ATA_MAX_QUEUE = 1,
84 ATA_MAX_SECTORS = 200, /* FIXME */
85 ATA_MAX_BUS = 2,
86 ATA_DEF_BUSY_WAIT = 10000,
87 ATA_SHORT_PAUSE = (HZ >> 6) + 1,
88
89 ATA_SHT_EMULATED = 1,
90 ATA_SHT_CMD_PER_LUN = 1,
91 ATA_SHT_THIS_ID = -1,
92 ATA_SHT_USE_CLUSTERING = 0,
93
94 /* struct ata_device stuff */
95 ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */
96 ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */
97 ATA_DFLAG_LOCK_SECTORS = (1 << 2), /* don't adjust max_sectors */
Albert Lee8bf62ece2005-05-12 15:29:42 -040098 ATA_DFLAG_LBA = (1 << 3), /* device supports LBA */
Linus Torvalds1da177e2005-04-16 15:20:36 -070099
100 ATA_DEV_UNKNOWN = 0, /* unknown device */
101 ATA_DEV_ATA = 1, /* ATA device */
102 ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
103 ATA_DEV_ATAPI = 3, /* ATAPI device */
104 ATA_DEV_ATAPI_UNSUP = 4, /* ATAPI device (unsupported) */
105 ATA_DEV_NONE = 5, /* no device */
106
107 /* struct ata_port flags */
108 ATA_FLAG_SLAVE_POSS = (1 << 1), /* host supports slave dev */
109 /* (doesn't imply presence) */
110 ATA_FLAG_PORT_DISABLED = (1 << 2), /* port is disabled, ignore it */
111 ATA_FLAG_SATA = (1 << 3),
112 ATA_FLAG_NO_LEGACY = (1 << 4), /* no legacy mode check */
113 ATA_FLAG_SRST = (1 << 5), /* use ATA SRST, not E.D.D. */
114 ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */
115 ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */
116 ATA_FLAG_PIO_DMA = (1 << 8), /* PIO cmds via DMA */
117
118 ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */
119 ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */
120 ATA_QCFLAG_SINGLE = (1 << 4), /* no s/g, just a single buffer */
121 ATA_QCFLAG_DMAMAP = ATA_QCFLAG_SG | ATA_QCFLAG_SINGLE,
122
123 /* various lengths of time */
124 ATA_TMOUT_EDD = 5 * HZ, /* hueristic */
125 ATA_TMOUT_PIO = 30 * HZ,
126 ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */
127 ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */
128 ATA_TMOUT_CDB = 30 * HZ,
129 ATA_TMOUT_CDB_QUICK = 5 * HZ,
130
131 /* ATA bus states */
132 BUS_UNKNOWN = 0,
133 BUS_DMA = 1,
134 BUS_IDLE = 2,
135 BUS_NOINTR = 3,
136 BUS_NODATA = 4,
137 BUS_TIMER = 5,
138 BUS_PIO = 6,
139 BUS_EDD = 7,
140 BUS_IDENTIFY = 8,
141 BUS_PACKET = 9,
142
143 /* SATA port states */
144 PORT_UNKNOWN = 0,
145 PORT_ENABLED = 1,
146 PORT_DISABLED = 2,
147
148 /* encoding various smaller bitmaps into a single
149 * unsigned long bitmap
150 */
151 ATA_SHIFT_UDMA = 0,
152 ATA_SHIFT_MWDMA = 8,
153 ATA_SHIFT_PIO = 11,
154};
155
156enum pio_task_states {
157 PIO_ST_UNKNOWN,
158 PIO_ST_IDLE,
159 PIO_ST_POLL,
160 PIO_ST_TMOUT,
161 PIO_ST,
162 PIO_ST_LAST,
163 PIO_ST_LAST_POLL,
164 PIO_ST_ERR,
165};
166
167/* forward declarations */
168struct scsi_device;
169struct ata_port_operations;
170struct ata_port;
171struct ata_queued_cmd;
172
173/* typedefs */
174typedef int (*ata_qc_cb_t) (struct ata_queued_cmd *qc, u8 drv_stat);
175
176struct ata_ioports {
177 unsigned long cmd_addr;
178 unsigned long data_addr;
179 unsigned long error_addr;
180 unsigned long feature_addr;
181 unsigned long nsect_addr;
182 unsigned long lbal_addr;
183 unsigned long lbam_addr;
184 unsigned long lbah_addr;
185 unsigned long device_addr;
186 unsigned long status_addr;
187 unsigned long command_addr;
188 unsigned long altstatus_addr;
189 unsigned long ctl_addr;
190 unsigned long bmdma_addr;
191 unsigned long scr_addr;
192};
193
194struct ata_probe_ent {
195 struct list_head node;
196 struct device *dev;
197 struct ata_port_operations *port_ops;
198 Scsi_Host_Template *sht;
199 struct ata_ioports port[ATA_MAX_PORTS];
200 unsigned int n_ports;
201 unsigned int hard_port_no;
202 unsigned int pio_mask;
203 unsigned int mwdma_mask;
204 unsigned int udma_mask;
205 unsigned int legacy_mode;
206 unsigned long irq;
207 unsigned int irq_flags;
208 unsigned long host_flags;
209 void __iomem *mmio_base;
210 void *private_data;
211};
212
213struct ata_host_set {
214 spinlock_t lock;
215 struct device *dev;
216 unsigned long irq;
217 void __iomem *mmio_base;
218 unsigned int n_ports;
219 void *private_data;
220 struct ata_port_operations *ops;
221 struct ata_port * ports[0];
222};
223
224struct ata_queued_cmd {
225 struct ata_port *ap;
226 struct ata_device *dev;
227
228 struct scsi_cmnd *scsicmd;
229 void (*scsidone)(struct scsi_cmnd *);
230
231 struct ata_taskfile tf;
232 u8 cdb[ATAPI_CDB_LEN];
233
234 unsigned long flags; /* ATA_QCFLAG_xxx */
235 unsigned int tag;
236 unsigned int n_elem;
237
238 int dma_dir;
239
240 unsigned int nsect;
241 unsigned int cursect;
242
243 unsigned int nbytes;
244 unsigned int curbytes;
245
246 unsigned int cursg;
247 unsigned int cursg_ofs;
248
249 struct scatterlist sgent;
250 void *buf_virt;
251
252 struct scatterlist *sg;
253
254 ata_qc_cb_t complete_fn;
255
256 struct completion *waiting;
257
258 void *private_data;
259};
260
261struct ata_host_stats {
262 unsigned long unhandled_irq;
263 unsigned long idle_irq;
264 unsigned long rw_reqbuf;
265};
266
267struct ata_device {
268 u64 n_sectors; /* size of device, if ATA */
269 unsigned long flags; /* ATA_DFLAG_xxx */
270 unsigned int class; /* ATA_DEV_xxx */
271 unsigned int devno; /* 0 or 1 */
272 u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
273 u8 pio_mode;
274 u8 dma_mode;
275 u8 xfer_mode;
276 unsigned int xfer_shift; /* ATA_SHIFT_xxx */
277
278 /* cache info about current transfer mode */
279 u8 xfer_protocol; /* taskfile xfer protocol */
280 u8 read_cmd; /* opcode to use on read */
281 u8 write_cmd; /* opcode to use on write */
Albert Lee8bf62ece2005-05-12 15:29:42 -0400282
283 /* for CHS addressing */
284 u16 cylinders; /* Number of cylinders */
285 u16 heads; /* Number of heads */
286 u16 sectors; /* Number of sectors per track */
Linus Torvalds1da177e2005-04-16 15:20:36 -0700287};
288
289struct ata_port {
290 struct Scsi_Host *host; /* our co-allocated scsi host */
291 struct ata_port_operations *ops;
292 unsigned long flags; /* ATA_FLAG_xxx */
293 unsigned int id; /* unique id req'd by scsi midlyr */
294 unsigned int port_no; /* unique port #; from zero */
295 unsigned int hard_port_no; /* hardware port #; from zero */
296
297 struct ata_prd *prd; /* our SG list */
298 dma_addr_t prd_dma; /* and its DMA mapping */
299
300 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
301
302 u8 ctl; /* cache of ATA control register */
303 u8 last_ctl; /* Cache last written value */
304 unsigned int bus_state;
305 unsigned int port_state;
306 unsigned int pio_mask;
307 unsigned int mwdma_mask;
308 unsigned int udma_mask;
309 unsigned int cbl; /* cable type; ATA_CBL_xxx */
310 unsigned int cdb_len;
311
312 struct ata_device device[ATA_MAX_DEVICES];
313
314 struct ata_queued_cmd qcmd[ATA_MAX_QUEUE];
315 unsigned long qactive;
316 unsigned int active_tag;
317
318 struct ata_host_stats stats;
319 struct ata_host_set *host_set;
320
321 struct work_struct packet_task;
322
323 struct work_struct pio_task;
324 unsigned int pio_task_state;
325 unsigned long pio_task_timeout;
326
327 void *private_data;
328};
329
330struct ata_port_operations {
331 void (*port_disable) (struct ata_port *);
332
333 void (*dev_config) (struct ata_port *, struct ata_device *);
334
335 void (*set_piomode) (struct ata_port *, struct ata_device *);
336 void (*set_dmamode) (struct ata_port *, struct ata_device *);
337
338 void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
339 void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
340
341 void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
342 u8 (*check_status)(struct ata_port *ap);
343 u8 (*check_altstatus)(struct ata_port *ap);
344 u8 (*check_err)(struct ata_port *ap);
345 void (*dev_select)(struct ata_port *ap, unsigned int device);
346
347 void (*phy_reset) (struct ata_port *ap);
348 void (*post_set_mode) (struct ata_port *ap);
349
350 int (*check_atapi_dma) (struct ata_queued_cmd *qc);
351
352 void (*bmdma_setup) (struct ata_queued_cmd *qc);
353 void (*bmdma_start) (struct ata_queued_cmd *qc);
354
355 void (*qc_prep) (struct ata_queued_cmd *qc);
356 int (*qc_issue) (struct ata_queued_cmd *qc);
357
358 void (*eng_timeout) (struct ata_port *ap);
359
360 irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
361 void (*irq_clear) (struct ata_port *);
362
363 u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
364 void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
365 u32 val);
366
367 int (*port_start) (struct ata_port *ap);
368 void (*port_stop) (struct ata_port *ap);
369
370 void (*host_stop) (struct ata_host_set *host_set);
371
372 void (*bmdma_stop) (struct ata_port *ap);
373 u8 (*bmdma_status) (struct ata_port *ap);
374};
375
376struct ata_port_info {
377 Scsi_Host_Template *sht;
378 unsigned long host_flags;
379 unsigned long pio_mask;
380 unsigned long mwdma_mask;
381 unsigned long udma_mask;
382 struct ata_port_operations *port_ops;
383};
384
385
386extern void ata_port_probe(struct ata_port *);
387extern void __sata_phy_reset(struct ata_port *ap);
388extern void sata_phy_reset(struct ata_port *ap);
389extern void ata_bus_reset(struct ata_port *ap);
390extern void ata_port_disable(struct ata_port *);
391extern void ata_std_ports(struct ata_ioports *ioaddr);
392#ifdef CONFIG_PCI
393extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
394 unsigned int n_ports);
395extern void ata_pci_remove_one (struct pci_dev *pdev);
396#endif /* CONFIG_PCI */
397extern int ata_device_add(struct ata_probe_ent *ent);
398extern int ata_scsi_detect(Scsi_Host_Template *sht);
399extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
400extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
401extern int ata_scsi_error(struct Scsi_Host *host);
402extern int ata_scsi_release(struct Scsi_Host *host);
403extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
404/*
405 * Default driver ops implementations
406 */
407extern void ata_tf_load(struct ata_port *ap, struct ata_taskfile *tf);
408extern void ata_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
409extern void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp);
410extern void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf);
411extern void ata_noop_dev_select (struct ata_port *ap, unsigned int device);
412extern void ata_std_dev_select (struct ata_port *ap, unsigned int device);
413extern u8 ata_check_status(struct ata_port *ap);
414extern u8 ata_altstatus(struct ata_port *ap);
415extern u8 ata_chk_err(struct ata_port *ap);
416extern void ata_exec_command(struct ata_port *ap, struct ata_taskfile *tf);
417extern int ata_port_start (struct ata_port *ap);
418extern void ata_port_stop (struct ata_port *ap);
419extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
420extern void ata_qc_prep(struct ata_queued_cmd *qc);
421extern int ata_qc_issue_prot(struct ata_queued_cmd *qc);
422extern void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf,
423 unsigned int buflen);
424extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
425 unsigned int n_elem);
426extern unsigned int ata_dev_classify(struct ata_taskfile *tf);
427extern void ata_dev_id_string(u16 *id, unsigned char *s,
428 unsigned int ofs, unsigned int len);
429extern void ata_bmdma_setup (struct ata_queued_cmd *qc);
430extern void ata_bmdma_start (struct ata_queued_cmd *qc);
431extern void ata_bmdma_stop(struct ata_port *ap);
432extern u8 ata_bmdma_status(struct ata_port *ap);
433extern void ata_bmdma_irq_clear(struct ata_port *ap);
434extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat);
435extern void ata_eng_timeout(struct ata_port *ap);
436extern void ata_scsi_simulate(u16 *id, struct scsi_cmnd *cmd,
437 void (*done)(struct scsi_cmnd *));
438extern int ata_std_bios_param(struct scsi_device *sdev,
439 struct block_device *bdev,
440 sector_t capacity, int geom[]);
441extern int ata_scsi_slave_config(struct scsi_device *sdev);
442
443
444#ifdef CONFIG_PCI
445struct pci_bits {
446 unsigned int reg; /* PCI config register to read */
447 unsigned int width; /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
448 unsigned long mask;
449 unsigned long val;
450};
451
452extern struct ata_probe_ent *
453ata_pci_init_native_mode(struct pci_dev *pdev, struct ata_port_info **port);
454extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
455
456#endif /* CONFIG_PCI */
457
458
459static inline unsigned int ata_tag_valid(unsigned int tag)
460{
461 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
462}
463
464static inline unsigned int ata_dev_present(struct ata_device *dev)
465{
466 return ((dev->class == ATA_DEV_ATA) ||
467 (dev->class == ATA_DEV_ATAPI));
468}
469
470static inline u8 ata_chk_status(struct ata_port *ap)
471{
472 return ap->ops->check_status(ap);
473}
474
475static inline void ata_pause(struct ata_port *ap)
476{
477 ata_altstatus(ap);
478 ndelay(400);
479}
480
481static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits,
482 unsigned int max)
483{
484 u8 status;
485
486 do {
487 udelay(10);
488 status = ata_chk_status(ap);
489 max--;
490 } while ((status & bits) && (max > 0));
491
492 return status;
493}
494
495static inline u8 ata_wait_idle(struct ata_port *ap)
496{
497 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
498
499 if (status & (ATA_BUSY | ATA_DRQ)) {
500 unsigned long l = ap->ioaddr.status_addr;
501 printk(KERN_WARNING
502 "ATA: abnormal status 0x%X on port 0x%lX\n",
503 status, l);
504 }
505
506 return status;
507}
508
509static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
510{
511 qc->tf.ctl |= ATA_NIEN;
512}
513
514static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
515 unsigned int tag)
516{
517 if (likely(ata_tag_valid(tag)))
518 return &ap->qcmd[tag];
519 return NULL;
520}
521
522static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device)
523{
524 memset(tf, 0, sizeof(*tf));
525
526 tf->ctl = ap->ctl;
527 if (device == 0)
528 tf->device = ATA_DEVICE_OBS;
529 else
530 tf->device = ATA_DEVICE_OBS | ATA_DEV1;
531}
532
533static inline u8 ata_irq_on(struct ata_port *ap)
534{
535 struct ata_ioports *ioaddr = &ap->ioaddr;
536 u8 tmp;
537
538 ap->ctl &= ~ATA_NIEN;
539 ap->last_ctl = ap->ctl;
540
541 if (ap->flags & ATA_FLAG_MMIO)
542 writeb(ap->ctl, (void __iomem *) ioaddr->ctl_addr);
543 else
544 outb(ap->ctl, ioaddr->ctl_addr);
545 tmp = ata_wait_idle(ap);
546
547 ap->ops->irq_clear(ap);
548
549 return tmp;
550}
551
552static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
553{
554 unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
555 u8 host_stat, post_stat, status;
556
557 status = ata_busy_wait(ap, bits, 1000);
558 if (status & bits)
559 DPRINTK("abnormal status 0x%X\n", status);
560
561 /* get controller status; clear intr, err bits */
562 if (ap->flags & ATA_FLAG_MMIO) {
563 void __iomem *mmio = (void __iomem *) ap->ioaddr.bmdma_addr;
564 host_stat = readb(mmio + ATA_DMA_STATUS);
565 writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
566 mmio + ATA_DMA_STATUS);
567
568 post_stat = readb(mmio + ATA_DMA_STATUS);
569 } else {
570 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
571 outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
572 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
573
574 post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
575 }
576
577 VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
578 host_stat, post_stat, status);
579
580 return status;
581}
582
583static inline u32 scr_read(struct ata_port *ap, unsigned int reg)
584{
585 return ap->ops->scr_read(ap, reg);
586}
587
588static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val)
589{
590 ap->ops->scr_write(ap, reg, val);
591}
592
593static inline unsigned int sata_dev_present(struct ata_port *ap)
594{
595 return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0;
596}
597
598static inline int ata_try_flush_cache(struct ata_device *dev)
599{
600 return ata_id_wcache_enabled(dev->id) ||
601 ata_id_has_flush(dev->id) ||
602 ata_id_has_flush_ext(dev->id);
603}
604
605#endif /* __LINUX_LIBATA_H__ */