b.liu | e958203 | 2025-04-17 19:18:16 +0800 | [diff] [blame^] | 1 | /* |
| 2 | * IxNpeMicrocode.h - Headerfile for compiling the Intel microcode C file |
| 3 | * |
| 4 | * Copyright (C) 2006 Christian Hohnstaedt <chohnstaedt@innominate.com> |
| 5 | * |
| 6 | * This file is released under the GPLv2 |
| 7 | * |
| 8 | * |
| 9 | * compile with |
| 10 | * |
| 11 | * gcc -Wall IxNpeMicrocode.c -o IxNpeMicrocode |
| 12 | * |
| 13 | * Executing the resulting binary on your build-host creates the |
| 14 | * "NPE-[ABC].xxxxxxxx" files containing the selected microcode |
| 15 | * |
| 16 | * fetch the IxNpeMicrocode.c from the Intel Access Library. |
| 17 | * It will include this header. |
| 18 | * |
| 19 | * select Images for every NPE from the following |
| 20 | * (used C++ comments for easy uncommenting ....) |
| 21 | */ |
| 22 | |
| 23 | // #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB |
| 24 | // #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB |
| 25 | // #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB |
| 26 | // #define IX_NPEDL_NPEIMAGE_NPEA_HSS_TSLOT_SWITCH |
| 27 | #define IX_NPEDL_NPEIMAGE_NPEA_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV |
| 28 | // #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS |
| 29 | // #define IX_NPEDL_NPEIMAGE_NPEA_ETH_LEARN_FILTER_SPAN_FIREWALL |
| 30 | #define IX_NPEDL_NPEIMAGE_NPEA_HSS_2_PORT |
| 31 | // #define IX_NPEDL_NPEIMAGE_NPEA_DMA |
| 32 | // #define IX_NPEDL_NPEIMAGE_NPEA_ATM_MPHY_12_PORT |
| 33 | // #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_MPHY_1_PORT |
| 34 | // #define IX_NPEDL_NPEIMAGE_NPEA_HSS0_ATM_SPHY_1_PORT |
| 35 | // #define IX_NPEDL_NPEIMAGE_NPEA_HSS0 |
| 36 | // #define IX_NPEDL_NPEIMAGE_NPEA_WEP |
| 37 | |
| 38 | |
| 39 | // #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB |
| 40 | // #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB |
| 41 | // #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB |
| 42 | // #define IX_NPEDL_NPEIMAGE_NPEB_DMA |
| 43 | #define IX_NPEDL_NPEIMAGE_NPEB_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV |
| 44 | // #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS |
| 45 | // #define IX_NPEDL_NPEIMAGE_NPEB_ETH_LEARN_FILTER_SPAN_FIREWALL |
| 46 | |
| 47 | |
| 48 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_MASK_FIREWALL_VLAN_QOS_HDR_CONV_EXTMIB |
| 49 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_VLAN_QOS_HDR_CONV_EXTMIB |
| 50 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_MASK_FIREWALL_VLAN_QOS_EXTMIB |
| 51 | // #define IX_NPEDL_NPEIMAGE_NPEC_DMA |
| 52 | // #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_SPAN |
| 53 | // #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_ETH_LEARN_FILTER_FIREWALL |
| 54 | #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_CCM_ETH |
| 55 | // #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_AES_CCM_EXTSHA_ETH |
| 56 | // #define IX_NPEDL_NPEIMAGE_NPEC_CRYPTO_ETH_LEARN_FILTER_SPAN_FIREWALL |
| 57 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_SPAN_FIREWALL_VLAN_QOS_HDR_CONV |
| 58 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL_VLAN_QOS |
| 59 | // #define IX_NPEDL_NPEIMAGE_NPEC_ETH_LEARN_FILTER_SPAN_FIREWALL |
| 60 | |
| 61 | |
| 62 | #include <stdio.h> |
| 63 | #include <unistd.h> |
| 64 | #include <stdlib.h> |
| 65 | #include <netinet/in.h> |
| 66 | #include <sys/types.h> |
| 67 | #include <sys/stat.h> |
| 68 | #include <fcntl.h> |
| 69 | #include <errno.h> |
| 70 | #include <endian.h> |
| 71 | #include <byteswap.h> |
| 72 | #include <string.h> |
| 73 | |
| 74 | #if __BYTE_ORDER == __LITTLE_ENDIAN |
| 75 | #define to_le32(x) (x) |
| 76 | #define to_be32(x) bswap_32(x) |
| 77 | #else |
| 78 | #define to_be32(x) (x) |
| 79 | #define to_le32(x) bswap_32(x) |
| 80 | #endif |
| 81 | |
| 82 | struct dl_image { |
| 83 | unsigned magic; |
| 84 | unsigned id; |
| 85 | unsigned size; |
| 86 | unsigned data[0]; |
| 87 | }; |
| 88 | |
| 89 | const unsigned IxNpeMicrocode_array[]; |
| 90 | |
| 91 | int main(int argc, char *argv[]) |
| 92 | { |
| 93 | struct dl_image *image = (struct dl_image *)IxNpeMicrocode_array; |
| 94 | int imgsiz, i, fd, cnt; |
| 95 | const unsigned *arrayptr = IxNpeMicrocode_array; |
| 96 | const char *names[] = { "IXP425", "IXP465", "unknown" }; |
| 97 | int bigendian = 1; |
| 98 | |
| 99 | if (argc > 1) { |
| 100 | if (!strcmp(argv[1], "-le")) |
| 101 | bigendian = 0; |
| 102 | else if (!strcmp(argv[1], "-be")) |
| 103 | bigendian = 1; |
| 104 | else { |
| 105 | printf("Usage: %s <-le|-be>\n", argv[0]); |
| 106 | return EXIT_FAILURE; |
| 107 | } |
| 108 | } |
| 109 | |
| 110 | for (image = (struct dl_image *)arrayptr, cnt=0; |
| 111 | (image->id != 0xfeedf00d) && (image->magic == 0xfeedf00d); |
| 112 | image = (struct dl_image *)(arrayptr), cnt++) |
| 113 | { |
| 114 | unsigned char field[4]; |
| 115 | imgsiz = image->size + 3; |
| 116 | *(unsigned*)field = to_be32(image->id); |
| 117 | char filename[40], slnk[10]; |
| 118 | |
| 119 | sprintf(filename, "NPE-%c.%08x", (field[0] & 0xf) + 'A', |
| 120 | image->id); |
| 121 | if (image->id == 0x00090000) |
| 122 | sprintf(slnk, "NPE-%c-HSS", (field[0] & 0xf) + 'A'); |
| 123 | else |
| 124 | sprintf(slnk, "NPE-%c", (field[0] & 0xf) + 'A'); |
| 125 | |
| 126 | printf("Writing image: %s.NPE_%c Func: %2x Rev: %02x.%02x " |
| 127 | "Size: %5d to: '%s'\n", |
| 128 | names[field[0] >> 4], (field[0] & 0xf) + 'A', |
| 129 | field[1], field[2], field[3], imgsiz*4, filename); |
| 130 | fd = open(filename, O_CREAT | O_RDWR | O_TRUNC, 0644); |
| 131 | if (fd >= 0) { |
| 132 | for (i=0; i<imgsiz; i++) { |
| 133 | *(unsigned*)field = bigendian ? |
| 134 | to_be32(arrayptr[i]) : |
| 135 | to_le32(arrayptr[i]); |
| 136 | write(fd, field, sizeof(field)); |
| 137 | } |
| 138 | close(fd); |
| 139 | unlink(slnk); |
| 140 | symlink(filename, slnk); |
| 141 | } else { |
| 142 | perror(filename); |
| 143 | } |
| 144 | arrayptr += imgsiz; |
| 145 | } |
| 146 | close(fd); |
| 147 | return 0; |
| 148 | } |