blob: ca5073dd459674d1ad835406fc46baa1957d01ac [file] [log] [blame]
Paul Mundta23ba432007-11-28 20:19:38 +09001#ifndef __ASM_SH_UACCESS_64_H
2#define __ASM_SH_UACCESS_64_H
Linus Torvalds1da177e2005-04-16 15:20:36 -07003
4/*
Paul Mundta23ba432007-11-28 20:19:38 +09005 * include/asm-sh/uaccess_64.h
Linus Torvalds1da177e2005-04-16 15:20:36 -07006 *
7 * Copyright (C) 2000, 2001 Paolo Alberelli
8 * Copyright (C) 2003, 2004 Paul Mundt
9 *
10 * User space memory access functions
11 *
12 * Copyright (C) 1999 Niibe Yutaka
13 *
14 * Based on:
15 * MIPS implementation version 1.15 by
16 * Copyright (C) 1996, 1997, 1998 by Ralf Baechle
17 * and i386 version.
18 *
Paul Mundta23ba432007-11-28 20:19:38 +090019 * This file is subject to the terms and conditions of the GNU General Public
20 * License. See the file "COPYING" in the main directory of this archive
21 * for more details.
Linus Torvalds1da177e2005-04-16 15:20:36 -070022 */
Linus Torvalds1da177e2005-04-16 15:20:36 -070023
24#define __get_user_size(x,ptr,size,retval) \
25do { \
26 retval = 0; \
Al Viroc6852382016-08-21 23:33:47 -040027 x = 0; \
Linus Torvalds1da177e2005-04-16 15:20:36 -070028 switch (size) { \
29 case 1: \
Paul Mundt88856d62008-09-29 19:43:44 +090030 retval = __get_user_asm_b((void *)&x, \
31 (long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070032 break; \
33 case 2: \
Paul Mundt88856d62008-09-29 19:43:44 +090034 retval = __get_user_asm_w((void *)&x, \
35 (long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070036 break; \
37 case 4: \
Paul Mundt88856d62008-09-29 19:43:44 +090038 retval = __get_user_asm_l((void *)&x, \
39 (long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070040 break; \
41 case 8: \
Paul Mundt88856d62008-09-29 19:43:44 +090042 retval = __get_user_asm_q((void *)&x, \
43 (long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070044 break; \
45 default: \
46 __get_user_unknown(); \
47 break; \
48 } \
49} while (0)
50
Linus Torvalds1da177e2005-04-16 15:20:36 -070051extern long __get_user_asm_b(void *, long);
52extern long __get_user_asm_w(void *, long);
53extern long __get_user_asm_l(void *, long);
54extern long __get_user_asm_q(void *, long);
55extern void __get_user_unknown(void);
56
57#define __put_user_size(x,ptr,size,retval) \
58do { \
59 retval = 0; \
60 switch (size) { \
61 case 1: \
Paul Mundt88856d62008-09-29 19:43:44 +090062 retval = __put_user_asm_b((void *)&x, \
Michael S. Tsirkin66959ed2015-01-06 14:37:22 +020063 (__force long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070064 break; \
65 case 2: \
Paul Mundt88856d62008-09-29 19:43:44 +090066 retval = __put_user_asm_w((void *)&x, \
Michael S. Tsirkin66959ed2015-01-06 14:37:22 +020067 (__force long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070068 break; \
69 case 4: \
Paul Mundt88856d62008-09-29 19:43:44 +090070 retval = __put_user_asm_l((void *)&x, \
Michael S. Tsirkin66959ed2015-01-06 14:37:22 +020071 (__force long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070072 break; \
73 case 8: \
Paul Mundt88856d62008-09-29 19:43:44 +090074 retval = __put_user_asm_q((void *)&x, \
Michael S. Tsirkin66959ed2015-01-06 14:37:22 +020075 (__force long)ptr); \
Linus Torvalds1da177e2005-04-16 15:20:36 -070076 break; \
77 default: \
78 __put_user_unknown(); \
79 } \
80} while (0)
81
Linus Torvalds1da177e2005-04-16 15:20:36 -070082extern long __put_user_asm_b(void *, long);
83extern long __put_user_asm_w(void *, long);
84extern long __put_user_asm_l(void *, long);
85extern long __put_user_asm_q(void *, long);
86extern void __put_user_unknown(void);
87
Paul Mundta23ba432007-11-28 20:19:38 +090088#endif /* __ASM_SH_UACCESS_64_H */