diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-17 11:39:36 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2012-04-17 12:03:24 +0200 |
commit | 47944816cc00412423b7cfeb3fe62e3acaa8a6e8 (patch) | |
tree | 57d5b9c0399299947e44c98517d6c4a2b02231d4 | |
parent | Simplify (diff) | |
download | rtems-libbsd-47944816cc00412423b7cfeb3fe62e3acaa8a6e8.tar.bz2 |
in_cksum() support for SPARC
-rw-r--r-- | Makefile | 3 | ||||
-rwxr-xr-x | freebsd-to-rtems.py | 11 | ||||
-rw-r--r-- | rtemsbsd/sparc/include/freebsd/machine/in_cksum.h | 77 |
3 files changed, 91 insertions, 0 deletions
@@ -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 95393686..7a83c2e0 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 00000000..37d88e2e --- /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_ */ |