2 Copyright 2000-2010 Broadcom Corporation
4 Unless you and Broadcom execute a separate written software license
5 agreement governing use of this software, this software is licensed
6 to you under the terms of the GNU General Public License version 2
7 (the
\93GPL?, available at http://www.broadcom.com/licenses/GPLv2.php,
8 with the following added to such license:
10 As a special exception, the copyright holders of this software give
11 you permission to link this software with independent modules, and to
12 copy and distribute the resulting executable under terms of your
13 choice, provided that you also meet, for each linked independent
14 module, the terms and conditions of the license of that module.
15 An independent module is a module which is not derived from this
16 software. The special exception does not apply to any modifications
19 Notwithstanding the above, under no circumstances may you combine this
20 software in any way with any other Broadcom software provided under a
21 license other than the GPL, without Broadcom's express prior written
25 //**************************************************************************************
26 // File Name : bcmTag.h
28 // Description: add tag with validation system to the firmware image file to be uploaded
31 // Created : 02/28/2002 seanl
32 //**************************************************************************************
38 #define BCM_SIG_1 "Broadcom Corporation"
39 #define BCM_SIG_2 "ver. 2.0" // was "firmware version 2.0" now it is split 6 char out for chip id.
41 #define BCM_TAG_VER "6"
43 // file tag (head) structure all is in clear text except validationTokens (crc, md5, sha1, etc). Total: 128 unsigned chars
45 #if 1 //__MSTC__, RaynorChung: Support 963268 nand flash, patch form SVN#3597 on http://svn.zyxel.com.tw/svn/CPE_SW1/BCM96368/trunk/P-870HA/branches/cht/fttb8/4.11
46 #if defined(INC_NAND_FLASH_DRIVER) && (INC_NAND_FLASH_DRIVER==1)
47 #define TAG_BLOCK_LEN 128*1024
49 #define TAG_BLOCK_LEN 256
51 #define TAG_BLOCK_LEN_NAND 128*1024
55 #define SIG_LEN_2 14 // Original second SIG = 20 is now devided into 14 for SIG_LEN_2 and 6 for CHIP_ID
58 #define ADDRESS_LEN 12
61 #define BOARD_ID_LEN 16
62 #if 1//__MSTC__, RaynorChung: Support 963268 nand flash, patch form SVN#3597 on http://svn.zyxel.com.tw/svn/CPE_SW1/BCM96368/trunk/P-870HA/branches/cht/fttb8/4.11
63 #define VERSION_LEN 32
64 #define MODEL_ID_LEN 5
66 #define IMAGE_VER_LEN 32
67 #if 1 //__TELUS__, for HPNA software version
68 #define HPNA_SWVERSION_LEN 8
70 #if 1 //__MSTC__, Dennis merge from ZyXEL ROM-D feature, zongyue
71 #define NEXT_IMAGE_FLAG 1
73 #if 1//__MSTC__, RaynorChung: Support 963268 nand flash, patch form SVN#3597 on http://svn.zyxel.com.tw/svn/CPE_SW1/BCM96368/trunk/P-870HA/branches/cht/fttb8/4.11
74 #define RESERVED_LEN (TAG_LEN - TAG_VER_LEN - SIG_LEN - SIG_LEN_2 - CHIP_ID_LEN - BOARD_ID_LEN - \
75 (4*IMAGE_LEN) - (3*ADDRESS_LEN) - (3*FLAG_LEN) - (2*VERSION_LEN) - \
76 (2*TOKEN_LEN) - NEXT_IMAGE_FLAG)
78 #define RESERVED_LEN (TAG_LEN - TAG_VER_LEN - SIG_LEN - SIG_LEN_2 - CHIP_ID_LEN - BOARD_ID_LEN - \
79 (4*IMAGE_LEN) - (3*ADDRESS_LEN) - (3*FLAG_LEN) - (2*TOKEN_LEN) - IMAGE_VER_LEN)
83 // TAG for downloadable image (kernel plus file system)
84 typedef struct _FILE_TAG
86 char tagVersion[TAG_VER_LEN]; // tag version. Will be 2 here.
87 char signiture_1[SIG_LEN]; // text line for company info
88 char signiture_2[SIG_LEN_2]; // additional info (can be version number)
89 char chipId[CHIP_ID_LEN]; // chip id
90 char boardId[BOARD_ID_LEN]; // board id
91 char bigEndian[FLAG_LEN]; // if = 1 - big, = 0 - little endia of the host
92 char totalImageLen[IMAGE_LEN]; // the sum of all the following length
93 char cfeAddress[ADDRESS_LEN]; // if non zero, cfe starting address
94 char cfeLen[IMAGE_LEN]; // if non zero, cfe size in clear ASCII text.
95 char rootfsAddress[ADDRESS_LEN]; // if non zero, filesystem starting address
96 char rootfsLen[IMAGE_LEN]; // if non zero, filesystem size in clear ASCII text.
97 char kernelAddress[ADDRESS_LEN]; // if non zero, kernel starting address
98 char kernelLen[IMAGE_LEN]; // if non zero, kernel size in clear ASCII text.
99 char imageSequence[FLAG_LEN * 2]; // incrments everytime an image is flashed
100 #if 1//__MSTC__, RaynorChung: Support 963268 nand flash, patch form SVN#3597 on http://svn.zyxel.com.tw/svn/CPE_SW1/BCM96368/trunk/P-870HA/branches/cht/fttb8/4.11
101 char externalversion[VERSION_LEN]; // external version
102 char internalversion[VERSION_LEN]; // internal version
104 char imageVersion[IMAGE_VER_LEN]; // image version
106 #if 1 //__MSTC__, Dennis merge from ZyXEL ROM-D feature, zongyue
107 char imageNext[NEXT_IMAGE_FLAG]; // if non zero, has image at behind
109 char reserved[RESERVED_LEN]; // reserved for later use
110 char imageValidationToken[TOKEN_LEN];// image validation token - can be crc, md5, sha; for
111 // now will be 4 unsigned char crc
112 char tagValidationToken[TOKEN_LEN]; // validation token for tag(from signiture_1 to end of // mageValidationToken)
113 } FILE_TAG, *PFILE_TAG;
115 /* Whole flash image TAG definitions. */
116 #define WFI_VERSION 0x00005732
117 #define WFI_ANY_VERS_MASK 0x0000ff00
118 #define WFI_ANY_VERS 0x00005700
119 #define WFI_VERSION_NAND_1MB_DATA 0x00005731
120 #define WFI_NOR_FLASH 1
121 #define WFI_NAND16_FLASH 2
122 #define WFI_NAND128_FLASH 3
124 /* TAG at end of whole flash ".w" image. Size must be TOKEN_LEN. */
125 typedef struct _WFI_TAG
127 unsigned long wfiCrc;
128 unsigned long wfiVersion;
129 unsigned long wfiChipId;
130 unsigned long wfiFlashType;
131 unsigned long wfiReserved;
132 } WFI_TAG, *PWFI_TAG;
134 #define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
137 #if 1 //__MSTC__, Dennis merge from ZyXEL ROM-D feature, zongyue
138 #define IMAGE_TAG_LEN 32
139 #define IMAGE_RESERVED_LEN (IMAGE_TAG_LEN - NEXT_IMAGE_FLAG - (2*FLAG_LEN) - IMAGE_LEN - (2*CRC_LEN))
141 #define IMAGE_TYPE_IMGDEF 0
142 #define IMAGE_TYPE_ROMD 1
143 #define IMAGE_TYPE_HPNA 2
144 typedef struct _IMAGE_TAG
146 char imageNext[NEXT_IMAGE_FLAG]; /* if non zero, has image at behind */
147 char imageType[FLAG_LEN]; /* type of image */
148 char imageSignature[FLAG_LEN]; /* image signature */
149 char imageLen[IMAGE_LEN]; /* if non zero, image size in clear ASCII text */
150 char reserved[IMAGE_RESERVED_LEN]; /* reserved for later use */
151 char imageValidationToken[CRC_LEN]; /* image validation token, 4 unsigned char crc */
152 char tagValidationToken[CRC_LEN]; /* validation token for tag(from imageNext to end of imageValidationToken) */
153 }IMAGE_TAG, *PIMAGE_TAG;
156 // only included if for bcmTag.exe program
157 #ifdef BCMTAG_EXE_USE
159 static unsigned long Crc32_table[256] = {
160 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
161 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
162 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
163 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
164 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
165 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
166 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
167 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
168 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
169 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
170 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
171 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
172 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
173 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
174 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
175 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
176 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
177 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
178 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
179 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
180 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
181 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
182 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
183 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
184 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
185 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
186 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
187 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
188 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
189 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
190 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
191 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
192 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
193 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
194 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
195 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
196 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
197 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
198 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
199 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
200 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
201 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
202 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
203 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
204 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
205 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
206 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
207 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
208 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
209 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
210 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
211 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
212 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
213 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
214 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
215 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
216 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
217 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
218 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
219 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
220 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
221 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
222 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
223 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D