1*f2105c61SSimon Glass /* 2*f2105c61SSimon Glass * sata_dwc.h 3*f2105c61SSimon Glass * 4*f2105c61SSimon Glass * Synopsys DesignWare Cores (DWC) SATA host driver 5*f2105c61SSimon Glass * 6*f2105c61SSimon Glass * Author: Mark Miesfeld <mmiesfeld@amcc.com> 7*f2105c61SSimon Glass * 8*f2105c61SSimon Glass * Ported from 2.6.19.2 to 2.6.25/26 by Stefan Roese <sr@denx.de> 9*f2105c61SSimon Glass * Copyright 2008 DENX Software Engineering 10*f2105c61SSimon Glass * 11*f2105c61SSimon Glass * Based on versions provided by AMCC and Synopsys which are: 12*f2105c61SSimon Glass * Copyright 2006 Applied Micro Circuits Corporation 13*f2105c61SSimon Glass * COPYRIGHT (C) 2005 SYNOPSYS, INC. ALL RIGHTS RESERVED 14*f2105c61SSimon Glass * 15*f2105c61SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 16*f2105c61SSimon Glass */ 17*f2105c61SSimon Glass /* 18*f2105c61SSimon Glass * SATA support based on the chip canyonlands. 19*f2105c61SSimon Glass * 20*f2105c61SSimon Glass * 04-17-2009 21*f2105c61SSimon Glass * The local version of this driver for the canyonlands board 22*f2105c61SSimon Glass * does not use interrupts but polls the chip instead. 23*f2105c61SSimon Glass */ 24*f2105c61SSimon Glass 25*f2105c61SSimon Glass 26*f2105c61SSimon Glass #ifndef _SATA_DWC_H_ 27*f2105c61SSimon Glass #define _SATA_DWC_H_ 28*f2105c61SSimon Glass 29*f2105c61SSimon Glass #define __U_BOOT__ 30*f2105c61SSimon Glass 31*f2105c61SSimon Glass #define HZ 100 32*f2105c61SSimon Glass #define READ 0 33*f2105c61SSimon Glass #define WRITE 1 34*f2105c61SSimon Glass 35*f2105c61SSimon Glass enum { 36*f2105c61SSimon Glass ATA_READID_POSTRESET = (1 << 0), 37*f2105c61SSimon Glass 38*f2105c61SSimon Glass ATA_DNXFER_PIO = 0, 39*f2105c61SSimon Glass ATA_DNXFER_DMA = 1, 40*f2105c61SSimon Glass ATA_DNXFER_40C = 2, 41*f2105c61SSimon Glass ATA_DNXFER_FORCE_PIO = 3, 42*f2105c61SSimon Glass ATA_DNXFER_FORCE_PIO0 = 4, 43*f2105c61SSimon Glass 44*f2105c61SSimon Glass ATA_DNXFER_QUIET = (1 << 31), 45*f2105c61SSimon Glass }; 46*f2105c61SSimon Glass 47*f2105c61SSimon Glass enum hsm_task_states { 48*f2105c61SSimon Glass HSM_ST_IDLE, 49*f2105c61SSimon Glass HSM_ST_FIRST, 50*f2105c61SSimon Glass HSM_ST, 51*f2105c61SSimon Glass HSM_ST_LAST, 52*f2105c61SSimon Glass HSM_ST_ERR, 53*f2105c61SSimon Glass }; 54*f2105c61SSimon Glass 55*f2105c61SSimon Glass #define ATA_SHORT_PAUSE ((HZ >> 6) + 1) 56*f2105c61SSimon Glass 57*f2105c61SSimon Glass struct ata_queued_cmd { 58*f2105c61SSimon Glass struct ata_port *ap; 59*f2105c61SSimon Glass struct ata_device *dev; 60*f2105c61SSimon Glass 61*f2105c61SSimon Glass struct ata_taskfile tf; 62*f2105c61SSimon Glass u8 cdb[ATAPI_CDB_LEN]; 63*f2105c61SSimon Glass unsigned long flags; 64*f2105c61SSimon Glass unsigned int tag; 65*f2105c61SSimon Glass unsigned int n_elem; 66*f2105c61SSimon Glass 67*f2105c61SSimon Glass int dma_dir; 68*f2105c61SSimon Glass unsigned int sect_size; 69*f2105c61SSimon Glass 70*f2105c61SSimon Glass unsigned int nbytes; 71*f2105c61SSimon Glass unsigned int extrabytes; 72*f2105c61SSimon Glass unsigned int curbytes; 73*f2105c61SSimon Glass 74*f2105c61SSimon Glass unsigned int err_mask; 75*f2105c61SSimon Glass struct ata_taskfile result_tf; 76*f2105c61SSimon Glass 77*f2105c61SSimon Glass void *private_data; 78*f2105c61SSimon Glass #ifndef __U_BOOT__ 79*f2105c61SSimon Glass void *lldd_task; 80*f2105c61SSimon Glass #endif 81*f2105c61SSimon Glass unsigned char *pdata; 82*f2105c61SSimon Glass }; 83*f2105c61SSimon Glass 84*f2105c61SSimon Glass typedef void (*ata_qc_cb_t) (struct ata_queued_cmd *qc); 85*f2105c61SSimon Glass 86*f2105c61SSimon Glass #define ATA_TAG_POISON 0xfafbfcfdU 87*f2105c61SSimon Glass 88*f2105c61SSimon Glass enum { 89*f2105c61SSimon Glass LIBATA_MAX_PRD = ATA_MAX_PRD / 2, 90*f2105c61SSimon Glass LIBATA_DUMB_MAX_PRD = ATA_MAX_PRD / 4, 91*f2105c61SSimon Glass ATA_MAX_PORTS = 8, 92*f2105c61SSimon Glass ATA_DEF_QUEUE = 1, 93*f2105c61SSimon Glass ATA_MAX_QUEUE = 32, 94*f2105c61SSimon Glass ATA_TAG_INTERNAL = ATA_MAX_QUEUE - 1, 95*f2105c61SSimon Glass ATA_MAX_BUS = 2, 96*f2105c61SSimon Glass ATA_DEF_BUSY_WAIT = 10000, 97*f2105c61SSimon Glass 98*f2105c61SSimon Glass ATAPI_MAX_DRAIN = 16 << 10, 99*f2105c61SSimon Glass 100*f2105c61SSimon Glass ATA_SHT_EMULATED = 1, 101*f2105c61SSimon Glass ATA_SHT_CMD_PER_LUN = 1, 102*f2105c61SSimon Glass ATA_SHT_THIS_ID = -1, 103*f2105c61SSimon Glass ATA_SHT_USE_CLUSTERING = 1, 104*f2105c61SSimon Glass 105*f2105c61SSimon Glass ATA_DFLAG_LBA = (1 << 0), 106*f2105c61SSimon Glass ATA_DFLAG_LBA48 = (1 << 1), 107*f2105c61SSimon Glass ATA_DFLAG_CDB_INTR = (1 << 2), 108*f2105c61SSimon Glass ATA_DFLAG_NCQ = (1 << 3), 109*f2105c61SSimon Glass ATA_DFLAG_FLUSH_EXT = (1 << 4), 110*f2105c61SSimon Glass ATA_DFLAG_ACPI_PENDING = (1 << 5), 111*f2105c61SSimon Glass ATA_DFLAG_ACPI_FAILED = (1 << 6), 112*f2105c61SSimon Glass ATA_DFLAG_AN = (1 << 7), 113*f2105c61SSimon Glass ATA_DFLAG_HIPM = (1 << 8), 114*f2105c61SSimon Glass ATA_DFLAG_DIPM = (1 << 9), 115*f2105c61SSimon Glass ATA_DFLAG_DMADIR = (1 << 10), 116*f2105c61SSimon Glass ATA_DFLAG_CFG_MASK = (1 << 12) - 1, 117*f2105c61SSimon Glass 118*f2105c61SSimon Glass ATA_DFLAG_PIO = (1 << 12), 119*f2105c61SSimon Glass ATA_DFLAG_NCQ_OFF = (1 << 13), 120*f2105c61SSimon Glass ATA_DFLAG_SPUNDOWN = (1 << 14), 121*f2105c61SSimon Glass ATA_DFLAG_SLEEPING = (1 << 15), 122*f2105c61SSimon Glass ATA_DFLAG_DUBIOUS_XFER = (1 << 16), 123*f2105c61SSimon Glass ATA_DFLAG_INIT_MASK = (1 << 24) - 1, 124*f2105c61SSimon Glass 125*f2105c61SSimon Glass ATA_DFLAG_DETACH = (1 << 24), 126*f2105c61SSimon Glass ATA_DFLAG_DETACHED = (1 << 25), 127*f2105c61SSimon Glass 128*f2105c61SSimon Glass ATA_LFLAG_HRST_TO_RESUME = (1 << 0), 129*f2105c61SSimon Glass ATA_LFLAG_SKIP_D2H_BSY = (1 << 1), 130*f2105c61SSimon Glass ATA_LFLAG_NO_SRST = (1 << 2), 131*f2105c61SSimon Glass ATA_LFLAG_ASSUME_ATA = (1 << 3), 132*f2105c61SSimon Glass ATA_LFLAG_ASSUME_SEMB = (1 << 4), 133*f2105c61SSimon Glass ATA_LFLAG_ASSUME_CLASS = ATA_LFLAG_ASSUME_ATA | ATA_LFLAG_ASSUME_SEMB, 134*f2105c61SSimon Glass ATA_LFLAG_NO_RETRY = (1 << 5), 135*f2105c61SSimon Glass ATA_LFLAG_DISABLED = (1 << 6), 136*f2105c61SSimon Glass 137*f2105c61SSimon Glass ATA_FLAG_SLAVE_POSS = (1 << 0), 138*f2105c61SSimon Glass ATA_FLAG_SATA = (1 << 1), 139*f2105c61SSimon Glass ATA_FLAG_NO_LEGACY = (1 << 2), 140*f2105c61SSimon Glass ATA_FLAG_MMIO = (1 << 3), 141*f2105c61SSimon Glass ATA_FLAG_SRST = (1 << 4), 142*f2105c61SSimon Glass ATA_FLAG_SATA_RESET = (1 << 5), 143*f2105c61SSimon Glass ATA_FLAG_NO_ATAPI = (1 << 6), 144*f2105c61SSimon Glass ATA_FLAG_PIO_DMA = (1 << 7), 145*f2105c61SSimon Glass ATA_FLAG_PIO_LBA48 = (1 << 8), 146*f2105c61SSimon Glass ATA_FLAG_PIO_POLLING = (1 << 9), 147*f2105c61SSimon Glass ATA_FLAG_NCQ = (1 << 10), 148*f2105c61SSimon Glass ATA_FLAG_DEBUGMSG = (1 << 13), 149*f2105c61SSimon Glass ATA_FLAG_IGN_SIMPLEX = (1 << 15), 150*f2105c61SSimon Glass ATA_FLAG_NO_IORDY = (1 << 16), 151*f2105c61SSimon Glass ATA_FLAG_ACPI_SATA = (1 << 17), 152*f2105c61SSimon Glass ATA_FLAG_AN = (1 << 18), 153*f2105c61SSimon Glass ATA_FLAG_PMP = (1 << 19), 154*f2105c61SSimon Glass ATA_FLAG_IPM = (1 << 20), 155*f2105c61SSimon Glass 156*f2105c61SSimon Glass ATA_FLAG_DISABLED = (1 << 23), 157*f2105c61SSimon Glass 158*f2105c61SSimon Glass ATA_PFLAG_EH_PENDING = (1 << 0), 159*f2105c61SSimon Glass ATA_PFLAG_EH_IN_PROGRESS = (1 << 1), 160*f2105c61SSimon Glass ATA_PFLAG_FROZEN = (1 << 2), 161*f2105c61SSimon Glass ATA_PFLAG_RECOVERED = (1 << 3), 162*f2105c61SSimon Glass ATA_PFLAG_LOADING = (1 << 4), 163*f2105c61SSimon Glass ATA_PFLAG_UNLOADING = (1 << 5), 164*f2105c61SSimon Glass ATA_PFLAG_SCSI_HOTPLUG = (1 << 6), 165*f2105c61SSimon Glass ATA_PFLAG_INITIALIZING = (1 << 7), 166*f2105c61SSimon Glass ATA_PFLAG_RESETTING = (1 << 8), 167*f2105c61SSimon Glass ATA_PFLAG_SUSPENDED = (1 << 17), 168*f2105c61SSimon Glass ATA_PFLAG_PM_PENDING = (1 << 18), 169*f2105c61SSimon Glass 170*f2105c61SSimon Glass ATA_QCFLAG_ACTIVE = (1 << 0), 171*f2105c61SSimon Glass ATA_QCFLAG_DMAMAP = (1 << 1), 172*f2105c61SSimon Glass ATA_QCFLAG_IO = (1 << 3), 173*f2105c61SSimon Glass ATA_QCFLAG_RESULT_TF = (1 << 4), 174*f2105c61SSimon Glass ATA_QCFLAG_CLEAR_EXCL = (1 << 5), 175*f2105c61SSimon Glass ATA_QCFLAG_QUIET = (1 << 6), 176*f2105c61SSimon Glass 177*f2105c61SSimon Glass ATA_QCFLAG_FAILED = (1 << 16), 178*f2105c61SSimon Glass ATA_QCFLAG_SENSE_VALID = (1 << 17), 179*f2105c61SSimon Glass ATA_QCFLAG_EH_SCHEDULED = (1 << 18), 180*f2105c61SSimon Glass 181*f2105c61SSimon Glass ATA_HOST_SIMPLEX = (1 << 0), 182*f2105c61SSimon Glass ATA_HOST_STARTED = (1 << 1), 183*f2105c61SSimon Glass 184*f2105c61SSimon Glass ATA_TMOUT_BOOT = 30 * 100, 185*f2105c61SSimon Glass ATA_TMOUT_BOOT_QUICK = 7 * 100, 186*f2105c61SSimon Glass ATA_TMOUT_INTERNAL = 30 * 100, 187*f2105c61SSimon Glass ATA_TMOUT_INTERNAL_QUICK = 5 * 100, 188*f2105c61SSimon Glass 189*f2105c61SSimon Glass /* FIXME: GoVault needs 2s but we can't afford that without 190*f2105c61SSimon Glass * parallel probing. 800ms is enough for iVDR disk 191*f2105c61SSimon Glass * HHD424020F7SV00. Increase to 2secs when parallel probing 192*f2105c61SSimon Glass * is in place. 193*f2105c61SSimon Glass */ 194*f2105c61SSimon Glass ATA_TMOUT_FF_WAIT = 4 * 100 / 5, 195*f2105c61SSimon Glass 196*f2105c61SSimon Glass BUS_UNKNOWN = 0, 197*f2105c61SSimon Glass BUS_DMA = 1, 198*f2105c61SSimon Glass BUS_IDLE = 2, 199*f2105c61SSimon Glass BUS_NOINTR = 3, 200*f2105c61SSimon Glass BUS_NODATA = 4, 201*f2105c61SSimon Glass BUS_TIMER = 5, 202*f2105c61SSimon Glass BUS_PIO = 6, 203*f2105c61SSimon Glass BUS_EDD = 7, 204*f2105c61SSimon Glass BUS_IDENTIFY = 8, 205*f2105c61SSimon Glass BUS_PACKET = 9, 206*f2105c61SSimon Glass 207*f2105c61SSimon Glass PORT_UNKNOWN = 0, 208*f2105c61SSimon Glass PORT_ENABLED = 1, 209*f2105c61SSimon Glass PORT_DISABLED = 2, 210*f2105c61SSimon Glass 211*f2105c61SSimon Glass /* encoding various smaller bitmaps into a single 212*f2105c61SSimon Glass * unsigned long bitmap 213*f2105c61SSimon Glass */ 214*f2105c61SSimon Glass ATA_NR_PIO_MODES = 7, 215*f2105c61SSimon Glass ATA_NR_MWDMA_MODES = 5, 216*f2105c61SSimon Glass ATA_NR_UDMA_MODES = 8, 217*f2105c61SSimon Glass 218*f2105c61SSimon Glass ATA_SHIFT_PIO = 0, 219*f2105c61SSimon Glass ATA_SHIFT_MWDMA = ATA_SHIFT_PIO + ATA_NR_PIO_MODES, 220*f2105c61SSimon Glass ATA_SHIFT_UDMA = ATA_SHIFT_MWDMA + ATA_NR_MWDMA_MODES, 221*f2105c61SSimon Glass 222*f2105c61SSimon Glass ATA_DMA_PAD_SZ = 4, 223*f2105c61SSimon Glass 224*f2105c61SSimon Glass ATA_ERING_SIZE = 32, 225*f2105c61SSimon Glass 226*f2105c61SSimon Glass ATA_DEFER_LINK = 1, 227*f2105c61SSimon Glass ATA_DEFER_PORT = 2, 228*f2105c61SSimon Glass 229*f2105c61SSimon Glass ATA_EH_DESC_LEN = 80, 230*f2105c61SSimon Glass 231*f2105c61SSimon Glass ATA_EH_REVALIDATE = (1 << 0), 232*f2105c61SSimon Glass ATA_EH_SOFTRESET = (1 << 1), 233*f2105c61SSimon Glass ATA_EH_HARDRESET = (1 << 2), 234*f2105c61SSimon Glass ATA_EH_ENABLE_LINK = (1 << 3), 235*f2105c61SSimon Glass ATA_EH_LPM = (1 << 4), 236*f2105c61SSimon Glass 237*f2105c61SSimon Glass ATA_EH_RESET_MASK = ATA_EH_SOFTRESET | ATA_EH_HARDRESET, 238*f2105c61SSimon Glass ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE, 239*f2105c61SSimon Glass 240*f2105c61SSimon Glass ATA_EHI_HOTPLUGGED = (1 << 0), 241*f2105c61SSimon Glass ATA_EHI_RESUME_LINK = (1 << 1), 242*f2105c61SSimon Glass ATA_EHI_NO_AUTOPSY = (1 << 2), 243*f2105c61SSimon Glass ATA_EHI_QUIET = (1 << 3), 244*f2105c61SSimon Glass 245*f2105c61SSimon Glass ATA_EHI_DID_SOFTRESET = (1 << 16), 246*f2105c61SSimon Glass ATA_EHI_DID_HARDRESET = (1 << 17), 247*f2105c61SSimon Glass ATA_EHI_PRINTINFO = (1 << 18), 248*f2105c61SSimon Glass ATA_EHI_SETMODE = (1 << 19), 249*f2105c61SSimon Glass ATA_EHI_POST_SETMODE = (1 << 20), 250*f2105c61SSimon Glass 251*f2105c61SSimon Glass ATA_EHI_DID_RESET = ATA_EHI_DID_SOFTRESET | ATA_EHI_DID_HARDRESET, 252*f2105c61SSimon Glass ATA_EHI_RESET_MODIFIER_MASK = ATA_EHI_RESUME_LINK, 253*f2105c61SSimon Glass 254*f2105c61SSimon Glass ATA_EH_MAX_TRIES = 5, 255*f2105c61SSimon Glass 256*f2105c61SSimon Glass ATA_PROBE_MAX_TRIES = 3, 257*f2105c61SSimon Glass ATA_EH_DEV_TRIES = 3, 258*f2105c61SSimon Glass ATA_EH_PMP_TRIES = 5, 259*f2105c61SSimon Glass ATA_EH_PMP_LINK_TRIES = 3, 260*f2105c61SSimon Glass 261*f2105c61SSimon Glass SATA_PMP_SCR_TIMEOUT = 250, 262*f2105c61SSimon Glass 263*f2105c61SSimon Glass /* Horkage types. May be set by libata or controller on drives 264*f2105c61SSimon Glass (some horkage may be drive/controller pair dependant */ 265*f2105c61SSimon Glass 266*f2105c61SSimon Glass ATA_HORKAGE_DIAGNOSTIC = (1 << 0), 267*f2105c61SSimon Glass ATA_HORKAGE_NODMA = (1 << 1), 268*f2105c61SSimon Glass ATA_HORKAGE_NONCQ = (1 << 2), 269*f2105c61SSimon Glass ATA_HORKAGE_MAX_SEC_128 = (1 << 3), 270*f2105c61SSimon Glass ATA_HORKAGE_BROKEN_HPA = (1 << 4), 271*f2105c61SSimon Glass ATA_HORKAGE_SKIP_PM = (1 << 5), 272*f2105c61SSimon Glass ATA_HORKAGE_HPA_SIZE = (1 << 6), 273*f2105c61SSimon Glass ATA_HORKAGE_IPM = (1 << 7), 274*f2105c61SSimon Glass ATA_HORKAGE_IVB = (1 << 8), 275*f2105c61SSimon Glass ATA_HORKAGE_STUCK_ERR = (1 << 9), 276*f2105c61SSimon Glass 277*f2105c61SSimon Glass ATA_DMA_MASK_ATA = (1 << 0), 278*f2105c61SSimon Glass ATA_DMA_MASK_ATAPI = (1 << 1), 279*f2105c61SSimon Glass ATA_DMA_MASK_CFA = (1 << 2), 280*f2105c61SSimon Glass 281*f2105c61SSimon Glass ATAPI_READ = 0, 282*f2105c61SSimon Glass ATAPI_WRITE = 1, 283*f2105c61SSimon Glass ATAPI_READ_CD = 2, 284*f2105c61SSimon Glass ATAPI_PASS_THRU = 3, 285*f2105c61SSimon Glass ATAPI_MISC = 4, 286*f2105c61SSimon Glass }; 287*f2105c61SSimon Glass 288*f2105c61SSimon Glass enum ata_completion_errors { 289*f2105c61SSimon Glass AC_ERR_DEV = (1 << 0), 290*f2105c61SSimon Glass AC_ERR_HSM = (1 << 1), 291*f2105c61SSimon Glass AC_ERR_TIMEOUT = (1 << 2), 292*f2105c61SSimon Glass AC_ERR_MEDIA = (1 << 3), 293*f2105c61SSimon Glass AC_ERR_ATA_BUS = (1 << 4), 294*f2105c61SSimon Glass AC_ERR_HOST_BUS = (1 << 5), 295*f2105c61SSimon Glass AC_ERR_SYSTEM = (1 << 6), 296*f2105c61SSimon Glass AC_ERR_INVALID = (1 << 7), 297*f2105c61SSimon Glass AC_ERR_OTHER = (1 << 8), 298*f2105c61SSimon Glass AC_ERR_NODEV_HINT = (1 << 9), 299*f2105c61SSimon Glass AC_ERR_NCQ = (1 << 10), 300*f2105c61SSimon Glass }; 301*f2105c61SSimon Glass 302*f2105c61SSimon Glass enum ata_xfer_mask { 303*f2105c61SSimon Glass ATA_MASK_PIO = ((1LU << ATA_NR_PIO_MODES) - 1) << ATA_SHIFT_PIO, 304*f2105c61SSimon Glass ATA_MASK_MWDMA = ((1LU << ATA_NR_MWDMA_MODES) - 1) << ATA_SHIFT_MWDMA, 305*f2105c61SSimon Glass ATA_MASK_UDMA = ((1LU << ATA_NR_UDMA_MODES) - 1) << ATA_SHIFT_UDMA, 306*f2105c61SSimon Glass }; 307*f2105c61SSimon Glass 308*f2105c61SSimon Glass struct ata_port_info { 309*f2105c61SSimon Glass #ifndef __U_BOOT__ 310*f2105c61SSimon Glass struct scsi_host_template *sht; 311*f2105c61SSimon Glass #endif 312*f2105c61SSimon Glass unsigned long flags; 313*f2105c61SSimon Glass unsigned long link_flags; 314*f2105c61SSimon Glass unsigned long pio_mask; 315*f2105c61SSimon Glass unsigned long mwdma_mask; 316*f2105c61SSimon Glass unsigned long udma_mask; 317*f2105c61SSimon Glass #ifndef __U_BOOT__ 318*f2105c61SSimon Glass const struct ata_port_operations *port_ops; 319*f2105c61SSimon Glass void *private_data; 320*f2105c61SSimon Glass #endif 321*f2105c61SSimon Glass }; 322*f2105c61SSimon Glass 323*f2105c61SSimon Glass struct ata_ioports { 324*f2105c61SSimon Glass void __iomem *cmd_addr; 325*f2105c61SSimon Glass void __iomem *data_addr; 326*f2105c61SSimon Glass void __iomem *error_addr; 327*f2105c61SSimon Glass void __iomem *feature_addr; 328*f2105c61SSimon Glass void __iomem *nsect_addr; 329*f2105c61SSimon Glass void __iomem *lbal_addr; 330*f2105c61SSimon Glass void __iomem *lbam_addr; 331*f2105c61SSimon Glass void __iomem *lbah_addr; 332*f2105c61SSimon Glass void __iomem *device_addr; 333*f2105c61SSimon Glass void __iomem *status_addr; 334*f2105c61SSimon Glass void __iomem *command_addr; 335*f2105c61SSimon Glass void __iomem *altstatus_addr; 336*f2105c61SSimon Glass void __iomem *ctl_addr; 337*f2105c61SSimon Glass #ifndef __U_BOOT__ 338*f2105c61SSimon Glass void __iomem *bmdma_addr; 339*f2105c61SSimon Glass #endif 340*f2105c61SSimon Glass void __iomem *scr_addr; 341*f2105c61SSimon Glass }; 342*f2105c61SSimon Glass 343*f2105c61SSimon Glass struct ata_host { 344*f2105c61SSimon Glass #ifndef __U_BOOT__ 345*f2105c61SSimon Glass void __iomem * const *iomap; 346*f2105c61SSimon Glass void *private_data; 347*f2105c61SSimon Glass const struct ata_port_operations *ops; 348*f2105c61SSimon Glass unsigned long flags; 349*f2105c61SSimon Glass struct ata_port *simplex_claimed; 350*f2105c61SSimon Glass #endif 351*f2105c61SSimon Glass unsigned int n_ports; 352*f2105c61SSimon Glass struct ata_port *ports[0]; 353*f2105c61SSimon Glass }; 354*f2105c61SSimon Glass 355*f2105c61SSimon Glass #ifndef __U_BOOT__ 356*f2105c61SSimon Glass struct ata_port_stats { 357*f2105c61SSimon Glass unsigned long unhandled_irq; 358*f2105c61SSimon Glass unsigned long idle_irq; 359*f2105c61SSimon Glass unsigned long rw_reqbuf; 360*f2105c61SSimon Glass }; 361*f2105c61SSimon Glass #endif 362*f2105c61SSimon Glass 363*f2105c61SSimon Glass struct ata_device { 364*f2105c61SSimon Glass struct ata_link *link; 365*f2105c61SSimon Glass unsigned int devno; 366*f2105c61SSimon Glass unsigned long flags; 367*f2105c61SSimon Glass unsigned int horkage; 368*f2105c61SSimon Glass #ifndef __U_BOOT__ 369*f2105c61SSimon Glass struct scsi_device *sdev; 370*f2105c61SSimon Glass #ifdef CONFIG_ATA_ACPI 371*f2105c61SSimon Glass acpi_handle acpi_handle; 372*f2105c61SSimon Glass union acpi_object *gtf_cache; 373*f2105c61SSimon Glass #endif 374*f2105c61SSimon Glass #endif 375*f2105c61SSimon Glass u64 n_sectors; 376*f2105c61SSimon Glass unsigned int class; 377*f2105c61SSimon Glass 378*f2105c61SSimon Glass union { 379*f2105c61SSimon Glass u16 id[ATA_ID_WORDS]; 380*f2105c61SSimon Glass u32 gscr[SATA_PMP_GSCR_DWORDS]; 381*f2105c61SSimon Glass }; 382*f2105c61SSimon Glass #ifndef __U_BOOT__ 383*f2105c61SSimon Glass u8 pio_mode; 384*f2105c61SSimon Glass u8 dma_mode; 385*f2105c61SSimon Glass u8 xfer_mode; 386*f2105c61SSimon Glass unsigned int xfer_shift; 387*f2105c61SSimon Glass #endif 388*f2105c61SSimon Glass unsigned int multi_count; 389*f2105c61SSimon Glass unsigned int max_sectors; 390*f2105c61SSimon Glass unsigned int cdb_len; 391*f2105c61SSimon Glass #ifndef __U_BOOT__ 392*f2105c61SSimon Glass unsigned long pio_mask; 393*f2105c61SSimon Glass unsigned long mwdma_mask; 394*f2105c61SSimon Glass #endif 395*f2105c61SSimon Glass unsigned long udma_mask; 396*f2105c61SSimon Glass u16 cylinders; 397*f2105c61SSimon Glass u16 heads; 398*f2105c61SSimon Glass u16 sectors; 399*f2105c61SSimon Glass #ifndef __U_BOOT__ 400*f2105c61SSimon Glass int spdn_cnt; 401*f2105c61SSimon Glass #endif 402*f2105c61SSimon Glass }; 403*f2105c61SSimon Glass 404*f2105c61SSimon Glass struct ata_link { 405*f2105c61SSimon Glass struct ata_port *ap; 406*f2105c61SSimon Glass int pmp; 407*f2105c61SSimon Glass unsigned int active_tag; 408*f2105c61SSimon Glass u32 sactive; 409*f2105c61SSimon Glass unsigned int flags; 410*f2105c61SSimon Glass unsigned int hw_sata_spd_limit; 411*f2105c61SSimon Glass #ifndef __U_BOOT__ 412*f2105c61SSimon Glass unsigned int sata_spd_limit; 413*f2105c61SSimon Glass unsigned int sata_spd; 414*f2105c61SSimon Glass struct ata_device device[2]; 415*f2105c61SSimon Glass #endif 416*f2105c61SSimon Glass }; 417*f2105c61SSimon Glass 418*f2105c61SSimon Glass struct ata_port { 419*f2105c61SSimon Glass unsigned long flags; 420*f2105c61SSimon Glass unsigned int pflags; 421*f2105c61SSimon Glass unsigned int print_id; 422*f2105c61SSimon Glass unsigned int port_no; 423*f2105c61SSimon Glass 424*f2105c61SSimon Glass struct ata_ioports ioaddr; 425*f2105c61SSimon Glass 426*f2105c61SSimon Glass u8 ctl; 427*f2105c61SSimon Glass u8 last_ctl; 428*f2105c61SSimon Glass unsigned int pio_mask; 429*f2105c61SSimon Glass unsigned int mwdma_mask; 430*f2105c61SSimon Glass unsigned int udma_mask; 431*f2105c61SSimon Glass unsigned int cbl; 432*f2105c61SSimon Glass 433*f2105c61SSimon Glass struct ata_queued_cmd qcmd[ATA_MAX_QUEUE]; 434*f2105c61SSimon Glass unsigned long qc_allocated; 435*f2105c61SSimon Glass unsigned int qc_active; 436*f2105c61SSimon Glass int nr_active_links; 437*f2105c61SSimon Glass 438*f2105c61SSimon Glass struct ata_link link; 439*f2105c61SSimon Glass #ifndef __U_BOOT__ 440*f2105c61SSimon Glass int nr_pmp_links; 441*f2105c61SSimon Glass struct ata_link *pmp_link; 442*f2105c61SSimon Glass #endif 443*f2105c61SSimon Glass struct ata_link *excl_link; 444*f2105c61SSimon Glass int nr_pmp_links; 445*f2105c61SSimon Glass #ifndef __U_BOOT__ 446*f2105c61SSimon Glass struct ata_port_stats stats; 447*f2105c61SSimon Glass struct device *dev; 448*f2105c61SSimon Glass u32 msg_enable; 449*f2105c61SSimon Glass #endif 450*f2105c61SSimon Glass struct ata_host *host; 451*f2105c61SSimon Glass void *port_task_data; 452*f2105c61SSimon Glass 453*f2105c61SSimon Glass unsigned int hsm_task_state; 454*f2105c61SSimon Glass void *private_data; 455*f2105c61SSimon Glass unsigned char *pdata; 456*f2105c61SSimon Glass }; 457*f2105c61SSimon Glass 458*f2105c61SSimon Glass #endif 459