diff options
Diffstat (limited to 'include/linux/pci.h')
| -rw-r--r-- | include/linux/pci.h | 49 |
1 files changed, 29 insertions, 20 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index 62a8c22f5f60..5c3a4176eb64 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 */ | |||
| 400 | extern struct list_head pci_devices; /* list of all devices */ | 406 | extern struct list_head pci_devices; /* list of all devices */ |
| 401 | 407 | ||
| 402 | void pcibios_fixup_bus(struct pci_bus *); | 408 | void pcibios_fixup_bus(struct pci_bus *); |
| 403 | int pcibios_enable_device(struct pci_dev *, int mask); | 409 | int __must_check pcibios_enable_device(struct pci_dev *, int mask); |
| 404 | char *pcibios_setup (char *str); | 410 | char *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 */ |
| 407 | void pcibios_align_resource(void *, struct resource *, | 413 | void pcibios_align_resource(void *, struct resource *, resource_size_t, |
| 408 | unsigned long, unsigned long); | 414 | resource_size_t); |
| 409 | void pcibios_update_irq(struct pci_dev *, int irq); | 415 | void 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); | |||
| 427 | struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); | 433 | struct pci_dev * pci_scan_single_device(struct pci_bus *bus, int devfn); |
| 428 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); | 434 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); |
| 429 | unsigned int pci_scan_child_bus(struct pci_bus *bus); | 435 | unsigned int pci_scan_child_bus(struct pci_bus *bus); |
| 430 | void pci_bus_add_device(struct pci_dev *dev); | 436 | int __must_check pci_bus_add_device(struct pci_dev *dev); |
| 431 | void pci_read_bridge_bases(struct pci_bus *child); | 437 | void pci_read_bridge_bases(struct pci_bus *child); |
| 432 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); | 438 | struct resource *pci_find_parent_resource(const struct pci_dev *dev, struct resource *res); |
| 433 | int pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge); | 439 | int 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); | |||
| 435 | extern void pci_dev_put(struct pci_dev *dev); | 441 | extern void pci_dev_put(struct pci_dev *dev); |
| 436 | extern void pci_remove_bus(struct pci_bus *b); | 442 | extern void pci_remove_bus(struct pci_bus *b); |
| 437 | extern void pci_remove_bus_device(struct pci_dev *dev); | 443 | extern void pci_remove_bus_device(struct pci_dev *dev); |
| 444 | extern void pci_stop_bus_device(struct pci_dev *dev); | ||
| 438 | void pci_setup_cardbus(struct pci_bus *bus); | 445 | void 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 | ||
| 490 | int pci_enable_device(struct pci_dev *dev); | 497 | int __must_check pci_enable_device(struct pci_dev *dev); |
| 491 | int pci_enable_device_bars(struct pci_dev *dev, int mask); | 498 | int __must_check pci_enable_device_bars(struct pci_dev *dev, int mask); |
| 492 | void pci_disable_device(struct pci_dev *dev); | 499 | void pci_disable_device(struct pci_dev *dev); |
| 493 | void pci_set_master(struct pci_dev *dev); | 500 | void pci_set_master(struct pci_dev *dev); |
| 494 | #define HAVE_PCI_SET_MWI | 501 | #define HAVE_PCI_SET_MWI |
| 495 | int pci_set_mwi(struct pci_dev *dev); | 502 | int __must_check pci_set_mwi(struct pci_dev *dev); |
| 496 | void pci_clear_mwi(struct pci_dev *dev); | 503 | void pci_clear_mwi(struct pci_dev *dev); |
| 497 | void pci_intx(struct pci_dev *dev, int enable); | 504 | void pci_intx(struct pci_dev *dev, int enable); |
| 498 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); | 505 | int pci_set_dma_mask(struct pci_dev *dev, u64 mask); |
| 499 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); | 506 | int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask); |
| 500 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); | 507 | void pci_update_resource(struct pci_dev *dev, struct resource *res, int resno); |
| 501 | int pci_assign_resource(struct pci_dev *dev, int i); | 508 | int __must_check pci_assign_resource(struct pci_dev *dev, int i); |
| 502 | int pci_assign_resource_fixed(struct pci_dev *dev, int i); | 509 | int __must_check pci_assign_resource_fixed(struct pci_dev *dev, int i); |
| 503 | void pci_restore_bars(struct pci_dev *dev); | 510 | void 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 *); | |||
| 525 | void pci_fixup_irqs(u8 (*)(struct pci_dev *, u8 *), | 532 | void 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 |
| 528 | int pci_request_regions(struct pci_dev *, const char *); | 535 | int __must_check pci_request_regions(struct pci_dev *, const char *); |
| 529 | void pci_release_regions(struct pci_dev *); | 536 | void pci_release_regions(struct pci_dev *); |
| 530 | int pci_request_region(struct pci_dev *, int, const char *); | 537 | int __must_check pci_request_region(struct pci_dev *, int, const char *); |
| 531 | void pci_release_region(struct pci_dev *, int); | 538 | void pci_release_region(struct pci_dev *, int); |
| 532 | 539 | ||
| 533 | /* drivers/pci/bus.c */ | 540 | /* drivers/pci/bus.c */ |
| 534 | int pci_bus_alloc_resource(struct pci_bus *bus, struct resource *res, | 541 | int __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); | ||
| 540 | void pci_enable_bridges(struct pci_bus *bus); | 548 | void pci_enable_bridges(struct pci_bus *bus); |
| 541 | 549 | ||
| 542 | /* Proper probing supporting hot-pluggable devices */ | 550 | /* Proper probing supporting hot-pluggable devices */ |
| 543 | int __pci_register_driver(struct pci_driver *, struct module *); | 551 | int __must_check __pci_register_driver(struct pci_driver *, struct module *); |
| 544 | static inline int pci_register_driver(struct pci_driver *driver) | 552 | static 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 |
| 732 | static inline void pci_resource_to_user(const struct pci_dev *dev, int bar, | 740 | static 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; |
