Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
/*
2
   Copyright 2003 Red Hat, Inc.  All rights reserved.
3
   Copyright 2003 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 <asm/io.h>
29
#include <linux/ata.h>
30
 
31
/*
32
 * compile-time options
33
 */
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 */
42
 
43
 
44
/* note: prints function name for you */
45
#ifdef ATA_DEBUG
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)
49
#else
50
#define VPRINTK(fmt, args...)
51
#endif  /* ATA_VERBOSE_DEBUG */
52
#else
53
#define DPRINTK(fmt, args...)
54
#define VPRINTK(fmt, args...)
55
#endif  /* ATA_DEBUG */
56
 
57
#ifdef ATA_NDEBUG
58
#define assert(expr)
59
#else
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__);          \
64
        }
65
#endif
66
 
67
/* defines only for the constants which don't work well as enums */
68
#define ATA_TAG_POISON          0xfafbfcfdU
69
#define ATA_DMA_BOUNDARY        0xffffUL
70
#define ATA_DMA_MASK            0xffffffffULL
71
 
72
enum {
73
        /* various global constants */
74
        ATA_MAX_PORTS           = 8,
75
        ATA_DEF_QUEUE           = 1,
76
        ATA_MAX_QUEUE           = 1,
77
        ATA_MAX_SECTORS         = 200/* FIXME */
78
        ATA_MAX_BUS             = 2,
79
        ATA_DEF_BUSY_WAIT       = 10000,
80
        ATA_SHORT_PAUSE         = (HZ >> 6) + 1,
81
 
82
        ATA_SHT_EMULATED        = 1,
83
        ATA_SHT_CMD_PER_LUN     = 1,
84
        ATA_SHT_THIS_ID         = -1,
85
        ATA_SHT_USE_CLUSTERING  = 1,
86
 
87
        /* struct ata_device stuff */
88
        ATA_DFLAG_LBA48         = (1 << 0), /* device supports LBA48 */
89
        ATA_DFLAG_PIO           = (1 << 1), /* device currently in PIO mode */
90
        ATA_DFLAG_MASTER        = (1 << 2), /* is device 0? */
91
        ATA_DFLAG_WCACHE        = (1 << 3), /* has write cache we can
92
                                             * (hopefully) flush? */
93
 
94
        ATA_DEV_UNKNOWN         = 0,    /* unknown device */
95
        ATA_DEV_ATA             = 1,    /* ATA device */
96
        ATA_DEV_ATA_UNSUP       = 2,    /* ATA device (unsupported) */
97
        ATA_DEV_ATAPI           = 3,    /* ATAPI device */
98
        ATA_DEV_ATAPI_UNSUP     = 4,    /* ATAPI device (unsupported) */
99
        ATA_DEV_NONE            = 5,    /* no device */
100
 
101
        /* struct ata_port flags */
102
        ATA_FLAG_SLAVE_POSS     = (1 << 1), /* host supports slave dev */
103
                                            /* (doesn't imply presence) */
104
        ATA_FLAG_PORT_DISABLED  = (1 << 2), /* port is disabled, ignore it */
105
        ATA_FLAG_SATA           = (1 << 3),
106
        ATA_FLAG_NO_LEGACY      = (1 << 4), /* no legacy mode check */
107
        ATA_FLAG_SRST           = (1 << 5), /* use ATA SRST, not E.D.D. */
108
        ATA_FLAG_MMIO           = (1 << 6), /* use MMIO, not PIO */
109
        ATA_FLAG_SATA_RESET     = (1 << 7), /* use COMRESET */
110
 
111
        /* struct ata_taskfile flags */
112
        ATA_TFLAG_LBA48         = (1 << 0),
113
        ATA_TFLAG_ISADDR        = (1 << 1), /* enable r/w to nsect/lba regs */
114
        ATA_TFLAG_DEVICE        = (1 << 2), /* enable r/w to device reg */
115
 
116
        ATA_QCFLAG_WRITE        = (1 << 0), /* read==0, write==1 */
117
        ATA_QCFLAG_ACTIVE       = (1 << 1), /* cmd not yet ack'd to scsi lyer */
118
        ATA_QCFLAG_DMA          = (1 << 2), /* data delivered via DMA */
119
        ATA_QCFLAG_ATAPI        = (1 << 3), /* is ATAPI packet command? */
120
        ATA_QCFLAG_SG           = (1 << 4), /* have s/g table? */
121
        ATA_QCFLAG_POLL         = (1 << 5), /* polling, no interrupts */
122
 
123
        /* struct ata_engine atomic flags (use test_bit, etc.) */
124
        ATA_EFLG_ACTIVE         = 0,    /* engine is active */
125
 
126
        /* various lengths of time */
127
        ATA_TMOUT_EDD           = 5 * HZ,       /* hueristic */
128
        ATA_TMOUT_PIO           = 30 * HZ,
129
        ATA_TMOUT_BOOT          = 30 * HZ,      /* hueristic */
130
        ATA_TMOUT_BOOT_QUICK    = 7 * HZ,       /* hueristic */
131
        ATA_TMOUT_CDB           = 30 * HZ,
132
        ATA_TMOUT_CDB_QUICK     = 5 * HZ,
133
 
134
        /* ATA bus states */
135
        BUS_UNKNOWN             = 0,
136
        BUS_DMA                 = 1,
137
        BUS_IDLE                = 2,
138
        BUS_NOINTR              = 3,
139
        BUS_NODATA              = 4,
140
        BUS_TIMER               = 5,
141
        BUS_PIO                 = 6,
142
        BUS_EDD                 = 7,
143
        BUS_IDENTIFY            = 8,
144
        BUS_PACKET              = 9,
145
 
146
        /* thread states */
147
        THR_UNKNOWN             = 0,
148
        THR_PORT_RESET          = (THR_UNKNOWN + 1),
149
        THR_AWAIT_DEATH         = (THR_PORT_RESET + 1),
150
        THR_PROBE_FAILED        = (THR_AWAIT_DEATH + 1),
151
        THR_IDLE                = (THR_PROBE_FAILED + 1),
152
        THR_PROBE_SUCCESS       = (THR_IDLE + 1),
153
        THR_PROBE_START         = (THR_PROBE_SUCCESS + 1),
154
        THR_PIO_POLL            = (THR_PROBE_START + 1),
155
        THR_PIO_TMOUT           = (THR_PIO_POLL + 1),
156
        THR_PIO                 = (THR_PIO_TMOUT + 1),
157
        THR_PIO_LAST            = (THR_PIO + 1),
158
        THR_PIO_LAST_POLL       = (THR_PIO_LAST + 1),
159
        THR_PIO_ERR             = (THR_PIO_LAST_POLL + 1),
160
        THR_PACKET              = (THR_PIO_ERR + 1),
161
 
162
        /* SATA port states */
163
        PORT_UNKNOWN            = 0,
164
        PORT_ENABLED            = 1,
165
        PORT_DISABLED           = 2,
166
 
167
        /* ata_qc_cb_t flags - note uses above ATA_QCFLAG_xxx namespace,
168
         * but not numberspace
169
         */
170
        ATA_QCFLAG_TIMEOUT      = (1 << 0),
171
};
172
 
