linux/arch/microblaze/include/asm/checksum.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright (C) 2008 Michal Simek <monstr@monstr.eu>
   4 * Copyright (C) 2006 Atmark Techno, Inc.
   5 */
   6
   7#ifndef _ASM_MICROBLAZE_CHECKSUM_H
   8#define _ASM_MICROBLAZE_CHECKSUM_H
   9
  10/*
  11 * computes the checksum of the TCP/UDP pseudo-header
  12 * returns a 16-bit checksum, already complemented
  13 */
  14#define csum_tcpudp_nofold      csum_tcpudp_nofold
  15static inline __wsum
  16csum_tcpudp_nofold(__be32 saddr, __be32 daddr, __u32 len,
  17                   __u8 proto, __wsum sum)
  18{
  19        __asm__("add %0, %0, %1\n\t"
  20                "addc %0, %0, %2\n\t"
  21                "addc %0, %0, %3\n\t"
  22                "addc %0, %0, r0\n\t"
  23                : "+&d" (sum)
  24                : "d" (saddr), "d" (daddr),
  25#ifdef __MICROBLAZEEL__
  26        "d" ((len + proto) << 8)
  27#else
  28        "d" (len + proto)
  29#endif
  30);
  31        return sum;
  32}
  33
  34#include <asm-generic/checksum.h>
  35
  36#endif /* _ASM_MICROBLAZE_CHECKSUM_H */
  37