|
@@ -111,7 +111,7 @@ enum {
|
|
PCI_NUM_RESOURCES,
|
|
PCI_NUM_RESOURCES,
|
|
|
|
|
|
/* preserve this for compatibility */
|
|
/* preserve this for compatibility */
|
|
- DEVICE_COUNT_RESOURCE
|
|
|
|
|
|
+ DEVICE_COUNT_RESOURCE = PCI_NUM_RESOURCES,
|
|
};
|
|
};
|
|
|
|
|
|
typedef int __bitwise pci_power_t;
|
|
typedef int __bitwise pci_power_t;
|
|
@@ -308,7 +308,7 @@ struct pci_dev {
|
|
unsigned int is_added:1;
|
|
unsigned int is_added:1;
|
|
unsigned int is_busmaster:1; /* device is busmaster */
|
|
unsigned int is_busmaster:1; /* device is busmaster */
|
|
unsigned int no_msi:1; /* device may not use msi */
|
|
unsigned int no_msi:1; /* device may not use msi */
|
|
- unsigned int block_ucfg_access:1; /* userspace config space access is blocked */
|
|
|
|
|
|
+ unsigned int block_cfg_access:1; /* config space access is blocked */
|
|
unsigned int broken_parity_status:1; /* Device generates false positive parity */
|
|
unsigned int broken_parity_status:1; /* Device generates false positive parity */
|
|
unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */
|
|
unsigned int irq_reroute_variant:2; /* device needs IRQ rerouting variant */
|
|
unsigned int msi_enabled:1;
|
|
unsigned int msi_enabled:1;
|
|
@@ -661,17 +661,13 @@ extern struct pci_bus *pci_find_bus(int domain, int busnr);
|
|
void pci_bus_add_devices(const struct pci_bus *bus);
|
|
void pci_bus_add_devices(const struct pci_bus *bus);
|
|
struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
|
|
struct pci_bus *pci_scan_bus_parented(struct device *parent, int bus,
|
|
struct pci_ops *ops, void *sysdata);
|
|
struct pci_ops *ops, void *sysdata);
|
|
-static inline struct pci_bus * __devinit pci_scan_bus(int bus, struct pci_ops *ops,
|
|
|
|
- void *sysdata)
|
|
|
|
-{
|
|
|
|
- struct pci_bus *root_bus;
|
|
|
|
- root_bus = pci_scan_bus_parented(NULL, bus, ops, sysdata);
|
|
|
|
- if (root_bus)
|
|
|
|
- pci_bus_add_devices(root_bus);
|
|
|
|
- return root_bus;
|
|
|
|
-}
|
|
|
|
-struct pci_bus *pci_create_bus(struct device *parent, int bus,
|
|
|
|
- struct pci_ops *ops, void *sysdata);
|
|
|
|
|
|
+struct pci_bus *pci_scan_bus(int bus, struct pci_ops *ops, void *sysdata);
|
|
|
|
+struct pci_bus *pci_create_root_bus(struct device *parent, int bus,
|
|
|
|
+ struct pci_ops *ops, void *sysdata,
|
|
|
|
+ struct list_head *resources);
|
|
|
|
+struct pci_bus * __devinit pci_scan_root_bus(struct device *parent, int bus,
|
|
|
|
+ struct pci_ops *ops, void *sysdata,
|
|
|
|
+ struct list_head *resources);
|
|
struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
|
|
struct pci_bus *pci_add_new_bus(struct pci_bus *parent, struct pci_dev *dev,
|
|
int busnr);
|
|
int busnr);
|
|
void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
|
|
void pcie_update_link_speed(struct pci_bus *bus, u16 link_status);
|
|
@@ -795,8 +791,11 @@ static inline int pci_is_managed(struct pci_dev *pdev)
|
|
}
|
|
}
|
|
|
|
|
|
void pci_disable_device(struct pci_dev *dev);
|
|
void pci_disable_device(struct pci_dev *dev);
|
|
|
|
+
|
|
|
|
+extern unsigned int pcibios_max_latency;
|
|
void pci_set_master(struct pci_dev *dev);
|
|
void pci_set_master(struct pci_dev *dev);
|
|
void pci_clear_master(struct pci_dev *dev);
|
|
void pci_clear_master(struct pci_dev *dev);
|
|
|
|
+
|
|
int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
|
|
int pci_set_pcie_reset_state(struct pci_dev *dev, enum pcie_reset_state state);
|
|
int pci_set_cacheline_size(struct pci_dev *dev);
|
|
int pci_set_cacheline_size(struct pci_dev *dev);
|
|
#define HAVE_PCI_SET_MWI
|
|
#define HAVE_PCI_SET_MWI
|
|
@@ -804,6 +803,9 @@ int __must_check pci_set_mwi(struct pci_dev *dev);
|
|
int pci_try_set_mwi(struct pci_dev *dev);
|
|
int pci_try_set_mwi(struct pci_dev *dev);
|
|
void pci_clear_mwi(struct pci_dev *dev);
|
|
void pci_clear_mwi(struct pci_dev *dev);
|
|
void pci_intx(struct pci_dev *dev, int enable);
|
|
void pci_intx(struct pci_dev *dev, int enable);
|
|
|
|
+bool pci_intx_mask_supported(struct pci_dev *dev);
|
|
|
|
+bool pci_check_and_mask_intx(struct pci_dev *dev);
|
|
|
|
+bool pci_check_and_unmask_intx(struct pci_dev *dev);
|
|
void pci_msi_off(struct pci_dev *dev);
|
|
void pci_msi_off(struct pci_dev *dev);
|
|
int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
|
|
int pci_set_dma_max_seg_size(struct pci_dev *dev, unsigned int size);
|
|
int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
|
|
int pci_set_dma_seg_boundary(struct pci_dev *dev, unsigned long mask);
|
|
@@ -911,6 +913,8 @@ int pci_request_selected_regions_exclusive(struct pci_dev *, int, const char *);
|
|
void pci_release_selected_regions(struct pci_dev *, int);
|
|
void pci_release_selected_regions(struct pci_dev *, int);
|
|
|
|
|
|
/* drivers/pci/bus.c */
|
|
/* drivers/pci/bus.c */
|
|
|
|
+void pci_add_resource(struct list_head *resources, struct resource *res);
|
|
|
|
+void pci_free_resource_list(struct list_head *resources);
|
|
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
|
|
void pci_bus_add_resource(struct pci_bus *bus, struct resource *res, unsigned int flags);
|
|
struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
|
|
struct resource *pci_bus_resource_n(const struct pci_bus *bus, int n);
|
|
void pci_bus_remove_resources(struct pci_bus *bus);
|
|
void pci_bus_remove_resources(struct pci_bus *bus);
|
|
@@ -1085,8 +1089,9 @@ int ht_create_irq(struct pci_dev *dev, int idx);
|
|
void ht_destroy_irq(unsigned int irq);
|
|
void ht_destroy_irq(unsigned int irq);
|
|
#endif /* CONFIG_HT_IRQ */
|
|
#endif /* CONFIG_HT_IRQ */
|
|
|
|
|
|
-extern void pci_block_user_cfg_access(struct pci_dev *dev);
|
|
|
|
-extern void pci_unblock_user_cfg_access(struct pci_dev *dev);
|
|
|
|
|
|
+extern void pci_cfg_access_lock(struct pci_dev *dev);
|
|
|
|
+extern bool pci_cfg_access_trylock(struct pci_dev *dev);
|
|
|
|
+extern void pci_cfg_access_unlock(struct pci_dev *dev);
|
|
|
|
|
|
/*
|
|
/*
|
|
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
|
* PCI domain support. Sometimes called PCI segment (eg by ACPI),
|
|
@@ -1283,10 +1288,13 @@ static inline void pci_release_regions(struct pci_dev *dev)
|
|
|
|
|
|
#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
|
|
#define pci_dma_burst_advice(pdev, strat, strategy_parameter) do { } while (0)
|
|
|
|
|
|
-static inline void pci_block_user_cfg_access(struct pci_dev *dev)
|
|
|
|
|
|
+static inline void pci_block_cfg_access(struct pci_dev *dev)
|
|
{ }
|
|
{ }
|
|
|
|
|
|
-static inline void pci_unblock_user_cfg_access(struct pci_dev *dev)
|
|
|
|
|
|
+static inline int pci_block_cfg_access_in_atomic(struct pci_dev *dev)
|
|
|
|
+{ return 0; }
|
|
|
|
+
|
|
|
|
+static inline void pci_unblock_cfg_access(struct pci_dev *dev)
|
|
{ }
|
|
{ }
|
|
|
|
|
|
static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
|
|
static inline struct pci_bus *pci_find_next_bus(const struct pci_bus *from)
|
|
@@ -1424,10 +1432,10 @@ static inline void pci_fixup_device(enum pci_fixup_pass pass,
|
|
void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
|
|
void __iomem *pcim_iomap(struct pci_dev *pdev, int bar, unsigned long maxlen);
|
|
void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
|
|
void pcim_iounmap(struct pci_dev *pdev, void __iomem *addr);
|
|
void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
|
|
void __iomem * const *pcim_iomap_table(struct pci_dev *pdev);
|
|
-int pcim_iomap_regions(struct pci_dev *pdev, u16 mask, const char *name);
|
|
|
|
-int pcim_iomap_regions_request_all(struct pci_dev *pdev, u16 mask,
|
|
|
|
|
|
+int pcim_iomap_regions(struct pci_dev *pdev, int mask, const char *name);
|
|
|
|
+int pcim_iomap_regions_request_all(struct pci_dev *pdev, int mask,
|
|
const char *name);
|
|
const char *name);
|
|
-void pcim_iounmap_regions(struct pci_dev *pdev, u16 mask);
|
|
|
|
|
|
+void pcim_iounmap_regions(struct pci_dev *pdev, int mask);
|
|
|
|
|
|
extern int pci_pci_problems;
|
|
extern int pci_pci_problems;
|
|
#define PCIPCI_FAIL 1 /* No PCI PCI DMA */
|
|
#define PCIPCI_FAIL 1 /* No PCI PCI DMA */
|
|
@@ -1446,8 +1454,10 @@ extern u8 pci_cache_line_size;
|
|
extern unsigned long pci_hotplug_io_size;
|
|
extern unsigned long pci_hotplug_io_size;
|
|
extern unsigned long pci_hotplug_mem_size;
|
|
extern unsigned long pci_hotplug_mem_size;
|
|
|
|
|
|
|
|
+/* Architecture specific versions may override these (weak) */
|
|
int pcibios_add_platform_entries(struct pci_dev *dev);
|
|
int pcibios_add_platform_entries(struct pci_dev *dev);
|
|
void pcibios_disable_device(struct pci_dev *dev);
|
|
void pcibios_disable_device(struct pci_dev *dev);
|
|
|
|
+void pcibios_set_master(struct pci_dev *dev);
|
|
int pcibios_set_pcie_reset_state(struct pci_dev *dev,
|
|
int pcibios_set_pcie_reset_state(struct pci_dev *dev,
|
|
enum pcie_reset_state state);
|
|
enum pcie_reset_state state);
|
|
|
|
|