diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/device/device_util.c | 12 | ||||
-rw-r--r-- | src/device/root_device.c | 2 | ||||
-rw-r--r-- | src/include/device/device.h | 1 | ||||
-rw-r--r-- | src/include/device/path.h | 11 |
4 files changed, 24 insertions, 2 deletions
diff --git a/src/device/device_util.c b/src/device/device_util.c index b538212a83..56afefdc87 100644 --- a/src/device/device_util.c +++ b/src/device/device_util.c @@ -222,6 +222,9 @@ u32 dev_path_encode(device_t dev) case DEVICE_PATH_IOAPIC: ret |= dev->path.ioapic.ioapic_id; break; + case DEVICE_PATH_GENERIC: + ret |= dev->path.generic.subid << 8 | dev->path.generic.id; + break; case DEVICE_PATH_NONE: default: break; @@ -286,6 +289,11 @@ const char *dev_path(device_t dev) snprintf(buffer, sizeof (buffer), "CPU_BUS: %02x", dev->path.cpu_bus.id); break; + case DEVICE_PATH_GENERIC: + snprintf(buffer, sizeof (buffer), + "GENERIC: %d.%d", dev->path.generic.id, + dev->path.generic.subid); + break; default: printk(BIOS_ERR, "Unknown device path type: %d\n", dev->path.type); @@ -353,6 +361,10 @@ int path_eq(struct device_path *path1, struct device_path *path2) case DEVICE_PATH_CPU_BUS: equal = (path1->cpu_bus.id == path2->cpu_bus.id); break; + case DEVICE_PATH_GENERIC: + equal = (path1->generic.id == path2->generic.id) && + (path1->generic.subid == path2->generic.subid); + break; default: printk(BIOS_ERR, "Unknown device type: %d\n", path1->type); break; diff --git a/src/device/root_device.c b/src/device/root_device.c index 6b961005f9..7ff10ae844 100644 --- a/src/device/root_device.c +++ b/src/device/root_device.c @@ -43,7 +43,7 @@ const char mainboard_name[] = CONFIG_MAINBOARD_VENDOR " " CONFIG_MAINBOARD_PART_ * @param bus Pointer to the device to which the static buses are attached to. */ -static void scan_static_bus(device_t bus) +void scan_static_bus(device_t bus) { device_t child; struct bus *link; diff --git a/src/include/device/device.h b/src/include/device/device.h index 62460aea6a..d9af64adf5 100644 --- a/src/include/device/device.h +++ b/src/include/device/device.h @@ -232,6 +232,7 @@ void fixed_mem_resource(device_t dev, unsigned long index, unsigned long basek, unsigned long sizek, unsigned long type); void scan_smbus(device_t bus); +void scan_static_bus(device_t bus); void scan_lpc_bus(device_t bus); /* It is the caller's responsibility to adjust regions such that ram_resource() diff --git a/src/include/device/path.h b/src/include/device/path.h index 8421a38473..9d7fb38d42 100644 --- a/src/include/device/path.h +++ b/src/include/device/path.h @@ -13,6 +13,7 @@ enum device_path_type { DEVICE_PATH_CPU, DEVICE_PATH_CPU_BUS, DEVICE_PATH_IOAPIC, + DEVICE_PATH_GENERIC, /* * When adding path types to this table, please also update the @@ -31,7 +32,8 @@ enum device_path_type { "DEVICE_PATH_CPU_CLUSTER", \ "DEVICE_PATH_CPU", \ "DEVICE_PATH_CPU_BUS", \ - "DEVICE_PATH_IOAPIC" \ + "DEVICE_PATH_IOAPIC", \ + "DEVICE_PATH_GENERIC" \ } struct domain_path @@ -85,6 +87,12 @@ struct cpu_bus_path unsigned id; }; +struct generic_path +{ + unsigned id; + unsigned subid; +}; + struct device_path { enum device_path_type type; @@ -98,6 +106,7 @@ struct device_path { struct cpu_cluster_path cpu_cluster; struct cpu_path cpu; struct cpu_bus_path cpu_bus; + struct generic_path generic; }; }; |