2005-04-17 02:20:36 +04:00
/*
* INET An implementation of the TCP / IP protocol suite for the LINUX
* operating system . INET is implemented using the BSD Socket
* interface as the means of communication with the user level .
*
* M32R specific IP / TCP / UDP checksumming routines
* ( Some code taken from MIPS architecture )
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file " COPYING " in the main directory of this archive
* for more details .
*
* Copyright ( C ) 1994 , 1995 Waldorf Electronics GmbH
* Copyright ( C ) 1998 , 1999 Ralf Baechle
* Copyright ( C ) 2001 - 2005 Hiroyuki Kondo , Hirokazu Takata
*
*/
# include <linux/module.h>
# include <linux/types.h>
2005-10-31 02:03:48 +03:00
# include <linux/string.h>
2005-04-17 02:20:36 +04:00
# include <net/checksum.h>
# include <asm/byteorder.h>
# include <asm/uaccess.h>
/*
* Copy while checksumming , otherwise like csum_partial
*/
unsigned int
csum_partial_copy_nocheck ( const unsigned char * src , unsigned char * dst ,
int len , unsigned int sum )
{
sum = csum_partial ( src , len , sum ) ;
memcpy ( dst , src , len ) ;
return sum ;
}
EXPORT_SYMBOL ( csum_partial_copy_nocheck ) ;
/*
* Copy from userspace and compute checksum . If we catch an exception
* then zero the rest of the buffer .
*/
unsigned int
csum_partial_copy_from_user ( const unsigned char __user * src ,
unsigned char * dst ,
int len , unsigned int sum , int * err_ptr )
{
int missing ;
missing = copy_from_user ( dst , src , len ) ;
if ( missing ) {
memset ( dst + len - missing , 0 , missing ) ;
* err_ptr = - EFAULT ;
}
return csum_partial ( dst , len - missing , sum ) ;
}
EXPORT_SYMBOL ( csum_partial_copy_from_user ) ;
2005-08-24 01:47:57 +04:00
EXPORT_SYMBOL ( csum_partial ) ;