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

嵌入式Linux

开发平台:

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