2 Copyright 2003-2004 Red Hat, Inc. All rights reserved.
3 Copyright 2003-2004 Jeff Garzik
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
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.
23 #ifndef __LINUX_LIBATA_H__
24 #define __LINUX_LIBATA_H__
26 #include <linux/delay.h>
27 #include <linux/interrupt.h>
29 #include <linux/ata.h>
30 #include <linux/workqueue.h>
33 * compile-time options
35 #undef ATA_FORCE_PIO /* do not configure or use DMA */
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 */
46 /* note: prints function name for you */
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)
52 #define VPRINTK(fmt, args...)
53 #endif /* ATA_VERBOSE_DEBUG */
55 #define DPRINTK(fmt, args...)
56 #define VPRINTK(fmt, args...)
57 #endif /* ATA_DEBUG */
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__); \
69 /* defines only for the constants which don't work well as enums */
70 #define ATA_TAG_POISON 0xfafbfcfdU
74 /* various global constants */
75 LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
79 ATA_MAX_SECTORS = 200, /* FIXME */
81 ATA_DEF_BUSY_WAIT = 10000,
82 ATA_SHORT_PAUSE = (HZ >> 6) + 1,
85 ATA_SHT_CMD_PER_LUN = 1,
87 ATA_SHT_USE_CLUSTERING = 0,
89 /* struct ata_device stuff */
90 ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */
91 ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */
92 ATA_DFLAG_MASTER = (1 << 2), /* is device 0? */
93 ATA_DFLAG_WCACHE = (1 << 3), /* has write cache we can
94 * (hopefully) flush? */
95 ATA_DFLAG_LOCK_SECTORS = (1 << 4), /* don't adjust max_sectors */
97 ATA_DEV_UNKNOWN = 0, /* unknown device */
98 ATA_DEV_ATA = 1, /* ATA device */
99 ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
100 ATA_DEV_ATAPI = 3, /* ATAPI device */
101 ATA_DEV_ATAPI_UNSUP = 4, /* ATAPI device (unsupported) */
102 ATA_DEV_NONE = 5, /* no device */
104 /* struct ata_port flags */
105 ATA_FLAG_SLAVE_POSS = (1 << 1), /* host supports slave dev */
106 /* (doesn't imply presence) */
107 ATA_FLAG_PORT_DISABLED = (1 << 2), /* port is disabled, ignore it */
108 ATA_FLAG_SATA = (1 << 3),
109 ATA_FLAG_NO_LEGACY = (1 << 4), /* no legacy mode check */
110 ATA_FLAG_SRST = (1 << 5), /* use ATA SRST, not E.D.D. */
111 ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */
112 ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */
114 ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */
115 ATA_QCFLAG_DMA = (1 << 2), /* data delivered via DMA */
116 ATA_QCFLAG_SG = (1 << 3), /* have s/g table? */
117 ATA_QCFLAG_SINGLE = (1 << 4), /* no s/g, just a single buffer */
118 ATA_QCFLAG_DMAMAP = ATA_QCFLAG_SG | ATA_QCFLAG_SINGLE,
120 /* various lengths of time */
121 ATA_TMOUT_EDD = 5 * HZ, /* hueristic */
122 ATA_TMOUT_PIO = 30 * HZ,
123 ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */
124 ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */
125 ATA_TMOUT_CDB = 30 * HZ,
126 ATA_TMOUT_CDB_QUICK = 5 * HZ,
140 /* SATA port states */
146 enum pio_task_states {
157 /* forward declarations */
159 struct ata_port_operations;
161 struct ata_queued_cmd;
164 typedef int (*ata_qc_cb_t) (struct ata_queued_cmd *qc, u8 drv_stat);
167 unsigned long cmd_addr;
168 unsigned long data_addr;
169 unsigned long error_addr;
170 unsigned long feature_addr;
171 unsigned long nsect_addr;
172 unsigned long lbal_addr;
173 unsigned long lbam_addr;
174 unsigned long lbah_addr;
175 unsigned long device_addr;
176 unsigned long status_addr;
177 unsigned long command_addr;
178 unsigned long altstatus_addr;
179 unsigned long ctl_addr;
180 unsigned long bmdma_addr;
181 unsigned long scr_addr;
184 struct ata_probe_ent {
185 struct list_head node;
186 struct pci_dev *pdev;
187 struct ata_port_operations *port_ops;
188 Scsi_Host_Template *sht;
189 struct ata_ioports port[ATA_MAX_PORTS];
190 unsigned int n_ports;
191 unsigned int pio_mask;
192 unsigned int udma_mask;
193 unsigned int legacy_mode;
195 unsigned int irq_flags;
196 unsigned long host_flags;
201 struct ata_host_set {
203 struct pci_dev *pdev;
206 unsigned int n_ports;
208 struct ata_port_operations *ops;
209 struct ata_port * ports[0];
212 struct ata_queued_cmd {
214 struct ata_device *dev;
216 struct scsi_cmnd *scsicmd;
217 void (*scsidone)(struct scsi_cmnd *);
219 unsigned long flags; /* ATA_QCFLAG_xxx */
226 unsigned int cursect;
228 unsigned int cursg_ofs;
230 struct ata_taskfile tf;
231 struct scatterlist sgent;
234 struct scatterlist *sg;
236 ata_qc_cb_t complete_fn;
238 struct completion *waiting;
243 struct ata_host_stats {
244 unsigned long unhandled_irq;
245 unsigned long idle_irq;
246 unsigned long rw_reqbuf;
250 u64 n_sectors; /* size of device, if ATA */
251 unsigned long flags; /* ATA_DFLAG_xxx */
252 unsigned int class; /* ATA_DEV_xxx */
253 unsigned int devno; /* 0 or 1 */
254 u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
255 unsigned int pio_mode;
256 unsigned int udma_mode;
258 /* cache info about current transfer mode */
259 u8 xfer_protocol; /* taskfile xfer protocol */
260 u8 read_cmd; /* opcode to use on read */
261 u8 write_cmd; /* opcode to use on write */
265 struct Scsi_Host *host; /* our co-allocated scsi host */
266 struct ata_port_operations *ops;
267 unsigned long flags; /* ATA_FLAG_xxx */
268 unsigned int id; /* unique id req'd by scsi midlyr */
269 unsigned int port_no; /* unique port #; from zero */
271 struct ata_prd *prd; /* our SG list */
272 dma_addr_t prd_dma; /* and its DMA mapping */
274 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
276 u8 ctl; /* cache of ATA control register */
277 u8 last_ctl; /* Cache last written value */
278 unsigned int bus_state;
279 unsigned int port_state;
280 unsigned int pio_mask;
281 unsigned int udma_mask;
282 unsigned int cbl; /* cable type; ATA_CBL_xxx */
284 struct ata_device device[ATA_MAX_DEVICES];
286 struct ata_queued_cmd qcmd[ATA_MAX_QUEUE];
287 unsigned long qactive;
288 unsigned int active_tag;
290 struct ata_host_stats stats;
291 struct ata_host_set *host_set;
293 struct work_struct packet_task;
295 struct work_struct pio_task;
296 unsigned int pio_task_state;
297 unsigned long pio_task_timeout;
302 struct ata_port_operations {
303 void (*port_disable) (struct ata_port *);
305 void (*dev_config) (struct ata_port *, struct ata_device *);
307 void (*set_piomode) (struct ata_port *, struct ata_device *,
309 void (*set_udmamode) (struct ata_port *, struct ata_device *,
312 void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
313 void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
315 void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
316 u8 (*check_status)(struct ata_port *ap);
318 void (*phy_reset) (struct ata_port *ap);
319 void (*post_set_mode) (struct ata_port *ap);
321 void (*bmdma_setup) (struct ata_queued_cmd *qc);
322 void (*bmdma_start) (struct ata_queued_cmd *qc);
324 void (*qc_prep) (struct ata_queued_cmd *qc);
325 int (*qc_issue) (struct ata_queued_cmd *qc);
327 void (*eng_timeout) (struct ata_port *ap);
329 irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
330 void (*irq_clear) (struct ata_port *);
332 u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
333 void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
336 int (*port_start) (struct ata_port *ap);
337 void (*port_stop) (struct ata_port *ap);
339 void (*host_stop) (struct ata_host_set *host_set);
342 struct ata_port_info {
343 Scsi_Host_Template *sht;
344 unsigned long host_flags;
345 unsigned long pio_mask;
346 unsigned long udma_mask;
347 struct ata_port_operations *port_ops;
351 unsigned int reg; /* PCI config register to read */
352 unsigned int width; /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
357 extern void ata_port_probe(struct ata_port *);
358 extern void sata_phy_reset(struct ata_port *ap);
359 extern void ata_bus_reset(struct ata_port *ap);
360 extern void ata_port_disable(struct ata_port *);
361 extern void ata_std_ports(struct ata_ioports *ioaddr);
362 extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
363 unsigned int n_ports);
364 extern void ata_pci_remove_one (struct pci_dev *pdev);
365 extern int ata_device_add(struct ata_probe_ent *ent);
366 extern int ata_scsi_detect(Scsi_Host_Template *sht);
367 extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
368 extern int ata_scsi_error(struct Scsi_Host *host);
369 extern int ata_scsi_release(struct Scsi_Host *host);
370 extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
372 * Default driver ops implementations
374 extern void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf);
375 extern void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
376 extern void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf);
377 extern void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf);
378 extern void ata_tf_to_fis(struct ata_taskfile *tf, u8 *fis, u8 pmp);
379 extern void ata_tf_from_fis(u8 *fis, struct ata_taskfile *tf);
380 extern u8 ata_check_status_pio(struct ata_port *ap);
381 extern u8 ata_check_status_mmio(struct ata_port *ap);
382 extern void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf);
383 extern void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
384 extern int ata_port_start (struct ata_port *ap);
385 extern void ata_port_stop (struct ata_port *ap);
386 extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
387 extern void ata_qc_prep(struct ata_queued_cmd *qc);
388 extern int ata_qc_issue_prot(struct ata_queued_cmd *qc);
389 extern void ata_sg_init_one(struct ata_queued_cmd *qc, void *buf,
390 unsigned int buflen);
391 extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
392 unsigned int n_elem);
393 extern void ata_dev_id_string(struct ata_device *dev, unsigned char *s,
394 unsigned int ofs, unsigned int len);
395 extern void ata_bmdma_setup_mmio (struct ata_queued_cmd *qc);
396 extern void ata_bmdma_start_mmio (struct ata_queued_cmd *qc);
397 extern void ata_bmdma_setup_pio (struct ata_queued_cmd *qc);
398 extern void ata_bmdma_start_pio (struct ata_queued_cmd *qc);
399 extern void ata_bmdma_irq_clear(struct ata_port *ap);
400 extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
401 extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat);
402 extern void ata_eng_timeout(struct ata_port *ap);
403 extern int ata_std_bios_param(struct scsi_device *sdev,
404 struct block_device *bdev,
405 sector_t capacity, int geom[]);
406 extern int ata_scsi_slave_config(struct scsi_device *sdev);
409 static inline unsigned int ata_tag_valid(unsigned int tag)
411 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
414 static inline unsigned int ata_dev_present(struct ata_device *dev)
416 return ((dev->class == ATA_DEV_ATA) ||
417 (dev->class == ATA_DEV_ATAPI));
420 static inline u8 ata_chk_err(struct ata_port *ap)
422 if (ap->flags & ATA_FLAG_MMIO) {
423 return readb((void *) ap->ioaddr.error_addr);
425 return inb(ap->ioaddr.error_addr);
428 static inline u8 ata_chk_status(struct ata_port *ap)
430 return ap->ops->check_status(ap);
433 static inline u8 ata_altstatus(struct ata_port *ap)
435 if (ap->flags & ATA_FLAG_MMIO)
436 return readb(ap->ioaddr.altstatus_addr);
437 return inb(ap->ioaddr.altstatus_addr);
440 static inline void ata_pause(struct ata_port *ap)
446 static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits,
453 status = ata_chk_status(ap);
455 } while ((status & bits) && (max > 0));
460 static inline u8 ata_wait_idle(struct ata_port *ap)
462 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
464 if (status & (ATA_BUSY | ATA_DRQ)) {
465 unsigned long l = ap->ioaddr.status_addr;
467 "ATA: abnormal status 0x%X on port 0x%lX\n",
474 static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
476 qc->flags &= ~ATA_QCFLAG_DMA;
477 qc->tf.ctl |= ATA_NIEN;
480 static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
483 if (likely(ata_tag_valid(tag)))
484 return &ap->qcmd[tag];
488 static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device)
490 memset(tf, 0, sizeof(*tf));
494 tf->device = ATA_DEVICE_OBS;
496 tf->device = ATA_DEVICE_OBS | ATA_DEV1;
499 static inline u8 ata_irq_on(struct ata_port *ap)
501 struct ata_ioports *ioaddr = &ap->ioaddr;
504 ap->ctl &= ~ATA_NIEN;
505 ap->last_ctl = ap->ctl;
507 if (ap->flags & ATA_FLAG_MMIO)
508 writeb(ap->ctl, ioaddr->ctl_addr);
510 outb(ap->ctl, ioaddr->ctl_addr);
511 tmp = ata_wait_idle(ap);
513 ap->ops->irq_clear(ap);
518 static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
520 unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
521 u8 host_stat, post_stat, status;
523 status = ata_busy_wait(ap, bits, 1000);
525 DPRINTK("abnormal status 0x%X\n", status);
527 /* get controller status; clear intr, err bits */
528 if (ap->flags & ATA_FLAG_MMIO) {
529 void *mmio = (void *) ap->ioaddr.bmdma_addr;
530 host_stat = readb(mmio + ATA_DMA_STATUS);
531 writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
532 mmio + ATA_DMA_STATUS);
534 post_stat = readb(mmio + ATA_DMA_STATUS);
536 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
537 outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
538 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
540 post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
543 VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
544 host_stat, post_stat, status);
549 static inline u32 scr_read(struct ata_port *ap, unsigned int reg)
551 return ap->ops->scr_read(ap, reg);
554 static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val)
556 ap->ops->scr_write(ap, reg, val);
559 static inline unsigned int sata_dev_present(struct ata_port *ap)
561 return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0;
564 static inline void ata_bmdma_stop(struct ata_port *ap)
566 if (ap->flags & ATA_FLAG_MMIO) {
567 void *mmio = (void *) ap->ioaddr.bmdma_addr;
569 /* clear start/stop bit */
570 writeb(readb(mmio + ATA_DMA_CMD) & ~ATA_DMA_START,
573 /* clear start/stop bit */
574 outb(inb(ap->ioaddr.bmdma_addr + ATA_DMA_CMD) & ~ATA_DMA_START,
575 ap->ioaddr.bmdma_addr + ATA_DMA_CMD);
578 /* one-PIO-cycle guaranteed wait, per spec, for HDMA1:0 transition */
579 ata_altstatus(ap); /* dummy read */
582 static inline void ata_bmdma_ack_irq(struct ata_port *ap)
584 if (ap->flags & ATA_FLAG_MMIO) {
585 void *mmio = ((void *) ap->ioaddr.bmdma_addr) + ATA_DMA_STATUS;
586 writeb(readb(mmio), mmio);
588 unsigned long addr = ap->ioaddr.bmdma_addr + ATA_DMA_STATUS;
589 outb(inb(addr), addr);
593 static inline u8 ata_bmdma_status(struct ata_port *ap)
596 if (ap->flags & ATA_FLAG_MMIO) {
597 void *mmio = (void *) ap->ioaddr.bmdma_addr;
598 host_stat = readb(mmio + ATA_DMA_STATUS);
600 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
604 #endif /* __LINUX_LIBATA_H__ */