Example #1
0
static int adf_ctl_ioctl_dev_config(struct file *fp, unsigned int cmd,
                                    unsigned long arg)
{
    int ret;
    struct adf_user_cfg_ctl_data *ctl_data;
    struct adf_accel_dev *accel_dev;

    ret = adf_ctl_alloc_resources(&ctl_data, arg);
    if (ret)
        return ret;

    accel_dev = adf_devmgr_get_dev_by_id(ctl_data->device_id);
    if (!accel_dev) {
        ret = -EFAULT;
        goto out;
    }

    if (adf_dev_started(accel_dev)) {
        ret = -EFAULT;
        goto out;
    }

    if (adf_copy_key_value_data(accel_dev, ctl_data)) {
        ret = -EFAULT;
        goto out;
    }
    set_bit(ADF_STATUS_CONFIGURED, &accel_dev->status);
out:
    kfree(ctl_data);
    return ret;
}
Example #2
0
static int adf_ctl_ioctl_dev_stop(struct file *fp, unsigned int cmd,
                                  unsigned long arg)
{
    int ret;
    struct adf_user_cfg_ctl_data *ctl_data;

    ret = adf_ctl_alloc_resources(&ctl_data, arg);
    if (ret)
        return ret;

    if (adf_devmgr_verify_id(ctl_data->device_id)) {
        pr_err("QAT: Device %d not found\n", ctl_data->device_id);
        ret = -ENODEV;
        goto out;
    }

    ret = adf_ctl_is_device_in_use(ctl_data->device_id);
    if (ret)
        goto out;

    if (ctl_data->device_id == ADF_CFG_ALL_DEVICES)
        pr_info("QAT: Stopping all acceleration devices.\n");
    else
        pr_info("QAT: Stopping acceleration device qat_dev%d.\n",
                ctl_data->device_id);

    ret = adf_ctl_stop_devices(ctl_data->device_id);
    if (ret)
        pr_err("QAT: failed to stop device.\n");
out:
    kfree(ctl_data);
    return ret;
}
Example #3
0
static int adf_ctl_ioctl_dev_start(struct file *fp, unsigned int cmd,
				   unsigned long arg)
{
	int ret;
	struct adf_user_cfg_ctl_data *ctl_data;
	struct adf_accel_dev *accel_dev;

	ret = adf_ctl_alloc_resources(&ctl_data, arg);
	if (ret)
		return ret;

	accel_dev = adf_devmgr_get_dev_by_id(ctl_data->device_id);
	if (!accel_dev) {
		pr_err("QAT: Device %d not found\n", ctl_data->device_id);
		ret = -ENODEV;
		goto out;
	}

	if (!adf_dev_started(accel_dev)) {
		pr_info("QAT: Starting acceleration device qat_dev%d.\n",
			ctl_data->device_id);
		ret = adf_dev_start(accel_dev);
	} else {
		pr_info("QAT: Acceleration device qat_dev%d already started.\n",
			ctl_data->device_id);
	}
	if (ret) {
		pr_err("QAT: Failed to start qat_dev%d\n", ctl_data->device_id);
		adf_dev_stop(accel_dev);
	}
out:
	kfree(ctl_data);
	return ret;
}