2 * Copyright (C) 2011 Texas Instruments Incorporated
3 * Author: Mark Salter <msalter@redhat.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
9 #ifndef _ASM_C6X_UACCESS_H
10 #define _ASM_C6X_UACCESS_H
12 #include <linux/types.h>
13 #include <linux/compiler.h>
14 #include <linux/string.h>
17 * C6X supports unaligned 32 and 64 bit loads and stores.
19 static inline __must_check
unsigned long
20 raw_copy_from_user(void *to
, const void __user
*from
, unsigned long n
)
25 if (__builtin_constant_p(n
)) {
28 *(u8
*)to
= *(u8 __force
*)from
;
31 asm volatile ("ldnw .d1t1 *%2,%0\n"
39 asm volatile ("ldndw .d1t1 *%2,%0\n"
41 "stndw .d1t1 %0,*%1\n"
51 memcpy(to
, (const void __force
*)from
, n
);
55 static inline __must_check
unsigned long
56 raw_copy_to_user(void __user
*to
, const void *from
, unsigned long n
)
61 if (__builtin_constant_p(n
)) {
64 *(u8 __force
*)to
= *(u8
*)from
;
67 asm volatile ("ldnw .d1t1 *%2,%0\n"
75 asm volatile ("ldndw .d1t1 *%2,%0\n"
77 "stndw .d1t1 %0,*%1\n"
87 memcpy((void __force
*)to
, from
, n
);
90 #define INLINE_COPY_FROM_USER
91 #define INLINE_COPY_TO_USER
93 extern int _access_ok(unsigned long addr
, unsigned long size
);
94 #ifdef CONFIG_ACCESS_CHECK
95 #define __access_ok _access_ok
98 #include <asm-generic/uaccess.h>
100 #endif /* _ASM_C6X_UACCESS_H */