aboutsummaryrefslogtreecommitdiff
path: root/src/devices/chip.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/chip.c')
-rw-r--r--src/devices/chip.c232
1 files changed, 0 insertions, 232 deletions
diff --git a/src/devices/chip.c b/src/devices/chip.c
deleted file mode 100644
index 6882a4b797..0000000000
--- a/src/devices/chip.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* chips are arbitrary chips (superio, southbridge, etc.)
- * They have private structures that define chip resources and default
- * settings. They have four externally visible functions for control.
- * They have a generic component which applies to all chips for
- * path, etc.
- */
-
-#include <console/console.h>
-#include <device/chip.h>
-#include <device/pci.h>
-
-/**
- * @brief Configure static devices
- *
- * Starting from the static device 'root', walk the tree and configure each
- * device by calling the device specific chip_control::enable().
- *
- * This function is only an iterator, the exact definition of 'configure'
- * depends on the device specific implementation of chip_control::enable().
- *
- * @param root root of the static device tree to be configured.
- * @param pass pass of the configuration operation to be perfromed.
- *
- * @see chip_pass
- * @see chip_control::enable
- */
-void chip_configure(struct chip *root, enum chip_pass pass)
-{
- struct chip *c;
-
- for (c = root; c; c = c->next) {
- if (c->control && c->control->enable)
- c->control->enable(c, pass);
- }
-
- for (c = root; c; c = c->next) {
- if (c->children)
- chip_configure(c->children, pass);
- }
-}
-
-/**
- * @brief Convert static device structures to dynamic structures.
- *
- * A static device may contain one or more dynamic devices. Dynamic device
- * structures of these devices have to be generated before the enumeration
- * of dynamic devices. This function converts a static chip structure to a
- * set of dynamic device structures.
- *
- * This function is the generic method called by enumerate_static_device_chain()
- * for static devices. Devices extend this default behavior by defining their
- * own chip_controll::enumerate(). Generally, device specific
- * chip_control::enumerate() method calls this function as its last operation.
- *
- * @param chip static chip structure to be converted.
- *
- */
-void chip_enumerate(struct chip *chip)
-{
- struct chip *child;
- device_t dev;
- int link;
- int i;
-
- dev = 0;
- link = 0;
-
- if (chip->control && chip->control->name) {
- printk_debug("Enumerating: %s\n", chip->control->name);
- }
-
- for(i = 0; i < MAX_CHIP_PATHS; i++) {
- int identical_paths;
- identical_paths =
- (i > 0) &&
- (path_eq(&chip->path[i - 1].path, &chip->path[i].path));
- if (!identical_paths) {
- struct bus *parent;
- int bus;
- link = 0;
- dev = 0;
- parent = chip->bus;
- switch(chip->path[i].path.type) {
- case DEVICE_PATH_NONE:
- /* no dynamic device associated */
- break;
- case DEVICE_PATH_PCI:
- bus = chip->path[i].path.u.pci.bus;
- if (bus != 0) {
- device_t dev;
- int i = 1;
- dev = chip->dev;
- while(dev && (i != bus)) {
- dev = dev->next;
- i++;
- }
- if ((i == bus) && dev) {
- parent = &dev->link[0];
- }
- }
- /* Fall through */
- default:
- dev = alloc_dev(parent, &chip->path[i].path);
- break;
- }
- }
- else {
- link += 1;
- }
-
- if (dev) {
- struct chip_resource *res, *res_limit;
- printk_spew("path (%p) %s %s",
- dev, dev_path(dev), identical_paths?"identical":"");
- printk_spew(" parent: (%p):%d %s\n",
- dev->bus->dev, dev->bus->link,
- dev_path(dev->bus->dev));
- dev->chip = chip;
- dev->enabled = chip->path[i].enabled;
- dev->links = link + 1;
- for(child = chip->children; child; child = child->next) {
- if (!child->bus && child->link == i) {
- child->bus = &dev->link[link];
- }
- }
- res = &chip->path[i].resource[0];
- res_limit = &chip->path[i].resource[MAX_RESOURCES];
- for(; res < res_limit; res++) {
- if (res->flags) {
- struct resource *resource;
- resource = new_resource(dev, res->index);
- resource->flags = res->flags | IORESOURCE_FIXED | IORESOURCE_ASSIGNED;
- resource->base = res->base;
- }
- }
- }
-
- if (dev && !chip->dev) {
- chip->dev = dev;
- }
- }
- if (chip->children && !chip->dev) {
- die("No device but children?");
- }
- for(child = chip->children; child; child = child->next) {
- if (!child->bus) {
- child->bus = &chip->dev->link[0];
- }
- }
-}
-
-/**
- * @brief Enumerate a static device tree.
- *
- * A static device chain is a linked list of static device structures which are
- * on the same branch of the static device tree. This function does not only
- * enumerate the devices on a single chain, as its name suggest, it also walks
- * into the subordinary chains by recursion. It calls the device specific
- * chip_control::enumerate() of the device if one exists or calls the generic
- * chip_enumerate().
- *
- * This function is only an iterator, the exact definition of 'enumerate'
- * depends on the implementation of the generic chip_enumerate() and/or device
- * specific chip_control::enumerate().
- *
- * @param root static chip structure to start with.
- *
- * @see chip_control::enumerate()
- */
-static void enumerate_static_device_chain(struct chip *root)
-{
- struct chip *chip;
- for(chip = root; chip; chip = chip->next) {
- void (*enumerate)(struct chip *chip);
- enumerate = chip_enumerate;
- if (chip->control && chip->control->enumerate) {
- enumerate = chip->control->enumerate;
- }
- enumerate(chip);
- }
-
- for(chip = root; chip; chip = chip->next) {
- if (chip->children) {
- enumerate_static_device_chain(chip->children);
- }
- }
-}
-
-/**
- * @brief Enumerate static devices in the system.
- *
- * Static device is . Static devices are actually enumerated or "listed" in
- * the Config.lb config file and the corresponding data structures are
- * generated by config tool in the static.c.
- *
- * \note The definition of 'enumerate' is not clear in this context. Does it
- * mean probe ?
- *
- * \note How do we determine the existence of the static devices ? Static
- * devices are listed in the config file and generated at compile time by config
- * tool. This function is called at certain point in the early stage of
- * LinuxBIOS. It uses the chip_enumerate() function to convert the static
- * structures into dynamic ones. What if the static devices listed in the config
- * file does actually not exist in the system ? Is there any side effect of
- * these 'phantom' device structures
- *
- * The static device does not necesarry conform to the dynamic device tree in
- * the system.
- */
-void enumerate_static_devices(void)
-{
- struct chip *child;
- int i;
- printk_info("Enumerating static devices...\n");
- static_root.dev = &dev_root;
- dev_root.links = MAX_LINKS;
- for(i = 0; i < MAX_LINKS; i++) {
- dev_root.link[i].link = i;
- dev_root.link[i].dev = &dev_root;
- for(child = static_root.children; child; child = child->next) {
- if (!child->bus && child->link == i) {
- child->bus = &dev_root.link[i];
- }
- }
- }
- for(child = static_root.children; child; child = child->next) {
- if (!child->bus) {
- child->bus = &dev_root.link[0];
- }
- }
- enumerate_static_device_chain(&static_root);
-}