checksum.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  arch/s390/lib/checksum.c
  3.  *    S390 fast network checksum routines
  4.  *
  5.  *  S390 version
  6.  *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  7.  *    Author(s): Ulrich Hild        (first version),
  8.  *               Martin Schwidefsky (schwidefsky@de.ibm.com),
  9.  *               Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com),
  10.  *
  11.  * This file contains network checksum routines
  12.  */
  13.  
  14. #include <linux/string.h>
  15. #include <linux/types.h>
  16. #include <asm/uaccess.h>
  17. #include <asm/byteorder.h>
  18. #include <asm/checksum.h>
  19. /*
  20.  * computes a partial checksum, e.g. for TCP/UDP fragments
  21.  */
  22. unsigned int
  23. csum_partial (const unsigned char *buff, int len, unsigned int sum)
  24. {
  25.   /*
  26.    * Experiments with ethernet and slip connections show that buff
  27.    * is aligned on either a 2-byte or 4-byte boundary.
  28.    */
  29.         __asm__ __volatile__ (
  30.                 "    lgr  2,%1n"    /* address in gpr 2 */
  31.                 "    lgfr 3,%2n"    /* length in gpr 3 */
  32.                 "0:  cksm %0,2n"    /* do checksum on longs */
  33.                 "    jo   0bn"
  34.                 : "+&d" (sum)
  35.                 : "d" (buff), "d" (len)
  36.                 : "cc", "2", "3" );
  37.         return sum;
  38. }