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>
32 * compile-time options
34 #undef ATA_FORCE_PIO /* do not configure or use DMA */
35 #undef ATA_DEBUG /* debugging output */
36 #undef ATA_VERBOSE_DEBUG /* yet more debugging output */
37 #undef ATA_IRQ_TRAP /* define to ack screaming irqs */
38 #undef ATA_NDEBUG /* define to disable quick runtime checks */
39 #undef ATA_ENABLE_ATAPI /* define to enable ATAPI support */
40 #undef ATA_ENABLE_PATA /* define to enable PATA support in some
41 * low-level drivers */
44 /* note: prints function name for you */
46 #define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
47 #ifdef ATA_VERBOSE_DEBUG
48 #define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
50 #define VPRINTK(fmt, args...)
51 #endif /* ATA_VERBOSE_DEBUG */
53 #define DPRINTK(fmt, args...)
54 #define VPRINTK(fmt, args...)
55 #endif /* ATA_DEBUG */
60 #define assert(expr) \
61 if(unlikely(!(expr))) { \
62 printk(KERN_ERR "Assertion failed! %s,%s,%s,line=%d\n", \
63 #expr,__FILE__,__FUNCTION__,__LINE__); \
67 /* defines only for the constants which don't work well as enums */
68 #define ATA_TAG_POISON 0xfafbfcfdU
71 /* various global constants */
72 LIBATA_MAX_PRD = ATA_MAX_PRD / 2,
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 = 0,
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 ATA_QCFLAG_ACTIVE = (1 << 1), /* cmd not yet ack'd to scsi lyer */
111 ATA_QCFLAG_DMA = (1 << 2), /* data delivered via DMA */
112 ATA_QCFLAG_ATAPI = (1 << 3), /* is ATAPI packet command? */
113 ATA_QCFLAG_SG = (1 << 4), /* have s/g table? */
114 ATA_QCFLAG_POLL = (1 << 5), /* polling, no interrupts */
116 /* struct ata_engine atomic flags (use test_bit, etc.) */
117 ATA_EFLG_ACTIVE = 0, /* engine is active */
119 /* various lengths of time */
120 ATA_TMOUT_EDD = 5 * HZ, /* hueristic */
121 ATA_TMOUT_PIO = 30 * HZ,
122 ATA_TMOUT_BOOT = 30 * HZ, /* hueristic */
123 ATA_TMOUT_BOOT_QUICK = 7 * HZ, /* hueristic */
124 ATA_TMOUT_CDB = 30 * HZ,
125 ATA_TMOUT_CDB_QUICK = 5 * HZ,
141 THR_PORT_RESET = (THR_UNKNOWN + 1),
142 THR_AWAIT_DEATH = (THR_PORT_RESET + 1),
143 THR_PROBE_FAILED = (THR_AWAIT_DEATH + 1),
144 THR_IDLE = (THR_PROBE_FAILED + 1),
145 THR_PROBE_SUCCESS = (THR_IDLE + 1),
146 THR_PROBE_START = (THR_PROBE_SUCCESS + 1),
147 THR_PIO_POLL = (THR_PROBE_START + 1),
148 THR_PIO_TMOUT = (THR_PIO_POLL + 1),
149 THR_PIO = (THR_PIO_TMOUT + 1),
150 THR_PIO_LAST = (THR_PIO + 1),
151 THR_PIO_LAST_POLL = (THR_PIO_LAST + 1),
152 THR_PIO_ERR = (THR_PIO_LAST_POLL + 1),
153 THR_PACKET = (THR_PIO_ERR + 1),
155 /* SATA port states */
160 /* ata_qc_cb_t flags - note uses above ATA_QCFLAG_xxx namespace,
161 * but not numberspace
163 ATA_QCFLAG_TIMEOUT = (1 << 0),
166 /* forward declarations */
168 struct ata_port_operations;
170 struct ata_queued_cmd;
173 typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc, unsigned int flags);
176 unsigned long cmd_addr;
177 unsigned long data_addr;
178 unsigned long error_addr;
179 unsigned long feature_addr;
180 unsigned long nsect_addr;
181 unsigned long lbal_addr;
182 unsigned long lbam_addr;
183 unsigned long lbah_addr;
184 unsigned long device_addr;
185 unsigned long status_addr;
186 unsigned long command_addr;
187 unsigned long altstatus_addr;
188 unsigned long ctl_addr;
189 unsigned long bmdma_addr;
190 unsigned long scr_addr;
193 struct ata_probe_ent {
194 struct list_head node;
195 struct pci_dev *pdev;
196 struct ata_port_operations *port_ops;
197 Scsi_Host_Template *sht;
198 struct ata_ioports port[ATA_MAX_PORTS];
199 unsigned int n_ports;
200 unsigned int pio_mask;
201 unsigned int udma_mask;
202 unsigned int legacy_mode;
204 unsigned int irq_flags;
205 unsigned long host_flags;
210 struct ata_host_set {
212 struct pci_dev *pdev;
215 unsigned int n_ports;
217 struct ata_port * ports[0];
220 struct ata_queued_cmd {
222 struct ata_device *dev;
224 struct scsi_cmnd *scsicmd;
225 void (*scsidone)(struct scsi_cmnd *);
227 struct list_head node;
228 unsigned long flags; /* ATA_QCFLAG_xxx */
232 unsigned int cursect;
234 unsigned int cursg_ofs;
235 struct ata_taskfile tf;
236 struct scatterlist sgent;
238 struct scatterlist *sg;
240 ata_qc_cb_t callback;
242 struct semaphore sem;
247 struct ata_host_stats {
248 unsigned long unhandled_irq;
249 unsigned long idle_irq;
250 unsigned long rw_reqbuf;
254 u64 n_sectors; /* size of device, if ATA */
255 unsigned long flags; /* ATA_DFLAG_xxx */
256 unsigned int class; /* ATA_DEV_xxx */
257 unsigned int devno; /* 0 or 1 */
258 u16 id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
259 unsigned int pio_mode;
260 unsigned int udma_mode;
262 unsigned char vendor[8]; /* space-padded, not ASCIIZ */
263 unsigned char product[32]; /* WARNING: shorter than
264 * ATAPI7 spec size, 40 ASCII
268 /* cache info about current transfer mode */
269 u8 xfer_protocol; /* taskfile xfer protocol */
270 u8 read_cmd; /* opcode to use on read */
271 u8 write_cmd; /* opcode to use on write */
280 struct Scsi_Host *host; /* our co-allocated scsi host */
281 struct ata_port_operations *ops;
282 unsigned long flags; /* ATA_FLAG_xxx */
283 unsigned int id; /* unique id req'd by scsi midlyr */
284 unsigned int port_no; /* unique port #; from zero */
286 struct ata_prd *prd; /* our SG list */
287 dma_addr_t prd_dma; /* and its DMA mapping */
289 struct ata_ioports ioaddr; /* ATA cmd/ctl/dma register blocks */
291 u8 ctl; /* cache of ATA control register */
292 u8 last_ctl; /* Cache last written value */
293 unsigned int bus_state;
294 unsigned int port_state;
295 unsigned int pio_mask;
296 unsigned int udma_mask;
297 unsigned int cbl; /* cable type; ATA_CBL_xxx */
299 struct ata_engine eng;
301 struct ata_device device[ATA_MAX_DEVICES];
303 struct ata_queued_cmd qcmd[ATA_MAX_QUEUE];
304 unsigned long qactive;
305 unsigned int active_tag;
307 struct ata_host_stats stats;
308 struct ata_host_set *host_set;
310 struct semaphore sem;
311 struct semaphore probe_sem;
313 unsigned int thr_state;
316 struct completion thr_exited;
317 struct semaphore thr_sem;
318 struct timer_list thr_timer;
319 unsigned long thr_timeout;
324 struct ata_port_operations {
325 void (*port_disable) (struct ata_port *);
327 void (*dev_config) (struct ata_port *, struct ata_device *);
329 void (*set_piomode) (struct ata_port *, struct ata_device *,
331 void (*set_udmamode) (struct ata_port *, struct ata_device *,
334 void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
335 void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
337 void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
338 u8 (*check_status)(struct ata_port *ap);
340 void (*phy_reset) (struct ata_port *ap);
341 void (*post_set_mode) (struct ata_port *ap);
343 void (*bmdma_start) (struct ata_queued_cmd *qc);
344 void (*fill_sg) (struct ata_queued_cmd *qc);
345 void (*eng_timeout) (struct ata_port *ap);
347 irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
349 u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
350 void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
353 int (*port_start) (struct ata_port *ap);
354 void (*port_stop) (struct ata_port *ap);
356 void (*host_stop) (struct ata_host_set *host_set);
359 struct ata_port_info {
360 Scsi_Host_Template *sht;
361 unsigned long host_flags;
362 unsigned long pio_mask;
363 unsigned long udma_mask;
364 struct ata_port_operations *port_ops;
368 unsigned int reg; /* PCI config register to read */
369 unsigned int width; /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
374 extern void ata_port_probe(struct ata_port *);
375 extern void sata_phy_reset(struct ata_port *ap);
376 extern void ata_bus_reset(struct ata_port *ap);
377 extern void ata_port_disable(struct ata_port *);
378 extern void ata_std_ports(struct ata_ioports *ioaddr);
379 extern int ata_pci_init_one (struct pci_dev *pdev, struct ata_port_info **port_info,
380 unsigned int n_ports);
381 extern void ata_pci_remove_one (struct pci_dev *pdev);
382 extern int ata_device_add(struct ata_probe_ent *ent);
383 extern int ata_scsi_detect(Scsi_Host_Template *sht);
384 extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
385 extern int ata_scsi_error(struct Scsi_Host *host);
386 extern int ata_scsi_release(struct Scsi_Host *host);
387 extern unsigned int ata_host_intr(struct ata_port *ap, struct ata_queued_cmd *qc);
389 * Default driver ops implementations
391 extern void ata_tf_load_pio(struct ata_port *ap, struct ata_taskfile *tf);
392 extern void ata_tf_load_mmio(struct ata_port *ap, struct ata_taskfile *tf);
393 extern void ata_tf_read_pio(struct ata_port *ap, struct ata_taskfile *tf);
394 extern void ata_tf_read_mmio(struct ata_port *ap, struct ata_taskfile *tf);
395 extern u8 ata_check_status_pio(struct ata_port *ap);
396 extern u8 ata_check_status_mmio(struct ata_port *ap);
397 extern void ata_exec_command_pio(struct ata_port *ap, struct ata_taskfile *tf);
398 extern void ata_exec_command_mmio(struct ata_port *ap, struct ata_taskfile *tf);
399 extern int ata_port_start (struct ata_port *ap);
400 extern void ata_port_stop (struct ata_port *ap);
401 extern irqreturn_t ata_interrupt (int irq, void *dev_instance, struct pt_regs *regs);
402 extern void ata_fill_sg(struct ata_queued_cmd *qc);
403 extern void ata_bmdma_start_mmio (struct ata_queued_cmd *qc);
404 extern void ata_bmdma_start_pio (struct ata_queued_cmd *qc);
405 extern int pci_test_config_bits(struct pci_dev *pdev, struct pci_bits *bits);
406 extern void ata_qc_complete(struct ata_queued_cmd *qc, u8 drv_stat, unsigned int done_late);
407 extern void ata_eng_timeout(struct ata_port *ap);
408 extern int ata_std_bios_param(struct scsi_device *sdev,
409 struct block_device *bdev,
410 sector_t capacity, int geom[]);
411 extern int ata_scsi_slave_config(struct scsi_device *sdev);
414 static inline unsigned long msecs_to_jiffies(unsigned long msecs)
416 return ((HZ * msecs + 999) / 1000);
419 static inline unsigned int ata_tag_valid(unsigned int tag)
421 return (tag < ATA_MAX_QUEUE) ? 1 : 0;
424 static inline unsigned int ata_dev_present(struct ata_device *dev)
426 return ((dev->class == ATA_DEV_ATA) ||
427 (dev->class == ATA_DEV_ATAPI));
430 static inline u8 ata_chk_err(struct ata_port *ap)
432 if (ap->flags & ATA_FLAG_MMIO) {
433 return readb((void *) ap->ioaddr.error_addr);
435 return inb(ap->ioaddr.error_addr);
438 static inline u8 ata_chk_status(struct ata_port *ap)
440 return ap->ops->check_status(ap);
443 static inline u8 ata_altstatus(struct ata_port *ap)
445 if (ap->flags & ATA_FLAG_MMIO)
446 return readb(ap->ioaddr.altstatus_addr);
447 return inb(ap->ioaddr.altstatus_addr);
450 static inline void ata_pause(struct ata_port *ap)
456 static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits,
463 status = ata_chk_status(ap);
465 } while ((status & bits) && (max > 0));
470 static inline u8 ata_wait_idle(struct ata_port *ap)
472 u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
474 if (status & (ATA_BUSY | ATA_DRQ)) {
475 unsigned long l = ap->ioaddr.status_addr;
477 "ATA: abnormal status 0x%X on port 0x%lX\n",
484 static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
487 if (likely(ata_tag_valid(tag)))
488 return &ap->qcmd[tag];
492 static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device)
494 memset(tf, 0, sizeof(*tf));
498 tf->device = ATA_DEVICE_OBS;
500 tf->device = ATA_DEVICE_OBS | ATA_DEV1;
503 static inline u8 ata_irq_on(struct ata_port *ap)
505 struct ata_ioports *ioaddr = &ap->ioaddr;
507 ap->ctl &= ~ATA_NIEN;
508 ap->last_ctl = ap->ctl;
510 if (ap->flags & ATA_FLAG_MMIO)
511 writeb(ap->ctl, ioaddr->ctl_addr);
513 outb(ap->ctl, ioaddr->ctl_addr);
514 return ata_wait_idle(ap);
517 static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
519 unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
520 u8 host_stat, post_stat, status;
522 status = ata_busy_wait(ap, bits, 1000);
524 DPRINTK("abnormal status 0x%X\n", status);
526 /* get controller status; clear intr, err bits */
527 if (ap->flags & ATA_FLAG_MMIO) {
528 void *mmio = (void *) ap->ioaddr.bmdma_addr;
529 host_stat = readb(mmio + ATA_DMA_STATUS);
530 writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
531 mmio + ATA_DMA_STATUS);
533 post_stat = readb(mmio + ATA_DMA_STATUS);
535 host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
536 outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
537 ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
539 post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
542 VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
543 host_stat, post_stat, status);
548 static inline u32 scr_read(struct ata_port *ap, unsigned int reg)
550 return ap->ops->scr_read(ap, reg);
553 static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val)
555 ap->ops->scr_write(ap, reg, val);
558 static inline unsigned int sata_dev_present(struct ata_port *ap)
560 return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0;
563 #endif /* __LINUX_LIBATA_H__ */