pata_bfin.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * Driver for Blackfin on-chip ATAPI controller.
  3. *
  4. * Enter bugs at http://blackfin.uclinux.org/
  5. *
  6. * Copyright (c) 2008 Analog Devices Inc.
  7. *
  8. * Licensed under the GPL-2 or later.
  9. */
  10. #ifndef PATA_BFIN_H
  11. #define PATA_BFIN_H
  12. #include <asm/blackfin_local.h>
  13. struct ata_ioports {
  14. unsigned long cmd_addr;
  15. unsigned long data_addr;
  16. unsigned long error_addr;
  17. unsigned long feature_addr;
  18. unsigned long nsect_addr;
  19. unsigned long lbal_addr;
  20. unsigned long lbam_addr;
  21. unsigned long lbah_addr;
  22. unsigned long device_addr;
  23. unsigned long status_addr;
  24. unsigned long command_addr;
  25. unsigned long altstatus_addr;
  26. unsigned long ctl_addr;
  27. unsigned long bmdma_addr;
  28. unsigned long scr_addr;
  29. };
  30. struct ata_port {
  31. unsigned int port_no; /* primary=0, secondary=1 */
  32. struct ata_ioports ioaddr; /* ATA cmd/ctl/dma reg blks */
  33. unsigned long flag;
  34. unsigned int ata_mode;
  35. unsigned char ctl_reg;
  36. unsigned char last_ctl;
  37. unsigned char dev_mask;
  38. };
  39. extern block_dev_desc_t sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
  40. #define DRV_NAME "pata-bfin"
  41. #define DRV_VERSION "0.9"
  42. #define __iomem
  43. #define ATA_REG_CTRL 0x0E
  44. #define ATA_REG_ALTSTATUS ATA_REG_CTRL
  45. #define ATA_TMOUT_BOOT 30000
  46. #define ATA_TMOUT_BOOT_QUICK 7000
  47. #define PATA_BFIN_WAIT_TIMEOUT 10000
  48. #define PATA_DEV_NUM_PER_PORT 2
  49. /* These are the offset of the controller's registers */
  50. #define ATAPI_OFFSET_CONTROL 0x00
  51. #define ATAPI_OFFSET_STATUS 0x04
  52. #define ATAPI_OFFSET_DEV_ADDR 0x08
  53. #define ATAPI_OFFSET_DEV_TXBUF 0x0c
  54. #define ATAPI_OFFSET_DEV_RXBUF 0x10
  55. #define ATAPI_OFFSET_INT_MASK 0x14
  56. #define ATAPI_OFFSET_INT_STATUS 0x18
  57. #define ATAPI_OFFSET_XFER_LEN 0x1c
  58. #define ATAPI_OFFSET_LINE_STATUS 0x20
  59. #define ATAPI_OFFSET_SM_STATE 0x24
  60. #define ATAPI_OFFSET_TERMINATE 0x28
  61. #define ATAPI_OFFSET_PIO_TFRCNT 0x2c
  62. #define ATAPI_OFFSET_DMA_TFRCNT 0x30
  63. #define ATAPI_OFFSET_UMAIN_TFRCNT 0x34
  64. #define ATAPI_OFFSET_UDMAOUT_TFRCNT 0x38
  65. #define ATAPI_OFFSET_REG_TIM_0 0x40
  66. #define ATAPI_OFFSET_PIO_TIM_0 0x44
  67. #define ATAPI_OFFSET_PIO_TIM_1 0x48
  68. #define ATAPI_OFFSET_MULTI_TIM_0 0x50
  69. #define ATAPI_OFFSET_MULTI_TIM_1 0x54
  70. #define ATAPI_OFFSET_MULTI_TIM_2 0x58
  71. #define ATAPI_OFFSET_ULTRA_TIM_0 0x60
  72. #define ATAPI_OFFSET_ULTRA_TIM_1 0x64
  73. #define ATAPI_OFFSET_ULTRA_TIM_2 0x68
  74. #define ATAPI_OFFSET_ULTRA_TIM_3 0x6c
  75. #define ATAPI_GET_CONTROL(base)\
  76. bfin_read16(base + ATAPI_OFFSET_CONTROL)
  77. #define ATAPI_SET_CONTROL(base, val)\
  78. bfin_write16(base + ATAPI_OFFSET_CONTROL, val)
  79. #define ATAPI_GET_STATUS(base)\
  80. bfin_read16(base + ATAPI_OFFSET_STATUS)
  81. #define ATAPI_GET_DEV_ADDR(base)\
  82. bfin_read16(base + ATAPI_OFFSET_DEV_ADDR)
  83. #define ATAPI_SET_DEV_ADDR(base, val)\
  84. bfin_write16(base + ATAPI_OFFSET_DEV_ADDR, val)
  85. #define ATAPI_GET_DEV_TXBUF(base)\
  86. bfin_read16(base + ATAPI_OFFSET_DEV_TXBUF)
  87. #define ATAPI_SET_DEV_TXBUF(base, val)\
  88. bfin_write16(base + ATAPI_OFFSET_DEV_TXBUF, val)
  89. #define ATAPI_GET_DEV_RXBUF(base)\
  90. bfin_read16(base + ATAPI_OFFSET_DEV_RXBUF)
  91. #define ATAPI_SET_DEV_RXBUF(base, val)\
  92. bfin_write16(base + ATAPI_OFFSET_DEV_RXBUF, val)
  93. #define ATAPI_GET_INT_MASK(base)\
  94. bfin_read16(base + ATAPI_OFFSET_INT_MASK)
  95. #define ATAPI_SET_INT_MASK(base, val)\
  96. bfin_write16(base + ATAPI_OFFSET_INT_MASK, val)
  97. #define ATAPI_GET_INT_STATUS(base)\
  98. bfin_read16(base + ATAPI_OFFSET_INT_STATUS)
  99. #define ATAPI_SET_INT_STATUS(base, val)\
  100. bfin_write16(base + ATAPI_OFFSET_INT_STATUS, val)
  101. #define ATAPI_GET_XFER_LEN(base)\
  102. bfin_read16(base + ATAPI_OFFSET_XFER_LEN)
  103. #define ATAPI_SET_XFER_LEN(base, val)\
  104. bfin_write16(base + ATAPI_OFFSET_XFER_LEN, val)
  105. #define ATAPI_GET_LINE_STATUS(base)\
  106. bfin_read16(base + ATAPI_OFFSET_LINE_STATUS)
  107. #define ATAPI_GET_SM_STATE(base)\
  108. bfin_read16(base + ATAPI_OFFSET_SM_STATE)
  109. #define ATAPI_GET_TERMINATE(base)\
  110. bfin_read16(base + ATAPI_OFFSET_TERMINATE)
  111. #define ATAPI_SET_TERMINATE(base, val)\
  112. bfin_write16(base + ATAPI_OFFSET_TERMINATE, val)
  113. #define ATAPI_GET_PIO_TFRCNT(base)\
  114. bfin_read16(base + ATAPI_OFFSET_PIO_TFRCNT)
  115. #define ATAPI_GET_DMA_TFRCNT(base)\
  116. bfin_read16(base + ATAPI_OFFSET_DMA_TFRCNT)
  117. #define ATAPI_GET_UMAIN_TFRCNT(base)\
  118. bfin_read16(base + ATAPI_OFFSET_UMAIN_TFRCNT)
  119. #define ATAPI_GET_UDMAOUT_TFRCNT(base)\
  120. bfin_read16(base + ATAPI_OFFSET_UDMAOUT_TFRCNT)
  121. #define ATAPI_GET_REG_TIM_0(base)\
  122. bfin_read16(base + ATAPI_OFFSET_REG_TIM_0)
  123. #define ATAPI_SET_REG_TIM_0(base, val)\
  124. bfin_write16(base + ATAPI_OFFSET_REG_TIM_0, val)
  125. #define ATAPI_GET_PIO_TIM_0(base)\
  126. bfin_read16(base + ATAPI_OFFSET_PIO_TIM_0)
  127. #define ATAPI_SET_PIO_TIM_0(base, val)\
  128. bfin_write16(base + ATAPI_OFFSET_PIO_TIM_0, val)
  129. #define ATAPI_GET_PIO_TIM_1(base)\
  130. bfin_read16(base + ATAPI_OFFSET_PIO_TIM_1)
  131. #define ATAPI_SET_PIO_TIM_1(base, val)\
  132. bfin_write16(base + ATAPI_OFFSET_PIO_TIM_1, val)
  133. #define ATAPI_GET_MULTI_TIM_0(base)\
  134. bfin_read16(base + ATAPI_OFFSET_MULTI_TIM_0)
  135. #define ATAPI_SET_MULTI_TIM_0(base, val)\
  136. bfin_write16(base + ATAPI_OFFSET_MULTI_TIM_0, val)
  137. #define ATAPI_GET_MULTI_TIM_1(base)\
  138. bfin_read16(base + ATAPI_OFFSET_MULTI_TIM_1)
  139. #define ATAPI_SET_MULTI_TIM_1(base, val)\
  140. bfin_write16(base + ATAPI_OFFSET_MULTI_TIM_1, val)
  141. #define ATAPI_GET_MULTI_TIM_2(base)\
  142. bfin_read16(base + ATAPI_OFFSET_MULTI_TIM_2)
  143. #define ATAPI_SET_MULTI_TIM_2(base, val)\
  144. bfin_write16(base + ATAPI_OFFSET_MULTI_TIM_2, val)
  145. #define ATAPI_GET_ULTRA_TIM_0(base)\
  146. bfin_read16(base + ATAPI_OFFSET_ULTRA_TIM_0)
  147. #define ATAPI_SET_ULTRA_TIM_0(base, val)\
  148. bfin_write16(base + ATAPI_OFFSET_ULTRA_TIM_0, val)
  149. #define ATAPI_GET_ULTRA_TIM_1(base)\
  150. bfin_read16(base + ATAPI_OFFSET_ULTRA_TIM_1)
  151. #define ATAPI_SET_ULTRA_TIM_1(base, val)\
  152. bfin_write16(base + ATAPI_OFFSET_ULTRA_TIM_1, val)
  153. #define ATAPI_GET_ULTRA_TIM_2(base)\
  154. bfin_read16(base + ATAPI_OFFSET_ULTRA_TIM_2)
  155. #define ATAPI_SET_ULTRA_TIM_2(base, val)\
  156. bfin_write16(base + ATAPI_OFFSET_ULTRA_TIM_2, val)
  157. #define ATAPI_GET_ULTRA_TIM_3(base)\
  158. bfin_read16(base + ATAPI_OFFSET_ULTRA_TIM_3)
  159. #define ATAPI_SET_ULTRA_TIM_3(base, val)\
  160. bfin_write16(base + ATAPI_OFFSET_ULTRA_TIM_3, val)
  161. #endif