92 lines
2.3 KiB
C
92 lines
2.3 KiB
C
|
#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 */
|