Commit 2c4f4ecb authored by David S. Miller's avatar David S. Miller

[SPARC64]: Add domain-services nodes to VIO device tree.

They sit under the root of the MD tree unlike the rest of
the LDC channel based virtual devices.
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent cb481235
...@@ -104,18 +104,24 @@ static ssize_t devspec_show(struct device *dev, ...@@ -104,18 +104,24 @@ static ssize_t devspec_show(struct device *dev,
struct vio_dev *vdev = to_vio_dev(dev); struct vio_dev *vdev = to_vio_dev(dev);
const char *str = "none"; const char *str = "none";
if (vdev->type) { if (!strcmp(vdev->type, "network"))
if (!strcmp(vdev->type, "network")) str = "vnet";
str = "vnet"; else if (!strcmp(vdev->type, "block"))
else if (!strcmp(vdev->type, "block")) str = "vdisk";
str = "vdisk";
}
return sprintf(buf, "%s\n", str); 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[] = { static struct device_attribute vio_dev_attrs[] = {
__ATTR_RO(devspec), __ATTR_RO(devspec),
__ATTR_RO(type),
__ATTR_NULL __ATTR_NULL
}; };
...@@ -201,8 +207,11 @@ static struct vio_dev *vio_create_one(struct mdesc_node *mp, ...@@ -201,8 +207,11 @@ static struct vio_dev *vio_create_one(struct mdesc_node *mp,
int err, clen; int err, clen;
type = md_get_property(mp, "device-type", NULL); type = md_get_property(mp, "device-type", NULL);
if (!type) if (!type) {
type = md_get_property(mp, "name", NULL); type = md_get_property(mp, "name", NULL);
if (!type)
type = mp->name;
}
compat = md_get_property(mp, "device-type", &clen); compat = md_get_property(mp, "device-type", &clen);
vdev = kzalloc(sizeof(*vdev), GFP_KERNEL); vdev = kzalloc(sizeof(*vdev), GFP_KERNEL);
...@@ -279,6 +288,8 @@ static void walk_tree(struct mdesc_node *n, struct vio_dev *parent) ...@@ -279,6 +288,8 @@ static void walk_tree(struct mdesc_node *n, struct vio_dev *parent)
static void create_devices(struct mdesc_node *root) static void create_devices(struct mdesc_node *root)
{ {
struct mdesc_node *mp;
root_vdev = vio_create_one(root, NULL); root_vdev = vio_create_one(root, NULL);
if (!root_vdev) { if (!root_vdev) {
printk(KERN_ERR "VIO: Coult not create root device.\n"); printk(KERN_ERR "VIO: Coult not create root device.\n");
...@@ -286,6 +297,17 @@ static void create_devices(struct mdesc_node *root) ...@@ -286,6 +297,17 @@ static void create_devices(struct mdesc_node *root)
} }
walk_tree(root, root_vdev); 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"; const char *channel_devices_node = "channel-devices";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment