Example #1
0
static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
    struct usbtmc_device_data *data;
    int retval = -EBADRQC;

    data = file->private_data;
    mutex_lock(&data->io_mutex);
    if (data->zombie) {
        retval = -ENODEV;
        goto skip_io_on_zombie;
    }

    switch (cmd) {
    case USBTMC_IOCTL_CLEAR_OUT_HALT:
        retval = usbtmc_ioctl_clear_out_halt(data);
        break;

    case USBTMC_IOCTL_CLEAR_IN_HALT:
        retval = usbtmc_ioctl_clear_in_halt(data);
        break;

    case USBTMC_IOCTL_INDICATOR_PULSE:
        retval = usbtmc_ioctl_indicator_pulse(data);
        break;

    case USBTMC_IOCTL_CLEAR:
        retval = usbtmc_ioctl_clear(data);
        break;

    case USBTMC_IOCTL_ABORT_BULK_OUT:
        retval = usbtmc_ioctl_abort_bulk_out(data);
        break;

    case USBTMC_IOCTL_ABORT_BULK_IN:
        retval = usbtmc_ioctl_abort_bulk_in(data);
        break;
    }

skip_io_on_zombie:
    mutex_unlock(&data->io_mutex);
    return retval;
}
Example #2
0
static long usbtmc_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
	struct usbtmc_device_data *data;
	int retval = -EBADRQC;

	data = file->private_data;
	mutex_lock(&data->io_mutex);
	if (data->zombie) {
		retval = -ENODEV;
		goto skip_io_on_zombie;
	}

	switch (cmd) {
	case USBTMC_IOCTL_CLEAR_OUT_HALT:
		retval = usbtmc_ioctl_clear_out_halt(data);
		break;

	case USBTMC_IOCTL_CLEAR_IN_HALT:
		retval = usbtmc_ioctl_clear_in_halt(data);
		break;

	case USBTMC_IOCTL_INDICATOR_PULSE:
		retval = usbtmc_ioctl_indicator_pulse(data);
		break;

	case USBTMC_IOCTL_CLEAR:
		retval = usbtmc_ioctl_clear(data);
		break;

	case USBTMC_IOCTL_ABORT_BULK_OUT:
		retval = usbtmc_ioctl_abort_bulk_out(data);
		break;

	case USBTMC_IOCTL_ABORT_BULK_IN:
		retval = usbtmc_ioctl_abort_bulk_in(data);
		break;

	case USBTMC488_IOCTL_GET_CAPS:
		retval = copy_to_user((void __user *)arg,
				&data->usb488_caps,
				sizeof(data->usb488_caps));
		if (retval)
			retval = -EFAULT;
		break;

	case USBTMC488_IOCTL_READ_STB:
		retval = usbtmc488_ioctl_read_stb(data, (void __user *)arg);
		break;

	case USBTMC488_IOCTL_REN_CONTROL:
		retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
						USBTMC488_REQUEST_REN_CONTROL);
		break;

	case USBTMC488_IOCTL_GOTO_LOCAL:
		retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
						USBTMC488_REQUEST_GOTO_LOCAL);
		break;

	case USBTMC488_IOCTL_LOCAL_LOCKOUT:
		retval = usbtmc488_ioctl_simple(data, (void __user *)arg,
						USBTMC488_REQUEST_LOCAL_LOCKOUT);
		break;
	}

skip_io_on_zombie:
	mutex_unlock(&data->io_mutex);
	return retval;
}