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 (2012B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _ALPHA_CHECKSUM_H
      3#define _ALPHA_CHECKSUM_H
      4
      5#include <linux/in6.h>
      6
      7/*
      8 *	This is a version of ip_compute_csum() optimized for IP headers,
      9 *	which always checksum on 4 octet boundaries.
     10 */
     11extern __sum16 ip_fast_csum(const void *iph, unsigned int ihl);
     12
     13/*
     14 * computes the checksum of the TCP/UDP pseudo-header
     15 * returns a 16-bit checksum, already complemented
     16 */
     17__sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
     18			  __u32 len, __u8 proto, __wsum sum);
     19
     20__wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
     21			  __u32 len, __u8 proto, __wsum sum);
     22
     23/*
     24 * computes the checksum of a memory block at buff, length len,
     25 * and adds in "sum" (32-bit)
     26 *
     27 * returns a 32-bit number suitable for feeding into itself
     28 * or csum_tcpudp_magic
     29 *
     30 * this function must be called with even lengths, except
     31 * for the last fragment, which may be odd
     32 *
     33 * it's best to have buff aligned on a 32-bit boundary
     34 */
     35extern __wsum csum_partial(const void *buff, int len, __wsum sum);
     36
     37/*
     38 * the same as csum_partial, but copies from src while it
     39 * checksums
     40 *
     41 * here even more important to align src and dst on a 32-bit (or even
     42 * better 64-bit) boundary
     43 */
     44#define _HAVE_ARCH_COPY_AND_CSUM_FROM_USER
     45#define _HAVE_ARCH_CSUM_AND_COPY
     46__wsum csum_and_copy_from_user(const void __user *src, void *dst, int len);
     47
     48__wsum csum_partial_copy_nocheck(const void *src, void *dst, int len);
     49
     50
     51/*
     52 * this routine is used for miscellaneous IP-like checksums, mainly
     53 * in icmp.c
     54 */
     55
     56extern __sum16 ip_compute_csum(const void *buff, int len);
     57
     58/*
     59 *	Fold a partial checksum without adding pseudo headers
     60 */
     61
     62static inline __sum16 csum_fold(__wsum csum)
     63{
     64	u32 sum = (__force u32)csum;
     65	sum = (sum & 0xffff) + (sum >> 16);
     66	sum = (sum & 0xffff) + (sum >> 16);
     67	return (__force __sum16)~sum;
     68}
     69
     70#define _HAVE_ARCH_IPV6_CSUM
     71extern __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
     72			       const struct in6_addr *daddr,
     73			       __u32 len, __u8 proto, __wsum sum);
     74#endif