diff options
Diffstat (limited to 'include/linux/pci.h')
-rw-r--r-- | include/linux/pci.h | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/include/linux/pci.h b/include/linux/pci.h index d18b1dd49fab..a6a088e1a804 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h | |||
@@ -17,8 +17,7 @@ | |||
17 | #ifndef LINUX_PCI_H | 17 | #ifndef LINUX_PCI_H |
18 | #define LINUX_PCI_H | 18 | #define LINUX_PCI_H |
19 | 19 | ||
20 | /* Include the pci register defines */ | 20 | #include <linux/pci_regs.h> /* The pci register defines */ |
21 | #include <linux/pci_regs.h> | ||
22 | 21 | ||
23 | /* | 22 | /* |
24 | * The PCI interface treats multi-function devices as independent | 23 | * The PCI interface treats multi-function devices as independent |
@@ -49,12 +48,22 @@ | |||
49 | #include <linux/list.h> | 48 | #include <linux/list.h> |
50 | #include <linux/compiler.h> | 49 | #include <linux/compiler.h> |
51 | #include <linux/errno.h> | 50 | #include <linux/errno.h> |
51 | #include <linux/kobject.h> | ||
52 | #include <asm/atomic.h> | 52 | #include <asm/atomic.h> |
53 | #include <linux/device.h> | 53 | #include <linux/device.h> |
54 | 54 | ||
55 | /* Include the ID list */ | 55 | /* Include the ID list */ |
56 | #include <linux/pci_ids.h> | 56 | #include <linux/pci_ids.h> |
57 | 57 | ||
58 | /* pci_slot represents a physical slot */ | ||
59 | struct pci_slot { | ||
60 | struct pci_bus *bus; /* The bus this slot is on */ | ||
61 | struct list_head list; /* node in list of slots on this bus */ | ||
62 | struct hotplug_slot *hotplug; /* Hotplug info (migrate over time) */ | ||
63 | unsigned char number; /* PCI_SLOT(pci_dev->devfn) */ | ||
64 | struct kobject kobj; | ||
65 | }; | ||
66 | |||
58 | /* File state for mmap()s on /proc/bus/pci/X/Y */ | 67 | /* File state for mmap()s on /proc/bus/pci/X/Y */ |
59 | enum pci_mmap_state { | 68 | enum pci_mmap_state { |
60 | pci_mmap_io, | 69 | pci_mmap_io, |
@@ -142,6 +151,7 @@ struct pci_dev { | |||
142 | 151 | ||
143 | void *sysdata; /* hook for sys-specific extension */ | 152 | void *sysdata; /* hook for sys-specific extension */ |
144 | struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ | 153 | struct proc_dir_entry *procent; /* device entry in /proc/bus/pci */ |
154 | struct pci_slot *slot; /* Physical slot this device is in */ | ||
145 | 155 | ||
146 | unsigned int devfn; /* encoded device & function index */ | 156 | unsigned int devfn; /* encoded device & function index */ |
147 | unsigned short vendor; | 157 | unsigned short vendor; |
@@ -167,6 +177,13 @@ struct pci_dev { | |||
167 | pci_power_t current_state; /* Current operating state. In ACPI-speak, | 177 | pci_power_t current_state; /* Current operating state. In ACPI-speak, |
168 | this is D0-D3, D0 being fully functional, | 178 | this is D0-D3, D0 being fully functional, |
169 | and D3 being off. */ | 179 | and D3 being off. */ |
180 | int pm_cap; /* PM capability offset in the | ||
181 | configuration space */ | ||
182 | unsigned int pme_support:5; /* Bitmask of states from which PME# | ||
183 | can be generated */ | ||
184 | unsigned int d1_support:1; /* Low power state D1 is supported */ | ||
185 | unsigned int d2_support:1; /* Low power state D2 is supported */ | ||
186 | unsigned int no_d1d2:1; /* Only allow D0 and D3 */ | ||
170 | 187 | ||
171 | #ifdef CONFIG_PCIEASPM | 188 | #ifdef CONFIG_PCIEASPM |
172 | struct pcie_link_state *link_state; /* ASPM link state. */ | 189 | struct pcie_link_state *link_state; /* ASPM link state. */ |
@@ -191,7 +208,6 @@ struct pci_dev { | |||
191 | unsigned int is_added:1; | 208 | unsigned int is_added:1; |
192 | unsigned int is_busmaster:1; /* device is busmaster */ | 209 | unsigned int is_busmaster:1; /* device is busmaster */ |
193 | unsigned int no_msi:1; /* device may not use msi */ | 210 | unsigned int no_msi:1; /* device may not use msi */ |
194 | unsigned int no_d1d2:1; /* only allow d0 or d3 */ | ||
195 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ | 211 | unsigned int block_ucfg_access:1; /* userspace config space access is blocked */ |
196 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ | 212 | unsigned int broken_parity_status:1; /* Device generates false positive parity */ |
197 | unsigned int msi_enabled:1; | 213 | unsigned int msi_enabled:1; |
@@ -267,6 +283,7 @@ struct pci_bus { | |||
267 | struct list_head children; /* list of child buses */ | 283 | struct list_head children; /* list of child buses */ |
268 | struct list_head devices; /* list of devices on this bus */ | 284 | struct list_head devices; /* list of devices on this bus */ |
269 | struct pci_dev *self; /* bridge device as seen by parent */ | 285 | struct pci_dev *self; /* bridge device as seen by parent */ |
286 | struct list_head slots; /* list of slots on this bus */ | ||
270 | struct resource *resource[PCI_BUS_NUM_RESOURCES]; | 287 | struct resource *resource[PCI_BUS_NUM_RESOURCES]; |
271 | /* address space routed to this bus */ | 288 | /* address space routed to this bus */ |
272 | 289 | ||
@@ -328,7 +345,7 @@ struct pci_bus_region { | |||
328 | struct pci_dynids { | 345 | struct pci_dynids { |
329 | spinlock_t lock; /* protects list, index */ | 346 | spinlock_t lock; /* protects list, index */ |
330 | struct list_head list; /* for IDs added at runtime */ | 347 | struct list_head list; /* for IDs added at runtime */ |
331 | unsigned int use_driver_data:1; /* pci_driver->driver_data is used */ | 348 | unsigned int use_driver_data:1; /* pci_device_id->driver_data is used */ |
332 | }; | 349 | }; |
333 | 350 | ||
334 | /* ---------------------------------------------------------------- */ | 351 | /* ---------------------------------------------------------------- */ |
@@ -390,7 +407,7 @@ struct pci_driver { | |||
390 | int (*resume_early) (struct pci_dev *dev); | 407 | int (*resume_early) (struct pci_dev *dev); |
391 | int (*resume) (struct pci_dev *dev); /* Device woken up */ | 408 | int (*resume) (struct pci_dev *dev); /* Device woken up */ |
392 | void (*shutdown) (struct pci_dev *dev); | 409 | void (*shutdown) (struct pci_dev *dev); |
393 | 410 | struct pm_ext_ops *pm; | |
394 | struct pci_error_handlers *err_handler; | 411 | struct pci_error_handlers *err_handler; |
395 | struct device_driver driver; | 412 | struct device_driver driver; |
396 | struct pci_dynids dynids; | 413 | struct pci_dynids dynids; |
@@ -489,6 +506,10 @@ struct pci_bus *pci_create_bus(struct device *parent, int bus, | |||
489 | struct pci_ops *ops, void *sysdata); | 506 | struct pci_ops *ops, void *sysdata); |
490 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, | 507 | struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev, |
491 | int busnr); | 508 | int busnr); |
509 | struct pci_slot *pci_create_slot(struct pci_bus *parent, int slot_nr, | ||
510 | const char *name); | ||
511 | void pci_destroy_slot(struct pci_slot *slot); | ||
512 | void pci_update_slot_number(struct pci_slot *slot, int slot_nr); | ||
492 | int pci_scan_slot(struct pci_bus *bus, int devfn); | 513 | int pci_scan_slot(struct pci_bus *bus, int devfn); |
493 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); | 514 | struct pci_dev *pci_scan_single_device(struct pci_bus *bus, int devfn); |
494 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); | 515 | void pci_device_add(struct pci_dev *dev, struct pci_bus *bus); |
@@ -618,6 +639,8 @@ int pci_restore_state(struct pci_dev *dev); | |||
618 | int pci_set_power_state(struct pci_dev *dev, pci_power_t state); | 639 | int pci_set_power_state(struct pci_dev *dev, pci_power_t state); |
619 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); | 640 | pci_power_t pci_choose_state(struct pci_dev *dev, pm_message_t state); |
620 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); | 641 | int pci_enable_wake(struct pci_dev *dev, pci_power_t state, int enable); |
642 | int pci_prepare_to_sleep(struct pci_dev *dev); | ||
643 | int pci_back_from_sleep(struct pci_dev *dev); | ||
621 | 644 | ||
622 | /* Functions for PCI Hotplug drivers to use */ | 645 | /* Functions for PCI Hotplug drivers to use */ |
623 | int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); | 646 | int pci_bus_find_capability(struct pci_bus *bus, unsigned int devfn, int cap); |
@@ -839,6 +862,11 @@ static inline int pci_set_dma_mask(struct pci_dev *dev, u64 mask) | |||
839 | return -EIO; | 862 | return -EIO; |
840 | } | 863 | } |
841 | 864 | ||
865 | static inline int pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask) | ||
866 | { | ||
867 | return -EIO; | ||
868 | } | ||
869 | |||
842 | static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, | 870 | static inline int pci_set_dma_max_seg_size(struct pci_dev *dev, |
843 | unsigned int size) | 871 | unsigned int size) |
844 | { | 872 | { |
@@ -977,9 +1005,9 @@ static inline void pci_set_drvdata(struct pci_dev *pdev, void *data) | |||
977 | /* If you want to know what to call your pci_dev, ask this function. | 1005 | /* If you want to know what to call your pci_dev, ask this function. |
978 | * Again, it's a wrapper around the generic device. | 1006 | * Again, it's a wrapper around the generic device. |
979 | */ | 1007 | */ |
980 | static inline char *pci_name(struct pci_dev *pdev) | 1008 | static inline const char *pci_name(struct pci_dev *pdev) |
981 | { | 1009 | { |
982 | return pdev->dev.bus_id; | 1010 | return dev_name(&pdev->dev); |
983 | } | 1011 | } |
984 | 1012 | ||
985 | 1013 | ||
@@ -1014,7 +1042,9 @@ enum pci_fixup_pass { | |||
1014 | pci_fixup_header, /* After reading configuration header */ | 1042 | pci_fixup_header, /* After reading configuration header */ |
1015 | pci_fixup_final, /* Final phase of device fixups */ | 1043 | pci_fixup_final, /* Final phase of device fixups */ |
1016 | pci_fixup_enable, /* pci_enable_device() time */ | 1044 | pci_fixup_enable, /* pci_enable_device() time */ |
1017 | pci_fixup_resume, /* pci_enable_device() time */ | 1045 | pci_fixup_resume, /* pci_device_resume() */ |
1046 | pci_fixup_suspend, /* pci_device_suspend */ | ||
1047 | pci_fixup_resume_early, /* pci_device_resume_early() */ | ||
1018 | }; | 1048 | }; |
1019 | 1049 | ||
1020 | /* Anonymous variables would be nice... */ | 1050 | /* Anonymous variables would be nice... */ |
@@ -1036,6 +1066,12 @@ enum pci_fixup_pass { | |||
1036 | #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ | 1066 | #define DECLARE_PCI_FIXUP_RESUME(vendor, device, hook) \ |
1037 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ | 1067 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume, \ |
1038 | resume##vendor##device##hook, vendor, device, hook) | 1068 | resume##vendor##device##hook, vendor, device, hook) |
1069 | #define DECLARE_PCI_FIXUP_RESUME_EARLY(vendor, device, hook) \ | ||
1070 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_resume_early, \ | ||
1071 | resume_early##vendor##device##hook, vendor, device, hook) | ||
1072 | #define DECLARE_PCI_FIXUP_SUSPEND(vendor, device, hook) \ | ||
1073 | DECLARE_PCI_FIXUP_SECTION(.pci_fixup_suspend, \ | ||
1074 | suspend##vendor##device##hook, vendor, device, hook) | ||
1039 | 1075 | ||
1040 | 1076 | ||
1041 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); | 1077 | void pci_fixup_device(enum pci_fixup_pass pass, struct pci_dev *dev); |
@@ -1060,7 +1096,10 @@ extern int pci_pci_problems; | |||
1060 | extern unsigned long pci_cardbus_io_size; | 1096 | extern unsigned long pci_cardbus_io_size; |
1061 | extern unsigned long pci_cardbus_mem_size; | 1097 | extern unsigned long pci_cardbus_mem_size; |
1062 | 1098 | ||
1063 | extern int pcibios_add_platform_entries(struct pci_dev *dev); | 1099 | int pcibios_add_platform_entries(struct pci_dev *dev); |
1100 | void pcibios_disable_device(struct pci_dev *dev); | ||
1101 | int pcibios_set_pcie_reset_state(struct pci_dev *dev, | ||
1102 | enum pcie_reset_state state); | ||
1064 | 1103 | ||
1065 | #ifdef CONFIG_PCI_MMCONFIG | 1104 | #ifdef CONFIG_PCI_MMCONFIG |
1066 | extern void __init pci_mmcfg_early_init(void); | 1105 | extern void __init pci_mmcfg_early_init(void); |