Exemple #1
0
int register_vio_slot(struct device_node *dn)
{
	u32 *index;
	char *name;
	int rc = 1;
	struct slot *slot = NULL;
	
	index = (u32 *) get_property(dn, "ibm,my-drc-index", NULL);
	if (!index)
		goto exit_rc;
	name = get_property(dn, "ibm,loc-code", NULL);
	if (!name)
		goto exit_rc;
	if (!(slot = alloc_slot_struct(dn, *index, name, 0))) {
		rc = -ENOMEM;
		goto exit_rc;
	}
	slot->dev_type = VIO_DEV;
	slot->dev.vio_dev = vio_find_node(dn);
	if (!slot->dev.vio_dev)
		slot->dev.vio_dev = vio_register_device(dn);
	if (slot->dev.vio_dev)
		slot->state = CONFIGURED;
	else
		slot->state = NOT_CONFIGURED;
	if (setup_vio_hotplug_slot_info(slot))
		goto exit_rc;
	info("%s: registered VIO device[name=%s vio_dev=%p]\n",
		__FUNCTION__, slot->name, slot->dev.vio_dev); 
	rc = register_slot(slot);
exit_rc:
	if (rc && slot)
		dealloc_slot_struct(slot);
	return (rc);
}
int register_vio_slot(struct device_node *dn)
{
	u32 *index;
	char *name;
	int rc = 1;
	struct slot *slot = NULL;
	
	rc = rpaphp_get_drc_props(dn, NULL, &name, NULL, NULL);
	if (rc)
		goto exit_rc;
	index = (u32 *) get_property(dn, "ibm,my-drc-index", NULL);
	if (!index)
		goto exit_rc;
	if (!(slot = alloc_slot_struct(dn, *index, name, 0))) {
		rc = -ENOMEM;
		goto exit_rc;
	}
	slot->dev_type = VIO_DEV;
	slot->dev.vio_dev = vio_find_node(dn);
	if (slot->dev.vio_dev) {
		/*
		 * rpaphp is the only owner of vio devices and
		 * does not need extra reference taken by
		 * vio_find_node
		 */
		put_device(&slot->dev.vio_dev->dev);
	} else
		slot->dev.vio_dev = vio_register_device_node(dn);
	if (slot->dev.vio_dev)
		slot->state = CONFIGURED;
	else
		slot->state = NOT_CONFIGURED;
	if (setup_vio_hotplug_slot_info(slot))
		goto exit_rc;
	strcpy(slot->name, slot->dev.vio_dev->dev.bus_id);
	info("%s: registered VIO device[name=%s vio_dev=%p]\n",
		__FUNCTION__, slot->name, slot->dev.vio_dev); 
	rc = register_slot(slot);
exit_rc:
	if (rc && slot)
		dealloc_slot_struct(slot);
	return (rc);
}