Merge git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[platform/adaptation/renesas_rcar/renesas_kernel.git] / arch / score / lib / checksum_copy.c
1 /*
2  * arch/score/lib/csum_partial_copy.c
3  *
4  * Score Processor version.
5  *
6  * Copyright (C) 2009 Sunplus Core Technology Co., Ltd.
7  *  Lennox Wu <lennox.wu@sunplusct.com>
8  *  Chen Liqin <liqin.chen@sunplusct.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, see the file COPYING, or write
22  * to the Free Software Foundation, Inc.,
23  * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
24  */
25
26 #include <net/checksum.h>
27
28 #include <asm/uaccess.h>
29
30 unsigned int csum_partial_copy(const char *src, char *dst,
31                                 int len, unsigned int sum)
32 {
33         sum = csum_partial(src, len, sum);
34         memcpy(dst, src, len);
35
36         return sum;
37 }
38
39 unsigned int csum_partial_copy_from_user(const char *src, char *dst,
40                                         int len, unsigned int sum,
41                                         int *err_ptr)
42 {
43         int missing;
44
45         missing = copy_from_user(dst, src, len);
46         if (missing) {
47                 memset(dst + len - missing, 0, missing);
48                 *err_ptr = -EFAULT;
49         }
50
51         return csum_partial(dst, len, sum);
52 }