Lines Matching +full:ia32 +full:- +full:3 +full:a

1 // SPDX-License-Identifier: GPL-2.0-or-later
31 return -EFAULT; in snd_ctl_elem_list_compat()
33 if (get_user(ptr, &data32->pids)) in snd_ctl_elem_list_compat()
34 return -EFAULT; in snd_ctl_elem_list_compat()
41 return -EFAULT; in snd_ctl_elem_list_compat()
82 struct snd_card *card = ctl->card; in snd_ctl_elem_info_compat()
88 return -ENOMEM; in snd_ctl_elem_info_compat()
91 if (copy_from_user(&data->id, &data32->id, sizeof(data->id))) in snd_ctl_elem_info_compat()
92 return -EFAULT; in snd_ctl_elem_info_compat()
96 if (get_user(data->value.enumerated.item, &data32->value.enumerated.item)) in snd_ctl_elem_info_compat()
97 return -EFAULT; in snd_ctl_elem_info_compat()
108 if (copy_to_user(&data32->id, &data->id, sizeof(data->id)) || in snd_ctl_elem_info_compat()
109 copy_to_user(&data32->type, &data->type, 3 * sizeof(u32))) in snd_ctl_elem_info_compat()
110 return -EFAULT; in snd_ctl_elem_info_compat()
111 if (put_user(data->owner, &data32->owner)) in snd_ctl_elem_info_compat()
112 return -EFAULT; in snd_ctl_elem_info_compat()
113 switch (data->type) { in snd_ctl_elem_info_compat()
116 if (put_user(data->value.integer.min, &data32->value.integer.min) || in snd_ctl_elem_info_compat()
117 put_user(data->value.integer.max, &data32->value.integer.max) || in snd_ctl_elem_info_compat()
118 put_user(data->value.integer.step, &data32->value.integer.step)) in snd_ctl_elem_info_compat()
119 return -EFAULT; in snd_ctl_elem_info_compat()
122 if (copy_to_user(&data32->value.integer64, in snd_ctl_elem_info_compat()
123 &data->value.integer64, in snd_ctl_elem_info_compat()
124 sizeof(data->value.integer64))) in snd_ctl_elem_info_compat()
125 return -EFAULT; in snd_ctl_elem_info_compat()
128 if (copy_to_user(&data32->value.enumerated, in snd_ctl_elem_info_compat()
129 &data->value.enumerated, in snd_ctl_elem_info_compat()
130 sizeof(data->value.enumerated))) in snd_ctl_elem_info_compat()
131 return -EFAULT; in snd_ctl_elem_info_compat()
142 unsigned int indirect; /* bit-field causes misalignment */
154 /* x32 has a different alignment for 64bit values from ia32 */
157 unsigned int indirect; /* bit-field causes misalignment */
175 guard(rwsem_read)(&card->controls_rwsem); in get_ctl_type()
178 return -ENOENT; in get_ctl_type()
181 return -ENOMEM; in get_ctl_type()
182 info->id = *id; in get_ctl_type()
183 err = kctl->info(kctl, info); in get_ctl_type()
185 err = info->type; in get_ctl_type()
186 *countp = info->count; in get_ctl_type()
203 return -1; in get_elem_size()
218 if (copy_from_user(&data->id, &data32->id, sizeof(data->id))) in copy_ctl_value_from_user()
219 return -EFAULT; in copy_ctl_value_from_user()
220 if (get_user(indirect, &data32->indirect)) in copy_ctl_value_from_user()
221 return -EFAULT; in copy_ctl_value_from_user()
223 return -EINVAL; in copy_ctl_value_from_user()
224 type = get_ctl_type(card, &data->id, &count); in copy_ctl_value_from_user()
234 return -EFAULT; in copy_ctl_value_from_user()
235 data->value.integer.value[i] = val; in copy_ctl_value_from_user()
240 dev_err(card->dev, "snd_ioctl32_ctl_elem_value: unknown type %d\n", type); in copy_ctl_value_from_user()
241 return -EINVAL; in copy_ctl_value_from_user()
243 if (copy_from_user(data->value.bytes.data, valuep, size)) in copy_ctl_value_from_user()
244 return -EFAULT; in copy_ctl_value_from_user()
266 val = data->value.integer.value[i]; in copy_ctl_value_to_user()
268 return -EFAULT; in copy_ctl_value_to_user()
272 if (copy_to_user(valuep, data->value.bytes.data, size)) in copy_ctl_value_to_user()
273 return -EFAULT; in copy_ctl_value_to_user()
275 if (copy_to_user(&data32->id, &data->id, sizeof(data32->id))) in copy_ctl_value_to_user()
276 return -EFAULT; in copy_ctl_value_to_user()
288 return -ENOMEM; in __ctl_elem_read_user()
318 struct snd_card *card = file->card; in __ctl_elem_write_user()
323 return -ENOMEM; in __ctl_elem_write_user()
339 struct snd_card *card = file->card; in ctl_elem_write_user()
353 return ctl_elem_read_user(card, data32, &data32->value); in snd_ctl_elem_read_user_compat()
359 return ctl_elem_write_user(file, data32, &data32->value); in snd_ctl_elem_write_user_compat()
366 return ctl_elem_read_user(card, data32, &data32->value); in snd_ctl_elem_read_user_x32()
372 return ctl_elem_write_user(file, data32, &data32->value); in snd_ctl_elem_write_user_x32()
376 /* add or replace a user control */
385 return -ENOMEM; in snd_ctl_elem_add_compat()
388 if (copy_from_user(&data->id, &data32->id, sizeof(data->id)) || in snd_ctl_elem_add_compat()
389 copy_from_user(&data->type, &data32->type, 3 * sizeof(u32))) in snd_ctl_elem_add_compat()
390 return -EFAULT; in snd_ctl_elem_add_compat()
391 if (get_user(data->owner, &data32->owner)) in snd_ctl_elem_add_compat()
392 return -EFAULT; in snd_ctl_elem_add_compat()
393 switch (data->type) { in snd_ctl_elem_add_compat()
396 if (get_user(data->value.integer.min, &data32->value.integer.min) || in snd_ctl_elem_add_compat()
397 get_user(data->value.integer.max, &data32->value.integer.max) || in snd_ctl_elem_add_compat()
398 get_user(data->value.integer.step, &data32->value.integer.step)) in snd_ctl_elem_add_compat()
399 return -EFAULT; in snd_ctl_elem_add_compat()
402 if (copy_from_user(&data->value.integer64, in snd_ctl_elem_add_compat()
403 &data32->value.integer64, in snd_ctl_elem_add_compat()
404 sizeof(data->value.integer64))) in snd_ctl_elem_add_compat()
405 return -EFAULT; in snd_ctl_elem_add_compat()
408 if (copy_from_user(&data->value.enumerated, in snd_ctl_elem_add_compat()
409 &data32->value.enumerated, in snd_ctl_elem_add_compat()
410 sizeof(data->value.enumerated))) in snd_ctl_elem_add_compat()
411 return -EFAULT; in snd_ctl_elem_add_compat()
412 data->value.enumerated.names_ptr = in snd_ctl_elem_add_compat()
413 (uintptr_t)compat_ptr(data->value.enumerated.names_ptr); in snd_ctl_elem_add_compat()
441 ctl = file->private_data; in snd_ctl_ioctl_compat()
442 if (snd_BUG_ON(!ctl || !ctl->card)) in snd_ctl_ioctl_compat()
443 return -ENXIO; in snd_ctl_ioctl_compat()
459 return snd_ctl_elem_list_compat(ctl->card, argp); in snd_ctl_ioctl_compat()
463 return snd_ctl_elem_read_user_compat(ctl->card, argp); in snd_ctl_ioctl_compat()
472 return snd_ctl_elem_read_user_x32(ctl->card, argp); in snd_ctl_ioctl_compat()
480 if (p->fioctl) { in snd_ctl_ioctl_compat()
481 err = p->fioctl(ctl->card, ctl, cmd, arg); in snd_ctl_ioctl_compat()
482 if (err != -ENOIOCTLCMD) in snd_ctl_ioctl_compat()
486 return -ENOIOCTLCMD; in snd_ctl_ioctl_compat()