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

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * $Id: pci.c,v 1.91 1999/01/21 13:34:01 davem Exp $
  3.  *
  4.  * PCI Bus Services, see include/linux/pci.h for further explanation.
  5.  *
  6.  * Copyright 1993 -- 1997 Drew Eckhardt, Frederic Potter,
  7.  * David Mosberger-Tang
  8.  *
  9.  * Copyright 1997 -- 2000 Martin Mares <mj@ucw.cz>
  10.  */
  11. #include <linux/config.h>
  12. #include <linux/module.h>
  13. #include <linux/types.h>
  14. #include <linux/kernel.h>
  15. #include <linux/pci.h>
  16. #include <linux/string.h>
  17. #include <linux/init.h>
  18. #include <linux/slab.h>
  19. #include <linux/ioport.h>
  20. #include <linux/spinlock.h>
  21. #include <linux/pm.h>
  22. #include <linux/kmod.h> /* for hotplug_path */
  23. #include <linux/bitops.h>
  24. #include <linux/delay.h>
  25. #include <linux/cache.h>
  26. #include <asm/page.h>
  27. #include <asm/dma.h> /* isa_dma_bridge_buggy */
  28. #undef DEBUG
  29. #ifdef DEBUG
  30. #define DBG(x...) printk(x)
  31. #else
  32. #define DBG(x...)
  33. #endif
  34. LIST_HEAD(pci_root_buses);
  35. LIST_HEAD(pci_devices);
  36. /**
  37.  * pci_find_slot - locate PCI device from a given PCI slot
  38.  * @bus: number of PCI bus on which desired PCI device resides
  39.  * @devfn: encodes number of PCI slot in which the desired PCI 
  40.  * device resides and the logical device number within that slot 
  41.  * in case of multi-function devices.
  42.  *
  43.  * Given a PCI bus and slot/function number, the desired PCI device 
  44.  * is located in system global list of PCI devices.  If the device
  45.  * is found, a pointer to its data structure is returned.  If no 
  46.  * device is found, %NULL is returned.
  47.  */
  48. struct pci_dev *
  49. pci_find_slot(unsigned int bus, unsigned int devfn)
  50. {
  51. struct pci_dev *dev;
  52. pci_for_each_dev(dev) {
  53. if (dev->bus->number == bus && dev->devfn == devfn)
  54. return dev;
  55. }
  56. return NULL;
  57. }
  58. /**
  59.  * pci_find_subsys - begin or continue searching for a PCI device by vendor/subvendor/device/subdevice id
  60.  * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids
  61.  * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids
  62.  * @ss_vendor: PCI subsystem vendor id to match, or %PCI_ANY_ID to match all vendor ids
  63.  * @ss_device: PCI subsystem device id to match, or %PCI_ANY_ID to match all device ids
  64.  * @from: Previous PCI device found in search, or %NULL for new search.
  65.  *
  66.  * Iterates through the list of known PCI devices.  If a PCI device is
  67.  * found with a matching @vendor, @device, @ss_vendor and @ss_device, a pointer to its
  68.  * device structure is returned.  Otherwise, %NULL is returned.
  69.  * A new search is initiated by passing %NULL to the @from argument.
  70.  * Otherwise if @from is not %NULL, searches continue from next device on the global list.
  71.  */
  72. struct pci_dev *
  73. pci_find_subsys(unsigned int vendor, unsigned int device,
  74. unsigned int ss_vendor, unsigned int ss_device,
  75. const struct pci_dev *from)
  76. {
  77. struct list_head *n = from ? from->global_list.next : pci_devices.next;
  78. while (n != &pci_devices) {
  79. struct pci_dev *dev = pci_dev_g(n);
  80. if ((vendor == PCI_ANY_ID || dev->vendor == vendor) &&
  81.     (device == PCI_ANY_ID || dev->device == device) &&
  82.     (ss_vendor == PCI_ANY_ID || dev->subsystem_vendor == ss_vendor) &&
  83.     (ss_device == PCI_ANY_ID || dev->subsystem_device == ss_device))
  84. return dev;
  85. n = n->next;
  86. }
  87. return NULL;
  88. }
  89. /**
  90.  * pci_find_device - begin or continue searching for a PCI device by vendor/device id
  91.  * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids
  92.  * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids
  93.  * @from: Previous PCI device found in search, or %NULL for new search.
  94.  *
  95.  * Iterates through the list of known PCI devices.  If a PCI device is
  96.  * found with a matching @vendor and @device, a pointer to its device structure is
  97.  * returned.  Otherwise, %NULL is returned.
  98.  * A new search is initiated by passing %NULL to the @from argument.
  99.  * Otherwise if @from is not %NULL, searches continue from next device on the global list.
  100.  */
  101. struct pci_dev *
  102. pci_find_device(unsigned int vendor, unsigned int device, const struct pci_dev *from)
  103. {
  104. return pci_find_subsys(vendor, device, PCI_ANY_ID, PCI_ANY_ID, from);
  105. }
  106. /**
  107.  * pci_find_class - begin or continue searching for a PCI device by class
  108.  * @class: search for a PCI device with this class designation
  109.  * @from: Previous PCI device found in search, or %NULL for new search.
  110.  *
  111.  * Iterates through the list of known PCI devices.  If a PCI device is
  112.  * found with a matching @class, a pointer to its device structure is
  113.  * returned.  Otherwise, %NULL is returned.
  114.  * A new search is initiated by passing %NULL to the @from argument.
  115.  * Otherwise if @from is not %NULL, searches continue from next device
  116.  * on the global list.
  117.  */
  118. struct pci_dev *
  119. pci_find_class(unsigned int class, const struct pci_dev *from)
  120. {
  121. struct list_head *n = from ? from->global_list.next : pci_devices.next;
  122. while (n != &pci_devices) {
  123. struct pci_dev *dev = pci_dev_g(n);
  124. if (dev->class == class)
  125. return dev;
  126. n = n->next;
  127. }
  128. return NULL;
  129. }
  130. /**
  131.  * pci_find_capability - query for devices' capabilities 
  132.  * @dev: PCI device to query
  133.  * @cap: capability code
  134.  *
  135.  * Tell if a device supports a given PCI capability.
  136.  * Returns the address of the requested capability structure within the
  137.  * device's PCI configuration space or 0 in case the device does not
  138.  * support it.  Possible values for @cap:
  139.  *
  140.  *  %PCI_CAP_ID_PM           Power Management 
  141.  *
  142.  *  %PCI_CAP_ID_AGP          Accelerated Graphics Port 
  143.  *
  144.  *  %PCI_CAP_ID_VPD          Vital Product Data 
  145.  *
  146.  *  %PCI_CAP_ID_SLOTID       Slot Identification 
  147.  *
  148.  *  %PCI_CAP_ID_MSI          Message Signalled Interrupts
  149.  *
  150.  *  %PCI_CAP_ID_CHSWP        CompactPCI HotSwap 
  151.  */
  152. int
  153. pci_find_capability(struct pci_dev *dev, int cap)
  154. {
  155. u16 status;
  156. u8 pos, id;
  157. int ttl = 48;
  158. pci_read_config_word(dev, PCI_STATUS, &status);
  159. if (!(status & PCI_STATUS_CAP_LIST))
  160. return 0;
  161. switch (dev->hdr_type) {
  162. case PCI_HEADER_TYPE_NORMAL:
  163. case PCI_HEADER_TYPE_BRIDGE:
  164. pci_read_config_byte(dev, PCI_CAPABILITY_LIST, &pos);
  165. break;
  166. case PCI_HEADER_TYPE_CARDBUS:
  167. pci_read_config_byte(dev, PCI_CB_CAPABILITY_LIST, &pos);
  168. break;
  169. default:
  170. return 0;
  171. }
  172. while (ttl-- && pos >= 0x40) {
  173. pos &= ~3;
  174. pci_read_config_byte(dev, pos + PCI_CAP_LIST_ID, &id);
  175. if (id == 0xff)
  176. break;
  177. if (id == cap)
  178. return pos;
  179. pci_read_config_byte(dev, pos + PCI_CAP_LIST_NEXT, &pos);
  180. }
  181. return 0;
  182. }
  183. /**
  184.  * pci_find_parent_resource - return resource region of parent bus of given region
  185.  * @dev: PCI device structure contains resources to be searched
  186.  * @res: child resource record for which parent is sought
  187.  *
  188.  *  For given resource region of given device, return the resource
  189.  *  region of parent bus the given region is contained in or where
  190.  *  it should be allocated from.
  191.  */
  192. struct resource *
  193. pci_find_parent_resource(const struct pci_dev *dev, struct resource *res)
  194. {
  195. const struct pci_bus *bus = dev->bus;
  196. int i;
  197. struct resource *best = NULL;
  198. for(i=0; i<4; i++) {
  199. struct resource *r = bus->resource[i];
  200. if (!r)
  201. continue;
  202. if (res->start && !(res->start >= r->start && res->end <= r->end))
  203. continue; /* Not contained */
  204. if ((res->flags ^ r->flags) & (IORESOURCE_IO | IORESOURCE_MEM))
  205. continue; /* Wrong type */
  206. if (!((res->flags ^ r->flags) & IORESOURCE_PREFETCH))
  207. return r; /* Exact match */
  208. if ((res->flags & IORESOURCE_PREFETCH) && !(r->flags & IORESOURCE_PREFETCH))
  209. best = r; /* Approximating prefetchable by non-prefetchable */
  210. }
  211. return best;
  212. }
  213. /**
  214.  * pci_set_power_state - Set the power state of a PCI device
  215.  * @dev: PCI device to be suspended
  216.  * @state: Power state we're entering
  217.  *
  218.  * Transition a device to a new power state, using the Power Management 
  219.  * Capabilities in the device's config space.
  220.  *
  221.  * RETURN VALUE: 
  222.  * -EINVAL if trying to enter a lower state than we're already in.
  223.  * 0 if we're already in the requested state.
  224.  * -EIO if device does not support PCI PM.
  225.  * 0 if we can successfully change the power state.
  226.  */
  227. int
  228. pci_set_power_state(struct pci_dev *dev, int state)
  229. {
  230. int pm;
  231. u16 pmcsr;
  232. /* bound the state we're entering */
  233. if (state > 3) state = 3;
  234. /* Validate current state:
  235.  * Can enter D0 from any state, but if we can only go deeper 
  236.  * to sleep if we're already in a low power state
  237.  */
  238. if (state > 0 && dev->current_state > state)
  239. return -EINVAL;
  240. else if (dev->current_state == state) 
  241. return 0;        /* we're already there */
  242. /* find PCI PM capability in list */
  243. pm = pci_find_capability(dev, PCI_CAP_ID_PM);
  244. /* abort if the device doesn't support PM capabilities */
  245. if (!pm) return -EIO; 
  246. /* check if this device supports the desired state */
  247. if (state == 1 || state == 2) {
  248. u16 pmc;
  249. pci_read_config_word(dev,pm + PCI_PM_PMC,&pmc);
  250. if (state == 1 && !(pmc & PCI_PM_CAP_D1)) return -EIO;
  251. else if (state == 2 && !(pmc & PCI_PM_CAP_D2)) return -EIO;
  252. }
  253. /* If we're in D3, force entire word to 0.
  254.  * This doesn't affect PME_Status, disables PME_En, and
  255.  * sets PowerState to 0.
  256.  */
  257. if (dev->current_state >= 3)
  258. pmcsr = 0;
  259. else {
  260. pci_read_config_word(dev, pm + PCI_PM_CTRL, &pmcsr);
  261. pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
  262. pmcsr |= state;
  263. }
  264. /* enter specified state */
  265. pci_write_config_word(dev, pm + PCI_PM_CTRL, pmcsr);
  266. /* Mandatory power management transition delays */
  267. /* see PCI PM 1.1 5.6.1 table 18 */
  268. if(state == 3 || dev->current_state == 3)
  269. {
  270. set_current_state(TASK_UNINTERRUPTIBLE);
  271. schedule_timeout(HZ/100);
  272. }
  273. else if(state == 2 || dev->current_state == 2)
  274. udelay(200);
  275. dev->current_state = state;
  276. return 0;
  277. }
  278. /**
  279.  * pci_save_state - save the PCI configuration space of a device before suspending
  280.  * @dev: - PCI device that we're dealing with
  281.  * @buffer: - buffer to hold config space context
  282.  *
  283.  * @buffer must be large enough to hold the entire PCI 2.2 config space 
  284.  * (>= 64 bytes).
  285.  */
  286. int
  287. pci_save_state(struct pci_dev *dev, u32 *buffer)
  288. {
  289. int i;
  290. if (buffer) {
  291. /* XXX: 100% dword access ok here? */
  292. for (i = 0; i < 16; i++)
  293. pci_read_config_dword(dev, i * 4,&buffer[i]);
  294. }
  295. return 0;
  296. }
  297. /** 
  298.  * pci_restore_state - Restore the saved state of a PCI device
  299.  * @dev: - PCI device that we're dealing with
  300.  * @buffer: - saved PCI config space
  301.  *
  302.  */
  303. int 
  304. pci_restore_state(struct pci_dev *dev, u32 *buffer)
  305. {
  306. int i;
  307. if (buffer) {
  308. for (i = 0; i < 16; i++)
  309. pci_write_config_dword(dev,i * 4, buffer[i]);
  310. }
  311. /*
  312.  * otherwise, write the context information we know from bootup.
  313.  * This works around a problem where warm-booting from Windows
  314.  * combined with a D3(hot)->D0 transition causes PCI config
  315.  * header data to be forgotten.
  316.  */
  317. else {
  318. for (i = 0; i < 6; i ++)
  319. pci_write_config_dword(dev,
  320.        PCI_BASE_ADDRESS_0 + (i * 4),
  321.        dev->resource[i].start);
  322. pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
  323. }
  324. return 0;
  325. }
  326. /**
  327.  * pci_enable_device_bars - Initialize some of a device for use
  328.  * @dev: PCI device to be initialized
  329.  * @bars: bitmask of BAR's that must be configured
  330.  *
  331.  *  Initialize device before it's used by a driver. Ask low-level code
  332.  *  to enable selected I/O and memory resources. Wake up the device if it 
  333.  *  was suspended. Beware, this function can fail.
  334.  */
  335.  
  336. int
  337. pci_enable_device_bars(struct pci_dev *dev, int bars)
  338. {
  339. int err;
  340. pci_set_power_state(dev, 0);
  341. if ((err = pcibios_enable_device(dev, bars)) < 0)
  342. return err;
  343. return 0;
  344. }
  345. /**
  346.  * pci_enable_device - Initialize device before it's used by a driver.
  347.  * @dev: PCI device to be initialized
  348.  *
  349.  *  Initialize device before it's used by a driver. Ask low-level code
  350.  *  to enable I/O and memory. Wake up the device if it was suspended.
  351.  *  Beware, this function can fail.
  352.  */
  353. int
  354. pci_enable_device(struct pci_dev *dev)
  355. {
  356. return pci_enable_device_bars(dev, 0x3F);
  357. }
  358. /**
  359.  * pci_disable_device - Disable PCI device after use
  360.  * @dev: PCI device to be disabled
  361.  *
  362.  * Signal to the system that the PCI device is not in use by the system
  363.  * anymore.  This only involves disabling PCI bus-mastering, if active.
  364.  */
  365. void
  366. pci_disable_device(struct pci_dev *dev)
  367. {
  368. u16 pci_command;
  369. pci_read_config_word(dev, PCI_COMMAND, &pci_command);
  370. if (pci_command & PCI_COMMAND_MASTER) {
  371. pci_command &= ~PCI_COMMAND_MASTER;
  372. pci_write_config_word(dev, PCI_COMMAND, pci_command);
  373. }
  374. }
  375. /**
  376.  * pci_enable_wake - enable device to generate PME# when suspended
  377.  * @dev: - PCI device to operate on
  378.  * @state: - Current state of device.
  379.  * @enable: - Flag to enable or disable generation
  380.  * 
  381.  * Set the bits in the device's PM Capabilities to generate PME# when
  382.  * the system is suspended. 
  383.  *
  384.  * -EIO is returned if device doesn't have PM Capabilities. 
  385.  * -EINVAL is returned if device supports it, but can't generate wake events.
  386.  * 0 if operation is successful.
  387.  * 
  388.  */
  389. int pci_enable_wake(struct pci_dev *dev, u32 state, int enable)
  390. {
  391. int pm;
  392. u16 value;
  393. /* find PCI PM capability in list */
  394. pm = pci_find_capability(dev, PCI_CAP_ID_PM);
  395. /* If device doesn't support PM Capabilities, but request is to disable
  396.  * wake events, it's a nop; otherwise fail */
  397. if (!pm) 
  398. return enable ? -EIO : 0; 
  399. /* Check device's ability to generate PME# */
  400. pci_read_config_word(dev,pm+PCI_PM_PMC,&value);
  401. value &= PCI_PM_CAP_PME_MASK;
  402. value >>= ffs(value);   /* First bit of mask */
  403. /* Check if it can generate PME# from requested state. */
  404. if (!value || !(value & (1 << state))) 
  405. return enable ? -EINVAL : 0;
  406. pci_read_config_word(dev, pm + PCI_PM_CTRL, &value);
  407. /* Clear PME_Status by writing 1 to it and enable PME# */
  408. value |= PCI_PM_CTRL_PME_STATUS | PCI_PM_CTRL_PME_ENABLE;
  409. if (!enable)
  410. value &= ~PCI_PM_CTRL_PME_ENABLE;
  411. pci_write_config_word(dev, pm + PCI_PM_CTRL, value);
  412. return 0;
  413. }
  414. int
  415. pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
  416. {
  417. u8 pin;
  418. pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
  419. if (!pin)
  420. return -1;
  421. pin--;
  422. while (dev->bus->self) {
  423. pin = (pin + PCI_SLOT(dev->devfn)) % 4;
  424. dev = dev->bus->self;
  425. }
  426. *bridge = dev;
  427. return pin;
  428. }
  429. /**
  430.  * pci_release_region - Release a PCI bar
  431.  * @pdev: PCI device whose resources were previously reserved by pci_request_region
  432.  * @bar: BAR to release
  433.  *
  434.  * Releases the PCI I/O and memory resources previously reserved by a
  435.  * successful call to pci_request_region.  Call this function only
  436.  * after all use of the PCI regions has ceased.
  437.  */
  438. void pci_release_region(struct pci_dev *pdev, int bar)
  439. {
  440. if (pci_resource_len(pdev, bar) == 0)
  441. return;
  442. if (pci_resource_flags(pdev, bar) & IORESOURCE_IO)
  443. release_region(pci_resource_start(pdev, bar),
  444. pci_resource_len(pdev, bar));
  445. else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM)
  446. release_mem_region(pci_resource_start(pdev, bar),
  447. pci_resource_len(pdev, bar));
  448. }
  449. /**
  450.  * pci_request_region - Reserved PCI I/O and memory resource
  451.  * @pdev: PCI device whose resources are to be reserved
  452.  * @bar: BAR to be reserved
  453.  * @res_name: Name to be associated with resource.
  454.  *
  455.  * Mark the PCI region associated with PCI device @pdev BR @bar as
  456.  * being reserved by owner @res_name.  Do not access any
  457.  * address inside the PCI regions unless this call returns
  458.  * successfully.
  459.  *
  460.  * Returns 0 on success, or %EBUSY on error.  A warning
  461.  * message is also printed on failure.
  462.  */
  463. int pci_request_region(struct pci_dev *pdev, int bar, char *res_name)
  464. {
  465. if (pci_resource_len(pdev, bar) == 0)
  466. return 0;
  467. if (pci_resource_flags(pdev, bar) & IORESOURCE_IO) {
  468. if (!request_region(pci_resource_start(pdev, bar),
  469.     pci_resource_len(pdev, bar), res_name))
  470. goto err_out;
  471. }
  472. else if (pci_resource_flags(pdev, bar) & IORESOURCE_MEM) {
  473. if (!request_mem_region(pci_resource_start(pdev, bar),
  474.         pci_resource_len(pdev, bar), res_name))
  475. goto err_out;
  476. }
  477. return 0;
  478. err_out:
  479. printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %sn",
  480. pci_resource_flags(pdev, bar) & IORESOURCE_IO ? "I/O" : "mem",
  481. bar + 1, /* PCI BAR # */
  482. pci_resource_len(pdev, bar), pci_resource_start(pdev, bar),
  483. pdev->slot_name);
  484. return -EBUSY;
  485. }
  486. /**
  487.  * pci_release_regions - Release reserved PCI I/O and memory resources
  488.  * @pdev: PCI device whose resources were previously reserved by pci_request_regions
  489.  *
  490.  * Releases all PCI I/O and memory resources previously reserved by a
  491.  * successful call to pci_request_regions.  Call this function only
  492.  * after all use of the PCI regions has ceased.
  493.  */
  494. void pci_release_regions(struct pci_dev *pdev)
  495. {
  496. int i;
  497. for (i = 0; i < 6; i++)
  498. pci_release_region(pdev, i);
  499. }
  500. /**
  501.  * pci_request_regions - Reserved PCI I/O and memory resources
  502.  * @pdev: PCI device whose resources are to be reserved
  503.  * @res_name: Name to be associated with resource.
  504.  *
  505.  * Mark all PCI regions associated with PCI device @pdev as
  506.  * being reserved by owner @res_name.  Do not access any
  507.  * address inside the PCI regions unless this call returns
  508.  * successfully.
  509.  *
  510.  * Returns 0 on success, or %EBUSY on error.  A warning
  511.  * message is also printed on failure.
  512.  */
  513. int pci_request_regions(struct pci_dev *pdev, char *res_name)
  514. {
  515. int i;
  516. for (i = 0; i < 6; i++)
  517. if(pci_request_region(pdev, i, res_name))
  518. goto err_out;
  519. return 0;
  520. err_out:
  521. printk (KERN_WARNING "PCI: Unable to reserve %s region #%d:%lx@%lx for device %sn",
  522. pci_resource_flags(pdev, i) & IORESOURCE_IO ? "I/O" : "mem",
  523. i + 1, /* PCI BAR # */
  524. pci_resource_len(pdev, i), pci_resource_start(pdev, i),
  525. pdev->slot_name);
  526. while(--i >= 0)
  527. pci_release_region(pdev, i);
  528. return -EBUSY;
  529. }
  530. /*
  531.  *  Registration of PCI drivers and handling of hot-pluggable devices.
  532.  */
  533. static LIST_HEAD(pci_drivers);
  534. /**
  535.  * pci_match_device - Tell if a PCI device structure has a matching PCI device id structure
  536.  * @ids: array of PCI device id structures to search in
  537.  * @dev: the PCI device structure to match against
  538.  * 
  539.  * Used by a driver to check whether a PCI device present in the
  540.  * system is in its list of supported devices.Returns the matching
  541.  * pci_device_id structure or %NULL if there is no match.
  542.  */
  543. const struct pci_device_id *
  544. pci_match_device(const struct pci_device_id *ids, const struct pci_dev *dev)
  545. {
  546. while (ids->vendor || ids->subvendor || ids->class_mask) {
  547. if ((ids->vendor == PCI_ANY_ID || ids->vendor == dev->vendor) &&
  548.     (ids->device == PCI_ANY_ID || ids->device == dev->device) &&
  549.     (ids->subvendor == PCI_ANY_ID || ids->subvendor == dev->subsystem_vendor) &&
  550.     (ids->subdevice == PCI_ANY_ID || ids->subdevice == dev->subsystem_device) &&
  551.     !((ids->class ^ dev->class) & ids->class_mask))
  552. return ids;
  553. ids++;
  554. }
  555. return NULL;
  556. }
  557. static int
  558. pci_announce_device(struct pci_driver *drv, struct pci_dev *dev)
  559. {
  560. const struct pci_device_id *id;
  561. int ret = 0;
  562. if (drv->id_table) {
  563. id = pci_match_device(drv->id_table, dev);
  564. if (!id) {
  565. ret = 0;
  566. goto out;
  567. }
  568. } else
  569. id = NULL;
  570. dev_probe_lock();
  571. if (drv->probe(dev, id) >= 0) {
  572. dev->driver = drv;
  573. ret = 1;
  574. }
  575. dev_probe_unlock();
  576. out:
  577. return ret;
  578. }
  579. /**
  580.  * pci_register_driver - register a new pci driver
  581.  * @drv: the driver structure to register
  582.  * 
  583.  * Adds the driver structure to the list of registered drivers
  584.  * Returns the number of pci devices which were claimed by the driver
  585.  * during registration.  The driver remains registered even if the
  586.  * return value is zero.
  587.  */
  588. int
  589. pci_register_driver(struct pci_driver *drv)
  590. {
  591. struct pci_dev *dev;
  592. int count = 0;
  593. list_add_tail(&drv->node, &pci_drivers);
  594. pci_for_each_dev(dev) {
  595. if (!pci_dev_driver(dev))
  596. count += pci_announce_device(drv, dev);
  597. }
  598. return count;
  599. }
  600. /**
  601.  * pci_unregister_driver - unregister a pci driver
  602.  * @drv: the driver structure to unregister
  603.  * 
  604.  * Deletes the driver structure from the list of registered PCI drivers,
  605.  * gives it a chance to clean up by calling its remove() function for
  606.  * each device it was responsible for, and marks those devices as
  607.  * driverless.
  608.  */
  609. void
  610. pci_unregister_driver(struct pci_driver *drv)
  611. {
  612. struct pci_dev *dev;
  613. list_del(&drv->node);
  614. pci_for_each_dev(dev) {
  615. if (dev->driver == drv) {
  616. if (drv->remove)
  617. drv->remove(dev);
  618. dev->driver = NULL;
  619. }
  620. }
  621. }
  622. #ifdef CONFIG_HOTPLUG
  623. #ifndef FALSE
  624. #define FALSE (0)
  625. #define TRUE (!FALSE)
  626. #endif
  627. static void
  628. run_sbin_hotplug(struct pci_dev *pdev, int insert)
  629. {
  630. int i;
  631. char *argv[3], *envp[8];
  632. char id[20], sub_id[24], bus_id[24], class_id[20];
  633. if (!hotplug_path[0])
  634. return;
  635. sprintf(class_id, "PCI_CLASS=%04X", pdev->class);
  636. sprintf(id, "PCI_ID=%04X:%04X", pdev->vendor, pdev->device);
  637. sprintf(sub_id, "PCI_SUBSYS_ID=%04X:%04X", pdev->subsystem_vendor, pdev->subsystem_device);
  638. sprintf(bus_id, "PCI_SLOT_NAME=%s", pdev->slot_name);
  639. i = 0;
  640. argv[i++] = hotplug_path;
  641. argv[i++] = "pci";
  642. argv[i] = 0;
  643. i = 0;
  644. /* minimal command environment */
  645. envp[i++] = "HOME=/";
  646. envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin";
  647. /* other stuff we want to pass to /sbin/hotplug */
  648. envp[i++] = class_id;
  649. envp[i++] = id;
  650. envp[i++] = sub_id;
  651. envp[i++] = bus_id;
  652. if (insert)
  653. envp[i++] = "ACTION=add";
  654. else
  655. envp[i++] = "ACTION=remove";
  656. envp[i] = 0;
  657. call_usermodehelper (argv [0], argv, envp);
  658. }
  659. /**
  660.  * pci_announce_device_to_drivers - tell the drivers a new device has appeared
  661.  * @dev: the device that has shown up
  662.  *
  663.  * Notifys the drivers that a new device has appeared, and also notifys
  664.  * userspace through /sbin/hotplug.
  665.  */
  666. void
  667. pci_announce_device_to_drivers(struct pci_dev *dev)
  668. {
  669. struct list_head *ln;
  670. for(ln=pci_drivers.next; ln != &pci_drivers; ln=ln->next) {
  671. struct pci_driver *drv = list_entry(ln, struct pci_driver, node);
  672. if (drv->remove && pci_announce_device(drv, dev))
  673. break;
  674. }
  675. /* notify userspace of new hotplug device */
  676. run_sbin_hotplug(dev, TRUE);
  677. }
  678. /**
  679.  * pci_insert_device - insert a hotplug device
  680.  * @dev: the device to insert
  681.  * @bus: where to insert it
  682.  *
  683.  * Add a new device to the device lists and notify userspace (/sbin/hotplug).
  684.  */
  685. void
  686. pci_insert_device(struct pci_dev *dev, struct pci_bus *bus)
  687. {
  688. list_add_tail(&dev->bus_list, &bus->devices);
  689. list_add_tail(&dev->global_list, &pci_devices);
  690. #ifdef CONFIG_PROC_FS
  691. pci_proc_attach_device(dev);
  692. #endif
  693. pci_announce_device_to_drivers(dev);
  694. }
  695. static void
  696. pci_free_resources(struct pci_dev *dev)
  697. {
  698. int i;
  699. for (i = 0; i < PCI_NUM_RESOURCES; i++) {
  700. struct resource *res = dev->resource + i;
  701. if (res->parent)
  702. release_resource(res);
  703. }
  704. }
  705. /**
  706.  * pci_remove_device - remove a hotplug device
  707.  * @dev: the device to remove
  708.  *
  709.  * Delete the device structure from the device lists and 
  710.  * notify userspace (/sbin/hotplug).
  711.  */
  712. void
  713. pci_remove_device(struct pci_dev *dev)
  714. {
  715. if (dev->driver) {
  716. if (dev->driver->remove)
  717. dev->driver->remove(dev);
  718. dev->driver = NULL;
  719. }
  720. list_del(&dev->bus_list);
  721. list_del(&dev->global_list);
  722. pci_free_resources(dev);
  723. #ifdef CONFIG_PROC_FS
  724. pci_proc_detach_device(dev);
  725. #endif
  726. /* notify userspace of hotplug device removal */
  727. run_sbin_hotplug(dev, FALSE);
  728. }
  729. #endif
  730. static struct pci_driver pci_compat_driver = {
  731. name: "compat"
  732. };
  733. /**
  734.  * pci_dev_driver - get the pci_driver of a device
  735.  * @dev: the device to query
  736.  *
  737.  * Returns the appropriate pci_driver structure or %NULL if there is no 
  738.  * registered driver for the device.
  739.  */
  740. struct pci_driver *
  741. pci_dev_driver(const struct pci_dev *dev)
  742. {
  743. if (dev->driver)
  744. return dev->driver;
  745. else {
  746. int i;
  747. for(i=0; i<=PCI_ROM_RESOURCE; i++)
  748. if (dev->resource[i].flags & IORESOURCE_BUSY)
  749. return &pci_compat_driver;
  750. }
  751. return NULL;
  752. }
  753. /*
  754.  * This interrupt-safe spinlock protects all accesses to PCI
  755.  * configuration space.
  756.  */
  757. static spinlock_t pci_lock = SPIN_LOCK_UNLOCKED;
  758. /*
  759.  *  Wrappers for all PCI configuration access functions.  They just check
  760.  *  alignment, do locking and call the low-level functions pointed to
  761.  *  by pci_dev->ops.
  762.  */
  763. #define PCI_byte_BAD 0
  764. #define PCI_word_BAD (pos & 1)
  765. #define PCI_dword_BAD (pos & 3)
  766. #define PCI_OP(rw,size,type) 
  767. int pci_##rw##_config_##size (struct pci_dev *dev, int pos, type value) 
  768. {
  769. int res;
  770. unsigned long flags;
  771. if (PCI_##size##_BAD) return PCIBIOS_BAD_REGISTER_NUMBER;
  772. spin_lock_irqsave(&pci_lock, flags);
  773. res = dev->bus->ops->rw##_##size(dev, pos, value);
  774. spin_unlock_irqrestore(&pci_lock, flags);
  775. return res;
  776. }
  777. PCI_OP(read, byte, u8 *)
  778. PCI_OP(read, word, u16 *)
  779. PCI_OP(read, dword, u32 *)
  780. PCI_OP(write, byte, u8)
  781. PCI_OP(write, word, u16)
  782. PCI_OP(write, dword, u32)
  783. /**
  784.  * pci_set_master - enables bus-mastering for device dev
  785.  * @dev: the PCI device to enable
  786.  *
  787.  * Enables bus-mastering on the device and calls pcibios_set_master()
  788.  * to do the needed arch specific settings.
  789.  */
  790. void
  791. pci_set_master(struct pci_dev *dev)
  792. {
  793. u16 cmd;
  794. pci_read_config_word(dev, PCI_COMMAND, &cmd);
  795. if (! (cmd & PCI_COMMAND_MASTER)) {
  796. DBG("PCI: Enabling bus mastering for device %sn", dev->slot_name);
  797. cmd |= PCI_COMMAND_MASTER;
  798. pci_write_config_word(dev, PCI_COMMAND, cmd);
  799. }
  800. pcibios_set_master(dev);
  801. }
  802. /**
  803.  * pdev_set_mwi - arch helper function for pcibios_set_mwi
  804.  * @dev: the PCI device for which MWI is enabled
  805.  *
  806.  * Helper function for implementation the arch-specific pcibios_set_mwi
  807.  * function.  Originally copied from drivers/net/acenic.c.
  808.  * Copyright 1998-2001 by Jes Sorensen, <jes@trained-monkey.org>.
  809.  *
  810.  * RETURNS: An appriopriate -ERRNO error value on eror, or zero for success.
  811.  */
  812. int
  813. pdev_set_mwi(struct pci_dev *dev)
  814. {
  815. int rc = 0;
  816. u8 cache_size;
  817. /*
  818.  * Looks like this is necessary to deal with on all architectures,
  819.  * even this %$#%$# N440BX Intel based thing doesn't get it right.
  820.  * Ie. having two NICs in the machine, one will have the cache
  821.  * line set at boot time, the other will not.
  822.  */
  823. pci_read_config_byte(dev, PCI_CACHE_LINE_SIZE, &cache_size);
  824. cache_size <<= 2;
  825. if (cache_size != SMP_CACHE_BYTES) {
  826. printk(KERN_WARNING "PCI: %s PCI cache line size set incorrectly "
  827.        "(%i bytes) by BIOS/FW, ",
  828.        dev->slot_name, cache_size);
  829. if (cache_size > SMP_CACHE_BYTES) {
  830. printk("expecting %in", SMP_CACHE_BYTES);
  831. rc = -EINVAL;
  832. } else {
  833. printk("correcting to %in", SMP_CACHE_BYTES);
  834. pci_write_config_byte(dev, PCI_CACHE_LINE_SIZE,
  835.       SMP_CACHE_BYTES >> 2);
  836. }
  837. }
  838. return rc;
  839. }
  840. /**
  841.  * pci_set_mwi - enables memory-write-invalidate PCI transaction
  842.  * @dev: the PCI device for which MWI is enabled
  843.  *
  844.  * Enables the Memory-Write-Invalidate transaction in %PCI_COMMAND,
  845.  * and then calls @pcibios_set_mwi to do the needed arch specific
  846.  * operations or a generic mwi-prep function.
  847.  *
  848.  * RETURNS: An appriopriate -ERRNO error value on eror, or zero for success.
  849.  */
  850. int
  851. pci_set_mwi(struct pci_dev *dev)
  852. {
  853. int rc;
  854. u16 cmd;
  855. #ifdef HAVE_ARCH_PCI_MWI
  856. rc = pcibios_set_mwi(dev);
  857. #else
  858. rc = pdev_set_mwi(dev);
  859. #endif
  860. if (rc)
  861. return rc;
  862. pci_read_config_word(dev, PCI_COMMAND, &cmd);
  863. if (! (cmd & PCI_COMMAND_INVALIDATE)) {
  864. DBG("PCI: Enabling Mem-Wr-Inval for device %sn", dev->slot_name);
  865. cmd |= PCI_COMMAND_INVALIDATE;
  866. pci_write_config_word(dev, PCI_COMMAND, cmd);
  867. }
  868. return 0;
  869. }
  870. /**
  871.  * pci_clear_mwi - disables Memory-Write-Invalidate for device dev
  872.  * @dev: the PCI device to disable
  873.  *
  874.  * Disables PCI Memory-Write-Invalidate transaction on the device
  875.  */
  876. void
  877. pci_clear_mwi(struct pci_dev *dev)
  878. {
  879. u16 cmd;
  880. pci_read_config_word(dev, PCI_COMMAND, &cmd);
  881. if (cmd & PCI_COMMAND_INVALIDATE) {
  882. cmd &= ~PCI_COMMAND_INVALIDATE;
  883. pci_write_config_word(dev, PCI_COMMAND, cmd);
  884. }
  885. }
  886. int
  887. pci_set_dma_mask(struct pci_dev *dev, u64 mask)
  888. {
  889. if (!pci_dma_supported(dev, mask))
  890. return -EIO;
  891. dev->dma_mask = mask;
  892. return 0;
  893. }
  894.     
  895. int
  896. pci_dac_set_dma_mask(struct pci_dev *dev, u64 mask)
  897. {
  898. if (!pci_dac_dma_supported(dev, mask))
  899. return -EIO;
  900. dev->dma_mask = mask;
  901. return 0;
  902. }
  903.     
  904. /*
  905.  * Translate the low bits of the PCI base
  906.  * to the resource type
  907.  */
  908. static inline unsigned int pci_calc_resource_flags(unsigned int flags)
  909. {
  910. if (flags & PCI_BASE_ADDRESS_SPACE_IO)
  911. return IORESOURCE_IO;
  912. if (flags & PCI_BASE_ADDRESS_MEM_PREFETCH)
  913. return IORESOURCE_MEM | IORESOURCE_PREFETCH;
  914. return IORESOURCE_MEM;
  915. }
  916. /*
  917.  * Find the extent of a PCI decode..
  918.  */
  919. static u32 pci_size(u32 base, unsigned long mask)
  920. {
  921. u32 size = mask & base; /* Find the significant bits */
  922. size = size & ~(size-1); /* Get the lowest of them to find the decode size */
  923. return size-1; /* extent = size - 1 */
  924. }
  925. static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, int rom)
  926. {
  927. unsigned int pos, reg, next;
  928. u32 l, sz;
  929. struct resource *res;
  930. for(pos=0; pos<howmany; pos = next) {
  931. next = pos+1;
  932. res = &dev->resource[pos];
  933. res->name = dev->name;
  934. reg = PCI_BASE_ADDRESS_0 + (pos << 2);
  935. pci_read_config_dword(dev, reg, &l);
  936. pci_write_config_dword(dev, reg, ~0);
  937. pci_read_config_dword(dev, reg, &sz);
  938. pci_write_config_dword(dev, reg, l);
  939. if (!sz || sz == 0xffffffff)
  940. continue;
  941. if (l == 0xffffffff)
  942. l = 0;
  943. if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) {
  944. res->start = l & PCI_BASE_ADDRESS_MEM_MASK;
  945. res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK;
  946. sz = pci_size(sz, PCI_BASE_ADDRESS_MEM_MASK);
  947. } else {
  948. res->start = l & PCI_BASE_ADDRESS_IO_MASK;
  949. res->flags |= l & ~PCI_BASE_ADDRESS_IO_MASK;
  950. sz = pci_size(sz, PCI_BASE_ADDRESS_IO_MASK & 0xffff);
  951. }
  952. res->end = res->start + (unsigned long) sz;
  953. res->flags |= pci_calc_resource_flags(l);
  954. if ((l & (PCI_BASE_ADDRESS_SPACE | PCI_BASE_ADDRESS_MEM_TYPE_MASK))
  955.     == (PCI_BASE_ADDRESS_SPACE_MEMORY | PCI_BASE_ADDRESS_MEM_TYPE_64)) {
  956. pci_read_config_dword(dev, reg+4, &l);
  957. next++;
  958. #if BITS_PER_LONG == 64
  959. res->start |= ((unsigned long) l) << 32;
  960. res->end = res->start + sz;
  961. pci_write_config_dword(dev, reg+4, ~0);
  962. pci_read_config_dword(dev, reg+4, &sz);
  963. pci_write_config_dword(dev, reg+4, l);
  964. if (~sz)
  965. res->end = res->start + 0xffffffff +
  966. (((unsigned long) ~sz) << 32);
  967. #else
  968. if (l) {
  969. printk(KERN_ERR "PCI: Unable to handle 64-bit address for device %sn", dev->slot_name);
  970. res->start = 0;
  971. res->flags = 0;
  972. continue;
  973. }
  974. #endif
  975. }
  976. }
  977. if (rom) {
  978. dev->rom_base_reg = rom;
  979. res = &dev->resource[PCI_ROM_RESOURCE];
  980. pci_read_config_dword(dev, rom, &l);
  981. pci_write_config_dword(dev, rom, ~PCI_ROM_ADDRESS_ENABLE);
  982. pci_read_config_dword(dev, rom, &sz);
  983. pci_write_config_dword(dev, rom, l);
  984. if (l == 0xffffffff)
  985. l = 0;
  986. if (sz && sz != 0xffffffff) {
  987. res->flags = (l & PCI_ROM_ADDRESS_ENABLE) |
  988.   IORESOURCE_MEM | IORESOURCE_PREFETCH | IORESOURCE_READONLY | IORESOURCE_CACHEABLE;
  989. res->start = l & PCI_ROM_ADDRESS_MASK;
  990. sz = pci_size(sz, PCI_ROM_ADDRESS_MASK);
  991. res->end = res->start + (unsigned long) sz;
  992. }
  993. res->name = dev->name;
  994. }
  995. }
  996. void __devinit pci_read_bridge_bases(struct pci_bus *child)
  997. {
  998. struct pci_dev *dev = child->self;
  999. u8 io_base_lo, io_limit_lo;
  1000. u16 mem_base_lo, mem_limit_lo;
  1001. unsigned long base, limit;
  1002. struct resource *res;
  1003. int i;
  1004. if (!dev) /* It's a host bus, nothing to read */
  1005. return;
  1006. if (dev->transparent) {
  1007. printk("Transparent bridge - %sn", dev->name);
  1008. for(i = 0; i < 4; i++)
  1009. child->resource[i] = child->parent->resource[i];
  1010. return;
  1011. }
  1012. for(i=0; i<3; i++)
  1013. child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
  1014. res = child->resource[0];
  1015. pci_read_config_byte(dev, PCI_IO_BASE, &io_base_lo);
  1016. pci_read_config_byte(dev, PCI_IO_LIMIT, &io_limit_lo);
  1017. base = (io_base_lo & PCI_IO_RANGE_MASK) << 8;
  1018. limit = (io_limit_lo & PCI_IO_RANGE_MASK) << 8;
  1019. if ((io_base_lo & PCI_IO_RANGE_TYPE_MASK) == PCI_IO_RANGE_TYPE_32) {
  1020. u16 io_base_hi, io_limit_hi;
  1021. pci_read_config_word(dev, PCI_IO_BASE_UPPER16, &io_base_hi);
  1022. pci_read_config_word(dev, PCI_IO_LIMIT_UPPER16, &io_limit_hi);
  1023. base |= (io_base_hi << 16);
  1024. limit |= (io_limit_hi << 16);
  1025. }
  1026. if (base && base <= limit) {
  1027. res->flags = (io_base_lo & PCI_IO_RANGE_TYPE_MASK) | IORESOURCE_IO;
  1028. res->start = base;
  1029. res->end = limit + 0xfff;
  1030. }
  1031. res = child->resource[1];
  1032. pci_read_config_word(dev, PCI_MEMORY_BASE, &mem_base_lo);
  1033. pci_read_config_word(dev, PCI_MEMORY_LIMIT, &mem_limit_lo);
  1034. base = (mem_base_lo & PCI_MEMORY_RANGE_MASK) << 16;
  1035. limit = (mem_limit_lo & PCI_MEMORY_RANGE_MASK) << 16;
  1036. if (base && base <= limit) {
  1037. res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM;
  1038. res->start = base;
  1039. res->end = limit + 0xfffff;
  1040. }
  1041. res = child->resource[2];
  1042. pci_read_config_word(dev, PCI_PREF_MEMORY_BASE, &mem_base_lo);
  1043. pci_read_config_word(dev, PCI_PREF_MEMORY_LIMIT, &mem_limit_lo);
  1044. base = (mem_base_lo & PCI_PREF_RANGE_MASK) << 16;
  1045. limit = (mem_limit_lo & PCI_PREF_RANGE_MASK) << 16;
  1046. if ((mem_base_lo & PCI_PREF_RANGE_TYPE_MASK) == PCI_PREF_RANGE_TYPE_64) {
  1047. u32 mem_base_hi, mem_limit_hi;
  1048. pci_read_config_dword(dev, PCI_PREF_BASE_UPPER32, &mem_base_hi);
  1049. pci_read_config_dword(dev, PCI_PREF_LIMIT_UPPER32, &mem_limit_hi);
  1050. #if BITS_PER_LONG == 64
  1051. base |= ((long) mem_base_hi) << 32;
  1052. limit |= ((long) mem_limit_hi) << 32;
  1053. #else
  1054. if (mem_base_hi || mem_limit_hi) {
  1055. printk(KERN_ERR "PCI: Unable to handle 64-bit address space for %sn", child->name);
  1056. return;
  1057. }
  1058. #endif
  1059. }
  1060. if (base && base <= limit) {
  1061. res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH;
  1062. res->start = base;
  1063. res->end = limit + 0xfffff;
  1064. }
  1065. }
  1066. static struct pci_bus * __devinit pci_alloc_bus(void)
  1067. {
  1068. struct pci_bus *b;
  1069. b = kmalloc(sizeof(*b), GFP_KERNEL);
  1070. if (b) {
  1071. memset(b, 0, sizeof(*b));
  1072. INIT_LIST_HEAD(&b->children);
  1073. INIT_LIST_HEAD(&b->devices);
  1074. }
  1075. return b;
  1076. }
  1077. struct pci_bus * __devinit pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, int busnr)
  1078. {
  1079. struct pci_bus *child;
  1080. int i;
  1081. /*
  1082.  * Allocate a new bus, and inherit stuff from the parent..
  1083.  */
  1084. child = pci_alloc_bus();
  1085. list_add_tail(&child->node, &parent->children);
  1086. child->self = dev;
  1087. dev->subordinate = child;
  1088. child->parent = parent;
  1089. child->ops = parent->ops;
  1090. child->sysdata = parent->sysdata;
  1091. /*
  1092.  * Set up the primary, secondary and subordinate
  1093.  * bus numbers.
  1094.  */
  1095. child->number = child->secondary = busnr;
  1096. child->primary = parent->secondary;
  1097. child->subordinate = 0xff;
  1098. /* Set up default resource pointers and names.. */
  1099. for (i = 0; i < 4; i++) {
  1100. child->resource[i] = &dev->resource[PCI_BRIDGE_RESOURCES+i];
  1101. child->resource[i]->name = child->name;
  1102. }
  1103. return child;
  1104. }
  1105. unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus);
  1106. /*
  1107.  * If it's a bridge, configure it and scan the bus behind it.
  1108.  * For CardBus bridges, we don't scan behind as the devices will
  1109.  * be handled by the bridge driver itself.
  1110.  *
  1111.  * We need to process bridges in two passes -- first we scan those
  1112.  * already configured by the BIOS and after we are done with all of
  1113.  * them, we proceed to assigning numbers to the remaining buses in
  1114.  * order to avoid overlaps between old and new bus numbers.
  1115.  */
  1116. static int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max, int pass)
  1117. {
  1118. unsigned int buses;
  1119. unsigned short cr;
  1120. struct pci_bus *child;
  1121. int is_cardbus = (dev->hdr_type == PCI_HEADER_TYPE_CARDBUS);
  1122. pci_read_config_dword(dev, PCI_PRIMARY_BUS, &buses);
  1123. DBG("Scanning behind PCI bridge %s, config %06x, pass %dn", dev->slot_name, buses & 0xffffff, pass);
  1124. if ((buses & 0xffff00) && !pcibios_assign_all_busses()) {
  1125. /*
  1126.  * Bus already configured by firmware, process it in the first
  1127.  * pass and just note the configuration.
  1128.  */
  1129. if (pass)
  1130. return max;
  1131. child = pci_add_new_bus(bus, dev, 0);
  1132. child->primary = buses & 0xFF;
  1133. child->secondary = (buses >> 8) & 0xFF;
  1134. child->subordinate = (buses >> 16) & 0xFF;
  1135. child->number = child->secondary;
  1136. if (!is_cardbus) {
  1137. unsigned int cmax = pci_do_scan_bus(child);
  1138. if (cmax > max) max = cmax;
  1139. } else {
  1140. unsigned int cmax = child->subordinate;
  1141. if (cmax > max) max = cmax;
  1142. }
  1143. } else {
  1144. /*
  1145.  * We need to assign a number to this bus which we always
  1146.  * do in the second pass. We also keep all address decoders
  1147.  * on the bridge disabled during scanning.  FIXME: Why?
  1148.  */
  1149. if (!pass)
  1150. return max;
  1151. pci_read_config_word(dev, PCI_COMMAND, &cr);
  1152. pci_write_config_word(dev, PCI_COMMAND, 0x0000);
  1153. pci_write_config_word(dev, PCI_STATUS, 0xffff);
  1154. child = pci_add_new_bus(bus, dev, ++max);
  1155. buses = (buses & 0xff000000)
  1156.       | ((unsigned int)(child->primary)     <<  0)
  1157.       | ((unsigned int)(child->secondary)   <<  8)
  1158.       | ((unsigned int)(child->subordinate) << 16);
  1159. /*
  1160.  * We need to blast all three values with a single write.
  1161.  */
  1162. pci_write_config_dword(dev, PCI_PRIMARY_BUS, buses);
  1163. if (!is_cardbus) {
  1164. /* Now we can scan all subordinate buses... */
  1165. max = pci_do_scan_bus(child);
  1166. } else {
  1167. /*
  1168.  * For CardBus bridges, we leave 4 bus numbers
  1169.  * as cards with a PCI-to-PCI bridge can be
  1170.  * inserted later.
  1171.  */
  1172. max += 3;
  1173. }
  1174. /*
  1175.  * Set the subordinate bus number to its real value.
  1176.  */
  1177. child->subordinate = max;
  1178. pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max);
  1179. pci_write_config_word(dev, PCI_COMMAND, cr);
  1180. }
  1181. sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number);
  1182. return max;
  1183. }
  1184. /*
  1185.  * Read interrupt line and base address registers.
  1186.  * The architecture-dependent code can tweak these, of course.
  1187.  */
  1188. static void pci_read_irq(struct pci_dev *dev)
  1189. {
  1190. unsigned char irq;
  1191. pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &irq);
  1192. if (irq)
  1193. pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
  1194. dev->irq = irq;
  1195. }
  1196. /**
  1197.  * pci_setup_device - fill in class and map information of a device
  1198.  * @dev: the device structure to fill
  1199.  *
  1200.  * Initialize the device structure with information about the device's 
  1201.  * vendor,class,memory and IO-space addresses,IRQ lines etc.
  1202.  * Called at initialisation of the PCI subsystem and by CardBus services.
  1203.  * Returns 0 on success and -1 if unknown type of device (not normal, bridge
  1204.  * or CardBus).
  1205.  */
  1206. int pci_setup_device(struct pci_dev * dev)
  1207. {
  1208. u32 class;
  1209. sprintf(dev->slot_name, "%02x:%02x.%d", dev->bus->number, PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn));
  1210. sprintf(dev->name, "PCI device %04x:%04x", dev->vendor, dev->device);
  1211. pci_read_config_dword(dev, PCI_CLASS_REVISION, &class);
  1212. class >>= 8;     /* upper 3 bytes */
  1213. dev->class = class;
  1214. class >>= 8;
  1215. DBG("Found %02x:%02x [%04x/%04x] %06x %02xn", dev->bus->number, dev->devfn, dev->vendor, dev->device, class, dev->hdr_type);
  1216. /* "Unknown power state" */
  1217. dev->current_state = 4;
  1218. switch (dev->hdr_type) {     /* header type */
  1219. case PCI_HEADER_TYPE_NORMAL:     /* standard header */
  1220. if (class == PCI_CLASS_BRIDGE_PCI)
  1221. goto bad;
  1222. pci_read_irq(dev);
  1223. pci_read_bases(dev, 6, PCI_ROM_ADDRESS);
  1224. pci_read_config_word(dev, PCI_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
  1225. pci_read_config_word(dev, PCI_SUBSYSTEM_ID, &dev->subsystem_device);
  1226. break;
  1227. case PCI_HEADER_TYPE_BRIDGE:     /* bridge header */
  1228. if (class != PCI_CLASS_BRIDGE_PCI)
  1229. goto bad;
  1230. /* The PCI-to-PCI bridge spec requires that subtractive
  1231.    decoding (i.e. transparent) bridge must have programming
  1232.    interface code of 0x01. */ 
  1233. dev->transparent = ((dev->class & 0xff) == 1);
  1234. pci_read_bases(dev, 2, PCI_ROM_ADDRESS1);
  1235. break;
  1236. case PCI_HEADER_TYPE_CARDBUS:     /* CardBus bridge header */
  1237. if (class != PCI_CLASS_BRIDGE_CARDBUS)
  1238. goto bad;
  1239. pci_read_irq(dev);
  1240. pci_read_bases(dev, 1, 0);
  1241. pci_read_config_word(dev, PCI_CB_SUBSYSTEM_VENDOR_ID, &dev->subsystem_vendor);
  1242. pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
  1243. break;
  1244. default:     /* unknown header */
  1245. printk(KERN_ERR "PCI: device %s has unknown header type %02x, ignoring.n",
  1246. dev->slot_name, dev->hdr_type);
  1247. return -1;
  1248. bad:
  1249. printk(KERN_ERR "PCI: %s: class %x doesn't match header type %02x. Ignoring class.n",
  1250.        dev->slot_name, class, dev->hdr_type);
  1251. dev->class = PCI_CLASS_NOT_DEFINED;
  1252. }
  1253. /* We found a fine healthy device, go go go... */
  1254. return 0;
  1255. }
  1256. /*
  1257.  * Read the config data for a PCI device, sanity-check it
  1258.  * and fill in the dev structure...
  1259.  */
  1260. struct pci_dev * __devinit pci_scan_device(struct pci_dev *temp)
  1261. {
  1262. struct pci_dev *dev;
  1263. u32 l;
  1264. if (pci_read_config_dword(temp, PCI_VENDOR_ID, &l))
  1265. return NULL;
  1266. /* some broken boards return 0 or ~0 if a slot is empty: */
  1267. if (l == 0xffffffff || l == 0x00000000 || l == 0x0000ffff || l == 0xffff0000)
  1268. return NULL;
  1269. dev = kmalloc(sizeof(*dev), GFP_KERNEL);
  1270. if (!dev)
  1271. return NULL;
  1272. memcpy(dev, temp, sizeof(*dev));
  1273. dev->vendor = l & 0xffff;
  1274. dev->device = (l >> 16) & 0xffff;
  1275. /* Assume 32-bit PCI; let 64-bit PCI cards (which are far rarer)
  1276.    set this higher, assuming the system even supports it.  */
  1277. dev->dma_mask = 0xffffffff;
  1278. if (pci_setup_device(dev) < 0) {
  1279. kfree(dev);
  1280. dev = NULL;
  1281. }
  1282. return dev;
  1283. }
  1284. struct pci_dev * __devinit pci_scan_slot(struct pci_dev *temp)
  1285. {
  1286. struct pci_bus *bus = temp->bus;
  1287. struct pci_dev *dev;
  1288. struct pci_dev *first_dev = NULL;
  1289. int func = 0;
  1290. int is_multi = 0;
  1291. u8 hdr_type;
  1292. for (func = 0; func < 8; func++, temp->devfn++) {
  1293. if (func && !is_multi) /* not a multi-function device */
  1294. continue;
  1295. if (pci_read_config_byte(temp, PCI_HEADER_TYPE, &hdr_type))
  1296. continue;
  1297. temp->hdr_type = hdr_type & 0x7f;
  1298. dev = pci_scan_device(temp);
  1299. if (!dev)
  1300. continue;
  1301. pci_name_device(dev);
  1302. if (!func) {
  1303. is_multi = hdr_type & 0x80;
  1304. first_dev = dev;
  1305. }
  1306. /*
  1307.  * Link the device to both the global PCI device chain and
  1308.  * the per-bus list of devices.
  1309.  */
  1310. list_add_tail(&dev->global_list, &pci_devices);
  1311. list_add_tail(&dev->bus_list, &bus->devices);
  1312. /* Fix up broken headers */
  1313. pci_fixup_device(PCI_FIXUP_HEADER, dev);
  1314. }
  1315. return first_dev;
  1316. }
  1317. unsigned int __devinit pci_do_scan_bus(struct pci_bus *bus)
  1318. {
  1319. unsigned int devfn, max, pass;
  1320. struct list_head *ln;
  1321. struct pci_dev *dev, dev0;
  1322. DBG("Scanning bus %02xn", bus->number);
  1323. max = bus->secondary;
  1324. /* Create a device template */
  1325. memset(&dev0, 0, sizeof(dev0));
  1326. dev0.bus = bus;
  1327. dev0.sysdata = bus->sysdata;
  1328. /* Go find them, Rover! */
  1329. for (devfn = 0; devfn < 0x100; devfn += 8) {
  1330. dev0.devfn = devfn;
  1331. pci_scan_slot(&dev0);
  1332. }
  1333. /*
  1334.  * After performing arch-dependent fixup of the bus, look behind
  1335.  * all PCI-to-PCI bridges on this bus.
  1336.  */
  1337. DBG("Fixups for bus %02xn", bus->number);
  1338. pcibios_fixup_bus(bus);
  1339. for (pass=0; pass < 2; pass++)
  1340. for (ln=bus->devices.next; ln != &bus->devices; ln=ln->next) {
  1341. dev = pci_dev_b(ln);
  1342. if (dev->hdr_type == PCI_HEADER_TYPE_BRIDGE || dev->hdr_type == PCI_HEADER_TYPE_CARDBUS)
  1343. max = pci_scan_bridge(bus, dev, max, pass);
  1344. }
  1345. /*
  1346.  * We've scanned the bus and so we know all about what's on
  1347.  * the other side of any bridges that may be on this bus plus
  1348.  * any devices.
  1349.  *
  1350.  * Return how far we've got finding sub-buses.
  1351.  */
  1352. DBG("Bus scan for %02x returning with max=%02xn", bus->number, max);
  1353. return max;
  1354. }
  1355. int __devinit pci_bus_exists(const struct list_head *list, int nr)
  1356. {
  1357. const struct list_head *l;
  1358. for(l=list->next; l != list; l = l->next) {
  1359. const struct pci_bus *b = pci_bus_b(l);
  1360. if (b->number == nr || pci_bus_exists(&b->children, nr))
  1361. return 1;
  1362. }
  1363. return 0;
  1364. }
  1365. struct pci_bus * __devinit pci_alloc_primary_bus(int bus)
  1366. {
  1367. struct pci_bus *b;
  1368. if (pci_bus_exists(&pci_root_buses, bus)) {
  1369. /* If we already got to this bus through a different bridge, ignore it */
  1370. DBG("PCI: Bus %02x already knownn", bus);
  1371. return NULL;
  1372. }
  1373. b = pci_alloc_bus();
  1374. list_add_tail(&b->node, &pci_root_buses);
  1375. b->number = b->secondary = bus;
  1376. b->resource[0] = &ioport_resource;
  1377. b->resource[1] = &iomem_resource;
  1378. return b;
  1379. }
  1380. struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata)
  1381. {
  1382. struct pci_bus *b = pci_alloc_primary_bus(bus);
  1383. if (b) {
  1384. b->sysdata = sysdata;
  1385. b->ops = ops;
  1386. b->subordinate = pci_do_scan_bus(b);
  1387. }
  1388. return b;
  1389. }
  1390. #ifdef CONFIG_PM
  1391. /*
  1392.  * PCI Power management..
  1393.  *
  1394.  * This needs to be done centralized, so that we power manage PCI
  1395.  * devices in the right order: we should not shut down PCI bridges
  1396.  * before we've shut down the devices behind them, and we should
  1397.  * not wake up devices before we've woken up the bridge to the
  1398.  * device.. Eh?
  1399.  *
  1400.  * We do not touch devices that don't have a driver that exports
  1401.  * a suspend/resume function. That is just too dangerous. If the default
  1402.  * PCI suspend/resume functions work for a device, the driver can
  1403.  * easily implement them (ie just have a suspend function that calls
  1404.  * the pci_set_power_state() function).
  1405.  */
  1406. static int pci_pm_save_state_device(struct pci_dev *dev, u32 state)
  1407. {
  1408. int error = 0;
  1409. if (dev) {
  1410. struct pci_driver *driver = dev->driver;
  1411. if (driver && driver->save_state) 
  1412. error = driver->save_state(dev,state);
  1413. }
  1414. return error;
  1415. }
  1416. static int pci_pm_suspend_device(struct pci_dev *dev, u32 state)
  1417. {
  1418. int error = 0;
  1419. if (dev) {
  1420. struct pci_driver *driver = dev->driver;
  1421. if (driver && driver->suspend)
  1422. error = driver->suspend(dev,state);
  1423. }
  1424. return error;
  1425. }
  1426. static int pci_pm_resume_device(struct pci_dev *dev)
  1427. {
  1428. int error = 0;
  1429. if (dev) {
  1430. struct pci_driver *driver = dev->driver;
  1431. if (driver && driver->resume)
  1432. error = driver->resume(dev);
  1433. }
  1434. return error;
  1435. }
  1436. static int pci_pm_save_state_bus(struct pci_bus *bus, u32 state)
  1437. {
  1438. struct list_head *list;
  1439. int error = 0;
  1440. list_for_each(list, &bus->children) {
  1441. error = pci_pm_save_state_bus(pci_bus_b(list),state);
  1442. if (error) return error;
  1443. }
  1444. list_for_each(list, &bus->devices) {
  1445. error = pci_pm_save_state_device(pci_dev_b(list),state);
  1446. if (error) return error;
  1447. }
  1448. return 0;
  1449. }
  1450. static int pci_pm_suspend_bus(struct pci_bus *bus, u32 state)
  1451. {
  1452. struct list_head *list;
  1453. /* Walk the bus children list */
  1454. list_for_each(list, &bus->children) 
  1455. pci_pm_suspend_bus(pci_bus_b(list),state);
  1456. /* Walk the device children list */
  1457. list_for_each(list, &bus->devices)
  1458. pci_pm_suspend_device(pci_dev_b(list),state);
  1459. return 0;
  1460. }
  1461. static int pci_pm_resume_bus(struct pci_bus *bus)
  1462. {
  1463. struct list_head *list;
  1464. /* Walk the device children list */
  1465. list_for_each(list, &bus->devices)
  1466. pci_pm_resume_device(pci_dev_b(list));
  1467. /* And then walk the bus children */
  1468. list_for_each(list, &bus->children)
  1469. pci_pm_resume_bus(pci_bus_b(list));
  1470. return 0;
  1471. }
  1472. static int pci_pm_save_state(u32 state)
  1473. {
  1474. struct list_head *list;
  1475. struct pci_bus *bus;
  1476. int error = 0;
  1477. list_for_each(list, &pci_root_buses) {
  1478. bus = pci_bus_b(list);
  1479. error = pci_pm_save_state_bus(bus,state);
  1480. if (!error)
  1481. error = pci_pm_save_state_device(bus->self,state);
  1482. }
  1483. return error;
  1484. }
  1485. static int pci_pm_suspend(u32 state)
  1486. {
  1487. struct list_head *list;
  1488. struct pci_bus *bus;
  1489. list_for_each(list, &pci_root_buses) {
  1490. bus = pci_bus_b(list);
  1491. pci_pm_suspend_bus(bus,state);
  1492. pci_pm_suspend_device(bus->self,state);
  1493. }
  1494. return 0;
  1495. }
  1496. int pci_pm_resume(void)
  1497. {
  1498. struct list_head *list;
  1499. struct pci_bus *bus;
  1500. list_for_each(list, &pci_root_buses) {
  1501. bus = pci_bus_b(list);
  1502. pci_pm_resume_device(bus->self);
  1503. pci_pm_resume_bus(bus);
  1504. }
  1505. return 0;
  1506. }
  1507. static int 
  1508. pci_pm_callback(struct pm_dev *pm_device, pm_request_t rqst, void *data)
  1509. {
  1510. int error = 0;
  1511. switch (rqst) {
  1512. case PM_SAVE_STATE:
  1513. error = pci_pm_save_state((unsigned long)data);
  1514. break;
  1515. case PM_SUSPEND:
  1516. error = pci_pm_suspend((unsigned long)data);
  1517. break;
  1518. case PM_RESUME:
  1519. error = pci_pm_resume();
  1520. break;
  1521. default: break;
  1522. }
  1523. return error;
  1524. }
  1525. #endif
  1526. /*
  1527.  * Pool allocator ... wraps the pci_alloc_consistent page allocator, so
  1528.  * small blocks are easily used by drivers for bus mastering controllers.
  1529.  * This should probably be sharing the guts of the slab allocator.
  1530.  */
  1531. struct pci_pool { /* the pool */
  1532. struct list_head page_list;
  1533. spinlock_t lock;
  1534. size_t blocks_per_page;
  1535. size_t size;
  1536. int flags;
  1537. struct pci_dev *dev;
  1538. size_t allocation;
  1539. char name [32];
  1540. wait_queue_head_t waitq;
  1541. };
  1542. struct pci_page { /* cacheable header for 'allocation' bytes */
  1543. struct list_head page_list;
  1544. void *vaddr;
  1545. dma_addr_t dma;
  1546. unsigned long bitmap [0];
  1547. };
  1548. #define POOL_TIMEOUT_JIFFIES ((100 /* msec */ * HZ) / 1000)
  1549. #define POOL_POISON_BYTE 0xa7
  1550. // #define CONFIG_PCIPOOL_DEBUG
  1551. /**
  1552.  * pci_pool_create - Creates a pool of pci consistent memory blocks, for dma.
  1553.  * @name: name of pool, for diagnostics
  1554.  * @pdev: pci device that will be doing the DMA
  1555.  * @size: size of the blocks in this pool.
  1556.  * @align: alignment requirement for blocks; must be a power of two
  1557.  * @allocation: returned blocks won't cross this boundary (or zero)
  1558.  * @flags: SLAB_* flags (not all are supported).
  1559.  *
  1560.  * Returns a pci allocation pool with the requested characteristics, or
  1561.  * null if one can't be created.  Given one of these pools, pci_pool_alloc()
  1562.  * may be used to allocate memory.  Such memory will all have "consistent"
  1563.  * DMA mappings, accessible by the device and its driver without using
  1564.  * cache flushing primitives.  The actual size of blocks allocated may be
  1565.  * larger than requested because of alignment.
  1566.  *
  1567.  * If allocation is nonzero, objects returned from pci_pool_alloc() won't
  1568.  * cross that size boundary.  This is useful for devices which have
  1569.  * addressing restrictions on individual DMA transfers, such as not crossing
  1570.  * boundaries of 4KBytes.
  1571.  */
  1572. struct pci_pool *
  1573. pci_pool_create (const char *name, struct pci_dev *pdev,
  1574. size_t size, size_t align, size_t allocation, int flags)
  1575. {
  1576. struct pci_pool *retval;
  1577. if (align == 0)
  1578. align = 1;
  1579. if (size == 0)
  1580. return 0;
  1581. else if (size < align)
  1582. size = align;
  1583. else if ((size % align) != 0) {
  1584. size += align + 1;
  1585. size &= ~(align - 1);
  1586. }
  1587. if (allocation == 0) {
  1588. if (PAGE_SIZE < size)
  1589. allocation = size;
  1590. else
  1591. allocation = PAGE_SIZE;
  1592. // FIXME: round up for less fragmentation
  1593. } else if (allocation < size)
  1594. return 0;
  1595. if (!(retval = kmalloc (sizeof *retval, flags)))
  1596. return retval;
  1597. #ifdef CONFIG_PCIPOOL_DEBUG
  1598. flags |= SLAB_POISON;
  1599. #endif
  1600. strncpy (retval->name, name, sizeof retval->name);
  1601. retval->name [sizeof retval->name - 1] = 0;
  1602. retval->dev = pdev;
  1603. INIT_LIST_HEAD (&retval->page_list);
  1604. spin_lock_init (&retval->lock);
  1605. retval->size = size;
  1606. retval->flags = flags;
  1607. retval->allocation = allocation;
  1608. retval->blocks_per_page = allocation / size;
  1609. init_waitqueue_head (&retval->waitq);
  1610. #ifdef CONFIG_PCIPOOL_DEBUG
  1611. printk (KERN_DEBUG "pcipool create %s/%s size %d, %d/page (%d alloc)n",
  1612. pdev ? pdev->slot_name : NULL, retval->name, size,
  1613. retval->blocks_per_page, allocation);
  1614. #endif
  1615. return retval;
  1616. }
  1617. static struct pci_page *
  1618. pool_alloc_page (struct pci_pool *pool, int mem_flags)
  1619. {
  1620. struct pci_page *page;
  1621. int mapsize;
  1622. mapsize = pool->blocks_per_page;
  1623. mapsize = (mapsize + BITS_PER_LONG - 1) / BITS_PER_LONG;
  1624. mapsize *= sizeof (long);
  1625. page = (struct pci_page *) kmalloc (mapsize + sizeof *page, mem_flags);
  1626. if (!page)
  1627. return 0;
  1628. page->vaddr = pci_alloc_consistent (pool->dev,
  1629.     pool->allocation,
  1630.     &page->dma);
  1631. if (page->vaddr) {
  1632. memset (page->bitmap, 0xff, mapsize); // bit set == free
  1633. if (pool->flags & SLAB_POISON)
  1634. memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
  1635. list_add (&page->page_list, &pool->page_list);
  1636. } else {
  1637. kfree (page);
  1638. page = 0;
  1639. }
  1640. return page;
  1641. }
  1642. static inline int
  1643. is_page_busy (int blocks, unsigned long *bitmap)
  1644. {
  1645. while (blocks > 0) {
  1646. if (*bitmap++ != ~0UL)
  1647. return 1;
  1648. blocks -= BITS_PER_LONG;
  1649. }
  1650. return 0;
  1651. }
  1652. static void
  1653. pool_free_page (struct pci_pool *pool, struct pci_page *page)
  1654. {
  1655. dma_addr_t dma = page->dma;
  1656. if (pool->flags & SLAB_POISON)
  1657. memset (page->vaddr, POOL_POISON_BYTE, pool->allocation);
  1658. pci_free_consistent (pool->dev, pool->allocation, page->vaddr, dma);
  1659. list_del (&page->page_list);
  1660. kfree (page);
  1661. }
  1662. /**
  1663.  * pci_pool_destroy - destroys a pool of pci memory blocks.
  1664.  * @pool: pci pool that will be destroyed
  1665.  *
  1666.  * Caller guarantees that no more memory from the pool is in use,
  1667.  * and that nothing will try to use the pool after this call.
  1668.  */
  1669. void
  1670. pci_pool_destroy (struct pci_pool *pool)
  1671. {
  1672. unsigned long flags;
  1673. #ifdef CONFIG_PCIPOOL_DEBUG
  1674. printk (KERN_DEBUG "pcipool destroy %s/%sn",
  1675. pool->dev ? pool->dev->slot_name : NULL,
  1676. pool->name);
  1677. #endif
  1678. spin_lock_irqsave (&pool->lock, flags);
  1679. while (!list_empty (&pool->page_list)) {
  1680. struct pci_page *page;
  1681. page = list_entry (pool->page_list.next,
  1682. struct pci_page, page_list);
  1683. if (is_page_busy (pool->blocks_per_page, page->bitmap)) {
  1684. printk (KERN_ERR "pci_pool_destroy %s/%s, %p busyn",
  1685. pool->dev ? pool->dev->slot_name : NULL,
  1686. pool->name, page->vaddr);
  1687. /* leak the still-in-use consistent memory */
  1688. list_del (&page->page_list);
  1689. kfree (page);
  1690. } else
  1691. pool_free_page (pool, page);
  1692. }
  1693. spin_unlock_irqrestore (&pool->lock, flags);
  1694. kfree (pool);
  1695. }
  1696. /**
  1697.  * pci_pool_alloc - get a block of consistent memory
  1698.  * @pool: pci pool that will produce the block
  1699.  * @mem_flags: SLAB_KERNEL or SLAB_ATOMIC
  1700.  * @handle: pointer to dma address of block
  1701.  *
  1702.  * This returns the kernel virtual address of a currently unused block,
  1703.  * and reports its dma address through the handle.
  1704.  * If such a memory block can't be allocated, null is returned.
  1705.  */
  1706. void *
  1707. pci_pool_alloc (struct pci_pool *pool, int mem_flags, dma_addr_t *handle)
  1708. {
  1709. unsigned long flags;
  1710. struct list_head *entry;
  1711. struct pci_page *page;
  1712. int map, block;
  1713. size_t offset;
  1714. void *retval;
  1715. restart:
  1716. spin_lock_irqsave (&pool->lock, flags);
  1717. list_for_each (entry, &pool->page_list) {
  1718. int i;
  1719. page = list_entry (entry, struct pci_page, page_list);
  1720. /* only cachable accesses here ... */
  1721. for (map = 0, i = 0;
  1722. i < pool->blocks_per_page;
  1723. i += BITS_PER_LONG, map++) {
  1724. if (page->bitmap [map] == 0)
  1725. continue;
  1726. block = ffz (~ page->bitmap [map]);
  1727. if ((i + block) < pool->blocks_per_page) {
  1728. clear_bit (block, &page->bitmap [map]);
  1729. offset = (BITS_PER_LONG * map) + block;
  1730. offset *= pool->size;
  1731. goto ready;
  1732. }
  1733. }
  1734. }
  1735. if (!(page = pool_alloc_page (pool, mem_flags))) {
  1736. if (mem_flags == SLAB_KERNEL) {
  1737. DECLARE_WAITQUEUE (wait, current);
  1738. current->state = TASK_INTERRUPTIBLE;
  1739. add_wait_queue (&pool->waitq, &wait);
  1740. spin_unlock_irqrestore (&pool->lock, flags);
  1741. schedule_timeout (POOL_TIMEOUT_JIFFIES);
  1742. current->state = TASK_RUNNING;
  1743. remove_wait_queue (&pool->waitq, &wait);
  1744. goto restart;
  1745. }
  1746. retval = 0;
  1747. goto done;
  1748. }
  1749. clear_bit (0, &page->bitmap [0]);
  1750. offset = 0;
  1751. ready:
  1752. retval = offset + page->vaddr;
  1753. *handle = offset + page->dma;
  1754. done:
  1755. spin_unlock_irqrestore (&pool->lock, flags);
  1756. return retval;
  1757. }
  1758. static struct pci_page *
  1759. pool_find_page (struct pci_pool *pool, dma_addr_t dma)
  1760. {
  1761. unsigned long flags;
  1762. struct list_head *entry;
  1763. struct pci_page *page;
  1764. spin_lock_irqsave (&pool->lock, flags);
  1765. list_for_each (entry, &pool->page_list) {
  1766. page = list_entry (entry, struct pci_page, page_list);
  1767. if (dma < page->dma)
  1768. continue;
  1769. if (dma < (page->dma + pool->allocation))
  1770. goto done;
  1771. }
  1772. page = 0;
  1773. done:
  1774. spin_unlock_irqrestore (&pool->lock, flags);
  1775. return page;
  1776. }
  1777. /**
  1778.  * pci_pool_free - put block back into pci pool
  1779.  * @pool: the pci pool holding the block
  1780.  * @vaddr: virtual address of block
  1781.  * @dma: dma address of block
  1782.  *
  1783.  * Caller promises neither device nor driver will again touch this block
  1784.  * unless it is first re-allocated.
  1785.  */
  1786. void
  1787. pci_pool_free (struct pci_pool *pool, void *vaddr, dma_addr_t dma)
  1788. {
  1789. struct pci_page *page;
  1790. unsigned long flags;
  1791. int map, block;
  1792. if ((page = pool_find_page (pool, dma)) == 0) {
  1793. printk (KERN_ERR "pci_pool_free %s/%s, %p/%x (bad dma)n",
  1794. pool->dev ? pool->dev->slot_name : NULL,
  1795. pool->name, vaddr, (int) (dma & 0xffffffff));
  1796. return;
  1797. }
  1798. #ifdef CONFIG_PCIPOOL_DEBUG
  1799. if (((dma - page->dma) + (void *)page->vaddr) != vaddr) {
  1800. printk (KERN_ERR "pci_pool_free %s/%s, %p (bad vaddr)/%xn",
  1801. pool->dev ? pool->dev->slot_name : NULL,
  1802. pool->name, vaddr, (int) (dma & 0xffffffff));
  1803. return;
  1804. }
  1805. #endif
  1806. block = dma - page->dma;
  1807. block /= pool->size;
  1808. map = block / BITS_PER_LONG;
  1809. block %= BITS_PER_LONG;
  1810. #ifdef CONFIG_PCIPOOL_DEBUG
  1811. if (page->bitmap [map] & (1UL << block)) {
  1812. printk (KERN_ERR "pci_pool_free %s/%s, dma %x already freen",
  1813. pool->dev ? pool->dev->slot_name : NULL,
  1814. pool->name, dma);
  1815. return;
  1816. }
  1817. #endif
  1818. if (pool->flags & SLAB_POISON)
  1819. memset (vaddr, POOL_POISON_BYTE, pool->size);
  1820. spin_lock_irqsave (&pool->lock, flags);
  1821. set_bit (block, &page->bitmap [map]);
  1822. if (waitqueue_active (&pool->waitq))
  1823. wake_up (&pool->waitq);
  1824. /*
  1825.  * Resist a temptation to do
  1826.  *    if (!is_page_busy(bpp, page->bitmap)) pool_free_page(pool, page);
  1827.  * it is not interrupt safe. Better have empty pages hang around.
  1828.  */
  1829. spin_unlock_irqrestore (&pool->lock, flags);
  1830. }
  1831. void __devinit  pci_init(void)
  1832. {
  1833. struct pci_dev *dev;
  1834. pcibios_init();
  1835. pci_for_each_dev(dev) {
  1836. pci_fixup_device(PCI_FIXUP_FINAL, dev);
  1837. }
  1838. #ifdef CONFIG_PM
  1839. pm_register(PM_PCI_DEV, 0, pci_pm_callback);
  1840. #endif
  1841. }
  1842. static int __devinit pci_setup(char *str)
  1843. {
  1844. while (str) {
  1845. char *k = strchr(str, ',');
  1846. if (k)
  1847. *k++ = 0;
  1848. if (*str && (str = pcibios_setup(str)) && *str) {
  1849. /* PCI layer options should be handled here */
  1850. printk(KERN_ERR "PCI: Unknown option `%s'n", str);
  1851. }
  1852. str = k;
  1853. }
  1854. return 1;
  1855. }
  1856. __setup("pci=", pci_setup);
  1857. EXPORT_SYMBOL(pci_read_config_byte);
  1858. EXPORT_SYMBOL(pci_read_config_word);
  1859. EXPORT_SYMBOL(pci_read_config_dword);
  1860. EXPORT_SYMBOL(pci_write_config_byte);
  1861. EXPORT_SYMBOL(pci_write_config_word);
  1862. EXPORT_SYMBOL(pci_write_config_dword);
  1863. EXPORT_SYMBOL(pci_devices);
  1864. EXPORT_SYMBOL(pci_root_buses);
  1865. EXPORT_SYMBOL(pci_enable_device_bars);
  1866. EXPORT_SYMBOL(pci_enable_device);
  1867. EXPORT_SYMBOL(pci_disable_device);
  1868. EXPORT_SYMBOL(pci_find_capability);
  1869. EXPORT_SYMBOL(pci_release_regions);
  1870. EXPORT_SYMBOL(pci_request_regions);
  1871. EXPORT_SYMBOL(pci_release_region);
  1872. EXPORT_SYMBOL(pci_request_region);
  1873. EXPORT_SYMBOL(pci_find_class);
  1874. EXPORT_SYMBOL(pci_find_device);
  1875. EXPORT_SYMBOL(pci_find_slot);
  1876. EXPORT_SYMBOL(pci_find_subsys);
  1877. EXPORT_SYMBOL(pci_set_master);
  1878. EXPORT_SYMBOL(pci_set_mwi);
  1879. EXPORT_SYMBOL(pci_clear_mwi);
  1880. EXPORT_SYMBOL(pdev_set_mwi);
  1881. EXPORT_SYMBOL(pci_set_dma_mask);
  1882. EXPORT_SYMBOL(pci_dac_set_dma_mask);
  1883. EXPORT_SYMBOL(pci_assign_resource);
  1884. EXPORT_SYMBOL(pci_register_driver);
  1885. EXPORT_SYMBOL(pci_unregister_driver);
  1886. EXPORT_SYMBOL(pci_dev_driver);
  1887. EXPORT_SYMBOL(pci_match_device);
  1888. EXPORT_SYMBOL(pci_find_parent_resource);
  1889. #ifdef CONFIG_HOTPLUG
  1890. EXPORT_SYMBOL(pci_setup_device);
  1891. EXPORT_SYMBOL(pci_insert_device);
  1892. EXPORT_SYMBOL(pci_remove_device);
  1893. EXPORT_SYMBOL(pci_announce_device_to_drivers);
  1894. EXPORT_SYMBOL(pci_add_new_bus);
  1895. EXPORT_SYMBOL(pci_do_scan_bus);
  1896. EXPORT_SYMBOL(pci_scan_slot);
  1897. EXPORT_SYMBOL(pci_scan_bus);
  1898. #ifdef CONFIG_PROC_FS
  1899. EXPORT_SYMBOL(pci_proc_attach_device);
  1900. EXPORT_SYMBOL(pci_proc_detach_device);
  1901. EXPORT_SYMBOL(pci_proc_attach_bus);
  1902. EXPORT_SYMBOL(pci_proc_detach_bus);
  1903. EXPORT_SYMBOL(proc_bus_pci_dir);
  1904. #endif
  1905. #endif
  1906. EXPORT_SYMBOL(pci_set_power_state);
  1907. EXPORT_SYMBOL(pci_save_state);
  1908. EXPORT_SYMBOL(pci_restore_state);
  1909. EXPORT_SYMBOL(pci_enable_wake);
  1910. /* Obsolete functions */
  1911. EXPORT_SYMBOL(pcibios_present);
  1912. EXPORT_SYMBOL(pcibios_read_config_byte);
  1913. EXPORT_SYMBOL(pcibios_read_config_word);
  1914. EXPORT_SYMBOL(pcibios_read_config_dword);
  1915. EXPORT_SYMBOL(pcibios_write_config_byte);
  1916. EXPORT_SYMBOL(pcibios_write_config_word);
  1917. EXPORT_SYMBOL(pcibios_write_config_dword);
  1918. EXPORT_SYMBOL(pcibios_find_class);
  1919. EXPORT_SYMBOL(pcibios_find_device);
  1920. /* Quirk info */
  1921. EXPORT_SYMBOL(isa_dma_bridge_buggy);
  1922. EXPORT_SYMBOL(pci_pci_problems);
  1923. /* Pool allocator */
  1924. EXPORT_SYMBOL (pci_pool_create);
  1925. EXPORT_SYMBOL (pci_pool_destroy);
  1926. EXPORT_SYMBOL (pci_pool_alloc);
  1927. EXPORT_SYMBOL (pci_pool_free);