1 /* 2 * include/asm-xtensa/uaccess.h 3 * 4 * User space memory access functions 5 * 6 * These routines provide basic accessing functions to the user memory 7 * space for the kernel. This header file provides functions such as: 8 * 9 * This file is subject to the terms and conditions of the GNU General Public 10 * License. See the file "COPYING" in the main directory of this archive 11 * for more details. 12 * 13 * Copyright (C) 2001 - 2005 Tensilica Inc. 14 */ 15 16 #ifndef _XTENSA_ASM_UACCESS_H 17 #define _XTENSA_ASM_UACCESS_H 18 19 #include <linux/errno.h> 20 #include <asm/types.h> 21 22 #include <asm/current.h> 23 #include <asm/asm-offsets.h> 24 #include <asm/processor.h> 25 26 /* 27 * user_ok determines whether the access to user-space memory is allowed. 28 * See the equivalent C-macro version below for clarity. 29 * 30 * On error, user_ok branches to a label indicated by parameter 31 * <error>. This implies that the macro falls through to the next 32 * instruction on success. 33 * 34 * Note that while this macro can be used independently, we designed 35 * in for optimal use in the access_ok macro below (i.e., we fall 36 * through on success). 37 * 38 * On Entry: 39 * <aa> register containing memory address 40 * <as> register containing memory size 41 * <at> temp register 42 * <error> label to branch to on error; implies fall-through 43 * macro on success 44 * On Exit: 45 * <aa> preserved 46 * <as> preserved 47 * <at> destroyed (actually, (TASK_SIZE + 1 - size)) 48 */ 49 .macro user_ok aa, as, at, error 50 movi \at, __XTENSA_UL_CONST(TASK_SIZE) 51 bgeu \as, \at, \error 52 sub \at, \at, \as 53 bgeu \aa, \at, \error 54 .endm 55 56 /* 57 * access_ok determines whether a memory access is allowed. See the 58 * equivalent C-macro version below for clarity. 59 * 60 * On error, access_ok branches to a label indicated by parameter 61 * <error>. This implies that the macro falls through to the next 62 * instruction on success. 63 * 64 * Note that we assume success is the common case, and we optimize the 65 * branch fall-through case on success. 66 * 67 * On Entry: 68 * <aa> register containing memory address 69 * <as> register containing memory size 70 * <at> temp register 71 * <sp> 72 * <error> label to branch to on error; implies fall-through 73 * macro on success 74 * On Exit: 75 * <aa> preserved 76 * <as> preserved 77 * <at> destroyed 78 */ 79 .macro access_ok aa, as, at, sp, error 80 user_ok \aa, \as, \at, \error 81 .Laccess_ok_\@: 82 .endm 83 84 #endif /* _XTENSA_ASM_UACCESS_H */ 85