checksum.h 806 B

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