diff options
Diffstat (limited to 'src/include/device')
-rw-r--r-- | src/include/device/device.h | 8 | ||||
-rw-r--r-- | src/include/device/path.h | 25 | ||||
-rw-r--r-- | src/include/device/pci.h | 24 |
3 files changed, 46 insertions, 11 deletions
diff --git a/src/include/device/device.h b/src/include/device/device.h index 945cdaabe3..db91fcc1ef 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -9,6 +9,7 @@ struct device; typedef struct device * device_t; struct pci_operations; +struct pci_bus_operations; struct smbus_bus_operations; /* Chip operations */ @@ -30,10 +31,11 @@ struct device_operations { void (*set_resources)(device_t dev); void (*enable_resources)(device_t dev); void (*init)(device_t dev); - unsigned int (*scan_bus)(device_t bus, unsigned int max); + unsigned int (*scan_bus)(device_t bus, unsigned int max); void (*enable)(device_t dev); - struct pci_operations *ops_pci; - struct smbus_bus_operations *ops_smbus_bus; + const struct pci_operations *ops_pci; + const struct smbus_bus_operations *ops_smbus_bus; + const struct pci_bus_operations *ops_pci_bus; }; diff --git a/src/include/device/path.h b/src/include/device/path.h index cdb98ee8a8..f55827b9c0 100644 --- a/src/include/device/path.h +++ b/src/include/device/path.h @@ -4,13 +4,14 @@ enum device_path_type { DEVICE_PATH_NONE = 0, DEVICE_PATH_ROOT, - DEVICE_PATH_DEFAULT_CPU, DEVICE_PATH_PCI, DEVICE_PATH_PNP, DEVICE_PATH_I2C, DEVICE_PATH_APIC, DEVICE_PATH_PCI_DOMAIN, DEVICE_PATH_APIC_CLUSTER, + DEVICE_PATH_CPU, + DEVICE_PATH_CPU_BUS, }; struct pci_domain_path @@ -44,16 +45,28 @@ struct apic_cluster_path unsigned cluster; }; +struct cpu_path +{ + unsigned id; +}; + +struct cpu_bus_path +{ + unsigned id; +}; + struct device_path { enum device_path_type type; union { - struct pci_path pci; - struct pnp_path pnp; - struct i2c_path i2c; - struct apic_path apic; - struct pci_domain_path pci_domain; + struct pci_path pci; + struct pnp_path pnp; + struct i2c_path i2c; + struct apic_path apic; + struct pci_domain_path pci_domain; struct apic_cluster_path apic_cluster; + struct cpu_path cpu; + struct cpu_bus_path cpu_bus; } u; }; diff --git a/src/include/device/pci.h b/src/include/device/pci.h index 228d4f6e7e..2c9797fa6c 100644 --- a/src/include/device/pci.h +++ b/src/include/device/pci.h @@ -26,6 +26,16 @@ struct pci_operations { void (*set_subsystem)(device_t dev, unsigned vendor, unsigned device); }; +/* Common pci bus operations */ +struct pci_bus_operations { + uint8_t (*read8) (struct bus *pbus, unsigned char bus, int devfn, int where); + uint16_t (*read16) (struct bus *pbus, unsigned char bus, int devfn, int where); + uint32_t (*read32) (struct bus *pbus, unsigned char bus, int devfn, int where); + void (*write8) (struct bus *pbus, unsigned char bus, int devfn, int where, uint8_t val); + void (*write16) (struct bus *pbus, unsigned char bus, int devfn, int where, uint16_t val); + void (*write32) (struct bus *pbus, unsigned char bus, int devfn, int where, uint32_t val); +}; + struct pci_driver { struct device_operations *ops; unsigned short vendor; @@ -55,9 +65,9 @@ void pci_dev_set_subsystem(device_t dev, unsigned vendor, unsigned device); #define PCI_IO_BRIDGE_ALIGN 4096 #define PCI_MEM_BRIDGE_ALIGN (1024*1024) -static inline struct pci_operations *ops_pci(device_t dev) +static inline const struct pci_operations *ops_pci(device_t dev) { - struct pci_operations *pops; + const struct pci_operations *pops; pops = 0; if (dev && dev->ops) { pops = dev->ops->ops_pci; @@ -65,4 +75,14 @@ static inline struct pci_operations *ops_pci(device_t dev) return pops; } +static inline const struct pci_bus_operations *ops_pci_bus(struct bus *bus) +{ + const struct pci_bus_operations *bops; + bops = 0; + if (bus && bus->dev && bus->dev->ops) { + bops = bus->dev->ops->ops_pci_bus; + } + return bops; +} + #endif /* PCI_H */ |