Skip to content

Commit

Permalink
[SPARC64]: Add domain-services nodes to VIO device tree.
Browse files Browse the repository at this point in the history
They sit under the root of the MD tree unlike the rest of
the LDC channel based virtual devices.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Jul 16, 2007
1 parent cb48123 commit 2c4f4ec
Showing 1 changed file with 29 additions and 7 deletions.
36 changes: 29 additions & 7 deletions arch/sparc64/kernel/vio.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,18 +104,24 @@ static ssize_t devspec_show(struct device *dev,
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
};

Expand Down Expand Up @@ -201,8 +207,11 @@ static struct vio_dev *vio_create_one(struct mdesc_node *mp,
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);
Expand Down Expand Up @@ -279,13 +288,26 @@ static void walk_tree(struct mdesc_node *n, struct vio_dev *parent)

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");
return;
}

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";
Expand Down

0 comments on commit 2c4f4ec

Please sign in to comment.