2 Copyright 2003 Red Hat, Inc. All rights reserved.
3 Copyright 2003 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>
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 */
45 /* note: prints function name for you */
47 #define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
48 #ifdef ATA_VERBOSE_DEBUG
49 #define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
51 #define VPRINTK(fmt, args...)
52 #endif /* ATA_VERBOSE_DEBUG */
54 #define DPRINTK(fmt, args...)
55 #define VPRINTK(fmt, args...)
56 #endif /* ATA_DEBUG */
61 #define assert(expr) \
62 if(unlikely(!(expr))) { \
63 printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
64 #expr,__FILE__,__FUNCTION__,__LINE__); \
68 /* defines only for the constants which don't work well as enums */
69 #define ATA_TAG_POISON 0xfafbfcfdU
72 /* various global constants */
76 ATA_MAX_SECTORS = 200, /* FIXME */
78 ATA_DEF_BUSY_WAIT = 10000,
79 ATA_SHORT_PAUSE = (HZ >> 6) + 1,
82 ATA_SHT_CMD_PER_LUN = 1,
84 ATA_SHT_USE_CLUSTERING = 1,
86 /* struct ata_device stuff */
87 ATA_DFLAG_LBA48 = (1 << 0), /* device supports LBA48 */
88 ATA_DFLAG_PIO = (1 << 1), /* device currently in PIO mode */
89 ATA_DFLAG_MASTER = (1 << 2), /* is device 0? */
90 ATA_DFLAG_WCACHE = (1 << 3), /* has write cache we can
91 * (hopefully) flush? */
93 ATA_DEV_UNKNOWN = 0, /* unknown device */
94 ATA_DEV_ATA = 1, /* ATA device */
95 ATA_DEV_ATA_UNSUP = 2, /* ATA device (unsupported) */
96 ATA_DEV_ATAPI = 3, /* ATAPI device */
97 ATA_DEV_ATAPI_UNSUP = 4, /* ATAPI device (unsupported) */
98 ATA_DEV_NONE = 5, /* no device */
100 /* struct ata_port flags */
101 ATA_FLAG_SLAVE_POSS = (1 << 1), /* host supports slave dev */
102 /* (doesn't imply presence) */
103 ATA_FLAG_PORT_DISABLED = (1 << 2), /* port is disabled, ignore it */
104 ATA_FLAG_SATA = (1 << 3),
105 ATA_FLAG_NO_LEGACY = (1 << 4), /* no legacy mode check */
106 ATA_FLAG_SRST = (1 << 5), /* use ATA SRST, not E.D.D. */
107 ATA_FLAG_MMIO = (1 << 6), /* use MMIO, not PIO */
108 ATA_FLAG_SATA_RESET = (1 << 7), /* use COMRESET */
110 /* struct ata_taskfile flags */
111 ATA_TFLAG_LBA48 = (1 << 0),
112 ATA_TFLAG_ISADDR = (1 << 1), /* enable r/w to nsect/lba regs */
113 ATA_TFLAG_DEVICE = (1 << 2), /* enable r/w to device reg */
115 ATA_QCFLAG_WRITE = (1 << 0), /* read==0, write==1 */
116 ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */
117 ATA_QCFLAG_DMA = (1 << 2), /* data delivered via DMA */
118 ATA_QCFLAG_ATAPI = (1 << 3), /* is ATAPI packet command? */
119 ATA_QCFLAG_SG = (1 << 4), /* have s/g table? */
120 ATA_QCFLAG_POLL = (1 << 5), /* polling, no interrupts */
122 /* struct ata_engine atomic flags (use test_bit, etc.) */
123 ATA_EFLG_ACTIVE = 0, /* engine is active */
125 /* various lengths of time */
126 ATA_TMOUT_EDD = 5 * HZ, /* hueristic */
127 ATA_TMOUT_PIO = 30 * HZ,
128 ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */
129 ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */
130 ATA_TMOUT_CDB = 30 * HZ,
131 ATA_TMOUT_CDB_QUICK = 5 * HZ,
147 THR_PORT_RESET = (THR_UNKNOWN + 1),
148 THR_AWAIT_DEATH = (THR_PORT_RESET + 1),
149 THR_PROBE_FAILED = (THR_AWAIT_DEATH + 1),
150 THR_IDLE = (THR_PROBE_FAILED + 1),
151 THR_PROBE_SUCCESS = (THR_IDLE + 1),
152 THR_PROBE_START = (THR_PROBE_SUCCESS + 1),
153 THR_PIO_POLL = (THR_PROBE_START + 1),
154 THR_PIO_TMOUT = (THR_PIO_POLL + 1),
155 THR_PIO = (THR_PIO_TMOUT + 1),
156 THR_PIO_LAST = (THR_PIO + 1),
157 THR_PIO_LAST_POLL = (THR_PIO_LAST + 1),
158 THR_PIO_ERR = (THR_PIO_LAST_POLL + 1),
159 THR_PACKET = (THR_PIO_ERR + 1),
161 /* SATA port states */
166 /* ata_qc_cb_t flags - note uses above ATA_QCFLAG_xxx namespace,
167 * but not numberspace
169 ATA_QCFLAG_TIMEOUT = (1 << 0),
172 /* forward declarations */
174 struct ata_port_operations;
176 struct ata_queued_cmd;
179 typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc, unsigned int flags);
182 unsigned long cmd_addr;
183 unsigned long data_addr;
184 unsigned long error_addr;
185 unsigned long nsect_addr;
186 unsigned long lbal_addr;
187 unsigned long lbam_addr;
188 unsigned long lbah_addr;
189 unsigned long device_addr;
190 unsigned long cmdstat_addr;
191 unsigned long ctl_addr;
192 unsigned long bmdma_addr;
193 unsigned long scr_addr;
196 struct ata_probe_ent {
197 struct list_head node;
198 struct pci_dev *pdev;
199 struct ata_port_operations *port_ops;
200 Scsi_Host_Template *sht;
201 struct ata_ioports port[ATA_MAX_PORTS];
202 unsigned int n_ports;
203 unsigned int pio_mask;
204 unsigned int udma_mask;
205 unsigned int legacy_mode;
207 unsigned int irq_flags;
208 unsigned long host_flags;
213 struct ata_host_set {
215 struct pci_dev *pdev;
218 unsigned int n_ports;
220 struct ata_port * ports[0];
223 struct ata_taskfile {
224 unsigned long flags; /* ATA_TFLAG_xxx */
225 u8 protocol; /* ATA_PROT_xxx */
227 u8 ctl; /* control reg */
229 u8 hob_feature; /* additional data */
230 u8 hob_nsect; /* to support LBA48 */
243 u8 command; /* IO operation */
246 struct ata_queued_cmd {
248 struct ata_device *dev;
250 struct scsi_cmnd *scsicmd;
251 void (*scsidone)(struct scsi_cmnd *);
253 struct list_head node;
254 unsigned long flags; /* ATA_QCFLAG_xxx */
258 unsigned int cursect;
260 unsigned int cursg_ofs;
261 struct ata_taskfile tf;
262 struct scatterlist sgent;
264 struct scatterlist *sg;
266 ata_qc_cb_t callback;
268 struct semaphore sem;
273 struct ata_host_stats {
274 unsigned long unhandled_irq;
275 unsigned long idle_irq;
276 unsigned long rw_reqbuf;
280 u64 n_sectors; /* size of device, if ATA */
281 unsigned long flags; /* ATA_DFLAG_xxx */
282 unsigned int class; /* ATA_DEV_xxx */
283 unsigned int devno; /* 0 or 1 */
284 u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
285 unsigned int pio_mode;
286 unsigned int udma_mode;
288 unsigned char vendor[8]; /* space-padded, not ASCIIZ */
289 unsigned char product[32]; /* WARNING: shorter than
290 * ATAPI7 spec size, 40 ASCII
301 struct Scsi_Host *host; /* our co-allocated scsi host */
302 struct ata_port_operations *ops;
303 unsigned long flags; /* ATA_FLAG_xxx */
304 unsigned int id; /* unique id req'd by scsi midlyr */
305 unsigned int port_no; /* unique port #; from zero */
307 struct ata_prd *prd; /* our SG list */
308 dma_addr_t prd_dma; /* and its DMA mapping */
310 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
312 u8 ctl; /* cache of ATA control register */
313 u8 last_ctl; /* Cache last written value */
314 unsigned int bus_state;
315 unsigned int port_state;
316 unsigned int pio_mask;
317 unsigned int udma_mask;
318 unsigned int cbl; /* cable type; ATA_CBL_xxx */
320 struct ata_engine eng;
322 struct ata_device device[ATA_MAX_DEVICES];
324 struct ata_queued_cmd qcmd[ATA_MAX_QUEUE];
325 unsigned long qactive;
326 unsigned int active_tag;
328 struct ata_host_stats stats;
329 struct ata_host_set *host_set;
331 struct semaphore sem;
332 struct semaphore probe_sem;
334 unsigned int thr_state;
337 struct completion thr_exited;
338 struct semaphore thr_sem;
339 struct timer_list thr_timer;
340 unsigned long thr_timeout;
345 struct ata_port_operations {
346 void (*port_disable) (struct ata_port *);
348 void (*dev_config) (struct ata_port *, struct ata_device *);
350 void (*set_piomode) (struct ata_port *, struct ata_device *,
352 void (*set_udmamode) (struct ata_port *, struct ata_device *,
355 void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
356 void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
358 void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
359 u8 (*check_status)(struct ata_port *ap);
361 void (*phy_reset) (struct ata_port *ap);
362 void (*phy_config) (struct ata_port *ap);
364 void (*bmdma_start) (struct ata_queued_cmd *qc);
365 void (*fill_sg) (struct ata_queued_cmd *qc);
366 void (*eng_timeout) (struct ata_port *ap);
368 irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
370 u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
371 void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
374 int (*port_start) (struct ata_port *ap);
375 void (*port_stop) (struct ata_port *ap);
377 void (*host_stop) (struct ata_host_set *host_set);
380 struct ata_port_info {
381 Scsi_Host_Template *sht;
382 unsigned long host_flags;
383 unsigned long pio_mask;
384 unsigned long udma_mask;
385 struct ata_port_operations *port_ops;
389 unsigned int reg; /* PCI config register to read */
390 unsigned int width; /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
395 extern void ata_port_probe(struct ata_port *);
396 extern void pata_phy_config(struct ata_port *ap);
397 extern void sata_phy_reset(struct ata_port *ap);
398 extern void ata_bus_reset(struct ata_port *ap);
399 extern void ata_port_disable(struct ata_port *);
400 extern void ata_std_ports(struct ata_ioports *ioaddr);
401 extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
402 unsigned int n_ports);
403 extern void ata_pci_remove_one (struct pci_dev *pdev);
404 extern int ata_device_add(struct ata_probe_ent *ent);
405 extern int ata_scsi_detect(Scsi_Host_Template *sht);
406 extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
407 extern int ata_scsi_error(struct Scsi_Host *host);
408 extern int ata_scsi_release(struct Scsi_Host *host);
409 extern int ata_scsi_slave_config(struct scsi_device *sdev);
411 * Default driver ops implementations
413 extern void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf);
414 extern void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
415 extern void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf);
416 extern void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf);
417 extern u8 ata_check_status_pio(struct ata_port *ap);
418 extern u8 ata_check_status_mmio(struct ata_port *ap);
419 extern void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf);
420 extern void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
421 extern int ata_port_start (struct ata_port *ap);
422 extern void ata_port_stop (struct ata_port *ap);
423 extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
424 extern void ata_fill_sg(struct ata_queued_cmd *qc);
425 extern void ata_bmdma_start_mmio (struct ata_queued_cmd *qc);
426 extern void ata_bmdma_start_pio (struct ata_queued_cmd *qc);
427 extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
428 extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late);
429 extern void ata_eng_timeout(struct ata_port *ap);
430 extern int ata_std_bios_param(struct scsi_device *sdev,
431 struct block_device *bdev,
432 sector_t capacity, int geom[]);
435 static inline unsigned long msecs_to_jiffies(unsigned long msecs)
437 return ((HZ * msecs + 999) / 1000);
440 static inline unsigned int ata_tag_valid(unsigned int tag)
442 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
445 static inline unsigned int ata_dev_present(struct ata_device *dev)
447 return ((dev->class == ATA_DEV_ATA) ||
448 (dev->class == ATA_DEV_ATAPI));
451 static inline u8 ata_chk_err(struct ata_port *ap)
453 if (ap->flags & ATA_FLAG_MMIO) {
454 return readb((void *) ap->ioaddr.error_addr);
456 return inb(ap->ioaddr.error_addr);
459 static inline u8 ata_chk_status(struct ata_port *ap)
461 return ap->ops->check_status(ap);
464 static inline u8 ata_altstatus(struct ata_port *ap)
466 if (ap->flags & ATA_FLAG_MMIO)
467 return readb(ap->ioaddr.ctl_addr);
468 return inb(ap->ioaddr.ctl_addr);
471 static inline void ata_pause(struct ata_port *ap)
477 static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits,
484 status = ata_chk_status(ap);
486 } while ((status & bits) && (max > 0));
491 static inline u8 ata_wait_idle(struct ata_port *ap)
493 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
495 if (status & (ATA_BUSY | ATA_DRQ)) {
496 unsigned long l = ap->ioaddr.cmdstat_addr;
498 "ATA: abnormal status 0x%X on port 0x%lX\n",
505 static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
508 if (likely(ata_tag_valid(tag)))
509 return &ap->qcmd[tag];
513 static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device)
515 memset(tf, 0, sizeof(*tf));
519 tf->device = ATA_DEVICE_OBS;
521 tf->device = ATA_DEVICE_OBS | ATA_DEV1;
524 static inline u8 ata_irq_on(struct ata_port *ap)
526 struct ata_ioports *ioaddr = &ap->ioaddr;
528 ap->ctl &= ~ATA_NIEN;
529 ap->last_ctl = ap->ctl;
531 if (ap->flags & ATA_FLAG_MMIO)
532 writeb(ap->ctl, ioaddr->ctl_addr);
534 outb(ap->ctl, ioaddr->ctl_addr);
535 return ata_wait_idle(ap);
538 static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
540 unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
541 u8 host_stat, post_stat, status;
543 status = ata_busy_wait(ap, bits, 1000);
545 DPRINTK("abnormal status 0x%X\n", status);
547 /* get controller status; clear intr, err bits */
548 if (ap->flags & ATA_FLAG_MMIO) {
549 void *mmio = (void *) ap->ioaddr.bmdma_addr;
550 host_stat = readb(mmio + ATA_DMA_STATUS);
551 writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
552 mmio + ATA_DMA_STATUS);
554 post_stat = readb(mmio + ATA_DMA_STATUS);
556 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
557 outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
558 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
560 post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
563 VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
564 host_stat, post_stat, status);
569 static inline u32 scr_read(struct ata_port *ap, unsigned int reg)
571 return ap->ops->scr_read(ap, reg);
574 static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val)
576 ap->ops->scr_write(ap, reg, val);
579 static inline unsigned int sata_dev_present(struct ata_port *ap)
581 return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0;
584 #endif /* __LINUX_LIBATA_H__ */