checksum_32.h (804B)
1/* 2 * Licensed under the GPL 3 */ 4 5#ifndef __UM_SYSDEP_CHECKSUM_H 6#define __UM_SYSDEP_CHECKSUM_H 7 8static inline __sum16 ip_compute_csum(const void *buff, int len) 9{ 10 return csum_fold (csum_partial(buff, len, 0)); 11} 12 13#define _HAVE_ARCH_IPV6_CSUM 14static __inline__ __sum16 csum_ipv6_magic(const struct in6_addr *saddr, 15 const struct in6_addr *daddr, 16 __u32 len, __u8 proto, 17 __wsum sum) 18{ 19 __asm__( 20 "addl 0(%1), %0 ;\n" 21 "adcl 4(%1), %0 ;\n" 22 "adcl 8(%1), %0 ;\n" 23 "adcl 12(%1), %0 ;\n" 24 "adcl 0(%2), %0 ;\n" 25 "adcl 4(%2), %0 ;\n" 26 "adcl 8(%2), %0 ;\n" 27 "adcl 12(%2), %0 ;\n" 28 "adcl %3, %0 ;\n" 29 "adcl %4, %0 ;\n" 30 "adcl $0, %0 ;\n" 31 : "=&r" (sum) 32 : "r" (saddr), "r" (daddr), 33 "r"(htonl(len)), "r"(htonl(proto)), "0"(sum)); 34 35 return csum_fold(sum); 36} 37 38#endif