cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

checksum.h (944B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2
      3#ifndef __ASM_CSKY_CHECKSUM_H
      4#define __ASM_CSKY_CHECKSUM_H
      5
      6#include <linux/in6.h>
      7#include <asm/byteorder.h>
      8
      9static inline __sum16 csum_fold(__wsum csum)
     10{
     11	u32 tmp;
     12
     13	asm volatile(
     14	"mov	%1, %0\n"
     15	"rori	%0, 16\n"
     16	"addu	%0, %1\n"
     17	"lsri	%0, 16\n"
     18	: "=r"(csum), "=r"(tmp)
     19	: "0"(csum));
     20
     21	return (__force __sum16) ~csum;
     22}
     23#define csum_fold csum_fold
     24
     25static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
     26		unsigned short len, unsigned short proto, __wsum sum)
     27{
     28	asm volatile(
     29	"clrc\n"
     30	"addc    %0, %1\n"
     31	"addc    %0, %2\n"
     32	"addc    %0, %3\n"
     33	"inct    %0\n"
     34	: "=r"(sum)
     35	: "r"((__force u32)saddr), "r"((__force u32)daddr),
     36#ifdef __BIG_ENDIAN
     37	"r"(proto + len),
     38#else
     39	"r"((proto + len) << 8),
     40#endif
     41	"0" ((__force unsigned long)sum)
     42	: "cc");
     43	return sum;
     44}
     45#define csum_tcpudp_nofold csum_tcpudp_nofold
     46
     47#include <asm-generic/checksum.h>
     48
     49#endif /* __ASM_CSKY_CHECKSUM_H */