ahci: move ahci_sb600_softreset to libahci.c and rename it
[linux-2.6.git] / drivers / ata / ahci.h
index 733def2..b175000 100644 (file)
@@ -72,6 +72,7 @@ enum {
        AHCI_CMD_RESET          = (1 << 8),
        AHCI_CMD_CLR_BUSY       = (1 << 10),
 
+       RX_FIS_PIO_SETUP        = 0x20, /* offset of PIO Setup FIS data */
        RX_FIS_D2H_REG          = 0x40, /* offset of D2H Register FIS data */
        RX_FIS_SDB              = 0x58, /* offset of SDB FIS data */
        RX_FIS_UNK              = 0x60, /* offset of Unknown FIS data */
@@ -201,7 +202,6 @@ enum {
        AHCI_HFLAG_MV_PATA              = (1 << 4), /* PATA port */
        AHCI_HFLAG_NO_MSI               = (1 << 5), /* no PCI MSI */
        AHCI_HFLAG_NO_PMP               = (1 << 6), /* no PMP */
-       AHCI_HFLAG_NO_HOTPLUG           = (1 << 7), /* ignore PxSERR.DIAG.N */
        AHCI_HFLAG_SECT255              = (1 << 8), /* max 255 sectors */
        AHCI_HFLAG_YES_NCQ              = (1 << 9), /* force NCQ cap on */
        AHCI_HFLAG_NO_SUSPEND           = (1 << 10), /* don't suspend */
@@ -209,13 +209,12 @@ enum {
                                                        link offline */
        AHCI_HFLAG_NO_SNTF              = (1 << 12), /* no sntf */
        AHCI_HFLAG_NO_FPDMA_AA          = (1 << 13), /* no FPDMA AA */
+       AHCI_HFLAG_YES_FBS              = (1 << 14), /* force FBS cap on */
 
        /* ap->flags bits */
 
-       AHCI_FLAG_COMMON                = ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
-                                         ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
-                                         ATA_FLAG_ACPI_SATA | ATA_FLAG_AN |
-                                         ATA_FLAG_IPM,
+       AHCI_FLAG_COMMON                = ATA_FLAG_SATA | ATA_FLAG_PIO_DMA |
+                                         ATA_FLAG_ACPI_SATA | ATA_FLAG_AN,
 
        ICH_MAP                         = 0x90, /* ICH MAP register */
 
@@ -224,9 +223,22 @@ enum {
        EM_MAX_RETRY                    = 5,
 
        /* em_ctl bits */
-       EM_CTL_RST                      = (1 << 9), /* Reset */
-       EM_CTL_TM                       = (1 << 8), /* Transmit Message */
-       EM_CTL_ALHD                     = (1 << 26), /* Activity LED */
+       EM_CTL_RST              = (1 << 9), /* Reset */
+       EM_CTL_TM               = (1 << 8), /* Transmit Message */
+       EM_CTL_MR               = (1 << 0), /* Message Received */
+       EM_CTL_ALHD             = (1 << 26), /* Activity LED */
+       EM_CTL_XMT              = (1 << 25), /* Transmit Only */
+       EM_CTL_SMB              = (1 << 24), /* Single Message Buffer */
+       EM_CTL_SGPIO            = (1 << 19), /* SGPIO messages supported */
+       EM_CTL_SES              = (1 << 18), /* SES-2 messages supported */
+       EM_CTL_SAFTE            = (1 << 17), /* SAF-TE messages supported */
+       EM_CTL_LED              = (1 << 16), /* LED messages supported */
+
+       /* em message type */
+       EM_MSG_TYPE_LED         = (1 << 0), /* LED */
+       EM_MSG_TYPE_SAFTE       = (1 << 1), /* SAF-TE */
+       EM_MSG_TYPE_SES2        = (1 << 2), /* SES-2 */
+       EM_MSG_TYPE_SGPIO       = (1 << 3), /* SGPIO */
 };
 
 struct ahci_cmd_hdr {
@@ -273,7 +285,7 @@ struct ahci_port_priv {
 };
 
 struct ahci_host_priv {
-       void __iomem *          mmio;           /* bus-independant mem map */
+       void __iomem *          mmio;           /* bus-independent mem map */
        unsigned int            flags;          /* AHCI_HFLAG_* */
        u32                     cap;            /* cap to use */
        u32                     cap2;           /* cap2 to use */
@@ -282,14 +294,28 @@ struct ahci_host_priv {
        u32                     saved_cap2;     /* saved initial cap2 */
        u32                     saved_port_map; /* saved initial port_map */
        u32                     em_loc; /* enclosure management location */
+       u32                     em_buf_sz;      /* EM buffer size in byte */
+       u32                     em_msg_type;    /* EM message type */
 };
 
-extern int ahci_em_messages;
 extern int ahci_ignore_sss;
 
-extern struct scsi_host_template ahci_sht;
+extern struct device_attribute *ahci_shost_attrs[];
+extern struct device_attribute *ahci_sdev_attrs[];
+
+#define AHCI_SHT(drv_name)                                             \
+       ATA_NCQ_SHT(drv_name),                                          \
+       .can_queue              = AHCI_MAX_CMDS - 1,                    \
+       .sg_tablesize           = AHCI_MAX_SG,                          \
+       .dma_boundary           = AHCI_DMA_BOUNDARY,                    \
+       .shost_attrs            = ahci_shost_attrs,                     \
+       .sdev_attrs             = ahci_sdev_attrs
+
 extern struct ata_port_operations ahci_ops;
+extern struct ata_port_operations ahci_pmp_retry_srst_ops;
 
+void ahci_fill_cmd_slot(struct ahci_port_priv *pp, unsigned int tag,
+                       u32 opts);
 void ahci_save_initial_config(struct device *dev,
                              struct ahci_host_priv *hpriv,
                              unsigned int force_port_map,
@@ -305,6 +331,7 @@ int ahci_stop_engine(struct ata_port *ap);
 void ahci_start_engine(struct ata_port *ap);
 int ahci_check_ready(struct ata_link *link);
 int ahci_kick_engine(struct ata_port *ap);
+int ahci_port_resume(struct ata_port *ap);
 void ahci_set_em_messages(struct ahci_host_priv *hpriv,
                          struct ata_port_info *pi);
 int ahci_reset_em(struct ata_host *host);