173
/* forward declarations */
174
struct ata_port_operations;
175
struct ata_port;
176
struct ata_queued_cmd;
177
 
178
/* typedefs */
179
typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc, unsigned int flags);
180
 
181
struct ata_ioports {
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;
194
};
195
 
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;
206
        unsigned long           irq;
207
        unsigned int            irq_flags;
208
        unsigned long           host_flags;
209
        void                    *mmio_base;
210
        void                    *private_data;
211
};
212
 
213
struct ata_host_set {
214
        spinlock_t              lock;
215
        struct pci_dev          *pdev;
216
        unsigned long           irq;
217
        void                    *mmio_base;
218
        unsigned int            n_ports;
219
        void                    *private_data;
220
        struct ata_port *       ports[0];
221
};
222
 
223
struct ata_taskfile {
224
        unsigned long           flags;          /* ATA_TFLAG_xxx */
225
        u8                      protocol;       /* ATA_PROT_xxx */
226
 
227
        u8                      ctl;            /* control reg */
228
 
229
        u8                      hob_feature;    /* additional data */
230
        u8                      hob_nsect;      /* to support LBA48 */
231
        u8                      hob_lbal;
232
        u8                      hob_lbam;
233
        u8                      hob_lbah;
234
 
235
        u8                      feature;
236
        u8                      nsect;
237
        u8                      lbal;
238
        u8                      lbam;
239
        u8                      lbah;
240
 
241
        u8                      device;
242
 
243
        u8                      command;        /* IO operation */
244
};
245
 
246
struct ata_queued_cmd {
247
        struct ata_port         *ap;
248
        struct ata_device       *dev;
249
 
250
        Scsi_Cmnd               *scsicmd;
251
        void                    (*scsidone)(Scsi_Cmnd *);
252
 
253
        struct list_head        node;
254
        unsigned long           flags;          /* ATA_QCFLAG_xxx */
255
        unsigned int            tag;
256
        unsigned int            n_elem;
257
        unsigned int            nsect;
258
        unsigned int            cursect;
259
        unsigned int            cursg;
260
        unsigned int            cursg_ofs;
261
        struct ata_taskfile     tf;
262
        struct scatterlist      sgent;
263
 
264
        struct scatterlist      *sg;
265
 
266
        ata_qc_cb_t             callback;
267
 
268
        struct semaphore        sem;
269
 
270
        void                    *private_data;
271
};
272
 
