1/* 2 * Copyright (C) 2008 Michal Simek <monstr@monstr.eu> 3 * Copyright (C) 2006 Atmark Techno, Inc. 4 * 5 * This file is subject to the terms and conditions of the GNU General Public 6 * License. See the file "COPYING" in the main directory of this archive 7 * for more details. 8 */ 9 10#ifndef _ASM_MICROBLAZE_CHECKSUM_H 11#define _ASM_MICROBLAZE_CHECKSUM_H 12 13/* 14 * computes the checksum of the TCP/UDP pseudo-header 15 * returns a 16-bit checksum, already complemented 16 */ 17#define csum_tcpudp_nofold csum_tcpudp_nofold 18static inline __wsum 19csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, 20 unsigned short proto, __wsum sum) 21{ 22 __asm__("add %0, %0, %1\n\t" 23 "addc %0, %0, %2\n\t" 24 "addc %0, %0, %3\n\t" 25 "addc %0, %0, r0\n\t" 26 : "+&d" (sum) 27 : "d" (saddr), "d" (daddr), 28#ifdef __MICROBLAZEEL__ 29 "d" ((len + proto) << 8) 30#else 31 "d" (len + proto) 32#endif 33); 34 return sum; 35} 36 37#include <asm-generic/checksum.h> 38 39#endif /* _ASM_MICROBLAZE_CHECKSUM_H */ 40