vserver 2.0 rc7
[linux-2.6.git] / include / asm-sparc64 / checksum.h
index 91136a6..dc8bed2 100644 (file)
@@ -38,47 +38,44 @@ extern unsigned int csum_partial(const unsigned char * buff, int len, unsigned i
  * here even more important to align src and dst on a 32-bit (or even
  * better 64-bit) boundary
  */
-extern unsigned int csum_partial_copy_sparc64(const unsigned char *src, unsigned char *dst,
+extern unsigned int csum_partial_copy_nocheck(const unsigned char *src,
+                                             unsigned char *dst,
                                              int len, unsigned int sum);
-                       
-static inline unsigned int 
-csum_partial_copy_nocheck (const unsigned char *src, unsigned char *dst, int len,
-                          unsigned int sum)
-{
-       int ret;
-       unsigned char cur_ds = get_thread_current_ds();
-       __asm__ __volatile__ ("wr %%g0, %0, %%asi" : : "i" (ASI_P));
-       ret = csum_partial_copy_sparc64(src, dst, len, sum);
-       __asm__ __volatile__ ("wr %%g0, %0, %%asi" : : "r" (cur_ds));
-       return ret;
-}
 
-static inline unsigned int 
-csum_partial_copy_from_user(const unsigned char __user *src, unsigned char *dst, int len,
+extern long __csum_partial_copy_from_user(const unsigned char __user *src,
+                                         unsigned char *dst, int len,
+                                         unsigned int sum);
+
+static inline unsigned int
+csum_partial_copy_from_user(const unsigned char __user *src,
+                           unsigned char *dst, int len,
                            unsigned int sum, int *err)
 {
-       __asm__ __volatile__ ("stx      %0, [%%sp + 0x7ff + 128]"
-                             : : "r" (err));
-       return csum_partial_copy_sparc64((__force const char *) src,
-                                        dst, len, sum);
+       long ret = __csum_partial_copy_from_user(src, dst, len, sum);
+       if (ret < 0)
+               *err = -EFAULT;
+       return (unsigned int) ret;
 }
 
 /* 
  *     Copy and checksum to user
  */
 #define HAVE_CSUM_COPY_USER
-extern unsigned int csum_partial_copy_user_sparc64(const unsigned char *src, unsigned char __user *dst,
-                                                  int len, unsigned int sum);
+extern long __csum_partial_copy_to_user(const unsigned char *src,
+                                       unsigned char __user *dst, int len,
+                                         unsigned int sum);
 
-static inline unsigned int 
-csum_and_copy_to_user(const unsigned char *src, unsigned char __user *dst, int len,
+static inline unsigned int
+csum_and_copy_to_user(const unsigned char *src,
+                     unsigned char __user *dst, int len,
                      unsigned int sum, int *err)
 {
-       __asm__ __volatile__ ("stx      %0, [%%sp + 0x7ff + 128]"
-                             : : "r" (err));
-       return csum_partial_copy_user_sparc64(src, dst, len, sum);
+       long ret = __csum_partial_copy_to_user(src, dst, len, sum);
+       if (ret < 0)
+               *err = -EFAULT;
+       return (unsigned int) ret;
 }
-  
+
 /* ihl is always 5 or greater, almost always is 5, and iph is word aligned
  * the majority of the time.
  */