| #ifndef _ASM_CRIS_ARCH_CHECKSUM_H |
| #define _ASM_CRIS_ARCH_CHECKSUM_H |
| * Check values used in TCP/UDP headers. |
| * The gain of doing this in assembler instead of C, is that C doesn't |
| * generate carry-additions for the 32-bit components of the |
| * checksum. Which means it would be necessary to split all those into |
| * 16-bit components and then add. |
| static inline unsigned int |
| csum_tcpudp_nofold(unsigned long saddr, unsigned long daddr, |
| unsigned short len, unsigned short proto, unsigned int sum) |
| __asm__ __volatile__ ("add.d %2, %0\n\t" |
| : "0" (sum), "r" (daddr), "r" (saddr), \ |
| "r" ((ntohs(len) << 16) + (proto << 8))); |
| #endif /* _ASM_CRIS_ARCH_CHECKSUM_H */ |