linux/arch/blackfin/include/asm/checksum.h
<<
>>
Prefs
   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