376 lines
14 KiB
C
376 lines
14 KiB
C
/*
|
|
***************************************************************************
|
|
* MediaTek Inc.
|
|
* 4F, No. 2 Technology 5th Rd.
|
|
* Science-based Industrial Park
|
|
* Hsin-chu, Taiwan, R.O.C.
|
|
*
|
|
* (c) Copyright 1997-2012, MediaTek, Inc.
|
|
*
|
|
* All rights reserved. MediaTek source code is an unpublished work and the
|
|
* use of a copyright notice does not imply otherwise. This source code
|
|
* contains confidential trade secret material of MediaTek. Any attemp
|
|
* or participation in deciphering, decoding, reverse engineering or in any
|
|
* way altering the source code is stricitly prohibited, unless the prior
|
|
* written consent of MediaTek Technology, Inc. is obtained.
|
|
***************************************************************************
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#define MAX_FIRMWARE_NAME_BUFFER_LENGTH 128
|
|
#define MAX_NAME_BUFFER_LENGTH 512
|
|
#define MAX_CHIPSETS_BUFFER_LENGTH 1024
|
|
|
|
int bin2h(char *infname, char *outfname, char *fw_name)
|
|
{
|
|
int ret = 0;
|
|
FILE *infile, *outfile;
|
|
int c;
|
|
int i=0;
|
|
|
|
infile = fopen(infname,"r");
|
|
|
|
if (infile == (FILE *) NULL) {
|
|
printf("Can't read file %s \n",infname);
|
|
return -1;
|
|
}
|
|
|
|
outfile = fopen(outfname,"w");
|
|
|
|
if (outfile == (FILE *) NULL) {
|
|
printf("Can't open write file %s \n",outfname);
|
|
fclose(infile);
|
|
return -1;
|
|
}
|
|
|
|
fputs("/* AUTO GEN PLEASE DO NOT MODIFY IT */ \n",outfile);
|
|
fputs("/* AUTO GEN PLEASE DO NOT MODIFY IT */ \n",outfile);
|
|
fputs("\n",outfile);
|
|
fputs("\n",outfile);
|
|
|
|
fprintf(outfile, "UCHAR %s[] = {\n", fw_name);
|
|
|
|
while(1) {
|
|
char cc[3];
|
|
|
|
c = getc(infile);
|
|
|
|
if (feof(infile))
|
|
break;
|
|
|
|
memset(cc,0,2);
|
|
|
|
if (i >= 16) {
|
|
fputs("\n", outfile);
|
|
i = 0;
|
|
}
|
|
|
|
fputs("0x", outfile);
|
|
snprintf(cc, sizeof(cc), "%02x", c);
|
|
fputs(cc, outfile);
|
|
fputs(", ", outfile);
|
|
i++;
|
|
}
|
|
|
|
fputs("} ;\n", outfile);
|
|
fclose(infile);
|
|
fclose(outfile);
|
|
return 0;
|
|
}
|
|
|
|
int main(int argc ,char *argv[])
|
|
{
|
|
char infname[MAX_NAME_BUFFER_LENGTH], ine2pname[MAX_NAME_BUFFER_LENGTH];
|
|
char infname1[MAX_NAME_BUFFER_LENGTH], in_rom_patch[MAX_NAME_BUFFER_LENGTH];
|
|
char outfname[MAX_NAME_BUFFER_LENGTH], oute2pname[MAX_NAME_BUFFER_LENGTH];
|
|
char outfname1[MAX_NAME_BUFFER_LENGTH], out_rom_patch[MAX_NAME_BUFFER_LENGTH];
|
|
char chipsets[MAX_CHIPSETS_BUFFER_LENGTH];
|
|
char fw_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH], e2p_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH];
|
|
char fw_name1[MAX_FIRMWARE_NAME_BUFFER_LENGTH];
|
|
char rom_patch_name[MAX_FIRMWARE_NAME_BUFFER_LENGTH];
|
|
char *rt28xxdir;
|
|
char *chipset, *token;
|
|
char *wow, *rt28xx_mode;
|
|
int is_bin2h_fw = 0, is_bin2h_rom_patch = 0, is_bin2h_e2p=0;
|
|
|
|
rt28xxdir = (char *)getenv("RT28xx_DIR");
|
|
chipset = (char *)getenv("CHIPSET");
|
|
wow = (char *)getenv("HAS_WOW_SUPPORT");
|
|
rt28xx_mode = (char *)getenv("RT28xx_MODE");
|
|
|
|
if(!rt28xxdir) {
|
|
printf("Environment value \"RT28xx_DIR\" not export \n");
|
|
return -1;
|
|
}
|
|
|
|
if(!chipset) {
|
|
printf("Environment value \"CHIPSET\" not export \n");
|
|
return -1;
|
|
}
|
|
if(!rt28xx_mode){
|
|
printf("nvironment value \"RT28xx_MODE\" not export \n");
|
|
return -1;
|
|
}
|
|
if(strlen(chipset) >= sizeof(chipsets) - 1)
|
|
{
|
|
printf("Environment value \"CHIPSET\" over 1024 bytes\n");
|
|
return -1;
|
|
}
|
|
memset(chipsets, 0, MAX_CHIPSETS_BUFFER_LENGTH);
|
|
strncpy(chipsets, chipset, MAX_CHIPSETS_BUFFER_LENGTH - 1);
|
|
chipsets[MAX_CHIPSETS_BUFFER_LENGTH - 1] = '\0';
|
|
|
|
if (strlen(rt28xxdir) > (sizeof(infname)-100)) {
|
|
printf("Environment value \"RT28xx_DIR\" is too long!\n");
|
|
return -1;
|
|
}
|
|
|
|
chipset = strtok(chipsets, " ");
|
|
|
|
while (chipset != NULL) {
|
|
printf("chipset = %s\n", chipset);
|
|
memset(infname, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(infname1, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(ine2pname, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(outfname, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(outfname1, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(oute2pname, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(fw_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH);
|
|
memset(fw_name1, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH);
|
|
memset(e2p_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH);
|
|
memset(in_rom_patch, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(out_rom_patch, 0, MAX_NAME_BUFFER_LENGTH);
|
|
memset(rom_patch_name, 0, MAX_FIRMWARE_NAME_BUFFER_LENGTH);
|
|
strncat(infname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(infname) - 1);
|
|
strncat(infname1, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(infname1) - 1);
|
|
strncat(ine2pname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(ine2pname) - 1);
|
|
strncat(in_rom_patch, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(in_rom_patch) - 1);
|
|
strncat(outfname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1);
|
|
strncat(outfname1, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(outfname1) - 1);
|
|
strncat(oute2pname, rt28xxdir, MAX_NAME_BUFFER_LENGTH - strlen(oute2pname) - 1);
|
|
strncat(out_rom_patch, rt28xxdir,
|
|
MAX_NAME_BUFFER_LENGTH - strlen(out_rom_patch) - 1);
|
|
is_bin2h_fw = 0;
|
|
is_bin2h_rom_patch = 0;
|
|
is_bin2h_e2p = 0;
|
|
if (strncmp(chipset, "2860",4) == 0) {
|
|
strcat(infname,"/mcu/bin/rt2860.bin");
|
|
strcat(outfname,"/include/mcu/rt2860_firmware.h");
|
|
strcat(fw_name, "RT2860_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else if (strncmp(chipset, "2870",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "3090",4) == 0) {
|
|
strcat(infname,"/mcu/bin/rt2860.bin");
|
|
strcat(outfname,"/include/mcu/rt2860_firmware.h");
|
|
strcat(fw_name, "RT2860_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else if (strncmp(chipset, "2070",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "3070",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "3572",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "3573",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "3370",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "5370",4) == 0) {
|
|
if ((wow != NULL) && (strncmp(wow, "y", 1) == 0) && (strncmp(rt28xx_mode, "STA", 3) == 0)) {
|
|
strcat(infname,"/mcu/bin/rt2870_wow.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_wow_firmware.h");
|
|
strcat(fw_name, "RT2870_WOW_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
}
|
|
} else if (strncmp(chipset, "5572",4) == 0) {
|
|
strcat(infname,"/mcu/bin/rt2870.bin");
|
|
strcat(outfname,"/include/mcu/rt2870_firmware.h");
|
|
strcat(fw_name, "RT2870_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else if (strncmp(chipset, "5592",4) == 0) {
|
|
strcat(infname,"/mcu/bin/rt2860.bin");
|
|
strcat(outfname,"/include/mcu/rt2860_firmware.h");
|
|
strcat(fw_name, "RT2860_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else if ((strncmp(chipset, "mt7601e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7601u", 7) == 0)) {
|
|
strcat(infname,"/mcu/bin/MT7601_formal_1.7.bin");
|
|
strcat(outfname,"/include/mcu/mt7601_firmware.h");
|
|
strcat(fw_name, "MT7601_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
strcat(ine2pname, "/eeprom/MT7601_USB_V0_D-20130416.bin");
|
|
strcat(oute2pname, "/include/eeprom/mt7601_e2p.h");
|
|
strcat(e2p_name, "MT7601_E2PImage");
|
|
is_bin2h_e2p = 1;
|
|
} else if ((strncmp(chipset, "mt7650e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7650u", 7) == 0)
|
|
|| (strncmp(chipset, "mt7630e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7630u", 7) == 0)) {
|
|
strcat(infname, "/mcu/bin/MT7650.bin"); // pmu
|
|
strcat(outfname,"/include/mcu/mt7650_firmware.h");
|
|
strcat(fw_name, "MT7650_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
} else if ((strncmp(chipset, "mt7610e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7610u", 7) == 0)) {
|
|
strcat(infname, "/mcu/bin/MT7650.bin"); // pmu
|
|
strcat(outfname, "/include/mcu/mt7610_firmware.h");
|
|
strcat(fw_name, "MT7610_FirmwareImage");
|
|
is_bin2h_fw = 1;
|
|
|
|
if ((strncmp(chipset, "mt7610e", 7) == 0)) {
|
|
strcat(ine2pname, "/eeprom/MT7610U_FEM_V1_1.bin");
|
|
strcat(oute2pname, "/include/eeprom/mt7610e_e2p.h");
|
|
strcat(e2p_name, "MT7610E_E2PImage");
|
|
} else if ((strncmp(chipset, "mt7610u", 7) == 0)) {
|
|
strcat(ine2pname, "/eeprom/MT7610U_FEM_V1_1.bin");
|
|
strcat(oute2pname, "/include/eeprom/mt7610u_e2p.h");
|
|
strcat(e2p_name, "MT7610U_E2PImage");
|
|
}
|
|
} else if ((strncmp(chipset, "mt7662e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7662u", 7) == 0)
|
|
|| (strncmp(chipset, "mt7632e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7632u", 7) == 0)
|
|
|| (strncmp(chipset, "mt7612e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7612u", 7) == 0)) {
|
|
strcat(infname, "/mcu/bin/mt7662_firmware_e3_20131211.bin");
|
|
strcat(outfname, "/include/mcu/mt7662_firmware.h");
|
|
strcat(fw_name, "MT7662_FirmwareImage");
|
|
strcat(in_rom_patch, "/mcu/bin/mt7662_patch_e3_hdr_v0.0.2_P8.bin");
|
|
strcat(out_rom_patch, "/include/mcu/mt7662_rom_patch.h");
|
|
strcat(rom_patch_name, "mt7662_rom_patch");
|
|
strcat(ine2pname, "/eeprom/MT7662E2_EEPROM_20130527.bin");
|
|
strcat(oute2pname, "/include/eeprom/mt76x2_e2p.h");
|
|
strcat(e2p_name, "MT76x2_E2PImage");
|
|
is_bin2h_fw = 1;
|
|
is_bin2h_rom_patch = 1;
|
|
is_bin2h_e2p = 1;
|
|
} else if ((strncmp(chipset, "mt7636u", 7) == 0)
|
|
|| (strncmp(chipset, "mt7636s", 7) == 0)) {
|
|
strcat(in_rom_patch, "/mcu/bin/mt7636_patch_e1_hdr.bin");
|
|
strcat(out_rom_patch, "/include/mcu/mt7636_rom_patch.h");
|
|
strcat(rom_patch_name, "mt7636_rom_patch");
|
|
strcat(infname, "/mcu/bin/WIFI_RAM_CODE_MT7636.bin");
|
|
strcat(outfname, "/include/mcu/mt7636_firmware.h");
|
|
strcat(fw_name, "MT7636_FirmwareImage");
|
|
|
|
is_bin2h_fw = 1;
|
|
is_bin2h_rom_patch = 1;
|
|
} else if ((strncmp(chipset, "mt7603e", 7) == 0)
|
|
|| (strncmp(chipset, "mt7603u", 7) == 0)) {
|
|
strcat(infname, "/mcu/bin/WIFI_RAM_CODE_MT7603_e1.bin");
|
|
strcat(infname1, "/mcu/bin/WIFI_RAM_CODE_MT7603_e2.bin");
|
|
strncat(outfname, "/include/mcu/mt7603_firmware.h"
|
|
, MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1);
|
|
strcat(outfname1, "/include/mcu/mt7603_e2_firmware.h");
|
|
strncat(fw_name, "MT7603_FirmwareImage"
|
|
, MAX_FIRMWARE_NAME_BUFFER_LENGTH - strlen(fw_name) - 1);
|
|
strcat(fw_name1, "MT7603_e2_FirmwareImage");
|
|
|
|
strcat(e2p_name, "MT7603_E2PImage");
|
|
strcat(ine2pname, "/eeprom/MT7603E_EEPROM.bin");
|
|
strcat(oute2pname, "/include/eeprom/mt7603_e2p.h");
|
|
is_bin2h_fw = 1;
|
|
is_bin2h_e2p = 1;
|
|
} else if (strncmp(chipset, "mt7628", 7) == 0) {
|
|
//strcat(infname, "/mcu/bin/MT7628_ram_20140212_fpga_tv01.bin");
|
|
strcat(infname, "/mcu/bin/WIFI_RAM_CODE_MT7628_e1.bin");
|
|
strncat(outfname, "/include/mcu/mt7628_firmware.h"
|
|
, MAX_NAME_BUFFER_LENGTH - strlen(outfname) - 1);
|
|
strcat(fw_name, "MT7628_FirmwareImage");
|
|
strcat(e2p_name, "MT7628_E2PImage");
|
|
strncat(ine2pname, "/eeprom/MT7603E1_EEPROM_layout_20131206.bin"
|
|
, MAX_NAME_BUFFER_LENGTH - strlen(ine2pname) - 1);
|
|
strcat(oute2pname, "/include/eeprom/mt7628_e2p.h");
|
|
is_bin2h_fw = 1;
|
|
is_bin2h_e2p = 1;
|
|
} else {
|
|
printf("unknown chipset = %s\n", chipset);
|
|
}
|
|
|
|
if (is_bin2h_fw)
|
|
{
|
|
bin2h(infname, outfname, fw_name);
|
|
bin2h(infname1, outfname1, fw_name1);
|
|
}
|
|
|
|
if (is_bin2h_rom_patch)
|
|
bin2h(in_rom_patch, out_rom_patch, rom_patch_name);
|
|
|
|
if (is_bin2h_e2p)
|
|
bin2h(ine2pname, oute2pname, e2p_name);
|
|
|
|
chipset = strtok(NULL, " ");
|
|
}
|
|
|
|
exit(0);
|
|
}
|