| /* SPDX-License-Identifier: GPL-2.0 */ | |
| #ifndef _ASM_UACCESS_H | |
| #define _ASM_UACCESS_H | |
| #include <linux/string.h> | |
| static inline __must_check unsigned long | |
| raw_copy_from_user(void *to, const void __user * from, unsigned long n) | |
| { | |
| if (__builtin_constant_p(n)) { | |
| switch(n) { | |
| case 1: | |
| *(u8 *)to = *(u8 __force *)from; | |
| return 0; | |
| case 2: | |
| *(u16 *)to = *(u16 __force *)from; | |
| return 0; | |
| case 4: | |
| *(u32 *)to = *(u32 __force *)from; | |
| return 0; | |
| } | |
| } | |
| memcpy(to, (const void __force *)from, n); | |
| return 0; | |
| } | |
| static inline __must_check unsigned long | |
| raw_copy_to_user(void __user *to, const void *from, unsigned long n) | |
| { | |
| if (__builtin_constant_p(n)) { | |
| switch(n) { | |
| case 1: | |
| *(u8 __force *)to = *(u8 *)from; | |
| return 0; | |
| case 2: | |
| *(u16 __force *)to = *(u16 *)from; | |
| return 0; | |
| case 4: | |
| *(u32 __force *)to = *(u32 *)from; | |
| return 0; | |
| default: | |
| break; | |
| } | |
| } | |
| memcpy((void __force *)to, from, n); | |
| return 0; | |
| } | |
| #define INLINE_COPY_FROM_USER | |
| #define INLINE_COPY_TO_USER | |
| #include <asm-generic/uaccess.h> | |
| #endif |