Viewing file: checksum.h (944 B) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef __ASM_CSKY_CHECKSUM_H #define __ASM_CSKY_CHECKSUM_H
#include <linux/in6.h> #include <asm/byteorder.h>
static inline __sum16 csum_fold(__wsum csum) { u32 tmp;
asm volatile( "mov %1, %0\n" "rori %0, 16\n" "addu %0, %1\n" "lsri %0, 16\n" : "=r"(csum), "=r"(tmp) : "0"(csum));
return (__force __sum16) ~csum; } #define csum_fold csum_fold
static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr, unsigned short len, unsigned short proto, __wsum sum) { asm volatile( "clrc\n" "addc %0, %1\n" "addc %0, %2\n" "addc %0, %3\n" "inct %0\n" : "=r"(sum) : "r"((__force u32)saddr), "r"((__force u32)daddr), #ifdef __BIG_ENDIAN "r"(proto + len), #else "r"((proto + len) << 8), #endif "0" ((__force unsigned long)sum) : "cc"); return sum; } #define csum_tcpudp_nofold csum_tcpudp_nofold
#include <asm-generic/checksum.h>
#endif /* __ASM_CSKY_CHECKSUM_H */
|