• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/blackfin/include/asm/
1/*
2 * Copyright 2004-2009 Analog Devices Inc.
3 *                     akbar.hussain@lineo.com
4 *
5 * Licensed under the GPL-2 or later.
6 */
7
8#ifndef _BFIN_CHECKSUM_H
9#define _BFIN_CHECKSUM_H
10
11/*
12 * computes the checksum of the TCP/UDP pseudo-header
13 * returns a 16-bit checksum, already complemented
14 */
15
16static inline __wsum
17__csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len,
18		   unsigned short proto, __wsum sum)
19{
20	unsigned int carry;
21
22	__asm__ ("%0 = %0 + %2;\n\t"
23		"CC = AC0;\n\t"
24		"%1 = CC;\n\t"
25		"%0 = %0 + %1;\n\t"
26		"%0 = %0 + %3;\n\t"
27		"CC = AC0;\n\t"
28		"%1 = CC;\n\t"
29		"%0 = %0 + %1;\n\t"
30		"%0 = %0 + %4;\n\t"
31		"CC = AC0;\n\t"
32		"%1 = CC;\n\t"
33		"%0 = %0 + %1;\n\t"
34		: "=d" (sum), "=&d" (carry)
35		: "d" (daddr), "d" (saddr), "d" ((len + proto) << 8), "0"(sum)
36		: "CC");
37
38	return (sum);
39}
40#define csum_tcpudp_nofold __csum_tcpudp_nofold
41
42#include <asm-generic/checksum.h>
43
44#endif
45