From e43b452e28fb334fc1d62027b19e17ed40befdde Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Sat, 14 Jul 2012 12:15:57 -0500 Subject: Makefile: Use MIPS generic in_cksum when no target specific implementation The MIPS in_cksum.c method supports big and little endian targets. This does not include any inline assembly and should be reasonable for most targets. --- Makefile | 128 +++++++++++++++++++++- freebsd-to-rtems.py | 38 ++++++- rtemsbsd/sparc/include/freebsd/machine/in_cksum.h | 77 ------------- 3 files changed, 161 insertions(+), 82 deletions(-) delete mode 100644 rtemsbsd/sparc/include/freebsd/machine/in_cksum.h diff --git a/Makefile b/Makefile index f4be0565..031ae693 100644 --- a/Makefile +++ b/Makefile @@ -16,6 +16,8 @@ CFLAGS += -std=gnu99 CFLAGS += -MT $@ -MD -MP -MF $(basename $@).d NEED_DUMMY_PIC_IRQ=yes +GENERATED_FILES = + C_FILES = C_FILES += rtemsbsd/dev/usb/controller/ohci_lpc24xx.c C_FILES += rtemsbsd/dev/usb/controller/ohci_lpc32xx.c @@ -443,6 +445,61 @@ endif ifeq ($(RTEMS_CPU), sparc64) C_FILES += freebsd/sparc64/sparc64/in_cksum.c endif +ifeq ($(RTEMS_CPU), avr) +GENERATED_FILES += rtemsbsd/avr/avr/in_cksum.c +GENERATED_FILES += rtemsbsd/avr/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/avr/avr/in_cksum.c +endif +ifeq ($(RTEMS_CPU), bfin) +GENERATED_FILES += rtemsbsd/bfin/bfin/in_cksum.c +GENERATED_FILES += rtemsbsd/bfin/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/bfin/bfin/in_cksum.c +endif +ifeq ($(RTEMS_CPU), h8300) +GENERATED_FILES += rtemsbsd/h8300/h8300/in_cksum.c +GENERATED_FILES += rtemsbsd/h8300/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/h8300/h8300/in_cksum.c +endif +ifeq ($(RTEMS_CPU), lm32) +GENERATED_FILES += rtemsbsd/lm32/lm32/in_cksum.c +GENERATED_FILES += rtemsbsd/lm32/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/lm32/lm32/in_cksum.c +endif +ifeq ($(RTEMS_CPU), m32c) +GENERATED_FILES += rtemsbsd/m32c/m32c/in_cksum.c +GENERATED_FILES += rtemsbsd/m32c/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/m32c/m32c/in_cksum.c +endif +ifeq ($(RTEMS_CPU), m32r) +GENERATED_FILES += rtemsbsd/m32r/m32r/in_cksum.c +GENERATED_FILES += rtemsbsd/m32r/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/m32r/m32r/in_cksum.c +endif +ifeq ($(RTEMS_CPU), m68k) +GENERATED_FILES += rtemsbsd/m68k/m68k/in_cksum.c +GENERATED_FILES += rtemsbsd/m68k/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/m68k/m68k/in_cksum.c +endif +ifeq ($(RTEMS_CPU), nios2) +GENERATED_FILES += rtemsbsd/nios2/nios2/in_cksum.c +GENERATED_FILES += rtemsbsd/nios2/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/nios2/nios2/in_cksum.c +endif +ifeq ($(RTEMS_CPU), sh) +GENERATED_FILES += rtemsbsd/sh/sh/in_cksum.c +GENERATED_FILES += rtemsbsd/sh/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/sh/sh/in_cksum.c +endif +ifeq ($(RTEMS_CPU), sparc) +GENERATED_FILES += rtemsbsd/sparc/sparc/in_cksum.c +GENERATED_FILES += rtemsbsd/sparc/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/sparc/sparc/in_cksum.c +endif +ifeq ($(RTEMS_CPU), v850) +GENERATED_FILES += rtemsbsd/v850/v850/in_cksum.c +GENERATED_FILES += rtemsbsd/v850/include/freebsd/machine/in_cksum.h +C_FILES += rtemsbsd/v850/v850/in_cksum.c +endif ifeq ($(NEED_DUMMY_PIC_IRQ),yes) CFLAGS += -I rtems-dummy-pic-irq/include @@ -452,7 +509,7 @@ C_D_FILES = $(C_FILES:%.c=%.d) LIB = libbsd.a -all: $(LIB) lib_user +all: $(GENERATED_FILES) $(LIB) lib_user $(LIB): $(C_O_FILES) $(AR) rcu $@ $^ @@ -460,6 +517,73 @@ $(LIB): $(C_O_FILES) lib_user: $(LIB) install_bsd $(MAKE) -C freebsd-userspace +# The following targets use the MIPS Generic in_cksum routine +rtemsbsd/avr/avr/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/avr/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/bfin/bfin/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/bfin/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/h8300/h8300/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/h8300/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/lm32/lm32/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/lm32/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/m32c/m32c/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/m32c/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/m32r/m32r/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/m32r/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/m68k/m68k/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/m68k/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/nios2/nios2/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/nios2/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/sh/sh/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/sh/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/sparc/sparc/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/sparc/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + +rtemsbsd/v850/v850/in_cksum.c: freebsd/mips/mips/in_cksum.c + cp $< $@ + +rtemsbsd/v850/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h + cp $< $@ + CPU_SED = sed CPU_SED += -e '/arm/d' CPU_SED += -e '/i386/d' @@ -488,7 +612,7 @@ install_user: clean: rm -f -r $(PROJECT_INCLUDE)/rtems/freebsd - rm -f $(LIB) $(C_O_FILES) $(C_D_FILES) + rm -f $(LIB) $(C_O_FILES) $(C_D_FILES) $(GENERATED_FILES) rm -f libbsd.html $(MAKE) -C freebsd-userspace clean diff --git a/freebsd-to-rtems.py b/freebsd-to-rtems.py index 2d0e59e3..9a8f766f 100755 --- a/freebsd-to-rtems.py +++ b/freebsd-to-rtems.py @@ -52,6 +52,21 @@ isOnlyMakefile = False tempFile = "/tmp/tmp_FBRT" filesProcessed = 0 +# currently these all use the MIPS in_cksum method +CPUsNeedingGenericIncksum = [ + "avr", + "bfin", + "h8300", + "lm32", + "m32c", + "m32r", + "m68k", + "nios2", + "sh", + "sparc", + "v850", +] + def usage(): print "freebsd-to-rtems.py [args]" print " -?|-h|--help print this and exit" @@ -346,6 +361,8 @@ class ModuleManager: 'CFLAGS += -std=gnu99\n' \ 'CFLAGS += -MT $@ -MD -MP -MF $(basename $@).d\n' \ 'NEED_DUMMY_PIC_IRQ=yes\n' \ + '\n' \ + 'GENERATED_FILES =\n' \ '\n' data += 'C_FILES =\n' for m in self.modules: @@ -358,6 +375,12 @@ class ModuleManager: if cpu in ("arm", "i386", "lm32", "mips", "powerpc", "sparc"): data += 'NEED_DUMMY_PIC_IRQ=no\n' data += 'endif\n' + for cpu in CPUsNeedingGenericIncksum: + data += 'ifeq ($(RTEMS_CPU), ' + cpu + ')\n' \ + 'GENERATED_FILES += rtemsbsd/' + cpu + '/' + cpu + '/in_cksum.c\n' \ + 'GENERATED_FILES += rtemsbsd/' + cpu + '/include/freebsd/machine/in_cksum.h\n' \ + 'C_FILES += rtemsbsd/' + cpu + '/' + cpu + '/in_cksum.c\n' \ + 'endif\n' data += '\n' \ 'ifeq ($(NEED_DUMMY_PIC_IRQ),yes)\n' \ 'CFLAGS += -I rtems-dummy-pic-irq/include\n' \ @@ -367,7 +390,7 @@ class ModuleManager: '\n' \ 'LIB = libbsd.a\n' \ '\n' \ - 'all: $(LIB) lib_user\n' \ + 'all: $(GENERATED_FILES) $(LIB) lib_user\n' \ '\n' \ '$(LIB): $(C_O_FILES)\n' \ '\t$(AR) rcu $@ $^\n' \ @@ -375,7 +398,16 @@ class ModuleManager: 'lib_user: $(LIB) install_bsd\n' \ '\t$(MAKE) -C freebsd-userspace\n' \ '\n' \ - 'CPU_SED = sed\n' \ + '# The following targets use the MIPS Generic in_cksum routine\n' + for cpu in CPUsNeedingGenericIncksum: + data += 'rtemsbsd/' + cpu + '/' + cpu + '/in_cksum.c: freebsd/mips/mips/in_cksum.c\n' \ + '\tcp $< $@\n' \ + '\n' \ + 'rtemsbsd/' + cpu + '/include/freebsd/machine/in_cksum.h: freebsd/mips/include/freebsd/machine/in_cksum.h\n' \ + '\tcp $< $@\n' \ + '\n' \ + + data += 'CPU_SED = sed\n' \ 'CPU_SED += -e \'/arm/d\'\n' \ 'CPU_SED += -e \'/i386/d\'\n' \ 'CPU_SED += -e \'/powerpc/d\'\n' \ @@ -403,7 +435,7 @@ class ModuleManager: '\n' \ 'clean:\n' \ '\trm -f -r $(PROJECT_INCLUDE)/rtems/freebsd\n' \ - '\trm -f $(LIB) $(C_O_FILES) $(C_D_FILES)\n' \ + '\trm -f $(LIB) $(C_O_FILES) $(C_D_FILES) $(GENERATED_FILES)\n' \ '\trm -f libbsd.html\n' \ '\t$(MAKE) -C freebsd-userspace clean\n' \ '\n' \ diff --git a/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h b/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h deleted file mode 100644 index 37d88e2e..00000000 --- a/rtemsbsd/sparc/include/freebsd/machine/in_cksum.h +++ /dev/null @@ -1,77 +0,0 @@ -/*- - * 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 - -#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_ */ -- cgit v1.2.3