diff options
Diffstat (limited to 'target/linux/ixp4xx/image')
-rw-r--r-- | target/linux/ixp4xx/image/Config.in | 10 | ||||
-rw-r--r-- | target/linux/ixp4xx/image/Makefile | 85 | ||||
-rw-r--r-- | target/linux/ixp4xx/image/apex/Makefile | 40 | ||||
-rw-r--r-- | target/linux/ixp4xx/image/apex/patches/100-slugos-nslu2-armeb_config.patch | 20 | ||||
-rw-r--r-- | target/linux/ixp4xx/image/npe-ucode/Makefile | 40 | ||||
-rw-r--r-- | target/linux/ixp4xx/image/npe-ucode/src/IxNpeMicrocode.h | 143 |
6 files changed, 338 insertions, 0 deletions
diff --git a/target/linux/ixp4xx/image/Config.in b/target/linux/ixp4xx/image/Config.in new file mode 100644 index 0000000000..ef5aed4734 --- /dev/null +++ b/target/linux/ixp4xx/image/Config.in @@ -0,0 +1,10 @@ +config IXP4XX_INCLUDE_UCODE + bool "Build images with Intel IXP4xx Microcode" + depends LINUX_2_6_IXP4XX + default y + help + You must manually download IPL_ixp400NpeLibrary-2_4.zip from + http://www.intel.com/design/network/products/npfamily/ixp400_archives.htm + and put it in the dl/ directory of the build system. + You will need to agree to the Intel Public License to do so - please do read it! + diff --git a/target/linux/ixp4xx/image/Makefile b/target/linux/ixp4xx/image/Makefile new file mode 100644 index 0000000000..70ff0ebf56 --- /dev/null +++ b/target/linux/ixp4xx/image/Makefile @@ -0,0 +1,85 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +include $(TOPDIR)/rules.mk +include $(INCLUDE_DIR)/image.mk + +UCODEFILE:=IPL_ixp400NpeLibrary-2_4.zip + +ifneq ($(CONFIG_IXP4XX_INCLUDE_UCODE),) + define Require/npe-ucode + [ -f $(DL_DIR)/$(UCODEFILE) ] + endef + define Build/Compile/npe + $(MAKE) -C npe-ucode \ + BUILD_DIR="$(KDIR)" \ + TARGET="$(KDIR)" \ + compile + endef + define Image/Build/slug + BIN_DIR=$(BIN_DIR) $(TOPDIR)/scripts/slugimage.pl \ + -L $(KDIR)/apex-nslu2-armeb.bin -m $(KDIR)/NPE-B \ + -k $(BIN_DIR)/openwrt-nslu2-$(KERNEL)-zImage \ + -r rootfs:$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img \ + -p -o $(BIN_DIR)/openwrt-nslu2-$(KERNEL)-$(1).bin + BIN_DIR=$(BIN_DIR) $(TOPDIR)/scripts/slugimage.pl \ + -F -L $(KDIR)/apex-nslu2-armeb.bin -m $(KDIR)/NPE-B \ + -k $(BIN_DIR)/openwrt-nslu2-$(KERNEL)-zImage \ + -r rootfs:$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img \ + -p -o $(BIN_DIR)/openwrt-nslu2-$(KERNEL)-$(1)-16mb.bin + endef +endif + +define Build/Compile + $(MAKE) -C apex \ + BUILD_DIR="$(KDIR)" \ + TARGET="$(KDIR)" \ + compile + $(call Build/Compile/npe) +endef + +define Build/Clean + $(MAKE) -C apex clean + $(MAKE) -C npe-ucode clean +endef + +define Image/Prepare + cp $(LINUX_DIR)/arch/arm/boot/zImage $(KDIR)/zImage +endef + +define Image/BuildKernel + cp $(KDIR)/zImage $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-zImage +# $(shell BIN_DIR=$(BIN_DIR) $(TOPDIR)/scripts/arm-magic.sh) + BIN_DIR=$(BIN_DIR) $(TOPDIR)/scripts/arm-magic.sh +endef + +define Image/Build + $(call Image/Build/$(1),$(1)) +endef + +define Image/Build/jffs2-64k + dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=65536 conv=sync +endef + +define Image/Build/jffs2-128k + dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=131072 conv=sync + $(call Image/Build/slug,$(1)) +endef + +define Image/Build/squashfs + $(call prepare_generic_squashfs,$(KDIR)/root.squashfs) + dd if=$(KDIR)/root.$(1) of=$(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-$(1).img bs=131072 conv=sync + $(call Image/Build/slug,$(1)) +endef + +$(eval $(call BuildImage)) + +$(eval $(call Require,npe-ucode, \ + You must manually download $(UCODEFILE) from \\\ + http://www.intel.com/design/network/products/npfamily/ixp400_archives.htm \\\ + and put it in $(DL_DIR). \\\ + You will need to agree to the Intel Public License to do so - please do read it! \ +)) diff --git a/target/linux/ixp4xx/image/apex/Makefile b/target/linux/ixp4xx/image/apex/Makefile new file mode 100644 index 0000000000..759a4ef75b --- /dev/null +++ b/target/linux/ixp4xx/image/apex/Makefile @@ -0,0 +1,40 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id$ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=apex +PKG_VERSION:=1.5.8 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz +PKG_SOURCE_URL:=ftp://ftp.buici.com/pub/apex/ \ + ftp://metalab.unc.edu/pub/Linux/system/boot/apex/ +PKG_MD5SUM:=bb96cc8d50b4f00ee653f0800643ea8a + +include $(INCLUDE_DIR)/package.mk + +define Build/Configure + $(MAKE) -C $(PKG_BUILD_DIR) \ + ARCH=arm \ + slugos-nslu2-armeb_config +endef + +define Build/Compile + $(MAKE) -C $(PKG_BUILD_DIR) \ + $(TARGET_CONFIGURE_OPTS) \ + ARCH=arm \ + all +endef + +define Build/InstallDev + $(INSTALL_BIN) $(PKG_BUILD_DIR)/apex.bin $(TARGET)/apex-nslu2-armeb.bin +endef + +$(eval $(call Build/DefaultTargets)) diff --git a/target/linux/ixp4xx/image/apex/patches/100-slugos-nslu2-armeb_config.patch b/target/linux/ixp4xx/image/apex/patches/100-slugos-nslu2-armeb_config.patch new file mode 100644 index 0000000000..34cb2a288a --- /dev/null +++ b/target/linux/ixp4xx/image/apex/patches/100-slugos-nslu2-armeb_config.patch @@ -0,0 +1,20 @@ +--- apex-1.5.6/src/mach-ixp42x/slugos-nslu2-armeb_config 2007-06-02 10:06:45.000000000 +0930 ++++ apex-1.5.6/src/mach-ixp42x/slugos-nslu2-armeb_config~ 2007-06-03 02:22:18.000000000 +0930 +@@ -17,7 +17,7 @@ + # + # General Setup + # +-CONFIG_TARGET_DESCRIPTION="SlugOS NSLU2 (bigendian)" ++CONFIG_TARGET_DESCRIPTION="OpenWRT NSLU2 (bigendian)" + CONFIG_CROSS_COMPILE="" + CONFIG_CC_OPTIMIZE_FOR_SIZE=y + # CONFIG_CC_OPTIMIZE_FOR_SPEED is not set +@@ -143,7 +143,7 @@ + # Overrides + # + CONFIG_ENV_DEFAULT_CMDLINE_OVERRIDE=y +-CONFIG_ENV_DEFAULT_CMDLINE="root=/dev/mtdblock4 rootfstype=jffs2 console=ttyS0,115200" ++CONFIG_ENV_DEFAULT_CMDLINE="root=/dev/mtdblock4 rootfstype=squashfs,jffs2 console=ttyS0,115200 init=/etc/preinit noinitrd" + # CONFIG_ENV_DEFAULT_STARTUP_OVERRIDE is not set + CONFIG_USES_NOR_BOOTFLASH=y + CONFIG_RELOCATE_SIMPLE=y diff --git a/target/linux/ixp4xx/image/npe-ucode/Makefile b/target/linux/ixp4xx/image/npe-ucode/Makefile new file mode 100644 index 0000000000..b5181e81e6 --- /dev/null +++ b/target/linux/ixp4xx/image/npe-ucode/Makefile @@ -0,0 +1,40 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# $Id$ + +include $(TOPDIR)/rules.mk + +PKG_NAME:=npe-ucode +PKG_VERSION:=2.4 +PKG_RELEASE:=1 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE:=IPL_ixp400NpeLibrary-2_4.zip + +include $(INCLUDE_DIR)/package.mk + +define Build/Prepare + rm -rf $(PKG_BUILD_DIR) + mkdir -p $(PKG_BUILD_DIR) + unzip -d $(PKG_BUILD_DIR)/ $(DL_DIR)/$(PKG_SOURCE) + mv $(PKG_BUILD_DIR)/ixp400_xscale_sw/src/npeDl/IxNpeMicrocode.c $(PKG_BUILD_DIR)/ + rm -rf $(PKG_BUILD_DIR)/ixp400_xscale_sw + $(CP) ./src/* $(PKG_BUILD_DIR)/ +endef + +define Build/Compile + (cd $(PKG_BUILD_DIR); \ + $(HOSTCC) -Wall IxNpeMicrocode.c -o IxNpeMicrocode; \ + ./IxNpeMicrocode -be \ + ) +endef + +define Build/InstallDev + $(INSTALL_BIN) $(PKG_BUILD_DIR)/NPE-B $(TARGET)/ +endef + +$(eval $(call Build/DefaultTargets)) diff --git a/target/linux/ixp4xx/image/npe-ucode/src/IxNpeMicrocode.h b/target/linux/ixp4xx/image/npe-ucode/src/IxNpeMicrocode.h new file mode 100644 index 0000000000..1c3d1ff473 --- /dev/null +++ b/target/linux/ixp4xx/image/npe-ucode/src/IxNpeMicrocode.h @@ -0,0 +1,143 @@ +/* + * IxNpeMicrocode.h - Headerfile for compiling the Intel microcode C file + * + * Copyright (C) 2006 Christian Hohnstaedt <chohnstaedt@innominate.com> + * + * This file is released under the GPLv2 + * + * + * compile with + * + * gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode + * + * Executing the resulting binary on your build-host creates the + * "NPE-[ABC].xxxxxxxx" files containing the selected microcode + * + * fetch the IxNpeMicrocode.c from the Intel Access Library. + * It will include this header. + * + * select Images for every NPE from the following + * (used C++ comments for easy uncommenting ....) + */ + +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_TSLOT_SWITCH +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS +// #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL +// #define IX_NPEDL_NPEIMAGE_NPEA_HSS_2_PORT +// #define IX_NPEDL_NPEIMAGE_NPEA_DMA +// #define IX_NPEDL_NPEIMAGE_NPEA_ATM_MPHY_12_PORT +// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_MPHY_1_PORT +// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_SPHY_1_PORT +// #define IX_NPEDL_NPEIMAGE_NPEA_HSS0 +// #define IX_NPEDL_NPEIMAGE_NPEA_WEP + + +// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEB_DMA +// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV +// #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS +#define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL + + +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB +// #define IX_NPEDL_NPEIMAGE_NPEC_DMA +// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_SPAN +// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_FIREWALL +#define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_CCM_ETH +// #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_ETH_LEARN_FILTER_SPAN_FIREWALL +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS +// #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL + + +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <netinet/in.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <errno.h> +#include <endian.h> +#include <byteswap.h> +#include <string.h> + +#if __BYTE_ORDER == __LITTLE_ENDIAN +#define to_le32(x) (x) +#define to_be32(x) bswap_32(x) +#else +#define to_be32(x) (x) +#define to_le32(x) bswap_32(x) +#endif + +struct dl_image { + unsigned magic; + unsigned id; + unsigned size; + unsigned data[0]; +}; + +const unsigned IxNpeMicrocode_array[]; + +int main(int argc, char *argv[]) +{ + struct dl_image *image = (struct dl_image *)IxNpeMicrocode_array; + int imgsiz, i, fd, cnt; + const unsigned *arrayptr = IxNpeMicrocode_array; + const char *names[] = { "IXP425", "IXP465", "unknown" }; + int bigendian = 1; + + if (argc > 1) { + if (!strcmp(argv[1], "-le")) + bigendian = 0; + else if (!strcmp(argv[1], "-be")) + bigendian = 1; + else { + printf("Usage: %s <-le|-be>\n", argv[0]); + return EXIT_FAILURE; + } + } + + for (image = (struct dl_image *)arrayptr, cnt=0; + (image->id != 0xfeedf00d) && (image->magic == 0xfeedf00d); + image = (struct dl_image *)(arrayptr), cnt++) + { + unsigned char field[4]; + imgsiz = image->size + 3; + *(unsigned*)field = to_be32(image->id); + char filename[40], slnk[10]; + + sprintf(filename, "NPE-%c.%08x", (field[0] & 0xf) + 'A', + image->id); + sprintf(slnk, "NPE-%c", (field[0] & 0xf) + 'A'); + printf("Writing image: %s.NPE_%c Func: %2x Rev: %02x.%02x " + "Size: %5d to: '%s'\n", + names[field[0] >> 4], (field[0] & 0xf) + 'A', + field[1], field[2], field[3], imgsiz*4, filename); + fd = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0644); + if (fd >= 0) { + for (i=0; i<imgsiz; i++) { + *(unsigned*)field = bigendian ? + to_be32(arrayptr[i]) : + to_le32(arrayptr[i]); + write(fd, field, sizeof(field)); + } + close(fd); + unlink(slnk); + symlink(filename, slnk); + } else { + perror(filename); + } + arrayptr += imgsiz; + } + close(fd); + return 0; +} |