diff options
author | David S. Miller <davem@davemloft.net> | 2010-02-28 22:23:06 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-02-28 22:23:06 -0500 |
commit | 47871889c601d8199c51a4086f77eebd77c29b0b (patch) | |
tree | 40cdcac3bff0ee40cc33dcca61d0577cdf965f77 /include/linux/pci.h | |
parent | c16cc0b464b8876cfd57ce1c1dbcb6f9a6a0bce3 (diff) | |
parent | 30ff056c42c665b9ea535d8515890857ae382540 (diff) |
Merge branch 'master' of /home/davem/src/GIT/linux-2.6/
Conflicts:
drivers/firmware/iscsi_ibft.c
Diffstat (limited to 'include/linux/pci.h')
-rw-r--r-- | include/linux/pci.h | 114 |
1 files changed, 90 insertions, 24 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index 1f4a52131c99..ec95ebe629f1 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -187,6 +187,33 @@ enum pci_bus_flags { | |||
187 | PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2, | 187 | PCI_BUS_FLAGS_NO_MMRBC = (__force pci_bus_flags_t) 2, |
188 | }; | 188 | }; |
189 | 189 | ||
190 | /* Based on the PCI Hotplug Spec, but some values are made up by us */ | ||
191 | enum pci_bus_speed { | ||
192 | PCI_SPEED_33MHz = 0x00, | ||
193 | PCI_SPEED_66MHz = 0x01, | ||
194 | PCI_SPEED_66MHz_PCIX = 0x02, | ||
195 | PCI_SPEED_100MHz_PCIX = 0x03, | ||
196 | PCI_SPEED_133MHz_PCIX = 0x04, | ||
197 | PCI_SPEED_66MHz_PCIX_ECC = 0x05, | ||
198 | PCI_SPEED_100MHz_PCIX_ECC = 0x06, | ||
199 | PCI_SPEED_133MHz_PCIX_ECC = 0x07, | ||
200 | PCI_SPEED_66MHz_PCIX_266 = 0x09, | ||
201 | PCI_SPEED_100MHz_PCIX_266 = 0x0a, | ||
202 | PCI_SPEED_133MHz_PCIX_266 = 0x0b, | ||
203 | AGP_UNKNOWN = 0x0c, | ||
204 | AGP_1X = 0x0d, | ||
205 | AGP_2X = 0x0e, | ||
206 | AGP_4X = 0x0f, | ||
207 | AGP_8X = 0x10, | ||
208 | PCI_SPEED_66MHz_PCIX_533 = 0x11, | ||
209 | PCI_SPEED_100MHz_PCIX_533 = 0x12, | ||
210 | PCI_SPEED_133MHz_PCIX_533 = 0x13, | ||
211 | PCIE_SPEED_2_5GT = 0x14, | ||
212 | PCIE_SPEED_5_0GT = 0x15, | ||
213 | PCIE_SPEED_8_0GT = 0x16, | ||
214 | PCI_SPEED_UNKNOWN = 0xff, | ||
215 | }; | ||
216 | |||
190 | struct pci_cap_saved_state { | 217 | struct pci_cap_saved_state { |
191 | struct hlist_node next; | 218 | struct hlist_node next; |
192 | char cap_nr; | 219 | char cap_nr; |
@@ -239,6 +266,7 @@ struct pci_dev { | |||
239 | configuration space */ | 266 | configuration space */ |
240 | unsigned int pme_support:5; /* Bitmask of states from which PME# | 267 | unsigned int pme_support:5; /* Bitmask of states from which PME# |
241 | can be generated */ | 268 | can be generated */ |
269 | unsigned int pme_interrupt:1; | ||
242 | unsigned int d1_support:1; /* Low power state D1 is supported */ | 270 | unsigned int d1_support:1; /* Low power state D1 is supported */ |
243 | unsigned int d2_support:1; /* Low power state D2 is supported */ | 271 | unsigned int d2_support:1; /* Low power state D2 is supported */ |
244 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ | 272 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ |
@@ -275,7 +303,8 @@ struct pci_dev { | |||
275 | unsigned int msix_enabled:1; | 303 | unsigned int msix_enabled:1; |
276 | unsigned int ari_enabled:1; /* ARI forwarding */ | 304 | unsigned int ari_enabled:1; /* ARI forwarding */ |
277 | unsigned int is_managed:1; | 305 | unsigned int is_managed:1; |
278 | unsigned int is_pcie:1; | 306 | unsigned int is_pcie:1; /* Obsolete. Will be removed. |
307 | Use pci_is_pcie() instead */ | ||
279 | unsigned int needs_freset:1; /* Dev requires fundamental reset */ | 308 | unsigned int needs_freset:1; /* Dev requires fundamental reset */ |
280 | unsigned int state_saved:1; | 309 | unsigned int state_saved:1; |
281 | unsigned int is_physfn:1; | 310 | unsigned int is_physfn:1; |
@@ -335,9 +364,26 @@ static inline void pci_add_saved_cap(struct pci_dev *pci_dev, | |||
335 | hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space); | 364 | hlist_add_head(&new_cap->next, &pci_dev->saved_cap_space); |
336 | } | 365 | } |
337 | 366 | ||
338 | #ifndef PCI_BUS_NUM_RESOURCES | 367 | /* |
339 | #define PCI_BUS_NUM_RESOURCES 16 | 368 | * The first PCI_BRIDGE_RESOURCE_NUM PCI bus resources (those that correspond |
340 | #endif | 369 | * to P2P or CardBus bridge windows) go in a table. Additional ones (for |
370 | * buses below host bridges or subtractive decode bridges) go in the list. | ||
371 | * Use pci_bus_for_each_resource() to iterate through all the resources. | ||
372 | */ | ||
373 | |||
374 | /* | ||
375 | * PCI_SUBTRACTIVE_DECODE means the bridge forwards the window implicitly | ||
376 | * and there's no way to program the bridge with the details of the window. | ||
377 | * This does not apply to ACPI _CRS windows, even with the _DEC subtractive- | ||
378 | * decode bit set, because they are explicit and can be programmed with _SRS. | ||
379 | */ | ||
380 | #define PCI_SUBTRACTIVE_DECODE 0x1 | ||
381 | |||
382 | struct pci_bus_resource { | ||
383 | struct list_head list; | ||
384 | struct resource *res; | ||
385 | unsigned int flags; | ||
386 | }; | ||
341 | 387 | ||
342 | #define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ | 388 | #define PCI_REGION_FLAG_MASK 0x0fU /* These bits of resource flags tell us the PCI region flags */ |
343 | 389 | ||
@@ -348,8 +394,8 @@ struct pci_bus { | |||
348 | struct list_head devices; /* list of devices on this bus */ | 394 | struct list_head devices; /* list of devices on this bus */ |
349 | struct pci_dev *self; /* bridge device as seen by parent */ | 395 | struct pci_dev *self; /* bridge device as seen by parent */ |
350 | struct list_head slots; /* list of slots on this bus */ | 396 | struct list_head slots; /* list of slots on this bus */ |
351 | struct resource *resource[PCI_BUS_NUM_RESOURCES]; | 397 | struct resource *resource[PCI_BRIDGE_RESOURCE_NUM]; |
352 | /* address space routed to this bus */ | 398 | struct list_head resources; /* address space routed to this bus */ |
353 | 399 | ||
354 | struct pci_ops *ops; /* configuration access functions */ | 400 | struct pci_ops *ops; /* configuration access functions */ |
355 | void *sysdata; /* hook for sys-specific extension */ | 401 | void *sysdata; /* hook for sys-specific extension */ |
@@ -359,6 +405,8 @@ struct pci_bus { | |||
359 | unsigned char primary; /* number of primary bridge */ | 405 | unsigned char primary; /* number of primary bridge */ |
360 | unsigned char secondary; /* number of secondary bridge */ | 406 | unsigned char secondary; /* number of secondary bridge */ |
361 | unsigned char subordinate; /* max number of subordinate buses */ | 407 | unsigned char subordinate; /* max number of subordinate buses */ |
408 | unsigned char max_bus_speed; /* enum pci_bus_speed */ | ||
409 | unsigned char cur_bus_speed; /* enum pci_bus_speed */ | ||
362 | 410 | ||
363 | char name[48]; | 411 | char name[48]; |
364 | 412 | ||
@@ -563,7 +611,8 @@ int __must_check pcibios_enable_device(struct pci_dev *, int mask); | |||
563 | char *pcibios_setup(char *str); | 611 | char *pcibios_setup(char *str); |
564 | 612 | ||
565 | /* Used only when drivers/pci/setup.c is used */ | 613 | /* Used only when drivers/pci/setup.c is used */ |
566 | void pcibios_align_resource(void *, struct resource *, resource_size_t, | 614 | resource_size_t pcibios_align_resource(void *, const struct resource *, |
615 | resource_size_t, | ||
567 | resource_size_t); | 616 | resource_size_t); |
568 | void pcibios_update_irq(struct pci_dev *, int irq); | 617 | void pcibios_update_irq(struct pci_dev *, int irq); |
569 | 618 | ||
@@ -589,6 +638,7 @@ struct pci_bus *pci_create_bus(struct device *parent, int bus, | |||
589 | struct pci_ops *ops, void *sysdata); | 638 | struct pci_ops *ops, void *sysdata); |
590 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, | 639 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, |
591 | int busnr); | 640 | int busnr); |
641 | void pcie_update_link_speed(struct pci_bus *bus, u16 link_status); | ||
592 | struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, | 642 | struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, |
593 | const char *name, | 643 | const char *name, |
594 | struct hotplug_slot *hotplug); | 644 | struct hotplug_slot *hotplug); |
@@ -618,12 +668,6 @@ extern void pci_sort_breadthfirst(void); | |||
618 | 668 | ||
619 | /* Generic PCI functions exported to card drivers */ | 669 | /* Generic PCI functions exported to card drivers */ |
620 | 670 | ||
621 | #ifdef CONFIG_PCI_LEGACY | ||
622 | struct pci_dev __deprecated *pci_find_device(unsigned int vendor, | ||
623 | unsigned int device, | ||
624 | struct pci_dev *from); | ||
625 | #endif /* CONFIG_PCI_LEGACY */ | ||
626 | |||
627 | enum pci_lost_interrupt_reason { | 671 | enum pci_lost_interrupt_reason { |
628 | PCI_LOST_IRQ_NO_INFORMATION = 0, | 672 | PCI_LOST_IRQ_NO_INFORMATION = 0, |
629 | PCI_LOST_IRQ_DISABLE_MSI, | 673 | PCI_LOST_IRQ_DISABLE_MSI, |
@@ -753,11 +797,19 @@ int pci_set_power_state(struct pci_dev *dev, pci_power_t state); | |||
753 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); | 797 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); |
754 | bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); | 798 | bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); |
755 | void pci_pme_active(struct pci_dev *dev, bool enable); | 799 | void pci_pme_active(struct pci_dev *dev, bool enable); |
756 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable); | 800 | int __pci_enable_wake(struct pci_dev *dev, pci_power_t state, |
801 | bool runtime, bool enable); | ||
757 | int pci_wake_from_d3(struct pci_dev *dev, bool enable); | 802 | int pci_wake_from_d3(struct pci_dev *dev, bool enable); |
758 | pci_power_t pci_target_state(struct pci_dev *dev); | 803 | pci_power_t pci_target_state(struct pci_dev *dev); |
759 | int pci_prepare_to_sleep(struct pci_dev *dev); | 804 | int pci_prepare_to_sleep(struct pci_dev *dev); |
760 | int pci_back_from_sleep(struct pci_dev *dev); | 805 | int pci_back_from_sleep(struct pci_dev *dev); |
806 | bool pci_dev_run_wake(struct pci_dev *dev); | ||
807 | |||
808 | static inline int pci_enable_wake(struct pci_dev *dev, pci_power_t state, | ||
809 | bool enable) | ||
810 | { | ||
811 | return __pci_enable_wake(dev, state, false, enable); | ||
812 | } | ||
761 | 813 | ||
762 | /* For use by arch with custom probe code */ | 814 | /* For use by arch with custom probe code */ |
763 | void set_pcie_port_type(struct pci_dev *pdev); | 815 | void set_pcie_port_type(struct pci_dev *pdev); |
@@ -779,6 +831,7 @@ void pci_bus_assign_resources(const struct pci_bus *bus); | |||
779 | void pci_bus_size_bridges(struct pci_bus *bus); | 831 | void pci_bus_size_bridges(struct pci_bus *bus); |
780 | int pci_claim_resource(struct pci_dev *, int); | 832 | int pci_claim_resource(struct pci_dev *, int); |
781 | void pci_assign_unassigned_resources(void); | 833 | void pci_assign_unassigned_resources(void); |
834 | void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge); | ||
782 | void pdev_enable_device(struct pci_dev *); | 835 | void pdev_enable_device(struct pci_dev *); |
783 | void pdev_sort_resources(struct pci_dev *, struct resource_list *); | 836 | void pdev_sort_resources(struct pci_dev *, struct resource_list *); |
784 | int pci_enable_resources(struct pci_dev *, int mask); | 837 | int pci_enable_resources(struct pci_dev *, int mask); |
@@ -796,12 +849,23 @@ int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *); | |||
796 | void pci_release_selected_regions(struct pci_dev *, int); | 849 | void pci_release_selected_regions(struct pci_dev *, int); |
797 | 850 | ||
798 | /* drivers/pci/bus.c */ | 851 | /* drivers/pci/bus.c */ |
852 | void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags); | ||
853 | struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n); | ||
854 | void pci_bus_remove_resources(struct pci_bus *bus); | ||
855 | |||
856 | #define pci_bus_for_each_resource(bus, res, i) \ | ||
857 | for (i = 0; \ | ||
858 | (res = pci_bus_resource_n(bus, i)) || i < PCI_BRIDGE_RESOURCE_NUM; \ | ||
859 | i++) | ||
860 | |||
799 | int __must_check pci_bus_alloc_resource(struct pci_bus *bus, | 861 | int __must_check pci_bus_alloc_resource(struct pci_bus *bus, |
800 | struct resource *res, resource_size_t size, | 862 | struct resource *res, resource_size_t size, |
801 | resource_size_t align, resource_size_t min, | 863 | resource_size_t align, resource_size_t min, |
802 | unsigned int type_mask, | 864 | unsigned int type_mask, |
803 | void (*alignf)(void *, struct resource *, | 865 | resource_size_t (*alignf)(void *, |
804 | resource_size_t, resource_size_t), | 866 | const struct resource *, |
867 | resource_size_t, | ||
868 | resource_size_t), | ||
805 | void *alignf_data); | 869 | void *alignf_data); |
806 | void pci_enable_bridges(struct pci_bus *bus); | 870 | void pci_enable_bridges(struct pci_bus *bus); |
807 | 871 | ||
@@ -962,6 +1026,11 @@ static inline int pci_proc_domain(struct pci_bus *bus) | |||
962 | } | 1026 | } |
963 | #endif /* CONFIG_PCI_DOMAINS */ | 1027 | #endif /* CONFIG_PCI_DOMAINS */ |
964 | 1028 | ||
1029 | /* some architectures require additional setup to direct VGA traffic */ | ||
1030 | typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode, | ||
1031 | unsigned int command_bits, bool change_bridge); | ||
1032 | extern void pci_register_set_vga_state(arch_set_vga_state_t func); | ||
1033 | |||
965 | #else /* CONFIG_PCI is not enabled */ | 1034 | #else /* CONFIG_PCI is not enabled */ |
966 | 1035 | ||
967 | /* | 1036 | /* |
@@ -980,13 +1049,6 @@ static inline int pci_proc_domain(struct pci_bus *bus) | |||
980 | _PCI_NOP_ALL(read, *) | 1049 | _PCI_NOP_ALL(read, *) |
981 | _PCI_NOP_ALL(write,) | 1050 | _PCI_NOP_ALL(write,) |
982 | 1051 | ||
983 | static inline struct pci_dev *pci_find_device(unsigned int vendor, | ||
984 | unsigned int device, | ||
985 | struct pci_dev *from) | ||
986 | { | ||
987 | return NULL; | ||
988 | } | ||
989 | |||
990 | static inline struct pci_dev *pci_get_device(unsigned int vendor, | 1052 | static inline struct pci_dev *pci_get_device(unsigned int vendor, |
991 | unsigned int device, | 1053 | unsigned int device, |
992 | struct pci_dev *from) | 1054 | struct pci_dev *from) |
@@ -1247,8 +1309,12 @@ enum pci_fixup_pass { | |||
1247 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ | 1309 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ |
1248 | suspend##vendor##device##hook, vendor, device, hook) | 1310 | suspend##vendor##device##hook, vendor, device, hook) |
1249 | 1311 | ||
1250 | 1312 | #ifdef CONFIG_PCI_QUIRKS | |
1251 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); | 1313 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); |
1314 | #else | ||
1315 | static inline void pci_fixup_device(enum pci_fixup_pass pass, | ||
1316 | struct pci_dev *dev) {} | ||
1317 | #endif | ||
1252 | 1318 | ||
1253 | void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); | 1319 | void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); |
1254 | void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); | 1320 | void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); |