aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/pci.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2010-02-28 22:23:06 -0500
committerDavid S. Miller <davem@davemloft.net>2010-02-28 22:23:06 -0500
commit47871889c601d8199c51a4086f77eebd77c29b0b (patch)
tree40cdcac3bff0ee40cc33dcca61d0577cdf965f77 /include/linux/pci.h
parentc16cc0b464b8876cfd57ce1c1dbcb6f9a6a0bce3 (diff)
parent30ff056c42c665b9ea535d8515890857ae382540 (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.h114
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 */
191enum 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
190struct pci_cap_saved_state { 217struct 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
382struct 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);
563char *pcibios_setup(char *str); 611char *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 */
566void pcibios_align_resource(void *, struct resource *, resource_size_t, 614resource_size_t pcibios_align_resource(void *, const struct resource *,
615 resource_size_t,
567 resource_size_t); 616 resource_size_t);
568void pcibios_update_irq(struct pci_dev *, int irq); 617void 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);
590struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, 639struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
591 int busnr); 640 int busnr);
641void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
592struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, 642struct 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
622struct pci_dev __deprecated *pci_find_device(unsigned int vendor,
623 unsigned int device,
624 struct pci_dev *from);
625#endif /* CONFIG_PCI_LEGACY */
626
627enum pci_lost_interrupt_reason { 671enum 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);
753pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); 797pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state);
754bool pci_pme_capable(struct pci_dev *dev, pci_power_t state); 798bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
755void pci_pme_active(struct pci_dev *dev, bool enable); 799void pci_pme_active(struct pci_dev *dev, bool enable);
756int pci_enable_wake(struct pci_dev *dev, pci_power_t state, bool enable); 800int __pci_enable_wake(struct pci_dev *dev, pci_power_t state,
801 bool runtime, bool enable);
757int pci_wake_from_d3(struct pci_dev *dev, bool enable); 802int pci_wake_from_d3(struct pci_dev *dev, bool enable);
758pci_power_t pci_target_state(struct pci_dev *dev); 803pci_power_t pci_target_state(struct pci_dev *dev);
759int pci_prepare_to_sleep(struct pci_dev *dev); 804int pci_prepare_to_sleep(struct pci_dev *dev);
760int pci_back_from_sleep(struct pci_dev *dev); 805int pci_back_from_sleep(struct pci_dev *dev);
806bool pci_dev_run_wake(struct pci_dev *dev);
807
808static 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 */
763void set_pcie_port_type(struct pci_dev *pdev); 815void set_pcie_port_type(struct pci_dev *pdev);
@@ -779,6 +831,7 @@ void pci_bus_assign_resources(const struct pci_bus *bus);
779void pci_bus_size_bridges(struct pci_bus *bus); 831void pci_bus_size_bridges(struct pci_bus *bus);
780int pci_claim_resource(struct pci_dev *, int); 832int pci_claim_resource(struct pci_dev *, int);
781void pci_assign_unassigned_resources(void); 833void pci_assign_unassigned_resources(void);
834void pci_assign_unassigned_bridge_resources(struct pci_dev *bridge);
782void pdev_enable_device(struct pci_dev *); 835void pdev_enable_device(struct pci_dev *);
783void pdev_sort_resources(struct pci_dev *, struct resource_list *); 836void pdev_sort_resources(struct pci_dev *, struct resource_list *);
784int pci_enable_resources(struct pci_dev *, int mask); 837int pci_enable_resources(struct pci_dev *, int mask);
@@ -796,12 +849,23 @@ int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
796void pci_release_selected_regions(struct pci_dev *, int); 849void pci_release_selected_regions(struct pci_dev *, int);
797 850
798/* drivers/pci/bus.c */ 851/* drivers/pci/bus.c */
852void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
853struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
854void 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
799int __must_check pci_bus_alloc_resource(struct pci_bus *bus, 861int __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);
806void pci_enable_bridges(struct pci_bus *bus); 870void 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 */
1030typedef int (*arch_set_vga_state_t)(struct pci_dev *pdev, bool decode,
1031 unsigned int command_bits, bool change_bridge);
1032extern 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
983static 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
990static inline struct pci_dev *pci_get_device(unsigned int vendor, 1052static 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
1251void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); 1313void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev);
1314#else
1315static inline void pci_fixup_device(enum pci_fixup_pass pass,
1316 struct pci_dev *dev) {}
1317#endif
1252 1318
1253void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen); 1319void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
1254void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr); 1320void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);