Aurelien Jacquiot | 09831ca | 2011-10-04 11:15:51 -0400 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2011 Texas Instruments Incorporated |
| 3 | * Author: Mark Salter <msalter@redhat.com> |
| 4 | * |
| 5 | * This program is free software; you can redistribute it and/or modify |
| 6 | * it under the terms of the GNU General Public License version 2 as |
| 7 | * published by the Free Software Foundation. |
| 8 | */ |
| 9 | #ifndef _ASM_C6X_CHECKSUM_H |
| 10 | #define _ASM_C6X_CHECKSUM_H |
| 11 | |
| 12 | static inline __wsum |
| 13 | csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, |
| 14 | unsigned short proto, __wsum sum) |
| 15 | { |
| 16 | unsigned long long tmp; |
| 17 | |
| 18 | asm ("add .d1 %1,%5,%1\n" |
| 19 | "|| addu .l1 %3,%4,%0\n" |
| 20 | "addu .l1 %2,%0,%0\n" |
| 21 | #ifndef CONFIG_CPU_BIG_ENDIAN |
| 22 | "|| shl .s1 %1,8,%1\n" |
| 23 | #endif |
| 24 | "addu .l1 %1,%0,%0\n" |
| 25 | "add .l1 %P0,%p0,%2\n" |
| 26 | : "=&a"(tmp), "+a"(len), "+a"(sum) |
| 27 | : "a" (saddr), "a" (daddr), "a" (proto)); |
| 28 | return sum; |
| 29 | } |
| 30 | #define csum_tcpudp_nofold csum_tcpudp_nofold |
| 31 | |
| 32 | #include <asm-generic/checksum.h> |
| 33 | |
| 34 | #endif /* _ASM_C6X_CHECKSUM_H */ |