struct vio_dev *vdev = to_vio_dev(dev);
const char *str = "none";
- if (vdev->type) {
- if (!strcmp(vdev->type, "network"))
- str = "vnet";
- else if (!strcmp(vdev->type, "block"))
- str = "vdisk";
- }
+ if (!strcmp(vdev->type, "network"))
+ str = "vnet";
+ else if (!strcmp(vdev->type, "block"))
+ str = "vdisk";
return sprintf(buf, "%s\n", str);
}
+static ssize_t type_show(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct vio_dev *vdev = to_vio_dev(dev);
+ return sprintf(buf, "%s\n", vdev->type);
+}
+
static struct device_attribute vio_dev_attrs[] = {
__ATTR_RO(devspec),
+ __ATTR_RO(type),
__ATTR_NULL
};
int err, clen;
type = md_get_property(mp, "device-type", NULL);
- if (!type)
+ if (!type) {
type = md_get_property(mp, "name", NULL);
+ if (!type)
+ type = mp->name;
+ }
compat = md_get_property(mp, "device-type", &clen);
vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
static void create_devices(struct mdesc_node *root)
{
+ struct mdesc_node *mp;
+
root_vdev = vio_create_one(root, NULL);
if (!root_vdev) {
printk(KERN_ERR "VIO: Coult not create root device.\n");
}
walk_tree(root, root_vdev);
+
+ /* Domain services is odd as it doesn't sit underneath the
+ * channel-devices node, so we plug it in manually.
+ */
+ mp = md_find_node_by_name(NULL, "domain-services");
+ if (mp) {
+ struct vio_dev *parent = vio_create_one(mp, &root_vdev->dev);
+
+ if (parent)
+ walk_tree(mp, parent);
+ }
}
const char *channel_devices_node = "channel-devices";