aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/pci.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/pci.h')
-rw-r--r--include/linux/pci.h49
1 files changed, 29 insertions, 20 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h
index 62a8c22f5f6..5c3a4176eb6 100644
--- a/include/linux/pci.h
+++ b/include/linux/pci.h
@@ -49,6 +49,7 @@
49#include <linux/types.h> 49#include <linux/types.h>
50#include <linux/ioport.h> 50#include <linux/ioport.h>
51#include <linux/list.h> 51#include <linux/list.h>
52#include <linux/compiler.h>
52#include <linux/errno.h> 53#include <linux/errno.h>
53#include <linux/device.h> 54#include <linux/device.h>
54 55
@@ -161,6 +162,7 @@ struct pci_dev {
161 unsigned int is_enabled:1; /* pci_enable_device has been called */ 162 unsigned int is_enabled:1; /* pci_enable_device has been called */
162 unsigned int is_busmaster:1; /* device is busmaster */ 163 unsigned int is_busmaster:1; /* device is busmaster */
163 unsigned int no_msi:1; /* device may not use msi */ 164 unsigned int no_msi:1; /* device may not use msi */
165 unsigned int no_d1d2:1; /* only allow d0 or d3 */
164 unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ 166 unsigned int block_ucfg_access:1; /* userspace config space access is blocked */
165 unsigned int broken_parity_status:1; /* Device generates false positive parity */ 167 unsigned int broken_parity_status:1; /* Device generates false positive parity */
166 unsigned int msi_enabled:1; 168 unsigned int msi_enabled:1;
@@ -345,6 +347,8 @@ struct pci_driver {
345 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */ 347 int (*probe) (struct pci_dev *dev, const struct pci_device_id *id); /* New device inserted */
346 void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */ 348 void (*remove) (struct pci_dev *dev); /* Device removed (NULL if not a hot-plug capable driver) */
347 int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */ 349 int (*suspend) (struct pci_dev *dev, pm_message_t state); /* Device suspended */
350 int (*suspend_late) (struct pci_dev *dev, pm_message_t state);
351 int (*resume_early) (struct pci_dev *dev);
348 int (*resume) (struct pci_dev *dev); /* Device woken up */ 352 int (*resume) (struct pci_dev *dev); /* Device woken up */
349 int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable); /* Enable wake event */ 353 int (*enable_wake) (struct pci_dev *dev, pci_power_t state, int enable); /* Enable wake event */
350 void (*shutdown) (struct pci_dev *dev); 354 void (*shutdown) (struct pci_dev *dev);
@@ -352,6 +356,8 @@ struct pci_driver {
352 struct pci_error_handlers *err_handler; 356 struct pci_error_handlers *err_handler;
353 struct device_driver driver; 357 struct device_driver driver;
354 struct pci_dynids dynids; 358 struct pci_dynids dynids;
359
360 int multithread_probe;
355}; 361};
356 362
357#define to_pci_driver(drv) container_of(drv,struct pci_driver, driver) 363#define to_pci_driver(drv) container_of(drv,struct pci_driver, driver)
@@ -400,12 +406,12 @@ extern struct list_head pci_root_buses; /* list of all known PCI buses */
400extern struct list_head pci_devices; /* list of all devices */ 406extern struct list_head pci_devices; /* list of all devices */
401 407
402void pcibios_fixup_bus(struct pci_bus *); 408void pcibios_fixup_bus(struct pci_bus *);
403int pcibios_enable_device(struct pci_dev *, int mask); 409int __must_check pcibios_enable_device(struct pci_dev *, int mask);
404char *pcibios_setup (char *str); 410char *pcibios_setup (char *str);
405 411
406/* Used only when drivers/pci/setup.c is used */ 412/* Used only when drivers/pci/setup.c is used */
407void pcibios_align_resource(void *, struct resource *, 413void pcibios_align_resource(void *, struct resource *, resource_size_t,
408 unsigned long, unsigned long); 414 resource_size_t);
409void pcibios_update_irq(struct pci_dev *, int irq); 415void pcibios_update_irq(struct pci_dev *, int irq);
410 416
411/* Generic PCI functions used internally */ 417/* Generic PCI functions used internally */
@@ -427,7 +433,7 @@ int pci_scan_slot(struct pci_bus *bus, int devfn);
427struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); 433struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn);
428void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); 434void pci_device_add(struct pci_dev *dev, struct pci_bus *bus);
429unsigned int pci_scan_child_bus(struct pci_bus *bus); 435unsigned int pci_scan_child_bus(struct pci_bus *bus);
430void pci_bus_add_device(struct pci_dev *dev); 436int __must_check pci_bus_add_device(struct pci_dev *dev);
431void pci_read_bridge_bases(struct pci_bus *child); 437void pci_read_bridge_bases(struct pci_bus *child);
432struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); 438struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res);
433int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); 439int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge);
@@ -435,6 +441,7 @@ extern struct pci_dev *pci_dev_get(struct pci_dev *dev);
435extern void pci_dev_put(struct pci_dev *dev); 441extern void pci_dev_put(struct pci_dev *dev);
436extern void pci_remove_bus(struct pci_bus *b); 442extern void pci_remove_bus(struct pci_bus *b);
437extern void pci_remove_bus_device(struct pci_dev *dev); 443extern void pci_remove_bus_device(struct pci_dev *dev);
444extern void pci_stop_bus_device(struct pci_dev *dev);
438void pci_setup_cardbus(struct pci_bus *bus); 445void pci_setup_cardbus(struct pci_bus *bus);
439 446
440/* Generic PCI functions exported to card drivers */ 447/* Generic PCI functions exported to card drivers */
@@ -487,19 +494,19 @@ static inline int pci_write_config_dword(struct pci_dev *dev, int where, u32 val
487 return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val); 494 return pci_bus_write_config_dword (dev->bus, dev->devfn, where, val);
488} 495}
489 496
490int pci_enable_device(struct pci_dev *dev); 497int __must_check pci_enable_device(struct pci_dev *dev);
491int pci_enable_device_bars(struct pci_dev *dev, int mask); 498int __must_check pci_enable_device_bars(struct pci_dev *dev, int mask);
492void pci_disable_device(struct pci_dev *dev); 499void pci_disable_device(struct pci_dev *dev);
493void pci_set_master(struct pci_dev *dev); 500void pci_set_master(struct pci_dev *dev);
494#define HAVE_PCI_SET_MWI 501#define HAVE_PCI_SET_MWI
495int pci_set_mwi(struct pci_dev *dev); 502int __must_check pci_set_mwi(struct pci_dev *dev);
496void pci_clear_mwi(struct pci_dev *dev); 503void pci_clear_mwi(struct pci_dev *dev);
497void pci_intx(struct pci_dev *dev, int enable); 504void pci_intx(struct pci_dev *dev, int enable);
498int pci_set_dma_mask(struct pci_dev *dev, u64 mask); 505int pci_set_dma_mask(struct pci_dev *dev, u64 mask);
499int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); 506int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask);
500void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); 507void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno);
501int pci_assign_resource(struct pci_dev *dev, int i); 508int __must_check pci_assign_resource(struct pci_dev *dev, int i);
502int pci_assign_resource_fixed(struct pci_dev *dev, int i); 509int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i);
503void pci_restore_bars(struct pci_dev *dev); 510void pci_restore_bars(struct pci_dev *dev);
504 511
505/* ROM control related routines */ 512/* ROM control related routines */
@@ -525,23 +532,24 @@ void pdev_sort_resources(struct pci_dev *, struct resource_list *);
525void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), 532void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *),
526 int (*)(struct pci_dev *, u8, u8)); 533 int (*)(struct pci_dev *, u8, u8));
527#define HAVE_PCI_REQ_REGIONS 2 534#define HAVE_PCI_REQ_REGIONS 2
528int pci_request_regions(struct pci_dev *, const char *); 535int __must_check pci_request_regions(struct pci_dev *, const char *);
529void pci_release_regions(struct pci_dev *); 536void pci_release_regions(struct pci_dev *);
530int pci_request_region(struct pci_dev *, int, const char *); 537int __must_check pci_request_region(struct pci_dev *, int, const char *);
531void pci_release_region(struct pci_dev *, int); 538void pci_release_region(struct pci_dev *, int);
532 539
533/* drivers/pci/bus.c */ 540/* drivers/pci/bus.c */
534int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, 541int __must_check pci_bus_alloc_resource(struct pci_bus *bus,
535 unsigned long size, unsigned long align, 542 struct resource *res, resource_size_t size,
536 unsigned long min, unsigned int type_mask, 543 resource_size_t align, resource_size_t min,
537 void (*alignf)(void *, struct resource *, 544 unsigned int type_mask,
538 unsigned long, unsigned long), 545 void (*alignf)(void *, struct resource *,
539 void *alignf_data); 546 resource_size_t, resource_size_t),
547 void *alignf_data);
540void pci_enable_bridges(struct pci_bus *bus); 548void pci_enable_bridges(struct pci_bus *bus);
541 549
542/* Proper probing supporting hot-pluggable devices */ 550/* Proper probing supporting hot-pluggable devices */
543int __pci_register_driver(struct pci_driver *, struct module *); 551int __must_check __pci_register_driver(struct pci_driver *, struct module *);
544static inline int pci_register_driver(struct pci_driver *driver) 552static inline int __must_check pci_register_driver(struct pci_driver *driver)
545{ 553{
546 return __pci_register_driver(driver, THIS_MODULE); 554 return __pci_register_driver(driver, THIS_MODULE);
547} 555}
@@ -730,7 +738,8 @@ static inline char *pci_name(struct pci_dev *pdev)
730 */ 738 */
731#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER 739#ifndef HAVE_ARCH_PCI_RESOURCE_TO_USER
732static inline void pci_resource_to_user(const struct pci_dev *dev, int bar, 740static inline void pci_resource_to_user(const struct pci_dev *dev, int bar,
733 const struct resource *rsrc, u64 *start, u64 *end) 741 const struct resource *rsrc, resource_size_t *start,
742 resource_size_t *end)
734{ 743{
735 *start = rsrc->start; 744 *start = rsrc->start;
736 *end = rsrc->end; 745 *end = rsrc->end;