273
struct ata_host_stats {
274
        unsigned long           unhandled_irq;
275
        unsigned long           idle_irq;
276
        unsigned long           rw_reqbuf;
277
};
278
 
279
struct ata_device {
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;
287
 
288
        unsigned char           vendor[8];      /* space-padded, not ASCIIZ */
289
        unsigned char           product[32];    /* WARNING: shorter than
290
                                                 * ATAPI7 spec size, 40 ASCII
291
                                                 * characters
292
                                                 */
293
};
294
 
295
struct ata_engine {
296
        unsigned long           flags;
297
        struct list_head        q;
298
};
299
 
300
struct ata_port {
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 */
306
 
307
        struct ata_prd          *prd;    /* our SG list */
308
        dma_addr_t              prd_dma; /* and its DMA mapping */
309
 
310
        struct ata_ioports      ioaddr; /* ATA cmd/ctl/dma register blocks */
311
 
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 */
319
 
320
        struct ata_engine       eng;
321
 
322
        struct ata_device       device[ATA_MAX_DEVICES];
323
 
324
        struct ata_queued_cmd   qcmd[ATA_MAX_QUEUE];
325
        unsigned long           qactive;
326
        unsigned int            active_tag;
327
 
328
        struct ata_host_stats   stats;
329
        struct ata_host_set     *host_set;
330
 
331
        struct semaphore        sem;
332
        struct semaphore        probe_sem;
333
 
334
        unsigned int            thr_state;
335
        int                     time_to_die;
336
        pid_t                   thr_pid;
337
        struct completion       thr_exited;
338
        struct semaphore        thr_sem;
339
        struct timer_list       thr_timer;
340
        unsigned long           thr_timeout;
341
 
342
        void                    *private_data;
343
};
344
 
345
struct ata_port_operations {
346
        void (*port_disable) (struct ata_port *);
347
 
348
        void (*dev_config) (struct ata_port *, struct ata_device *);
349
 
350
        void (*set_piomode) (struct ata_port *, struct ata_device *,
351
                             unsigned int);
352
        void (*set_udmamode) (struct ata_port *, struct ata_device *,
353
                             unsigned int);
354
 
355
        void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
356
        void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
357
 
358
        void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
359
        u8   (*check_status)(struct ata_port *ap);
360
 
361
        void (*phy_reset) (struct ata_port *ap);
362
        void (*phy_config) (struct ata_port *ap);
363
 
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);
367
 
368
        irqreturn_t (*irq_handler)(int, void *, struct pt_regs *);
369
 
370
        u32 (*scr_read) (struct ata_port *ap, unsigned int sc_reg);
371
        void (*scr_write) (struct ata_port *ap, unsigned int sc_reg,
372
                           u32 val);
373
 
374
        int (*port_start) (struct ata_port *ap);
375
        void (*port_stop) (struct ata_port *ap);
376
 
377
        void (*host_stop) (struct ata_host_set *host_set);
378
};
379
 
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;
386
};
387
 
