sata_dwc.h 11 KB

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