diff options
author | Rod Whitby <rod@whitby.id.au> | 2007-09-24 14:11:21 +0000 |
---|---|---|
committer | Rod Whitby <rod@whitby.id.au> | 2007-09-24 14:11:21 +0000 |
commit | ba9967c8b79984a03a04efad71a7777dcc16906d (patch) | |
tree | 53aa57fc3efe6cdc0ae0aaedc0a2f159331df6bb | |
parent | 6b5aebd11786e14e67cc1229d653895acd104f92 (diff) |
ixp4xx-npe: Updated to version 2.4 microcode - already well tested in OpenWrt for some months, and now under a redistributable in binary form license.
-rw-r--r-- | packages/ixp4xx/ixp4xx-npe-native-2.4/.mtn2git_empty | 0 | ||||
-rw-r--r-- | packages/ixp4xx/ixp4xx-npe-native-2.4/IxNpeMicrocode.h | 143 | ||||
-rw-r--r-- | packages/ixp4xx/ixp4xx-npe-native_2.4.bb | 19 | ||||
-rw-r--r-- | packages/ixp4xx/ixp4xx-npe_2.4.bb | 37 |
4 files changed, 199 insertions, 0 deletions
diff --git a/packages/ixp4xx/ixp4xx-npe-native-2.4/.mtn2git_empty b/packages/ixp4xx/ixp4xx-npe-native-2.4/.mtn2git_empty new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/packages/ixp4xx/ixp4xx-npe-native-2.4/.mtn2git_empty diff --git a/packages/ixp4xx/ixp4xx-npe-native-2.4/IxNpeMicrocode.h b/packages/ixp4xx/ixp4xx-npe-native-2.4/IxNpeMicrocode.h new file mode 100644 index 0000000000..5cbb4b473c --- /dev/null +++ b/packages/ixp4xx/ixp4xx-npe-native-2.4/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; +} diff --git a/packages/ixp4xx/ixp4xx-npe-native_2.4.bb b/packages/ixp4xx/ixp4xx-npe-native_2.4.bb new file mode 100644 index 0000000000..2b3da60b5d --- /dev/null +++ b/packages/ixp4xx/ixp4xx-npe-native_2.4.bb @@ -0,0 +1,19 @@ +DESCRIPTION = "Firmware converter for the IXP4xx line of devices" +LICENSE = "Intel Software License Agreement" +PR = "r0" + +SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.4.bb-For-Instructions/IPL_ixp400NpeLibrary-2_4.zip" +SRC_URI += "file://IxNpeMicrocode.h" +inherit native +S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl" + +do_compile() { + mv ${WORKDIR}/IxNpeMicrocode.h ${S}/ + gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode +} + +do_stage() { + mv ${S}/IxNpeMicrocode ${S}/IxNpeMicrocode-${PV} + install -d ${STAGING_BINDIR}/ + install -m 0755 ${S}/IxNpeMicrocode-${PV} ${STAGING_BINDIR}/ +} diff --git a/packages/ixp4xx/ixp4xx-npe_2.4.bb b/packages/ixp4xx/ixp4xx-npe_2.4.bb new file mode 100644 index 0000000000..3eca80e882 --- /dev/null +++ b/packages/ixp4xx/ixp4xx-npe_2.4.bb @@ -0,0 +1,37 @@ +DESCRIPTION = "NPE firmware for the IXP4xx line of devices" +LICENSE = "Intel Software Licence Agreement" +PR = "r0" +DEPENDS = "ixp4xx-npe-native" + +# You need to download the IPL_ixp400NpeLibrary-3_0.zip file (without crypto) from: +# http://www.intel.com/design/network/products/npfamily/ixp400_current.htm +# and put it in your downloads directory so bitbake will find it. +# Make sure you *read* and accept the license - it is not a standard one. + +SRC_URI = "http://You-Have-To-Download-The-Microcode-Manually-So-Please-Read-ixp4xx-npe_2.4.bb-For-Instructions/IPL_ixp400NpeLibrary-2_4.zip" +S = "${WORKDIR}/ixp400_xscale_sw/src/npeDl" + +COMPATIBLE_MACHINE = "(nslu2|ixp4xx)" + +FILES_${PN} = "${base_libdir}/firmware/NPE-B ${base_libdir}/firmware/NPE-C" + +do_compile() { + ${STAGING_BINDIR_NATIVE}/IxNpeMicrocode-${PV} -be +} + +do_install() { + install -d ${D}/${base_libdir}/firmware/ + rm ${S}/NPE-B + mv ${S}/NPE-B.* ${S}/NPE-B + install ${S}/NPE-B ${D}/${base_libdir}/firmware/ + rm ${S}/NPE-C + mv ${S}/NPE-C.* ${S}/NPE-C + install ${S}/NPE-C ${D}/${base_libdir}/firmware/ +} + +do_populate_staging() { + install -d ${STAGING_FIRMWARE_DIR} + install ${S}/NPE-B ${STAGING_FIRMWARE_DIR}/ + install ${S}/NPE-C ${STAGING_FIRMWARE_DIR}/ +} + |