Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / arch / sh / include / asm / uaccess_64.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_SH_UACCESS_64_H
3 #define __ASM_SH_UACCESS_64_H
4
5 /*
6  * include/asm-sh/uaccess_64.h
7  *
8  * Copyright (C) 2000, 2001  Paolo Alberelli
9  * Copyright (C) 2003, 2004  Paul Mundt
10  *
11  * User space memory access functions
12  *
13  * Copyright (C) 1999  Niibe Yutaka
14  *
15  *  Based on:
16  *     MIPS implementation version 1.15 by
17  *              Copyright (C) 1996, 1997, 1998 by Ralf Baechle
18  *     and i386 version.
19  */
20
21 #define __get_user_size(x,ptr,size,retval)                      \
22 do {                                                            \
23         retval = 0;                                             \
24         x = 0;                                                  \
25         switch (size) {                                         \
26         case 1:                                                 \
27                 retval = __get_user_asm_b((void *)&x,           \
28                                           (long)ptr);           \
29                 break;                                          \
30         case 2:                                                 \
31                 retval = __get_user_asm_w((void *)&x,           \
32                                           (long)ptr);           \
33                 break;                                          \
34         case 4:                                                 \
35                 retval = __get_user_asm_l((void *)&x,           \
36                                           (long)ptr);           \
37                 break;                                          \
38         case 8:                                                 \
39                 retval = __get_user_asm_q((void *)&x,           \
40                                           (long)ptr);           \
41                 break;                                          \
42         default:                                                \
43                 __get_user_unknown();                           \
44                 break;                                          \
45         }                                                       \
46 } while (0)
47
48 extern long __get_user_asm_b(void *, long);
49 extern long __get_user_asm_w(void *, long);
50 extern long __get_user_asm_l(void *, long);
51 extern long __get_user_asm_q(void *, long);
52 extern void __get_user_unknown(void);
53
54 #define __put_user_size(x,ptr,size,retval)                      \
55 do {                                                            \
56         retval = 0;                                             \
57         switch (size) {                                         \
58         case 1:                                                 \
59                 retval = __put_user_asm_b((void *)&x,           \
60                                           (__force long)ptr);   \
61                 break;                                          \
62         case 2:                                                 \
63                 retval = __put_user_asm_w((void *)&x,           \
64                                           (__force long)ptr);   \
65                 break;                                          \
66         case 4:                                                 \
67                 retval = __put_user_asm_l((void *)&x,           \
68                                           (__force long)ptr);   \
69                 break;                                          \
70         case 8:                                                 \
71                 retval = __put_user_asm_q((void *)&x,           \
72                                           (__force long)ptr);   \
73                 break;                                          \
74         default:                                                \
75                 __put_user_unknown();                           \
76         }                                                       \
77 } while (0)
78
79 extern long __put_user_asm_b(void *, long);
80 extern long __put_user_asm_w(void *, long);
81 extern long __put_user_asm_l(void *, long);
82 extern long __put_user_asm_q(void *, long);
83 extern void __put_user_unknown(void);
84
85 #endif /* __ASM_SH_UACCESS_64_H */