linux/include/linux/libata.h
<<
>>
Prefs
   1/*
   2 *  Copyright 2003-2005 Red Hat, Inc.  All rights reserved.
   3 *  Copyright 2003-2005 Jeff Garzik
   4 *
   5 *
   6 *  This program is free software; you can redistribute it and/or modify
   7 *  it under the terms of the GNU General Public License as published by
   8 *  the Free Software Foundation; either version 2, or (at your option)
   9 *  any later version.
  10 *
  11 *  This program is distributed in the hope that it will be useful,
  12 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14 *  GNU General Public License for more details.
  15 *
  16 *  You should have received a copy of the GNU General Public License
  17 *  along with this program; see the file COPYING.  If not, write to
  18 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  19 *
  20 *
  21 *  libata documentation is available via 'make {ps|pdf}docs',
  22 *  as Documentation/DocBook/libata.*
  23 *
  24 */
  25
  26#ifndef __LINUX_LIBATA_H__
  27#define __LINUX_LIBATA_H__
  28
  29#include <linux/delay.h>
  30#include <linux/interrupt.h>
  31#include <linux/dma-mapping.h>
  32#include <linux/scatterlist.h>
  33#include <linux/io.h>
  34#include <linux/ata.h>
  35#include <linux/workqueue.h>
  36#include <scsi/scsi_host.h>
  37#include <linux/acpi.h>
  38#include <linux/cdrom.h>
  39
  40/*
  41 * Define if arch has non-standard setup.  This is a _PCI_ standard
  42 * not a legacy or ISA standard.
  43 */
  44#ifdef CONFIG_ATA_NONSTANDARD
  45#include <asm/libata-portmap.h>
  46#else
  47#include <asm-generic/libata-portmap.h>
  48#endif
  49
  50/*
  51 * compile-time options: to be removed as soon as all the drivers are
  52 * converted to the new debugging mechanism
  53 */
  54#undef ATA_DEBUG                /* debugging output */
  55#undef ATA_VERBOSE_DEBUG        /* yet more debugging output */
  56#undef ATA_IRQ_TRAP             /* define to ack screaming irqs */
  57#undef ATA_NDEBUG               /* define to disable quick runtime checks */
  58
  59
  60/* note: prints function name for you */
  61#ifdef ATA_DEBUG
  62#define DPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
  63#ifdef ATA_VERBOSE_DEBUG
  64#define VPRINTK(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
  65#else
  66#define VPRINTK(fmt, args...)
  67#endif  /* ATA_VERBOSE_DEBUG */
  68#else
  69#define DPRINTK(fmt, args...)
  70#define VPRINTK(fmt, args...)
  71#endif  /* ATA_DEBUG */
  72
  73#define BPRINTK(fmt, args...) if (ap->flags & ATA_FLAG_DEBUGMSG) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
  74
  75/* NEW: debug levels */
  76#define HAVE_LIBATA_MSG 1
  77
  78enum {
  79        ATA_MSG_DRV     = 0x0001,
  80        ATA_MSG_INFO    = 0x0002,
  81        ATA_MSG_PROBE   = 0x0004,
  82        ATA_MSG_WARN    = 0x0008,
  83        ATA_MSG_MALLOC  = 0x0010,
  84        ATA_MSG_CTL     = 0x0020,
  85        ATA_MSG_INTR    = 0x0040,
  86        ATA_MSG_ERR     = 0x0080,
  87};
  88
  89#define ata_msg_drv(p)    ((p)->msg_enable & ATA_MSG_DRV)
  90#define ata_msg_info(p)   ((p)->msg_enable & ATA_MSG_INFO)
  91#define ata_msg_probe(p)  ((p)->msg_enable & ATA_MSG_PROBE)
  92#define ata_msg_warn(p)   ((p)->msg_enable & ATA_MSG_WARN)
  93#define ata_msg_malloc(p) ((p)->msg_enable & ATA_MSG_MALLOC)
  94#define ata_msg_ctl(p)    ((p)->msg_enable & ATA_MSG_CTL)
  95#define ata_msg_intr(p)   ((p)->msg_enable & ATA_MSG_INTR)
  96#define ata_msg_err(p)    ((p)->msg_enable & ATA_MSG_ERR)
  97
  98static inline u32 ata_msg_init(int dval, int default_msg_enable_bits)
  99{
 100        if (dval < 0 || dval >= (sizeof(u32) * 8))
 101                return default_msg_enable_bits; /* should be 0x1 - only driver info msgs */
 102        if (!dval)
 103                return 0;
 104        return (1 << dval) - 1;
 105}
 106
 107/* defines only for the constants which don't work well as enums */
 108#define ATA_TAG_POISON          0xfafbfcfdU
 109
 110enum {
 111        /* various global constants */
 112        LIBATA_MAX_PRD          = ATA_MAX_PRD / 2,
 113        LIBATA_DUMB_MAX_PRD     = ATA_MAX_PRD / 4,      /* Worst case */
 114        ATA_DEF_QUEUE           = 1,
 115        /* tag ATA_MAX_QUEUE - 1 is reserved for internal commands */
 116        ATA_MAX_QUEUE           = 32,
 117        ATA_TAG_INTERNAL        = ATA_MAX_QUEUE - 1,
 118        ATA_SHORT_PAUSE         = (HZ >> 6) + 1,
 119
 120        ATAPI_MAX_DRAIN         = 16 << 10,
 121
 122        ATA_ALL_DEVICES         = (1 << ATA_MAX_DEVICES) - 1,
 123
 124        ATA_SHT_EMULATED        = 1,
 125        ATA_SHT_CMD_PER_LUN     = 1,
 126        ATA_SHT_THIS_ID         = -1,
 127        ATA_SHT_USE_CLUSTERING  = 1,
 128
 129        /* struct ata_device stuff */
 130        ATA_DFLAG_LBA           = (1 << 0), /* device supports LBA */
 131        ATA_DFLAG_LBA48         = (1 << 1), /* device supports LBA48 */
 132        ATA_DFLAG_CDB_INTR      = (1 << 2), /* device asserts INTRQ when ready for CDB */
 133        ATA_DFLAG_NCQ           = (1 << 3), /* device supports NCQ */
 134        ATA_DFLAG_FLUSH_EXT     = (1 << 4), /* do FLUSH_EXT instead of FLUSH */
 135        ATA_DFLAG_ACPI_PENDING  = (1 << 5), /* ACPI resume action pending */
 136        ATA_DFLAG_ACPI_FAILED   = (1 << 6), /* ACPI on devcfg has failed */
 137        ATA_DFLAG_AN            = (1 << 7), /* AN configured */
 138        ATA_DFLAG_HIPM          = (1 << 8), /* device supports HIPM */
 139        ATA_DFLAG_DIPM          = (1 << 9), /* device supports DIPM */
 140        ATA_DFLAG_DMADIR        = (1 << 10), /* device requires DMADIR */
 141        ATA_DFLAG_CFG_MASK      = (1 << 12) - 1,
 142
 143        ATA_DFLAG_PIO           = (1 << 12), /* device limited to PIO mode */
 144        ATA_DFLAG_NCQ_OFF       = (1 << 13), /* device limited to non-NCQ mode */
 145        ATA_DFLAG_SPUNDOWN      = (1 << 14), /* XXX: for spindown_compat */
 146        ATA_DFLAG_SLEEPING      = (1 << 15), /* device is sleeping */
 147        ATA_DFLAG_DUBIOUS_XFER  = (1 << 16), /* data transfer not verified */
 148        ATA_DFLAG_INIT_MASK     = (1 << 24) - 1,
 149
 150        ATA_DFLAG_DETACH        = (1 << 24),
 151        ATA_DFLAG_DETACHED      = (1 << 25),
 152
 153        ATA_DEV_UNKNOWN         = 0,    /* unknown device */
 154        ATA_DEV_ATA             = 1,    /* ATA device */
 155        ATA_DEV_ATA_UNSUP       = 2,    /* ATA device (unsupported) */
 156        ATA_DEV_ATAPI           = 3,    /* ATAPI device */
 157        ATA_DEV_ATAPI_UNSUP     = 4,    /* ATAPI device (unsupported) */
 158        ATA_DEV_PMP             = 5,    /* SATA port multiplier */
 159        ATA_DEV_PMP_UNSUP       = 6,    /* SATA port multiplier (unsupported) */
 160        ATA_DEV_SEMB            = 7,    /* SEMB */
 161        ATA_DEV_SEMB_UNSUP      = 8,    /* SEMB (unsupported) */
 162        ATA_DEV_NONE            = 9,    /* no device */
 163
 164        /* struct ata_link flags */
 165        ATA_LFLAG_NO_SRST       = (1 << 2), /* avoid softreset */
 166        ATA_LFLAG_ASSUME_ATA    = (1 << 3), /* assume ATA class */
 167        ATA_LFLAG_ASSUME_SEMB   = (1 << 4), /* assume SEMB class */
 168        ATA_LFLAG_ASSUME_CLASS  = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB,
 169        ATA_LFLAG_NO_RETRY      = (1 << 5), /* don't retry this link */
 170        ATA_LFLAG_DISABLED      = (1 << 6), /* link is disabled */
 171
 172        /* struct ata_port flags */
 173        ATA_FLAG_SLAVE_POSS     = (1 << 0), /* host supports slave dev */
 174                                            /* (doesn't imply presence) */
 175        ATA_FLAG_SATA           = (1 << 1),
 176        ATA_FLAG_NO_LEGACY      = (1 << 2), /* no legacy mode check */
 177        ATA_FLAG_MMIO           = (1 << 3), /* use MMIO, not PIO */
 178        ATA_FLAG_SRST           = (1 << 4), /* (obsolete) use ATA SRST, not E.D.D. */
 179        ATA_FLAG_SATA_RESET     = (1 << 5), /* (obsolete) use COMRESET */
 180        ATA_FLAG_NO_ATAPI       = (1 << 6), /* No ATAPI support */
 181        ATA_FLAG_PIO_DMA        = (1 << 7), /* PIO cmds via DMA */
 182        ATA_FLAG_PIO_LBA48      = (1 << 8), /* Host DMA engine is LBA28 only */
 183        ATA_FLAG_PIO_POLLING    = (1 << 9), /* use polling PIO if LLD
 184                                             * doesn't handle PIO interrupts */
 185        ATA_FLAG_NCQ            = (1 << 10), /* host supports NCQ */
 186        ATA_FLAG_DEBUGMSG       = (1 << 13),
 187        ATA_FLAG_IGN_SIMPLEX    = (1 << 15), /* ignore SIMPLEX */
 188        ATA_FLAG_NO_IORDY       = (1 << 16), /* controller lacks iordy */
 189        ATA_FLAG_ACPI_SATA      = (1 << 17), /* need native SATA ACPI layout */
 190        ATA_FLAG_AN             = (1 << 18), /* controller supports AN */
 191        ATA_FLAG_PMP            = (1 << 19), /* controller supports PMP */
 192        ATA_FLAG_IPM            = (1 << 20), /* driver can handle IPM */
 193
 194        /* The following flag belongs to ap->pflags but is kept in
 195         * ap->flags because it's referenced in many LLDs and will be
 196         * removed in not-too-distant future.
 197         */
 198        ATA_FLAG_DISABLED       = (1 << 23), /* port is disabled, ignore it */
 199
 200        /* bits 24:31 of ap->flags are reserved for LLD specific flags */
 201
 202        /* struct ata_port pflags */
 203        ATA_PFLAG_EH_PENDING    = (1 << 0), /* EH pending */
 204        ATA_PFLAG_EH_IN_PROGRESS = (1 << 1), /* EH in progress */
 205        ATA_PFLAG_FROZEN        = (1 << 2), /* port is frozen */
 206        ATA_PFLAG_RECOVERED     = (1 << 3), /* recovery action performed */
 207        ATA_PFLAG_LOADING       = (1 << 4), /* boot/loading probe */
 208        ATA_PFLAG_UNLOADING     = (1 << 5), /* module is unloading */
 209        ATA_PFLAG_SCSI_HOTPLUG  = (1 << 6), /* SCSI hotplug scheduled */
 210        ATA_PFLAG_INITIALIZING  = (1 << 7), /* being initialized, don't touch */
 211        ATA_PFLAG_RESETTING     = (1 << 8), /* reset in progress */
 212
 213        ATA_PFLAG_SUSPENDED     = (1 << 17), /* port is suspended (power) */
 214        ATA_PFLAG_PM_PENDING    = (1 << 18), /* PM operation pending */
 215        ATA_PFLAG_INIT_GTM_VALID = (1 << 19), /* initial gtm data valid */
 216
 217        /* struct ata_queued_cmd flags */
 218        ATA_QCFLAG_ACTIVE       = (1 << 0), /* cmd not yet ack'd to scsi lyer */
 219        ATA_QCFLAG_DMAMAP       = (1 << 1), /* SG table is DMA mapped */
 220        ATA_QCFLAG_IO           = (1 << 3), /* standard IO command */
 221        ATA_QCFLAG_RESULT_TF    = (1 << 4), /* result TF requested */
 222        ATA_QCFLAG_CLEAR_EXCL   = (1 << 5), /* clear excl_link on completion */
 223        ATA_QCFLAG_QUIET        = (1 << 6), /* don't report device error */
 224        ATA_QCFLAG_RETRY        = (1 << 7), /* retry after failure */
 225
 226        ATA_QCFLAG_FAILED       = (1 << 16), /* cmd failed and is owned by EH */
 227        ATA_QCFLAG_SENSE_VALID  = (1 << 17), /* sense data valid */
 228        ATA_QCFLAG_EH_SCHEDULED = (1 << 18), /* EH scheduled (obsolete) */
 229
 230        /* host set flags */
 231        ATA_HOST_SIMPLEX        = (1 << 0),     /* Host is simplex, one DMA channel per host only */
 232        ATA_HOST_STARTED        = (1 << 1),     /* Host started */
 233
 234        /* bits 24:31 of host->flags are reserved for LLD specific flags */
 235
 236        /* various lengths of time */
 237        ATA_TMOUT_BOOT          = 30 * HZ,      /* heuristic */
 238        ATA_TMOUT_BOOT_QUICK    = 7 * HZ,       /* heuristic */
 239        ATA_TMOUT_INTERNAL      = 30 * HZ,
 240        ATA_TMOUT_INTERNAL_QUICK = 5 * HZ,
 241
 242        /* FIXME: GoVault needs 2s but we can't afford that without
 243         * parallel probing.  800ms is enough for iVDR disk
 244         * HHD424020F7SV00.  Increase to 2secs when parallel probing
 245         * is in place.
 246         */
 247        ATA_TMOUT_FF_WAIT       = 4 * HZ / 5,
 248
 249        /* Spec mandates to wait for ">= 2ms" before checking status
 250         * after reset.  We wait 150ms, because that was the magic
 251         * delay used for ATAPI devices in Hale Landis's ATADRVR, for
 252         * the period of time between when the ATA command register is
 253         * written, and then status is checked.  Because waiting for
 254         * "a while" before checking status is fine, post SRST, we
 255         * perform this magic delay here as well.
 256         *
 257         * Old drivers/ide uses the 2mS rule and then waits for ready.
 258         */
 259        ATA_WAIT_AFTER_RESET_MSECS = 150,
 260
 261        /* If PMP is supported, we have to do follow-up SRST.  As some
 262         * PMPs don't send D2H Reg FIS after hardreset, LLDs are
 263         * advised to wait only for the following duration before
 264         * doing SRST.
 265         */
 266        ATA_TMOUT_PMP_SRST_WAIT = 1 * HZ,
 267
 268        /* ATA bus states */
 269        BUS_UNKNOWN             = 0,
 270        BUS_DMA                 = 1,
 271        BUS_IDLE                = 2,
 272        BUS_NOINTR              = 3,
 273        BUS_NODATA              = 4,
 274        BUS_TIMER               = 5,
 275        BUS_PIO                 = 6,
 276        BUS_EDD                 = 7,
 277        BUS_IDENTIFY            = 8,
 278        BUS_PACKET              = 9,
 279
 280        /* SATA port states */
 281        PORT_UNKNOWN            = 0,
 282        PORT_ENABLED            = 1,
 283        PORT_DISABLED           = 2,
 284
 285        /* encoding various smaller bitmaps into a single
 286         * unsigned long bitmap
 287         */
 288        ATA_NR_PIO_MODES        = 7,
 289        ATA_NR_MWDMA_MODES      = 5,
 290        ATA_NR_UDMA_MODES       = 8,
 291
 292        ATA_SHIFT_PIO           = 0,
 293        ATA_SHIFT_MWDMA         = ATA_SHIFT_PIO + ATA_NR_PIO_MODES,
 294        ATA_SHIFT_UDMA          = ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES,
 295
 296        /* size of buffer to pad xfers ending on unaligned boundaries */
 297        ATA_DMA_PAD_SZ          = 4,
 298
 299        /* ering size */
 300        ATA_ERING_SIZE          = 32,
 301
 302        /* return values for ->qc_defer */
 303        ATA_DEFER_LINK          = 1,
 304        ATA_DEFER_PORT          = 2,
 305
 306        /* desc_len for ata_eh_info and context */
 307        ATA_EH_DESC_LEN         = 80,
 308
 309        /* reset / recovery action types */
 310        ATA_EH_REVALIDATE       = (1 << 0),
 311        ATA_EH_SOFTRESET        = (1 << 1), /* meaningful only in ->prereset */
 312        ATA_EH_HARDRESET        = (1 << 2), /* meaningful only in ->prereset */
 313        ATA_EH_RESET            = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
 314        ATA_EH_ENABLE_LINK      = (1 << 3),
 315        ATA_EH_LPM              = (1 << 4),  /* link power management action */
 316
 317        ATA_EH_PERDEV_MASK      = ATA_EH_REVALIDATE,
 318
 319        /* ata_eh_info->flags */
 320        ATA_EHI_HOTPLUGGED      = (1 << 0),  /* could have been hotplugged */
 321        ATA_EHI_NO_AUTOPSY      = (1 << 2),  /* no autopsy */
 322        ATA_EHI_QUIET           = (1 << 3),  /* be quiet */
 323
 324        ATA_EHI_DID_SOFTRESET   = (1 << 16), /* already soft-reset this port */
 325        ATA_EHI_DID_HARDRESET   = (1 << 17), /* already soft-reset this port */
 326        ATA_EHI_PRINTINFO       = (1 << 18), /* print configuration info */
 327        ATA_EHI_SETMODE         = (1 << 19), /* configure transfer mode */
 328        ATA_EHI_POST_SETMODE    = (1 << 20), /* revaildating after setmode */
 329
 330        ATA_EHI_DID_RESET       = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET,
 331
 332        /* max tries if error condition is still set after ->error_handler */
 333        ATA_EH_MAX_TRIES        = 5,
 334
 335        /* how hard are we gonna try to probe/recover devices */
 336        ATA_PROBE_MAX_TRIES     = 3,
 337        ATA_EH_DEV_TRIES        = 3,
 338        ATA_EH_PMP_TRIES        = 5,
 339        ATA_EH_PMP_LINK_TRIES   = 3,
 340
 341        SATA_PMP_RW_TIMEOUT     = 3000,         /* PMP read/write timeout */
 342
 343        /* Horkage types. May be set by libata or controller on drives
 344           (some horkage may be drive/controller pair dependant */
 345
 346        ATA_HORKAGE_DIAGNOSTIC  = (1 << 0),     /* Failed boot diag */
 347        ATA_HORKAGE_NODMA       = (1 << 1),     /* DMA problems */
 348        ATA_HORKAGE_NONCQ       = (1 << 2),     /* Don't use NCQ */
 349        ATA_HORKAGE_MAX_SEC_128 = (1 << 3),     /* Limit max sects to 128 */
 350        ATA_HORKAGE_BROKEN_HPA  = (1 << 4),     /* Broken HPA */
 351        ATA_HORKAGE_DISABLE     = (1 << 5),     /* Disable it */
 352        ATA_HORKAGE_HPA_SIZE    = (1 << 6),     /* native size off by one */
 353        ATA_HORKAGE_IPM         = (1 << 7),     /* Link PM problems */
 354        ATA_HORKAGE_IVB         = (1 << 8),     /* cbl det validity bit bugs */
 355        ATA_HORKAGE_STUCK_ERR   = (1 << 9),     /* stuck ERR on next PACKET */
 356
 357         /* DMA mask for user DMA control: User visible values; DO NOT
 358            renumber */
 359        ATA_DMA_MASK_ATA        = (1 << 0),     /* DMA on ATA Disk */
 360        ATA_DMA_MASK_ATAPI      = (1 << 1),     /* DMA on ATAPI */
 361        ATA_DMA_MASK_CFA        = (1 << 2),     /* DMA on CF Card */
 362
 363        /* ATAPI command types */
 364        ATAPI_READ              = 0,            /* READs */
 365        ATAPI_WRITE             = 1,            /* WRITEs */
 366        ATAPI_READ_CD           = 2,            /* READ CD [MSF] */
 367        ATAPI_PASS_THRU         = 3,            /* SAT pass-thru */
 368        ATAPI_MISC              = 4,            /* the rest */
 369
 370        /* Timing constants */
 371        ATA_TIMING_SETUP        = (1 << 0),
 372        ATA_TIMING_ACT8B        = (1 << 1),
 373        ATA_TIMING_REC8B        = (1 << 2),
 374        ATA_TIMING_CYC8B        = (1 << 3),
 375        ATA_TIMING_8BIT         = ATA_TIMING_ACT8B | ATA_TIMING_REC8B |
 376                                  ATA_TIMING_CYC8B,
 377        ATA_TIMING_ACTIVE       = (1 << 4),
 378        ATA_TIMING_RECOVER      = (1 << 5),
 379        ATA_TIMING_CYCLE        = (1 << 6),
 380        ATA_TIMING_UDMA         = (1 << 7),
 381        ATA_TIMING_ALL          = ATA_TIMING_SETUP | ATA_TIMING_ACT8B |
 382                                  ATA_TIMING_REC8B | ATA_TIMING_CYC8B |
 383                                  ATA_TIMING_ACTIVE | ATA_TIMING_RECOVER |
 384                                  ATA_TIMING_CYCLE | ATA_TIMING_UDMA,
 385};
 386
 387enum ata_xfer_mask {
 388        ATA_MASK_PIO            = ((1LU << ATA_NR_PIO_MODES) - 1)
 389                                        << ATA_SHIFT_PIO,
 390        ATA_MASK_MWDMA          = ((1LU << ATA_NR_MWDMA_MODES) - 1)
 391                                        << ATA_SHIFT_MWDMA,
 392        ATA_MASK_UDMA           = ((1LU << ATA_NR_UDMA_MODES) - 1)
 393                                        << ATA_SHIFT_UDMA,
 394};
 395
 396enum hsm_task_states {
 397        HSM_ST_IDLE,            /* no command on going */
 398        HSM_ST_FIRST,           /* (waiting the device to)
 399                                   write CDB or first data block */
 400        HSM_ST,                 /* (waiting the device to) transfer data */
 401        HSM_ST_LAST,            /* (waiting the device to) complete command */
 402        HSM_ST_ERR,             /* error */
 403};
 404
 405enum ata_completion_errors {
 406        AC_ERR_DEV              = (1 << 0), /* device reported error */
 407        AC_ERR_HSM              = (1 << 1), /* host state machine violation */
 408        AC_ERR_TIMEOUT          = (1 << 2), /* timeout */
 409        AC_ERR_MEDIA            = (1 << 3), /* media error */
 410        AC_ERR_ATA_BUS          = (1 << 4), /* ATA bus error */
 411        AC_ERR_HOST_BUS         = (1 << 5), /* host bus error */
 412        AC_ERR_SYSTEM           = (1 << 6), /* system error */
 413        AC_ERR_INVALID          = (1 << 7), /* invalid argument */
 414        AC_ERR_OTHER            = (1 << 8), /* unknown */
 415        AC_ERR_NODEV_HINT       = (1 << 9), /* polling device detection hint */
 416        AC_ERR_NCQ              = (1 << 10), /* marker for offending NCQ qc */
 417};
 418
 419/* forward declarations */
 420struct scsi_device;
 421struct ata_port_operations;
 422struct ata_port;
 423struct ata_link;
 424struct ata_queued_cmd;
 425
 426/* typedefs */
 427typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc);
 428typedef int (*ata_prereset_fn_t)(struct ata_link *link, unsigned long deadline);
 429typedef int (*ata_reset_fn_t)(struct ata_link *link, unsigned int *classes,
 430                              unsigned long deadline);
 431typedef void (*ata_postreset_fn_t)(struct ata_link *link, unsigned int *classes);
 432
 433/*
 434 * host pm policy: If you alter this, you also need to alter libata-scsi.c
 435 * (for the ascii descriptions)
 436 */
 437enum link_pm {
 438        NOT_AVAILABLE,
 439        MIN_POWER,
 440        MAX_PERFORMANCE,
 441        MEDIUM_POWER,
 442};
 443extern struct device_attribute dev_attr_link_power_management_policy;
 444
 445#ifdef CONFIG_ATA_SFF
 446struct ata_ioports {
 447        void __iomem            *cmd_addr;
 448        void __iomem            *data_addr;
 449        void __iomem            *error_addr;
 450        void __iomem            *feature_addr;
 451        void __iomem            *nsect_addr;
 452        void __iomem            *lbal_addr;
 453        void __iomem            *lbam_addr;
 454        void __iomem            *lbah_addr;
 455        void __iomem            *device_addr;
 456        void __iomem            *status_addr;
 457        void __iomem            *command_addr;
 458        void __iomem            *altstatus_addr;
 459        void __iomem            *ctl_addr;
 460        void __iomem            *bmdma_addr;
 461        void __iomem            *scr_addr;
 462};
 463#endif /* CONFIG_ATA_SFF */
 464
 465struct ata_host {
 466        spinlock_t              lock;
 467        struct device           *dev;
 468        void __iomem * const    *iomap;
 469        unsigned int            n_ports;
 470        void                    *private_data;
 471        struct ata_port_operations *ops;
 472        unsigned long           flags;
 473#ifdef CONFIG_ATA_ACPI
 474        acpi_handle             acpi_handle;
 475#endif
 476        struct ata_port         *simplex_claimed;       /* channel owning the DMA */
 477        struct ata_port         *ports[0];
 478};
 479
 480struct ata_queued_cmd {
 481        struct ata_port         *ap;
 482        struct ata_device       *dev;
 483
 484        struct scsi_cmnd        *scsicmd;
 485        void                    (*scsidone)(struct scsi_cmnd *);
 486
 487        struct ata_taskfile     tf;
 488        u8                      cdb[ATAPI_CDB_LEN];
 489
 490        unsigned long           flags;          /* ATA_QCFLAG_xxx */
 491        unsigned int            tag;
 492        unsigned int            n_elem;
 493
 494        int                     dma_dir;
 495
 496        unsigned int            sect_size;
 497
 498        unsigned int            nbytes;
 499        unsigned int            extrabytes;
 500        unsigned int            curbytes;
 501
 502        struct scatterlist      *cursg;
 503        unsigned int            cursg_ofs;
 504
 505        struct scatterlist      sgent;
 506
 507        struct scatterlist      *sg;
 508
 509        unsigned int            err_mask;
 510        struct ata_taskfile     result_tf;
 511        ata_qc_cb_t             complete_fn;
 512
 513        void                    *private_data;
 514        void                    *lldd_task;
 515};
 516
 517struct ata_port_stats {
 518        unsigned long           unhandled_irq;
 519        unsigned long           idle_irq;
 520        unsigned long           rw_reqbuf;
 521};
 522
 523struct ata_ering_entry {
 524        unsigned int            eflags;
 525        unsigned int            err_mask;
 526        u64                     timestamp;
 527};
 528
 529struct ata_ering {
 530        int                     cursor;
 531        struct ata_ering_entry  ring[ATA_ERING_SIZE];
 532};
 533
 534struct ata_device {
 535        struct ata_link         *link;
 536        unsigned int            devno;          /* 0 or 1 */
 537        unsigned long           flags;          /* ATA_DFLAG_xxx */
 538        unsigned int            horkage;        /* List of broken features */
 539        struct scsi_device      *sdev;          /* attached SCSI device */
 540#ifdef CONFIG_ATA_ACPI
 541        acpi_handle             acpi_handle;
 542        union acpi_object       *gtf_cache;
 543#endif
 544        /* n_sector is used as CLEAR_OFFSET, read comment above CLEAR_OFFSET */
 545        u64                     n_sectors;      /* size of device, if ATA */
 546        unsigned int            class;          /* ATA_DEV_xxx */
 547
 548        u8                      pio_mode;
 549        u8                      dma_mode;
 550        u8                      xfer_mode;
 551        unsigned int            xfer_shift;     /* ATA_SHIFT_xxx */
 552
 553        unsigned int            multi_count;    /* sectors count for
 554                                                   READ/WRITE MULTIPLE */
 555        unsigned int            max_sectors;    /* per-device max sectors */
 556        unsigned int            cdb_len;
 557
 558        /* per-dev xfer mask */
 559        unsigned long           pio_mask;
 560        unsigned long           mwdma_mask;
 561        unsigned long           udma_mask;
 562
 563        /* for CHS addressing */
 564        u16                     cylinders;      /* Number of cylinders */
 565        u16                     heads;          /* Number of heads */
 566        u16                     sectors;        /* Number of sectors per track */
 567
 568        /* error history */
 569        int                     spdn_cnt;
 570        struct ata_ering        ering;
 571
 572        union {
 573                u16             id[ATA_ID_WORDS]; /* IDENTIFY xxx DEVICE data */
 574                u32             gscr[SATA_PMP_GSCR_DWORDS]; /* PMP GSCR block */
 575        };
 576};
 577
 578/* Offset into struct ata_device.  Fields above it are maintained
 579 * acress device init.  Fields below are zeroed.
 580 */
 581#define ATA_DEVICE_CLEAR_OFFSET         offsetof(struct ata_device, n_sectors)
 582
 583struct ata_eh_info {
 584        struct ata_device       *dev;           /* offending device */
 585        u32                     serror;         /* SError from LLDD */
 586        unsigned int            err_mask;       /* port-wide err_mask */
 587        unsigned int            action;         /* ATA_EH_* action mask */
 588        unsigned int            dev_action[ATA_MAX_DEVICES]; /* dev EH action */
 589        unsigned int            flags;          /* ATA_EHI_* flags */
 590
 591        unsigned int            probe_mask;
 592
 593        char                    desc[ATA_EH_DESC_LEN];
 594        int                     desc_len;
 595};
 596
 597struct ata_eh_context {
 598        struct ata_eh_info      i;
 599        int                     tries[ATA_MAX_DEVICES];
 600        unsigned int            classes[ATA_MAX_DEVICES];
 601        unsigned int            did_probe_mask;
 602        unsigned int            saved_ncq_enabled;
 603        u8                      saved_xfer_mode[ATA_MAX_DEVICES];
 604};
 605
 606struct ata_acpi_drive
 607{
 608        u32 pio;
 609        u32 dma;
 610} __packed;
 611
 612struct ata_acpi_gtm {
 613        struct ata_acpi_drive drive[2];
 614        u32 flags;
 615} __packed;
 616
 617struct ata_link {
 618        struct ata_port         *ap;
 619        int                     pmp;            /* port multiplier port # */
 620
 621        unsigned int            active_tag;     /* active tag on this link */
 622        u32                     sactive;        /* active NCQ commands */
 623
 624        unsigned int            flags;          /* ATA_LFLAG_xxx */
 625
 626        unsigned int            hw_sata_spd_limit;
 627        unsigned int            sata_spd_limit;
 628        unsigned int            sata_spd;       /* current SATA PHY speed */
 629
 630        /* record runtime error info, protected by host_set lock */
 631        struct ata_eh_info      eh_info;
 632        /* EH context */
 633        struct ata_eh_context   eh_context;
 634
 635        struct ata_device       device[ATA_MAX_DEVICES];
 636};
 637
 638struct ata_port {
 639        struct Scsi_Host        *scsi_host; /* our co-allocated scsi host */
 640        struct ata_port_operations *ops;
 641        spinlock_t              *lock;
 642        unsigned long           flags;  /* ATA_FLAG_xxx */
 643        unsigned int            pflags; /* ATA_PFLAG_xxx */
 644        unsigned int            print_id; /* user visible unique port ID */
 645        unsigned int            port_no; /* 0 based port no. inside the host */
 646
 647        struct ata_prd          *prd;    /* our SG list */
 648        dma_addr_t              prd_dma; /* and its DMA mapping */
 649
 650#ifdef CONFIG_ATA_SFF
 651        struct ata_ioports      ioaddr; /* ATA cmd/ctl/dma register blocks */
 652#endif /* CONFIG_ATA_SFF */
 653
 654        u8                      ctl;    /* cache of ATA control register */
 655        u8                      last_ctl;       /* Cache last written value */
 656        unsigned int            pio_mask;
 657        unsigned int            mwdma_mask;
 658        unsigned int            udma_mask;
 659        unsigned int            cbl;    /* cable type; ATA_CBL_xxx */
 660
 661        struct ata_queued_cmd   qcmd[ATA_MAX_QUEUE];
 662        unsigned long           qc_allocated;
 663        unsigned int            qc_active;
 664        int                     nr_active_links; /* #links with active qcs */
 665
 666        struct ata_link         link;   /* host default link */
 667
 668        int                     nr_pmp_links;   /* nr of available PMP links */
 669        struct ata_link         *pmp_link;      /* array of PMP links */
 670        struct ata_link         *excl_link;     /* for PMP qc exclusion */
 671
 672        struct ata_port_stats   stats;
 673        struct ata_host         *host;
 674        struct device           *dev;
 675
 676        void                    *port_task_data;
 677        struct delayed_work     port_task;
 678        struct delayed_work     hotplug_task;
 679        struct work_struct      scsi_rescan_task;
 680
 681        unsigned int            hsm_task_state;
 682
 683        u32                     msg_enable;
 684        struct list_head        eh_done_q;
 685        wait_queue_head_t       eh_wait_q;
 686        int                     eh_tries;
 687
 688        pm_message_t            pm_mesg;
 689        int                     *pm_result;
 690        enum link_pm            pm_policy;
 691
 692        struct timer_list       fastdrain_timer;
 693        unsigned long           fastdrain_cnt;
 694
 695        void                    *private_data;
 696
 697#ifdef CONFIG_ATA_ACPI
 698        acpi_handle             acpi_handle;
 699        struct ata_acpi_gtm     __acpi_init_gtm; /* use ata_acpi_init_gtm() */
 700#endif
 701        u8                      sector_buf[ATA_SECT_SIZE]; /* owned by EH */
 702};
 703
 704/* The following initializer overrides a method to NULL whether one of
 705 * its parent has the method defined or not.  This is equivalent to
 706 * ERR_PTR(-ENOENT).  Unfortunately, ERR_PTR doesn't render a constant
 707 * expression and thus can't be used as an initializer.
 708 */
 709#define ATA_OP_NULL             (void *)(unsigned long)(-ENOENT)
 710
 711struct ata_port_operations {
 712        /*
 713         * Command execution
 714         */
 715        int  (*qc_defer)(struct ata_queued_cmd *qc);
 716        int  (*check_atapi_dma)(struct ata_queued_cmd *qc);
 717        void (*qc_prep)(struct ata_queued_cmd *qc);
 718        unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
 719        bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
 720
 721        /*
 722         * Configuration and exception handling
 723         */
 724        int  (*cable_detect)(struct ata_port *ap);
 725        unsigned long (*mode_filter)(struct ata_device *dev, unsigned long xfer_mask);
 726        void (*set_piomode)(struct ata_port *ap, struct ata_device *dev);
 727        void (*set_dmamode)(struct ata_port *ap, struct ata_device *dev);
 728        int  (*set_mode)(struct ata_link *link, struct ata_device **r_failed_dev);
 729
 730        void (*dev_config)(struct ata_device *dev);
 731
 732        void (*freeze)(struct ata_port *ap);
 733        void (*thaw)(struct ata_port *ap);
 734        ata_prereset_fn_t       prereset;
 735        ata_reset_fn_t          softreset;
 736        ata_reset_fn_t          hardreset;
 737        ata_postreset_fn_t      postreset;
 738        ata_prereset_fn_t       pmp_prereset;
 739        ata_reset_fn_t          pmp_softreset;
 740        ata_reset_fn_t          pmp_hardreset;
 741        ata_postreset_fn_t      pmp_postreset;
 742        void (*error_handler)(struct ata_port *ap);
 743        void (*post_internal_cmd)(struct ata_queued_cmd *qc);
 744
 745        /*
 746         * Optional features
 747         */
 748        int  (*scr_read)(struct ata_port *ap, unsigned int sc_reg, u32 *val);
 749        int  (*scr_write)(struct ata_port *ap, unsigned int sc_reg, u32 val);
 750        void (*pmp_attach)(struct ata_port *ap);
 751        void (*pmp_detach)(struct ata_port *ap);
 752        int  (*enable_pm)(struct ata_port *ap, enum link_pm policy);
 753        void (*disable_pm)(struct ata_port *ap);
 754
 755        /*
 756         * Start, stop, suspend and resume
 757         */
 758        int  (*port_suspend)(struct ata_port *ap, pm_message_t mesg);
 759        int  (*port_resume)(struct ata_port *ap);
 760        int  (*port_start)(struct ata_port *ap);
 761        void (*port_stop)(struct ata_port *ap);
 762        void (*host_stop)(struct ata_host *host);
 763
 764#ifdef CONFIG_ATA_SFF
 765        /*
 766         * SFF / taskfile oriented ops
 767         */
 768        void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
 769        u8   (*sff_check_status)(struct ata_port *ap);
 770        u8   (*sff_check_altstatus)(struct ata_port *ap);
 771        void (*sff_tf_load)(struct ata_port *ap, const struct ata_taskfile *tf);
 772        void (*sff_tf_read)(struct ata_port *ap, struct ata_taskfile *tf);
 773        void (*sff_exec_command)(struct ata_port *ap,
 774                                 const struct ata_taskfile *tf);
 775        unsigned int (*sff_data_xfer)(struct ata_device *dev,
 776                        unsigned char *buf, unsigned int buflen, int rw);
 777        u8   (*sff_irq_on)(struct ata_port *);
 778        void (*sff_irq_clear)(struct ata_port *);
 779
 780        void (*bmdma_setup)(struct ata_queued_cmd *qc);
 781        void (*bmdma_start)(struct ata_queued_cmd *qc);
 782        void (*bmdma_stop)(struct ata_queued_cmd *qc);
 783        u8   (*bmdma_status)(struct ata_port *ap);
 784#endif /* CONFIG_ATA_SFF */
 785
 786        /*
 787         * Obsolete
 788         */
 789        void (*phy_reset)(struct ata_port *ap);
 790        void (*eng_timeout)(struct ata_port *ap);
 791
 792        /*
 793         * ->inherits must be the last field and all the preceding
 794         * fields must be pointers.
 795         */
 796        const struct ata_port_operations        *inherits;
 797};
 798
 799struct ata_port_info {
 800        unsigned long           flags;
 801        unsigned long           link_flags;
 802        unsigned long           pio_mask;
 803        unsigned long           mwdma_mask;
 804        unsigned long           udma_mask;
 805        struct ata_port_operations *port_ops;
 806        void                    *private_data;
 807};
 808
 809struct ata_timing {
 810        unsigned short mode;            /* ATA mode */
 811        unsigned short setup;           /* t1 */
 812        unsigned short act8b;           /* t2 for 8-bit I/O */
 813        unsigned short rec8b;           /* t2i for 8-bit I/O */
 814        unsigned short cyc8b;           /* t0 for 8-bit I/O */
 815        unsigned short active;          /* t2 or tD */
 816        unsigned short recover;         /* t2i or tK */
 817        unsigned short cycle;           /* t0 */
 818        unsigned short udma;            /* t2CYCTYP/2 */
 819};
 820
 821/*
 822 * Core layer - drivers/ata/libata-core.c
 823 */
 824extern const unsigned long sata_deb_timing_normal[];
 825extern const unsigned long sata_deb_timing_hotplug[];
 826extern const unsigned long sata_deb_timing_long[];
 827
 828extern struct ata_port_operations ata_dummy_port_ops;
 829extern const struct ata_port_info ata_dummy_port_info;
 830
 831static inline const unsigned long *
 832sata_ehc_deb_timing(struct ata_eh_context *ehc)
 833{
 834        if (ehc->i.flags & ATA_EHI_HOTPLUGGED)
 835                return sata_deb_timing_hotplug;
 836        else
 837                return sata_deb_timing_normal;
 838}
 839
 840static inline int ata_port_is_dummy(struct ata_port *ap)
 841{
 842        return ap->ops == &ata_dummy_port_ops;
 843}
 844
 845extern void ata_port_probe(struct ata_port *);
 846extern int sata_set_spd(struct ata_link *link);
 847extern int ata_std_prereset(struct ata_link *link, unsigned long deadline);
 848extern int ata_wait_after_reset(struct ata_link *link, unsigned long deadline,
 849                                int (*check_ready)(struct ata_link *link));
 850extern int sata_link_debounce(struct ata_link *link,
 851                        const unsigned long *params, unsigned long deadline);
 852extern int sata_link_resume(struct ata_link *link, const unsigned long *params,
 853                            unsigned long deadline);
 854extern int sata_link_hardreset(struct ata_link *link,
 855                        const unsigned long *timing, unsigned long deadline,
 856                        bool *online, int (*check_ready)(struct ata_link *));
 857extern int sata_std_hardreset(struct ata_link *link, unsigned int *class,
 858                              unsigned long deadline);
 859extern void ata_std_postreset(struct ata_link *link, unsigned int *classes);
 860extern void ata_port_disable(struct ata_port *);
 861
 862extern struct ata_host *ata_host_alloc(struct device *dev, int max_ports);
 863extern struct ata_host *ata_host_alloc_pinfo(struct device *dev,
 864                        const struct ata_port_info * const * ppi, int n_ports);
 865extern int ata_host_start(struct ata_host *host);
 866extern int ata_host_register(struct ata_host *host,
 867                             struct scsi_host_template *sht);
 868extern int ata_host_activate(struct ata_host *host, int irq,
 869                             irq_handler_t irq_handler, unsigned long irq_flags,
 870                             struct scsi_host_template *sht);
 871extern void ata_host_detach(struct ata_host *host);
 872extern void ata_host_init(struct ata_host *, struct device *,
 873                          unsigned long, struct ata_port_operations *);
 874extern int ata_scsi_detect(struct scsi_host_template *sht);
 875extern int ata_scsi_ioctl(struct scsi_device *dev, int cmd, void __user *arg);
 876extern int ata_scsi_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *));
 877extern void ata_sas_port_destroy(struct ata_port *);
 878extern struct ata_port *ata_sas_port_alloc(struct ata_host *,
 879                                           struct ata_port_info *, struct Scsi_Host *);
 880extern int ata_sas_port_init(struct ata_port *);
 881extern int ata_sas_port_start(struct ata_port *ap);
 882extern void ata_sas_port_stop(struct ata_port *ap);
 883extern int ata_sas_slave_configure(struct scsi_device *, struct ata_port *);
 884extern int ata_sas_queuecmd(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *),
 885                            struct ata_port *ap);
 886extern int sata_scr_valid(struct ata_link *link);
 887extern int sata_scr_read(struct ata_link *link, int reg, u32 *val);
 888extern int sata_scr_write(struct ata_link *link, int reg, u32 val);
 889extern int sata_scr_write_flush(struct ata_link *link, int reg, u32 val);
 890extern int ata_link_online(struct ata_link *link);
 891extern int ata_link_offline(struct ata_link *link);
 892#ifdef CONFIG_PM
 893extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
 894extern void ata_host_resume(struct ata_host *host);
 895#endif
 896extern int ata_ratelimit(void);
 897extern u32 ata_wait_register(void __iomem *reg, u32 mask, u32 val,
 898                             unsigned long interval_msec,
 899                             unsigned long timeout_msec);
 900extern int atapi_cmd_type(u8 opcode);
 901extern void ata_tf_to_fis(const struct ata_taskfile *tf,
 902                          u8 pmp, int is_cmd, u8 *fis);
 903extern void ata_tf_from_fis(const u8 *fis, struct ata_taskfile *tf);
 904extern unsigned long ata_pack_xfermask(unsigned long pio_mask,
 905                        unsigned long mwdma_mask, unsigned long udma_mask);
 906extern void ata_unpack_xfermask(unsigned long xfer_mask,
 907                        unsigned long *pio_mask, unsigned long *mwdma_mask,
 908                        unsigned long *udma_mask);
 909extern u8 ata_xfer_mask2mode(unsigned long xfer_mask);
 910extern unsigned long ata_xfer_mode2mask(u8 xfer_mode);
 911extern int ata_xfer_mode2shift(unsigned long xfer_mode);
 912extern const char *ata_mode_string(unsigned long xfer_mask);
 913extern unsigned long ata_id_xfermask(const u16 *id);
 914extern int ata_port_start(struct ata_port *ap);
 915extern int ata_std_qc_defer(struct ata_queued_cmd *qc);
 916extern void ata_noop_qc_prep(struct ata_queued_cmd *qc);
 917extern void ata_sg_init(struct ata_queued_cmd *qc, struct scatterlist *sg,
 918                 unsigned int n_elem);
 919extern unsigned int ata_dev_classify(const struct ata_taskfile *tf);
 920extern void ata_dev_disable(struct ata_device *adev);
 921extern void ata_id_string(const u16 *id, unsigned char *s,
 922                          unsigned int ofs, unsigned int len);
 923extern void ata_id_c_string(const u16 *id, unsigned char *s,
 924                            unsigned int ofs, unsigned int len);
 925extern void ata_qc_complete(struct ata_queued_cmd *qc);
 926extern int ata_qc_complete_multiple(struct ata_port *ap, u32 qc_active);
 927extern void ata_scsi_simulate(struct ata_device *dev, struct scsi_cmnd *cmd,
 928                              void (*done)(struct scsi_cmnd *));
 929extern int ata_std_bios_param(struct scsi_device *sdev,
 930                              struct block_device *bdev,
 931                              sector_t capacity, int geom[]);
 932extern int ata_scsi_slave_config(struct scsi_device *sdev);
 933extern void ata_scsi_slave_destroy(struct scsi_device *sdev);
 934extern int ata_scsi_change_queue_depth(struct scsi_device *sdev,
 935                                       int queue_depth);
 936extern struct ata_device *ata_dev_pair(struct ata_device *adev);
 937extern int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev);
 938
 939extern int ata_cable_40wire(struct ata_port *ap);
 940extern int ata_cable_80wire(struct ata_port *ap);
 941extern int ata_cable_sata(struct ata_port *ap);
 942extern int ata_cable_ignore(struct ata_port *ap);
 943extern int ata_cable_unknown(struct ata_port *ap);
 944
 945/* Timing helpers */
 946extern unsigned int ata_pio_need_iordy(const struct ata_device *);
 947extern const struct ata_timing *ata_timing_find_mode(u8 xfer_mode);
 948extern int ata_timing_compute(struct ata_device *, unsigned short,
 949                              struct ata_timing *, int, int);
 950extern void ata_timing_merge(const struct ata_timing *,
 951                             const struct ata_timing *, struct ata_timing *,
 952                             unsigned int);
 953extern u8 ata_timing_cycle2mode(unsigned int xfer_shift, int cycle);
 954
 955/* PCI */
 956#ifdef CONFIG_PCI
 957struct pci_dev;
 958
 959struct pci_bits {
 960        unsigned int            reg;    /* PCI config register to read */
 961        unsigned int            width;  /* 1 (8 bit), 2 (16 bit), 4 (32 bit) */
 962        unsigned long           mask;
 963        unsigned long           val;
 964};
 965
 966extern int pci_test_config_bits(struct pci_dev *pdev, const struct pci_bits *bits);
 967extern void ata_pci_remove_one(struct pci_dev *pdev);
 968
 969#ifdef CONFIG_PM
 970extern void ata_pci_device_do_suspend(struct pci_dev *pdev, pm_message_t mesg);
 971extern int __must_check ata_pci_device_do_resume(struct pci_dev *pdev);
 972extern int ata_pci_device_suspend(struct pci_dev *pdev, pm_message_t mesg);
 973extern int ata_pci_device_resume(struct pci_dev *pdev);
 974#endif /* CONFIG_PM */
 975#endif /* CONFIG_PCI */
 976
 977/*
 978 * ACPI - drivers/ata/libata-acpi.c
 979 */
 980#ifdef CONFIG_ATA_ACPI
 981static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
 982{
 983        if (ap->pflags & ATA_PFLAG_INIT_GTM_VALID)
 984                return &ap->__acpi_init_gtm;
 985        return NULL;
 986}
 987int ata_acpi_stm(struct ata_port *ap, const struct ata_acpi_gtm *stm);
 988int ata_acpi_gtm(struct ata_port *ap, struct ata_acpi_gtm *stm);
 989unsigned long ata_acpi_gtm_xfermask(struct ata_device *dev,
 990                                    const struct ata_acpi_gtm *gtm);
 991int ata_acpi_cbl_80wire(struct ata_port *ap, const struct ata_acpi_gtm *gtm);
 992#else
 993static inline const struct ata_acpi_gtm *ata_acpi_init_gtm(struct ata_port *ap)
 994{
 995        return NULL;
 996}
 997
 998static inline int ata_acpi_stm(const struct ata_port *ap,
 999                               struct ata_acpi_gtm *stm)
