.. | .. |
---|
12 | 12 | #include <linux/types.h> |
---|
13 | 13 | #include <linux/string.h> |
---|
14 | 14 | |
---|
15 | | -#include <linux/uaccess.h> |
---|
| 15 | +#include <net/checksum.h> |
---|
16 | 16 | |
---|
17 | 17 | /* |
---|
18 | 18 | * XXX Fixme: those 2 inlines are meant for debugging and will go away |
---|
.. | .. |
---|
96 | 96 | out: |
---|
97 | 97 | return result; |
---|
98 | 98 | } |
---|
99 | | - |
---|
100 | | -/* |
---|
101 | | - * XXX Fixme |
---|
102 | | - * |
---|
103 | | - * This is very ugly but temporary. THIS NEEDS SERIOUS ENHANCEMENTS. |
---|
104 | | - * But it's very tricky to get right even in C. |
---|
105 | | - */ |
---|
106 | | -extern unsigned long do_csum(const unsigned char *, long); |
---|
107 | | - |
---|
108 | | -__wsum |
---|
109 | | -csum_partial_copy_from_user(const void __user *src, void *dst, |
---|
110 | | - int len, __wsum psum, int *errp) |
---|
111 | | -{ |
---|
112 | | - unsigned long result; |
---|
113 | | - |
---|
114 | | - /* XXX Fixme |
---|
115 | | - * for now we separate the copy from checksum for obvious |
---|
116 | | - * alignment difficulties. Look at the Alpha code and you'll be |
---|
117 | | - * scared. |
---|
118 | | - */ |
---|
119 | | - |
---|
120 | | - if (__copy_from_user(dst, src, len) != 0 && errp) |
---|
121 | | - *errp = -EFAULT; |
---|
122 | | - |
---|
123 | | - result = do_csum(dst, len); |
---|
124 | | - |
---|
125 | | - /* add in old sum, and carry.. */ |
---|
126 | | - result += (__force u32)psum; |
---|
127 | | - /* 32+c bits -> 32 bits */ |
---|
128 | | - result = (result & 0xffffffff) + (result >> 32); |
---|
129 | | - return (__force __wsum)result; |
---|
130 | | -} |
---|
131 | | - |
---|
132 | | -EXPORT_SYMBOL(csum_partial_copy_from_user); |
---|
133 | | - |
---|
134 | | -__wsum |
---|
135 | | -csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum) |
---|
136 | | -{ |
---|
137 | | - return csum_partial_copy_from_user((__force const void __user *)src, |
---|
138 | | - dst, len, sum, NULL); |
---|
139 | | -} |
---|
140 | | - |
---|
141 | | -EXPORT_SYMBOL(csum_partial_copy_nocheck); |
---|