- O2, enums, and switch statements work in romcc
  - Support for compiling romcc on non x86 platforms
  - new romc options -msse and -mmmx for specifying extra registers to use
  - Bug fixes to device the device disable/enable framework and an amd8111 implementation
  - Move the link specification to the chip specification instead of the path
  - Allow specifying devices with internal bridges.
  - Initial via epia support
 - Opteron errata fixes


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1200 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
diff --git a/src/include/device/chip.h b/src/include/device/chip.h
index a98625a..dc078a9 100644
--- a/src/include/device/chip.h
+++ b/src/include/device/chip.h
@@ -49,6 +49,7 @@
  */
 
 struct chip;
+struct device;
 
 /* there is one of these for each TYPE of chip */
 struct chip_control {
@@ -56,6 +57,7 @@
 	char *name;
 	void (*enable)(struct chip *, enum chip_pass);
 	void (*enumerate)(struct chip *chip);
+	void (*enable_dev)(struct device *dev);
 };
 
 
@@ -72,6 +74,7 @@
 #define MAX_CHIP_PATHS 16
 #endif
 struct chip {
+	unsigned link;
 	struct chip_control *control; /* for this device */
 	struct chip_device_path path[MAX_CHIP_PATHS]; /* can be 0, in which case the default is taken */
 	char *configuration; /* can be 0. */
diff --git a/src/include/device/device.h b/src/include/device/device.h
index e7b0317..1b2b016 100644
--- a/src/include/device/device.h
+++ b/src/include/device/device.h
@@ -35,6 +35,7 @@
  * combination:
  */
 
+struct chip;
 struct device {
 	struct bus *	bus;		/* bus this device is on */
 	device_t	sibling;	/* next device on this bus */
@@ -72,6 +73,7 @@
 
 	unsigned long rom_address;
 	struct device_operations *ops;
+	struct chip *chip;
 };
 
 extern struct device	dev_root;	/* root bus */
@@ -94,7 +96,7 @@
 extern const char *dev_path(device_t dev);
 
 /* Helper functions */
-device_t alloc_find_dev(struct bus *bus, struct device_path *path);
+device_t alloc_find_dev(struct bus *parent, struct device_path *path);
 device_t dev_find_device (unsigned int vendor, unsigned int device, device_t from);
 device_t dev_find_class (unsigned int class, device_t from);
 device_t dev_find_slot (unsigned int bus, unsigned int devfn);
diff --git a/src/include/device/path.h b/src/include/device/path.h
index cf89a68..20d76d1 100644
--- a/src/include/device/path.h
+++ b/src/include/device/path.h
@@ -3,6 +3,7 @@
 
 enum device_path_type {
 	DEVICE_PATH_NONE = 0,
+	DEVICE_PATH_ROOT,
 	DEVICE_PATH_PCI,
 	DEVICE_PATH_PNP,
 	DEVICE_PATH_I2C,
@@ -10,6 +11,7 @@
 
 struct pci_path
 {
+	unsigned bus;
 	unsigned devfn;
 };