1000{
1001        return -ENOSYS;
1002}
1003
1004static inline int ata_acpi_gtm(const struct ata_port *ap,
1005                               struct ata_acpi_gtm *stm)
1006{
1007        return -ENOSYS;
1008}
1009
1010static inline unsigned int ata_acpi_gtm_xfermask(struct ata_device *dev,
1011                                        const struct ata_acpi_gtm *gtm)
1012{
1013        return 0;
1014}
1015
1016static inline int ata_acpi_cbl_80wire(struct ata_port *ap,
1017                                      const struct ata_acpi_gtm *gtm)
1018{
1019        return 0;
1020}
1021#endif
1022
1023/*
1024 * EH - drivers/ata/libata-eh.c
1025 */
1026extern void ata_port_schedule_eh(struct ata_port *ap);
1027extern int ata_link_abort(struct ata_link *link);
1028extern int ata_port_abort(struct ata_port *ap);
1029extern int ata_port_freeze(struct ata_port *ap);
1030extern int sata_async_notification(struct ata_port *ap);
1031
1032extern void ata_eh_freeze_port(struct ata_port *ap);
1033extern void ata_eh_thaw_port(struct ata_port *ap);
1034
1035extern void ata_eh_qc_complete(struct ata_queued_cmd *qc);
1036extern void ata_eh_qc_retry(struct ata_queued_cmd *qc);
1037extern void ata_eh_analyze_ncq_error(struct ata_link *link);
1038
1039extern void ata_do_eh(struct ata_port *ap, ata_prereset_fn_t prereset,
1040                      ata_reset_fn_t softreset, ata_reset_fn_t hardreset,
1041                      ata_postreset_fn_t postreset);
1042extern void ata_std_error_handler(struct ata_port *ap);
1043
1044/*
1045 * Base operations to inherit from and initializers for sht
1046 *
1047 * Operations
1048 *
1049 * base  : Common to all libata drivers.
1050 * sata  : SATA controllers w/ native interface.
1051 * pmp   : SATA controllers w/ PMP support.
1052 * sff   : SFF ATA controllers w/o BMDMA support.
1053 * bmdma : SFF ATA controllers w/ BMDMA support.
1054 *
1055 * sht initializers
1056 *
1057 * BASE  : Common to all libata drivers.  The user must set
1058 *         sg_tablesize and dma_boundary.
1059 * PIO   : SFF ATA controllers w/ only PIO support.
1060 * BMDMA : SFF ATA controllers w/ BMDMA support.  sg_tablesize and
1061 *         dma_boundary are set to BMDMA limits.
1062 * NCQ   : SATA controllers supporting NCQ.  The user must set
1063 *         sg_tablesize, dma_boundary and can_queue.
1064 */
1065extern const struct ata_port_operations ata_base_port_ops;
1066extern const struct ata_port_operations sata_port_ops;
1067
1068#define ATA_BASE_SHT(drv_name)                                  \
1069        .module                 = THIS_MODULE,                  \
1070        .name                   = drv_name,                     \
1071        .ioctl                  = ata_scsi_ioctl,               \
1072        .queuecommand           = ata_scsi_queuecmd,            \
1073        .can_queue              = ATA_DEF_QUEUE,                \
1074        .this_id                = ATA_SHT_THIS_ID,              \
1075        .cmd_per_lun            = ATA_SHT_CMD_PER_LUN,          \
1076        .emulated               = ATA_SHT_EMULATED,             \
1077        .use_clustering         = ATA_SHT_USE_CLUSTERING,       \
1078        .proc_name              = drv_name,                     \
1079        .slave_configure        = ata_scsi_slave_config,        \
1080        .slave_destroy          = ata_scsi_slave_destroy,       \
1081        .bios_param             = ata_std_bios_param
1082
1083#define ATA_NCQ_SHT(drv_name)                                   \
1084        ATA_BASE_SHT(drv_name),                                 \
1085        .change_queue_depth     = ata_scsi_change_queue_depth
1086
1087/*
1088 * PMP helpers
1089 */
1090#ifdef CONFIG_SATA_PMP
1091static inline bool sata_pmp_supported(struct ata_port *ap)
1092{
1093        return ap->flags & ATA_FLAG_PMP;
1094}
1095
1096static inline bool sata_pmp_attached(struct ata_port *ap)
1097{
1098        return ap->nr_pmp_links != 0;
1099}
1100
1101static inline int ata_is_host_link(const struct ata_link *link)
1102{
1103        return link == &link->ap->link;
1104}
1105#else /* CONFIG_SATA_PMP */
1106static inline bool sata_pmp_supported(struct ata_port *ap)
1107{
1108        return false;
1109}
1110
1111static inline bool sata_pmp_attached(struct ata_port *ap)
1112{
1113        return false;
1114}
1115
1116static inline int ata_is_host_link(const struct ata_link *link)
1117{
1118        return 1;
1119}
1120#endif /* CONFIG_SATA_PMP */
1121
1122static inline int sata_srst_pmp(struct ata_link *link)
1123{
1124        if (sata_pmp_supported(link->ap) && ata_is_host_link(link))
1125                return SATA_PMP_CTRL_PORT;
1126        return link->pmp;
1127}
1128
1129/*
1130 * printk helpers
1131 */
1132#define ata_port_printk(ap, lv, fmt, args...) \
1133        printk("%sata%u: "fmt, lv, (ap)->print_id , ##args)
1134
1135#define ata_link_printk(link, lv, fmt, args...) do { \
1136        if (sata_pmp_attached((link)->ap)) \
1137                printk("%sata%u.%02u: "fmt, lv, (link)->ap->print_id,   \
1138                       (link)->pmp , ##args); \
1139        else \
1140                printk("%sata%u: "fmt, lv, (link)->ap->print_id , ##args); \
1141        } while(0)
1142
1143#define ata_dev_printk(dev, lv, fmt, args...) \
1144        printk("%sata%u.%02u: "fmt, lv, (dev)->link->ap->print_id,      \
1145               (dev)->link->pmp + (dev)->devno , ##args)
1146
1147/*
1148 * ata_eh_info helpers
1149 */
1150extern void __ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
1151        __attribute__ ((format (printf, 2, 3)));
1152extern void ata_ehi_push_desc(struct ata_eh_info *ehi, const char *fmt, ...)
1153        __attribute__ ((format (printf, 2, 3)));
1154extern void ata_ehi_clear_desc(struct ata_eh_info *ehi);
1155
1156static inline void ata_ehi_hotplugged(struct ata_eh_info *ehi)
1157{
1158        ehi->probe_mask |= (1 << ATA_MAX_DEVICES) - 1;
1159        ehi->flags |= ATA_EHI_HOTPLUGGED;
1160        ehi->action |= ATA_EH_RESET | ATA_EH_ENABLE_LINK;
1161        ehi->err_mask |= AC_ERR_ATA_BUS;
1162}
1163
1164/*
1165 * port description helpers
1166 */
1167extern void ata_port_desc(struct ata_port *ap, const char *fmt, ...)
1168        __attribute__ ((format (printf, 2, 3)));
1169#ifdef CONFIG_PCI
1170extern void ata_port_pbar_desc(struct ata_port *ap, int bar, ssize_t offset,
1171                               const char *name);
1172#endif
1173
1174static inline unsigned int ata_tag_valid(unsigned int tag)
1175{
1176        return (tag < ATA_MAX_QUEUE) ? 1 : 0;
1177}
1178
1179static inline unsigned int ata_tag_internal(unsigned int tag)
1180{
1181        return tag == ATA_TAG_INTERNAL;
1182}
1183
1184/*
1185 * device helpers
1186 */
1187static inline unsigned int ata_class_enabled(unsigned int class)
1188{
1189        return class == ATA_DEV_ATA || class == ATA_DEV_ATAPI ||
1190                class == ATA_DEV_PMP || class == ATA_DEV_SEMB;
1191}
1192
1193static inline unsigned int ata_class_disabled(unsigned int class)
1194{
1195        return class == ATA_DEV_ATA_UNSUP || class == ATA_DEV_ATAPI_UNSUP ||
1196                class == ATA_DEV_PMP_UNSUP || class == ATA_DEV_SEMB_UNSUP;
1197}
1198
1199static inline unsigned int ata_class_absent(unsigned int class)
1200{
1201        return !ata_class_enabled(class) && !ata_class_disabled(class);
1202}
1203
1204static inline unsigned int ata_dev_enabled(const struct ata_device *dev)
1205{
1206        return ata_class_enabled(dev->class);
1207}
1208
1209static inline unsigned int ata_dev_disabled(const struct ata_device *dev)
1210{
1211        return ata_class_disabled(dev->class);
1212}
1213
1214static inline unsigned int ata_dev_absent(const struct ata_device *dev)
1215{
1216        return ata_class_absent(dev->class);
1217}
1218
1219/*
1220 * link helpers
1221 */
1222static inline int ata_link_max_devices(const struct ata_link *link)
1223{
1224        if (ata_is_host_link(link) && link->ap->flags & ATA_FLAG_SLAVE_POSS)
1225                return 2;
1226        return 1;
1227}
1228
1229static inline int ata_link_active(struct ata_link *link)
1230{
1231        return ata_tag_valid(link->active_tag) || link->sactive;
1232}
1233
1234static inline struct ata_link *ata_port_first_link(struct ata_port *ap)
1235{
1236        if (sata_pmp_attached(ap))
1237                return ap->pmp_link;
1238        return &ap->link;
1239}
1240
1241static inline struct ata_link *ata_port_next_link(struct ata_link *link)
1242{
1243        struct ata_port *ap = link->ap;
1244
1245        if (ata_is_host_link(link)) {
1246                if (!sata_pmp_attached(ap))
1247                        return NULL;
1248                return ap->pmp_link;
1249        }
1250
1251        if (++link < ap->nr_pmp_links + ap->pmp_link)
1252                return link;
1253        return NULL;
1254}
1255
1256#define __ata_port_for_each_link(lk, ap) \
1257        for ((lk) = &(ap)->link; (lk); (lk) = ata_port_next_link(lk))
1258
1259#define ata_port_for_each_link(link, ap) \
1260        for ((link) = ata_port_first_link(ap); (link); \
1261             (link) = ata_port_next_link(link))
1262
1263#define ata_link_for_each_dev(dev, link) \
1264        for ((dev) = (link)->device; \
1265             (dev) < (link)->device + ata_link_max_devices(link) || ((dev) = NULL); \
1266             (dev)++)
1267
1268#define ata_link_for_each_dev_reverse(dev, link) \
1269        for ((dev) = (link)->device + ata_link_max_devices(link) - 1; \
1270             (dev) >= (link)->device || ((dev) = NULL); (dev)--)
1271
1272/**
1273 *      ata_ncq_enabled - Test whether NCQ is enabled
1274 *      @dev: ATA device to test for
1275 *
1276 *      LOCKING:
1277 *      spin_lock_irqsave(host lock)
1278 *
1279 *      RETURNS:
1280 *      1 if NCQ is enabled for @dev, 0 otherwise.
1281 */
1282static inline int ata_ncq_enabled(struct ata_device *dev)
1283{
1284        return (dev->flags & (ATA_DFLAG_PIO | ATA_DFLAG_NCQ_OFF |
1285                              ATA_DFLAG_NCQ)) == ATA_DFLAG_NCQ;
1286}
1287
1288static inline void ata_qc_set_polling(struct ata_queued_cmd *qc)
1289{
1290        qc->tf.ctl |= ATA_NIEN;
1291}
1292
1293static inline struct ata_queued_cmd *__ata_qc_from_tag(struct ata_port *ap,
1294                                                       unsigned int tag)
1295{
1296        if (likely(ata_tag_valid(tag)))
1297                return &ap->qcmd[tag];
1298        return NULL;
1299}
1300
1301static inline struct ata_queued_cmd *ata_qc_from_tag(struct ata_port *ap,
1302                                                     unsigned int tag)
1303{
1304        struct ata_queued_cmd *qc = __ata_qc_from_tag(ap, tag);
1305
1306        if (unlikely(!qc) || !ap->ops->error_handler)
1307                return qc;
1308
1309        if ((qc->flags & (ATA_QCFLAG_ACTIVE |
1310                          ATA_QCFLAG_FAILED)) == ATA_QCFLAG_ACTIVE)
1311                return qc;
1312
1313        return NULL;
1314}
1315
1316static inline unsigned int ata_qc_raw_nbytes(struct ata_queued_cmd *qc)
1317{
1318        return qc->nbytes - min(qc->extrabytes, qc->nbytes);
1319}
1320
1321static inline void ata_tf_init(struct ata_device *dev, struct ata_taskfile *tf)
1322{
1323        memset(tf, 0, sizeof(*tf));
1324
1325        tf->ctl = dev->link->ap->ctl;
1326        if (dev->devno == 0)
1327                tf->device = ATA_DEVICE_OBS;
1328        else
1329                tf->device = ATA_DEVICE_OBS | ATA_DEV1;
1330}
1331
1332static inline void ata_qc_reinit(struct ata_queued_cmd *qc)
1333{
1334        qc->dma_dir = DMA_NONE;
1335        qc->sg = NULL;
1336        qc->flags = 0;
1337        qc->cursg = NULL;
1338        qc->cursg_ofs = 0;
1339        qc->nbytes = qc->extrabytes = qc->curbytes = 0;
1340        qc->n_elem = 0;
1341        qc->err_mask = 0;
1342        qc->sect_size = ATA_SECT_SIZE;
1343
1344        ata_tf_init(qc->dev, &qc->tf);
1345
1346        /* init result_tf such that it indicates normal completion */
1347        qc->result_tf.command = ATA_DRDY;
1348        qc->result_tf.feature = 0;
1349}
1350
1351static inline int ata_try_flush_cache(const struct ata_device *dev)
1352{
1353        return ata_id_wcache_enabled(dev->id) ||
1354               ata_id_has_flush(dev->id) ||
1355               ata_id_has_flush_ext(dev->id);
1356}
1357
1358static inline unsigned int ac_err_mask(u8 status)
1359{
1360        if (status & (ATA_BUSY | ATA_DRQ))
1361                return AC_ERR_HSM;
1362        if (status & (ATA_ERR | ATA_DF))
1363                return AC_ERR_DEV;
1364        return 0;
1365}
1366
1367static inline unsigned int __ac_err_mask(u8 status)
1368{
1369        unsigned int mask = ac_err_mask(status);
1370        if (mask == 0)
1371                return AC_ERR_OTHER;
1372        return mask;
1373}
1374
1375static inline struct ata_port *ata_shost_to_port(struct Scsi_Host *host)
1376{
1377        return *(struct ata_port **)&host->hostdata[0];
1378}
1379
1380static inline int ata_check_ready(u8 status)
1381{
1382        if (!(status & ATA_BUSY))
1383                return 1;
1384
1385        /* 0xff indicates either no device or device not ready */
1386        if (status == 0xff)
1387                return -ENODEV;
1388
1389        return 0;
1390}
1391
1392
1393/**************************************************************************
1394 * PMP - drivers/ata/libata-pmp.c
1395 */
1396#ifdef CONFIG_SATA_PMP
1397
1398extern const struct ata_port_operations sata_pmp_port_ops;
1399
1400extern int sata_pmp_qc_defer_cmd_switch(struct ata_queued_cmd *qc);
1401extern void sata_pmp_error_handler(struct ata_port *ap);
1402
1403#else /* CONFIG_SATA_PMP */
1404
1405#define sata_pmp_port_ops               sata_port_ops
1406#define sata_pmp_qc_defer_cmd_switch    ata_std_qc_defer
1407#define sata_pmp_error_handler          ata_std_error_handler
1408
1409#endif /* CONFIG_SATA_PMP */
1410
1411
1412/**************************************************************************
1413 * SFF - drivers/ata/libata-sff.c
1414 */
1415#ifdef CONFIG_ATA_SFF
1416
1417extern const struct ata_port_operations ata_sff_port_ops;
1418extern const struct ata_port_operations ata_bmdma_port_ops;
1419
1420/* PIO only, sg_tablesize and dma_boundary limits can be removed */
1421#define ATA_PIO_SHT(drv_name)                                   \
1422        ATA_BASE_SHT(drv_name),                                 \
1423        .sg_tablesize           = LIBATA_MAX_PRD,               \
1424        .dma_boundary           = ATA_DMA_BOUNDARY
1425
1426#define ATA_BMDMA_SHT(drv_name)                                 \
1427        ATA_BASE_SHT(drv_name),                                 \
1428        .sg_tablesize           = LIBATA_MAX_PRD,               \
1429        .dma_boundary           = ATA_DMA_BOUNDARY
1430
1431extern void ata_sff_qc_prep(struct ata_queued_cmd *qc);
1432extern void ata_sff_dumb_qc_prep(struct ata_queued_cmd *qc);
1433extern void ata_sff_dev_select(struct ata_port *ap, unsigned int device);
1434extern u8 ata_sff_check_status(struct ata_port *ap);
1435extern void ata_sff_pause(struct ata_port *ap);
1436extern void ata_sff_dma_pause(struct ata_port *ap);
1437extern int ata_sff_busy_sleep(struct ata_port *ap,
1438                              unsigned long timeout_pat, unsigned long timeout);
1439extern int ata_sff_wait_ready(struct ata_link *link, unsigned long deadline);
1440extern void ata_sff_tf_load(struct ata_port *ap, const struct ata_taskfile *tf);
1441extern void ata_sff_tf_read(struct ata_port *ap, struct ata_taskfile *tf);
1442extern void ata_sff_exec_command(struct ata_port *ap,
1443                                 const struct ata_taskfile *tf);
1444extern unsigned int ata_sff_data_xfer(struct ata_device *dev,
1445                        unsigned char *buf, unsigned int buflen, int rw);
1446extern unsigned int ata_sff_data_xfer_noirq(struct ata_device *dev,
1447                        unsigned char *buf, unsigned int buflen, int rw);
1448extern u8 ata_sff_irq_on(struct ata_port *ap);
1449extern void ata_sff_irq_clear(struct ata_port *ap);
1450extern int ata_sff_hsm_move(struct ata_port *ap, struct ata_queued_cmd *qc,
1451                            u8 status, int in_wq);
1452extern unsigned int ata_sff_qc_issue(struct ata_queued_cmd *qc);
1453extern bool ata_sff_qc_fill_rtf(struct ata_queued_cmd *qc);
1454extern unsigned int ata_sff_host_intr(struct ata_port *ap,
1455                                      struct ata_queued_cmd *qc);
1456extern irqreturn_t ata_sff_interrupt(int irq, void *dev_instance);
1457extern void ata_sff_freeze(struct ata_port *ap);
1458extern void ata_sff_thaw(struct ata_port *ap);
1459extern int ata_sff_prereset(struct ata_link *link, unsigned long deadline);
1460extern unsigned int ata_sff_dev_classify(struct ata_device *dev, int present,
1461                                          u8 *r_err);
1462extern int ata_sff_wait_after_reset(struct ata_link *link, unsigned int devmask,
1463                                    unsigned long deadline);
1464extern int ata_sff_softreset(struct ata_link *link, unsigned int *classes,
1465                             unsigned long deadline);
1466extern int sata_sff_hardreset(struct ata_link *link, unsigned int *class,
1467                               unsigned long deadline);
1468extern void ata_sff_postreset(struct ata_link *link, unsigned int *classes);
1469extern void ata_sff_error_handler(struct ata_port *ap);
1470extern void ata_sff_post_internal_cmd(struct ata_queued_cmd *qc);
1471extern int ata_sff_port_start(struct ata_port *ap);
1472extern void ata_sff_std_ports(struct ata_ioports *ioaddr);
1473extern unsigned long ata_bmdma_mode_filter(struct ata_device *dev,
1474                                           unsigned long xfer_mask);
1475extern void ata_bmdma_setup(struct ata_queued_cmd *qc);
1476extern void ata_bmdma_start(struct ata_queued_cmd *qc);
1477extern void ata_bmdma_stop(struct ata_queued_cmd *qc);
1478extern u8 ata_bmdma_status(struct ata_port *ap);
1479extern void ata_bus_reset(struct ata_port *ap);
1480
1481#ifdef CONFIG_PCI
1482extern int ata_pci_bmdma_clear_simplex(struct pci_dev *pdev);
1483extern int ata_pci_bmdma_init(struct ata_host *host);
1484extern int ata_pci_sff_init_host(struct ata_host *host);
1485extern int ata_pci_sff_prepare_host(struct pci_dev *pdev,
1486                                    const struct ata_port_info * const * ppi,
1487                                    struct ata_host **r_host);
1488extern int ata_pci_sff_activate_host(struct ata_host *host,
1489                                     irq_handler_t irq_handler,
1490                                     struct scsi_host_template *sht);
1491extern int ata_pci_sff_init_one(struct pci_dev *pdev,
1492                                const struct ata_port_info * const * ppi,
1493                                struct scsi_host_template *sht, void *host_priv);
1494#endif /* CONFIG_PCI */
1495
1496/**
1497 *      ata_sff_busy_wait - Wait for a port status register
1498 *      @ap: Port to wait for.
1499 *      @bits: bits that must be clear
1500 *      @max: number of 10uS waits to perform
1501 *
1502 *      Waits up to max*10 microseconds for the selected bits in the port's
1503 *      status register to be cleared.
1504 *      Returns final value of status register.
1505 *
1506 *      LOCKING:
1507 *      Inherited from caller.
1508 */
1509static inline u8 ata_sff_busy_wait(struct ata_port *ap, unsigned int bits,
1510                                   unsigned int max)
1511{
1512        u8 status;
1513
1514        do {
1515                udelay(10);
1516                status = ap->ops->sff_check_status(ap);
1517                max--;
1518        } while (status != 0xff && (status & bits) && (max > 0));
1519
1520        return status;
1521}
1522
1523/**
1524 *      ata_wait_idle - Wait for a port to be idle.
1525 *      @ap: Port to wait for.
1526 *
1527 *      Waits up to 10ms for port's BUSY and DRQ signals to clear.
1528 *      Returns final value of status register.
1529 *
1530 *      LOCKING:
1531 *      Inherited from caller.
1532 */
1533static inline u8 ata_wait_idle(struct ata_port *ap)
1534{
1535        u8 status = ata_sff_busy_wait(ap, ATA_BUSY | ATA_DRQ, 1000);
1536
1537#ifdef ATA_DEBUG
1538        if (status != 0xff && (status & (ATA_BUSY | ATA_DRQ)))
1539                ata_port_printk(ap, KERN_DEBUG, "abnormal Status 0x%X\n",
1540                                status);
1541#endif
1542
1543        return status;
1544}
1545#endif /* CONFIG_ATA_SFF */
1546
1547#endif /* __LINUX_LIBATA_H__ */
1548
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.