static int openprom_bsd_ioctl()

in char/openprom.c [527:568]


static int openprom_bsd_ioctl(struct file * file,
			      unsigned int cmd, unsigned long arg)
{
	DATA *data = file->private_data;
	void __user *argp = (void __user *)arg;
	int err;

	mutex_lock(&openprom_mutex);
	switch (cmd) {
	case OPIOCGET:
		err = opiocget(argp, data);
		break;

	case OPIOCNEXTPROP:
		err = opiocnextprop(argp, data);
		break;

	case OPIOCSET:
		err = opiocset(argp, data);
		break;

	case OPIOCGETOPTNODE:
		BUILD_BUG_ON(sizeof(phandle) != sizeof(int));

		err = 0;
		if (copy_to_user(argp, &options_node->phandle, sizeof(phandle)))
			err = -EFAULT;
		break;

	case OPIOCGETNEXT:
	case OPIOCGETCHILD:
		err = opiocgetnext(cmd, argp);
		break;

	default:
		err = -EINVAL;
		break;
	}
	mutex_unlock(&openprom_mutex);

	return err;
}