summaryrefslogtreecommitdiff
path: root/src/include/device/pci.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/device/pci.h')
-rw-r--r--src/include/device/pci.h19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/include/device/pci.h b/src/include/device/pci.h
index ef18cb40ee..13414a7df6 100644
--- a/src/include/device/pci.h
+++ b/src/include/device/pci.h
@@ -21,13 +21,18 @@
#include <device/pci_ops.h>
+/* Common pci operations without a standard interface */
+struct pci_operations {
+ void (*set_subsystem)(device_t dev, unsigned vendor, unsigned device);
+};
+
struct pci_driver {
struct device_operations *ops;
unsigned short vendor;
unsigned short device;
};
-#define __pci_driver __attribute__ ((unused,__section__(".rodata.pci_driver")))
+#define __pci_driver __attribute__ ((used,__section__(".rodata.pci_driver")))
/** start of compile time generated pci driver array */
extern struct pci_driver pci_drivers[];
/** end of compile time generated pci driver array */
@@ -37,7 +42,6 @@ extern struct pci_driver epci_drivers[];
struct device_operations default_pci_ops_dev;
struct device_operations default_pci_ops_bus;
-
void pci_dev_read_resources(device_t dev);
void pci_bus_read_resources(device_t dev);
void pci_dev_set_resources(device_t dev);
@@ -45,8 +49,19 @@ void pci_dev_enable_resources(device_t dev);
void pci_bus_enable_resources(device_t dev);
unsigned int pci_scan_bridge(device_t bus, unsigned int max);
unsigned int pci_scan_bus(struct bus *bus, unsigned min_devfn, unsigned max_devfn, unsigned int max);
+struct resource *pci_get_resource(struct device *dev, unsigned long index);
#define PCI_IO_BRIDGE_ALIGN 4096
#define PCI_MEM_BRIDGE_ALIGN (1024*1024)
+static inline struct pci_operations *ops_pci(device_t dev)
+{
+ struct pci_operations *pops;
+ pops = 0;
+ if (dev && dev->ops) {
+ pops = dev->ops->ops_pci;
+ }
+ return pops;
+}
+
#endif /* PCI_H */