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 *    Elaine Wang <elaine.wang@intel.com>
27 *
28 */
29
30#include <stdio.h>
31
32#include "JPEGMasterFirmware_bin.h"
33#include "JPEGSlaveFirmware_bin.h"
34
35#include "H263MasterFirmware_bin.h"
36#include "H263MasterFirmwareCBR_bin.h"
37#include "H263MasterFirmwareVBR_bin.h"
38#include "H264MasterFirmware_bin.h"
39#include "H264MasterFirmwareCBR_bin.h"
40#include "H264MasterFirmwareVCM_bin.h"
41#include "H264MasterFirmwareVBR_bin.h"
42#include "MPG4MasterFirmware_bin.h"
43#include "MPG4MasterFirmwareCBR_bin.h"
44#include "MPG4MasterFirmwareVBR_bin.h"
45
46#include "H263SlaveFirmware_bin.h"
47#include "H263SlaveFirmwareCBR_bin.h"
48#include "H263SlaveFirmwareVBR_bin.h"
49#include "H264SlaveFirmware_bin.h"
50#include "H264SlaveFirmwareCBR_bin.h"
51#include "H264SlaveFirmwareVBR_bin.h"
52#include "H264SlaveFirmwareVCM_bin.h"
53#include "MPG4SlaveFirmware_bin.h"
54#include "MPG4SlaveFirmwareCBR_bin.h"
55#include "MPG4SlaveFirmwareVBR_bin.h"
56
57
58#define FW_VER 0x60
59#define FW_FILE_NAME "topazsc_fw.bin"
60
61#define FW_MASTER_INFO(codec,prefix) \
62        { FW_MASTER_##codec,\
63          { FW_VER,\
64            FW_MASTER_##codec,\
65            ui32##prefix##_MasterMTXTOPAZFWTextSize,\
66            ui32##prefix##_MasterMTXTOPAZFWDataSize,\
67            ui32##prefix##_MasterMTXTOPAZFWDataOrigin\
68          },\
69          aui32##prefix##_MasterMTXTOPAZFWText, aui32##prefix##_MasterMTXTOPAZFWData \
70        }
71
72#define FW_SLAVE_INFO(codec,prefix) \
73        { FW_SLAVE_##codec,\
74          { FW_VER,\
75            FW_SLAVE_##codec,\
76            ui32##prefix##_SlaveMTXTOPAZFWTextSize,\
77            ui32##prefix##_SlaveMTXTOPAZFWDataSize,\
78            ui32##prefix##_SlaveMTXTOPAZFWDataOrigin\
79          },\
80          aui32##prefix##_SlaveMTXTOPAZFWText, aui32##prefix##_SlaveMTXTOPAZFWData \
81        }
82
83
84
85struct topaz_fw_info_item_s {
86    unsigned short ver;
87    unsigned short codec;
88
89    unsigned int  text_size;
90    unsigned int data_size;
91    unsigned int data_location;
92};
93typedef struct topaz_fw_info_item_s topaz_fw_info_item_t;
94
95enum topaz_fw_codec_e {
96    FW_MASTER_JPEG = 0,
97    FW_SLAVE_JPEG,
98    FW_MASTER_H264_NO_RC,
99    FW_SLAVE_H264_NO_RC,
100    FW_MASTER_H264_VBR,
101    FW_SLAVE_H264_VBR,
102    FW_MASTER_H264_CBR,
103    FW_SLAVE_H264_CBR,
104    FW_MASTER_H263_NO_RC,
105    FW_SLAVE_H263_NO_RC,
106    FW_MASTER_H263_VBR,
107    FW_SLAVE_H263_VBR,
108    FW_MASTER_H263_CBR,
109    FW_SLAVE_H263_CBR,
110    FW_MASTER_MPEG4_NO_RC,
111    FW_SLAVE_MPEG4_NO_RC,
112    FW_MASTER_MPEG4_VBR,
113    FW_SLAVE_MPEG4_VBR,
114    FW_MASTER_MPEG4_CBR,
115    FW_SLAVE_MPEG4_CBR,
116    FW_MASTER_H264_VCM,
117    FW_SLAVE_H264_VCM,
118    FW_NUM
119};
120typedef enum topaz_fw_codec_e topaz_fw_codec_t;
121
122struct fw_table_s {
123    topaz_fw_codec_t index;
124    topaz_fw_info_item_t header;
125    unsigned int *fw_text;
126    unsigned int *fw_data;
127};
128typedef struct fw_table_s fw_table_t;
129
130int main()
131{
132    FILE *fp = NULL;
133    topaz_fw_codec_t iter = FW_MASTER_JPEG;
134    unsigned int size = 0;
135
136    fw_table_t topaz_fw_table[] = {
137        /* index   header
138         * { ver, codec, text_size, data_size, date_location }
139         * fw_text fw_data */
140        FW_MASTER_INFO(JPEG, JPEG),
141        FW_SLAVE_INFO(JPEG, JPEG),
142
143        FW_MASTER_INFO(H264_NO_RC, H264),
144        FW_SLAVE_INFO(H264_NO_RC, H264),
145        FW_MASTER_INFO(H264_VBR, H264VBR),
146        FW_SLAVE_INFO(H264_VBR, H264VBR),
147        FW_MASTER_INFO(H264_CBR, H264CBR),
148        FW_SLAVE_INFO(H264_CBR, H264CBR),
149
150        FW_MASTER_INFO(H263_NO_RC, H263),
151        FW_SLAVE_INFO(H263_NO_RC, H263),
152        FW_MASTER_INFO(H263_VBR, H263VBR),
153        FW_SLAVE_INFO(H263_VBR, H263VBR),
154        FW_MASTER_INFO(H263_CBR, H263CBR),
155        FW_SLAVE_INFO(H263_CBR, H263CBR),
156
157        FW_MASTER_INFO(MPEG4_NO_RC, MPG4),
158        FW_SLAVE_INFO(MPEG4_NO_RC, MPG4),
159        FW_MASTER_INFO(MPEG4_VBR, MPG4VBR),
160        FW_SLAVE_INFO(MPEG4_VBR, MPG4VBR),
161        FW_MASTER_INFO(MPEG4_CBR, MPG4CBR),
162        FW_SLAVE_INFO(MPEG4_CBR, MPG4CBR),
163
164        FW_MASTER_INFO(H264_VCM, H264VCM),
165        FW_SLAVE_INFO(H264_VCM, H264VCM),
166    };
167
168    /* open file  */
169    fp = fopen(FW_FILE_NAME, "w");
170
171    if (NULL == fp)
172        return -1;
173
174    /* write fw table into the file */
175    while (iter < FW_NUM) {
176        /* record the size use bytes */
177        topaz_fw_table[iter].header.data_size *= 4;
178        topaz_fw_table[iter].header.text_size *= 4;
179
180        /* write header */
181        fwrite(&(topaz_fw_table[iter].header), sizeof(topaz_fw_table[iter].header), 1, fp);
182
183        /* write text */
184        size = topaz_fw_table[iter].header.text_size;
185        fwrite(topaz_fw_table[iter].fw_text, 1, size, fp);
186
187        /* write data */
188        size = topaz_fw_table[iter].header.data_size;
189        fwrite(topaz_fw_table[iter].fw_data, 1, size, fp);
190
191        ++iter;
192    }
193
194    /* close file */
195    fclose(fp);
196
197    return 0;
198}
199