[rtems-libbsd commit] in_cksum() support for SPARC

Sebastian Huber sebh at rtems.org
Tue Apr 17 10:03:20 UTC 2012


Module:    rtems-libbsd
Branch:    master
Commit:    47944816cc00412423b7cfeb3fe62e3acaa8a6e8
Changeset: http://git.rtems.org/rtems-libbsd/commit/?id=47944816cc00412423b7cfeb3fe62e3acaa8a6e8

Author:    Sebastian Huber <sebastian.huber at embedded-brains.de>
Date:      Tue Apr 17 11:39:36 2012 +0200

in_cksum() support for SPARC

---

 Makefile                                          |    3 +
 freebsd-to-rtems.py                               |   11 +++
 rtemsbsd/sparc/include/freebsd/machine/in_cksum.h |   77 +++++++++++++++++++++
 3 files changed, 91 insertions(+), 0 deletions(-)

diff --git a/Makefile b/Makefile
index c7b21cf..cf105eb 100644
--- a/Makefile
+++ b/Makefile
@@ -408,6 +408,9 @@ endif
 ifeq ($(RTEMS_CPU), powerpc)
 C_FILES += freebsd/powerpc/powerpc/in_cksum.c
 endif
+ifeq ($(RTEMS_CPU), sparc)
+C_FILES += freebsd/netinet/in_cksum.c
+endif
 ifeq ($(RTEMS_CPU), sparc64)
 C_FILES += freebsd/sparc64/sparc64/in_cksum.c
 endif
diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py
index 9539368..7a83c2e 100755
--- a/freebsd-to-rtems.py
+++ b/freebsd-to-rtems.py
@@ -1962,6 +1962,11 @@ pf.addSourceFiles(
 
 # in_chksum Module
 in_cksum = Module('in_cksum')
+in_cksum.addRTEMSHeaderFiles(
+	[
+		'sparc/include/freebsd/machine/in_cksum.h',
+        ]
+)
 in_cksum.addCPUDependentHeaderFiles(
 	[
 		'arm/include/in_cksum.h',
@@ -1997,6 +2002,12 @@ in_cksum.addCPUDependentSourceFiles(
 	]
 )
 in_cksum.addCPUDependentSourceFiles(
+	'sparc',
+	[
+		'netinet/in_cksum.c',
+	]
+)
+in_cksum.addCPUDependentSourceFiles(
 	'sparc64',
 	[
 		'sparc64/sparc64/in_cksum.c',
diff --git a/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h b/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h
new file mode 100644
index 0000000..37d88e2
--- /dev/null
+++ b/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h
@@ -0,0 +1,77 @@
+/*-
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *	from tahoe:	in_cksum.c	1.2	86/01/05
+ *	from:		@(#)in_cksum.c	1.3 (Berkeley) 1/19/91
+ *	from: Id: in_cksum.c,v 1.8 1995/12/03 18:35:19 bde Exp
+ *	from: src/sys/alpha/include/in_cksum.h,v 1.7 2005/03/02 21:33:20 joerg
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_IN_CKSUM_H_
+#define	_MACHINE_IN_CKSUM_H_	1
+
+#include <sys/cdefs.h>
+
+#define	in_cksum(m, len)	in_cksum_skip(m, len, 0)
+
+/*
+ * It it useful to have an Internet checksum routine which is inlineable
+ * and optimized specifically for the task of computing IP header checksums
+ * in the normal case (where there are no options and the header length is
+ * therefore always exactly five 32-bit words.
+ */
+#ifdef __CC_SUPPORTS___INLINE
+
+static __inline void
+in_cksum_update(struct ip *ip)
+{
+	int __tmpsum;
+	__tmpsum = (int)ntohs(ip->ip_sum) + 256;
+	ip->ip_sum = htons(__tmpsum + (__tmpsum >> 16));
+}
+
+#else
+
+#define	in_cksum_update(ip)						\
+	do {								\
+		int __tmpsum;						\
+		__tmpsum = (int)ntohs(ip->ip_sum) + 256;		\
+		ip->ip_sum = htons(__tmpsum + (__tmpsum >> 16));	\
+	} while(0)
+
+#endif
+
+#ifdef _KERNEL
+u_int in_cksum_hdr(const struct ip *ip);
+u_short in_addword(u_short sum, u_short b);
+u_short in_pseudo(u_int sum, u_int b, u_int c);
+u_short in_cksum_skip(struct mbuf *m, int len, int skip);
+#endif
+
+#endif /* _MACHINE_IN_CKSUM_H_ */




More information about the vc mailing list