404

[ Avaa Bypassed ]




Upload:

Command:

botdev@18.223.159.203: ~ $
#ifdef __KERNEL__
#ifndef _ASM_M32R_CHECKSUM_H
#define _ASM_M32R_CHECKSUM_H

/*
 * include/asm-m32r/checksum.h
 *
 * IP/TCP/UDP checksum routines
 *
 * This file is subject to the terms and conditions of the GNU General Public
 * License.  See the file "COPYING" in the main directory of this archive
 * for more details.
 *
 * Some code taken from mips and parisc architecture.
 *
 *    Copyright (C) 2001, 2002  Hiroyuki Kondo, Hirokazu Takata
 *    Copyright (C) 2004  Hirokazu Takata <takata at linux-m32r.org>
 */

#include <linux/in6.h>

/*
 * computes the checksum of a memory block at buff, length len,
 * and adds in "sum" (32-bit)
 *
 * returns a 32-bit number suitable for feeding into itself
 * or csum_tcpudp_magic
 *
 * this function must be called with even lengths, except
 * for the last fragment, which may be odd
 *
 * it's best to have buff aligned on a 32-bit boundary
 */
asmlinkage __wsum csum_partial(const void *buff, int len, __wsum sum);

/*
 * The same as csum_partial, but copies from src while it checksums.
 *
 * Here even more important to align src and dst on a 32-bit (or even
 * better 64-bit) boundary
 */
extern __wsum csum_partial_copy_nocheck(const void *src, void *dst,
                                              int len, __wsum sum);

/*
 * This is a new version of the above that records errors it finds in *errp,
 * but continues and zeros thre rest of the buffer.
 */
extern __wsum csum_partial_copy_from_user(const void __user *src, void *dst,
                                                int len, __wsum sum,
                                                int *err_ptr);

/*
 *	Fold a partial checksum
 */

static inline __sum16 csum_fold(__wsum sum)
{
	unsigned long tmpreg;
	__asm__(
		"	sll3	%1, %0, #16 \n"
		"	cmp	%0, %0 \n"
		"	addx	%0, %1 \n"
		"	ldi	%1, #0 \n"
		"	srli	%0, #16 \n"
		"	addx	%0, %1 \n"
		"	xor3	%0, %0, #0x0000ffff \n"
		: "=r" (sum), "=&r" (tmpreg)
		: "0"  (sum)
		: "cbit"
	);
	return (__force __sum16)sum;
}

/*
 * This is a version of ip_compute_csum() optimized for IP headers,
 * which always checksum on 4 octet boundaries.
 */
static inline __sum16 ip_fast_csum(const void *iph, unsigned int ihl)
{
	unsigned long tmpreg0, tmpreg1;
	__wsum sum;

	__asm__ __volatile__(
		"	ld	%0, @%1+ \n"
		"	addi	%2, #-4 \n"
		"#	bgez	%2, 2f \n"
		"	cmp	%0, %0 \n"
		"	ld	%3, @%1+ \n"
		"	ld	%4, @%1+ \n"
		"	addx	%0, %3 \n"
		"	ld	%3, @%1+ \n"
		"	addx	%0, %4 \n"
		"	addx	%0, %3 \n"
		"	.fillinsn\n"
		"1: \n"
		"	ld	%4, @%1+ \n"
		"	addi	%2, #-1 \n"
		"	addx	%0, %4 \n"
		"	bgtz	%2, 1b \n"
		"\n"
		"	ldi	%3, #0 \n"
		"	addx	%0, %3 \n"
		"	.fillinsn\n"
		"2: \n"
	/* Since the input registers which are loaded with iph and ihl
	   are modified, we must also specify them as outputs, or gcc
	   will assume they contain their original values. */
	: "=&r" (sum), "=r" (iph), "=r" (ihl), "=&r" (tmpreg0), "=&r" (tmpreg1)
	: "1" (iph), "2" (ihl)
	: "cbit", "memory");

	return csum_fold(sum);
}

static inline __wsum csum_tcpudp_nofold(__be32 saddr, __be32 daddr,
					__u32 len, __u8 proto,
					__wsum sum)
{
#if defined(__LITTLE_ENDIAN)
	unsigned long len_proto = (proto + len) << 8;
#else
	unsigned long len_proto = proto + len;
#endif
	unsigned long tmpreg;

	__asm__(
		"	cmp	%0, %0 \n"
		"	addx	%0, %2 \n"
		"	addx	%0, %3 \n"
		"	addx	%0, %4 \n"
		"	ldi	%1, #0 \n"
		"	addx	%0, %1 \n"
		: "=r" (sum), "=&r" (tmpreg)
		: "r" (daddr), "r" (saddr), "r" (len_proto), "0" (sum)
		: "cbit"
	);

	return sum;
}

/*
 * computes the checksum of the TCP/UDP pseudo-header
 * returns a 16-bit checksum, already complemented
 */
static inline __sum16 csum_tcpudp_magic(__be32 saddr, __be32 daddr,
					__u32 len, __u8 proto,
					__wsum sum)
{
	return csum_fold(csum_tcpudp_nofold(saddr,daddr,len,proto,sum));
}

