From a9e632c2ac29c60872e7e4f9314263b34ce5031d Mon Sep 17 00:00:00 2001 From: Eric Biederman Date: Thu, 18 Nov 2004 22:38:08 +0000 Subject: - First stab at getting the ppc ports building and working. - The sandpointx3+altimus has been consolidated into one directory for now. - Added support for having different versions of the pci access functions on a per bus basis if needed. Hopefully I have not broken something inadvertently. git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1786 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/include/arch-generic/div64.h | 2 +- src/include/cpu/cpu.h | 1 + src/include/cpu/ppc/cpuid.h | 2 +- src/include/device/device.h | 8 +++++--- src/include/device/path.h | 25 +++++++++++++++++++------ src/include/device/pci.h | 24 ++++++++++++++++++++++-- 6 files changed, 49 insertions(+), 13 deletions(-) (limited to 'src/include') diff --git a/src/include/arch-generic/div64.h b/src/include/arch-generic/div64.h index 4015810d8c..08db225d3f 100644 --- a/src/include/arch-generic/div64.h +++ b/src/include/arch-generic/div64.h @@ -33,7 +33,7 @@ extern uint32_t __div64_32(uint64_t *dividend, uint32_t divisor); uint32_t __base = (base); \ uint32_t __rem; \ (void)(((typeof((n)) *)0) == ((uint64_t *)0)); \ - if (likely(((n) >> 32) == 0)) { \ + if (((n) >> 32) == 0) { \ __rem = (uint32_t)(n) % __base; \ (n) = (uint32_t)(n) / __base; \ } else \ diff --git a/src/include/cpu/cpu.h b/src/include/cpu/cpu.h index e211d990e0..468af24850 100644 --- a/src/include/cpu/cpu.h +++ b/src/include/cpu/cpu.h @@ -2,6 +2,7 @@ #define CPU_CPU_H struct device; +struct bus; #include void cpu_initialize(void); diff --git a/src/include/cpu/ppc/cpuid.h b/src/include/cpu/ppc/cpuid.h index 8a497dfd11..3ef065b601 100644 --- a/src/include/cpu/ppc/cpuid.h +++ b/src/include/cpu/ppc/cpuid.h @@ -1,6 +1,6 @@ #ifndef CPU_PPC_CPUID_H #define CPU_PPC_CPUID_H -void display_cpuid(void); +void display_cpuid(device_t dev); #endif /* CPU_PPC_CPUID_H */ 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 */ -- cgit v1.2.3