xref: /freebsd-src/sys/compat/linuxkpi/common/include/asm/uaccess.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
18d59ecb2SHans Petter Selasky /*-
28d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Isilon Systems, Inc.
38d59ecb2SHans Petter Selasky  * Copyright (c) 2010 iX Systems, Inc.
48d59ecb2SHans Petter Selasky  * Copyright (c) 2010 Panasas, Inc.
58d59ecb2SHans Petter Selasky  * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
68d59ecb2SHans Petter Selasky  * All rights reserved.
78d59ecb2SHans Petter Selasky  *
88d59ecb2SHans Petter Selasky  * Redistribution and use in source and binary forms, with or without
98d59ecb2SHans Petter Selasky  * modification, are permitted provided that the following conditions
108d59ecb2SHans Petter Selasky  * are met:
118d59ecb2SHans Petter Selasky  * 1. Redistributions of source code must retain the above copyright
128d59ecb2SHans Petter Selasky  *    notice unmodified, this list of conditions, and the following
138d59ecb2SHans Petter Selasky  *    disclaimer.
148d59ecb2SHans Petter Selasky  * 2. Redistributions in binary form must reproduce the above copyright
158d59ecb2SHans Petter Selasky  *    notice, this list of conditions and the following disclaimer in the
168d59ecb2SHans Petter Selasky  *    documentation and/or other materials provided with the distribution.
178d59ecb2SHans Petter Selasky  *
188d59ecb2SHans Petter Selasky  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
198d59ecb2SHans Petter Selasky  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
208d59ecb2SHans Petter Selasky  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
218d59ecb2SHans Petter Selasky  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
228d59ecb2SHans Petter Selasky  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
238d59ecb2SHans Petter Selasky  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
248d59ecb2SHans Petter Selasky  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
258d59ecb2SHans Petter Selasky  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
268d59ecb2SHans Petter Selasky  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
278d59ecb2SHans Petter Selasky  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
288d59ecb2SHans Petter Selasky  */
29307f78f3SVladimir Kondratyev #ifndef _LINUXKPI_ASM_UACCESS_H_
30307f78f3SVladimir Kondratyev #define _LINUXKPI_ASM_UACCESS_H_
318d59ecb2SHans Petter Selasky 
328d59ecb2SHans Petter Selasky #include <linux/uaccess.h>
338d59ecb2SHans Petter Selasky 
348d59ecb2SHans Petter Selasky static inline long
copy_to_user(void * to,const void * from,unsigned long n)358d59ecb2SHans Petter Selasky copy_to_user(void *to, const void *from, unsigned long n)
368d59ecb2SHans Petter Selasky {
373a8bec33SHans Petter Selasky 	if (linux_copyout(from, to, n) != 0)
388d59ecb2SHans Petter Selasky 		return n;
398d59ecb2SHans Petter Selasky 	return 0;
408d59ecb2SHans Petter Selasky }
41fb2faed8SHans Petter Selasky #define	__copy_to_user(...)	copy_to_user(__VA_ARGS__)
428d59ecb2SHans Petter Selasky 
438d59ecb2SHans Petter Selasky static inline long
copy_from_user(void * to,const void * from,unsigned long n)448d59ecb2SHans Petter Selasky copy_from_user(void *to, const void *from, unsigned long n)
458d59ecb2SHans Petter Selasky {
463a8bec33SHans Petter Selasky 	if (linux_copyin(from, to, n) != 0)
478d59ecb2SHans Petter Selasky 		return n;
488d59ecb2SHans Petter Selasky 	return 0;
498d59ecb2SHans Petter Selasky }
50fb2faed8SHans Petter Selasky #define	__copy_from_user(...)	copy_from_user(__VA_ARGS__)
51fb2faed8SHans Petter Selasky #define	__copy_in_user(...)	copy_from_user(__VA_ARGS__)
528d59ecb2SHans Petter Selasky 
533137d2d4SJohannes Lundberg #define	user_access_begin(ptr, len) access_ok(ptr, len)
5493ed9ab2SHans Petter Selasky #define	user_access_end() do { } while (0)
5593ed9ab2SHans Petter Selasky 
56*4f689b30SEmmanuel Vadot #define	user_write_access_begin(ptr, len) access_ok(ptr, len)
57*4f689b30SEmmanuel Vadot #define	user_write_access_end() do { } while (0)
58*4f689b30SEmmanuel Vadot 
5993ed9ab2SHans Petter Selasky #define	unsafe_get_user(x, ptr, err) do { \
6093ed9ab2SHans Petter Selasky 	if (unlikely(__get_user(x, ptr))) \
6193ed9ab2SHans Petter Selasky 		goto err; \
6293ed9ab2SHans Petter Selasky } while (0)
6393ed9ab2SHans Petter Selasky 
6493ed9ab2SHans Petter Selasky #define	unsafe_put_user(x, ptr, err) do { \
6593ed9ab2SHans Petter Selasky 	if (unlikely(__put_user(x, ptr))) \
6693ed9ab2SHans Petter Selasky 		goto err; \
6793ed9ab2SHans Petter Selasky } while (0)
6893ed9ab2SHans Petter Selasky 
69307f78f3SVladimir Kondratyev #endif	/* _LINUXKPI_ASM_UACCESS_H_ */
70