in clients/cmt_speech.c [1199:1257]
static long cs_char_ioctl(struct file *file, unsigned int cmd,
unsigned long arg)
{
struct cs_char *csdata = file->private_data;
int r = 0;
switch (cmd) {
case CS_GET_STATE: {
unsigned int state;
state = cs_hsi_get_state(csdata->hi);
if (copy_to_user((void __user *)arg, &state, sizeof(state)))
r = -EFAULT;
break;
}
case CS_SET_WAKELINE: {
unsigned int state;
if (copy_from_user(&state, (void __user *)arg, sizeof(state))) {
r = -EFAULT;
break;
}
if (state > 1) {
r = -EINVAL;
break;
}
cs_hsi_set_wakeline(csdata->hi, !!state);
break;
}
case CS_GET_IF_VERSION: {
unsigned int ifver = CS_IF_VERSION;
if (copy_to_user((void __user *)arg, &ifver, sizeof(ifver)))
r = -EFAULT;
break;
}
case CS_CONFIG_BUFS: {
struct cs_buffer_config buf_cfg;
if (copy_from_user(&buf_cfg, (void __user *)arg,
sizeof(buf_cfg)))
r = -EFAULT;
else
r = cs_hsi_buf_config(csdata->hi, &buf_cfg);
break;
}
default:
r = -ENOTTY;
break;
}
return r;
}