pci-pc.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:38k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * Low-Level PCI Support for PC
  3.  *
  4.  * (c) 1999--2000 Martin Mares <mj@ucw.cz>
  5.  */
  6. #include <linux/config.h>
  7. #include <linux/types.h>
  8. #include <linux/kernel.h>
  9. #include <linux/sched.h>
  10. #include <linux/pci.h>
  11. #include <linux/init.h>
  12. #include <linux/ioport.h>
  13. #include <asm/segment.h>
  14. #include <asm/io.h>
  15. #include <asm/smp.h>
  16. #include <asm/smpboot.h>
  17. #include "pci-i386.h"
  18. unsigned int pci_probe = PCI_PROBE_BIOS | PCI_PROBE_CONF1 | PCI_PROBE_CONF2;
  19. int pcibios_last_bus = -1;
  20. struct pci_bus *pci_root_bus = NULL;
  21. struct pci_ops *pci_root_ops = NULL;
  22. int (*pci_config_read)(int seg, int bus, int dev, int fn, int reg, int len, u32 *value) = NULL;
  23. int (*pci_config_write)(int seg, int bus, int dev, int fn, int reg, int len, u32 value) = NULL;
  24. #ifdef CONFIG_MULTIQUAD
  25. #define BUS2QUAD(global) (mp_bus_id_to_node[global])
  26. #define BUS2LOCAL(global) (mp_bus_id_to_local[global])
  27. #define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
  28. #else
  29. #define BUS2QUAD(global) (0)
  30. #define BUS2LOCAL(global) (global)
  31. #define QUADLOCAL2BUS(quad,local) (local)
  32. #endif
  33. /*
  34.  * This interrupt-safe spinlock protects all accesses to PCI
  35.  * configuration space.
  36.  */
  37. static spinlock_t pci_config_lock = SPIN_LOCK_UNLOCKED;
  38. /*
  39.  * Functions for accessing PCI configuration space with type 1 accesses
  40.  */
  41. #ifdef CONFIG_PCI_DIRECT
  42. #ifdef CONFIG_MULTIQUAD
  43. #define PCI_CONF1_ADDRESS(bus, dev, fn, reg) 
  44. (0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
  45. static int pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* CONFIG_MULTIQUAD */
  46. {
  47. unsigned long flags;
  48. if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
  49. return -EINVAL;
  50. spin_lock_irqsave(&pci_config_lock, flags);
  51. outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
  52. switch (len) {
  53. case 1:
  54. *value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus));
  55. break;
  56. case 2:
  57. *value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus));
  58. break;
  59. case 4:
  60. *value = inl_quad(0xCFC, BUS2QUAD(bus));
  61. break;
  62. }
  63. spin_unlock_irqrestore(&pci_config_lock, flags);
  64. return 0;
  65. }
  66. static int pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* CONFIG_MULTIQUAD */
  67. {
  68. unsigned long flags;
  69. if (bus > 255 || dev > 31 || fn > 7 || reg > 255) 
  70. return -EINVAL;
  71. spin_lock_irqsave(&pci_config_lock, flags);
  72. outl_quad(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
  73. switch (len) {
  74. case 1:
  75. outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus));
  76. break;
  77. case 2:
  78. outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus));
  79. break;
  80. case 4:
  81. outl_quad((u32)value, 0xCFC, BUS2QUAD(bus));
  82. break;
  83. }
  84. spin_unlock_irqrestore(&pci_config_lock, flags);
  85. return 0;
  86. }
  87. static int pci_conf1_read_mq_config_byte(struct pci_dev *dev, int where, u8 *value)
  88. {
  89. int result; 
  90. u32 data;
  91. result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  92. PCI_FUNC(dev->devfn), where, 1, &data);
  93. *value = (u8)data;
  94. return result;
  95. }
  96. static int pci_conf1_read_mq_config_word(struct pci_dev *dev, int where, u16 *value)
  97. {
  98. int result; 
  99. u32 data;
  100. result = pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  101. PCI_FUNC(dev->devfn), where, 2, &data);
  102. *value = (u16)data;
  103. return result;
  104. }
  105. static int pci_conf1_read_mq_config_dword(struct pci_dev *dev, int where, u32 *value)
  106. {
  107. if (!value) 
  108. return -EINVAL;
  109. return pci_conf1_mq_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  110. PCI_FUNC(dev->devfn), where, 4, value);
  111. }
  112. static int pci_conf1_write_mq_config_byte(struct pci_dev *dev, int where, u8 value)
  113. {
  114. return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  115. PCI_FUNC(dev->devfn), where, 1, value);
  116. }
  117. static int pci_conf1_write_mq_config_word(struct pci_dev *dev, int where, u16 value)
  118. {
  119. return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  120. PCI_FUNC(dev->devfn), where, 2, value);
  121. }
  122. static int pci_conf1_write_mq_config_dword(struct pci_dev *dev, int where, u32 value)
  123. {
  124. return pci_conf1_mq_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  125. PCI_FUNC(dev->devfn), where, 4, value);
  126. }
  127. static struct pci_ops pci_direct_mq_conf1 = {
  128. pci_conf1_read_mq_config_byte,
  129. pci_conf1_read_mq_config_word,
  130. pci_conf1_read_mq_config_dword,
  131. pci_conf1_write_mq_config_byte,
  132. pci_conf1_write_mq_config_word,
  133. pci_conf1_write_mq_config_dword
  134. };
  135. #endif /* !CONFIG_MULTIQUAD */
  136. #define PCI_CONF1_ADDRESS(bus, dev, fn, reg) 
  137. (0x80000000 | (bus << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
  138. static int pci_conf1_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) /* !CONFIG_MULTIQUAD */
  139. {
  140. unsigned long flags;
  141. if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
  142. return -EINVAL;
  143. spin_lock_irqsave(&pci_config_lock, flags);
  144. outl(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8);
  145. switch (len) {
  146. case 1:
  147. *value = inb(0xCFC + (reg & 3));
  148. break;
  149. case 2:
  150. *value = inw(0xCFC + (reg & 2));
  151. break;
  152. case 4:
  153. *value = inl(0xCFC);
  154. break;
  155. }
  156. spin_unlock_irqrestore(&pci_config_lock, flags);
  157. return 0;
  158. }
  159. static int pci_conf1_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) /* !CONFIG_MULTIQUAD */
  160. {
  161. unsigned long flags;
  162. if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
  163. return -EINVAL;
  164. spin_lock_irqsave(&pci_config_lock, flags);
  165. outl(PCI_CONF1_ADDRESS(bus, dev, fn, reg), 0xCF8);
  166. switch (len) {
  167. case 1:
  168. outb((u8)value, 0xCFC + (reg & 3));
  169. break;
  170. case 2:
  171. outw((u16)value, 0xCFC + (reg & 2));
  172. break;
  173. case 4:
  174. outl((u32)value, 0xCFC);
  175. break;
  176. }
  177. spin_unlock_irqrestore(&pci_config_lock, flags);
  178. return 0;
  179. }
  180. #undef PCI_CONF1_ADDRESS
  181. static int pci_conf1_read_config_byte(struct pci_dev *dev, int where, u8 *value)
  182. {
  183. int result; 
  184. u32 data;
  185. result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  186. PCI_FUNC(dev->devfn), where, 1, &data);
  187. *value = (u8)data;
  188. return result;
  189. }
  190. static int pci_conf1_read_config_word(struct pci_dev *dev, int where, u16 *value)
  191. {
  192. int result; 
  193. u32 data;
  194. result = pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  195. PCI_FUNC(dev->devfn), where, 2, &data);
  196. *value = (u16)data;
  197. return result;
  198. }
  199. static int pci_conf1_read_config_dword(struct pci_dev *dev, int where, u32 *value)
  200. {
  201. return pci_conf1_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  202. PCI_FUNC(dev->devfn), where, 4, value);
  203. }
  204. static int pci_conf1_write_config_byte(struct pci_dev *dev, int where, u8 value)
  205. {
  206. return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  207. PCI_FUNC(dev->devfn), where, 1, value);
  208. }
  209. static int pci_conf1_write_config_word(struct pci_dev *dev, int where, u16 value)
  210. {
  211. return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  212. PCI_FUNC(dev->devfn), where, 2, value);
  213. }
  214. static int pci_conf1_write_config_dword(struct pci_dev *dev, int where, u32 value)
  215. {
  216. return pci_conf1_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  217. PCI_FUNC(dev->devfn), where, 4, value);
  218. }
  219. static struct pci_ops pci_direct_conf1 = {
  220. pci_conf1_read_config_byte,
  221. pci_conf1_read_config_word,
  222. pci_conf1_read_config_dword,
  223. pci_conf1_write_config_byte,
  224. pci_conf1_write_config_word,
  225. pci_conf1_write_config_dword
  226. };
  227. /*
  228.  * Functions for accessing PCI configuration space with type 2 accesses
  229.  */
  230. #define PCI_CONF2_ADDRESS(dev, reg) (u16)(0xC000 | (dev << 8) | reg)
  231. static int pci_conf2_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
  232. {
  233. unsigned long flags;
  234. if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
  235. return -EINVAL;
  236. if (dev & 0x10) 
  237. return PCIBIOS_DEVICE_NOT_FOUND;
  238. spin_lock_irqsave(&pci_config_lock, flags);
  239. outb((u8)(0xF0 | (fn << 1)), 0xCF8);
  240. outb((u8)bus, 0xCFA);
  241. switch (len) {
  242. case 1:
  243. *value = inb(PCI_CONF2_ADDRESS(dev, reg));
  244. break;
  245. case 2:
  246. *value = inw(PCI_CONF2_ADDRESS(dev, reg));
  247. break;
  248. case 4:
  249. *value = inl(PCI_CONF2_ADDRESS(dev, reg));
  250. break;
  251. }
  252. outb (0, 0xCF8);
  253. spin_unlock_irqrestore(&pci_config_lock, flags);
  254. return 0;
  255. }
  256. static int pci_conf2_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
  257. {
  258. unsigned long flags;
  259. if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
  260. return -EINVAL;
  261. if (dev & 0x10) 
  262. return PCIBIOS_DEVICE_NOT_FOUND;
  263. spin_lock_irqsave(&pci_config_lock, flags);
  264. outb((u8)(0xF0 | (fn << 1)), 0xCF8);
  265. outb((u8)bus, 0xCFA);
  266. switch (len) {
  267. case 1:
  268. outb ((u8)value, PCI_CONF2_ADDRESS(dev, reg));
  269. break;
  270. case 2:
  271. outw ((u16)value, PCI_CONF2_ADDRESS(dev, reg));
  272. break;
  273. case 4:
  274. outl ((u32)value, PCI_CONF2_ADDRESS(dev, reg));
  275. break;
  276. }
  277. outb (0, 0xCF8);    
  278. spin_unlock_irqrestore(&pci_config_lock, flags);
  279. return 0;
  280. }
  281. #undef PCI_CONF2_ADDRESS
  282. static int pci_conf2_read_config_byte(struct pci_dev *dev, int where, u8 *value)
  283. {
  284. int result; 
  285. u32 data;
  286. result = pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  287. PCI_FUNC(dev->devfn), where, 1, &data);
  288. *value = (u8)data;
  289. return result;
  290. }
  291. static int pci_conf2_read_config_word(struct pci_dev *dev, int where, u16 *value)
  292. {
  293. int result; 
  294. u32 data;
  295. result = pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  296. PCI_FUNC(dev->devfn), where, 2, &data);
  297. *value = (u16)data;
  298. return result;
  299. }
  300. static int pci_conf2_read_config_dword(struct pci_dev *dev, int where, u32 *value)
  301. {
  302. return pci_conf2_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  303. PCI_FUNC(dev->devfn), where, 4, value);
  304. }
  305. static int pci_conf2_write_config_byte(struct pci_dev *dev, int where, u8 value)
  306. {
  307. return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  308. PCI_FUNC(dev->devfn), where, 1, value);
  309. }
  310. static int pci_conf2_write_config_word(struct pci_dev *dev, int where, u16 value)
  311. {
  312. return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  313. PCI_FUNC(dev->devfn), where, 2, value);
  314. }
  315. static int pci_conf2_write_config_dword(struct pci_dev *dev, int where, u32 value)
  316. {
  317. return pci_conf2_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  318. PCI_FUNC(dev->devfn), where, 4, value);
  319. }
  320. static struct pci_ops pci_direct_conf2 = {
  321. pci_conf2_read_config_byte,
  322. pci_conf2_read_config_word,
  323. pci_conf2_read_config_dword,
  324. pci_conf2_write_config_byte,
  325. pci_conf2_write_config_word,
  326. pci_conf2_write_config_dword
  327. };
  328. /*
  329.  * Before we decide to use direct hardware access mechanisms, we try to do some
  330.  * trivial checks to ensure it at least _seems_ to be working -- we just test
  331.  * whether bus 00 contains a host bridge (this is similar to checking
  332.  * techniques used in XFree86, but ours should be more reliable since we
  333.  * attempt to make use of direct access hints provided by the PCI BIOS).
  334.  *
  335.  * This should be close to trivial, but it isn't, because there are buggy
  336.  * chipsets (yes, you guessed it, by Intel and Compaq) that have no class ID.
  337.  */
  338. static int __devinit pci_sanity_check(struct pci_ops *o)
  339. {
  340. u16 x;
  341. struct pci_bus bus; /* Fake bus and device */
  342. struct pci_dev dev;
  343. if (pci_probe & PCI_NO_CHECKS)
  344. return 1;
  345. bus.number = 0;
  346. dev.bus = &bus;
  347. for(dev.devfn=0; dev.devfn < 0x100; dev.devfn++)
  348. if ((!o->read_word(&dev, PCI_CLASS_DEVICE, &x) &&
  349.      (x == PCI_CLASS_BRIDGE_HOST || x == PCI_CLASS_DISPLAY_VGA)) ||
  350.     (!o->read_word(&dev, PCI_VENDOR_ID, &x) &&
  351.      (x == PCI_VENDOR_ID_INTEL || x == PCI_VENDOR_ID_COMPAQ)))
  352. return 1;
  353. DBG("PCI: Sanity check failedn");
  354. return 0;
  355. }
  356. static struct pci_ops * __devinit pci_check_direct(void)
  357. {
  358. unsigned int tmp;
  359. unsigned long flags;
  360. __save_flags(flags); __cli();
  361. /*
  362.  * Check if configuration type 1 works.
  363.  */
  364. if (pci_probe & PCI_PROBE_CONF1) {
  365. outb (0x01, 0xCFB);
  366. tmp = inl (0xCF8);
  367. outl (0x80000000, 0xCF8);
  368. if (inl (0xCF8) == 0x80000000 &&
  369.     pci_sanity_check(&pci_direct_conf1)) {
  370. outl (tmp, 0xCF8);
  371. __restore_flags(flags);
  372. printk(KERN_INFO "PCI: Using configuration type 1n");
  373. request_region(0xCF8, 8, "PCI conf1");
  374. #ifdef CONFIG_MULTIQUAD
  375. /* Multi-Quad has an extended PCI Conf1 */
  376. if(clustered_apic_mode == CLUSTERED_APIC_NUMAQ)
  377. return &pci_direct_mq_conf1;
  378. #endif
  379. return &pci_direct_conf1;
  380. }
  381. outl (tmp, 0xCF8);
  382. }
  383. /*
  384.  * Check if configuration type 2 works.
  385.  */
  386. if (pci_probe & PCI_PROBE_CONF2) {
  387. outb (0x00, 0xCFB);
  388. outb (0x00, 0xCF8);
  389. outb (0x00, 0xCFA);
  390. if (inb (0xCF8) == 0x00 && inb (0xCFA) == 0x00 &&
  391.     pci_sanity_check(&pci_direct_conf2)) {
  392. __restore_flags(flags);
  393. printk(KERN_INFO "PCI: Using configuration type 2n");
  394. request_region(0xCF8, 4, "PCI conf2");
  395. return &pci_direct_conf2;
  396. }
  397. }
  398. __restore_flags(flags);
  399. return NULL;
  400. }
  401. #endif
  402. /*
  403.  * BIOS32 and PCI BIOS handling.
  404.  */
  405. #ifdef CONFIG_PCI_BIOS
  406. #define PCIBIOS_PCI_FUNCTION_ID  0xb1XX
  407. #define PCIBIOS_PCI_BIOS_PRESENT  0xb101
  408. #define PCIBIOS_FIND_PCI_DEVICE 0xb102
  409. #define PCIBIOS_FIND_PCI_CLASS_CODE 0xb103
  410. #define PCIBIOS_GENERATE_SPECIAL_CYCLE 0xb106
  411. #define PCIBIOS_READ_CONFIG_BYTE 0xb108
  412. #define PCIBIOS_READ_CONFIG_WORD 0xb109
  413. #define PCIBIOS_READ_CONFIG_DWORD 0xb10a
  414. #define PCIBIOS_WRITE_CONFIG_BYTE 0xb10b
  415. #define PCIBIOS_WRITE_CONFIG_WORD 0xb10c
  416. #define PCIBIOS_WRITE_CONFIG_DWORD 0xb10d
  417. #define PCIBIOS_GET_ROUTING_OPTIONS 0xb10e
  418. #define PCIBIOS_SET_PCI_HW_INT 0xb10f
  419. /* BIOS32 signature: "_32_" */
  420. #define BIOS32_SIGNATURE (('_' << 0) + ('3' << 8) + ('2' << 16) + ('_' << 24))
  421. /* PCI signature: "PCI " */
  422. #define PCI_SIGNATURE (('P' << 0) + ('C' << 8) + ('I' << 16) + (' ' << 24))
  423. /* PCI service signature: "$PCI" */
  424. #define PCI_SERVICE (('$' << 0) + ('P' << 8) + ('C' << 16) + ('I' << 24))
  425. /* PCI BIOS hardware mechanism flags */
  426. #define PCIBIOS_HW_TYPE1 0x01
  427. #define PCIBIOS_HW_TYPE2 0x02
  428. #define PCIBIOS_HW_TYPE1_SPEC 0x10
  429. #define PCIBIOS_HW_TYPE2_SPEC 0x20
  430. /*
  431.  * This is the standard structure used to identify the entry point
  432.  * to the BIOS32 Service Directory, as documented in
  433.  *  Standard BIOS 32-bit Service Directory Proposal
  434.  *  Revision 0.4 May 24, 1993
  435.  *  Phoenix Technologies Ltd.
  436.  * Norwood, MA
  437.  * and the PCI BIOS specification.
  438.  */
  439. union bios32 {
  440. struct {
  441. unsigned long signature; /* _32_ */
  442. unsigned long entry; /* 32 bit physical address */
  443. unsigned char revision; /* Revision level, 0 */
  444. unsigned char length; /* Length in paragraphs should be 01 */
  445. unsigned char checksum; /* All bytes must add up to zero */
  446. unsigned char reserved[5];  /* Must be zero */
  447. } fields;
  448. char chars[16];
  449. };
  450. /*
  451.  * Physical address of the service directory.  I don't know if we're
  452.  * allowed to have more than one of these or not, so just in case
  453.  * we'll make pcibios_present() take a memory start parameter and store
  454.  * the array there.
  455.  */
  456. static struct {
  457. unsigned long address;
  458. unsigned short segment;
  459. } bios32_indirect = { 0, __KERNEL_CS };
  460. /*
  461.  * Returns the entry point for the given service, NULL on error
  462.  */
  463. static unsigned long bios32_service(unsigned long service)
  464. {
  465. unsigned char return_code; /* %al */
  466. unsigned long address; /* %ebx */
  467. unsigned long length; /* %ecx */
  468. unsigned long entry; /* %edx */
  469. unsigned long flags;
  470. __save_flags(flags); __cli();
  471. __asm__("lcall (%%edi); cld"
  472. : "=a" (return_code),
  473.   "=b" (address),
  474.   "=c" (length),
  475.   "=d" (entry)
  476. : "0" (service),
  477.   "1" (0),
  478.   "D" (&bios32_indirect));
  479. __restore_flags(flags);
  480. switch (return_code) {
  481. case 0:
  482. return address + entry;
  483. case 0x80: /* Not present */
  484. printk(KERN_WARNING "bios32_service(0x%lx): not presentn", service);
  485. return 0;
  486. default: /* Shouldn't happen */
  487. printk(KERN_WARNING "bios32_service(0x%lx): returned 0x%x -- BIOS bug!n",
  488. service, return_code);
  489. return 0;
  490. }
  491. }
  492. static struct {
  493. unsigned long address;
  494. unsigned short segment;
  495. } pci_indirect = { 0, __KERNEL_CS };
  496. static int pci_bios_present;
  497. static int __devinit check_pcibios(void)
  498. {
  499. u32 signature, eax, ebx, ecx;
  500. u8 status, major_ver, minor_ver, hw_mech;
  501. unsigned long flags, pcibios_entry;
  502. if ((pcibios_entry = bios32_service(PCI_SERVICE))) {
  503. pci_indirect.address = pcibios_entry + PAGE_OFFSET;
  504. __save_flags(flags); __cli();
  505. __asm__(
  506. "lcall (%%edi); cldnt"
  507. "jc 1fnt"
  508. "xor %%ah, %%ahn"
  509. "1:"
  510. : "=d" (signature),
  511.   "=a" (eax),
  512.   "=b" (ebx),
  513.   "=c" (ecx)
  514. : "1" (PCIBIOS_PCI_BIOS_PRESENT),
  515.   "D" (&pci_indirect)
  516. : "memory");
  517. __restore_flags(flags);
  518. status = (eax >> 8) & 0xff;
  519. hw_mech = eax & 0xff;
  520. major_ver = (ebx >> 8) & 0xff;
  521. minor_ver = ebx & 0xff;
  522. if (pcibios_last_bus < 0)
  523. pcibios_last_bus = ecx & 0xff;
  524. DBG("PCI: BIOS probe returned s=%02x hw=%02x ver=%02x.%02x l=%02xn",
  525. status, hw_mech, major_ver, minor_ver, pcibios_last_bus);
  526. if (status || signature != PCI_SIGNATURE) {
  527. printk (KERN_ERR "PCI: BIOS BUG #%x[%08x] foundn",
  528. status, signature);
  529. return 0;
  530. }
  531. printk(KERN_INFO "PCI: PCI BIOS revision %x.%02x entry at 0x%lx, last bus=%dn",
  532. major_ver, minor_ver, pcibios_entry, pcibios_last_bus);
  533. #ifdef CONFIG_PCI_DIRECT
  534. if (!(hw_mech & PCIBIOS_HW_TYPE1))
  535. pci_probe &= ~PCI_PROBE_CONF1;
  536. if (!(hw_mech & PCIBIOS_HW_TYPE2))
  537. pci_probe &= ~PCI_PROBE_CONF2;
  538. #endif
  539. return 1;
  540. }
  541. return 0;
  542. }
  543. static int __devinit pci_bios_find_device (unsigned short vendor, unsigned short device_id,
  544. unsigned short index, unsigned char *bus, unsigned char *device_fn)
  545. {
  546. unsigned short bx;
  547. unsigned short ret;
  548. __asm__("lcall (%%edi); cldnt"
  549. "jc 1fnt"
  550. "xor %%ah, %%ahn"
  551. "1:"
  552. : "=b" (bx),
  553.   "=a" (ret)
  554. : "1" (PCIBIOS_FIND_PCI_DEVICE),
  555.   "c" (device_id),
  556.   "d" (vendor),
  557.   "S" ((int) index),
  558.   "D" (&pci_indirect));
  559. *bus = (bx >> 8) & 0xff;
  560. *device_fn = bx & 0xff;
  561. return (int) (ret & 0xff00) >> 8;
  562. }
  563. static int pci_bios_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
  564. {
  565. unsigned long result = 0;
  566. unsigned long flags;
  567. unsigned long bx = ((bus << 8) | (dev << 3) | fn);
  568. if (bus > 255 || dev > 31 || fn > 7 || reg > 255)
  569. return -EINVAL;
  570. spin_lock_irqsave(&pci_config_lock, flags);
  571. switch (len) {
  572. case 1:
  573. __asm__("lcall (%%esi); cldnt"
  574. "jc 1fnt"
  575. "xor %%ah, %%ahn"
  576. "1:"
  577. : "=c" (*value),
  578.   "=a" (result)
  579. : "1" (PCIBIOS_READ_CONFIG_BYTE),
  580.   "b" (bx),
  581.   "D" ((long)reg),
  582.   "S" (&pci_indirect));
  583. break;
  584. case 2:
  585. __asm__("lcall (%%esi); cldnt"
  586. "jc 1fnt"
  587. "xor %%ah, %%ahn"
  588. "1:"
  589. : "=c" (*value),
  590.   "=a" (result)
  591. : "1" (PCIBIOS_READ_CONFIG_WORD),
  592.   "b" (bx),
  593.   "D" ((long)reg),
  594.   "S" (&pci_indirect));
  595. break;
  596. case 4:
  597. __asm__("lcall (%%esi); cldnt"
  598. "jc 1fnt"
  599. "xor %%ah, %%ahn"
  600. "1:"
  601. : "=c" (*value),
  602.   "=a" (result)
  603. : "1" (PCIBIOS_READ_CONFIG_DWORD),
  604.   "b" (bx),
  605.   "D" ((long)reg),
  606.   "S" (&pci_indirect));
  607. break;
  608. }
  609. spin_unlock_irqrestore(&pci_config_lock, flags);
  610. return (int)((result & 0xff00) >> 8);
  611. }
  612. static int pci_bios_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
  613. {
  614. unsigned long result = 0;
  615. unsigned long flags;
  616. unsigned long bx = ((bus << 8) | (dev << 3) | fn);
  617. if ((bus > 255 || dev > 31 || fn > 7 || reg > 255)) 
  618. return -EINVAL;
  619. spin_lock_irqsave(&pci_config_lock, flags);
  620. switch (len) {
  621. case 1:
  622. __asm__("lcall (%%esi); cldnt"
  623. "jc 1fnt"
  624. "xor %%ah, %%ahn"
  625. "1:"
  626. : "=a" (result)
  627. : "0" (PCIBIOS_WRITE_CONFIG_BYTE),
  628.   "c" (value),
  629.   "b" (bx),
  630.   "D" ((long)reg),
  631.   "S" (&pci_indirect));
  632. break;
  633. case 2:
  634. __asm__("lcall (%%esi); cldnt"
  635. "jc 1fnt"
  636. "xor %%ah, %%ahn"
  637. "1:"
  638. : "=a" (result)
  639. : "0" (PCIBIOS_WRITE_CONFIG_WORD),
  640.   "c" (value),
  641.   "b" (bx),
  642.   "D" ((long)reg),
  643.   "S" (&pci_indirect));
  644. break;
  645. case 4:
  646. __asm__("lcall (%%esi); cldnt"
  647. "jc 1fnt"
  648. "xor %%ah, %%ahn"
  649. "1:"
  650. : "=a" (result)
  651. : "0" (PCIBIOS_WRITE_CONFIG_DWORD),
  652.   "c" (value),
  653.   "b" (bx),
  654.   "D" ((long)reg),
  655.   "S" (&pci_indirect));
  656. break;
  657. }
  658. spin_unlock_irqrestore(&pci_config_lock, flags);
  659. return (int)((result & 0xff00) >> 8);
  660. }
  661. static int pci_bios_read_config_byte(struct pci_dev *dev, int where, u8 *value)
  662. {
  663. int result; 
  664. u32 data;
  665. if (!value) 
  666. BUG();
  667. result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  668. PCI_FUNC(dev->devfn), where, 1, &data);
  669. *value = (u8)data;
  670. return result;
  671. }
  672. static int pci_bios_read_config_word(struct pci_dev *dev, int where, u16 *value)
  673. {
  674. int result; 
  675. u32 data;
  676. if (!value) 
  677. BUG();
  678. result = pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  679. PCI_FUNC(dev->devfn), where, 2, &data);
  680. *value = (u16)data;
  681. return result;
  682. }
  683. static int pci_bios_read_config_dword(struct pci_dev *dev, int where, u32 *value)
  684. {
  685. if (!value) 
  686. BUG();
  687. return pci_bios_read(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  688. PCI_FUNC(dev->devfn), where, 4, value);
  689. }
  690. static int pci_bios_write_config_byte(struct pci_dev *dev, int where, u8 value)
  691. {
  692. return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  693. PCI_FUNC(dev->devfn), where, 1, value);
  694. }
  695. static int pci_bios_write_config_word(struct pci_dev *dev, int where, u16 value)
  696. {
  697. return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  698. PCI_FUNC(dev->devfn), where, 2, value);
  699. }
  700. static int pci_bios_write_config_dword(struct pci_dev *dev, int where, u32 value)
  701. {
  702. return pci_bios_write(0, dev->bus->number, PCI_SLOT(dev->devfn), 
  703. PCI_FUNC(dev->devfn), where, 4, value);
  704. }
  705. /*
  706.  * Function table for BIOS32 access
  707.  */
  708. static struct pci_ops pci_bios_access = {
  709.       pci_bios_read_config_byte,
  710.       pci_bios_read_config_word,
  711.       pci_bios_read_config_dword,
  712.       pci_bios_write_config_byte,
  713.       pci_bios_write_config_word,
  714.       pci_bios_write_config_dword
  715. };
  716. /*
  717.  * Try to find PCI BIOS.
  718.  */
  719. static struct pci_ops * __devinit pci_find_bios(void)
  720. {
  721. union bios32 *check;
  722. unsigned char sum;
  723. int i, length;
  724. /*
  725.  * Follow the standard procedure for locating the BIOS32 Service
  726.  * directory by scanning the permissible address range from
  727.  * 0xe0000 through 0xfffff for a valid BIOS32 structure.
  728.  */
  729. for (check = (union bios32 *) __va(0xe0000);
  730.      check <= (union bios32 *) __va(0xffff0);
  731.      ++check) {
  732. if (check->fields.signature != BIOS32_SIGNATURE)
  733. continue;
  734. length = check->fields.length * 16;
  735. if (!length)
  736. continue;
  737. sum = 0;
  738. for (i = 0; i < length ; ++i)
  739. sum += check->chars[i];
  740. if (sum != 0)
  741. continue;
  742. if (check->fields.revision != 0) {
  743. printk("PCI: unsupported BIOS32 revision %d at 0x%pn",
  744. check->fields.revision, check);
  745. continue;
  746. }
  747. DBG("PCI: BIOS32 Service Directory structure at 0x%pn", check);
  748. if (check->fields.entry >= 0x100000) {
  749. printk("PCI: BIOS32 entry (0x%p) in high memory, cannot use.n", check);
  750. return NULL;
  751. } else {
  752. unsigned long bios32_entry = check->fields.entry;
  753. DBG("PCI: BIOS32 Service Directory entry at 0x%lxn", bios32_entry);
  754. bios32_indirect.address = bios32_entry + PAGE_OFFSET;
  755. if (check_pcibios())
  756. return &pci_bios_access;
  757. }
  758. break; /* Hopefully more than one BIOS32 cannot happen... */
  759. }
  760. return NULL;
  761. }
  762. /*
  763.  * Sort the device list according to PCI BIOS. Nasty hack, but since some
  764.  * fool forgot to define the `correct' device order in the PCI BIOS specs
  765.  * and we want to be (possibly bug-to-bug ;-]) compatible with older kernels
  766.  * which used BIOS ordering, we are bound to do this...
  767.  */
  768. static void __devinit pcibios_sort(void)
  769. {
  770. LIST_HEAD(sorted_devices);
  771. struct list_head *ln;
  772. struct pci_dev *dev, *d;
  773. int idx, found;
  774. unsigned char bus, devfn;
  775. DBG("PCI: Sorting device list...n");
  776. while (!list_empty(&pci_devices)) {
  777. ln = pci_devices.next;
  778. dev = pci_dev_g(ln);
  779. idx = found = 0;
  780. while (pci_bios_find_device(dev->vendor, dev->device, idx, &bus, &devfn) == PCIBIOS_SUCCESSFUL) {
  781. idx++;
  782. for (ln=pci_devices.next; ln != &pci_devices; ln=ln->next) {
  783. d = pci_dev_g(ln);
  784. if (d->bus->number == bus && d->devfn == devfn) {
  785. list_del(&d->global_list);
  786. list_add_tail(&d->global_list, &sorted_devices);
  787. if (d == dev)
  788. found = 1;
  789. break;
  790. }
  791. }
  792. if (ln == &pci_devices) {
  793. printk(KERN_WARNING "PCI: BIOS reporting unknown device %02x:%02xn", bus, devfn);
  794. /*
  795.  * We must not continue scanning as several buggy BIOSes
  796.  * return garbage after the last device. Grr.
  797.  */
  798. break;
  799. }
  800. }
  801. if (!found) {
  802. printk(KERN_WARNING "PCI: Device %02x:%02x not found by BIOSn",
  803. dev->bus->number, dev->devfn);
  804. list_del(&dev->global_list);
  805. list_add_tail(&dev->global_list, &sorted_devices);
  806. }
  807. }
  808. list_splice(&sorted_devices, &pci_devices);
  809. }
  810. /*
  811.  *  BIOS Functions for IRQ Routing
  812.  */
  813. struct irq_routing_options {
  814. u16 size;
  815. struct irq_info *table;
  816. u16 segment;
  817. } __attribute__((packed));
  818. struct irq_routing_table * __devinit pcibios_get_irq_routing_table(void)
  819. {
  820. struct irq_routing_options opt;
  821. struct irq_routing_table *rt = NULL;
  822. int ret, map;
  823. unsigned long page;
  824. if (!pci_bios_present)
  825. return NULL;
  826. page = __get_free_page(GFP_KERNEL);
  827. if (!page)
  828. return NULL;
  829. opt.table = (struct irq_info *) page;
  830. opt.size = PAGE_SIZE;
  831. opt.segment = __KERNEL_DS;
  832. DBG("PCI: Fetching IRQ routing table... ");
  833. __asm__("push %%esnt"
  834. "push %%dsnt"
  835. "pop  %%esnt"
  836. "lcall (%%esi); cldnt"
  837. "pop %%esnt"
  838. "jc 1fnt"
  839. "xor %%ah, %%ahn"
  840. "1:"
  841. : "=a" (ret),
  842.   "=b" (map)
  843. : "0" (PCIBIOS_GET_ROUTING_OPTIONS),
  844.   "1" (0),
  845.   "D" ((long) &opt),
  846.   "S" (&pci_indirect));
  847. DBG("OK  ret=%d, size=%d, map=%xn", ret, opt.size, map);
  848. if (ret & 0xff00)
  849. printk(KERN_ERR "PCI: Error %02x when fetching IRQ routing table.n", (ret >> 8) & 0xff);
  850. else if (opt.size) {
  851. rt = kmalloc(sizeof(struct irq_routing_table) + opt.size, GFP_KERNEL);
  852. if (rt) {
  853. memset(rt, 0, sizeof(struct irq_routing_table));
  854. rt->size = opt.size + sizeof(struct irq_routing_table);
  855. rt->exclusive_irqs = map;
  856. memcpy(rt->slots, (void *) page, opt.size);
  857. printk(KERN_INFO "PCI: Using BIOS Interrupt Routing Tablen");
  858. }
  859. }
  860. free_page(page);
  861. return rt;
  862. }
  863. int pcibios_set_irq_routing(struct pci_dev *dev, int pin, int irq)
  864. {
  865. int ret;
  866. __asm__("lcall (%%esi); cldnt"
  867. "jc 1fnt"
  868. "xor %%ah, %%ahn"
  869. "1:"
  870. : "=a" (ret)
  871. : "0" (PCIBIOS_SET_PCI_HW_INT),
  872.   "b" ((dev->bus->number << 8) | dev->devfn),
  873.   "c" ((irq << 8) | (pin + 10)),
  874.   "S" (&pci_indirect));
  875. return !(ret & 0xff00);
  876. }
  877. #endif
  878. /*
  879.  * Several buggy motherboards address only 16 devices and mirror
  880.  * them to next 16 IDs. We try to detect this `feature' on all
  881.  * primary buses (those containing host bridges as they are
  882.  * expected to be unique) and remove the ghost devices.
  883.  */
  884. static void __devinit pcibios_fixup_ghosts(struct pci_bus *b)
  885. {
  886. struct list_head *ln, *mn;
  887. struct pci_dev *d, *e;
  888. int mirror = PCI_DEVFN(16,0);
  889. int seen_host_bridge = 0;
  890. int i;
  891. DBG("PCI: Scanning for ghost devices on bus %dn", b->number);
  892. for (ln=b->devices.next; ln != &b->devices; ln=ln->next) {
  893. d = pci_dev_b(ln);
  894. if ((d->class >> 8) == PCI_CLASS_BRIDGE_HOST)
  895. seen_host_bridge++;
  896. for (mn=ln->next; mn != &b->devices; mn=mn->next) {
  897. e = pci_dev_b(mn);
  898. if (e->devfn != d->devfn + mirror ||
  899.     e->vendor != d->vendor ||
  900.     e->device != d->device ||
  901.     e->class != d->class)
  902. continue;
  903. for(i=0; i<PCI_NUM_RESOURCES; i++)
  904. if (e->resource[i].start != d->resource[i].start ||
  905.     e->resource[i].end != d->resource[i].end ||
  906.     e->resource[i].flags != d->resource[i].flags)
  907. continue;
  908. break;
  909. }
  910. if (mn == &b->devices)
  911. return;
  912. }
  913. if (!seen_host_bridge)
  914. return;
  915. printk(KERN_WARNING "PCI: Ignoring ghost devices on bus %02xn", b->number);
  916. ln = &b->devices;
  917. while (ln->next != &b->devices) {
  918. d = pci_dev_b(ln->next);
  919. if (d->devfn >= mirror) {
  920. list_del(&d->global_list);
  921. list_del(&d->bus_list);
  922. kfree(d);
  923. } else
  924. ln = ln->next;
  925. }
  926. }
  927. /*
  928.  * Discover remaining PCI buses in case there are peer host bridges.
  929.  * We use the number of last PCI bus provided by the PCI BIOS.
  930.  */
  931. static void __devinit pcibios_fixup_peer_bridges(void)
  932. {
  933. int n;
  934. struct pci_bus bus;
  935. struct pci_dev dev;
  936. u16 l;
  937. if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff)
  938. return;
  939. DBG("PCI: Peer bridge fixupn");
  940. for (n=0; n <= pcibios_last_bus; n++) {
  941. if (pci_bus_exists(&pci_root_buses, n))
  942. continue;
  943. bus.number = n;
  944. bus.ops = pci_root_ops;
  945. dev.bus = &bus;
  946. for(dev.devfn=0; dev.devfn<256; dev.devfn += 8)
  947. if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) &&
  948.     l != 0x0000 && l != 0xffff) {
  949. DBG("Found device at %02x:%02x [%04x]n", n, dev.devfn, l);
  950. printk(KERN_INFO "PCI: Discovered peer bus %02xn", n);
  951. pci_scan_bus(n, pci_root_ops, NULL);
  952. break;
  953. }
  954. }
  955. }
  956. /*
  957.  * Exceptions for specific devices. Usually work-arounds for fatal design flaws.
  958.  */
  959. static void __devinit pci_fixup_i450nx(struct pci_dev *d)
  960. {
  961. /*
  962.  * i450NX -- Find and scan all secondary buses on all PXB's.
  963.  */
  964. int pxb, reg;
  965. u8 busno, suba, subb;
  966. #ifdef CONFIG_MULTIQUAD
  967. int quad = BUS2QUAD(d->bus->number);
  968. #endif
  969. printk("PCI: Searching for i450NX host bridges on %sn", d->slot_name);
  970. reg = 0xd0;
  971. for(pxb=0; pxb<2; pxb++) {
  972. pci_read_config_byte(d, reg++, &busno);
  973. pci_read_config_byte(d, reg++, &suba);
  974. pci_read_config_byte(d, reg++, &subb);
  975. DBG("i450NX PXB %d: %02x/%02x/%02xn", pxb, busno, suba, subb);
  976. if (busno)
  977. pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL); /* Bus A */
  978. if (suba < subb)
  979. pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL); /* Bus B */
  980. }
  981. pcibios_last_bus = -1;
  982. }
  983. static void __devinit pci_fixup_i450gx(struct pci_dev *d)
  984. {
  985. /*
  986.  * i450GX and i450KX -- Find and scan all secondary buses.
  987.  * (called separately for each PCI bridge found)
  988.  */
  989. u8 busno;
  990. pci_read_config_byte(d, 0x4a, &busno);
  991. printk(KERN_INFO "PCI: i440KX/GX host bridge %s: secondary bus %02xn", d->slot_name, busno);
  992. pci_scan_bus(busno, pci_root_ops, NULL);
  993. pcibios_last_bus = -1;
  994. }
  995. static void __devinit  pci_fixup_umc_ide(struct pci_dev *d)
  996. {
  997. /*
  998.  * UM8886BF IDE controller sets region type bits incorrectly,
  999.  * therefore they look like memory despite of them being I/O.
  1000.  */
  1001. int i;
  1002. printk(KERN_WARNING "PCI: Fixing base address flags for device %sn", d->slot_name);
  1003. for(i=0; i<4; i++)
  1004. d->resource[i].flags |= PCI_BASE_ADDRESS_SPACE_IO;
  1005. }
  1006. static void __devinit  pci_fixup_ncr53c810(struct pci_dev *d)
  1007. {
  1008. /*
  1009.  * NCR 53C810 returns class code 0 (at least on some systems).
  1010.  * Fix class to be PCI_CLASS_STORAGE_SCSI
  1011.  */
  1012. if (!d->class) {
  1013. printk("PCI: fixing NCR 53C810 class code for %sn", d->slot_name);
  1014. d->class = PCI_CLASS_STORAGE_SCSI << 8;
  1015. }
  1016. }
  1017. static void __devinit pci_fixup_ide_bases(struct pci_dev *d)
  1018. {
  1019. int i;
  1020. /*
  1021.  * PCI IDE controllers use non-standard I/O port decoding, respect it.
  1022.  */
  1023. if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
  1024. return;
  1025. DBG("PCI: IDE base address fixup for %sn", d->slot_name);
  1026. for(i=0; i<4; i++) {
  1027. struct resource *r = &d->resource[i];
  1028. if ((r->start & ~0x80) == 0x374) {
  1029. r->start |= 2;
  1030. r->end = r->start;
  1031. }
  1032. }
  1033. }
  1034. static void __devinit  pci_fixup_ide_trash(struct pci_dev *d)
  1035. {
  1036. int i;
  1037. /*
  1038.  * There exist PCI IDE controllers which have utter garbage
  1039.  * in first four base registers. Ignore that.
  1040.  */
  1041. DBG("PCI: IDE base address trash cleared for %sn", d->slot_name);
  1042. for(i=0; i<4; i++)
  1043. d->resource[i].start = d->resource[i].end = d->resource[i].flags = 0;
  1044. }
  1045. static void __devinit  pci_fixup_latency(struct pci_dev *d)
  1046. {
  1047. /*
  1048.  *  SiS 5597 and 5598 chipsets require latency timer set to
  1049.  *  at most 32 to avoid lockups.
  1050.  */
  1051. DBG("PCI: Setting max latency to 32n");
  1052. pcibios_max_latency = 32;
  1053. }
  1054. static void __devinit pci_fixup_piix4_acpi(struct pci_dev *d)
  1055. {
  1056. /*
  1057.  * PIIX4 ACPI device: hardwired IRQ9
  1058.  */
  1059. d->irq = 9;
  1060. }
  1061. /*
  1062.  * Addresses issues with problems in the memory write queue timer in
  1063.  * certain VIA Northbridges.  This bugfix is per VIA's specifications,
  1064.  * except for the KL133/KM133: clearing bit 5 on those Northbridges seems
  1065.  * to trigger a bug in its integrated ProSavage video card, which
  1066.  * causes screen corruption.  We only clear bits 6 and 7 for that chipset,
  1067.  * until VIA can provide us with definitive information on why screen
  1068.  * corruption occurs, and what exactly those bits do.
  1069.  * 
  1070.  * VIA 8363,8622,8361 Northbridges:
  1071.  *  - bits  5, 6, 7 at offset 0x55 need to be turned off
  1072.  * VIA 8367 (KT266x) Northbridges:
  1073.  *  - bits  5, 6, 7 at offset 0x95 need to be turned off
  1074.  * VIA 8363 rev 0x81/0x84 (KL133/KM133) Northbridges:
  1075.  *  - bits     6, 7 at offset 0x55 need to be turned off
  1076.  */
  1077. #define VIA_8363_KL133_REVISION_ID 0x81
  1078. #define VIA_8363_KM133_REVISION_ID 0x84
  1079. static void __init pci_fixup_via_northbridge_bug(struct pci_dev *d)
  1080. {
  1081. u8 v;
  1082. u8 revision;
  1083. int where = 0x55;
  1084. int mask = 0x1f; /* clear bits 5, 6, 7 by default */
  1085. pci_read_config_byte(d, PCI_REVISION_ID, &revision);
  1086. if (d->device == PCI_DEVICE_ID_VIA_8367_0) {
  1087. /* fix pci bus latency issues resulted by NB bios error
  1088.    it appears on bug free^Wreduced kt266x's bios forces
  1089.    NB latency to zero */
  1090. pci_write_config_byte(d, PCI_LATENCY_TIMER, 0);
  1091. where = 0x95; /* the memory write queue timer register is 
  1092.  different for the KT266x's: 0x95 not 0x55 */
  1093. } else if (d->device == PCI_DEVICE_ID_VIA_8363_0 &&
  1094.            (revision == VIA_8363_KL133_REVISION_ID || 
  1095.     revision == VIA_8363_KM133_REVISION_ID)) {
  1096. mask = 0x3f; /* clear only bits 6 and 7; clearing bit 5
  1097. causes screen corruption on the KL133/KM133 */
  1098. }
  1099. pci_read_config_byte(d, where, &v);
  1100. if (v & ~mask) {
  1101. printk("Disabling VIA memory write queue (PCI ID %04x, rev %02x): [%02x] %02x & %02x -> %02xn", 
  1102. d->device, revision, where, v, mask, v & mask);
  1103. v &= mask;
  1104. pci_write_config_byte(d, where, v);
  1105. }
  1106. }
  1107. /*
  1108.  * For some reasons Intel decided that certain parts of their
  1109.  * 815, 845 and some other chipsets must look like PCI-to-PCI bridges
  1110.  * while they are obviously not. The 82801 family (AA, AB, BAM/CAM,
  1111.  * BA/CA/DB and E) PCI bridges are actually HUB-to-PCI ones, according
  1112.  * to Intel terminology. These devices do forward all addresses from
  1113.  * system to PCI bus no matter what are their window settings, so they are
  1114.  * "transparent" (or subtractive decoding) from programmers point of view.
  1115.  */
  1116. static void __init pci_fixup_transparent_bridge(struct pci_dev *dev)
  1117. {
  1118. if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI &&
  1119.     (dev->device & 0xff00) == 0x2400)
  1120. dev->transparent = 1;
  1121. }
  1122. struct pci_fixup pcibios_fixups[] = {
  1123. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82451NX, pci_fixup_i450nx },
  1124. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82454GX, pci_fixup_i450gx },
  1125. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_UMC, PCI_DEVICE_ID_UMC_UM8886BF, pci_fixup_umc_ide },
  1126. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5513, pci_fixup_ide_trash },
  1127. { PCI_FIXUP_HEADER, PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases },
  1128. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, pci_fixup_latency },
  1129. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5598, pci_fixup_latency },
  1130.   { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_3, pci_fixup_piix4_acpi },
  1131. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8363_0, pci_fixup_via_northbridge_bug },
  1132. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8622,         pci_fixup_via_northbridge_bug },
  1133. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8361,         pci_fixup_via_northbridge_bug },
  1134. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8367_0, pci_fixup_via_northbridge_bug },
  1135. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, pci_fixup_ncr53c810 },
  1136. { PCI_FIXUP_HEADER, PCI_VENDOR_ID_INTEL, PCI_ANY_ID, pci_fixup_transparent_bridge },
  1137. { 0 }
  1138. };
  1139. /*
  1140.  *  Called after each bus is probed, but before its children
  1141.  *  are examined.
  1142.  */
  1143. void __devinit  pcibios_fixup_bus(struct pci_bus *b)
  1144. {
  1145. pcibios_fixup_ghosts(b);
  1146. pci_read_bridge_bases(b);
  1147. }
  1148. void __devinit pcibios_config_init(void)
  1149. {
  1150. /*
  1151.  * Try all known PCI access methods. Note that we support using 
  1152.  * both PCI BIOS and direct access, with a preference for direct.
  1153.  */
  1154. #ifdef CONFIG_PCI_DIRECT
  1155. struct pci_ops *tmp = NULL;
  1156. #endif
  1157. #ifdef CONFIG_PCI_BIOS
  1158. if ((pci_probe & PCI_PROBE_BIOS) 
  1159. && ((pci_root_ops = pci_find_bios()))) {
  1160. pci_probe |= PCI_BIOS_SORT;
  1161. pci_bios_present = 1;
  1162. pci_config_read = pci_bios_read;
  1163. pci_config_write = pci_bios_write;
  1164. }
  1165. #endif
  1166. #ifdef CONFIG_PCI_DIRECT
  1167. if ((pci_probe & (PCI_PROBE_CONF1 | PCI_PROBE_CONF2)) 
  1168. && (tmp = pci_check_direct())) {
  1169. pci_root_ops = tmp;
  1170. if (pci_root_ops == &pci_direct_conf1) {
  1171. pci_config_read = pci_conf1_read;
  1172. pci_config_write = pci_conf1_write;
  1173. }
  1174. else {
  1175. pci_config_read = pci_conf2_read;
  1176. pci_config_write = pci_conf2_write;
  1177. }
  1178. }
  1179. #endif
  1180. return;
  1181. }
  1182. void __init pcibios_init(void)
  1183. {
  1184. int quad;
  1185. if (!pci_root_ops)
  1186. pcibios_config_init();
  1187. if (!pci_root_ops) {
  1188. printk(KERN_WARNING "PCI: System does not support PCIn");
  1189. return;
  1190. }
  1191. printk(KERN_INFO "PCI: Probing PCI hardwaren");
  1192. pci_root_bus = pci_scan_bus(0, pci_root_ops, NULL);
  1193. if (clustered_apic_mode && (numnodes > 1)) {
  1194. for (quad = 1; quad < numnodes; ++quad) {
  1195. printk("Scanning PCI bus %d for quad %dn", 
  1196. QUADLOCAL2BUS(quad,0), quad);
  1197. pci_scan_bus(QUADLOCAL2BUS(quad,0), 
  1198. pci_root_ops, NULL);
  1199. }
  1200. }
  1201. pcibios_irq_init();
  1202. pcibios_fixup_peer_bridges();
  1203. pcibios_fixup_irqs();
  1204. pcibios_resource_survey();
  1205. #ifdef CONFIG_PCI_BIOS
  1206. if ((pci_probe & PCI_BIOS_SORT) && !(pci_probe & PCI_NO_SORT))
  1207. pcibios_sort();
  1208. #endif
  1209. }
  1210. char * __devinit  pcibios_setup(char *str)
  1211. {
  1212. if (!strcmp(str, "off")) {
  1213. pci_probe = 0;
  1214. return NULL;
  1215. }
  1216. #ifdef CONFIG_PCI_BIOS
  1217. else if (!strcmp(str, "bios")) {
  1218. pci_probe = PCI_PROBE_BIOS;
  1219. return NULL;
  1220. } else if (!strcmp(str, "nobios")) {
  1221. pci_probe &= ~PCI_PROBE_BIOS;
  1222. return NULL;
  1223. } else if (!strcmp(str, "nosort")) {
  1224. pci_probe |= PCI_NO_SORT;
  1225. return NULL;
  1226. } else if (!strcmp(str, "biosirq")) {
  1227. pci_probe |= PCI_BIOS_IRQ_SCAN;
  1228. return NULL;
  1229. }
  1230. #endif
  1231. #ifdef CONFIG_PCI_DIRECT
  1232. else if (!strcmp(str, "conf1")) {
  1233. pci_probe = PCI_PROBE_CONF1 | PCI_NO_CHECKS;
  1234. return NULL;
  1235. }
  1236. else if (!strcmp(str, "conf2")) {
  1237. pci_probe = PCI_PROBE_CONF2 | PCI_NO_CHECKS;
  1238. return NULL;
  1239. }
  1240. #endif
  1241. else if (!strcmp(str, "rom")) {
  1242. pci_probe |= PCI_ASSIGN_ROMS;
  1243. return NULL;
  1244. } else if (!strcmp(str, "assign-busses")) {
  1245. pci_probe |= PCI_ASSIGN_ALL_BUSSES;
  1246. return NULL;
  1247. } else if (!strncmp(str, "irqmask=", 8)) {
  1248. pcibios_irq_mask = simple_strtol(str+8, NULL, 0);
  1249. return NULL;
  1250. } else if (!strncmp(str, "lastbus=", 8)) {
  1251. pcibios_last_bus = simple_strtol(str+8, NULL, 0);
  1252. return NULL;
  1253. }
  1254. return str;
  1255. }
  1256. unsigned int pcibios_assign_all_busses(void)
  1257. {
  1258. return (pci_probe & PCI_ASSIGN_ALL_BUSSES) ? 1 : 0;
  1259. }
  1260. int pcibios_enable_device(struct pci_dev *dev, int mask)
  1261. {
  1262. int err;
  1263. if ((err = pcibios_enable_resources(dev, mask)) < 0)
  1264. return err;
  1265. pcibios_enable_irq(dev);
  1266. return 0;
  1267. }