// SPDX-License-Identifier: GPL-2.0-only /* * 32bit compatibility wrappers for the input subsystem. * * Very heavily based on evdev.c - Copyright (c) 1999-2002 Vojtech Pavlik */ #include #include #include "input-compat.h" #ifdef CONFIG_COMPAT int input_event_from_user(const char __user *buffer, struct input_event *event) { if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct input_event_compat compat_event; if (copy_from_user(&compat_event, buffer, sizeof(struct input_event_compat))) return -EFAULT; event->input_event_sec = compat_event.sec; event->input_event_usec = compat_event.usec; event->type = compat_event.type; event->code = compat_event.code; event->value = compat_event.value; } else { if (copy_from_user(event, buffer, sizeof(struct input_event))) return -EFAULT; } return 0; } int input_event_to_user(char __user *buffer, const struct input_event *event) { if (in_compat_syscall() && !COMPAT_USE_64BIT_TIME) { struct input_event_compat compat_event; compat_event.sec = event->input_event_sec; compat_event.usec = event->input_event_usec; compat_event.type = event->type; compat_event.code = event->code; compat_event.value = event->value; if (copy_to_user(buffer, &compat_event, sizeof(struct input_event_compat))) return -EFAULT; } else { if (copy_to_user(buffer, event, sizeof(struct input_event))) return -EFAULT; } return 0; } int input_ff_effect_from_user(const char __user *buffer, size_t size, struct ff_effect *effect) { if (in_compat_syscall()) { struct ff_effect_compat *compat_effect; if (size != sizeof(struct ff_effect_compat)) return -EINVAL; /* * It so happens that the pointer which needs to be changed * is the last field in the structure, so we can retrieve the * whole thing and replace just the pointer. */ compat_effect = (struct ff_effect_compat *)effect; if (copy_from_user(compat_effect, buffer, sizeof(struct ff_effect_compat))) return -EFAULT; if (compat_effect->type == FF_PERIODIC && compat_effect->u.periodic.waveform == FF_CUSTOM) effect->u.periodic.custom_data = compat_ptr(compat_effect->u.periodic.custom_data); } else { if (size != sizeof(struct ff_effect)) return -EINVAL; if (copy_from_user(effect, buffer, sizeof(struct ff_effect))) return -EFAULT; } return 0; } #else int input_event_from_user(const char __user *buffer, struct input_event *event) { if (copy_from_user(event, buffer, sizeof(struct input_event))) return -EFAULT; return 0; } int input_event_to_user(char __user *buffer, const struct input_event *event) { if (copy_to_user(buffer, event, sizeof(struct input_event))) return -EFAULT; return 0; } int input_ff_effect_from_user(const char __user *buffer, size_t size, struct ff_effect *effect) { if (size != sizeof(struct ff_effect)) return -EINVAL; if (copy_from_user(effect, buffer, sizeof(struct ff_effect))) return -EFAULT; return 0; } #endif /* CONFIG_COMPAT */ EXPORT_SYMBOL_GPL(input_event_from_user); EXPORT_SYMBOL_GPL(input_event_to_user); EXPORT_SYMBOL_GPL(input_ff_effect_from_user); Hosts the 0x221E linux distro kernel.Ubuntu
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2024-08-22ASoC: remove snd_soc_dai_link_set_capabilities()Kuninori Morimoto
2024-08-06ASoC: remove bespoke trigger supportKuninori Morimoto
2024-06-23ASoC: Few constifications (mostly arguments)Mark Brown
2024-06-18ASoC: Constify return of snd_soc_dai_get_pcm_stream()Krzysztof Kozlowski
2024-06-18ASoC: Constify DAI passed to get_channel_mapKrzysztof Kozlowski
2024-06-18ASoC: Constify passed data to core functionKrzysztof Kozlowski
2024-06-18ASoC: Constify of_phandle_args in snd_soc_dai_driverKrzysztof Kozlowski
2024-06-17ASoC: soc-dai.h: Constify DAI ops auto_selectable_formatsKrzysztof Kozlowski
2024-05-27ASoC: Constify channel mapping array arguments in set_channel_map()Krzysztof Kozlowski
2023-10-27ASoC: soc-dai: add flag to mute and unmute stream during triggerSrinivas Kandagatla
2023-08-14ASoC: soc-dai.h: remove unused call back functionsKuninori Morimoto
2023-08-14ASoC: soc-dai.h: merge DAI call back functions into opsKuninori Morimoto
2023-07-17ASoC: soc-core.c: enable multi ComponentKuninori Morimoto
2023-07-17ASoC: soc-dai.c: add DAI get/match functionsKuninori Morimoto
2023-01-31ASoC: soc-dai.h: cleanup Playback/Capture data for snd_soc_daiKuninori Morimoto
2023-01-31ASoC: soc-dai.h: add snd_soc_dai_get/set_widget_playback/capture() helperKuninori Morimoto
2023-01-31ASoC: soc-dai.h: add snd_soc_dai_tdm_mask_set/get() helperKuninori Morimoto
2023-01-31ASoC: soc-dai.h: add snd_soc_dai_dma_data_set/get() for low levelKuninori Morimoto
2023-01-31ASoC: soc-dai.h: add missing snd_soc_dai_set_widget()Kuninori Morimoto