pcmcia.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. /*
  2. * (C) Copyright 2000-2004
  3. * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
  4. *
  5. * SPDX-License-Identifier: GPL-2.0+
  6. */
  7. #ifndef _PCMCIA_H
  8. #define _PCMCIA_H
  9. #include <common.h>
  10. #include <config.h>
  11. /*
  12. * Allow configuration to select PCMCIA slot,
  13. * or try to generate a useful default
  14. */
  15. #if defined(CONFIG_CMD_PCMCIA) || \
  16. (defined(CONFIG_CMD_IDE) && \
  17. (defined(CONFIG_IDE_8xx_PCCARD) || defined(CONFIG_IDE_8xx_DIRECT) ) )
  18. #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
  19. #if defined(CONFIG_TQM8xxL) || defined(CONFIG_SVM_SC8xx)
  20. # define CONFIG_PCMCIA_SLOT_B /* The TQM8xxL use SLOT_B */
  21. #elif defined(CONFIG_SPD823TS) /* The SPD8xx use SLOT_B */
  22. # define CONFIG_PCMCIA_SLOT_B
  23. #elif defined(CONFIG_IVMS8) || defined(CONFIG_IVML24) /* The IVM* use SLOT_A */
  24. # define CONFIG_PCMCIA_SLOT_A
  25. #elif defined(CONFIG_LWMON) /* The LWMON use SLOT_B */
  26. # define CONFIG_PCMCIA_SLOT_B
  27. #elif defined(CONFIG_ICU862) /* The ICU862 use SLOT_B */
  28. # define CONFIG_PCMCIA_SLOT_B
  29. #elif defined(CONFIG_R360MPI) /* The R360MPI use SLOT_B */
  30. # define CONFIG_PCMCIA_SLOT_B
  31. #elif defined(CONFIG_ATC) /* The ATC use SLOT_A */
  32. # define CONFIG_PCMCIA_SLOT_A
  33. #elif defined(CONFIG_UC100) /* The UC100 use SLOT_B */
  34. # define CONFIG_PCMCIA_SLOT_B
  35. #else
  36. # error "PCMCIA Slot not configured"
  37. #endif
  38. #endif /* !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B) */
  39. /* Make sure exactly one slot is defined - we support only one for now */
  40. #if !defined(CONFIG_PCMCIA_SLOT_A) && !defined(CONFIG_PCMCIA_SLOT_B)
  41. #error Neither CONFIG_PCMCIA_SLOT_A nor CONFIG_PCMCIA_SLOT_B configured
  42. #endif
  43. #if defined(CONFIG_PCMCIA_SLOT_A) && defined(CONFIG_PCMCIA_SLOT_B)
  44. #error Both CONFIG_PCMCIA_SLOT_A and CONFIG_PCMCIA_SLOT_B configured
  45. #endif
  46. #ifndef PCMCIA_SOCKETS_NO
  47. #define PCMCIA_SOCKETS_NO 1
  48. #endif
  49. #ifndef PCMCIA_MEM_WIN_NO
  50. #define PCMCIA_MEM_WIN_NO 4
  51. #endif
  52. #define PCMCIA_IO_WIN_NO 2
  53. /* define _slot_ to be able to optimize macros */
  54. #ifdef CONFIG_PCMCIA_SLOT_A
  55. # define _slot_ 0
  56. # define PCMCIA_SLOT_MSG "slot A"
  57. # define PCMCIA_SLOT_x PCMCIA_PSLOT_A
  58. #else
  59. # define _slot_ 1
  60. # define PCMCIA_SLOT_MSG "slot B"
  61. # define PCMCIA_SLOT_x PCMCIA_PSLOT_B
  62. #endif
  63. /*
  64. * The TQM850L hardware has two pins swapped! Grrrrgh!
  65. */
  66. #ifdef CONFIG_TQM850L
  67. #define __MY_PCMCIA_GCRX_CXRESET PCMCIA_GCRX_CXOE
  68. #define __MY_PCMCIA_GCRX_CXOE PCMCIA_GCRX_CXRESET
  69. #else
  70. #define __MY_PCMCIA_GCRX_CXRESET PCMCIA_GCRX_CXRESET
  71. #define __MY_PCMCIA_GCRX_CXOE PCMCIA_GCRX_CXOE
  72. #endif
  73. /*
  74. * This structure is used to address each window in the PCMCIA controller.
  75. *
  76. * Keep in mind that we assume that pcmcia_win_t[n+1] is mapped directly
  77. * after pcmcia_win_t[n]...
  78. */
  79. typedef struct {
  80. ulong br;
  81. ulong or;
  82. } pcmcia_win_t;
  83. /*
  84. * Definitions for PCMCIA control registers to operate in IDE mode
  85. *
  86. * All timing related setup (PCMCIA_SHT, PCMCIA_SST, PCMCIA_SL)
  87. * to be done later (depending on CPU clock)
  88. */
  89. /* Window 0:
  90. * Base: 0xFE100000 CS1
  91. * Port Size: 2 Bytes
  92. * Port Size: 16 Bit
  93. * Common Memory Space
  94. */
  95. #define CONFIG_SYS_PCMCIA_PBR0 0xFE100000
  96. #define CONFIG_SYS_PCMCIA_POR0 ( PCMCIA_BSIZE_2 \
  97. | PCMCIA_PPS_16 \
  98. | PCMCIA_PRS_MEM \
  99. | PCMCIA_SLOT_x \
  100. | PCMCIA_PV \
  101. )
  102. /* Window 1:
  103. * Base: 0xFE100080 CS1
  104. * Port Size: 8 Bytes
  105. * Port Size: 8 Bit
  106. * Common Memory Space
  107. */
  108. #define CONFIG_SYS_PCMCIA_PBR1 0xFE100080
  109. #define CONFIG_SYS_PCMCIA_POR1 ( PCMCIA_BSIZE_8 \
  110. | PCMCIA_PPS_8 \
  111. | PCMCIA_PRS_MEM \
  112. | PCMCIA_SLOT_x \
  113. | PCMCIA_PV \
  114. )
  115. /* Window 2:
  116. * Base: 0xFE100100 CS2
  117. * Port Size: 8 Bytes
  118. * Port Size: 8 Bit
  119. * Common Memory Space
  120. */
  121. #define CONFIG_SYS_PCMCIA_PBR2 0xFE100100
  122. #define CONFIG_SYS_PCMCIA_POR2 ( PCMCIA_BSIZE_8 \
  123. | PCMCIA_PPS_8 \
  124. | PCMCIA_PRS_MEM \
  125. | PCMCIA_SLOT_x \
  126. | PCMCIA_PV \
  127. )
  128. /* Window 3:
  129. * not used
  130. */
  131. #define CONFIG_SYS_PCMCIA_PBR3 0
  132. #define CONFIG_SYS_PCMCIA_POR3 0
  133. /* Window 4:
  134. * Base: 0xFE100C00 CS1
  135. * Port Size: 2 Bytes
  136. * Port Size: 16 Bit
  137. * Common Memory Space
  138. */
  139. #define CONFIG_SYS_PCMCIA_PBR4 0xFE100C00
  140. #define CONFIG_SYS_PCMCIA_POR4 ( PCMCIA_BSIZE_2 \
  141. | PCMCIA_PPS_16 \
  142. | PCMCIA_PRS_MEM \
  143. | PCMCIA_SLOT_x \
  144. | PCMCIA_PV \
  145. )
  146. /* Window 5:
  147. * Base: 0xFE100C80 CS1
  148. * Port Size: 8 Bytes
  149. * Port Size: 8 Bit
  150. * Common Memory Space
  151. */
  152. #define CONFIG_SYS_PCMCIA_PBR5 0xFE100C80
  153. #define CONFIG_SYS_PCMCIA_POR5 ( PCMCIA_BSIZE_8 \
  154. | PCMCIA_PPS_8 \
  155. | PCMCIA_PRS_MEM \
  156. | PCMCIA_SLOT_x \
  157. | PCMCIA_PV \
  158. )
  159. /* Window 6:
  160. * Base: 0xFE100D00 CS2
  161. * Port Size: 8 Bytes
  162. * Port Size: 8 Bit
  163. * Common Memory Space
  164. */
  165. #define CONFIG_SYS_PCMCIA_PBR6 0xFE100D00
  166. #define CONFIG_SYS_PCMCIA_POR6 ( PCMCIA_BSIZE_8 \
  167. | PCMCIA_PPS_8 \
  168. | PCMCIA_PRS_MEM \
  169. | PCMCIA_SLOT_x \
  170. | PCMCIA_PV \
  171. )
  172. /* Window 7:
  173. * not used
  174. */
  175. #define CONFIG_SYS_PCMCIA_PBR7 0
  176. #define CONFIG_SYS_PCMCIA_POR7 0
  177. /**********************************************************************/
  178. /*
  179. * CIS Tupel codes
  180. */
  181. #define CISTPL_NULL 0x00
  182. #define CISTPL_DEVICE 0x01
  183. #define CISTPL_LONGLINK_CB 0x02
  184. #define CISTPL_INDIRECT 0x03
  185. #define CISTPL_CONFIG_CB 0x04
  186. #define CISTPL_CFTABLE_ENTRY_CB 0x05
  187. #define CISTPL_LONGLINK_MFC 0x06
  188. #define CISTPL_BAR 0x07
  189. #define CISTPL_PWR_MGMNT 0x08
  190. #define CISTPL_EXTDEVICE 0x09
  191. #define CISTPL_CHECKSUM 0x10
  192. #define CISTPL_LONGLINK_A 0x11
  193. #define CISTPL_LONGLINK_C 0x12
  194. #define CISTPL_LINKTARGET 0x13
  195. #define CISTPL_NO_LINK 0x14
  196. #define CISTPL_VERS_1 0x15
  197. #define CISTPL_ALTSTR 0x16
  198. #define CISTPL_DEVICE_A 0x17
  199. #define CISTPL_JEDEC_C 0x18
  200. #define CISTPL_JEDEC_A 0x19
  201. #define CISTPL_CONFIG 0x1a
  202. #define CISTPL_CFTABLE_ENTRY 0x1b
  203. #define CISTPL_DEVICE_OC 0x1c
  204. #define CISTPL_DEVICE_OA 0x1d
  205. #define CISTPL_DEVICE_GEO 0x1e
  206. #define CISTPL_DEVICE_GEO_A 0x1f
  207. #define CISTPL_MANFID 0x20
  208. #define CISTPL_FUNCID 0x21
  209. #define CISTPL_FUNCE 0x22
  210. #define CISTPL_SWIL 0x23
  211. #define CISTPL_END 0xff
  212. /*
  213. * CIS Function ID codes
  214. */
  215. #define CISTPL_FUNCID_MULTI 0x00
  216. #define CISTPL_FUNCID_MEMORY 0x01
  217. #define CISTPL_FUNCID_SERIAL 0x02
  218. #define CISTPL_FUNCID_PARALLEL 0x03
  219. #define CISTPL_FUNCID_FIXED 0x04
  220. #define CISTPL_FUNCID_VIDEO 0x05
  221. #define CISTPL_FUNCID_NETWORK 0x06
  222. #define CISTPL_FUNCID_AIMS 0x07
  223. #define CISTPL_FUNCID_SCSI 0x08
  224. /*
  225. * Fixed Disk FUNCE codes
  226. */
  227. #define CISTPL_IDE_INTERFACE 0x01
  228. #define CISTPL_FUNCE_IDE_IFACE 0x01
  229. #define CISTPL_FUNCE_IDE_MASTER 0x02
  230. #define CISTPL_FUNCE_IDE_SLAVE 0x03
  231. /* First feature byte */
  232. #define CISTPL_IDE_SILICON 0x04
  233. #define CISTPL_IDE_UNIQUE 0x08
  234. #define CISTPL_IDE_DUAL 0x10
  235. /* Second feature byte */
  236. #define CISTPL_IDE_HAS_SLEEP 0x01
  237. #define CISTPL_IDE_HAS_STANDBY 0x02
  238. #define CISTPL_IDE_HAS_IDLE 0x04
  239. #define CISTPL_IDE_LOW_POWER 0x08
  240. #define CISTPL_IDE_REG_INHIBIT 0x10
  241. #define CISTPL_IDE_HAS_INDEX 0x20
  242. #define CISTPL_IDE_IOIS16 0x40
  243. #endif
  244. #ifdef CONFIG_8xx
  245. extern u_int *pcmcia_pgcrx[];
  246. #define PCMCIA_PGCRX(slot) (*pcmcia_pgcrx[slot])
  247. #endif
  248. #if defined(CONFIG_CMD_IDE) && defined(CONFIG_IDE_8xx_PCCARD)
  249. extern int check_ide_device(int slot);
  250. #endif
  251. #endif /* _PCMCIA_H */