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