root/arch/arm64/include/asm/checksum.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. csum_fold
  2. ip_fast_csum

   1 /* SPDX-License-Identifier: GPL-2.0-only */
   2 /*
   3  * Copyright (C) 2016 ARM Ltd.
   4  */
   5 #ifndef __ASM_CHECKSUM_H
   6 #define __ASM_CHECKSUM_H
   7 
   8 #include <linux/types.h>
   9 
  10 static inline __sum16 csum_fold(__wsum csum)
  11 {
  12         u32 sum = (__force u32)csum;
  13         sum += (sum >> 16) | (sum << 16);
  14         return ~(__force __sum16)(sum >> 16);
  15 }
  16 #define csum_fold csum_fold
  17 
  18 static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
  19 {
  20         __uint128_t tmp;
  21         u64 sum;
  22 
  23         tmp = *(const __uint128_t *)iph;
  24         iph += 16;
  25         ihl -= 4;
  26         tmp += ((tmp >> 64) | (tmp << 64));
  27         sum = tmp >> 64;
  28         do {
  29                 sum += *(const u32 *)iph;
  30                 iph += 4;
  31         } while (--ihl);
  32 
  33         sum += ((sum >> 32) | (sum << 32));
  34         return csum_fold((__force u32)(sum >> 32));
  35 }
  36 #define ip_fast_csum ip_fast_csum
  37 
  38 #include <asm-generic/checksum.h>
  39 
  40 #endif  /* __ASM_CHECKSUM_H */

/* [<][>][^][v][top][bottom][index][help] */