diff options
| author | Kumar Gala <galak@freescale.com> | 2005-10-20 12:44:46 -0400 |
|---|---|---|
| committer | Paul Mackerras <paulus@samba.org> | 2005-10-26 01:54:31 -0400 |
| commit | d95bbcb3a344b3eb84b45d162c0a20348f0af37f (patch) | |
| tree | 036e03b868b09e3b064489ff7d8f2ccca26a9dda /include/asm-ppc | |
| parent | 60dda2565bbf31bbe662fd143a41c861b7a190cf (diff) | |
[PATCH] powerpc: merge include/asm-ppc*/checksum.h into include/asm-powerpc/checksum.h
Signed-off-by: Kumar Gala <kumar.gala@freescale.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'include/asm-ppc')
| -rw-r--r-- | include/asm-ppc/checksum.h | 107 |
1 files changed, 0 insertions, 107 deletions
diff --git a/include/asm-ppc/checksum.h b/include/asm-ppc/checksum.h deleted file mode 100644 index cf953a92c7ab..000000000000 --- a/include/asm-ppc/checksum.h +++ /dev/null | |||
| @@ -1,107 +0,0 @@ | |||
| 1 | #ifdef __KERNEL__ | ||
| 2 | #ifndef _PPC_CHECKSUM_H | ||
| 3 | #define _PPC_CHECKSUM_H | ||
| 4 | |||
| 5 | |||
| 6 | /* | ||
| 7 | * computes the checksum of a memory block at buff, length len, | ||
| 8 | * and adds in "sum" (32-bit) | ||
| 9 | * | ||
| 10 | * returns a 32-bit number suitable for feeding into itself | ||
| 11 | * or csum_tcpudp_magic | ||
| 12 | * | ||
| 13 | * this function must be called with even lengths, except | ||
| 14 | * for the last fragment, which may be odd | ||
| 15 | * | ||
| 16 | * it's best to have buff aligned on a 32-bit boundary | ||
| 17 | */ | ||
| 18 | extern unsigned int csum_partial(const unsigned char * buff, int len, | ||
| 19 | unsigned int sum); | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Computes the checksum of a memory block at src, length len, | ||
| 23 | * and adds in "sum" (32-bit), while copying the block to dst. | ||
| 24 | * If an access exception occurs on src or dst, it stores -EFAULT | ||
| 25 | * to *src_err or *dst_err respectively (if that pointer is not | ||
| 26 | * NULL), and, for an error on src, zeroes the rest of dst. | ||
| 27 | * | ||
| 28 | * Like csum_partial, this must be called with even lengths, | ||
| 29 | * except for the last fragment. | ||
| 30 | */ | ||
| 31 | extern unsigned int csum_partial_copy_generic(const char *src, char *dst, | ||
| 32 | int len, unsigned int sum, | ||
| 33 | int *src_err, int *dst_err); | ||
| 34 | |||
| 35 | #define csum_partial_copy_from_user(src, dst, len, sum, errp) \ | ||
| 36 | csum_partial_copy_generic((__force void *)(src), (dst), (len), (sum), (errp), NULL) | ||
| 37 | |||
| 38 | /* FIXME: this needs to be written to really do no check -- Cort */ | ||
| 39 | #define csum_partial_copy_nocheck(src, dst, len, sum) \ | ||
| 40 | csum_partial_copy_generic((src), (dst), (len), (sum), NULL, NULL) | ||
| 41 | |||
| 42 | /* | ||
| 43 | * turns a 32-bit partial checksum (e.g. from csum_partial) into a | ||
| 44 | * 1's complement 16-bit checksum. | ||
| 45 | */ | ||
| 46 | static inline unsigned int csum_fold(unsigned int sum) | ||
| 47 | { | ||
| 48 | unsigned int tmp; | ||
| 49 | |||
| 50 | /* swap the two 16-bit halves of sum */ | ||
| 51 | __asm__("rlwinm %0,%1,16,0,31" : "=r" (tmp) : "r" (sum)); | ||
| 52 | /* if there is a carry from adding the two 16-bit halves, | ||
| 53 | it will carry from the lower half into the upper half, | ||
| 54 | giving us the correct sum in the upper half. */ | ||
| 55 | sum = ~(sum + tmp) >> 16; | ||
| 56 | return sum; | ||
| 57 | } | ||
| 58 | |||
| 59 | /* | ||
| 60 | * this routine is used for miscellaneous IP-like checksums, mainly | ||
| 61 | * in icmp.c | ||
| 62 | */ | ||
| 63 | static inline unsigned short ip_compute_csum(unsigned char * buff, int len) | ||
| 64 | { | ||
| 65 | return csum_fold(csum_partial(buff, len, 0)); | ||
| 66 | } | ||
| 67 | |||
| 68 | /* | ||
| 69 | * FIXME: I swiped this one from the sparc and made minor modifications. | ||
| 70 | * It may not be correct. -- Cort | ||
| 71 | */ | ||
| 72 | static inline unsigned long csum_tcpudp_nofold(unsigned long saddr, | ||
| 73 | unsigned long daddr, | ||
| 74 | unsigned short len, | ||
| 75 | unsigned short proto, | ||
| 76 | unsigned int sum) | ||
| 77 | { | ||
| 78 | __asm__("\n\ | ||
| 79 | addc %0,%0,%1 \n\ | ||
| 80 | adde %0,%0,%2 \n\ | ||
| 81 | adde %0,%0,%3 \n\ | ||
| 82 | addze %0,%0 \n\ | ||
| 83 | " | ||
| 84 | : "=r" (sum) | ||
| 85 | : "r" (daddr), "r"(saddr), "r"((proto<<16)+len), "0"(sum)); | ||
| 86 | return sum; | ||
| 87 | } | ||
| 88 | |||
| 89 | /* | ||
| 90 | * This is a version of ip_compute_csum() optimized for IP headers, | ||
| 91 | * which always checksum on 4 octet boundaries. ihl is the number | ||
| 92 | * of 32-bit words and is always >= 5. | ||
| 93 | */ | ||
| 94 | extern unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl); | ||
| 95 | |||
| 96 | /* | ||
| 97 | * computes the checksum of the TCP/UDP pseudo-header | ||
| 98 | * returns a 16-bit checksum, already complemented | ||
| 99 | */ | ||
| 100 | extern unsigned short csum_tcpudp_magic(unsigned long saddr, | ||
| 101 | unsigned long daddr, | ||
| 102 | unsigned short len, | ||
| 103 | unsigned short proto, | ||
| 104 | unsigned int sum); | ||
| 105 | |||
| 106 | #endif | ||
| 107 | #endif /* __KERNEL__ */ | ||
