Import Broadcom/MitraStar firmware file structure header
[firmware_extractor.git] / bcmTag.h
1 /*
2     Copyright 2000-2010 Broadcom Corporation
3
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:
9
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
17         of the software.
18
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
22     consent.
23 */                       
24
25 //**************************************************************************************
26 // File Name  : bcmTag.h
27 //
28 // Description: add tag with validation system to the firmware image file to be uploaded
29 //              via http
30 //
31 // Created    : 02/28/2002  seanl
32 //**************************************************************************************
33
34 #ifndef _BCMTAG_H_
35 #define _BCMTAG_H_
36
37
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.
40
41 #define BCM_TAG_VER         "6"
42
43 // file tag (head) structure all is in clear text except validationTokens (crc, md5, sha1, etc). Total: 128 unsigned chars
44 #define TAG_LEN         256
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
48 #else
49 #define TAG_BLOCK_LEN         256
50 #endif
51 #define TAG_BLOCK_LEN_NAND    128*1024
52 #endif
53 #define TAG_VER_LEN     4
54 #define SIG_LEN         20
55 #define SIG_LEN_2       14   // Original second SIG = 20 is now devided into 14 for SIG_LEN_2 and 6 for CHIP_ID
56 #define CHIP_ID_LEN             6       
57 #define IMAGE_LEN       10
58 #define ADDRESS_LEN     12
59 #define FLAG_LEN        2
60 #define TOKEN_LEN       20
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       
65 #endif
66 #define IMAGE_VER_LEN   32
67 #if 1 //__TELUS__, for HPNA software version
68 #define HPNA_SWVERSION_LEN 8
69 #endif
70 #if 1 //__MSTC__, Dennis merge from ZyXEL ROM-D feature, zongyue
71 #define NEXT_IMAGE_FLAG    1
72 #endif
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)
77 #else
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)
80 #endif
81
82
83 // TAG for downloadable image (kernel plus file system)
84 typedef struct _FILE_TAG
85 {
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
103 #else
104     char imageVersion[IMAGE_VER_LEN];   // image version
105 #endif
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
108 #endif
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;
114
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
123
124 /* TAG at end of whole flash ".w" image.  Size must be TOKEN_LEN. */
125 typedef struct _WFI_TAG
126 {
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;
133
134 #define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
135 #define CRC_LEN 4
136
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))
140
141 #define IMAGE_TYPE_IMGDEF           0
142 #define IMAGE_TYPE_ROMD             1
143 #define IMAGE_TYPE_HPNA             2
144 typedef struct _IMAGE_TAG
145 {
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;
154 #endif
155
156 // only included if for bcmTag.exe program
157 #ifdef BCMTAG_EXE_USE
158
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
224 };
225 #endif // BCMTAG_USE
226
227
228 #endif // _BCMTAG_H_
229