|  | @@ -0,0 +1,148 @@
 | 
	
		
			
				|  |  | +/*
 | 
	
		
			
				|  |  | + * 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_AES_CCM_EXTSHA_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);
 | 
	
		
			
				|  |  | +		if (image->id == 0x00090000)
 | 
	
		
			
				|  |  | +			sprintf(slnk, "NPE-%c-HSS", (field[0] & 0xf) + 'A');
 | 
	
		
			
				|  |  | +		else
 | 
	
		
			
				|  |  | +			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;
 | 
	
		
			
				|  |  | +}
 |