| #ifndef __ASM_SH_UACCESS_64_H | 
 | #define __ASM_SH_UACCESS_64_H | 
 |  | 
 | /* | 
 |  * include/asm-sh/uaccess_64.h | 
 |  * | 
 |  * Copyright (C) 2000, 2001  Paolo Alberelli | 
 |  * Copyright (C) 2003, 2004  Paul Mundt | 
 |  * | 
 |  * User space memory access functions | 
 |  * | 
 |  * Copyright (C) 1999  Niibe Yutaka | 
 |  * | 
 |  *  Based on: | 
 |  *     MIPS implementation version 1.15 by | 
 |  *              Copyright (C) 1996, 1997, 1998 by Ralf Baechle | 
 |  *     and i386 version. | 
 |  * | 
 |  * This file is subject to the terms and conditions of the GNU General Public | 
 |  * License.  See the file "COPYING" in the main directory of this archive | 
 |  * for more details. | 
 |  */ | 
 |  | 
 | #define __get_user_size(x,ptr,size,retval)			\ | 
 | do {								\ | 
 | 	retval = 0;						\ | 
 | 	switch (size) {						\ | 
 | 	case 1:							\ | 
 | 		retval = __get_user_asm_b((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 2:							\ | 
 | 		retval = __get_user_asm_w((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 4:							\ | 
 | 		retval = __get_user_asm_l((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 8:							\ | 
 | 		retval = __get_user_asm_q((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	default:						\ | 
 | 		__get_user_unknown();				\ | 
 | 		break;						\ | 
 | 	}							\ | 
 | } while (0) | 
 |  | 
 | extern long __get_user_asm_b(void *, long); | 
 | extern long __get_user_asm_w(void *, long); | 
 | extern long __get_user_asm_l(void *, long); | 
 | extern long __get_user_asm_q(void *, long); | 
 | extern void __get_user_unknown(void); | 
 |  | 
 | #define __put_user_size(x,ptr,size,retval)			\ | 
 | do {								\ | 
 | 	retval = 0;						\ | 
 | 	switch (size) {						\ | 
 | 	case 1:							\ | 
 | 		retval = __put_user_asm_b((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 2:							\ | 
 | 		retval = __put_user_asm_w((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 4:							\ | 
 | 		retval = __put_user_asm_l((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	case 8:							\ | 
 | 		retval = __put_user_asm_q((void *)&x,		\ | 
 | 					  (long)ptr);		\ | 
 | 		break;						\ | 
 | 	default:						\ | 
 | 		__put_user_unknown();				\ | 
 | 	}							\ | 
 | } while (0) | 
 |  | 
 | extern long __put_user_asm_b(void *, long); | 
 | extern long __put_user_asm_w(void *, long); | 
 | extern long __put_user_asm_l(void *, long); | 
 | extern long __put_user_asm_q(void *, long); | 
 | extern void __put_user_unknown(void); | 
 |  | 
 | extern long __strnlen_user(const char *__s, long __n); | 
 | extern int __strncpy_from_user(unsigned long __dest, | 
 | 	       unsigned long __user __src, int __count); | 
 |  | 
 | #endif /* __ASM_SH_UACCESS_64_H */ |