/*
 * this routine is used for miscellaneous IP-like checksums, mainly
 * in icmp.c
 */

static inline __sum16 ip_compute_csum(const void *buff, int len)
{
	return csum_fold (csum_partial(buff, len, 0));
}

#define _HAVE_ARCH_IPV6_CSUM
static inline __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
				      const struct in6_addr *daddr,
				      __u32 len, unsigned short proto,
				      __wsum sum)
{
	unsigned long tmpreg0, tmpreg1, tmpreg2, tmpreg3;
	__asm__(
		"	ld	%1, @(%5) \n"
		"	ld	%2, @(4,%5) \n"
		"	ld	%3, @(8,%5) \n"
		"	ld	%4, @(12,%5) \n"
		"	add	%0, %1 \n"
		"	addx	%0, %2 \n"
		"	addx	%0, %3 \n"
		"	addx	%0, %4 \n"
		"	ld	%1, @(%6) \n"
		"	ld	%2, @(4,%6) \n"
		"	ld	%3, @(8,%6) \n"
		"	ld	%4, @(12,%6) \n"
		"	addx	%0, %1 \n"
		"	addx	%0, %2 \n"
		"	addx	%0, %3 \n"
		"	addx	%0, %4 \n"
		"	addx	%0, %7 \n"
		"	addx	%0, %8 \n"
		"	ldi	%1, #0 \n"
		"	addx	%0, %1 \n"
		: "=&r" (sum), "=&r" (tmpreg0), "=&r" (tmpreg1),
		  "=&r" (tmpreg2), "=&r" (tmpreg3)
		: "r" (saddr), "r" (daddr),
		  "r" (htonl(len)), "r" (htonl(proto)), "0" (sum)
		: "cbit"
	);

	return csum_fold(sum);
}

#endif /* _ASM_M32R_CHECKSUM_H */
#endif /* __KERNEL__ */

Filemanager

Name Type Size Permission Actions
m32104ut Folder 0755
m32700ut Folder 0755
mappi2 Folder 0755
mappi3 Folder 0755
opsput Folder 0755
Kbuild File 318 B 0644
addrspace.h File 1.67 KB 0644
asm-offsets.h File 35 B 0644
assembler.h File 4.2 KB 0644
atomic.h File 6.29 KB 0644
barrier.h File 506 B 0644
bitops.h File 6.23 KB 0644
bug.h File 115 B 0644
bugs.h File 410 B 0644
cache.h File 222 B 0644
cachectl.h File 739 B 0644
cacheflush.h File 3.2 KB 0644
checksum.h File 4.83 KB 0644
cmpxchg.h File 4.86 KB 0644
dcache_clear.h File 1.01 KB 0644
delay.h File 31 B 0644
device.h File 148 B 0644
div64.h File 31 B 0644
dma-mapping.h File 570 B 0644
dma.h File 281 B 0644
elf.h File 3.64 KB 0644
emergency-restart.h File 188 B 0644
fb.h File 414 B 0644
flat.h File 4.2 KB 0644
ftrace.h File 12 B 0644
futex.h File 82 B 0644
hardirq.h File 214 B 0644
hw_irq.h File 87 B 0644
io.h File 6.44 KB 0644
irq.h File 2.94 KB 0644
irq_regs.h File 34 B 0644
irqflags.h File 2.24 KB 0644
kdebug.h File 32 B 0644
kmap_types.h File 251 B 0644
linkage.h File 177 B 0644
local.h File 7.8 KB 0644
local64.h File 33 B 0644
m32102.h File 14.71 KB 0644
m32r.h File 5.7 KB 0644
m32r_mp_fpga.h File 14.89 KB 0644
mc146818rtc.h File 671 B 0644
mmu.h File 403 B 0644
mmu_context.h File 4.23 KB 0644
mmzone.h File 1.29 KB 0644
page.h File 2.62 KB 0644
pci.h File 147 B 0644
percpu.h File 165 B 0644
pgalloc.h File 1.84 KB 0644
pgtable-2level.h File 2.31 KB 0644
pgtable.h File 9.7 KB 0644
processor.h File 2.93 KB 0644
ptrace.h File 1.3 KB 0644
rtc.h File 1.99 KB 0644
s1d13806.h File 9.84 KB 0644
segment.h File 228 B 0644
serial.h File 187 B 0644
setup.h File 1022 B 0644
shmparam.h File 197 B 0644
signal.h File 561 B 0644
smp.h File 3.5 KB 0644
spinlock.h File 7.15 KB 0644
spinlock_types.h File 520 B 0644
string.h File 378 B 0644
switch_to.h File 1.48 KB 0644
syscall.h File 252 B 0644
termios.h File 1.74 KB 0644
thread_info.h File 3.71 KB 0644
timex.h File 581 B 0644
tlb.h File 483 B 0644
tlbflush.h File 2.94 KB 0644
topology.h File 167 B 0644
types.h File 258 B 0644
uaccess.h File 15.3 KB 0644
ucontext.h File 321 B 0644
unaligned.h File 592 B 0644
unistd.h File 1.23 KB 0644
user.h File 2.1 KB 0644
vga.h File 436 B 0644
xor.h File 148 B 0644