f837ed52247150bbc0250b75502593e7e529c7bf
[bcm963xx.git] / bcmdrivers / opensource / include / bcm963xx / bcmTag.h
1 /*
2 <:copyright-gpl 
3  Copyright 2002 Broadcom Corp. All Rights Reserved. 
4  
5  This program is free software; you can distribute it and/or modify it 
6  under the terms of the GNU General Public License (Version 2) as 
7  published by the Free Software Foundation. 
8  
9  This program is distributed in the hope it will be useful, but WITHOUT 
10  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 
11  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License 
12  for more details. 
13  
14  You should have received a copy of the GNU General Public License along 
15  with this program; if not, write to the Free Software Foundation, Inc., 
16  59 Temple Place - Suite 330, Boston MA 02111-1307, USA. 
17 :>
18 */
19 //**************************************************************************************
20 // File Name  : bcmTag.h
21 //
22 // Description: add tag with validation system to the firmware image file to be uploaded
23 //              via http
24 //
25 // Created    : 02/28/2002  seanl
26 //**************************************************************************************
27
28 #ifndef _BCMTAG_H_
29 #define _BCMTAG_H_
30
31
32 #define BCM_SIG_1   "U.S. Robotics"
33 #define BCM_SIG_2   "ver. 304L0110"          // was "firmware version 2.0" now it is split 6 char out for chip id.
34
35 #define BCM_TAG_VER         "6"
36 #define BCM_TAG_VER_LAST    "26"
37
38 // file tag (head) structure all is in clear text except validationTokens (crc, md5, sha1, etc). Total: 128 unsigned chars
39 #define TAG_LEN         256
40 #define TAG_VER_LEN     4
41 #define SIG_LEN         20
42 #define SIG_LEN_2       14   // Original second SIG = 20 is now devided into 14 for SIG_LEN_2 and 6 for CHIP_ID
43 #define CHIP_ID_LEN             6       
44 #define IMAGE_LEN       10
45 #define ADDRESS_LEN     12
46 #define FLAG_LEN        2
47 #define TOKEN_LEN       20
48 #define BOARD_ID_LEN    16
49 #define RESERVED_LEN    (TAG_LEN - TAG_VER_LEN - SIG_LEN - SIG_LEN_2 - CHIP_ID_LEN - BOARD_ID_LEN - \
50                         (4*IMAGE_LEN) - (3*ADDRESS_LEN) - (3*FLAG_LEN) - (2*TOKEN_LEN))
51
52
53 // TAG for downloadable image (kernel plus file system)
54 typedef struct _FILE_TAG
55 {
56     unsigned char tagVersion[TAG_VER_LEN];       // tag version.  Will be 2 here.
57     unsigned char signiture_1[SIG_LEN];          // text line for company info
58     unsigned char signiture_2[SIG_LEN_2];        // additional info (can be version number)
59     unsigned char chipId[CHIP_ID_LEN];                   // chip id 
60     unsigned char boardId[BOARD_ID_LEN];         // board id
61     unsigned char bigEndian[FLAG_LEN];           // if = 1 - big, = 0 - little endia of the host
62     unsigned char totalImageLen[IMAGE_LEN];      // the sum of all the following length
63     unsigned char cfeAddress[ADDRESS_LEN];       // if non zero, cfe starting address
64     unsigned char cfeLen[IMAGE_LEN];             // if non zero, cfe size in clear ASCII text.
65     unsigned char rootfsAddress[ADDRESS_LEN];    // if non zero, filesystem starting address
66     unsigned char rootfsLen[IMAGE_LEN];          // if non zero, filesystem size in clear ASCII text.
67     unsigned char kernelAddress[ADDRESS_LEN];    // if non zero, kernel starting address
68     unsigned char kernelLen[IMAGE_LEN];          // if non zero, kernel size in clear ASCII text.
69     unsigned char imageSequence[FLAG_LEN * 2];   // incrments everytime an image is flashed
70     unsigned char reserved[RESERVED_LEN];        // reserved for later use
71     unsigned char imageValidationToken[TOKEN_LEN];// image validation token - can be crc, md5, sha;  for
72                                                  // now will be 4 unsigned char crc
73     unsigned char tagValidationToken[TOKEN_LEN]; // validation token for tag(from signiture_1 to end of // mageValidationToken)
74 } FILE_TAG, *PFILE_TAG;
75
76 #define CRC32_INIT_VALUE 0xffffffff /* Initial CRC32 checksum value */
77 #define CRC_LEN 4
78
79 // only included if for bcmTag.exe program
80 #ifdef BCMTAG_EXE_USE
81
82 static unsigned long Crc32_table[256] = {
83     0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA,
84     0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
85     0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988,
86     0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
87     0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
88     0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
89     0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC,
90     0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
91     0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172,
92     0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
93     0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940,
94     0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
95     0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116,
96     0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
97     0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
98     0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
99     0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A,
100     0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
101     0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818,
102     0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
103     0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E,
104     0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
105     0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C,
106     0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
107     0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
108     0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
109     0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0,
110     0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
111     0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086,
112     0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
113     0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4,
114     0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
115     0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A,
116     0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
117     0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
118     0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
119     0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE,
120     0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
121     0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC,
122     0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
123     0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252,
124     0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
125     0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60,
126     0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
127     0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
128     0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
129     0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04,
130     0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
131     0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A,
132     0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
133     0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38,
134     0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
135     0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E,
136     0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
137     0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
138     0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
139     0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2,
140     0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
141     0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0,
142     0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
143     0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6,
144     0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
145     0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94,
146     0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
147 };
148 #endif // BCMTAG_USE
149
150
151 #endif // _BCMTAG_H_
152