1/*
2 * Copyright (c) 2011 Intel Corporation. All Rights Reserved.
3 * Copyright (c) Imagination Technologies Limited, UK
4 *
5 * Permission is hereby granted, free of charge, to any person obtaining a
6 * copy of this software and associated documentation files (the
7 * "Software"), to deal in the Software without restriction, including
8 * without limitation the rights to use, copy, modify, merge, publish,
9 * distribute, sub license, and/or sell copies of the Software, and to
10 * permit persons to whom the Software is furnished to do so, subject to
11 * the following conditions:
12 *
13 * The above copyright notice and this permission notice (including the
14 * next paragraph) shall be included in all copies or substantial portions
15 * of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
20 * IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
21 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 *
25 * Authors:
26 *    Zeng Li <zeng.li@intel.com>
27 *
28 */
29
30#include <stdio.h>
31
32#include "H263Firmware_bin.h"
33#include "H263FirmwareCBR_bin.h"
34#include "H263FirmwareVBR_bin.h"
35#include "H264Firmware_bin.h"
36#include "H264FirmwareCBR_bin.h"
37#include "H264FirmwareVBR_bin.h"
38#include "H264FirmwareVCM_bin.h"
39#include "MPG4Firmware_bin.h"
40#include "MPG4FirmwareCBR_bin.h"
41#include "MPG4FirmwareVBR_bin.h"
42
43#define FW_VER 146 /* DDKv146 release */
44#define FW_FILE_NAME "topaz_fw.bin"
45
46struct topaz_fw_info_item_s {
47    unsigned short ver;
48    unsigned short codec;
49
50    unsigned int  text_size;
51    unsigned int data_size;
52    unsigned int data_location;
53};
54typedef struct topaz_fw_info_item_s topaz_fw_info_item_t;
55
56enum topaz_fw_codec_e {
57    FW_JPEG = 0,
58    FW_H264_NO_RC,
59    FW_H264_VBR,
60    FW_H264_CBR,
61    FW_H264_VCM,
62    FW_H263_NO_RC,
63    FW_H263_VBR,
64    FW_H263_CBR,
65    FW_MPEG4_NO_RC,
66    FW_MPEG4_VBR,
67    FW_MPEG4_CBR,
68    FW_NUM
69};
70typedef enum topaz_fw_codec_e topaz_fw_codec_t;
71
72struct fw_table_s {
73    topaz_fw_codec_t index;
74    topaz_fw_info_item_t header;
75    unsigned int *fw_text;
76    unsigned int *fw_data;
77};
78typedef struct fw_table_s fw_table_t;
79
80int main()
81{
82    FILE *fp = NULL;
83    topaz_fw_codec_t iter = FW_H264_NO_RC;
84    unsigned int size = 0;
85    unsigned int i;
86
87    fw_table_t topaz_fw_table[] = {
88        /* index   header
89         * { ver, codec, text_size, data_size, date_location }
90         * fw_text fw_data */
91        { 0, {0, 0, 0, 0, 0}, NULL, NULL },
92        {
93            FW_H264_NO_RC,
94            {
95                FW_VER,
96                FW_H264_NO_RC,
97                ui32H264_MTXTOPAZFWTextSize,
98                ui32H264_MTXTOPAZFWDataSize,
99                ui32H264_MTXTOPAZFWDataLocation
100            },
101            aui32H264_MTXTOPAZFWText, aui32H264_MTXTOPAZFWData
102        },
103
104        {
105            FW_H264_VBR,
106            {
107                FW_VER,
108                FW_H264_VBR,
109                ui32H264VBR_MTXTOPAZFWTextSize,
110                ui32H264VBR_MTXTOPAZFWDataSize,
111                ui32H264VBR_MTXTOPAZFWDataLocation
112            },
113            aui32H264VBR_MTXTOPAZFWText, aui32H264VBR_MTXTOPAZFWData
114        },
115
116        {
117            FW_H264_CBR,
118            {
119                FW_VER,
120                FW_H264_CBR,
121                ui32H264CBR_MTXTOPAZFWTextSize,
122                ui32H264CBR_MTXTOPAZFWDataSize,
123                ui32H264CBR_MTXTOPAZFWDataLocation
124            },
125            aui32H264CBR_MTXTOPAZFWText,
126            aui32H264CBR_MTXTOPAZFWData
127        },
128
129        {
130            FW_H264_VCM,
131            {
132                FW_VER,
133                FW_H264_VCM,
134                ui32H264VCM_MTXTOPAZFWTextSize,
135                ui32H264VCM_MTXTOPAZFWDataSize,
136                ui32H264VCM_MTXTOPAZFWDataLocation
137            },
138            aui32H264VCM_MTXTOPAZFWText,
139            aui32H264VCM_MTXTOPAZFWData
140        },
141
142        {
143            FW_H263_NO_RC,
144            {
145                FW_VER,
146                FW_H263_NO_RC,
147                ui32H263_MTXTOPAZFWTextSize,
148                ui32H263_MTXTOPAZFWDataSize,
149                ui32H263_MTXTOPAZFWDataLocation
150            },
151            aui32H263_MTXTOPAZFWText,
152            aui32H263_MTXTOPAZFWData
153        },
154
155        {
156            FW_H263_VBR,
157            {
158                FW_VER,
159                FW_H263_VBR,
160                ui32H263VBR_MTXTOPAZFWTextSize,
161                ui32H263VBR_MTXTOPAZFWDataSize,
162                ui32H263VBR_MTXTOPAZFWDataLocation
163            },
164            aui32H263VBR_MTXTOPAZFWText,
165            aui32H263VBR_MTXTOPAZFWData
166        },
167
168        {
169            FW_H263_CBR,
170            {
171                FW_VER,
172                FW_H263_CBR,
173                ui32H263CBR_MTXTOPAZFWTextSize,
174                ui32H263CBR_MTXTOPAZFWDataSize,
175                ui32H263CBR_MTXTOPAZFWDataLocation
176            },
177            aui32H263CBR_MTXTOPAZFWText,
178            aui32H263CBR_MTXTOPAZFWData
179        },
180
181        {
182            FW_MPEG4_NO_RC,
183            {
184                FW_VER,
185                FW_MPEG4_NO_RC,
186                ui32MPG4_MTXTOPAZFWTextSize,
187                ui32MPG4_MTXTOPAZFWDataSize,
188                ui32MPG4_MTXTOPAZFWDataLocation
189            },
190            aui32MPG4_MTXTOPAZFWText,
191            aui32MPG4_MTXTOPAZFWData
192        },
193
194        {
195            FW_MPEG4_VBR,
196            {
197                FW_VER,
198                FW_MPEG4_VBR,
199                ui32MPG4VBR_MTXTOPAZFWTextSize,
200                ui32MPG4VBR_MTXTOPAZFWDataSize,
201                ui32MPG4VBR_MTXTOPAZFWDataLocation
202            },
203            aui32MPG4VBR_MTXTOPAZFWText,
204            aui32MPG4VBR_MTXTOPAZFWData
205        },
206
207        {
208            FW_MPEG4_CBR,
209            {
210                FW_VER,
211                FW_MPEG4_CBR,
212                ui32MPG4CBR_MTXTOPAZFWTextSize,
213                ui32MPG4CBR_MTXTOPAZFWDataSize,
214                ui32MPG4CBR_MTXTOPAZFWDataLocation
215            },
216            aui32MPG4CBR_MTXTOPAZFWText,
217            aui32MPG4CBR_MTXTOPAZFWData
218        }
219    };
220
221    /* open file  */
222    fp = fopen(FW_FILE_NAME, "w");
223
224    if (NULL == fp)
225        return -1;
226    /* write fw table into the file */
227    while (iter < FW_NUM) {
228        /* record the size use bytes */
229        topaz_fw_table[iter].header.data_size *= 4;
230        topaz_fw_table[iter].header.text_size *= 4;
231
232        /* write header */
233        fwrite(&(topaz_fw_table[iter].header), sizeof(topaz_fw_table[iter].header), 1, fp);
234
235        /* write text */
236        size = topaz_fw_table[iter].header.text_size;
237        fwrite(topaz_fw_table[iter].fw_text, 1, size, fp);
238
239        /* write data */
240        size = topaz_fw_table[iter].header.data_size;
241        fwrite(topaz_fw_table[iter].fw_data, 1, size, fp);
242
243        ++iter;
244    }
245
246    /* close file */
247    fclose(fp);
248
249    return 0;
250}
251