| 
									
										
										
										
											2005-04-16 15:20:36 -07: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-30 15:03:48 -08:00
										 |  |  | #include <linux/string.h>
 | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <net/checksum.h>
 | 
					
						
							|  |  |  | #include <asm/byteorder.h>
 | 
					
						
							|  |  |  | #include <asm/uaccess.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*
 | 
					
						
							|  |  |  |  * Copy while checksumming, otherwise like csum_partial | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2006-11-14 21:16:55 -08:00
										 |  |  | __wsum | 
					
						
							|  |  |  | csum_partial_copy_nocheck (const void *src, void *dst, int len, __wsum sum) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	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. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2006-11-14 21:16:55 -08:00
										 |  |  | __wsum | 
					
						
							|  |  |  | csum_partial_copy_from_user (const void __user *src, void *dst, | 
					
						
							|  |  |  | 			     int len, __wsum sum, int *err_ptr) | 
					
						
							| 
									
										
										
										
											2005-04-16 15:20:36 -07:00
										 |  |  | { | 
					
						
							|  |  |  | 	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-23 22:47:57 +01:00
										 |  |  | EXPORT_SYMBOL(csum_partial); |