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 */