ide-pci.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:39k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/drivers/ide/ide-pci.c Version 1.05 June 9, 2000
  3.  *
  4.  *  Copyright (c) 1998-2000  Andre Hedrick <andre@linux-ide.org>
  5.  *
  6.  *  Copyright (c) 1995-1998  Mark Lord
  7.  *  May be copied or modified under the terms of the GNU General Public License
  8.  */
  9. /*
  10.  *  This module provides support for automatic detection and
  11.  *  configuration of all PCI IDE interfaces present in a system.  
  12.  */
  13. #include <linux/config.h>
  14. #include <linux/types.h>
  15. #include <linux/kernel.h>
  16. #include <linux/timer.h>
  17. #include <linux/mm.h>
  18. #include <linux/interrupt.h>
  19. #include <linux/pci.h>
  20. #include <linux/init.h>
  21. #include <linux/ide.h>
  22. #include <asm/io.h>
  23. #include <asm/irq.h>
  24. #define DEVID_PIIXa ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371FB_0})
  25. #define DEVID_PIIXb ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371FB_1})
  26. #define DEVID_MPIIX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371MX})
  27. #define DEVID_PIIX3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371SB_1})
  28. #define DEVID_PIIX4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82371AB})
  29. #define DEVID_PIIX4E ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82801AB_1})
  30. #define DEVID_PIIX4E2 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82443MX_1})
  31. #define DEVID_PIIX4U ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82801AA_1})
  32. #define DEVID_PIIX4U2 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82372FB_1})
  33. #define DEVID_PIIX4NX ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82451NX})
  34. #define DEVID_PIIX4U3 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82801BA_9})
  35. #define DEVID_PIIX4U4 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82801BA_8})
  36. #define DEVID_PIIX4U5 ((ide_pci_devid_t){PCI_VENDOR_ID_INTEL,   PCI_DEVICE_ID_INTEL_82801CA_10})
  37. #define DEVID_VIA_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA,     PCI_DEVICE_ID_VIA_82C561})
  38. #define DEVID_MR_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA,     PCI_DEVICE_ID_VIA_82C576_1})
  39. #define DEVID_VP_IDE ((ide_pci_devid_t){PCI_VENDOR_ID_VIA,     PCI_DEVICE_ID_VIA_82C586_1})
  40. #define DEVID_PDC20246 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20246})
  41. #define DEVID_PDC20262 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20262})
  42. #define DEVID_PDC20265 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20265})
  43. #define DEVID_PDC20267 ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20267})
  44. #define DEVID_PDC20268  ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268})
  45. #define DEVID_PDC20268R ((ide_pci_devid_t){PCI_VENDOR_ID_PROMISE, PCI_DEVICE_ID_PROMISE_20268R})
  46. #define DEVID_RZ1000 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH,  PCI_DEVICE_ID_PCTECH_RZ1000})
  47. #define DEVID_RZ1001 ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH,  PCI_DEVICE_ID_PCTECH_RZ1001})
  48. #define DEVID_SAMURAI ((ide_pci_devid_t){PCI_VENDOR_ID_PCTECH,  PCI_DEVICE_ID_PCTECH_SAMURAI_IDE})
  49. #define DEVID_CMD640 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD,     PCI_DEVICE_ID_CMD_640})
  50. #define DEVID_CMD643 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD,     PCI_DEVICE_ID_CMD_643})
  51. #define DEVID_CMD646 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD,     PCI_DEVICE_ID_CMD_646})
  52. #define DEVID_CMD648 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD,     PCI_DEVICE_ID_CMD_648})
  53. #define DEVID_CMD649 ((ide_pci_devid_t){PCI_VENDOR_ID_CMD,     PCI_DEVICE_ID_CMD_649})
  54. #define DEVID_SIS5513 ((ide_pci_devid_t){PCI_VENDOR_ID_SI,      PCI_DEVICE_ID_SI_5513})
  55. #define DEVID_OPTI621 ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI,    PCI_DEVICE_ID_OPTI_82C621})
  56. #define DEVID_OPTI621V ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI,    PCI_DEVICE_ID_OPTI_82C558})
  57. #define DEVID_OPTI621X ((ide_pci_devid_t){PCI_VENDOR_ID_OPTI,    PCI_DEVICE_ID_OPTI_82C825})
  58. #define DEVID_TRM290 ((ide_pci_devid_t){PCI_VENDOR_ID_TEKRAM,  PCI_DEVICE_ID_TEKRAM_DC290})
  59. #define DEVID_NS87410 ((ide_pci_devid_t){PCI_VENDOR_ID_NS,      PCI_DEVICE_ID_NS_87410})
  60. #define DEVID_NS87415 ((ide_pci_devid_t){PCI_VENDOR_ID_NS,      PCI_DEVICE_ID_NS_87415})
  61. #define DEVID_HT6565 ((ide_pci_devid_t){PCI_VENDOR_ID_HOLTEK,  PCI_DEVICE_ID_HOLTEK_6565})
  62. #define DEVID_AEC6210 ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP,   PCI_DEVICE_ID_ARTOP_ATP850UF})
  63. #define DEVID_AEC6260 ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP,   PCI_DEVICE_ID_ARTOP_ATP860})
  64. #define DEVID_AEC6260R ((ide_pci_devid_t){PCI_VENDOR_ID_ARTOP,   PCI_DEVICE_ID_ARTOP_ATP860R})
  65. #define DEVID_W82C105 ((ide_pci_devid_t){PCI_VENDOR_ID_WINBOND, PCI_DEVICE_ID_WINBOND_82C105})
  66. #define DEVID_UM8673F ((ide_pci_devid_t){PCI_VENDOR_ID_UMC,     PCI_DEVICE_ID_UMC_UM8673F})
  67. #define DEVID_UM8886A ((ide_pci_devid_t){PCI_VENDOR_ID_UMC,     PCI_DEVICE_ID_UMC_UM8886A})
  68. #define DEVID_UM8886BF ((ide_pci_devid_t){PCI_VENDOR_ID_UMC,     PCI_DEVICE_ID_UMC_UM8886BF})
  69. #define DEVID_HPT34X ((ide_pci_devid_t){PCI_VENDOR_ID_TTI,     PCI_DEVICE_ID_TTI_HPT343})
  70. #define DEVID_HPT366 ((ide_pci_devid_t){PCI_VENDOR_ID_TTI,     PCI_DEVICE_ID_TTI_HPT366})
  71. #define DEVID_ALI15X3 ((ide_pci_devid_t){PCI_VENDOR_ID_AL,      PCI_DEVICE_ID_AL_M5229})
  72. #define DEVID_CY82C693 ((ide_pci_devid_t){PCI_VENDOR_ID_CONTAQ,  PCI_DEVICE_ID_CONTAQ_82C693})
  73. #define DEVID_HINT ((ide_pci_devid_t){0x3388,                0x8013})
  74. #define DEVID_CS5530 ((ide_pci_devid_t){PCI_VENDOR_ID_CYRIX,   PCI_DEVICE_ID_CYRIX_5530_IDE})
  75. #define DEVID_AMD7401 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD,     PCI_DEVICE_ID_AMD_COBRA_7401})
  76. #define DEVID_AMD7409 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD,     PCI_DEVICE_ID_AMD_VIPER_7409})
  77. #define DEVID_AMD7411 ((ide_pci_devid_t){PCI_VENDOR_ID_AMD,     PCI_DEVICE_ID_AMD_VIPER_7411})
  78. #define DEVID_PDCADMA ((ide_pci_devid_t){PCI_VENDOR_ID_PDC,     PCI_DEVICE_ID_PDC_1841})
  79. #define DEVID_SLC90E66 ((ide_pci_devid_t){PCI_VENDOR_ID_EFAR,    PCI_DEVICE_ID_EFAR_SLC90E66_1})
  80. #define DEVID_OSB4 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4IDE})
  81. #define DEVID_CSB5 ((ide_pci_devid_t){PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_CSB5IDE})
  82. #define DEVID_ITE8172G ((ide_pci_devid_t){PCI_VENDOR_ID_ITE,     PCI_DEVICE_ID_ITE_IT8172G})
  83. #define IDE_IGNORE ((void *)-1)
  84. #ifdef CONFIG_BLK_DEV_AEC62XX
  85. extern unsigned int pci_init_aec62xx(struct pci_dev *, const char *);
  86. extern unsigned int ata66_aec62xx(ide_hwif_t *);
  87. extern void ide_init_aec62xx(ide_hwif_t *);
  88. extern void ide_dmacapable_aec62xx(ide_hwif_t *, unsigned long);
  89. #define PCI_AEC62XX &pci_init_aec62xx
  90. #define ATA66_AEC62XX &ata66_aec62xx
  91. #define INIT_AEC62XX &ide_init_aec62xx
  92. #define DMA_AEC62XX &ide_dmacapable_aec62xx
  93. #else
  94. #define PCI_AEC62XX NULL
  95. #define ATA66_AEC62XX NULL
  96. #define INIT_AEC62XX NULL
  97. #define DMA_AEC62XX NULL
  98. #endif
  99. #ifdef CONFIG_BLK_DEV_ALI15X3
  100. extern unsigned int pci_init_ali15x3(struct pci_dev *, const char *);
  101. extern unsigned int ata66_ali15x3(ide_hwif_t *);
  102. extern void ide_init_ali15x3(ide_hwif_t *);
  103. extern void ide_dmacapable_ali15x3(ide_hwif_t *, unsigned long);
  104. #define PCI_ALI15X3 &pci_init_ali15x3
  105. #define ATA66_ALI15X3 &ata66_ali15x3
  106. #define INIT_ALI15X3 &ide_init_ali15x3
  107. #define DMA_ALI15X3 &ide_dmacapable_ali15x3
  108. #else
  109. #define PCI_ALI15X3 NULL
  110. #define ATA66_ALI15X3 NULL
  111. #define INIT_ALI15X3 NULL
  112. #define DMA_ALI15X3 NULL
  113. #endif
  114. #ifdef CONFIG_BLK_DEV_AMD74XX
  115. extern unsigned int pci_init_amd74xx(struct pci_dev *, const char *);
  116. extern unsigned int ata66_amd74xx(ide_hwif_t *);
  117. extern void ide_init_amd74xx(ide_hwif_t *);
  118. extern void ide_dmacapable_amd74xx(ide_hwif_t *, unsigned long);
  119. #define PCI_AMD74XX &pci_init_amd74xx
  120. #define ATA66_AMD74XX &ata66_amd74xx
  121. #define INIT_AMD74XX &ide_init_amd74xx
  122. #define DMA_AMD74XX &ide_dmacapable_amd74xx
  123. #else
  124. #define PCI_AMD74XX NULL
  125. #define ATA66_AMD74XX NULL
  126. #define INIT_AMD74XX NULL
  127. #define DMA_AMD74XX NULL
  128. #endif
  129. #ifdef CONFIG_BLK_DEV_CMD64X
  130. extern unsigned int pci_init_cmd64x(struct pci_dev *, const char *);
  131. extern unsigned int ata66_cmd64x(ide_hwif_t *);
  132. extern void ide_init_cmd64x(ide_hwif_t *);
  133. extern void ide_dmacapable_cmd64x(ide_hwif_t *, unsigned long);
  134. #define PCI_CMD64X &pci_init_cmd64x
  135. #define ATA66_CMD64X &ata66_cmd64x
  136. #define INIT_CMD64X &ide_init_cmd64x
  137. #else
  138. #define PCI_CMD64X NULL
  139. #define ATA66_CMD64X NULL
  140. #ifdef __sparc_v9__
  141. #define INIT_CMD64X IDE_IGNORE
  142. #else
  143. #define INIT_CMD64X NULL
  144. #endif
  145. #endif
  146. #ifdef CONFIG_BLK_DEV_CY82C693
  147. extern unsigned int pci_init_cy82c693(struct pci_dev *, const char *);
  148. extern void ide_init_cy82c693(ide_hwif_t *);
  149. #define PCI_CY82C693 &pci_init_cy82c693
  150. #define INIT_CY82C693 &ide_init_cy82c693
  151. #else
  152. #define PCI_CY82C693 NULL
  153. #define INIT_CY82C693 NULL
  154. #endif
  155. #ifdef CONFIG_BLK_DEV_CS5530
  156. extern unsigned int pci_init_cs5530(struct pci_dev *, const char *);
  157. extern void ide_init_cs5530(ide_hwif_t *);
  158. #define PCI_CS5530 &pci_init_cs5530
  159. #define INIT_CS5530 &ide_init_cs5530
  160. #else
  161. #define PCI_CS5530 NULL
  162. #define INIT_CS5530 NULL
  163. #endif
  164. #ifdef CONFIG_BLK_DEV_HPT34X
  165. extern unsigned int pci_init_hpt34x(struct pci_dev *, const char *);
  166. extern void ide_init_hpt34x(ide_hwif_t *);
  167. #define PCI_HPT34X &pci_init_hpt34x
  168. #define INIT_HPT34X &ide_init_hpt34x
  169. #else
  170. #define PCI_HPT34X NULL
  171. #define INIT_HPT34X IDE_IGNORE
  172. #endif
  173. #ifdef CONFIG_BLK_DEV_HPT366
  174. extern byte hpt363_shared_irq;
  175. extern byte hpt363_shared_pin;
  176. extern unsigned int pci_init_hpt366(struct pci_dev *, const char *);
  177. extern unsigned int ata66_hpt366(ide_hwif_t *);
  178. extern void ide_init_hpt366(ide_hwif_t *);
  179. extern void ide_dmacapable_hpt366(ide_hwif_t *, unsigned long);
  180. #define PCI_HPT366 &pci_init_hpt366
  181. #define ATA66_HPT366 &ata66_hpt366
  182. #define INIT_HPT366 &ide_init_hpt366
  183. #define DMA_HPT366 &ide_dmacapable_hpt366
  184. #else
  185. static byte hpt363_shared_irq;
  186. static byte hpt363_shared_pin;
  187. #define PCI_HPT366 NULL
  188. #define ATA66_HPT366 NULL
  189. #define INIT_HPT366 NULL
  190. #define DMA_HPT366 NULL
  191. #endif
  192. #ifdef CONFIG_BLK_DEV_NS87415
  193. extern void ide_init_ns87415(ide_hwif_t *);
  194. #define INIT_NS87415 &ide_init_ns87415
  195. #else
  196. #define INIT_NS87415 IDE_IGNORE
  197. #endif
  198. #ifdef CONFIG_BLK_DEV_OPTI621
  199. extern void ide_init_opti621(ide_hwif_t *);
  200. #define INIT_OPTI621 &ide_init_opti621
  201. #else
  202. #define INIT_OPTI621 NULL
  203. #endif
  204. #ifdef CONFIG_BLK_DEV_PDC_ADMA
  205. extern unsigned int pci_init_pdcadma(struct pci_dev *, const char *);
  206. extern unsigned int ata66_pdcadma(ide_hwif_t *);
  207. extern void ide_init_pdcadma(ide_hwif_t *);
  208. extern void ide_dmacapable_pdcadma(ide_hwif_t *, unsigned long);
  209. #define PCI_PDCADMA &pci_init_pdcadma
  210. #define ATA66_PDCADMA &ata66_pdcadma
  211. #define INIT_PDCADMA &ide_init_pdcadma
  212. #define DMA_PDCADMA &ide_dmacapable_pdcadma
  213. #else
  214. #define PCI_PDCADMA IDE_IGNORE
  215. #define ATA66_PDCADMA IDE_IGNORE
  216. #define INIT_PDCADMA IDE_IGNORE
  217. #define DMA_PDCADMA IDE_IGNORE
  218. #endif
  219. #ifdef CONFIG_BLK_DEV_PDC202XX
  220. extern unsigned int pci_init_pdc202xx(struct pci_dev *, const char *);
  221. extern unsigned int ata66_pdc202xx(ide_hwif_t *);
  222. extern void ide_init_pdc202xx(ide_hwif_t *);
  223. #define PCI_PDC202XX &pci_init_pdc202xx
  224. #define ATA66_PDC202XX &ata66_pdc202xx
  225. #define INIT_PDC202XX &ide_init_pdc202xx
  226. #else
  227. #define PCI_PDC202XX NULL
  228. #define ATA66_PDC202XX NULL
  229. #define INIT_PDC202XX NULL
  230. #endif
  231. #ifdef CONFIG_BLK_DEV_PIIX
  232. extern unsigned int pci_init_piix(struct pci_dev *, const char *);
  233. extern unsigned int ata66_piix(ide_hwif_t *);
  234. extern void ide_init_piix(ide_hwif_t *);
  235. #define PCI_PIIX &pci_init_piix
  236. #define ATA66_PIIX &ata66_piix
  237. #define INIT_PIIX &ide_init_piix
  238. #else
  239. #define PCI_PIIX NULL
  240. #define ATA66_PIIX NULL
  241. #define INIT_PIIX NULL
  242. #endif
  243. #ifdef CONFIG_BLK_DEV_IT8172
  244. extern unsigned int pci_init_it8172(struct pci_dev *, const char *);
  245. extern unsigned int ata66_it8172(ide_hwif_t *);
  246. extern void ide_init_it8172(ide_hwif_t *);
  247. #define PCI_IT8172 &pci_init_it8172
  248. #define INIT_IT8172 &ide_init_it8172
  249. #else
  250. #define PCI_IT8172 NULL
  251. #define ATA66_IT8172 NULL
  252. #define INIT_IT8172 NULL
  253. #endif
  254. #ifdef CONFIG_BLK_DEV_RZ1000
  255. extern void ide_init_rz1000(ide_hwif_t *);
  256. #define INIT_RZ1000 &ide_init_rz1000
  257. #else
  258. #define INIT_RZ1000 IDE_IGNORE
  259. #endif
  260. #define INIT_SAMURAI NULL
  261. #ifdef CONFIG_BLK_DEV_SVWKS
  262. extern unsigned int pci_init_svwks(struct pci_dev *, const char *);
  263. extern unsigned int ata66_svwks(ide_hwif_t *);
  264. extern void ide_init_svwks(ide_hwif_t *);
  265. #define PCI_SVWKS &pci_init_svwks
  266. #define ATA66_SVWKS &ata66_svwks
  267. #define INIT_SVWKS &ide_init_svwks
  268. #else
  269. #define PCI_SVWKS NULL
  270. #define ATA66_SVWKS NULL
  271. #define INIT_SVWKS NULL
  272. #endif
  273. #ifdef CONFIG_BLK_DEV_SIS5513
  274. extern unsigned int pci_init_sis5513(struct pci_dev *, const char *);
  275. extern unsigned int ata66_sis5513(ide_hwif_t *);
  276. extern void ide_init_sis5513(ide_hwif_t *);
  277. #define PCI_SIS5513 &pci_init_sis5513
  278. #define ATA66_SIS5513 &ata66_sis5513
  279. #define INIT_SIS5513 &ide_init_sis5513
  280. #else
  281. #define PCI_SIS5513 NULL
  282. #define ATA66_SIS5513 NULL
  283. #define INIT_SIS5513 NULL
  284. #endif
  285. #ifdef CONFIG_BLK_DEV_SLC90E66
  286. extern unsigned int pci_init_slc90e66(struct pci_dev *, const char *);
  287. extern unsigned int ata66_slc90e66(ide_hwif_t *);
  288. extern void ide_init_slc90e66(ide_hwif_t *);
  289. #define PCI_SLC90E66 &pci_init_slc90e66
  290. #define ATA66_SLC90E66 &ata66_slc90e66
  291. #define INIT_SLC90E66 &ide_init_slc90e66
  292. #else
  293. #define PCI_SLC90E66 NULL
  294. #define ATA66_SLC90E66 NULL
  295. #define INIT_SLC90E66 NULL
  296. #endif
  297. #ifdef CONFIG_BLK_DEV_SL82C105
  298. extern unsigned int pci_init_sl82c105(struct pci_dev *, const char *);
  299. extern void dma_init_sl82c105(ide_hwif_t *, unsigned long);
  300. extern void ide_init_sl82c105(ide_hwif_t *);
  301. #define PCI_W82C105 &pci_init_sl82c105
  302. #define DMA_W82C105 &dma_init_sl82c105
  303. #define INIT_W82C105 &ide_init_sl82c105
  304. #else
  305. #define PCI_W82C105 NULL
  306. #define DMA_W82C105 NULL
  307. #define INIT_W82C105 IDE_IGNORE
  308. #endif
  309. #ifdef CONFIG_BLK_DEV_TRM290
  310. extern void ide_init_trm290(ide_hwif_t *);
  311. #define INIT_TRM290 &ide_init_trm290
  312. #else
  313. #define INIT_TRM290 IDE_IGNORE
  314. #endif
  315. #ifdef CONFIG_BLK_DEV_VIA82CXXX
  316. extern unsigned int pci_init_via82cxxx(struct pci_dev *, const char *);
  317. extern unsigned int ata66_via82cxxx(ide_hwif_t *);
  318. extern void ide_init_via82cxxx(ide_hwif_t *);
  319. extern void ide_dmacapable_via82cxxx(ide_hwif_t *, unsigned long);
  320. #define PCI_VIA82CXXX &pci_init_via82cxxx
  321. #define ATA66_VIA82CXXX &ata66_via82cxxx
  322. #define INIT_VIA82CXXX &ide_init_via82cxxx
  323. #define DMA_VIA82CXXX &ide_dmacapable_via82cxxx
  324. #else
  325. #define PCI_VIA82CXXX NULL
  326. #define ATA66_VIA82CXXX NULL
  327. #define INIT_VIA82CXXX NULL
  328. #define DMA_VIA82CXXX NULL
  329. #endif
  330. typedef struct ide_pci_enablebit_s {
  331. byte reg; /* byte pci reg holding the enable-bit */
  332. byte mask; /* mask to isolate the enable-bit */
  333. byte val; /* value of masked reg when "enabled" */
  334. } ide_pci_enablebit_t;
  335. typedef struct ide_pci_device_s {
  336. ide_pci_devid_t devid;
  337. char *name;
  338. unsigned int (*init_chipset)(struct pci_dev *dev, const char *name);
  339. unsigned int (*ata66_check)(ide_hwif_t *hwif);
  340. void  (*init_hwif)(ide_hwif_t *hwif);
  341. void (*dma_init)(ide_hwif_t *hwif, unsigned long dmabase);
  342. ide_pci_enablebit_t enablebits[2];
  343. byte bootable;
  344. unsigned int extra;
  345. } ide_pci_device_t;
  346. static ide_pci_device_t ide_pci_chipsets[] __initdata = {
  347. {DEVID_PIIXa, "PIIX", NULL, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}},  ON_BOARD, 0 },
  348. {DEVID_PIIXb, "PIIX", NULL, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}},  ON_BOARD, 0 },
  349. {DEVID_MPIIX, "MPIIX", NULL, NULL, INIT_PIIX, NULL, {{0x6D,0x80,0x80}, {0x6F,0x80,0x80}}, ON_BOARD, 0 },
  350. {DEVID_PIIX3, "PIIX3", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}},  ON_BOARD, 0 },
  351. {DEVID_PIIX4, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}},  ON_BOARD, 0 },
  352. {DEVID_PIIX4E, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  353. {DEVID_PIIX4E2, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  354. {DEVID_PIIX4U, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  355. {DEVID_PIIX4U2, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  356. {DEVID_PIIX4NX, "PIIX4", PCI_PIIX, NULL, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  357. {DEVID_PIIX4U3, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  358. {DEVID_PIIX4U4, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  359. {DEVID_PIIX4U5, "PIIX4", PCI_PIIX, ATA66_PIIX, INIT_PIIX, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  360. {DEVID_VIA_IDE, "VIA_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  361. {DEVID_MR_IDE, "VP_IDE", PCI_VIA82CXXX, ATA66_VIA82CXXX,INIT_VIA82CXXX, DMA_VIA82CXXX, {{0x40,0x02,0x02}, {0x40,0x01,0x01}},  ON_BOARD, 0 },
  362. {DEVID_VP_IDE, "VP_IDE", PCI_VIA82CXXX, ATA66_VIA82CXXX,INIT_VIA82CXXX, DMA_VIA82CXXX, {{0x40,0x02,0x02}, {0x40,0x01,0x01}},  ON_BOARD, 0 },
  363. #ifdef CONFIG_PDC202XX_FORCE
  364.         {DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 },
  365.         {DEVID_PDC20262,"PDC20262", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
  366.         {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
  367.         {DEVID_PDC20267,"PDC20267", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 48 },
  368. #else /* !CONFIG_PDC202XX_FORCE */
  369. {DEVID_PDC20246,"PDC20246", PCI_PDC202XX, NULL, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}},  OFF_BOARD, 16 },
  370. {DEVID_PDC20262,"PDC20262", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 },
  371. {DEVID_PDC20265,"PDC20265", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 },
  372. {DEVID_PDC20267,"PDC20267", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x50,0x02,0x02}, {0x50,0x04,0x04}}, OFF_BOARD, 48 },
  373. #endif
  374. {DEVID_PDC20268,"PDC20268", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 },
  375. /* Promise used a different PCI ident for the raid card apparently to try and
  376.    prevent Linux detecting it and using our own raid code. We want to detect
  377.    it for the ataraid drivers, so we have to list both here.. */
  378. {DEVID_PDC20268R,"PDC20268", PCI_PDC202XX, ATA66_PDC202XX, INIT_PDC202XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 16 },
  379. {DEVID_RZ1000, "RZ1000", NULL, NULL, INIT_RZ1000, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  380. {DEVID_RZ1001, "RZ1001", NULL, NULL, INIT_RZ1000, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  381. {DEVID_SAMURAI, "SAMURAI", NULL, NULL, INIT_SAMURAI, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  382. {DEVID_CMD640, "CMD640", NULL, NULL, IDE_IGNORE, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  383. {DEVID_NS87410, "NS87410", NULL, NULL, NULL, NULL, {{0x43,0x08,0x08}, {0x47,0x08,0x08}},  ON_BOARD, 0 },
  384. {DEVID_SIS5513, "SIS5513", PCI_SIS5513, ATA66_SIS5513, INIT_SIS5513, NULL, {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},  ON_BOARD, 0 },
  385. {DEVID_CMD643, "CMD643", PCI_CMD64X, NULL, INIT_CMD64X, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  386. {DEVID_CMD646, "CMD646", PCI_CMD64X, NULL, INIT_CMD64X, NULL, {{0x00,0x00,0x00}, {0x51,0x80,0x80}},  ON_BOARD, 0 },
  387. {DEVID_CMD648, "CMD648", PCI_CMD64X, ATA66_CMD64X, INIT_CMD64X, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  388. {DEVID_CMD649, "CMD649", PCI_CMD64X, ATA66_CMD64X, INIT_CMD64X, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  389. {DEVID_HT6565, "HT6565", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  390. {DEVID_OPTI621, "OPTI621", NULL, NULL, INIT_OPTI621, NULL, {{0x45,0x80,0x00}, {0x40,0x08,0x00}},  ON_BOARD, 0 },
  391. {DEVID_OPTI621X,"OPTI621X", NULL, NULL, INIT_OPTI621, NULL, {{0x45,0x80,0x00}, {0x40,0x08,0x00}},  ON_BOARD, 0 },
  392. {DEVID_TRM290, "TRM290", NULL, NULL, INIT_TRM290, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  393. {DEVID_NS87415, "NS87415", NULL, NULL, INIT_NS87415, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  394. {DEVID_AEC6210, "AEC6210", PCI_AEC62XX, NULL, INIT_AEC62XX, DMA_AEC62XX, {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}},  OFF_BOARD, 0 },
  395. {DEVID_AEC6260, "AEC6260", PCI_AEC62XX, ATA66_AEC62XX, INIT_AEC62XX, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, NEVER_BOARD, 0 },
  396. {DEVID_AEC6260R,"AEC6260R", PCI_AEC62XX, ATA66_AEC62XX, INIT_AEC62XX, NULL, {{0x4a,0x02,0x02}, {0x4a,0x04,0x04}}, OFF_BOARD, 0 },
  397. {DEVID_W82C105, "W82C105", PCI_W82C105, NULL, INIT_W82C105, DMA_W82C105, {{0x40,0x01,0x01}, {0x40,0x10,0x10}},  ON_BOARD, 0 },
  398. {DEVID_UM8673F, "UM8673F", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  399. {DEVID_UM8886A, "UM8886A", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  400. {DEVID_UM8886BF,"UM8886BF", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 },
  401. {DEVID_HPT34X, "HPT34X", PCI_HPT34X, NULL, INIT_HPT34X, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, NEVER_BOARD, 16 },
  402. {DEVID_HPT366, "HPT366", PCI_HPT366, ATA66_HPT366, INIT_HPT366, DMA_HPT366, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 240 },
  403. {DEVID_ALI15X3, "ALI15X3", PCI_ALI15X3, ATA66_ALI15X3, INIT_ALI15X3, DMA_ALI15X3, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  404. {DEVID_CY82C693,"CY82C693", PCI_CY82C693, NULL, INIT_CY82C693, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  405. {DEVID_HINT, "HINT_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  406. {DEVID_CS5530, "CS5530", PCI_CS5530, NULL, INIT_CS5530, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  407. {DEVID_AMD7401, "AMD7401", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  408. {DEVID_AMD7409, "AMD7409", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 },
  409. {DEVID_AMD7411, "AMD7411", PCI_AMD74XX, ATA66_AMD74XX, INIT_AMD74XX, DMA_AMD74XX, {{0x40,0x01,0x01}, {0x40,0x02,0x02}}, ON_BOARD, 0 },
  410. {DEVID_PDCADMA, "PDCADMA", PCI_PDCADMA, ATA66_PDCADMA, INIT_PDCADMA, DMA_PDCADMA, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, OFF_BOARD, 0 },
  411. {DEVID_SLC90E66,"SLC90E66", PCI_SLC90E66, ATA66_SLC90E66, INIT_SLC90E66, NULL, {{0x41,0x80,0x80}, {0x43,0x80,0x80}}, ON_BOARD, 0 },
  412.         {DEVID_OSB4,    "ServerWorks OSB4", PCI_SVWKS, ATA66_SVWKS, INIT_SVWKS, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  413. {DEVID_CSB5, "ServerWorks CSB5", PCI_SVWKS, ATA66_SVWKS, INIT_SVWKS, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}}, ON_BOARD, 0 },
  414. {DEVID_ITE8172G,"IT8172G", PCI_IT8172, NULL, INIT_IT8172, NULL, {{0x00,0x00,0x00}, {0x40,0x00,0x01}}, ON_BOARD, 0 },
  415. {IDE_PCI_DEVID_NULL, "PCI_IDE", NULL, NULL, NULL, NULL, {{0x00,0x00,0x00}, {0x00,0x00,0x00}},  ON_BOARD, 0 }};
  416. /*
  417.  * This allows offboard ide-pci cards the enable a BIOS, verify interrupt
  418.  * settings of split-mirror pci-config space, place chipset into init-mode,
  419.  * and/or preserve an interrupt if the card is not native ide support.
  420.  */
  421. static unsigned int __init ide_special_settings (struct pci_dev *dev, const char *name)
  422. {
  423. switch(dev->device) {
  424. case PCI_DEVICE_ID_TTI_HPT366:
  425. case PCI_DEVICE_ID_PROMISE_20246:
  426. case PCI_DEVICE_ID_PROMISE_20262:
  427. case PCI_DEVICE_ID_PROMISE_20265:
  428. case PCI_DEVICE_ID_PROMISE_20267:
  429. case PCI_DEVICE_ID_PROMISE_20268:
  430. case PCI_DEVICE_ID_ARTOP_ATP850UF:
  431. case PCI_DEVICE_ID_ARTOP_ATP860:
  432. case PCI_DEVICE_ID_ARTOP_ATP860R:
  433. return dev->irq;
  434. default:
  435. break;
  436. }
  437. return 0;
  438. }
  439. /*
  440.  * Match a PCI IDE port against an entry in ide_hwifs[],
  441.  * based on io_base port if possible.
  442.  */
  443. static ide_hwif_t __init *ide_match_hwif (unsigned long io_base, byte bootable, const char *name)
  444. {
  445. int h;
  446. ide_hwif_t *hwif;
  447. /*
  448.  * Look for a hwif with matching io_base specified using
  449.  * parameters to ide_setup().
  450.  */
  451. for (h = 0; h < MAX_HWIFS; ++h) {
  452. hwif = &ide_hwifs[h];
  453. if (hwif->io_ports[IDE_DATA_OFFSET] == io_base) {
  454. if (hwif->chipset == ide_generic)
  455. return hwif; /* a perfect match */
  456. }
  457. }
  458. /*
  459.  * Look for a hwif with matching io_base default value.
  460.  * If chipset is "ide_unknown", then claim that hwif slot.
  461.  * Otherwise, some other chipset has already claimed it..  :(
  462.  */
  463. for (h = 0; h < MAX_HWIFS; ++h) {
  464. hwif = &ide_hwifs[h];
  465. if (hwif->io_ports[IDE_DATA_OFFSET] == io_base) {
  466. if (hwif->chipset == ide_unknown)
  467. return hwif; /* match */
  468. printk("%s: port 0x%04lx already claimed by %sn", name, io_base, hwif->name);
  469. return NULL; /* already claimed */
  470. }
  471. }
  472. /*
  473.  * Okay, there is no hwif matching our io_base,
  474.  * so we'll just claim an unassigned slot.
  475.  * Give preference to claiming other slots before claiming ide0/ide1,
  476.  * just in case there's another interface yet-to-be-scanned
  477.  * which uses ports 1f0/170 (the ide0/ide1 defaults).
  478.  *
  479.  * Unless there is a bootable card that does not use the standard
  480.  * ports 1f0/170 (the ide0/ide1 defaults). The (bootable) flag.
  481.  */
  482. if (bootable) {
  483. for (h = 0; h < MAX_HWIFS; ++h) {
  484. hwif = &ide_hwifs[h];
  485. if (hwif->chipset == ide_unknown)
  486. return hwif; /* pick an unused entry */
  487. }
  488. } else {
  489. for (h = 2; h < MAX_HWIFS; ++h) {
  490. hwif = ide_hwifs + h;
  491. if (hwif->chipset == ide_unknown)
  492. return hwif; /* pick an unused entry */
  493. }
  494. }
  495. for (h = 0; h < 2; ++h) {
  496. hwif = ide_hwifs + h;
  497. if (hwif->chipset == ide_unknown)
  498. return hwif; /* pick an unused entry */
  499. }
  500. printk("%s: too many IDE interfaces, no room in tablen", name);
  501. return NULL;
  502. }
  503. static int __init ide_setup_pci_baseregs (struct pci_dev *dev, const char *name)
  504. {
  505. byte reg, progif = 0;
  506. /*
  507.  * Place both IDE interfaces into PCI "native" mode:
  508.  */
  509. if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || (progif & 5) != 5) {
  510. if ((progif & 0xa) != 0xa) {
  511. printk("%s: device not capable of full native PCI moden", name);
  512. return 1;
  513. }
  514. printk("%s: placing both ports into native PCI moden", name);
  515. (void) pci_write_config_byte(dev, PCI_CLASS_PROG, progif|5);
  516. if (pci_read_config_byte(dev, PCI_CLASS_PROG, &progif) || (progif & 5) != 5) {
  517. printk("%s: rewrite of PROGIF failed, wanted 0x%04x, got 0x%04xn", name, progif|5, progif);
  518. return 1;
  519. }
  520. }
  521. /*
  522.  * Setup base registers for IDE command/control spaces for each interface:
  523.  */
  524. for (reg = 0; reg < 4; reg++) {
  525. struct resource *res = dev->resource + reg;
  526. if ((res->flags & IORESOURCE_IO) == 0)
  527. continue;
  528. if (!res->start) {
  529. printk("%s: Missing I/O address #%dn", name, reg);
  530. return 1;
  531. }
  532. }
  533. return 0;
  534. }
  535. /*
  536.  * ide_setup_pci_device() looks at the primary/secondary interfaces
  537.  * on a PCI IDE device and, if they are enabled, prepares the IDE driver
  538.  * for use with them.  This generic code works for most PCI chipsets.
  539.  *
  540.  * One thing that is not standardized is the location of the
  541.  * primary/secondary interface "enable/disable" bits.  For chipsets that
  542.  * we "know" about, this information is in the ide_pci_device_t struct;
  543.  * for all other chipsets, we just assume both interfaces are enabled.
  544.  */
  545. static void __init ide_setup_pci_device (struct pci_dev *dev, ide_pci_device_t *d)
  546. {
  547. unsigned int port, at_least_one_hwif_enabled = 0, autodma = 0, pciirq = 0;
  548. unsigned short pcicmd = 0, tried_config = 0;
  549. byte tmp = 0;
  550. ide_hwif_t *hwif, *mate = NULL;
  551. unsigned int class_rev;
  552. static int secondpdc = 0;
  553. #ifdef CONFIG_IDEDMA_AUTO
  554. if (!noautodma)
  555. autodma = 1;
  556. #endif
  557. if (pci_enable_device(dev)) {
  558. printk("%s: error while enabling PCI devicen", d->name);
  559. return;
  560. }
  561. check_if_enabled:
  562. if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd)) {
  563. printk("%s: error accessing PCI regsn", d->name);
  564. return;
  565. }
  566. if (!(pcicmd & PCI_COMMAND_IO)) { /* is device disabled? */
  567. /*
  568.  * PnP BIOS was *supposed* to have set this device up for us,
  569.  * but we can do it ourselves, so long as the BIOS has assigned an IRQ
  570.  *  (or possibly the device is using a "legacy header" for IRQs).
  571.  * Maybe the user deliberately *disabled* the device,
  572.  * but we'll eventually ignore it again if no drives respond.
  573.  */
  574. if (tried_config++
  575.  || ide_setup_pci_baseregs(dev, d->name)
  576.  || pci_write_config_word(dev, PCI_COMMAND, pcicmd | PCI_COMMAND_IO)) {
  577. printk("%s: device disabled (BIOS)n", d->name);
  578. return;
  579. }
  580. autodma = 0; /* default DMA off if we had to configure it here */
  581. goto check_if_enabled;
  582. }
  583. if (tried_config)
  584. printk("%s: device enabled (Linux)n", d->name);
  585. pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
  586. class_rev &= 0xff;
  587. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X)) {
  588. /* see comments in hpt34x.c on why..... */
  589. char *chipset_names[] = {"HPT343", "HPT345"};
  590. strcpy(d->name, chipset_names[(pcicmd & PCI_COMMAND_MEMORY) ? 1 : 0]);
  591. d->bootable = (pcicmd & PCI_COMMAND_MEMORY) ? OFF_BOARD : NEVER_BOARD;
  592. }
  593. printk("%s: chipset revision %dn", d->name, class_rev);
  594. /*
  595.  * Can we trust the reported IRQ?
  596.  */
  597. pciirq = dev->irq;
  598. if (dev->class >> 8 == PCI_CLASS_STORAGE_RAID)
  599. {
  600. /* By rights we want to ignore these, but the Promise Fastrak
  601.    people have some strange ideas about proprietary so we have
  602.    to act otherwise on those. The supertrak however we need
  603.    to skip */
  604. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265))
  605. {
  606. printk(KERN_INFO "ide: Found promise 20265 in RAID mode.n");
  607. if(dev->bus->self && dev->bus->self->vendor == PCI_VENDOR_ID_INTEL &&
  608. dev->bus->self->device == PCI_DEVICE_ID_INTEL_I960)
  609. {
  610. printk(KERN_INFO "ide: Skipping Promise PDC20265 attached to I2O RAID controller.n");
  611. return;
  612. }
  613. }
  614. /* Its attached to something else, just a random bridge. 
  615.    Suspect a fastrak and fall through */
  616. }
  617. if ((dev->class & ~(0xfa)) != ((PCI_CLASS_STORAGE_IDE << 8) | 5)) {
  618. printk("%s: not 100%% native mode: will probe irqs latern", d->name);
  619. /*
  620.  * This allows offboard ide-pci cards the enable a BIOS,
  621.  * verify interrupt settings of split-mirror pci-config
  622.  * space, place chipset into init-mode, and/or preserve
  623.  * an interrupt if the card is not native ide support.
  624.  */
  625. pciirq = (d->init_chipset) ? d->init_chipset(dev, d->name) : ide_special_settings(dev, d->name);
  626. } else if (tried_config) {
  627. printk("%s: will probe irqs latern", d->name);
  628. pciirq = 0;
  629. } else if (!pciirq) {
  630. printk("%s: bad irq (%d): will probe latern", d->name, pciirq);
  631. pciirq = 0;
  632. } else {
  633. if (d->init_chipset)
  634. (void) d->init_chipset(dev, d->name);
  635. #ifdef __sparc__
  636. printk("%s: 100%% native mode on irq %sn",
  637.        d->name, __irq_itoa(pciirq));
  638. #else
  639. printk("%s: 100%% native mode on irq %dn", d->name, pciirq);
  640. #endif
  641. }
  642. /*
  643.  * Set up the IDE ports
  644.  */
  645. for (port = 0; port <= 1; ++port) {
  646. unsigned long base = 0, ctl = 0;
  647. ide_pci_enablebit_t *e = &(d->enablebits[port]);
  648. /* 
  649.  * If this is a Promise FakeRaid controller, the 2nd controller will be marked as 
  650.  * disabled while it is actually there and enabled by the bios for raid purposes. 
  651.  * Skip the normal "is it enabled" test for those.
  652.  */
  653. if ((IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265)) && (secondpdc++==1) && (port==1)  ) 
  654. goto controller_ok;
  655. if ((IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20262)) && (secondpdc++==1) && (port==1)  ) 
  656. goto controller_ok;
  657. if (e->reg && (pci_read_config_byte(dev, e->reg, &tmp) || (tmp & e->mask) != e->val))
  658. continue; /* port not enabled */
  659. controller_ok:
  660. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366) && (port) && (class_rev < 0x03))
  661. return;
  662. if ((dev->class >> 8) != PCI_CLASS_STORAGE_IDE || (dev->class & (port ? 4 : 1)) != 0) {
  663. ctl  = dev->resource[(2*port)+1].start;
  664. base = dev->resource[2*port].start;
  665. if (!(ctl & PCI_BASE_ADDRESS_IO_MASK) ||
  666.     !(base & PCI_BASE_ADDRESS_IO_MASK)) {
  667. printk("%s: IO baseregs (BIOS) are reported as MEM, report to <andre@linux-ide.org>.n", d->name);
  668. #if 0
  669. /* FIXME! This really should check that it really gets the IO/MEM part right! */
  670. continue;
  671. #endif
  672. }
  673. }
  674. if ((ctl && !base) || (base && !ctl)) {
  675. printk("%s: inconsistent baseregs (BIOS) for port %d, skippingn", d->name, port);
  676. continue;
  677. }
  678. if (!ctl)
  679. ctl = port ? 0x374 : 0x3f4; /* use default value */
  680. if (!base)
  681. base = port ? 0x170 : 0x1f0; /* use default value */
  682. if ((hwif = ide_match_hwif(base, d->bootable, d->name)) == NULL)
  683. continue; /* no room in ide_hwifs[] */
  684. if (hwif->io_ports[IDE_DATA_OFFSET] != base) {
  685. ide_init_hwif_ports(&hwif->hw, base, (ctl | 2), NULL);
  686. memcpy(hwif->io_ports, hwif->hw.io_ports, sizeof(hwif->io_ports));
  687. hwif->noprobe = !hwif->io_ports[IDE_DATA_OFFSET];
  688. }
  689. hwif->chipset = ide_pci;
  690. hwif->pci_dev = dev;
  691. hwif->pci_devid = d->devid;
  692. hwif->channel = port;
  693. if (!hwif->irq)
  694. hwif->irq = pciirq;
  695. if (mate) {
  696. hwif->mate = mate;
  697. mate->mate = hwif;
  698. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6210)) {
  699. hwif->serialized = 1;
  700. mate->serialized = 1;
  701. }
  702. }
  703. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_UM8886A) ||
  704.     IDE_PCI_DEVID_EQ(d->devid, DEVID_UM8886BF) ||
  705.     IDE_PCI_DEVID_EQ(d->devid, DEVID_UM8673F)) {
  706. hwif->irq = hwif->channel ? 15 : 14;
  707. goto bypass_umc_dma;
  708. }
  709. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_MPIIX))
  710. goto bypass_piix_dma;
  711. if (hwif->udma_four) {
  712. printk("%s: ATA-66/100 forced bit set (WARNING)!!n", d->name);
  713. } else {
  714. hwif->udma_four = (d->ata66_check) ? d->ata66_check(hwif) : 0;
  715. }
  716. #ifdef CONFIG_BLK_DEV_IDEDMA
  717. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_SIS5513) ||
  718.     IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260) ||
  719.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PIIX4NX) ||
  720.     IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X)  ||
  721.     IDE_PCI_DEVID_EQ(d->devid, DEVID_VIA_IDE) ||
  722.     IDE_PCI_DEVID_EQ(d->devid, DEVID_MR_IDE)  ||
  723.     IDE_PCI_DEVID_EQ(d->devid, DEVID_VP_IDE))
  724. autodma = 0;
  725. if (autodma)
  726. hwif->autodma = 1;
  727. if (IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20246) ||
  728.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20262) ||
  729.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20265) ||
  730.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20267) ||
  731.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20268) ||
  732.     IDE_PCI_DEVID_EQ(d->devid, DEVID_PDC20268R) ||
  733.     IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6210) ||
  734.     IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260) ||
  735.     IDE_PCI_DEVID_EQ(d->devid, DEVID_AEC6260R) ||
  736.     IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT34X) ||
  737.     IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366) ||
  738.     IDE_PCI_DEVID_EQ(d->devid, DEVID_CS5530) ||
  739.     IDE_PCI_DEVID_EQ(d->devid, DEVID_CY82C693) ||
  740.     IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD646) ||
  741.     IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD648) ||
  742.     IDE_PCI_DEVID_EQ(d->devid, DEVID_CMD649) ||
  743.     IDE_PCI_DEVID_EQ(d->devid, DEVID_OSB4) ||
  744.     ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && (dev->class & 0x80))) {
  745. unsigned long dma_base = ide_get_or_set_dma_base(hwif, (!mate && d->extra) ? d->extra : 0, d->name);
  746. if (dma_base && !(pcicmd & PCI_COMMAND_MASTER)) {
  747. /*
  748.      * Set up BM-DMA capability (PnP BIOS should have done this)
  749.      */
  750.      if (!IDE_PCI_DEVID_EQ(d->devid, DEVID_CS5530))
  751. hwif->autodma = 0; /* default DMA off if we had to configure it here */
  752. (void) pci_write_config_word(dev, PCI_COMMAND, pcicmd | PCI_COMMAND_MASTER);
  753. if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd) || !(pcicmd & PCI_COMMAND_MASTER)) {
  754. printk("%s: %s error updating PCICMDn", hwif->name, d->name);
  755. dma_base = 0;
  756. }
  757. }
  758. if (dma_base) {
  759. if (d->dma_init) {
  760. d->dma_init(hwif, dma_base);
  761. } else {
  762. ide_setup_dma(hwif, dma_base, 8);
  763. }
  764. } else {
  765. printk("%s: %s Bus-Master DMA disabled (BIOS)n", hwif->name, d->name);
  766. }
  767. }
  768. #endif /* CONFIG_BLK_DEV_IDEDMA */
  769. bypass_piix_dma:
  770. bypass_umc_dma:
  771. if (d->init_hwif)  /* Call chipset-specific routine for each enabled hwif */
  772. d->init_hwif(hwif);
  773. mate = hwif;
  774. at_least_one_hwif_enabled = 1;
  775. }
  776. if (!at_least_one_hwif_enabled)
  777. printk("%s: neither IDE port enabled (BIOS)n", d->name);
  778. }
  779. static void __init hpt366_device_order_fixup (struct pci_dev *dev, ide_pci_device_t *d)
  780. {
  781. struct pci_dev *dev2 = NULL, *findev;
  782. ide_pci_device_t *d2;
  783. unsigned char pin1 = 0, pin2 = 0;
  784. unsigned int class_rev;
  785. char *chipset_names[] = {"HPT366", "HPT366", "HPT368", "HPT370", "HPT370A"};
  786. if (PCI_FUNC(dev->devfn) & 1)
  787. return;
  788. pci_read_config_dword(dev, PCI_CLASS_REVISION, &class_rev);
  789. class_rev &= 0xff;
  790. strcpy(d->name, chipset_names[class_rev]);
  791. switch(class_rev) {
  792. case 4:
  793. case 3: printk("%s: IDE controller on PCI bus %02x dev %02xn", d->name, dev->bus->number, dev->devfn);
  794. ide_setup_pci_device(dev, d);
  795. return;
  796. default: break;
  797. }
  798. pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin1);
  799. pci_for_each_dev(findev) {
  800. if ((findev->vendor == dev->vendor) &&
  801.     (findev->device == dev->device) &&
  802.     ((findev->devfn - dev->devfn) == 1) &&
  803.     (PCI_FUNC(findev->devfn) & 1)) {
  804. dev2 = findev;
  805. pci_read_config_byte(dev2, PCI_INTERRUPT_PIN, &pin2);
  806. hpt363_shared_pin = (pin1 != pin2) ? 1 : 0;
  807. hpt363_shared_irq = (dev->irq == dev2->irq) ? 1 : 0;
  808. if (hpt363_shared_pin && hpt363_shared_irq) {
  809. d->bootable = ON_BOARD;
  810. printk("%s: onboard version of chipset, pin1=%d pin2=%dn", d->name, pin1, pin2);
  811. #if 0
  812. /* I forgot why I did this once, but it fixed something. */
  813. pci_write_config_byte(dev2, PCI_INTERRUPT_PIN, dev->irq);
  814. printk("PCI: %s: Fixing interrupt %d pin %d to ZERO n", d->name, dev2->irq, pin2);
  815. pci_write_config_byte(dev2, PCI_INTERRUPT_LINE, 0);
  816. #endif
  817. }
  818. break;
  819. }
  820. }
  821. printk("%s: IDE controller on PCI bus %02x dev %02xn", d->name, dev->bus->number, dev->devfn);
  822. ide_setup_pci_device(dev, d);
  823. if (!dev2)
  824. return;
  825. d2 = d;
  826. printk("%s: IDE controller on PCI bus %02x dev %02xn", d2->name, dev2->bus->number, dev2->devfn);
  827. ide_setup_pci_device(dev2, d2);
  828. }
  829. /*
  830.  * ide_scan_pcibus() gets invoked at boot time from ide.c.
  831.  * It finds all PCI IDE controllers and calls ide_setup_pci_device for them.
  832.  */
  833. void __init ide_scan_pcidev (struct pci_dev *dev)
  834. {
  835. ide_pci_devid_t devid;
  836. ide_pci_device_t *d;
  837. devid.vid = dev->vendor;
  838. devid.did = dev->device;
  839. for (d = ide_pci_chipsets; d->devid.vid && !IDE_PCI_DEVID_EQ(d->devid, devid); ++d);
  840. if (d->init_hwif == IDE_IGNORE)
  841. printk("%s: ignored by ide_scan_pci_device() (uses own driver)n", d->name);
  842. else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_OPTI621V) && !(PCI_FUNC(dev->devfn) & 1))
  843. return;
  844. else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_CY82C693) && (!(PCI_FUNC(dev->devfn) & 1) || !((dev->class >> 8) == PCI_CLASS_STORAGE_IDE)))
  845. return; /* CY82C693 is more than only a IDE controller */
  846. else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_ITE8172G) && (!(PCI_FUNC(dev->devfn) & 1) || !((dev->class >> 8) == PCI_CLASS_STORAGE_IDE)))
  847. return; /* IT8172G is also more than only an IDE controller */
  848. else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_UM8886A) && !(PCI_FUNC(dev->devfn) & 1))
  849. return; /* UM8886A/BF pair */
  850. else if (IDE_PCI_DEVID_EQ(d->devid, DEVID_HPT366))
  851. hpt366_device_order_fixup(dev, d);
  852. else if (!IDE_PCI_DEVID_EQ(d->devid, IDE_PCI_DEVID_NULL) || (dev->class >> 8) == PCI_CLASS_STORAGE_IDE) {
  853. if (IDE_PCI_DEVID_EQ(d->devid, IDE_PCI_DEVID_NULL))
  854. printk("%s: unknown IDE controller on PCI bus %02x device %02x, VID=%04x, DID=%04xn",
  855.        d->name, dev->bus->number, dev->devfn, devid.vid, devid.did);
  856. else
  857. printk("%s: IDE controller on PCI bus %02x dev %02xn", d->name, dev->bus->number, dev->devfn);
  858. ide_setup_pci_device(dev, d);
  859. }
  860. }
  861. void __init ide_scan_pcibus (int scan_direction)
  862. {
  863. struct pci_dev *dev;
  864. if (!scan_direction) {
  865. pci_for_each_dev(dev) {
  866. ide_scan_pcidev(dev);
  867. }
  868. } else {
  869. pci_for_each_dev_reverse(dev) {
  870. ide_scan_pcidev(dev);
  871. }
  872. }
  873. }