diff -Naur ixp400_xscale_sw.orig/Makefile ixp400_xscale_sw/Makefile --- ixp400_xscale_sw.orig/Makefile 2005-08-24 00:16:35.000000000 +0200 +++ ixp400_xscale_sw/Makefile 2005-08-30 19:01:47.000000000 +0200 @@ -93,15 +93,16 @@ # platforms. Components that work only for a subset of platforms # should be added to the relevant *_COMPONENTS lists. # -BI_ENDIAN_COMPONENTS := atmdAcc atmm atmsch qmgr npeMh npeDl ethAcc ethDB ethMii hssAcc usb uartAcc featureCtrl ossl osServices +# Intel default value: atmdAcc atmm atmsch qmgr npeMh npeDl ethAcc ethDB ethMii hssAcc usb uartAcc featureCtrl ossl osServices +BI_ENDIAN_COMPONENTS := qmgr npeMh npeDl ethAcc ethDB ethMii ossl osServices featureCtrl # The lists below contain the set of components available for each target platform vxbe_COMPONENTS := $(BI_ENDIAN_COMPONENTS) perfProfAcc dmaAcc vxle_COMPONENTS := $(BI_ENDIAN_COMPONENTS) perfProfAcc vxsim_COMPONENTS := $(BI_ENDIAN_COMPONENTS) dmaAcc -linuxbe_COMPONENTS := $(BI_ENDIAN_COMPONENTS) perfProfAcc dmaAcc -linuxle_COMPONENTS := $(BI_ENDIAN_COMPONENTS) perfProfAcc +linuxbe_COMPONENTS := $(BI_ENDIAN_COMPONENTS) # perfProfAcc dmaAcc +linuxle_COMPONENTS := $(BI_ENDIAN_COMPONENTS) # perfProfAcc # To facilitate automated builds, do not modify the value of COMPONENTS directly - # just change the per-platform component lists above. @@ -222,10 +223,12 @@ else # IX_TARGET_OS == vxworks # Linux tool names -ifeq ($(IX_TARGET), linuxbe) -LINUX_CROSS_COMPILE := $(HARDHAT_BASE)/devkit/arm/xscale_be/bin/xscale_be- -else -LINUX_CROSS_COMPILE := $(HARDHAT_BASE)/devkit/arm/xscale_le/bin/xscale_le- +ifeq "$(LINUX_CROSS_COMPILE)" "" + ifeq ($(IX_TARGET), linuxbe) + LINUX_CROSS_COMPILE := $(HARDHAT_BASE)/devkit/arm/xscale_be/bin/xscale_be- + else + LINUX_CROSS_COMPILE := $(HARDHAT_BASE)/devkit/arm/xscale_le/bin/xscale_le- + endif endif LD := $(LINUX_CROSS_COMPILE)ld @@ -253,7 +256,9 @@ LINUX_MACH_CFLAGS := -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -Wall -Wno-trigraphs -fno-common -pipe -mapcs-32 -mshort-load-bytes -msoft-float -DMODULE -Isrc/include -I$(NPE_OUTPUT_DIR) -D__linux -DCPU=33 -DXSCALE=33 $(LINUX_MACH_CFLAGS) +CFLAGS := -D__KERNEL__ -I$(LINUX_SRC)/include -Wall -Wno-trigraphs -fno-common -pipe -mapcs-32 -msoft-float -DMODULE -Isrc/include -I$(NPE_OUTPUT_DIR) -D__linux -DCPU=33 -DXSCALE=33 $(LINUX_MACH_CFLAGS) + +# -mshort-load-bytes removed by Marc Singer's patch TODO(hannes) why? # Linux linker flags LDFLAGS := -r @@ -1139,9 +1144,14 @@ ixp400.o : $(OBJ_DIR)/ixp400.o +ixp400.ko : $(OBJ_DIR)/ixp400.o -$(OBJ_DIR)/ixp400.o: $(COMPONENTS:%=$(OBJ_DIR)/ixp400_%.o) $(NPE_PRODUCTION_HEADER_OBJ) $(OSAL_MODULE) +$(OBJ_DIR)/ixp400.o: $(COMPONENTS:%=$(OBJ_DIR)/ixp400_%.o) $(NPE_PRODUCTION_HEADER_OBJ) $(OSAL_MODULE) # add this to hack in the ethAcc codelet: $(OBJ_DIR)/ixp400_codelets_ethAcc.o + touch $(OBJ_DIR)/ixp400.c + cp Makefile.kmod26 $(OBJ_DIR)/Makefile + make -C $(OBJ_DIR) $(LD) $(LDFLAGS) $^ -o $@ + make -C $(OBJ_DIR) diff -Naur ixp400_xscale_sw.orig/Makefile.kmod26 ixp400_xscale_sw/Makefile.kmod26 --- ixp400_xscale_sw.orig/Makefile.kmod26 1970-01-01 01:00:00.000000000 +0100 +++ ixp400_xscale_sw/Makefile.kmod26 2005-08-24 22:33:12.000000000 +0200 @@ -0,0 +1,11 @@ +obj-m := ixp400.o + +PWD := $(shell pwd) + +LINUX_SRC := $($(IX_TARGET)_KERNEL_DIR) + +default: + $(MAKE) ARCH=arm CROSS_COMPILE=$(LINUX_CROSS_COMPILE) V=1 -C $(LINUX_SRC) SUBDIRS=$(PWD) modules + +clean: + rm -f ixp400.ko diff -Naur ixp400_xscale_sw.orig/Readme-Kernel-2_6-Patch.txt ixp400_xscale_sw/Readme-Kernel-2_6-Patch.txt --- ixp400_xscale_sw.orig/Readme-Kernel-2_6-Patch.txt 1970-01-01 01:00:00.000000000 +0100 +++ ixp400_xscale_sw/Readme-Kernel-2_6-Patch.txt 2005-09-28 19:50:30.000000000 +0200 @@ -0,0 +1,49 @@ +This file describes a patch to use version 1.5 of the Intel Ixp4XX +Access Library with Linux 2.6 kernels. + +Authors/History +--------------- + +This patch consists of the changes made by Marc Singer for use of +version 1.5 of the library with the APEX bootloader, and a patch made +by Robin Farine and Tom Winkler for use of version 1.4 of the library +with Linux-2.6 kernels. These changes were merged together by Hannes +Reich. + +Both patches are incorporated in their entirety, with the exception of +some tweaks to sleep times in the ethAcc code and modifications to +the code in src/codelets/usb/ from the Robin Farine / Tom Winkler +patch. + +Status +------ + +This code has been tested on a Linksys NSLU2. It works in big-endian +mode, performance seems around 10% faster than 1.4. + +The code does not work in little-endian mode. It appears as though the +hardware is initialised correctly, but packet receive / transmit done +callbacks are never called. + +Licence Information +------------------- + +The patch is licenced under the same conditions as the original Access +Library 1.5 (INTEL SOFTWARE LICENSE AGREEMENT). The full text of the +licence can be downloaded from: +http://www.intel.com/design/network/swsup/np_sla/ixp400.htm + +The patch is free, unsupported and the authors make no warranties. +Use it at your own risk, do with it as you see fit so long as you do +not violate the original licence agreement. + +The authors permit derivative works based upon the patch. + +References +---------- + +The version 1.4 patch by Robin Farine and Tom Winkler is available from +http://www.wnk.at/ixp400_accesslib_kernel26/data/patch_accesslib_kernel26_20040811.diff + +The version 1.5 patch by Marc Singer is at +http://wiki.buici.com/bin/view/Main/IXPAccessLibrary diff -Naur ixp400_xscale_sw.orig/src/codelets/dmaAcc/IxDmaAccCodelet_p.h ixp400_xscale_sw/src/codelets/dmaAcc/IxDmaAccCodelet_p.h --- ixp400_xscale_sw.orig/src/codelets/dmaAcc/IxDmaAccCodelet_p.h 2005-08-24 00:16:36.000000000 +0200 +++ ixp400_xscale_sw/src/codelets/dmaAcc/IxDmaAccCodelet_p.h 2005-08-24 00:18:02.000000000 +0200 @@ -113,7 +113,7 @@ * @return IX_FAIL - Error initialising codelet */ IX_STATUS -ixDmaAccCodeletInit(IxDmaNpeId npeId); +ixDmaAccCodeletInit(IxNpeDlNpeId npeId); /** * @fn ixDmaAccCodeletTestPerform( UINT16 transferLength, diff -Naur ixp400_xscale_sw.orig/src/ethDB/include/IxEthDB_p.h ixp400_xscale_sw/src/ethDB/include/IxEthDB_p.h --- ixp400_xscale_sw.orig/src/ethDB/include/IxEthDB_p.h 2005-08-24 00:16:36.000000000 +0200 +++ ixp400_xscale_sw/src/ethDB/include/IxEthDB_p.h 2005-08-24 00:18:02.000000000 +0200 @@ -633,7 +633,7 @@ IX_ETH_DB_PUBLIC UINT32 ixEthDBKeyXORHash(void *macAddress); /* Port updates */ -IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBNPEUpdateHandler(IxEthDBPortId portID, IxEthDBFeature type); +IX_ETH_DB_PUBLIC IxEthDBStatus ixEthDBNPEUpdateHandler(IxEthDBPortId portID, IxEthDBRecordType type); IX_ETH_DB_PUBLIC void ixEthDBUpdatePortLearningTrees(IxEthDBPortMap triggerPorts); IX_ETH_DB_PUBLIC void ixEthDBNPEAccessRequest(IxEthDBPortId portID); IX_ETH_DB_PUBLIC void ixEthDBUpdateLock(void); diff -Naur ixp400_xscale_sw.orig/src/include/IxTypes.h ixp400_xscale_sw/src/include/IxTypes.h --- ixp400_xscale_sw.orig/src/include/IxTypes.h 2005-08-24 00:16:36.000000000 +0200 +++ ixp400_xscale_sw/src/include/IxTypes.h 2005-08-26 01:19:15.000000000 +0200 @@ -79,6 +79,10 @@ #endif #endif +#ifndef BIT +#define BIT(x) ((1)<<(x)) +#endif + #include "IxOsalBackward.h" #endif /* IxTypes_H */ diff -Naur ixp400_xscale_sw.orig/src/usb/include/usbprivatetypes.h ixp400_xscale_sw/src/usb/include/usbprivatetypes.h --- ixp400_xscale_sw.orig/src/usb/include/usbprivatetypes.h 2005-08-24 00:16:36.000000000 +0200 +++ ixp400_xscale_sw/src/usb/include/usbprivatetypes.h 2005-08-24 00:18:02.000000000 +0200 @@ -164,6 +164,53 @@ } USBEventProcessor; /* UDC Registers */ + +#undef UDCCR +#undef UDCCS0 +#undef UDCCS1 +#undef UDCCS2 +#undef UDCCS3 +#undef UDCCS4 +#undef UDCCS5 +#undef UDCCS6 +#undef UDCCS7 +#undef UDCCS8 +#undef UDCCS9 +#undef UDCCS10 +#undef UDCCS11 +#undef UDCCS12 +#undef UDCCS13 +#undef UDCCS14 +#undef UDCCS15 +#undef UICR0 +#undef UICR1 +#undef USIR0 +#undef USIR1 +#undef UFNHR +#undef UFNLR +#undef UBCR2 +#undef UBCR4 +#undef UBCR7 +#undef UBCR9 +#undef UBCR12 +#undef UBCR14 +#undef UDDR0 +#undef UDDR5 +#undef UDDR10 +#undef UDDR15 +#undef UDDR1 +#undef UDDR2 +#undef UDDR3 +#undef UDDR4 +#undef UDDR6 +#undef UDDR7 +#undef UDDR8 +#undef UDDR9 +#undef UDDR11 +#undef UDDR12 +#undef UDDR13 +#undef UDDR14 + typedef struct /* UDCRegisters */ { volatile UINT32 UDCCR; @@ -229,6 +276,7 @@ volatile UINT32 UDDR14; } UDCRegisters; + typedef struct /* USBDeviceContext */ { UINT32 checkPattern; /* Check pattern for verifying the context */