388
struct pci_bits {
389
        unsigned int            reg;    /* PCI config register to read */
390
        unsigned int            width;  /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
391
        unsigned long           mask;
392
        unsigned long           val;
393
};
394
 
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(Scsi_Cmnd *cmd, void (*done)(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);
410
/*
411
 * Default driver ops implementations
412
 */
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
 
431
 
432
static inline unsigned long msecs_to_jiffies(unsigned long msecs)
433
{
434
        return ((HZ * msecs + 999) / 1000);
435
}
436
 
437
static inline unsigned int ata_tag_valid(unsigned int tag)
438
{
439
        return (tag < ATA_MAX_QUEUE) ? 1 : 0;
440
}
441
 
442
static inline unsigned int ata_dev_present(struct ata_device *dev)
443
{
444
        return ((dev->class == ATA_DEV_ATA) ||
445
                (dev->class == ATA_DEV_ATAPI));
446
}
447
 
448
static inline u8 ata_chk_err(struct ata_port *ap)
449
{
450
        if (ap->flags & ATA_FLAG_MMIO) {
451
                return readb((void *) ap->ioaddr.error_addr);
452
        }
453
        return inb(ap->ioaddr.error_addr);
454
}
455
 
456
static inline u8 ata_chk_status(struct ata_port *ap)
457
{
458
        return ap->ops->check_status(ap);
459
}
460
 
461
static inline u8 ata_altstatus(struct ata_port *ap)
462
{
463
        if (ap->flags & ATA_FLAG_MMIO)
464
                return readb(ap->ioaddr.ctl_addr);
465
        return inb(ap->ioaddr.ctl_addr);
466
}
467
 
468
static inline void ata_pause(struct ata_port *ap)
469
{
470
        ata_altstatus(ap);
471
        ndelay(400);
472
}
473
 
474
static inline u8 ata_busy_wait(struct ata_port *ap, unsigned int bits,
475
                               unsigned int max)
476
{
477
        u8 status;
478
 
479
        do {
480
                udelay(10);
481
                status = ata_chk_status(ap);
482
                max--;
483
        } while ((status & bits) && (max > 0));
484
 
485
        return status;
486
}
487
 
488
static inline u8 ata_wait_idle(struct ata_port *ap)
489
{
490
        u8 status = ata_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
491
 
492
        if (status & (ATA_BUSY | ATA_DRQ)) {
493
                unsigned long l = ap->ioaddr.cmdstat_addr;
494
                printk(KERN_WARNING
495
                       "ATA: abnormal status 0x%X on port 0x%lX\n",
496
                       status, l);
497
        }
498
 
499
        return status;
500
}
501
 
502
static inline struct ata_queued_cmd *ata_qc_from_tag (struct ata_port *ap,
503
                                                      unsigned int tag)
504
{
505
        if (likely(ata_tag_valid(tag)))
506
                return &ap->qcmd[tag];
507
        return NULL;
508
}
509
 
510
static inline void ata_tf_init(struct ata_port *ap, struct ata_taskfile *tf, unsigned int device)
511
{
512
        memset(tf, 0, sizeof(*tf));
513
 
514
        tf->ctl = ap->ctl;
515
        if (device == 0)
516
                tf->device = ATA_DEVICE_OBS;
517
        else
518
                tf->device = ATA_DEVICE_OBS | ATA_DEV1;
519
}
520
 
521
static inline u8 ata_irq_on(struct ata_port *ap)
522
{
523
        struct ata_ioports *ioaddr = &ap->ioaddr;
524
 
525
        ap->ctl &= ~ATA_NIEN;
526
        ap->last_ctl = ap->ctl;
527
 
528
        if (ap->flags & ATA_FLAG_MMIO)
529
                writeb(ap->ctl, ioaddr->ctl_addr);
530
        else
531
                outb(ap->ctl, ioaddr->ctl_addr);
532
        return ata_wait_idle(ap);
533
}
534
 
535
static inline u8 ata_irq_ack(struct ata_port *ap, unsigned int chk_drq)
536
{
537
        unsigned int bits = chk_drq ? ATA_BUSY | ATA_DRQ : ATA_BUSY;
538
        u8 host_stat, post_stat, status;
539
 
540
        status = ata_busy_wait(ap, bits, 1000);
541
        if (status & bits)
542
                DPRINTK("abnormal status 0x%X\n", status);
543
 
544
        /* get controller status; clear intr, err bits */
545
        if (ap->flags & ATA_FLAG_MMIO) {
546
                void *mmio = (void *) ap->ioaddr.bmdma_addr;
547
                host_stat = readb(mmio + ATA_DMA_STATUS);
548
                writeb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
549
                       mmio + ATA_DMA_STATUS);
550
 
551
                post_stat = readb(mmio + ATA_DMA_STATUS);
552
        } else {
553
                host_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
554
                outb(host_stat | ATA_DMA_INTR | ATA_DMA_ERR,
555
                     ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
556
 
557
                post_stat = inb(ap->ioaddr.bmdma_addr + ATA_DMA_STATUS);
558
        }
559
 
560
        VPRINTK("irq ack: host_stat 0x%X, new host_stat 0x%X, drv_stat 0x%X\n",
561
                host_stat, post_stat, status);
562
 
563
        return status;
564
}
565
 
566
static inline u32 scr_read(struct ata_port *ap, unsigned int reg)
567
{
568
        return ap->ops->scr_read(ap, reg);
569
}
570
 
571
static inline void scr_write(struct ata_port *ap, unsigned int reg, u32 val)
572
{
573
        ap->ops->scr_write(ap, reg, val);
574
}
575
 
576
static inline unsigned int sata_dev_present(struct ata_port *ap)
577
{
578
        return ((scr_read(ap, SCR_STATUS) & 0xf) == 0x3) ? 1 : 0;
579
}
580
 
581
#endif /* __LINUX_LIBATA_H__ */