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()
87 return -ENOMEM; in snd_ctl_elem_info_compat()
89 err = -EFAULT; in snd_ctl_elem_info_compat()
91 if (copy_from_user(&data->id, &data32->id, sizeof(data->id))) in snd_ctl_elem_info_compat()
96 if (get_user(data->value.enumerated.item, &data32->value.enumerated.item)) in snd_ctl_elem_info_compat()
103 err = -EFAULT; in snd_ctl_elem_info_compat()
105 if (copy_to_user(&data32->id, &data->id, sizeof(data->id)) || in snd_ctl_elem_info_compat()
106 copy_to_user(&data32->type, &data->type, 3 * sizeof(u32))) in snd_ctl_elem_info_compat()
108 if (put_user(data->owner, &data32->owner)) in snd_ctl_elem_info_compat()
110 switch (data->type) { in snd_ctl_elem_info_compat()
113 if (put_user(data->value.integer.min, &data32->value.integer.min) || in snd_ctl_elem_info_compat()
114 put_user(data->value.integer.max, &data32->value.integer.max) || in snd_ctl_elem_info_compat()
115 put_user(data->value.integer.step, &data32->value.integer.step)) in snd_ctl_elem_info_compat()
119 if (copy_to_user(&data32->value.integer64, in snd_ctl_elem_info_compat()
120 &data->value.integer64, in snd_ctl_elem_info_compat()
121 sizeof(data->value.integer64))) in snd_ctl_elem_info_compat()
125 if (copy_to_user(&data32->value.enumerated, in snd_ctl_elem_info_compat()
126 &data->value.enumerated, in snd_ctl_elem_info_compat()
127 sizeof(data->value.enumerated))) 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 down_read(&card->controls_rwsem); in get_ctl_type()
178 up_read(&card->controls_rwsem); in get_ctl_type()
179 return -ENOENT; in get_ctl_type()
183 up_read(&card->controls_rwsem); in get_ctl_type()
184 return -ENOMEM; in get_ctl_type()
186 info->id = *id; in get_ctl_type()
189 err = kctl->info(kctl, info); in get_ctl_type()
191 up_read(&card->controls_rwsem); in get_ctl_type()
193 err = info->type; in get_ctl_type()
194 *countp = info->count; in get_ctl_type()
212 return -1; in get_elem_size()
227 if (copy_from_user(&data->id, &data32->id, sizeof(data->id))) in copy_ctl_value_from_user()
228 return -EFAULT; in copy_ctl_value_from_user()
229 if (get_user(indirect, &data32->indirect)) in copy_ctl_value_from_user()
230 return -EFAULT; in copy_ctl_value_from_user()
232 return -EINVAL; in copy_ctl_value_from_user()
233 type = get_ctl_type(card, &data->id, &count); in copy_ctl_value_from_user()
243 return -EFAULT; in copy_ctl_value_from_user()
244 data->value.integer.value[i] = val; in copy_ctl_value_from_user()
249 dev_err(card->dev, "snd_ioctl32_ctl_elem_value: unknown type %d\n", type); in copy_ctl_value_from_user()
250 return -EINVAL; in copy_ctl_value_from_user()
252 if (copy_from_user(data->value.bytes.data, valuep, size)) in copy_ctl_value_from_user()
253 return -EFAULT; in copy_ctl_value_from_user()
275 val = data->value.integer.value[i]; in copy_ctl_value_to_user()
277 return -EFAULT; in copy_ctl_value_to_user()
281 if (copy_to_user(valuep, data->value.bytes.data, size)) in copy_ctl_value_to_user()
282 return -EFAULT; in copy_ctl_value_to_user()
284 if (copy_to_user(&data32->id, &data->id, sizeof(data32->id))) in copy_ctl_value_to_user()
285 return -EFAULT; in copy_ctl_value_to_user()
297 return -ENOMEM; in ctl_elem_read_user()
317 struct snd_card *card = file->card; in ctl_elem_write_user()
322 return -ENOMEM; in ctl_elem_write_user()
341 return ctl_elem_read_user(card, data32, &data32->value); in snd_ctl_elem_read_user_compat()
347 return ctl_elem_write_user(file, data32, &data32->value); in snd_ctl_elem_write_user_compat()
354 return ctl_elem_read_user(card, data32, &data32->value); in snd_ctl_elem_read_user_x32()
360 return ctl_elem_write_user(file, data32, &data32->value); in snd_ctl_elem_write_user_x32()
364 /* add or replace a user control */
374 return -ENOMEM; in snd_ctl_elem_add_compat()
376 err = -EFAULT; in snd_ctl_elem_add_compat()
378 if (copy_from_user(&data->id, &data32->id, sizeof(data->id)) || in snd_ctl_elem_add_compat()
379 copy_from_user(&data->type, &data32->type, 3 * sizeof(u32))) in snd_ctl_elem_add_compat()
381 if (get_user(data->owner, &data32->owner)) in snd_ctl_elem_add_compat()
383 switch (data->type) { in snd_ctl_elem_add_compat()
386 if (get_user(data->value.integer.min, &data32->value.integer.min) || in snd_ctl_elem_add_compat()
387 get_user(data->value.integer.max, &data32->value.integer.max) || in snd_ctl_elem_add_compat()
388 get_user(data->value.integer.step, &data32->value.integer.step)) in snd_ctl_elem_add_compat()
392 if (copy_from_user(&data->value.integer64, in snd_ctl_elem_add_compat()
393 &data32->value.integer64, in snd_ctl_elem_add_compat()
394 sizeof(data->value.integer64))) in snd_ctl_elem_add_compat()
398 if (copy_from_user(&data->value.enumerated, in snd_ctl_elem_add_compat()
399 &data32->value.enumerated, in snd_ctl_elem_add_compat()
400 sizeof(data->value.enumerated))) in snd_ctl_elem_add_compat()
402 data->value.enumerated.names_ptr = in snd_ctl_elem_add_compat()
403 (uintptr_t)compat_ptr(data->value.enumerated.names_ptr); in snd_ctl_elem_add_compat()
434 ctl = file->private_data; in snd_ctl_ioctl_compat()
435 if (snd_BUG_ON(!ctl || !ctl->card)) in snd_ctl_ioctl_compat()
436 return -ENXIO; in snd_ctl_ioctl_compat()
452 return snd_ctl_elem_list_compat(ctl->card, argp); in snd_ctl_ioctl_compat()
456 return snd_ctl_elem_read_user_compat(ctl->card, argp); in snd_ctl_ioctl_compat()
465 return snd_ctl_elem_read_user_x32(ctl->card, argp); in snd_ctl_ioctl_compat()
473 if (p->fioctl) { in snd_ctl_ioctl_compat()
474 err = p->fioctl(ctl->card, ctl, cmd, arg); in snd_ctl_ioctl_compat()
475 if (err != -ENOIOCTLCMD) { in snd_ctl_ioctl_compat()
482 return -ENOIOCTLCMD; in snd_ctl_ioctl_compat()