[Feature] add GA346 baseline version
Change-Id: Ic62933698569507dcf98240cdf5d9931ae34348f
diff --git a/src/telephonyware/3.0/mtk_nvram/files/nvram_daemon.init b/src/telephonyware/3.0/mtk_nvram/files/nvram_daemon.init
new file mode 100644
index 0000000..abf0e9a
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/files/nvram_daemon.init
@@ -0,0 +1,17 @@
+#!/bin/sh /etc/rc.common
+
+START=00
+
+USE_PROCD=1
+NAME=nvram_daemon
+PROG=/usr/bin/nvram_daemon
+
+start_service() {
+ echo "start nvram_daemon"
+ procd_open_instance nvram_daemon
+ procd_set_param command /usr/bin/nvram_daemon
+ procd_set_param stdout 1
+ procd_set_param stderr 1
+ procd_close_instance
+
+}
diff --git a/src/telephonyware/3.0/mtk_nvram/src/Makefile b/src/telephonyware/3.0/mtk_nvram/src/Makefile
new file mode 100644
index 0000000..c673f78
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/Makefile
@@ -0,0 +1,12 @@
+all:
+ make -f Makefile.libnvram
+ make -f Makefile.libfile_op
+ make -f Makefile.nvram_daemon
+ make -f Makefile.nvram_test
+
+
+clean:
+ make -f Makefile.libnvram clean
+ make -f Makefile.libfile_op clean
+ make -f Makefile.nvram_daemon clean
+ make -f Makefile.nvram_test clean
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mtk_nvram/src/Makefile.libfile_op b/src/telephonyware/3.0/mtk_nvram/src/Makefile.libfile_op
new file mode 100644
index 0000000..afd2580
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/Makefile.libfile_op
@@ -0,0 +1,26 @@
+NAME = libfile_op
+SRC := $(NAME)
+OBJ := $(NAME)
+INCLUDES=-Ilibnvram
+LIBS=$(TARGET_LDFLAGS) -L. -lnvram
+
+SOURCES_C := $(wildcard $(SRC)/*.c)
+OBJECTS_C := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES_C))
+
+SOURCES_CPP := $(wildcard $(SRC)/*.cpp)
+OBJECTS_CPP := $(patsubst $(SRC)/%.cpp, $(OBJ)/%.o, $(SOURCES_CPP))
+
+SOURCES := $(SOURCES_C) $(SOURCES_CPP)
+OBJECTS := $(OBJECTS_C) $(OBJECTS_CPP)
+
+$(NAME).so: $(OBJECTS)
+ $(CC) -shared -fPIC $(INCLUDES) $(LIBS) -o $@ $^
+
+$(OBJ)/%.o: $(SRC)/%.c
+ ${CC} $(CFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+$(OBJ)/%.o: $(SRC)/%.cpp
+ ${CXX} $(CXXFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+clean:
+ rm -f $(NAME).so
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mtk_nvram/src/Makefile.libnvram b/src/telephonyware/3.0/mtk_nvram/src/Makefile.libnvram
new file mode 100644
index 0000000..c7c4703
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/Makefile.libnvram
@@ -0,0 +1,31 @@
+NAME = libnvram
+SRC := $(NAME)
+OBJ := $(NAME)
+
+INCLUDES=-Ilibnvram
+INCLUDES += -I./libfile_op
+INCLUDES += -I./cgen
+INCLUDES += -I./cgen/cfgfileinc
+INCLUDES += -I./cgen/cfgdefault
+INCLUDES += -I./cgen/inc
+
+SOURCES_C := $(wildcard $(SRC)/*.c)
+OBJECTS_C := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES_C))
+
+SOURCES_CPP := $(wildcard $(SRC)/*.cpp)
+OBJECTS_CPP := $(patsubst $(SRC)/%.cpp, $(OBJ)/%.o, $(SOURCES_CPP))
+
+SOURCES := $(SOURCES_C) $(SOURCES_CPP)
+OBJECTS := $(OBJECTS_C) $(OBJECTS_CPP)
+
+$(NAME).so: $(OBJECTS)
+ $(CC) -shared -fPIC $(INCLUDES) -o $@ $^
+
+$(OBJ)/%.o: $(SRC)/%.c
+ ${CC} $(CFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+$(OBJ)/%.o: $(SRC)/%.cpp
+ ${CXX} $(CXXFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+clean:
+ rm -f $(NAME).so
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_daemon b/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_daemon
new file mode 100644
index 0000000..1624b16
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_daemon
@@ -0,0 +1,27 @@
+NAME = nvram_daemon
+SRC := $(NAME)_src
+OBJ := $(NAME)_src
+
+INCLUDES=-Ilibnvram -Ilibfile_op
+LIBS=$(TARGET_LDFLAGS) -L. -lnvram -lfile_op -lubox
+
+SOURCES_C := $(wildcard $(SRC)/*.c)
+OBJECTS_C := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES_C))
+
+SOURCES_CPP := $(wildcard $(SRC)/*.cpp)
+OBJECTS_CPP := $(patsubst $(SRC)/%.cpp, $(OBJ)/%.o, $(SOURCES_CPP))
+
+SOURCES := $(SOURCES_C) $(SOURCES_CPP)
+OBJECTS := $(OBJECTS_C) $(OBJECTS_CPP)
+
+$(NAME): $(OBJECTS)
+ $(CC) -fPIC $(INCLUDES) -o $@ $^ $(LIBS)
+
+$(OBJ)/%.o: $(SRC)/%.c
+ ${CC} $(CFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+$(OBJ)/%.o: $(SRC)/%.cpp
+ ${CXX} $(CXXFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+clean:
+ rm -f $(NAME)
diff --git a/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_test b/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_test
new file mode 100644
index 0000000..caed421
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/Makefile.nvram_test
@@ -0,0 +1,28 @@
+NAME = nvram_test
+SRC := $(NAME)_src
+OBJ := $(NAME)_src
+
+INCLUDES=-Ilibnvram -Ilibfile_op
+LIBS=$(TARGET_LDFLAGS) -L. -lnvram -lfile_op -lubox
+
+SOURCES_C := $(wildcard $(SRC)/*.c)
+OBJECTS_C := $(patsubst $(SRC)/%.c, $(OBJ)/%.o, $(SOURCES_C))
+
+SOURCES_CPP := $(wildcard $(SRC)/*.cpp)
+OBJECTS_CPP := $(patsubst $(SRC)/%.cpp, $(OBJ)/%.o, $(SOURCES_CPP))
+
+SOURCES := $(SOURCES_C) $(SOURCES_CPP)
+OBJECTS := $(OBJECTS_C) $(OBJECTS_CPP)
+
+$(NAME): $(OBJECTS)
+ $(CC) -fPIC $(INCLUDES) -o $@ $^ $(LIBS)
+
+$(OBJ)/%.o: $(SRC)/%.c
+ ${CC} $(CFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+$(OBJ)/%.o: $(SRC)/%.cpp
+ ${CXX} $(CXXFLAGS) -fPIC -c $< -o $@ $(INCLUDES)
+
+clean:
+ rm -f $(NAME)
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_ADC_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_ADC_Default.h
new file mode 100644
index 0000000..21be2d5
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_ADC_Default.h
@@ -0,0 +1,111 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_META_FILE.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of META CFG file
+ *
+ * Author:
+ * -------
+ * MTK80306(Ning Feng)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_ADC_H
+#define _CFG_ADC_H
+
+///#include "cfgfileinc/CFG_ADC_File.h"
+
+// the default value of bt nvram file
+AUXADC_CFG_Struct stADCDefualt =
+{
+ {1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000},
+ {0, 0, 0, 0, 0, 0, 0, 0, 0},
+ 0,
+};
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Audio_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Audio_Default.h
new file mode 100644
index 0000000..f0ffa9b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Audio_Default.h
@@ -0,0 +1,949 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_AUDIO_FILE.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of AUDIO CFG Default file
+ *
+ * Author:
+ * -------
+ *
+ *
+
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_AUDIO_H
+#define _CFG_AUDIO_H
+/* include rule :
+ 1st : find path/files relative current position (Common)
+ 2nd : find path/files from other projects
+*/
+#include "CFG_AUDIO_File.h"
+
+//audio related default value
+#include "cfgdefault/sph_coeff_record_mode_default.h"
+#include "cfgdefault/sph_coeff_dmnr_default.h"
+#include "cfgdefault/sph_coeff_dmnr_handsfree_default.h"
+#include "cfgdefault/audio_hd_record_custom.h"
+#include "cfgdefault/audio_acf_default.h"
+#include "cfgdefault/audio_hcf_default.h"
+#include "cfgdefault/audio_effect_default.h"
+#include "cfgdefault/audio_gain_table_default.h"
+#include "cfgdefault/audio_ver1_volume_custom_default.h"
+#include "cfgdefault/voice_recognition_custom.h"
+#include "cfgdefault/audio_audenh_control_option.h"
+#include "cfgdefault/audio_voip_custom.h"
+//#include "cfgdefault/audio_acfsub_default.h"
+#include "cfgdefault/audio_music_drc_default.h"
+#include "cfgdefault/audio_ringtone_drc_default.h"
+#include "cfgdefault/sph_coeff_anc_default.h"
+#include "cfgdefault/audio_speaker_monitor_custom.h"
+#include "cfgdefault/sph_coeff_lpbk_default.h"
+
+//speech related default value
+#include "cfgdefault/sph_coeff_default.h"
+#include "cfgdefault/audio_custom.h"
+#include "cfgdefault/med_audio_default.h"
+#include "cfgdefault/audio_volume_custom_default.h"
+#include "cfgdefault/audio_ver1_volume_custom_default.h"
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifdef __ALLOCATE_CFG_AUDIO_DEFAULT_H
+// Allocate data by \vendor\mediatek\proprietary\external\nvram\libcustom_nvram\CFG_file_info.c
+
+AUDIO_CUSTOM_PARAM_STRUCT speech_custom_default =
+{
+ /* INT8 volume[MAX_VOL_CATE][MAX_VOL_TYPE] */
+ /* Normal volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+ GAIN_NOR_TON_VOL, GAIN_NOR_KEY_VOL, GAIN_NOR_MIC_VOL, GAIN_NOR_FMR_VOL, GAIN_NOR_SPH_VOL, GAIN_NOR_SID_VOL, GAIN_NOR_MED_VOL
+ ,
+ /* Headset volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+ GAIN_HED_TON_VOL, GAIN_HED_KEY_VOL, GAIN_HED_MIC_VOL, GAIN_HED_FMR_VOL, GAIN_HED_SPH_VOL, GAIN_HED_SID_VOL, GAIN_HED_MED_VOL
+ ,
+ /* Handfree volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+ GAIN_HND_TON_VOL, GAIN_HND_KEY_VOL, GAIN_HND_MIC_VOL, GAIN_HND_FMR_VOL, GAIN_HND_SPH_VOL, GAIN_HND_SID_VOL, GAIN_HND_MED_VOL
+ ,
+ /* UINT16 speech_common_para[12] */
+ DEFAULT_SPEECH_COMMON_PARA
+ ,
+ /* UINT16 speech_mode_para[8][16] */
+ DEFAULT_SPEECH_NORMAL_MODE_PARA,
+ DEFAULT_SPEECH_EARPHONE_MODE_PARA,
+ DEFAULT_SPEECH_LOUDSPK_MODE_PARA,
+ DEFAULT_SPEECH_BT_EARPHONE_MODE_PARA,
+ DEFAULT_SPEECH_BT_CORDLESS_MODE_PARA,
+ DEFAULT_SPEECH_CARKIT_MODE_PARA,
+ DEFAULT_SPEECH_AUX1_MODE_PARA,
+ DEFAULT_SPEECH_AUX2_MODE_PARA
+ ,
+ /* UINT16 speech_volume_para[4] */
+ DEFAULT_SPEECH_VOL_PARA
+ ,
+ /* UINT16 debug_info[16] */
+ DEFAULT_AUDIO_DEBUG_INFO
+ ,
+ /* INT16 sph_in_fir[6][45], sph_out_fir */
+ SPEECH_INPUT_FIR_COEFF,
+ SPEECH_OUTPUT_FIR_COEFF
+ ,
+ /* UINT16 DG_DL_Speech */
+ DG_DL_Speech
+ ,
+ /* UINT16 DG_Microphone */
+ DG_Microphone
+ ,
+ /* UINT16 FM record volume*/
+ FM_Record_Vol
+ ,
+ /* UINT16 BT sync type and length*/
+ DEFAULT_BLUETOOTH_SYNC_TYPE,
+ DEFAULT_BLUETOOTH_SYNC_LENGTH
+ ,
+ /* UINT16 BT PCM in/out digital gain*/
+ DEFAULT_BT_PCM_IN_VOL,
+ DEFAULT_BT_PCM_OUT_VOL
+ ,
+ /* user mode : normal mode, earphone mode, loud speaker mode */
+ /* UCHAR user_mode */
+ VOL_NORMAL
+ ,
+ /* auto VM record setting */
+ DEFAULT_VM_SUPPORT,
+ DEFAULT_AUTO_VM,
+ /* Micbais voltage 1900 --> 2200 */
+ MICBAIS,
+};
+
+AUDIO_VER1_CUSTOM_VOLUME_STRUCT audio_ver1_custom_default = {
+ VER1_AUD_VOLUME_RING,
+ VER1_AUD_VOLUME_SIP,
+ VER1_AUD_VOLUME_MIC,
+ VER1_AUD_VOLUME_FM,
+ VER1_AUD_VOLUME_SPH,
+ VER1_AUD_VOLUME_SPH, // sph2 now use the same
+ VER1_AUD_VOLUME_SID,
+ VER1_AUD_VOLUME_MEDIA,
+ VER1_AUD_VOLUME_MATV,
+ VER1_AUD_NORMAL_VOLUME_DEFAULT,
+ VER1_AUD_HEADSER_VOLUME_DEFAULT,
+ VER1_AUD_SPEAKER_VOLUME_DEFAULT,
+ VER1_AUD_HEADSETSPEAKER_VOLUME_DEFAULT,
+ VER1_AUD_EXTAMP_VOLUME_DEFAULT,
+ VER1_AUD_VOLUME_LEVEL_DEFAULT
+};
+
+
+AUDIO_CUSTOM_WB_PARAM_STRUCT wb_speech_custom_default =
+{
+ /* unsigned short speech_mode_wb_para[8][16] */
+ DEFAULT_WB_SPEECH_NORMAL_MODE_PARA,
+ DEFAULT_WB_SPEECH_EARPHONE_MODE_PARA,
+ DEFAULT_WB_SPEECH_LOUDSPK_MODE_PARA,
+ DEFAULT_WB_SPEECH_BT_EARPHONE_MODE_PARA,
+ DEFAULT_WB_SPEECH_BT_CORDLESS_MODE_PARA,
+ DEFAULT_WB_SPEECH_CARKIT_MODE_PARA,
+ DEFAULT_WB_SPEECH_AUX1_MODE_PARA,
+ DEFAULT_WB_SPEECH_AUX2_MODE_PARA,
+ /* short sph_wb_in_fir[6][90] */
+ WB_Speech_Input_FIR_Coeff,
+ /* short sph_wb_out_fir[6][90] */
+ WB_Speech_Output_FIR_Coeff,
+};
+#if defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V5)
+/*
+unsigned int bes_loudness_Sep_LR_Filter;
+ unsigned int bes_loudness_WS_Gain_Max;
+ unsigned int bes_loudness_WS_Gain_Min;
+ unsigned int bes_loudness_Filter_First;
+ unsigned int bes_loudness_Num_Bands;
+ unsigned int bes_loudness_Flt_Bank_Order;
+ unsigned int bes_loudness_Cross_Freq[7];
+ int DRC_Th[8][5];
+ int DRC_Gn[8][5];
+ int SB_Gn[8];
+ unsigned int SB_Mode[8];
+ unsigned int DRC_Delay;
+ unsigned int Att_Time[8][6];
+ unsigned int Rel_Time[8][6];
+ int Hyst_Th[8][6];
+ int Lim_Th;
+ int Lim_Gn;
+ unsigned int Lim_Const;
+ unsigned int Lim_Delay;
+ int SWIPRev;
+
+*/
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_custom_default =
+{
+#if 1
+ BES_LOUDNESS_ACF_L_HPF_FC,
+ BES_LOUDNESS_ACF_L_HPF_ORDER,
+ BES_LOUDNESS_ACF_L_LPF_FC,
+ BES_LOUDNESS_ACF_L_LPF_ORDER,
+ BES_LOUDNESS_ACF_L_BPF_FC,
+ BES_LOUDNESS_ACF_L_BPF_BW,
+ BES_LOUDNESS_ACF_L_BPF_GAIN,
+
+ BES_LOUDNESS_ACF_R_HPF_FC,
+ BES_LOUDNESS_ACF_R_HPF_ORDER,
+ BES_LOUDNESS_ACF_R_LPF_FC,
+ BES_LOUDNESS_ACF_R_LPF_ORDER,
+ BES_LOUDNESS_ACF_R_BPF_FC,
+ BES_LOUDNESS_ACF_R_BPF_BW,
+ BES_LOUDNESS_ACF_R_BPF_GAIN,
+
+ BES_LOUDNESS_ACF_SEP_LR_FILTER,
+ BES_LOUDNESS_ACF_WS_GAIN_MAX,
+ BES_LOUDNESS_ACF_WS_GAIN_MIN,
+ BES_LOUDNESS_ACF_FILTER_FIRST,
+ BES_LOUDNESS_ACF_NUM_BANDS,
+ BES_LOUDNESS_ACF_FLT_BANK_ORDER,
+ BES_LOUDNESS_ACF_CROSSOVER_FREQ,
+ BES_LOUDNESS_ACF_GAIN_MAP_IN,
+ BES_LOUDNESS_ACF_GAIN_MAP_OUT,
+ BES_LOUDNESS_ACF_SB_GAIN,
+ BES_LOUDNESS_ACF_SB_MODE,
+ BES_LOUDNESS_ACF_DRC_DELAY,
+ BES_LOUDNESS_ACF_ATT_TIME,
+ BES_LOUDNESS_ACF_REL_TIME,
+ BES_LOUDNESS_ACF_HYST_TH,
+ BES_LOUDNESS_ACF_LIM_TH,
+ BES_LOUDNESS_ACF_LIM_GN,
+ BES_LOUDNESS_ACF_LIM_CONST,
+ BES_LOUDNESS_ACF_LIM_DELAY,
+ 0x0520,
+#else
+ BES_LOUDNESS_HSF_COEFF_L,
+ BES_LOUDNESS_BPF_COEFF_L,
+ BES_LOUDNESS_LPF_COEFF_L,
+ BES_LOUDNESS_HSF_COEFF_R,
+ BES_LOUDNESS_BPF_COEFF_R,
+ BES_LOUDNESS_LPF_COEFF_R,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+
+ BES_LOUDNESS_SEP_LR_FILTER,
+ BES_LOUDNESS_NUM_BANDS,
+ BES_LOUDNESS_FLT_BANK_ORDER,
+ BES_LOUDNESS_CROSSOVER_FREQ,
+
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+ BES_LOUDNESS_SB_GAIN,
+ BES_LOUDNESS_SB_MODE,
+ BES_LOUDNESS_DRC_DELAY,
+ BES_LOUDNESS_ATT_TIME,
+ BES_LOUDNESS_REL_TIME,
+ BES_LOUDNESS_HYST_TH,
+ BES_LOUDNESS_LIM_TH,
+ BES_LOUDNESS_LIM_GN,
+ BES_LOUDNESS_LIM_CONST,
+ BES_LOUDNESS_LIM_DELAY,
+#endif
+
+};
+#if 0
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audiosub_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF_SUB_L,
+ BES_LOUDNESS_BPF_COEFF_SUB_L,
+ BES_LOUDNESS_LPF_COEFF_SUB_L,
+ BES_LOUDNESS_HSF_COEFF_SUB_R,
+ BES_LOUDNESS_BPF_COEFF_SUB_R,
+ BES_LOUDNESS_LPF_COEFF_SUB_R,
+ BES_LOUDNESS_WS_GAIN_MAX_SUB,
+ BES_LOUDNESS_WS_GAIN_MIN_SUB,
+ BES_LOUDNESS_FILTER_FIRST_SUB,
+
+ BES_LOUDNESS_SEP_LR_FILTER_SUB,
+ BES_LOUDNESS_NUM_BANDS_SUB,
+ BES_LOUDNESS_FLT_BANK_ORDER_SUB,
+ BES_LOUDNESS_CROSSOVER_FREQ_SUB,
+
+ BES_LOUDNESS_GAIN_MAP_IN_SUB,
+ BES_LOUDNESS_GAIN_MAP_OUT_SUB,
+ BES_LOUDNESS_SB_GAIN_SUB,
+ BES_LOUDNESS_SB_MODE_SUB,
+ BES_LOUDNESS_DRC_DELAY_SUB,
+ BES_LOUDNESS_ATT_TIME_SUB,
+ BES_LOUDNESS_REL_TIME_SUB,
+ BES_LOUDNESS_HYST_TH_SUB,
+ BES_LOUDNESS_LIM_TH_SUB,
+ BES_LOUDNESS_LIM_GN,
+ BES_LOUDNESS_LIM_CONST,
+ BES_LOUDNESS_LIM_DELAY,
+
+
+};
+#endif
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_hcf_custom_default =
+{
+ BES_LOUDNESS_HCF_L_HPF_FC,
+ BES_LOUDNESS_HCF_L_HPF_ORDER,
+ BES_LOUDNESS_HCF_L_LPF_FC,
+ BES_LOUDNESS_HCF_L_LPF_ORDER,
+ BES_LOUDNESS_HCF_L_BPF_FC,
+ BES_LOUDNESS_HCF_L_BPF_BW,
+ BES_LOUDNESS_HCF_L_BPF_GAIN,
+
+ BES_LOUDNESS_HCF_R_HPF_FC,
+ BES_LOUDNESS_HCF_R_HPF_ORDER,
+ BES_LOUDNESS_HCF_R_LPF_FC,
+ BES_LOUDNESS_HCF_R_LPF_ORDER,
+ BES_LOUDNESS_HCF_R_BPF_FC,
+ BES_LOUDNESS_HCF_R_BPF_BW,
+ BES_LOUDNESS_HCF_R_BPF_GAIN,
+
+ BES_LOUDNESS_HCF_SEP_LR_FILTER,
+ BES_LOUDNESS_HCF_WS_GAIN_MAX,
+ BES_LOUDNESS_HCF_WS_GAIN_MIN,
+ BES_LOUDNESS_HCF_FILTER_FIRST,
+ BES_LOUDNESS_HCF_NUM_BANDS,
+ BES_LOUDNESS_HCF_FLT_BANK_ORDER,
+ BES_LOUDNESS_HCF_CROSSOVER_FREQ,
+ BES_LOUDNESS_HCF_GAIN_MAP_IN,
+ BES_LOUDNESS_HCF_GAIN_MAP_OUT,
+ BES_LOUDNESS_HCF_SB_GAIN,
+ BES_LOUDNESS_HCF_SB_MODE,
+ BES_LOUDNESS_HCF_DRC_DELAY,
+ BES_LOUDNESS_HCF_ATT_TIME,
+ BES_LOUDNESS_HCF_REL_TIME,
+ BES_LOUDNESS_HCF_HYST_TH,
+ BES_LOUDNESS_HCF_LIM_TH,
+ BES_LOUDNESS_HCF_LIM_GN,
+ BES_LOUDNESS_HCF_LIM_CONST,
+ BES_LOUDNESS_HCF_LIM_DELAY,
+ 0x0520,
+
+};
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_vibspk_custom_default =
+{
+ BES_LOUDNESS_ACF_L_HPF_FC,
+ BES_LOUDNESS_ACF_L_HPF_ORDER,
+ BES_LOUDNESS_ACF_L_LPF_FC,
+ BES_LOUDNESS_ACF_L_LPF_ORDER,
+ BES_LOUDNESS_ACF_L_BPF_FC,
+ BES_LOUDNESS_ACF_L_BPF_BW,
+ BES_LOUDNESS_ACF_L_BPF_GAIN,
+
+ BES_LOUDNESS_ACF_R_HPF_FC,
+ BES_LOUDNESS_ACF_R_HPF_ORDER,
+ BES_LOUDNESS_ACF_R_LPF_FC,
+ BES_LOUDNESS_ACF_R_LPF_ORDER,
+ BES_LOUDNESS_ACF_R_BPF_FC,
+ BES_LOUDNESS_ACF_R_BPF_BW,
+ BES_LOUDNESS_ACF_R_BPF_GAIN,
+
+ 0,
+ BES_LOUDNESS_ACF_WS_GAIN_MAX,
+ BES_LOUDNESS_ACF_WS_GAIN_MIN,
+ BES_LOUDNESS_ACF_FILTER_FIRST,
+ BES_LOUDNESS_ACF_NUM_BANDS,
+ BES_LOUDNESS_ACF_FLT_BANK_ORDER,
+ BES_LOUDNESS_ACF_CROSSOVER_FREQ,
+ BES_LOUDNESS_ACF_GAIN_MAP_IN,
+ BES_LOUDNESS_ACF_GAIN_MAP_OUT,
+ BES_LOUDNESS_ACF_SB_GAIN,
+ BES_LOUDNESS_ACF_SB_MODE,
+ BES_LOUDNESS_ACF_DRC_DELAY,
+ BES_LOUDNESS_ACF_ATT_TIME,
+ BES_LOUDNESS_ACF_REL_TIME,
+ BES_LOUDNESS_ACF_HYST_TH,
+ BES_LOUDNESS_ACF_LIM_TH,
+ BES_LOUDNESS_ACF_LIM_GN,
+ BES_LOUDNESS_ACF_LIM_CONST,
+ BES_LOUDNESS_ACF_LIM_DELAY,
+ 0x0520,
+
+
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_musicdrc_custom_default =
+{
+ BES_LOUDNESS_MUSICDRC_L_HPF_FC,
+ BES_LOUDNESS_MUSICDRC_L_HPF_ORDER,
+ BES_LOUDNESS_MUSICDRC_L_LPF_FC,
+ BES_LOUDNESS_MUSICDRC_L_LPF_ORDER,
+ BES_LOUDNESS_MUSICDRC_L_BPF_FC,
+ BES_LOUDNESS_MUSICDRC_L_BPF_BW,
+ BES_LOUDNESS_MUSICDRC_L_BPF_GAIN,
+
+ BES_LOUDNESS_MUSICDRC_R_HPF_FC,
+ BES_LOUDNESS_MUSICDRC_R_HPF_ORDER,
+ BES_LOUDNESS_MUSICDRC_R_LPF_FC,
+ BES_LOUDNESS_MUSICDRC_R_LPF_ORDER,
+ BES_LOUDNESS_MUSICDRC_R_BPF_FC,
+ BES_LOUDNESS_MUSICDRC_R_BPF_BW,
+ BES_LOUDNESS_MUSICDRC_R_BPF_GAIN,
+
+ BES_LOUDNESS_MUSICDRC_SEP_LR_FILTER,
+ BES_LOUDNESS_MUSICDRC_WS_GAIN_MAX,
+ BES_LOUDNESS_MUSICDRC_WS_GAIN_MIN,
+ BES_LOUDNESS_MUSICDRC_FILTER_FIRST,
+ BES_LOUDNESS_MUSICDRC_NUM_BANDS,
+ BES_LOUDNESS_MUSICDRC_FLT_BANK_ORDER,
+ BES_LOUDNESS_MUSICDRC_CROSSOVER_FREQ,
+ BES_LOUDNESS_MUSICDRC_GAIN_MAP_IN,
+ BES_LOUDNESS_MUSICDRC_GAIN_MAP_OUT,
+ BES_LOUDNESS_MUSICDRC_SB_GAIN,
+ BES_LOUDNESS_MUSICDRC_SB_MODE,
+ BES_LOUDNESS_MUSICDRC_DRC_DELAY,
+ BES_LOUDNESS_MUSICDRC_ATT_TIME,
+ BES_LOUDNESS_MUSICDRC_REL_TIME,
+ BES_LOUDNESS_MUSICDRC_HYST_TH,
+ BES_LOUDNESS_MUSICDRC_LIM_TH,
+ BES_LOUDNESS_MUSICDRC_LIM_GN,
+ BES_LOUDNESS_MUSICDRC_LIM_CONST,
+ BES_LOUDNESS_MUSICDRC_LIM_DELAY,
+ 0x0520,
+
+
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_ringtonedrc_custom_default =
+{
+ BES_LOUDNESS_RINGTONEDRC_L_HPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_L_HPF_ORDER,
+ BES_LOUDNESS_RINGTONEDRC_L_LPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_L_LPF_ORDER,
+ BES_LOUDNESS_RINGTONEDRC_L_BPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_L_BPF_BW,
+ BES_LOUDNESS_RINGTONEDRC_L_BPF_GAIN,
+
+ BES_LOUDNESS_RINGTONEDRC_R_HPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_R_HPF_ORDER,
+ BES_LOUDNESS_RINGTONEDRC_R_LPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_R_LPF_ORDER,
+ BES_LOUDNESS_RINGTONEDRC_R_BPF_FC,
+ BES_LOUDNESS_RINGTONEDRC_R_BPF_BW,
+ BES_LOUDNESS_RINGTONEDRC_R_BPF_GAIN,
+
+ BES_LOUDNESS_RINGTONEDRC_SEP_LR_FILTER,
+ BES_LOUDNESS_RINGTONEDRC_WS_GAIN_MAX,
+ BES_LOUDNESS_RINGTONEDRC_WS_GAIN_MIN,
+ BES_LOUDNESS_RINGTONEDRC_FILTER_FIRST,
+ BES_LOUDNESS_RINGTONEDRC_NUM_BANDS,
+ BES_LOUDNESS_RINGTONEDRC_FLT_BANK_ORDER,
+ BES_LOUDNESS_RINGTONEDRC_CROSSOVER_FREQ,
+ BES_LOUDNESS_RINGTONEDRC_GAIN_MAP_IN,
+ BES_LOUDNESS_RINGTONEDRC_GAIN_MAP_OUT,
+ BES_LOUDNESS_RINGTONEDRC_SB_GAIN,
+ BES_LOUDNESS_RINGTONEDRC_SB_MODE,
+ BES_LOUDNESS_RINGTONEDRC_DRC_DELAY,
+ BES_LOUDNESS_RINGTONEDRC_ATT_TIME,
+ BES_LOUDNESS_RINGTONEDRC_REL_TIME,
+ BES_LOUDNESS_RINGTONEDRC_HYST_TH,
+ BES_LOUDNESS_RINGTONEDRC_LIM_TH,
+ BES_LOUDNESS_RINGTONEDRC_LIM_GN,
+ BES_LOUDNESS_RINGTONEDRC_LIM_CONST,
+ BES_LOUDNESS_RINGTONEDRC_LIM_DELAY,
+ 0x0520,
+
+
+};
+
+
+#elif defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF,
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_LPF_COEFF,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_ATT_TIME,
+ BES_LOUDNESS_REL_TIME,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+#if 0
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audiosub_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF_SUB,
+ BES_LOUDNESS_BPF_COEFF_SUB,
+ BES_LOUDNESS_LPF_COEFF_SUB,
+ BES_LOUDNESS_WS_GAIN_MAX_SUB,
+ BES_LOUDNESS_WS_GAIN_MIN_SUB,
+ BES_LOUDNESS_FILTER_FIRST_SUB,
+ BES_LOUDNESS_ATT_TIME_SUB,
+ BES_LOUDNESS_REL_TIME_SUB,
+ BES_LOUDNESS_GAIN_MAP_IN_SUB,
+ BES_LOUDNESS_GAIN_MAP_OUT_SUB,
+};
+#endif
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_hcf_custom_default =
+{
+ BES_LOUDNESS_HCF_HSF_COEFF,
+ BES_LOUDNESS_HCF_BPF_COEFF,
+ BES_LOUDNESS_HCF_LPF_COEFF,
+ BES_LOUDNESS_HCF_WS_GAIN_MAX,
+ BES_LOUDNESS_HCF_WS_GAIN_MIN,
+ BES_LOUDNESS_HCF_FILTER_FIRST,
+ BES_LOUDNESS_HCF_ATT_TIME,
+ BES_LOUDNESS_HCF_REL_TIME,
+ BES_LOUDNESS_HCF_GAIN_MAP_IN,
+ BES_LOUDNESS_HCF_GAIN_MAP_OUT,
+};
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_vibspk_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF,
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_LPF_COEFF,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_ATT_TIME,
+ BES_LOUDNESS_REL_TIME,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_musicdrc_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF,
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_LPF_COEFF,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_ATT_TIME,
+ BES_LOUDNESS_REL_TIME,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_ringtonedrc_custom_default =
+{
+ BES_LOUDNESS_HSF_COEFF,
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_LPF_COEFF,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_ATT_TIME,
+ BES_LOUDNESS_REL_TIME,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+
+#else
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_custom_default =
+{
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ BES_LOUDNESS_HSF_COEFF,
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_DRC_FORGET_TABLE,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_hcf_custom_default =
+{
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ BES_LOUDNESS_HCF_HSF_COEFF,
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ BES_LOUDNESS_HCF_BPF_COEFF,
+ BES_LOUDNESS_HCF_DRC_FORGET_TABLE,
+ BES_LOUDNESS_HCF_WS_GAIN_MAX,
+ BES_LOUDNESS_HCF_WS_GAIN_MIN,
+ BES_LOUDNESS_HCF_FILTER_FIRST,
+ BES_LOUDNESS_HCF_GAIN_MAP_IN,
+ BES_LOUDNESS_HCF_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_vibspk_custom_default =
+{
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ BES_LOUDNESS_HSF_COEFF,
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_DRC_FORGET_TABLE,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_musicdrc_custom_default =
+{
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ BES_LOUDNESS_HSF_COEFF,
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_DRC_FORGET_TABLE,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_ringtonedrc_custom_default =
+{
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ BES_LOUDNESS_HSF_COEFF,
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ BES_LOUDNESS_BPF_COEFF,
+ BES_LOUDNESS_DRC_FORGET_TABLE,
+ BES_LOUDNESS_WS_GAIN_MAX,
+ BES_LOUDNESS_WS_GAIN_MIN,
+ BES_LOUDNESS_FILTER_FIRST,
+ BES_LOUDNESS_GAIN_MAP_IN,
+ BES_LOUDNESS_GAIN_MAP_OUT,
+};
+
+#endif
+
+AUDIO_EFFECT_CUSTOM_PARAM_STRUCT audio_effect_custom_default =
+{
+ // DSRD parameters
+ BSRD_LEVEL,
+ BSRD_DISTANCE1,
+ BSRD_DISTANCE2,
+ BSRD_BAND_SELECT,
+
+ // BASS
+ BASS_CUTOFF_FREQ,
+ BASS_ISVB,
+
+ //EQ effect
+ NORMAL_GAIN_LEVEL,
+ DANCE_GAIN_LEVEL,
+ BASS_GAIN_LEVEL,
+ CLASSICAL_GAIN_LEVEL,
+ TREBLE_GAIN_LEVEL,
+ PARTY_GAIN_LEVEL,
+ POP_GAIN_LEVEL,
+ ROCK_GAIN_LEVEL,
+
+ //loudness mode
+ LOUDENHANCEMODE,
+
+ //TS
+ TIME_TD_TF,
+ TIME_TS_RATIO
+};
+
+AUDIO_PARAM_MED_STRUCT audio_param_med_default =
+{
+ SPEECH_INPUT_MED_FIR_COEFF,
+ SPEECH_OUTPUT_MED_FIR_COEFF,
+ FIR_output_index,
+ FIR_input_index,
+ MED_SPEECH_NORMAL_MODE_PARA,
+ MED_SPEECH_EARPHONE_MODE_PARA,
+ MED_SPEECH_BT_EARPHONE_MODE_PARA,
+ MED_SPEECH_LOUDSPK_MODE_PARA,
+ MED_SPEECH_CARKIT_MODE_PARA,
+ MED_SPEECH_BT_CORDLESS_MODE_PARA,
+ MED_SPEECH_AUX1_MODE_PARA,
+ MED_SPEECH_AUX2_MODE_PARA
+};
+
+
+AUDIO_VOLUME_CUSTOM_STRUCT audio_volume_custom_default =
+{
+ AUD_VOLUME_RING,
+ AUD_VOLUME_KEY,
+ AUD_VOLUME_MIC,
+ AUD_VOLUME_FMR,
+ AUD_VOLUME_SPH,
+ AUD_VOLUME_SID,
+ AUD_VOLUME_MEDIA,
+ AUD_VOLUME_MATV
+};
+
+AUDIO_CUSTOM_EXTRA_PARAM_STRUCT dual_mic_custom_default =
+{
+ DEFAULT_SPEECH_DUAL_MIC_ABF_PARA,
+ DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA,
+ DEFAULT_SPEECH_DUAL_MIC_ABF_PARA_LoudSPK,
+ DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_LoudSPK,
+ DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VR,
+ DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VOIP,
+ DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VOIP_LoudSPK
+};
+
+AUDIO_GAIN_TABLE_STRUCT Gain_control_table_default ={
+ DEFAULT_VOICE_GAIN_TABLE_PARA,
+ DEFAULT_SYSTEM_GAIN_TABLE_PARA,
+ DEFAULT_RINGTONE_GAIN_TABLE_PARA,
+ DEFAULT_MUSIC_GAIN_TABLE_PARA,
+ DEFAULT_ALARM_GAIN_TABLE_PARA,
+ DEFAULT_NOTIFICATION_GAIN_TABLE_PARA,
+ DEFAULT_BLUETOOTH_SCO_GAIN_TABLE_PARA,
+ DEFAULT_ENFORCEAUDIBLE_GAIN_TABLE_PARA,
+ DEFAULT_DTMF_GAIN_TABLE_PARA,
+ DEFAULT_TTS_GAIN_TABLE_PARA,
+ DEFAULT_FM_GAIN_TABLE_PARA,
+ DEFAULT_MATV_GAIN_TABLE_PARA,
+ DEFAULT_SPEECH_NB_GAIN_TABLE_PARA,
+ DEFAULT_SPEECH_WB_GAIN_TABLE_PARA,
+ DEFAULT_SIDETONE_NB_GAIN_TABLE_PARA,
+ DEFAULT_SIDETONE_WB_GAIN_TABLE_PARA,
+ DEFAULT_MICROPHONE_GAIN_TABLE_PARA
+};
+
+AUDIO_BT_GAIN_STRUCT bt_gain_control_default ={
+ DEFAULT_BLUETOOTH_NREC_GAIN_TABLE_PARA
+};
+
+AUDIO_HD_RECORD_PARAM_STRUCT Hd_Recrod_Par_default = {
+ //hd_rec mode num & fir num
+ HD_REC_MODE_INDEX_NUM,
+ HD_REC_FIR_INDEX_NUM,
+ //hd_rec_speech_mode_para
+ DEFAULT_HD_RECORD_SPH_MODE_PAR,
+ //hd_rec_fir
+ DEFAULT_HD_RECORD_FIR_Coeff,
+ //hd_rec fir mapping - ch1
+ DEFAULT_HD_RECORD_MODE_FIR_MAPPING_CH1,
+ //hd_rec fir mapping - ch2
+ DEFAULT_HD_RECORD_MODE_FIR_MAPPING_CH2,
+ //hd_rec device mode mapping
+ DEFAULT_HD_RECORD_MODE_DEV_MAPPING,
+ //hd_rec_map_to_input_src
+ DEFAULT_HD_RECORD_MODE_INPUT_SRC_MAPPING,
+ //hd_rec_map_to_stereo_flag
+ DEFAULT_HD_RECORD_MODE_STEREO_FLAGS
+};
+
+AUDIO_HD_RECORD_SCENE_TABLE_STRUCT Hd_Recrod_Scene_Table_default = {
+ DEFAULT_HD_RECORD_NUM_VOICE_RECOGNITION_SCENES,
+ DEFAULT_HD_RECORD_NUM_VOICE_SCENES,
+ DEFAULT_HD_RECORD_NUM_VIDEO_SCENES,
+ DEFAULT_HD_RECORD_NUM_VOICE_UNLOCK_SCENES,
+ DEFAULT_HD_RECORD_NUM_CUSTOMIZATION_SCENES,
+ DEFAULT_HD_RECORD_SCENE_TABLE,
+ DEFAULT_HD_RECORD_SCENE_NAME
+};
+
+VOICE_RECOGNITION_PARAM_STRUCT Voice_Recognize_Par_default = {
+ //for framework, voice ui related
+ DEFAULT_AP_NUM,
+ DEFAULT_LANGUAGE_NUM,
+ DEFAULT_LANGUAGE_FOLDER_NAME,
+ DEFAULT_COMMAND_NUM_PER_LAN,
+ DEFAULT_AP_SUPPORT_INFO,
+ DEFAULT_ALGORITHM_PARAM // for CTO
+};
+
+AUDIO_AUDENH_CONTROL_OPTION_STRUCT AUDENH_Control_Option_Par_default = {
+ DEFAULT_AUDIO_AUDENH_CONTROL_OPTION_Coeff
+};
+
+AUDIO_BUFFER_DC_CALIBRATION_STRUCT Audio_Buffer_DC_Calibration_Par_default = {
+ 0xFFFF,
+ 0,
+ 0,
+ 0
+};
+
+AUDIO_VOIP_PARAM_STRUCT Audio_VOIP_Par_default = {
+ DEFAULT_VOIP_SPEECH_COMMON_PARAM,
+ DEFAULT_VOIP_SPEECH_MODE_PARAM,
+ DEFAULT_VOIP_IN_FIR_PARAM,
+ DEFAULT_VOIP_OUT_FIR_PARAM
+};
+
+AUDIO_ANC_CUSTOM_PARAM_STRUCT speech_ANC_custom_default = {
+ DEFAULT_SPEECH_ANC_PARA,
+ DEFAULT_SPEECH_ANC_APPLY,
+ DEFAULT_SPEECH_ANC_LOG_ENABLE,
+ DEFAULT_SPEECH_ANC_LOG_DOWNSAMPLE,
+ DEFAULT_SPEECH_ANC_DL_PGA
+};
+
+AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT speech_magi_conference_custom_default = {
+ DEFAULT_SPEECH_VOICE_TRACKING_MODE_PARA,
+ DEFAULT_WB_SPEECH_VOICE_TRACKING_MODE_PARA
+};
+
+AUDIO_CUSTOM_HAC_PARAM_STRUCT speech_hac_param_custom_default = {
+ DEFAULT_SPEECH_HAC_MODE_PARA,
+ DEFAULT_WB_SPEECH_HAC_MODE_PARA,
+ DEFAULT_SPEECH_HAC_INPUT_FIR_COEFF,
+ DEFAULT_SPEECH_HAC_OUTPUT_FIR_COEFF,
+ DEFAULT_WB_SPEECH_HAC_INPUT_FIR_COEFF,
+ DEFAULT_WB_SPEECH_HAC_OUTPUT_FIR_COEFF,
+ DEFAULT_VER1_AUD_VOLUME_MIC_HAC,
+ DEFAULT_VER1_AUD_VOLUME_SPH_HAC,
+ DEFAULT_VER1_AUD_VOLUME_SID_HAC
+};
+
+AUDIO_CUSTOM_SPEECH_LPBK_PARAM_STRUCT speech_lpbk_param_custom_default = {
+ DEFAULT_SPEECH_LPBK_NORMAL_MODE_PARA,
+ DEFAULT_SPEECH_LPBK_EARPHONE_MODE_PARA,
+ DEFAULT_SPEECH_LPBK_LOUDSPK_MODE_PARA,
+};
+
+AUDIO_SPEAKER_MONITOR_PARAM_STRUCT speaker_monitor_par_default = {
+ DEFAULT_SPEAKER_MONITOR_PARAM,
+ DEFAULT_SPEAKER_TEMP_INITIAL,
+ /* hardware setting */
+ DEFAULT_SPEAKER_CURRENT_SENSE_RESISTOR,
+ /* resonant frqquency*/
+ DEFAULT_SPEAKER_RESONANT_FC,
+ DEFAULT_SPEAKER_RESONANT_BW,
+ DEFAULT_SPEAKER_RESONANT_TH,
+ /* temperature estimation */
+ DEFAULT_SPEAKER_PREFER_HIGH_BAND,
+ DEFAULT_SPEAKER_PREFER_LOW_BAND,
+ /* temperature estimation control*/
+ DEFAULT_SPEAKER_TEMP_CONTROL_LOW, // low limit
+ DEFAULT_SPEAKER_TEMP_CONTROL_HIGH, // high limit
+ DEFAULT_SPEAKER_TEMP_CONTROL_LOG, // max log time
+ /* monitor interval */
+ DEFAULT_SPEAKER_MONITOR_INTERVAL //unit: ms
+};
+
+#else
+extern AUDIO_CUSTOM_PARAM_STRUCT speech_custom_default;
+
+extern AUDIO_VER1_CUSTOM_VOLUME_STRUCT audio_ver1_custom_default;
+
+
+extern AUDIO_CUSTOM_WB_PARAM_STRUCT wb_speech_custom_default;
+
+extern AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_custom_default;
+
+extern AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_hcf_custom_default;
+extern AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_vibspk_custom_default;
+extern AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_musicdrc_custom_default;
+extern AUDIO_ACF_CUSTOM_PARAM_STRUCT audio_ringtonedrc_custom_default;
+
+extern AUDIO_EFFECT_CUSTOM_PARAM_STRUCT audio_effect_custom_default;
+
+extern AUDIO_PARAM_MED_STRUCT audio_param_med_default;
+
+extern AUDIO_VOLUME_CUSTOM_STRUCT audio_volume_custom_default;
+
+extern AUDIO_CUSTOM_EXTRA_PARAM_STRUCT dual_mic_custom_default;
+
+extern AUDIO_GAIN_TABLE_STRUCT Gain_control_table_default;
+
+extern AUDIO_HD_RECORD_PARAM_STRUCT Hd_Recrod_Par_default;
+
+extern AUDIO_HD_RECORD_SCENE_TABLE_STRUCT Hd_Recrod_Scene_Table_default;
+
+
+extern VOICE_RECOGNITION_PARAM_STRUCT Voice_Recognize_Par_default;
+
+extern AUDIO_AUDENH_CONTROL_OPTION_STRUCT AUDENH_Control_Option_Par_default;
+
+extern AUDIO_BUFFER_DC_CALIBRATION_STRUCT Audio_Buffer_DC_Calibration_Par_default;
+
+extern AUDIO_VOIP_PARAM_STRUCT Audio_VOIP_Par_default;
+extern AUDIO_ANC_CUSTOM_PARAM_STRUCT speech_ANC_custom_default;
+extern AUDIO_SPEAKER_MONITOR_PARAM_STRUCT speaker_monitor_par_default;
+extern AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT speech_magi_conference_custom_default;
+extern AUDIO_CUSTOM_HAC_PARAM_STRUCT speech_hac_param_custom_default;
+extern AUDIO_CUSTOM_SPEECH_LPBK_PARAM_STRUCT speech_lpbk_param_custom_default;
+extern AUDIO_BT_GAIN_STRUCT bt_gain_control_default;
+
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BT_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BT_Default.h
new file mode 100644
index 0000000..943dc8f
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BT_Default.h
@@ -0,0 +1,343 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+
+#ifndef _CFG_BT_DEFAULT_H
+#define _CFG_BT_DEFAULT_H
+
+///#include "cfgfileinc/CFG_BT_File.h"
+
+// the default value of bt nvram file
+
+static ap_nvram_btradio_struct stBtDefault_6620 =
+{
+ {0x00, 0x00, 0x46, 0x66, 0x20, 0x01},
+ {0x60, 0x00},
+ {0x23, 0x10, 0x00, 0x00},
+ {0x06, 0x80, 0x00, 0x06, 0x03, 0x06},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00},
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6628 =
+{
+ {0x00, 0x00, 0x46, 0x66, 0x28, 0x01},
+ {0x60, 0x00},
+#if defined(__MTK_MERGE_INTERFACE_SUPPORT__)
+ {0x63, 0x10, 0x00, 0x00},
+#else
+ {0x23, 0x10, 0x00, 0x00},
+#endif
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00},
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6630 =
+{
+ {0x00, 0x00, 0x46, 0x66, 0x30, 0x01},
+ {0x60, 0x00}, //not used
+#if defined(__MTK_MERGE_INTERFACE_SUPPORT__)
+ {0x63, 0x10, 0x00, 0x00},
+#else
+ {0x23, 0x10, 0x00, 0x00},
+#endif
+ {0x06, 0x80, 0x00, 0x06, 0x05, 0x06},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault =
+{
+ {0x00, 0x00, 0x46, 0x66, 0x30, 0x01},
+ {0x60, 0x00}, //not used
+#if defined(__MTK_MERGE_INTERFACE_SUPPORT__)
+ {0x63, 0x10, 0x00, 0x00},
+#else
+ {0x23, 0x10, 0x00, 0x00},
+#endif
+ {0x06, 0x80, 0x00, 0x06, 0x05, 0x06},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6572 =
+{
+ {0x00, 0x00, 0x46, 0x65, 0x72, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6582 =
+{
+ {0x00, 0x00, 0x46, 0x65, 0x82, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6592 =
+{
+ {0x00, 0x00, 0x46, 0x65, 0x92, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6752 =
+{
+ {0x00, 0x00, 0x46, 0x67, 0x52, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6735_0321 =
+{
+ {0x00, 0x00, 0x46, 0x03, 0x21, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6735_0335 =
+{
+ {0x00, 0x00, 0x46, 0x03, 0x35, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6735_0337 =
+{
+ {0x00, 0x00, 0x46, 0x03, 0x37, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+
+static ap_nvram_btradio_struct stBtDefault_8127 =
+{
+ {0x00, 0x00, 0x46, 0x81, 0x27, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_6580 =
+{
+ {0x00, 0x00, 0x46, 0x65, 0x80, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_8163 =
+{
+ {0x00, 0x00, 0x46, 0x81, 0x63, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+static ap_nvram_btradio_struct stBtDefault_8590 =
+{
+ {0x00, 0x00, 0x46, 0x85, 0x90, 0x01},
+ {0x60, 0x00}, //not used
+ {0x23, 0x10, 0x00, 0x00}, //not used
+ {0x07, 0x80, 0x00, 0x06, 0x05, 0x07},
+ {0x03, 0x40, 0x1F, 0x40, 0x1F, 0x00, 0x04},
+ {0x80, 0x00}, //not used
+ {0xFF, 0xFF, 0xFF},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, //not used
+ ///////////// Reserved /////////////
+ {0x00, 0x00},
+ {0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
+ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+};
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BWCS_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BWCS_Default.h
new file mode 100644
index 0000000..9c1dde7
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_BWCS_Default.h
@@ -0,0 +1,141 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_BWCS_Default.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * give the default BT/WiFi co-existence config data.
+ *
+ * Author:
+ * -------
+ * Saker Hsia(MTK02327)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 30 2010 saker.hsia
+ * [ALPS00002764][Need Patch] [Volunteer Patch] ALPS.10X.W10.28 Volunteer patch for BWCS NVRAM customization
+ * .
+ *
+ * 05 16 2010 saker.hsia
+ * [ALPS00001913][BWCS] BT WiFi Single Antenna Feature check in Android 2.1
+ * .
+ *
+ * 05 14 2010 saker.hsia
+ * [ALPS00001913][BWCS] BT WiFi Single Antenna Feature check in Android 2.1
+ * .
+ *
+ * 05 05 2010 saker.hsia
+ * [ALPS00001913][BWCS] BT WiFi Single Antenna Feature check in Android 2.1
+ * Check in BT/WiFi Single Antenna Feature
+ *
+ *******************************************************************************/
+#ifndef _CFG_BWCS_D_H
+#define _CFG_BWCS_D_H
+#include "inc/bwcs_custom.h"
+ap_nvram_bwcs_config_struct stBWCSConfigDefault =
+{
+ /* Real Time RSSI Threshold : BT / WIFI1 / WIFI2 */
+ {RT_RSSI_TH_BT, RT_RSSI_TH_WIFI1, RT_RSSI_TH_WIFI2}
+ ,
+ /* Non Real Time RSSI Threshold : BT / WIFI1 / WIFI2 */
+ {NRT_RSSI_TH_BT, NRT_RSSI_TH_WIFI1, NRT_RSSI_TH_WIFI2}
+ ,
+ /* Antenna path compensation */
+ ANT_PATH_COMP
+ ,
+ /* antenna path switch protection period, Unit is seconds */
+ ANT_SWITCH_PROT_TIME
+ ,
+ /* TX Flow control : medium time / period time */
+ WIFI_TX_FLOW_CTRL
+ ,
+ /* BT RX Range : Low / High */
+ BT_RX_RANGE
+ ,
+ /* BT TX power : WIFI OFF / WIFI SCO / WIFI ACL */
+ {BT_TX_PWR_WIFI_OFF, BT_TX_PWR_SCO, BT_TX_PWR_ACL}
+ ,
+ /* Reserved , 5 */
+ RESERVED
+};
+#endif /* _CFG_BWCS_D_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Custom1_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Custom1_Default.h
new file mode 100644
index 0000000..797542c
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_Custom1_Default.h
@@ -0,0 +1,9 @@
+#ifndef _CFG_CUSTOM1_D_H
+#define _CFG_CUSTOM1_D_H
+
+File_Custom1_Struct stCustom1Default =
+{
+ 1
+};
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_EXT_MDTYPE_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_EXT_MDTYPE_Default.h
new file mode 100644
index 0000000..7d43b33
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_EXT_MDTYPE_Default.h
@@ -0,0 +1,70 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2012
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_EXT_MDTYPE_Default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * EXT Modem Type NVRAM Default value.
+ *
+ * Author:
+ * -------
+ * AP Wang (mtk05304)
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ ****************************************************************************/
+#ifndef _CFG_EXT_MDTYPE_D_H
+#define _CFG_EXT_MDTYPE_D_H
+
+#include "cfgfileinc/CFG_EXT_MDTYPE_File.h"
+
+ext_md_type_struct stEXTMDTypeDefault =
+{
+ 4,
+ 0
+};
+#endif /* _CFG_EXT_MDTYPE_D_H */
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_GPS_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_GPS_Default.h
new file mode 100644
index 0000000..4a32f10
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_GPS_Default.h
@@ -0,0 +1,89 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_GPS_Default.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * give the default GPS config data.
+ *
+ * Author:
+ * -------
+ * Mike Chang(MTK02063)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 24 2010 yunchang.chang
+ * [ALPS00002677][Need Patch] [Volunteer Patch] ALPS.10X.W10.26 Volunteer patch for GPS customization use NVRam
+ * .
+ *
+ *******************************************************************************/
+#ifndef _CFG_GPS_D_H
+#define _CFG_GPS_D_H
+ap_nvram_gps_config_struct stGPSConfigDefault =
+{
+ /* if chip detector say it's not 3332 use /dev/stpgps,else use /ttyMT1 */
+ {'/','d','e','v','/','s','t','p','g','p','s',0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},
+ /* 0:s/w, 1:none, 2:h/w */
+ 1,
+
+ /* 26MHz */
+ 26000000,
+ /* default is 0ppm, by chip definetion. 6620 is 500, else 2000 */
+ 0,
+ /* 0:16.368MHz TCXO */
+ 0xFF,
+ /* 0:mixer-in, 1:internal-LNA, 6572/6582 dsp hardcode set this item to 1, only for 3332 one binary */
+ 0,
+ /* sbas:0:none */
+ 0,
+ 0,
+ 0,
+ 0,
+ 0
+};
+#endif /* _CFG_GPS_D_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDMODE_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDMODE_Default.h
new file mode 100644
index 0000000..50c1bbb
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDMODE_Default.h
@@ -0,0 +1,108 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_MDMODE_Default.h
+ *
+ * Project:
+ * --------
+ * MiFi
+ *
+ * Description:
+ * ------------
+ * header file of META CFG file default value
+ *
+ * Author:
+ * -------
+ * MTK02065(Shane Chang)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_MDMODE_H
+#define _CFG_MDMODE_H
+
+///#include "../cfgfileinc/CFG_MDMODE_File.h"
+
+// the default value of bt nvram file
+MDMODE_CFG_Struct stMDMODEDefualt =
+{
+ {'T', 'D', 'D'},
+};
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDTYPE_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDTYPE_Default.h
new file mode 100644
index 0000000..5e0fb41
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MDTYPE_Default.h
@@ -0,0 +1,71 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_MDTYPE_Default.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * give the default sim switch mode data.
+ *
+ * Author:
+ * -------
+ * Haow Wang(MTK81183)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ * .
+ *
+ *******************************************************************************/
+#ifndef _CFG_MDTYPE_D_H
+#define _CFG_MDTYPE_D_H
+
+#include "cfgfileinc/CFG_MDTYPE_File.h"
+
+md_type_struct stMDTypeDefault =
+{
+ 0
+};
+#endif /* _CFG_SSW_D_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MD_SBP_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MD_SBP_Default.h
new file mode 100644
index 0000000..9ddd604
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_MD_SBP_Default.h
@@ -0,0 +1,71 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_MD_SBP_Default.h
+ *
+ * Project:
+ * --------
+ * KK
+ *
+ * Description:
+ * ------------
+ * give the default md SBP config data.
+ *
+ * Author:
+ * -------
+ * Jue Zhou(mtk80024)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * .
+ *
+ *******************************************************************************/
+#ifndef _CFG_MD_SBP_D_H
+#define _CFG_MD_SBP_D_H
+
+MD_SBP_Struct stMDSBPConfigDefault =
+{
+ 0, 1, 0, 1, 0, 1
+};
+#endif /* _CFG_MD_SBP_D_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_OMADMUSB_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_OMADMUSB_Default.h
new file mode 100644
index 0000000..b49b0d0
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_OMADMUSB_Default.h
@@ -0,0 +1,110 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_OMADMUSB_Default.h
+ *
+ * Project:
+ * --------
+ * YUSU
+ *
+ * Description:
+ * ------------
+ * Default value of OMADM usb config
+ *
+ * Author:
+ * -------
+ * MTK80863(Hao Lin)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_OMADMUSB_DEFAULT_H
+#define _CFG_OMADMUSB_DEFAULT_H
+
+// the default value of OMADM usb nvram file
+OMADMUSB_CFG_Struct stOMADMUSBDefualt =
+{
+ 1,
+ 1,
+ 1,
+ 0,
+};
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_PRODUCT_INFO_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_PRODUCT_INFO_Default.h
new file mode 100644
index 0000000..da39792
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_PRODUCT_INFO_Default.h
@@ -0,0 +1,109 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_PRODUCT_INFO_Default.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * give the default PRODUCT_INFO config data.
+ *
+ * Author:
+ * -------
+ * Yuchi Xu(MTK81073)
+ *
+ *------------------------------------------------------------------------------
+
+ *******************************************************************************/
+#ifndef _CFG_PRODUCT_INFO_D_H
+#define _CFG_PRODUCT_INFO_D_H
+
+PRODUCT_INFO stPRODUCT_INFOConfigDefault =
+{
+ /* barcode */
+ /*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,
+ /* IMEI*/
+ /*{*//*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0,
+ /*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0,
+ /*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0,
+ /*{*/0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0/*}*/,0x0,0x0/*}*/,
+ /* reserved */
+ /*{*/0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*1*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*6*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*11*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*16*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*21*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*26*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00/*}*/
+
+};
+#endif /* _CFG_PRODUCT_INFO_D_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SDIO_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SDIO_Default.h
new file mode 100644
index 0000000..2b8a7ae
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SDIO_Default.h
@@ -0,0 +1,74 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_SDIO_Default.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * give the default SDIO config data.
+ *
+ * Author:
+ * -------
+ * Juju Sung(MTK04314)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * .
+ *
+ *******************************************************************************/
+#ifndef _CFG_SDIO_D_H
+#define _CFG_SDIO_D_H
+ap_nvram_sdio_config_struct stSDIOConfigDefault =
+{
+ 0,
+ /*1--2--3--4--5--6--7--8--9-10-11-12-13-14-15-16-17-17-19*/
+ {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1},
+ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
+ /* 4074 zero */
+ {0},
+};
+#endif /* _CFG_GPS_D_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SIM_CONFIG_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SIM_CONFIG_Default.h
new file mode 100644
index 0000000..6a5f5dc
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_SIM_CONFIG_Default.h
@@ -0,0 +1,112 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_sim_config_default.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of UART default config
+ *
+ * Author:
+ * -------
+ * LiWen (MTK02556)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * mtk02556
+ * [DUMA00128675] [NVRAM] Add NVRAM SIM struct
+ * NVRAM SIM add default value struct
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_SIM_CONFIG_DEFAULT_H
+#define _CFG_SIM_CONFIG_DEFAULT_H
+
+ap_nvram_uart_config_struct stSIMConfigDefault =
+{
+ {1}
+};
+
+#endif //_CFG_SIM_CONFIG_DEFAULT_H
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_UART_Config_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_UART_Config_Default.h
new file mode 100644
index 0000000..7be143d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_UART_Config_Default.h
@@ -0,0 +1,118 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_uart_config_default.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of UART default config
+ *
+ * Author:
+ * -------
+ * LiChunhui (MTK80143)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * Apr 10 2009 mtk80306
+ * [DUMA00114160] daily build error
+ * remove the include path.
+ *
+ * Mar 24 2009 mtk80143
+ * [DUMA00112375] [uart] UART EM mode
+ * Add for UART EM mode
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_UART_CONFIG_DEFAULT_H
+#define _CFG_UART_CONFIG_DEFAULT_H
+
+///#include "cfgfileinc/CFG_UART_File.h"
+
+ap_nvram_uart_config_struct stUARTConfigDefault =
+{
+ {0x01,0x0,0x0,0x0}
+};
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_WIFI_Default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_WIFI_Default.h
new file mode 100644
index 0000000..169d679
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/CFG_WIFI_Default.h
@@ -0,0 +1,302 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_wifi_default.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * give the default MT5921 config data.
+ *
+ * Author:
+ * -------
+ * Renbang (MTK80150) 06/08/2009
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 09 26 2011 cp.wu
+ * [ALPS00070736] MT6573¤W±ªº Wifi ©w¨î¤Æ»Ý¨D
+ * update default value for regularity domain fields.
+ *
+ * 05 31 2011 cp.wu
+ * [ALPS00050349] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM
+ * adjust default TX power to 20dB(CCK) and 18dB(OFDM/HT20).
+ *
+ * 05 26 2011 cp.wu
+ * [ALPS00050349] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM
+ * update Wi-Fi NVRAM definition for band edge tx power control.
+ *
+ * 04 19 2011 cp.wu
+ * [ALPS00041285] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi] Merge MT6620 Wi-Fi into mt6575_evb project
+ * 1. update init.rc for normal boot/meta/factory for MT6620 Wi-Fi related part.
+ * 2. update NVRAM structure definition and default value for MT6620 Wi-Fi
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ * mtk80150
+ * [DUMA00131389] [wifi] enable MT5921 NVRAM
+ * Enable Daisy Chain in default setting
+ *
+ * Jul 9 2009 mtk80306
+ * [DUMA00122953] optimize nvram and change meta clean boot flag.
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_WIFI_D_H
+#define _CFG_WIFI_D_H
+
+#if !defined(MT6628)
+#define MT6628
+#endif
+
+#include "../cfgfileinc/CFG_Wifi_File.h"
+#include "../inc/wifi_custom.h"
+// the default value of Wi-Fi nvram file
+
+#if defined(MT6628)
+WIFI_CFG_PARAM_STRUCT stWifiCfgDefault =
+{
+ 0x0104, /* Own Version For MT6628*/
+ 0x0000, /* Peer Version */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* MAC ADDRESS */
+ /*{*/ 0x00, 0x00 /*}*/, /* COUNTRY CODE */
+ /*{*/ 0x26, 0x26, 0x00, 0x00, /*cTxPwr2G4Cck*/ /*cTxPwr2G4Dsss*/
+ 0x22, 0x22, 0x22, 0x22, 0x21, 0x21, /*cTxPwr2G4OFDM*/
+ 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, /*cTxPwr2G4HT20*/
+ 0x21, 0x21, 0x21, 0x1E, 0x1E, 0x1E, /*cTxPwr2G4HT40*/
+ 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /*cTxPwr5GOFDM*/
+ 0x22, 0x22, 0x22, 0x20, 0x20, 0x20, /*cTxPwr5GHT20*/
+ 0x22, 0x22, 0x22, 0x20, 0x20, 0x20 /*}*/, /*cTxPwr5GHT40*/ /* TX_PWR_PARAM_T */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x18, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* aucEFUSE */
+ 0x01, // TX_PWR_PARAM_T is VALID
+ 0x01, // 5G band is supported
+ 0x01, // 2.4GHz band edge power enabled
+ 0x26, // cBandEdgeMaxPwrCCK
+ 0x1E, // cBandEdgeMaxPwrOFDM20
+ 0x1A, // cBandEdgeMaxPwrOFDM40
+ 0x00, // ucRegChannelListMap
+ 0x00, // ucRegChannelListIndex
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00/*}*/, /* aucRegSubbandInfo */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/,/* aucReserved2 */
+
+ 0x0001, /* Own Version */
+ 0x0000, /* Peer Version */
+ 0x0, /* uc2G4BwFixed20M */
+ 0x0, /* uc5GBwFixed20M */
+ 0x1, /* ucEnable5GBand */
+ 0x0, /* aucPReTailReserved */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*}*/ /* aucTailReserved */
+};
+
+#elif defined(MT5931)
+WIFI_CFG_PARAM_STRUCT stWifiCfgDefault =
+{
+ 0x0104, /* Own Version For MT5931*/
+ 0x0000, /* Peer Version */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* MAC ADDRESS */
+ /*{*/ 0x00, 0x00 /*}*/, /* COUNTRY CODE */
+ /*{*/ 0x26, 0x26, /*{*/ 0x00, 0x00 /*}*/,
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /*cTxPwr2G4OFDM*/
+ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, /*cTxPwr2G4HT20*/
+ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, /*cTxPwr2G4HT40*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*cTxPwr5GOFDM*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*cTxPwr5GHT20*/
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /*cTxPwr5GHT40*/ /* TX_PWR_PARAM_T */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* aucEFUSE */
+ 0x01, // TX_PWR_PARAM_T is VALID
+ 0x00, // 5G band is unsupported
+ 0x00, // 2.4GHz band edge power disabled
+ 0x26, // cBandEdgeMaxPwrCCK
+ 0x20, // cBandEdgeMaxPwrOFDM20
+ 0x1C, // cBandEdgeMaxPwrOFDM40
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* aucReserved2 */
+
+ 0x0001, /* Own Version */
+ 0x0000, /* Peer Version */
+ 0x0,
+ 0x0,
+ 0x0,
+ 0x0,
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*},*/ /* aucTailReserved */
+};
+#else // for 6620
+WIFI_CFG_PARAM_STRUCT stWifiCfgDefault =
+{
+ 0x0103, /* Own Version */
+ 0x0000, /* Peer Version */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* MAC ADDRESS */
+ /*{*/ 0x00, 0x00 /*}*/, /* COUNTRY CODE */
+ /*{*/ 0x28, /*{*/ 0x00, 0x00, 0x00 /*}*/,
+ 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24,
+ 0x24, 0x24, 0x24, 0x24,
+ 0x20, 0x20, 0x20, 0x20,
+ 0x20, 0x20, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A,
+ 0x1A, 0x1A, 0x1A, 0x1A /*}*/, /* TX_PWR_PARAM_T */
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* aucEFUSE */
+ 0x01, // TX_PWR_PARAM_T is VALID
+ 0x00, // 5G band is unsupported
+ 0x00, // 2.4GHz band edge power disabled
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ 0x00,
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 /*}*/,
+
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /*}*/, /* aucReserved2 */
+
+ 0x0001, /* Own Version */
+ 0x0000, /* Peer Version */
+ 0x0,
+ 0x0,
+ 0x0,
+ 0x0,
+ /*{*/ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /*},*/ /* aucTailReserved */
+};
+#endif
+
+
+WIFI_CUSTOM_PARAM_STRUCT stWifiCustomDefault =
+{
+ 0x0, // Reserved
+};
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acf_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acf_default.h
new file mode 100644
index 0000000..8d4b3c8
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acf_default.h
@@ -0,0 +1,365 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_acf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 04 22 2013 kh.hung
+ * [ALPS00580843] [MT6572tdv1_phone[lca]][music][Symbio][Free test] µ?¼½©ñ¾¹¼½©ñµ?ªº?µ?¤j?¤p¡A¤£?©w
+ * Use default DRC setting.
+ *
+ * Review: http://mtksap20:8080/go?page=NewReview&reviewid=59367
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_ACF_DEFAULT_H
+#define AUDIO_ACF_DEFAULT_H
+#if defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V5)
+/* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+#define BES_LOUDNESS_ACF_L_HPF_FC 400
+#define BES_LOUDNESS_ACF_L_HPF_ORDER 2
+#define BES_LOUDNESS_ACF_L_BPF_FC 4000, 500, 2000, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_L_BPF_BW 1421, 284, 1421, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_L_BPF_GAIN 6 << 8, -6 << 8, 6 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8
+#define BES_LOUDNESS_ACF_L_LPF_FC 0
+#define BES_LOUDNESS_ACF_L_LPF_ORDER 0
+#define BES_LOUDNESS_ACF_R_HPF_FC 400
+#define BES_LOUDNESS_ACF_R_HPF_ORDER 2
+#define BES_LOUDNESS_ACF_R_BPF_FC 4000, 500, 2000, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_R_BPF_BW 1421, 284, 1421, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_R_BPF_GAIN 6 << 8, -6 << 8, 6 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8
+#define BES_LOUDNESS_ACF_R_LPF_FC 0
+#define BES_LOUDNESS_ACF_R_LPF_ORDER 0
+
+#define BES_LOUDNESS_ACF_SEP_LR_FILTER 0
+
+#define BES_LOUDNESS_ACF_WS_GAIN_MAX 0
+#define BES_LOUDNESS_ACF_WS_GAIN_MIN 0
+#define BES_LOUDNESS_ACF_FILTER_FIRST 0
+
+#define BES_LOUDNESS_ACF_NUM_BANDS 0
+#define BES_LOUDNESS_ACF_FLT_BANK_ORDER 0
+#define BES_LOUDNESS_ACF_DRC_DELAY 0
+#define BES_LOUDNESS_ACF_CROSSOVER_FREQ 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_SB_MODE 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_SB_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_ATT_TIME \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_REL_TIME \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_ACF_HYST_TH \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+
+#define BES_LOUDNESS_ACF_LIM_TH 0
+#define BES_LOUDNESS_ACF_LIM_GN 0
+#define BES_LOUDNESS_ACF_LIM_CONST 0
+#define BES_LOUDNESS_ACF_LIM_DELAY 0
+
+#elif defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4)
+/* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ #define BES_LOUDNESS_HSF_COEFF \
+ 0x07DA170A, 0xF054253E, 0x07D1C95A, 0x7D56C298, 0x00000000, \
+ 0x07D6C2CB, 0xF05B867E, 0x07CDBD5F, 0x7D19C2D2, 0x00000000, \
+ 0x07C751CE, 0xF07DBC74, 0x07BAFE49, 0x7BFFC3DA, 0x00000000, \
+ 0x07B4AD39, 0xF0A6FF56, 0x07A46981, 0x7AA6C515, 0x00000000, \
+ 0x07AE1CEE, 0xF0B5836A, 0x079C79B2, 0x7A2CC583, 0x00000000, \
+ 0x078FC91E, 0xF0F882BF, 0x0777E4C0, 0x77F1C777, 0x00000000, \
+ 0x076B705A, 0xF148A5E6, 0x074C3E63, 0x7538C9C0, 0x00000000, \
+ 0x075EB726, 0xF164A91C, 0x073D0346, 0x7441CA88, 0x00000000, \
+ 0x07247309, 0xF1E4AE1A, 0x06F7957D, 0x6FC0CE05, 0x00000000, \
+\
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
+
+
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ #define BES_LOUDNESS_BPF_COEFF \
+ 0x3FD481A8,0x3EFF7E57,0xC12C0000, \
+ 0x3FD081DA,0x3EE97E25,0xC1460000, \
+ 0x3FBE82D7,0x3E817D28,0xC1C00000, \
+ 0x3FA98440,0x3E037BBF,0xC2520000, \
+ 0x3FA184CE,0x3DD77B31,0xC2860000, \
+ 0x3F7E87BD,0x3D0C7842,0xC3740000, \
+\
+ 0x3FD481C0,0x3EFF7E3F,0xC12C0000, \
+ 0x3FD081F5,0x3EE97E0A,0xC1460000, \
+ 0x3FBE830B,0x3E817CF4,0xC1C00000, \
+ 0x3FA9849C,0x3E037B63,0xC2520000, \
+ 0x3FA1853A,0x3DD77AC5,0xC2860000, \
+ 0x3F7E8889,0x3D0C7776,0xC3740000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+\
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000
+
+ #define BES_LOUDNESS_LPF_COEFF \
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000
+
+ #define BES_LOUDNESS_WS_GAIN_MAX 0x399A
+
+ #define BES_LOUDNESS_WS_GAIN_MIN 0x2666
+
+ #define BES_LOUDNESS_FILTER_FIRST 0
+
+ #define BES_LOUDNESS_GAIN_MAP_IN \
+ -45, -35, -19, -18, 0
+
+ #define BES_LOUDNESS_GAIN_MAP_OUT \
+ 0, 12, 12, 12, 0
+
+ #define BES_LOUDNESS_ATT_TIME 164
+ #define BES_LOUDNESS_REL_TIME 16400
+#else
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ #define BES_LOUDNESS_HSF_COEFF \
+ 0x7DA1709,0xF054253E,0x7D1C95A,0x7D56C298, \
+ 0x7D6C2CA,0xF05B867F,0x7CDBD5F,0x7D19C2D1, \
+ 0x7C751CD,0xF07DBC74,0x7BAFE48,0x7BFEC3DA, \
+ 0x7B4AD39,0xF0A6FF57,0x7A46980,0x7AA5C515, \
+ 0x7AE1CEE,0xF0B5836B,0x79C79B1,0x7A2BC583, \
+ 0x78FC91E,0xF0F882BF,0x777E4BF,0x77F0C777, \
+ 0x76B705A,0xF148A5E6,0x74C3E63,0x7537C9BF, \
+ 0x75EB726,0xF164A91C,0x73D0346,0x7440CA88, \
+ 0x7247308,0xF1E4AE1B,0x6F7957D,0x6FC0CE05
+
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ #define BES_LOUDNESS_BPF_COEFF \
+ 0x3FD481A8,0x3EFF7E57,0xC12C0000, \
+ 0x3FD081DA,0x3EE97E25,0xC1460000, \
+ 0x3FBE82D7,0x3E817D28,0xC1C00000, \
+ 0x3FA98440,0x3E037BBF,0xC2520000, \
+ 0x3FA184CE,0x3DD77B31,0xC2860000, \
+ 0x3F7E87BD,0x3D0C7842,0xC3740000, \
+\
+ 0x3FD481C0,0x3EFF7E3F,0xC12C0000, \
+ 0x3FD081F5,0x3EE97E0A,0xC1460000, \
+ 0x3FBE830B,0x3E817CF4,0xC1C00000, \
+ 0x3FA9849C,0x3E037B63,0xC2520000, \
+ 0x3FA1853A,0x3DD77AC5,0xC2860000, \
+ 0x3F7E8889,0x3D0C7776,0xC3740000, \
+\
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+\
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0
+
+ #define BES_LOUDNESS_DRC_FORGET_TABLE \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000
+
+ #define BES_LOUDNESS_WS_GAIN_MAX 0
+
+ #define BES_LOUDNESS_WS_GAIN_MIN 0
+
+ #define BES_LOUDNESS_FILTER_FIRST 0
+
+ #define BES_LOUDNESS_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0
+
+ #define BES_LOUDNESS_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0
+#endif
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acfsub_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acfsub_default.h
new file mode 100644
index 0000000..f498a0a
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_acfsub_default.h
@@ -0,0 +1,284 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_acf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 04 22 2013 kh.hung
+ * [ALPS00580843] [MT6572tdv1_phone[lca]][music][Symbio][Free test] µ?¼½©ñ¾¹¼½©ñµ?ªº?µ?¤j?¤p¡A¤£?©w
+ * Use default DRC setting.
+ *
+ * Review: http://mtksap20:8080/go?page=NewReview&reviewid=59367
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_ACFSUB_DEFAULT_H
+#define AUDIO_ACFSUB_DEFAULT_H
+#if 1//defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4)
+/* Compensation Filter HSF coeffs: default all pass filter */
+/* BesLoudness also uses this coeffs */
+#define BES_LOUDNESS_HSF_COEFF_SUB \
+ 0x07DA170A, 0xF054253E, 0x07D1C95A, 0x7D56C298, 0x00000000, \
+ 0x07D6C2CB, 0xF05B867E, 0x07CDBD5F, 0x7D19C2D2, 0x00000000, \
+ 0x07C751CE, 0xF07DBC74, 0x07BAFE49, 0x7BFFC3DA, 0x00000000, \
+ 0x07B4AD39, 0xF0A6FF56, 0x07A46981, 0x7AA6C515, 0x00000000, \
+ 0x07AE1CEE, 0xF0B5836A, 0x079C79B2, 0x7A2CC583, 0x00000000, \
+ 0x078FC91E, 0xF0F882BF, 0x0777E4C0, 0x77F1C777, 0x00000000, \
+ 0x076B705A, 0xF148A5E6, 0x074C3E63, 0x7538C9C0, 0x00000000, \
+ 0x075EB726, 0xF164A91C, 0x073D0346, 0x7441CA88, 0x00000000, \
+ 0x07247309, 0xF1E4AE1A, 0x06F7957D, 0x6FC0CE05, 0x00000000, \
+ \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x08000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
+
+
+/* Compensation Filter BPF coeffs: default all pass filter */
+#define BES_LOUDNESS_BPF_COEFF_SUB \
+ 0x3FD481A8,0x3EFF7E57,0xC12C0000, \
+ 0x3FD081DA,0x3EE97E25,0xC1460000, \
+ 0x3FBE82D7,0x3E817D28,0xC1C00000, \
+ 0x3FA98440,0x3E037BBF,0xC2520000, \
+ 0x3FA184CE,0x3DD77B31,0xC2860000, \
+ 0x3F7E87BD,0x3D0C7842,0xC3740000, \
+ \
+ 0x3FD481C0,0x3EFF7E3F,0xC12C0000, \
+ 0x3FD081F5,0x3EE97E0A,0xC1460000, \
+ 0x3FBE830B,0x3E817CF4,0xC1C00000, \
+ 0x3FA9849C,0x3E037B63,0xC2520000, \
+ 0x3FA1853A,0x3DD77AC5,0xC2860000, \
+ 0x3F7E8889,0x3D0C7776,0xC3740000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000, \
+ 0x40000000,0x00000000,0x00000000
+
+#define BES_LOUDNESS_LPF_COEFF_SUB \
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000,\
+ 0x40000000, 0x00000000, 0x00000000
+
+#define BES_LOUDNESS_WS_GAIN_MAX_SUB 0x399A
+
+#define BES_LOUDNESS_WS_GAIN_MIN_SUB 0x2666
+
+#define BES_LOUDNESS_FILTER_FIRST_SUB 0
+
+#define BES_LOUDNESS_GAIN_MAP_IN_SUB \
+ -45, -35, -19, -18, 0
+
+#define BES_LOUDNESS_GAIN_MAP_OUT_SUB \
+ 0, 12, 12, 12, 0
+
+#define BES_LOUDNESS_ATT_TIME_SUB 164
+#define BES_LOUDNESS_REL_TIME_SUB 16400
+#else
+/* Compensation Filter HSF coeffs: default all pass filter */
+/* BesLoudness also uses this coeffs */
+#define BES_LOUDNESS_HSF_COEFF \
+ 0x7DA1709,0xF054253E,0x7D1C95A,0x7D56C298, \
+ 0x7D6C2CA,0xF05B867F,0x7CDBD5F,0x7D19C2D1, \
+ 0x7C751CD,0xF07DBC74,0x7BAFE48,0x7BFEC3DA, \
+ 0x7B4AD39,0xF0A6FF57,0x7A46980,0x7AA5C515, \
+ 0x7AE1CEE,0xF0B5836B,0x79C79B1,0x7A2BC583, \
+ 0x78FC91E,0xF0F882BF,0x777E4BF,0x77F0C777, \
+ 0x76B705A,0xF148A5E6,0x74C3E63,0x7537C9BF, \
+ 0x75EB726,0xF164A91C,0x73D0346,0x7440CA88, \
+ 0x7247308,0xF1E4AE1B,0x6F7957D,0x6FC0CE05
+
+/* Compensation Filter BPF coeffs: default all pass filter */
+#define BES_LOUDNESS_BPF_COEFF \
+ 0x3FD481A8,0x3EFF7E57,0xC12C0000, \
+ 0x3FD081DA,0x3EE97E25,0xC1460000, \
+ 0x3FBE82D7,0x3E817D28,0xC1C00000, \
+ 0x3FA98440,0x3E037BBF,0xC2520000, \
+ 0x3FA184CE,0x3DD77B31,0xC2860000, \
+ 0x3F7E87BD,0x3D0C7842,0xC3740000, \
+ \
+ 0x3FD481C0,0x3EFF7E3F,0xC12C0000, \
+ 0x3FD081F5,0x3EE97E0A,0xC1460000, \
+ 0x3FBE830B,0x3E817CF4,0xC1C00000, \
+ 0x3FA9849C,0x3E037B63,0xC2520000, \
+ 0x3FA1853A,0x3DD77AC5,0xC2860000, \
+ 0x3F7E8889,0x3D0C7776,0xC3740000, \
+ \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0
+
+#define BES_LOUDNESS_DRC_FORGET_TABLE \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000
+
+#define BES_LOUDNESS_WS_GAIN_MAX 0
+
+#define BES_LOUDNESS_WS_GAIN_MIN 0
+
+#define BES_LOUDNESS_FILTER_FIRST 0
+
+#define BES_LOUDNESS_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0
+
+#define BES_LOUDNESS_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0
+#endif
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_audenh_control_option.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_audenh_control_option.h
new file mode 100644
index 0000000..3feb056
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_audenh_control_option.h
@@ -0,0 +1,45 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#ifndef AUDIO_AUDENH_CONTROL_OPTION_CUSTOM_H
+#define AUDIO_AUDENH_CONTROL_OPTION_CUSTOM_H
+
+
+
+#define DEFAULT_AUDIO_AUDENH_CONTROL_OPTION_Coeff (0x00000002) //Bit0: Audenh default (Default off for Low Power) , Bit1: BesLoudness default
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_custom.h
new file mode 100644
index 0000000..e4e57e4
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_custom.h
@@ -0,0 +1,484 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * aud_custom_exp.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * JY Huang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 05 26 2010 chipeng.chang
+ * [ALPS00002287][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for audio paramter
+ * modify audio parameter.
+ *
+ * 05 26 2010 chipeng.chang
+ * [ALPS00002287][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for audio paramter
+ * modify for Audio parameter
+ *
+ * mtk80306
+ * [DUMA00132370] waveform driver file re-structure.
+ * waveform driver file re-structure.
+ *
+ * Jul 28 2009 mtk01352
+ * [DUMA00009909] Check in TWO_IN_ONE_SPEAKER and rearrange
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_CUSTOM_H
+#define AUDIO_CUSTOM_H
+
+/* define Gain For Normal */
+/* Normal volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+
+#define GAIN_NOR_TON_VOL 8
+#define GAIN_NOR_KEY_VOL 43
+#define GAIN_NOR_MIC_VOL 26
+#define GAIN_NOR_FMR_VOL 0
+#define GAIN_NOR_SPH_VOL 20
+#define GAIN_NOR_SID_VOL 100
+#define GAIN_NOR_MED_VOL 25
+
+
+/* define Gain For Headset */
+/* Headset volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+
+#define GAIN_HED_TON_VOL 8
+#define GAIN_HED_KEY_VOL 24
+#define GAIN_HED_MIC_VOL 20
+#define GAIN_HED_FMR_VOL 24
+#define GAIN_HED_SPH_VOL 12
+#define GAIN_HED_SID_VOL 100
+#define GAIN_HED_MED_VOL 12
+
+/* define Gain For Handfree */
+/* Handfree volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+
+#define GAIN_HND_TON_VOL 8
+#define GAIN_HND_KEY_VOL 24
+#define GAIN_HND_MIC_VOL 20
+#define GAIN_HND_FMR_VOL 24
+#define GAIN_HND_SPH_VOL 12
+#define GAIN_HND_SID_VOL 100
+#define GAIN_HND_MED_VOL 12
+
+/* 0: Input FIR coefficients for 2G/3G Normal mode */
+/* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */
+/* 2: Input FIR coefficients for 2G/3G Handfree mode */
+/* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */
+/* 4: Input FIR coefficients for VoIP Normal mode */
+/* 5: Input FIR coefficients for VoIP Handfree mode */
+#define SPEECH_INPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+
+/* 0: Output FIR coefficients for 2G/3G Normal mode */
+/* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */
+/* 2: Output FIR coefficients for 2G/3G Handfree mode */
+/* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */
+/* 4: Output FIR coefficients for VoIP Normal mode */
+/* 5: Output FIR coefficients for VoIP Handfree mode */
+#define SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+
+#define DG_DL_Speech 0xE3D
+#define DG_Microphone 0x1400
+#define FM_Record_Vol 6 /* 0 is smallest. each step increase 1dB.
+ Be careful of distortion when increase too much.
+ Generally, it's not suggested to tune this parameter */
+
+/* 0: Input FIR coefficients for 2G/3G Normal mode */
+/* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */
+/* 2: Input FIR coefficients for 2G/3G Handfree mode */
+/* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */
+/* 4: Input FIR coefficients for VoIP Normal mode */
+/* 5: Input FIR coefficients for VoIP Handfree mode */
+#define WB_Speech_Input_FIR_Coeff \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+/* 0: Output FIR coefficients for 2G/3G Normal mode */
+/* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */
+/* 2: Output FIR coefficients for 2G/3G Handfree mode */
+/* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */
+/* 4: Output FIR coefficients for VoIP Normal mode */
+/* 5: Output FIR coefficients for VoIP Handfree mode */
+
+#define WB_Speech_Output_FIR_Coeff \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+\
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+/*
+ * The Bluetooth DAI Hardware COnfiguration Parameter
+ */
+#define DEFAULT_BLUETOOTH_SYNC_TYPE 0
+#define DEFAULT_BLUETOOTH_SYNC_LENGTH 1
+
+/* Input FIR coefficients for 2G/3G HAC mode */
+#define DEFAULT_SPEECH_HAC_INPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+
+/* Output FIR coefficients for 2G/3G HAC mode */
+#define DEFAULT_SPEECH_HAC_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+
+/* WB Input FIR coefficients for 2G/3G HAC mode */
+#define DEFAULT_WB_SPEECH_HAC_INPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+/* WB Output FIR coefficients for 2G/3G HAC mode */
+#define DEFAULT_WB_SPEECH_HAC_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_effect_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_effect_default.h
new file mode 100644
index 0000000..bd7a8d6
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_effect_default.h
@@ -0,0 +1,102 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_coeff_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_EFFECT_DEFAULT_H
+#define AUDIO_EFFECT_DEFAULT_H
+
+#define BSRD_LEVEL 50
+#define BSRD_DISTANCE1 20
+#define BSRD_DISTANCE2 30
+#define BSRD_BAND_SELECT 0
+
+#define BASS_CUTOFF_FREQ 400
+#define BASS_ISVB 0
+
+#define NORMAL_GAIN_LEVEL \
+ 0,0,0,0,0,0,0,0
+#define DANCE_GAIN_LEVEL \
+ 16,64,0,8,32,40,32,16
+#define BASS_GAIN_LEVEL \
+ 48,32,24,16,0,0,0,0
+#define CLASSICAL_GAIN_LEVEL \
+ 40,24,0,-16,-8,0,24,32
+#define TREBLE_GAIN_LEVEL \
+ 0,0,0,0,8,24,40,48
+#define PARTY_GAIN_LEVEL \
+ 40,32,0,0,0,0,0,32
+#define POP_GAIN_LEVEL \
+ -12,0,8,40,40,8,-8,-16
+#define ROCK_GAIN_LEVEL \
+ 48,16,8,-8,-16,8,24,40
+
+#define LOUDENHANCEMODE 3
+
+#define TIME_TD_TF 0
+#define TIME_TS_RATIO 100
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_gain_table_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_gain_table_default.h
new file mode 100644
index 0000000..328878b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_gain_table_default.h
@@ -0,0 +1,363 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_gain_table_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio cgain table parameters
+ *
+ * Author:
+ * -------
+ * ChiPeng Chang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 08 28 2012 weiguo.li
+ * [ALPS00347285] [Need Patch] [Volunteer Patch]LGE AudioGainTable modification
+ * .
+ *
+ * 08 26 2012 weiguo.li
+ * [ALPS00347285] [Need Patch] [Volunteer Patch]LGE AudioGainTable modification
+ * .
+ *
+ * 07 29 2012 weiguo.li
+ * [ALPS00319405] ALPS.JB.BSP.PRA check in CR for Jades
+ * .
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_GAIN_TABLE_DEFAULT_H
+#define AUDIO_GAIN_TABLE_DEFAULT_H
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_VOICE_GAIN_TABLE_PARA \
+ 0x64,0x5A,0x50,0x46,0x3C,0x32,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x3C,0x32,0x28,0x1E,0x14,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x01, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x60,0x58,0x40,0x38,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0B,0x00,0x00,0x00,0x00,0x00,\
+ 0x60,0x58,0x40,0x38,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_SYSTEM_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_RINGTONE_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x0A,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_MUSIC_GAIN_TABLE_PARA \
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xB4,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0A,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_ALARM_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_NOTIFICATION_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0B, 0x00,0x00,0x00,0x00,0x0A,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_BLUETOOTH_SCO_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x1C,0x10,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0F, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_ENFORCEAUDIBLE_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x09, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_DTMF_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x2B,0x23,0x1C,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x1C,0x10,0x00,0x00, 0x09, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_TTS_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x09, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_FM_GAIN_TABLE_PARA \
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x04, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x09, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xA8,0x9C,0x90,0x84,0x78,0x6C,0x60,0x54,0x48,0x3C,0x30,0x24,0x18,0x0C,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_MATV_GAIN_TABLE_PARA \
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_SPEECH_NB_GAIN_TABLE_PARA \
+ 0x60,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x50,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x30,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x48,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x3C,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x30,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,\
+ 0x24,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x18,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x0C,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x13,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_SPEECH_WB_GAIN_TABLE_PARA \
+ 0x60,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x50,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x40,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x30,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x30,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x20,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x10,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x17,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x48,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x3C,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x30,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,\
+ 0x24,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x18,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x0C,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x0C,0x00,0x00,0x00,0x00,0x0D,0x00,0x00,0x00,0x00,0x00, 0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ \
+ 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+//sidetone receiver
+//sidetone headset
+//sidetone speaker
+//sidetone doc
+#define DEFAULT_SIDETONE_NB_GAIN_TABLE_PARA \
+ 0x00,0x00,0x00,0x00
+
+//sidetone receiver
+//sidetone headset
+//sidetone speaker
+//sidetone doc
+#define DEFAULT_SIDETONE_WB_GAIN_TABLE_PARA \
+ 0x00,0x00,0x00,0x00
+
+//GAIN_IDLE_RECORD_MIC
+//GAIN_IDLE_RECORD_HEADSET
+//GAIN_VOICE_REC_MIC
+//GAIN_VOICE_REC_HEADSET
+//GAIN_VIDEO_REC_MIC
+//GAIN_VIDEO_REC_HEADSET
+//GAIN_INCALL_NB_RECEIVER
+//GAIN_INCALL_NB_HEADSET
+//GAIN_INCALL_NB_SPEAKER
+//GAIN_INCALL_WB_RECEIVER
+//GAIN_INCALL_WB_HEADSET
+//GAIN_INCALL_WB_SPEAKER
+//GAIN_VOIP_RECEIVER
+//GAIN_VOIP_HEADSET
+//GAIN_VOIP_SPEAKER
+//GAIN_TTY_DEVICE
+//GAIN_LEVEL_SHIFT
+//GAIN_ANALOG_PLAY
+//GAIN_VOICE_UNLOCK_MIC
+//GAIN_VOICE_UNLOCK_HEADSET
+//GAIN_RESERVED1_MIC
+//GAIN_RESERVED1_HEADSET
+//GAIN_RESERVED2_MIC
+//GAIN_RESERVED2_HEADSET
+
+#define DEFAULT_MICROPHONE_GAIN_TABLE_PARA \
+ 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00,\
+ 0x22,0x00, 0x18,0x00, 0x1E,0x00, 0x21,0x00, 0x18,0x00,\
+ 0x1E,0x00, 0x21,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00,\
+ 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00,\
+ 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x22,0x00, 0x00,0x00,\
+ 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00, 0x00,0x00,\
+ 0x00,0x00, 0x00,0x00
+
+// Receiver Gain
+// Headset Gain
+// Speaker Gain
+// doc Gain
+#define DEFAULT_BLUETOOTH_NREC_GAIN_TABLE_PARA \
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x1C,0x10,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x0F, 0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,\
+ 0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00,0x00,0x00, 0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hcf_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hcf_default.h
new file mode 100644
index 0000000..f49abf0
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hcf_default.h
@@ -0,0 +1,361 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_hcf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_HCF_DEFAULT_H
+#define AUDIO_HCF_DEFAULT_H
+#if defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V5)
+#define BES_LOUDNESS_HCF_L_HPF_FC 0
+#define BES_LOUDNESS_HCF_L_HPF_ORDER 0
+#define BES_LOUDNESS_HCF_L_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_L_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_L_BPF_GAIN 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8
+#define BES_LOUDNESS_HCF_L_LPF_FC 0
+#define BES_LOUDNESS_HCF_L_LPF_ORDER 0
+#define BES_LOUDNESS_HCF_R_HPF_FC 0
+#define BES_LOUDNESS_HCF_R_HPF_ORDER 0
+#define BES_LOUDNESS_HCF_R_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_R_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_R_BPF_GAIN 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8
+#define BES_LOUDNESS_HCF_R_LPF_FC 0
+#define BES_LOUDNESS_HCF_R_LPF_ORDER 0
+
+#define BES_LOUDNESS_HCF_SEP_LR_FILTER 0
+
+#define BES_LOUDNESS_HCF_WS_GAIN_MAX 0
+#define BES_LOUDNESS_HCF_WS_GAIN_MIN 0
+#define BES_LOUDNESS_HCF_FILTER_FIRST 0
+
+#define BES_LOUDNESS_HCF_NUM_BANDS 0
+#define BES_LOUDNESS_HCF_FLT_BANK_ORDER 0
+#define BES_LOUDNESS_HCF_DRC_DELAY 0
+#define BES_LOUDNESS_HCF_CROSSOVER_FREQ 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_SB_MODE 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_SB_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_ATT_TIME \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_REL_TIME \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_HCF_HYST_TH \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0
+
+#define BES_LOUDNESS_HCF_LIM_TH 0
+#define BES_LOUDNESS_HCF_LIM_GN 0
+#define BES_LOUDNESS_HCF_LIM_CONST 0
+#define BES_LOUDNESS_HCF_LIM_DELAY 0
+
+#elif defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4)
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+
+ #define BES_LOUDNESS_HCF_HSF_COEFF \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+\
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000
+
+
+
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ #define BES_LOUDNESS_HCF_BPF_COEFF \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+\
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000, \
+ 0x00000000,0x00000000,0x00000000
+
+ #define BES_LOUDNESS_HCF_LPF_COEFF \
+ 0x00000000, 0x00000000, 0x00000000,\
+ 0x00000000, 0x00000000, 0x00000000,\
+ 0x00000000, 0x00000000, 0x00000000,\
+ 0x00000000, 0x00000000, 0x00000000,\
+ 0x00000000, 0x00000000, 0x00000000,\
+ 0x00000000, 0x00000000, 0x00000000
+
+ #define BES_LOUDNESS_HCF_WS_GAIN_MAX 0x399A
+
+ #define BES_LOUDNESS_HCF_WS_GAIN_MIN 0x2666
+
+ #define BES_LOUDNESS_HCF_FILTER_FIRST 0
+
+ #define BES_LOUDNESS_HCF_GAIN_MAP_IN \
+ -45, -35, -19, -18, 0
+
+ #define BES_LOUDNESS_HCF_GAIN_MAP_OUT \
+ 0, 12, 12, 12, 0
+
+ #define BES_LOUDNESS_HCF_ATT_TIME 164
+ #define BES_LOUDNESS_HCF_REL_TIME 16400
+#else
+/* Compensation Filter HSF coeffs: default all pass filter */
+/* BesLoudness also uses this coeffs */
+#define BES_LOUDNESS_HCF_HSF_COEFF \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0, \
+ 0, 0, 0, 0
+
+/* Compensation Filter BPF coeffs: default all pass filter */
+#define BES_LOUDNESS_HCF_BPF_COEFF \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0, \
+ 0, 0, 0
+
+#define BES_LOUDNESS_HCF_DRC_FORGET_TABLE \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0, \
+ 0, 0
+
+#define BES_LOUDNESS_HCF_WS_GAIN_MAX 0
+
+#define BES_LOUDNESS_HCF_WS_GAIN_MIN 0
+
+#define BES_LOUDNESS_HCF_FILTER_FIRST 0
+
+#define BES_LOUDNESS_HCF_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0
+
+#define BES_LOUDNESS_HCF_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0
+
+#endif
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hd_record_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hd_record_custom.h
new file mode 100644
index 0000000..ca28728
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_hd_record_custom.h
@@ -0,0 +1,319 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * aud_hd_record_custom.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Charlie Lu.
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_HD_RECORD_CUSTOM_H
+#define AUDIO_HD_RECORD_CUSTOM_H
+
+//hd_rec_fir
+/* 0: Input FIR coefficients for Normal mode */
+/* 1: Input FIR coefficients for Headset mode */
+/* 2: Input FIR coefficients for Handfree mode */
+/* 3: Input FIR coefficients for BT mode */
+/* 4: Input FIR coefficients for Normal mode */
+/* 5: Input FIR coefficients for Handfree mode */
+/* 6: Input FIR coefficients for Normal mode 2nd Mic*/
+/* 7: Input FIR coefficients for Voice Recognition*/
+/* 8: Input FIR coefficients for Voice Unlock Main Mic */
+/* 9: Input FIR coefficients for Voice Unlock 2nd Mic */
+/* 10: Input FIR coefficients for 1st customization Main Mic*/
+/* 11: Input FIR coefficients for 1st customization 2nd Mic*/
+/* 12: Input FIR coefficients for 2nd customization Main Mic*/
+/* 13: Input FIR coefficients for 2nd customization 2nd Mic*/
+/* 14: Input FIR coefficients for 3rd customization Main Mic*/
+/* 15: Input FIR coefficients for 3rd customization Ref Mic*/
+
+#define DEFAULT_HD_RECORD_FIR_Coeff \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+
+#define DEFAULT_HD_RECORD_MODE_FIR_MAPPING_CH1 \
+ 7, 4, \
+ 0, 1, \
+ 0, 1, \
+ 0, 1, \
+ 0, 1, \
+ 0, 1, \
+ 8, 1, \
+ 10, 1, \
+ 12, 1, \
+ 14, 1, \
+ 0, 1, \
+ 0, 1, \
+ 0, 1, \
+ 0, 1, \
+ 0, 3
+
+#define DEFAULT_HD_RECORD_MODE_FIR_MAPPING_CH2 \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 9, 6, \
+ 11, 6, \
+ 13, 6, \
+ 15, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 6, \
+ 6, 3
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_music_drc_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_music_drc_default.h
new file mode 100644
index 0000000..558b1df
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_music_drc_default.h
@@ -0,0 +1,191 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_acf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 04 22 2013 kh.hung
+ * [ALPS00580843] [MT6572tdv1_phone[lca]][music][Symbio][Free test] µ?¼½©ñ¾¹¼½©ñµ?ªº?µ?¤j?¤p¡A¤£?©w
+ * Use default DRC setting.
+ *
+ * Review: http://mtksap20:8080/go?page=NewReview&reviewid=59367
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_MUSIC_DRC_DEFAULT_H
+#define AUDIO_MUSIC_DRC_DEFAULT_H
+
+#define BES_LOUDNESS_MUSICDRC_L_HPF_FC 0
+#define BES_LOUDNESS_MUSICDRC_L_HPF_ORDER 0
+#define BES_LOUDNESS_MUSICDRC_L_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_L_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_L_BPF_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_L_LPF_FC 0
+#define BES_LOUDNESS_MUSICDRC_L_LPF_ORDER 0
+#define BES_LOUDNESS_MUSICDRC_R_HPF_FC 0
+#define BES_LOUDNESS_MUSICDRC_R_HPF_ORDER 0
+#define BES_LOUDNESS_MUSICDRC_R_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_R_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_R_BPF_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_MUSICDRC_R_LPF_FC 0
+#define BES_LOUDNESS_MUSICDRC_R_LPF_ORDER 0
+
+#define BES_LOUDNESS_MUSICDRC_SEP_LR_FILTER 0
+
+#define BES_LOUDNESS_MUSICDRC_WS_GAIN_MAX 0
+#define BES_LOUDNESS_MUSICDRC_WS_GAIN_MIN 0
+#define BES_LOUDNESS_MUSICDRC_FILTER_FIRST 0
+
+#define BES_LOUDNESS_MUSICDRC_NUM_BANDS 8
+#define BES_LOUDNESS_MUSICDRC_FLT_BANK_ORDER 0
+#define BES_LOUDNESS_MUSICDRC_DRC_DELAY 0
+#define BES_LOUDNESS_MUSICDRC_CROSSOVER_FREQ 300,500,1000,2000,4000,8000,16000
+#define BES_LOUDNESS_MUSICDRC_SB_MODE 0,0,0,0,0,0,0,0
+#define BES_LOUDNESS_MUSICDRC_SB_GAIN -10240,-7680,-5120,-768,-768,0,0,0
+#define BES_LOUDNESS_MUSICDRC_GAIN_MAP_IN \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0, \
+ -15360,-12800,-10240,-7680,0
+#define BES_LOUDNESS_MUSICDRC_GAIN_MAP_OUT \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0, \
+ 6144,6144,6144,6144,0
+#define BES_LOUDNESS_MUSICDRC_ATT_TIME \
+ 64,64,64,64,64,64, \
+ 64,64,64,64,64,64, \
+ 32,32,32,32,32,32, \
+ 32,32,32,32,32,32, \
+ 32,32,32,32,32,32, \
+ 164,164,164,164,164,164, \
+ 164,164,164,164,164,164, \
+ 164,164,164,164,164,164
+#define BES_LOUDNESS_MUSICDRC_REL_TIME \
+ 6400,6400,6400,6400,6400,6400, \
+ 6400,6400,6400,6400,6400,6400, \
+ 16400,16400,16400,16400,16400,16400, \
+ 16400,16400,16400,16400,16400,16400, \
+ 16400,16400,16400,16400,16400,16400, \
+ 16400,16400,16400,16400,16400,16400, \
+ 16400,16400,16400,16400,16400,16400, \
+ 16400,16400,16400,16400,16400,16400
+#define BES_LOUDNESS_MUSICDRC_HYST_TH \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256, \
+ 256,256,256,256,256,256
+
+#define BES_LOUDNESS_MUSICDRC_LIM_TH 0x7FFF
+#define BES_LOUDNESS_MUSICDRC_LIM_GN 0x7FFF
+#define BES_LOUDNESS_MUSICDRC_LIM_CONST 4
+#define BES_LOUDNESS_MUSICDRC_LIM_DELAY 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ringtone_drc_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ringtone_drc_default.h
new file mode 100644
index 0000000..fb7ddf4
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ringtone_drc_default.h
@@ -0,0 +1,190 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_acf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 04 22 2013 kh.hung
+ * [ALPS00580843] [MT6572tdv1_phone[lca]][music][Symbio][Free test] µ?¼½©ñ¾¹¼½©ñµ?ªº?µ?¤j?¤p¡A¤£?©w
+ * Use default DRC setting.
+ *
+ * Review: http://mtksap20:8080/go?page=NewReview&reviewid=59367
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_RINGTONE_DRC_DEFAULT_H
+#define AUDIO_RINGTONE_DRC_DEFAULT_H
+
+#define BES_LOUDNESS_RINGTONEDRC_L_HPF_FC 0
+#define BES_LOUDNESS_RINGTONEDRC_L_HPF_ORDER 0
+#define BES_LOUDNESS_RINGTONEDRC_L_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_L_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_L_BPF_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_L_LPF_FC 0
+#define BES_LOUDNESS_RINGTONEDRC_L_LPF_ORDER 0
+#define BES_LOUDNESS_RINGTONEDRC_R_HPF_FC 0
+#define BES_LOUDNESS_RINGTONEDRC_R_HPF_ORDER 0
+#define BES_LOUDNESS_RINGTONEDRC_R_BPF_FC 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_R_BPF_BW 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_R_BPF_GAIN 0, 0, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_R_LPF_FC 0
+#define BES_LOUDNESS_RINGTONEDRC_R_LPF_ORDER 0
+
+#define BES_LOUDNESS_RINGTONEDRC_SEP_LR_FILTER 0
+
+#define BES_LOUDNESS_RINGTONEDRC_WS_GAIN_MAX 0
+#define BES_LOUDNESS_RINGTONEDRC_WS_GAIN_MIN 0
+#define BES_LOUDNESS_RINGTONEDRC_FILTER_FIRST 0
+
+#define BES_LOUDNESS_RINGTONEDRC_NUM_BANDS 5
+#define BES_LOUDNESS_RINGTONEDRC_FLT_BANK_ORDER 0
+#define BES_LOUDNESS_RINGTONEDRC_DRC_DELAY 0
+#define BES_LOUDNESS_RINGTONEDRC_CROSSOVER_FREQ 110, 440, 1760, 8000, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_SB_MODE 1, 1, 0, 0, 0, 0, 0, 0
+#define BES_LOUDNESS_RINGTONEDRC_SB_GAIN -40 << 8, -20 << 8, 0 << 8, 4 << 8, 0 << 8, 0 << 8, 0 << 8, 0 << 8
+#define BES_LOUDNESS_RINGTONEDRC_GAIN_MAP_IN \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8, \
+ -60 << 8, -50 << 8, -40 << 8, -30 << 8, 0 << 8
+#define BES_LOUDNESS_RINGTONEDRC_GAIN_MAP_OUT \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8, \
+ 24 << 8, 24 << 8, 24 << 8, 24 << 8, 0 << 8
+#define BES_LOUDNESS_RINGTONEDRC_ATT_TIME \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164, \
+ 164, 164, 164, 164, 164, 164
+#define BES_LOUDNESS_RINGTONEDRC_REL_TIME \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400, \
+ 16400, 16400, 16400, 16400, 16400, 16400
+#define BES_LOUDNESS_RINGTONEDRC_HYST_TH \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, \
+ 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8, 1 << 8
+#define BES_LOUDNESS_RINGTONEDRC_LIM_TH 0x7FFF
+#define BES_LOUDNESS_RINGTONEDRC_LIM_GN 0x7FFF
+#define BES_LOUDNESS_RINGTONEDRC_LIM_CONST 4
+#define BES_LOUDNESS_RINGTONEDRC_LIM_DELAY 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_speaker_monitor_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_speaker_monitor_custom.h
new file mode 100644
index 0000000..e5f1bb4
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_speaker_monitor_custom.h
@@ -0,0 +1,571 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#ifndef AUDIO_SPEAKER_MONITOR_CUSTOM_H
+#define AUDIO_SPEAKER_MONITOR_CUSTOM_H
+
+/****************************************************
+* Define default Speaker Monitor Param
+*****************************************************/
+
+#define DEFAULT_SPEAKER_MONITOR_PARAM \
+0.000000f, \
+6.724226f, \
+6.974528f, \
+6.846275f, \
+6.827175f, \
+7.047107f, \
+7.119836f, \
+7.331464f, \
+7.688554f, \
+7.918128f, \
+9.524508f, \
+9.824244f, \
+9.784428f, \
+8.793557f, \
+8.132271f, \
+7.909787f, \
+7.412833f, \
+7.302618f, \
+7.104803f, \
+7.077705f, \
+6.944293f, \
+6.918779f, \
+6.927319f, \
+6.864192f, \
+6.887978f, \
+6.881207f, \
+6.837842f, \
+6.853567f, \
+6.831047f, \
+6.835002f, \
+6.853987f, \
+6.855708f, \
+6.855517f, \
+6.879707f, \
+6.879851f, \
+6.864088f, \
+6.895735f, \
+6.836673f, \
+6.839348f, \
+6.825389f, \
+6.797342f, \
+6.813182f, \
+6.799253f, \
+6.789910f, \
+6.840711f, \
+6.817069f, \
+6.837533f, \
+6.800495f, \
+6.823473f, \
+6.813232f, \
+6.798521f, \
+6.802952f, \
+6.821106f, \
+6.828176f, \
+6.832813f, \
+6.845280f, \
+6.816212f, \
+6.890805f, \
+6.847644f, \
+6.870790f, \
+6.908623f, \
+6.837619f, \
+6.877141f, \
+6.866852f, \
+6.877843f, \
+6.842310f, \
+6.853122f, \
+6.849436f, \
+6.897611f, \
+6.880357f, \
+6.772614f, \
+6.837955f, \
+6.844776f, \
+6.882747f, \
+6.903024f, \
+6.834239f, \
+6.851512f, \
+6.861617f, \
+6.828314f, \
+6.850456f, \
+6.914350f, \
+6.856041f, \
+6.837886f, \
+6.856701f, \
+6.873860f, \
+6.882756f, \
+6.856958f, \
+6.905285f, \
+6.846513f, \
+6.905928f, \
+6.838507f, \
+6.885972f, \
+6.832790f, \
+6.874806f, \
+6.866412f, \
+6.896636f, \
+6.938709f, \
+6.857732f, \
+6.871342f, \
+6.926673f, \
+6.990149f, \
+6.951657f, \
+6.985218f, \
+6.947751f, \
+7.019493f, \
+6.914910f, \
+6.977337f, \
+6.983798f, \
+6.950284f, \
+6.914060f, \
+6.953691f, \
+6.909161f, \
+6.972013f, \
+6.935135f, \
+6.960772f, \
+6.909254f, \
+6.948703f, \
+6.933710f, \
+6.901606f, \
+6.989258f, \
+6.968126f, \
+6.983894f, \
+7.018600f, \
+6.944714f, \
+6.964221f, \
+7.023781f, \
+6.989924f, \
+6.981969f, \
+6.981292f, \
+7.071301f, \
+7.063210f, \
+6.957207f, \
+7.035365f, \
+7.048344f, \
+7.028668f, \
+7.036113f, \
+7.030469f, \
+7.007527f, \
+7.053476f, \
+7.035308f, \
+7.086689f, \
+7.146161f, \
+7.024417f, \
+7.031446f, \
+7.073967f, \
+7.143930f, \
+7.428226f, \
+0.000000f, \
+6.993325f, \
+7.122999f, \
+7.127262f, \
+7.147401f, \
+7.116213f, \
+7.273460f, \
+7.084520f, \
+7.060570f, \
+7.081394f, \
+7.143188f, \
+7.205965f, \
+7.078080f, \
+7.079659f, \
+7.080306f, \
+7.144302f, \
+7.084785f, \
+7.257939f, \
+7.130643f, \
+7.097555f, \
+7.152971f, \
+7.040974f, \
+7.085166f, \
+7.071059f, \
+7.100259f, \
+7.160836f, \
+7.172592f, \
+7.152480f, \
+7.321774f, \
+7.143798f, \
+7.185150f, \
+7.074606f, \
+7.192005f, \
+7.032177f, \
+6.960763f, \
+7.295326f, \
+7.217050f, \
+7.162797f, \
+7.144925f, \
+7.171889f, \
+7.194613f, \
+7.221737f, \
+7.182446f, \
+7.056801f, \
+7.180799f, \
+7.155940f, \
+7.110633f, \
+7.163946f, \
+7.054243f, \
+0.000000f, \
+7.285683f, \
+7.089665f, \
+7.040215f, \
+7.128399f, \
+7.176611f, \
+7.282122f, \
+7.104584f, \
+7.137789f, \
+7.135109f, \
+7.306314f, \
+7.165412f, \
+7.144668f, \
+7.182379f, \
+7.370492f, \
+7.208850f, \
+7.139509f, \
+7.295280f, \
+7.267511f, \
+7.271372f, \
+7.192691f, \
+7.223773f, \
+7.207439f, \
+7.266832f, \
+7.350516f, \
+7.268063f, \
+7.267170f, \
+7.257799f, \
+7.315085f, \
+7.111807f, \
+7.378593f, \
+7.302648f, \
+7.218002f, \
+7.305216f, \
+7.213538f, \
+7.241156f, \
+7.190457f, \
+7.418906f, \
+7.315556f, \
+0.000000f, \
+7.288957f, \
+7.333023f, \
+7.139032f, \
+7.419845f, \
+7.359655f, \
+7.297998f, \
+7.204082f, \
+7.342434f, \
+7.426449f, \
+7.265158f, \
+7.409251f, \
+7.444800f, \
+7.316185f, \
+7.301837f, \
+7.299541f, \
+7.290207f, \
+7.354695f, \
+7.280741f, \
+7.342413f, \
+7.326562f, \
+7.464303f, \
+7.343559f, \
+7.374075f, \
+7.391737f, \
+7.482700f, \
+7.412315f, \
+7.374053f, \
+7.239961f, \
+7.433125f, \
+7.287411f, \
+7.376688f, \
+7.381767f, \
+7.458014f, \
+7.221640f, \
+7.299759f, \
+7.253643f, \
+7.429543f, \
+7.328827f, \
+7.388747f, \
+7.357351f, \
+7.367592f, \
+7.477061f, \
+7.383484f, \
+7.388175f, \
+7.369945f, \
+7.443092f, \
+7.605816f, \
+7.469241f, \
+7.617379f, \
+7.471801f, \
+7.439581f, \
+7.429914f, \
+7.540149f, \
+7.468150f, \
+7.542761f, \
+7.408623f, \
+7.433461f, \
+7.396984f, \
+7.358805f, \
+7.366835f, \
+7.386064f, \
+7.386212f, \
+7.348292f, \
+7.544761f, \
+7.507598f, \
+7.514112f, \
+7.428306f, \
+7.504209f, \
+7.442350f, \
+7.432697f, \
+7.572494f, \
+7.457337f, \
+7.433437f, \
+7.616264f, \
+7.584019f, \
+7.704144f, \
+7.638788f, \
+7.548791f, \
+7.533299f, \
+7.614974f, \
+7.436929f, \
+0.000000f, \
+7.470621f, \
+7.506228f, \
+7.550412f, \
+7.633528f, \
+7.458643f, \
+7.543236f, \
+7.515824f, \
+7.526042f, \
+7.850661f, \
+7.678246f, \
+7.682152f, \
+7.491266f, \
+7.491404f, \
+7.603360f, \
+7.597063f, \
+7.728959f, \
+7.719633f, \
+7.459821f, \
+7.609262f, \
+7.726784f, \
+7.551135f, \
+7.640534f, \
+7.734461f, \
+7.628714f, \
+7.304039f, \
+7.583868f, \
+7.539066f, \
+7.615777f, \
+7.805047f, \
+7.757169f, \
+7.817597f, \
+7.696222f, \
+7.574815f, \
+7.704673f, \
+7.708368f, \
+7.557793f, \
+7.758362f, \
+7.817715f, \
+7.620881f, \
+7.650286f, \
+7.589502f, \
+7.912412f, \
+0.000000f, \
+0.000000f, \
+7.622248f, \
+7.471659f, \
+7.034797f, \
+7.484396f, \
+7.432148f, \
+7.789283f, \
+7.689125f, \
+7.560812f, \
+7.589663f, \
+7.690178f, \
+7.539281f, \
+7.481449f, \
+7.628078f, \
+7.564785f, \
+7.828842f, \
+7.757295f, \
+7.761100f, \
+7.604434f, \
+7.611227f, \
+7.826819f, \
+7.595936f, \
+7.634809f, \
+7.847127f, \
+7.790264f, \
+7.762833f, \
+7.872057f, \
+7.618991f, \
+7.854398f, \
+7.724950f, \
+7.791582f, \
+7.883928f, \
+7.851706f, \
+7.876284f, \
+7.873750f, \
+7.886863f, \
+7.823014f, \
+7.848767f, \
+8.098789f, \
+7.813078f, \
+8.139100f, \
+7.728526f, \
+8.257166f, \
+7.928484f, \
+7.672758f, \
+7.724411f, \
+8.112217f, \
+7.800399f, \
+7.728940f, \
+7.859084f, \
+7.956226f, \
+7.932983f, \
+7.999975f, \
+7.904581f, \
+7.908185f, \
+7.954573f, \
+7.988237f, \
+8.113664f, \
+7.912639f, \
+7.891133f, \
+7.877574f, \
+8.014938f, \
+7.840498f, \
+7.902784f, \
+7.928629f, \
+7.921973f, \
+8.067985f, \
+7.951092f, \
+7.828674f, \
+7.979732f, \
+7.774290f, \
+7.994339f, \
+7.998278f, \
+7.884554f, \
+8.038289f, \
+8.081851f, \
+7.993627f, \
+7.887461f, \
+7.963169f, \
+8.006074f, \
+7.905819f, \
+7.708533f, \
+7.620054f, \
+8.092615f, \
+0.000000f, \
+7.908058f, \
+0.000000f, \
+7.754007f, \
+7.954754f, \
+8.220443f, \
+0.000000f, \
+7.981484f, \
+7.903817f, \
+7.920052f, \
+8.049402f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+7.928816f, \
+0.000000f, \
+8.227345f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f, \
+0.000000f
+
+
+#define DEFAULT_SPEAKER_TEMP_INITIAL (25.0f)
+#define DEFAULT_SPEAKER_CURRENT_SENSE_RESISTOR (0.5f)
+#define DEFAULT_SPEAKER_RESONANT_FC (450)
+#define DEFAULT_SPEAKER_RESONANT_BW (1000)
+#define DEFAULT_SPEAKER_RESONANT_TH (0xFFEC)
+#define DEFAULT_SPEAKER_PREFER_HIGH_BAND 90
+#define DEFAULT_SPEAKER_PREFER_LOW_BAND 35
+#define DEFAULT_SPEAKER_TEMP_CONTROL_HIGH 90
+#define DEFAULT_SPEAKER_TEMP_CONTROL_LOW 85
+#define DEFAULT_SPEAKER_TEMP_CONTROL_LOG 10
+#define DEFAULT_SPEAKER_MONITOR_INTERVAL 1000
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ver1_volume_custom_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ver1_volume_custom_default.h
new file mode 100644
index 0000000..6ac3f79
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_ver1_volume_custom_default.h
@@ -0,0 +1,185 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_ver1_volume_custom_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Chipeng chang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_VER1_VOLUME_CUSTOM_DEFAULT_H
+#define AUDIO_VER1_VOLUME_CUSTOM_DEFAULT_H
+
+#define VER1_AUD_VOLUME_RING \
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,240,255,\
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,240,255,\
+ 128,136,144,152,160,168,176,184,192,200,212,224,236,248,255,\
+ 128,136,144,152,160,168,176,184,192,200,212,224,236,248,255
+
+#define VER1_AUD_VOLUME_SIP \
+ 112,136,160,184,208,232,255,0,0,0,0,0,0,0,0,\
+ 112,136,160,184,208,232,255,0,0,0,0,0,0,0,0,\
+ 112,136,160,184,208,232,255,0,0,0,0,0,0,0,0,\
+ 0,43,85,128,171,213,255,0,0,0,0,0,0,0,0
+
+#define VER1_AUD_VOLUME_MIC \
+ 64,112,192,152,192,192,184,184,184,184,184,0,0,0,0,\
+ 255,192,192,180,192,192,196,184,184,184,184,0,0,0,0,\
+ 255,208,208,180,255,208,196,0,0,0,0,0,0,0,0,\
+ 255,208,208,164,255,208,172,0,0,0,0,0,0,0,0
+
+#define VER1_AUD_VOLUME_FM \
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,255,255,\
+ 88,100,112,124,136,148,160,172,184,196,208,220,232,244,255,\
+ 68,80,92,104,116,128,140,152,168,176,188,200,212,232,248,\
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,255,255
+
+#define VER1_AUD_VOLUME_SPH \
+ 72,84,96,108,120,132,144,0,0,0,0,0,0,0,0,\
+ 52,64,76,88,100,112,124,0,0,0,0,0,0,0,0,\
+ 76,88,100,112,124,136,148,0,0,0,0,0,0,0,0,\
+ 40,52,64,76,88,100,112,0,0,0,0,0,0,0,0
+
+#define VER1_AUD_VOLUME_SID \
+ 0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,\
+ 0,0,32,0,0,0,0,0,0,0,0,0,0,0,0,\
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,\
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+#define VER1_AUD_VOLUME_MEDIA \
+ 32,48,64,80,96,112,160,144,160,176,192,208,224,240,255,\
+ 88,100,112,124,136,148,160,172,184,196,208,220,232,244,255,\
+ 68,80,92,104,116,128,140,152,168,176,188,200,212,232,248,\
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,240,255
+
+#define VER1_AUD_VOLUME_MATV \
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,240,255,\
+ 88,100,112,124,136,148,160,172,184,196,208,220,232,244,255,\
+ 68,80,92,104,116,128,140,152,168,176,188,200,212,232,248,\
+ 32,48,64,80,96,112,128,144,160,176,192,208,224,240,255
+
+#define VER1_AUD_NORMAL_VOLUME_DEFAULT \
+ 128,128,128,128,128,128
+
+#define VER1_AUD_HEADSER_VOLUME_DEFAULT \
+ 124,148,148,148,148,148
+
+#define VER1_AUD_SPEAKER_VOLUME_DEFAULT \
+ 160,120,120,120,120,120
+
+#define VER1_AUD_HEADSETSPEAKER_VOLUME_DEFAULT \
+ 112,160,132,132,132,132,132,132
+
+#define VER1_AUD_EXTAMP_VOLUME_DEFAULT \
+ 132,132,132,132,132,132
+
+#define VER1_AUD_VOLUME_LEVEL_DEFAULT \
+ 15,7,15,15,7,7,7,15,15
+
+/* mic volume setting for 2G/3G HAC mode */
+#define DEFAULT_VER1_AUD_VOLUME_MIC_HAC \
+ 64,112,192,144,192,192,184,184,184,184,184,0,0,0,0
+
+/* speech dl volume setting for 2G/3G HAC mode */
+#define DEFAULT_VER1_AUD_VOLUME_SPH_HAC \
+ 40,52,64,76,88,100,112,0,0,0,0,0,0,0,0
+
+/* sidetone volume setting for 2G/3G HAC mode */
+#define DEFAULT_VER1_AUD_VOLUME_SID_HAC \
+ 0,0,16,0,0,0,0,0,0,0,0,0,0,0,0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_voip_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_voip_custom.h
new file mode 100644
index 0000000..b697b3c
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_voip_custom.h
@@ -0,0 +1,200 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#ifndef AUDIO_VOIP_CUSTOM_H
+#define AUDIO_VOIP_CUSTOM_H
+
+/****************************************************
+* Define default AP side VOIP parameters
+*****************************************************/
+
+//VoIP speech parameters common part
+#define DEFAULT_VOIP_SPEECH_COMMON_PARAM \
+ 0, 55997, 31000, 10752, 32769, 0, 0, 0, \
+ 0, 0, 0, 0
+
+
+#ifdef __MTK_DUAL_MIC_SUPPORT__
+#ifdef __MTK_VOIP_NORMAL_DMNR__
+#define VOIP_SPEECH_MODE_PARA13 (371)
+#define VOIP_SPEECH_MODE_PARA14 (23)
+#define VOIP_SPEECH_MODE_PARA03 (29)
+#define VOIP_SPEECH_MODE_PARA08 (400)
+#else
+#define VOIP_SPEECH_MODE_PARA13 (0)
+#define VOIP_SPEECH_MODE_PARA14 (0)
+#define VOIP_SPEECH_MODE_PARA03 (31)
+#define VOIP_SPEECH_MODE_PARA08 (80)
+#endif
+#else
+#define VOIP_SPEECH_MODE_PARA13 (0)
+#define VOIP_SPEECH_MODE_PARA14 (0)
+#define VOIP_SPEECH_MODE_PARA03 (31)
+#define VOIP_SPEECH_MODE_PARA08 (80)
+#endif
+
+#ifdef __MTK_DUAL_MIC_SUPPORT__
+#ifdef __MTK_VOIP_HANDSFREE_DMNR__
+#define VOIP_SPEECH_SPK_MODE_PARA13 (307)
+#define VOIP_SPEECH_SPK_MODE_PARA14 (31)
+#define VOIP_SPEECH_SPK_MODE_PARA03 (29)
+#define VOIP_SPEECH_SPK_MODE_PARA08 (400)
+#else
+#define VOIP_SPEECH_SPK_MODE_PARA13 (0)
+#define VOIP_SPEECH_SPK_MODE_PARA14 (0)
+#define VOIP_SPEECH_SPK_MODE_PARA03 (29)
+#define VOIP_SPEECH_SPK_MODE_PARA08 (276)
+#endif
+#else
+#define VOIP_SPEECH_SPK_MODE_PARA13 (0)
+#define VOIP_SPEECH_SPK_MODE_PARA14 (0)
+#define VOIP_SPEECH_SPK_MODE_PARA03 (29)
+#define VOIP_SPEECH_SPK_MODE_PARA08 (276)
+#endif
+
+
+//VoIP speech parameter different part
+//1. normal mode
+//2.loud speaker mode
+//3. headset mode
+//4.BT mode
+#define DEFAULT_VOIP_SPEECH_MODE_PARAM \
+ 128, 253, 6212, VOIP_SPEECH_MODE_PARA03, 57351, 31, 0, 32, \
+ VOIP_SPEECH_MODE_PARA08, 197, 611, 0, 13066, 0|VOIP_SPEECH_MODE_PARA13, 0|VOIP_SPEECH_MODE_PARA14, 0, \
+ \
+ 192, 224, 2218, VOIP_SPEECH_SPK_MODE_PARA03, 57351, 24607, 0, 4, \
+ VOIP_SPEECH_SPK_MODE_PARA08, 197, 611, 0, 13066, VOIP_SPEECH_SPK_MODE_PARA13, VOIP_SPEECH_SPK_MODE_PARA14, 0, \
+ \
+ 0, 189, 8196, 31, 57351, 31, 0, 64, \
+ 80, 197, 611, 0, 13066, 0, 0, 0, \
+ \
+ 0, 253, 8196, 31, 53255, 31, 0, 0, \
+ 80, 197, 611, 0, 13066, 0, 0, 0
+
+//VoIP FIR parameter
+//1. normal mode
+//2.loud speaker mode
+//3. headset mode
+//4.BT mode
+#define DEFAULT_VOIP_IN_FIR_PARAM \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+//VoIP FIR parameter
+//1. normal mode
+//2.loud speaker mode
+//3. headset mode
+//4.BT mode
+#define DEFAULT_VOIP_OUT_FIR_PARAM \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_volume_custom_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_volume_custom_default.h
new file mode 100644
index 0000000..0cfae6e
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/audio_volume_custom_default.h
@@ -0,0 +1,145 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_volume_custom_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Chipeng chang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_VOLUME_CUSTOM_DEFAULT_H
+#define AUDIO_VOLUME_CUSTOM_DEFAULT_H
+
+#define AUD_VOLUME_RING \
+ 0,32,64,96,128,160,192,\
+ 136, 160, 184, 204, 220, 236, 255,\
+ 136, 160, 184, 204, 220, 236, 255
+
+#define AUD_VOLUME_KEY \
+ 108, 132, 156, 180, 204, 228, 252,\
+ 108, 132, 156, 180, 204, 228, 252,\
+ 108, 132, 156, 180, 204, 228, 252
+
+#define AUD_VOLUME_MIC \
+ 64, 255, 255, 148, 200, 200, 160,\
+ 225, 192, 192, 160, 216, 208, 172, \
+ 255, 208, 208, 180, 255, 208, 172
+#define AUD_VOLUME_FMR \
+ 0,43,85,128,171,213,255,\
+ 20, 52, 84, 116, 148, 184, 220,\
+ 52, 84, 120, 148, 180, 216, 255
+
+#define AUD_VOLUME_SPH \
+ 40,52,64,76,88,100,112,\
+ 40,52,64,76,88,100,112,\
+ 40, 52, 64, 76, 88, 100, 112
+#define AUD_VOLUME_SID \
+ 0,0,16,0,0,0,0,\
+ 0,0,32,0,0,0,0,\
+ 0,0,0,0,0,0,0
+
+#define AUD_VOLUME_MEDIA \
+ 132, 148, 148, 148, 128, 148, 120,\
+ 88, 116, 144, 172, 200, 228, 255,\
+ 124, 144, 164, 184, 204, 224, 255
+
+#define AUD_VOLUME_MATV \
+ 0,43,85,128,171,213,255,\
+ 88, 116, 144, 172, 200, 228, 255,\
+ 124, 144, 164, 184, 204, 224, 255
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/med_audio_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/med_audio_default.h
new file mode 100644
index 0000000..096049d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/med_audio_default.h
@@ -0,0 +1,709 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * med_audio_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Chipeng Chang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef MED_AUDIO_CUSTOM_H
+#define MED_AUDIO_CUSTOM_H
+// normal mode parameters ------------------------
+#define NORMAL_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// headset mode parameters ------------------------
+#define HEADSET_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// handfree mode parameters ------------------------
+#define HANDFREE_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// VoIP_BT mode parameters ------------------------
+#define VOIPBT_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// VoIP_NORMAL mode parameters ------------------------
+#define VOIPNORMAL_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// VoIP_Handfree mode parameters ------------------------
+#define VOIPHANDFREE_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// AUX1 mode parameters ------------------------
+#define AUX1_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+// AUX2 mode parameters ------------------------
+#define AUX2_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ \
+ 32767, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+#define SPEECH_OUTPUT_MED_FIR_COEFF \
+ NORMAL_SPEECH_OUTPUT_FIR_COEFF,\
+ HEADSET_SPEECH_OUTPUT_FIR_COEFF ,\
+ HANDFREE_SPEECH_OUTPUT_FIR_COEFF ,\
+ VOIPBT_SPEECH_OUTPUT_FIR_COEFF,\
+ VOIPNORMAL_SPEECH_OUTPUT_FIR_COEFF,\
+ VOIPHANDFREE_SPEECH_OUTPUT_FIR_COEFF,\
+ AUX1_SPEECH_OUTPUT_FIR_COEFF,\
+ AUX2_SPEECH_OUTPUT_FIR_COEFF
+#define SPEECH_INPUT_MED_FIR_COEFF\
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+#define FIR_output_index \
+ 0,0,0,0,0,0,0,0
+#define FIR_input_index \
+ 0,0,0,0,0,0,0,0
+#define MED_SPEECH_NORMAL_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_EARPHONE_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_BT_EARPHONE_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_LOUDSPK_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_CARKIT_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_AUX1_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_anc_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_anc_default.h
new file mode 100644
index 0000000..b553570
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_anc_default.h
@@ -0,0 +1,119 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ *
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * Doug Wang
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$ 1.0.0
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *******************************************************************************/
+#ifndef SPH_COEFF_ANC_DEFAULT_H
+#define SPH_COEFF_ANC_DEFAULT_H
+
+#define DEFAULT_SPEECH_ANC_PARA \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0
+
+#define DEFAULT_SPEECH_ANC_APPLY 1
+#define DEFAULT_SPEECH_ANC_LOG_ENABLE 0
+#define DEFAULT_SPEECH_ANC_LOG_DOWNSAMPLE 1
+#define DEFAULT_SPEECH_ANC_DL_PGA 0
+
+
+#endif //SPH_COEFF_ANC_DEFAULT_H
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_default.h
new file mode 100644
index 0000000..9610dd6
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_default.h
@@ -0,0 +1,279 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ *
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * ChiPeng
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$ 1.0.0
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 26 2010 chipeng.chang
+ * [ALPS00002705][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for speech parameter
+ * modify speech parameters.
+ *
+ * Mar 15 2010 mtk02308
+ * [ALPS] Init Custom parameter
+ *
+ *
+
+ *
+ *
+ *******************************************************************************/
+#ifndef SPEECH_COEFF_DEFAULT_H
+#define SPEECH_COEFF_DEFAULT_H
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+//speech parameter depen on BT_CHIP cersion
+#if defined(MTK_MT6611)
+
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+
+#elif defined(MTK_MT6612)
+
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+
+#elif defined(MTK_MT6616) || defined(MTK_MT6620) || defined(MTK_MT6622) || defined(MTK_MT6626) || defined(MTK_MT6628)
+
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+
+#else // MTK_MT6620
+
+#define BT_COMP_FILTER (0 << 15)
+#define BT_SYNC_DELAY 86
+
+#endif
+
+#ifdef __MTK_DUAL_MIC_SUPPORT__
+
+ #ifndef MTK_INTERNAL
+ #define SPEECH_MODE_PARA13 (371)
+ #define SPEECH_MODE_PARA14 (23)
+ #define SPEECH_MODE_PARA03 (29)
+ #define SPEECH_MODE_PARA08 (400)
+ #else
+ #define SPEECH_MODE_PARA13 (0)
+ #define SPEECH_MODE_PARA14 (0)
+ #define SPEECH_MODE_PARA03 (31)
+ #define SPEECH_MODE_PARA08 (80)
+ #endif
+
+#else
+#define SPEECH_MODE_PARA13 (0)
+#define SPEECH_MODE_PARA14 (0)
+#define SPEECH_MODE_PARA03 (31)
+#define SPEECH_MODE_PARA08 (80)
+
+
+#endif
+
+#if (defined(__NXP_SMARTPA_SUPPORT__) || defined(__MTK_SPEAKER_MONITOR_SUPPORT__))
+ #define MANUAL_CLIPPING (1 << 15)
+ #define NXP_DELAY_REF (1 << 6)
+ #define PRE_CLIPPING_LEVEL 32767
+#else
+ #define MANUAL_CLIPPING (0 << 15)
+ #define NXP_DELAY_REF (0 << 6)
+ #define PRE_CLIPPING_LEVEL 10752
+#endif
+
+
+
+#define DEFAULT_SPEECH_NORMAL_MODE_PARA \
+ 96, 253, 16388, 31, 57351, 2079, 400, 64, \
+ 80, 4293, 611, 0, 20488, 0, 0, 8192
+
+#define DEFAULT_SPEECH_EARPHONE_MODE_PARA \
+ 0, 253, 10756, 31, 57351, 31, 400, 64, \
+ 80, 4325, 611, 0, 20488, 0, 0, 0
+
+#define DEFAULT_SPEECH_BT_EARPHONE_MODE_PARA \
+ 0, 253, 10756, 31, 53255, 31, 400, 0, \
+ 80, 4325, 611, 0, 20488 | BT_COMP_FILTER, 0, 0, BT_SYNC_DELAY
+
+#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA \
+ 96|MANUAL_CLIPPING , 224, 5256, 31, 57351, 26655, 400, 132, \
+ 84, 4325, 611, 0, 20488|NXP_DELAY_REF, 0, 0, 0
+
+#define DEFAULT_SPEECH_CARKIT_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132, \
+ 84, 4325, 611, 0, 20488, 0, 0, 0
+
+#define DEFAULT_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 479, 10756, 28, 53255, 31, 400, 0, \
+ 4048, 4325, 611, 0, 20488 | BT_COMP_FILTER, 0, 0, BT_SYNC_DELAY
+
+#define DEFAULT_SPEECH_AUX1_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_SPEECH_VOICE_TRACKING_MODE_PARA \
+ 96|MANUAL_CLIPPING , 224, 5256, 31, 57351, 24607, 400, 132, \
+ 84, 4325, 611, 0, 8200|NXP_DELAY_REF, 883, 23, 0
+
+#define DEFAULT_SPEECH_HAC_MODE_PARA \
+ 96, 253, 16388, SPEECH_MODE_PARA03, 57351, 799, 400, 64, \
+ SPEECH_MODE_PARA08, 4325, 611, 0, 20488, 0|SPEECH_MODE_PARA13, 0|SPEECH_MODE_PARA14, 8192
+#define DEFAULT_SPEECH_COMMON_PARA \
+ 0, 55997, 31000, PRE_CLIPPING_LEVEL, 32769, 0, 0, 0, \
+ 0, 0, 0, 0
+
+#define DEFAULT_SPEECH_VOL_PARA \
+ 0, 0, 0, 0
+
+#define DEFAULT_AUDIO_DEBUG_INFO \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_VM_SUPPORT FALSE
+
+#define DEFAULT_AUTO_VM FALSE
+
+#define MICBAIS 1900
+
+#define DEFAULT_WB_SPEECH_NORMAL_MODE_PARA \
+ 96, 253, 16388, SPEECH_MODE_PARA03, 57607, 799, 400, 64, \
+ SPEECH_MODE_PARA08, 4325, 611, 0, 16392, 0|SPEECH_MODE_PARA13, 0|SPEECH_MODE_PARA14, 8192
+
+#define DEFAULT_WB_SPEECH_EARPHONE_MODE_PARA \
+ 0, 189, 10756, 31, 57607, 31, 400, 64, \
+ 80, 4325, 611, 0, 16392, 0, 0, 0
+
+#define DEFAULT_WB_SPEECH_BT_EARPHONE_MODE_PARA \
+ 0, 253, 10756, 31, 53511, 31, 400, 0, \
+ 80, 4325, 611, 0, 16392 | BT_COMP_FILTER, 0, 0, BT_SYNC_DELAY
+
+#define DEFAULT_WB_SPEECH_LOUDSPK_MODE_PARA \
+ 96|MANUAL_CLIPPING, 224, 5256, 31, 57607, 24607, 400, 132, \
+ 84, 4325, 611, 0, 16392|NXP_DELAY_REF, 0, 0, 0
+
+#define DEFAULT_WB_SPEECH_CARKIT_MODE_PARA \
+ 96, 224, 5256, 31, 57607, 24607, 400, 132, \
+ 84, 4325, 611, 0, 16392, 0, 0, 0
+
+#define DEFAULT_WB_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 479, 10756, 28, 53511, 31, 400, 0, \
+ 4048, 4325, 611, 0, 16392 | BT_COMP_FILTER, 0, 0, BT_SYNC_DELAY
+
+#define DEFAULT_WB_SPEECH_AUX1_MODE_PARA \
+ 96, 224, 5256, 31, 57607, 0, 400, 0, 4112, 4325, 11, 0, 0, 0, 0, 0
+
+#define DEFAULT_WB_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_WB_SPEECH_VOICE_TRACKING_MODE_PARA \
+ 96|MANUAL_CLIPPING, 224, 5256, 31, 57607, 24607, 400, 132, \
+ 84, 4325, 611, 0, 8200|NXP_DELAY_REF, 883, 23, 0
+
+#define DEFAULT_WB_SPEECH_HAC_MODE_PARA \
+ 96, 253, 16388, SPEECH_MODE_PARA03, 57607, 799, 400, 64, \
+ SPEECH_MODE_PARA08, 4325, 611, 0, 16392, 0|SPEECH_MODE_PARA13, 0|SPEECH_MODE_PARA14, 8192
+
+/* The Bluetooth PCM digital volume */
+/* default_bt_pcm_in_vol : uplink, only for enlarge volume,
+ 0x100 : 0dB gain
+ 0x200 : 6dB gain
+ 0x300 : 9dB gain
+ 0x400 : 12dB gain
+ 0x800 : 18dB gain
+ 0xF00 : 24dB gain */
+#define DEFAULT_BT_PCM_IN_VOL 0x100
+/* default_bt_pcm_out_vol : downlink gain,
+ 0x1000 : 0dB; maximum 0x7FFF */
+#define DEFAULT_BT_PCM_OUT_VOL 0x1000
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_default.h
new file mode 100644
index 0000000..6d72029
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_default.h
@@ -0,0 +1,130 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ *
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * Charlie Lu
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$ 1.0.0
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *******************************************************************************/
+#ifndef DMNR_PAR_SPEECH_COEFF_DEFAULT_H
+#define DMNR_PAR_SPEECH_COEFF_DEFAULT_H
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABF_PARA \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 68, 0, 0, 0
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VOIP \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_handsfree_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_handsfree_default.h
new file mode 100644
index 0000000..21ca280
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_dmnr_handsfree_default.h
@@ -0,0 +1,143 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ *
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * Charlie Lu
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$ 1.0.0
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *******************************************************************************/
+#ifndef DMNR_HANDSFREE_PAR_SPEECH_COEFF_DEFAULT_H
+#define DMNR_HANDSFREE_PAR_SPEECH_COEFF_DEFAULT_H
+
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABF_PARA_LoudSPK \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, \
+ 68, 0, 0, 0
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_LoudSPK \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VR \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA_VOIP_LoudSPK \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_lpbk_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_lpbk_default.h
new file mode 100644
index 0000000..9e79b5b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_lpbk_default.h
@@ -0,0 +1,105 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * sph_coeff_lpbk_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ ****************************************************************************/
+#ifndef SPH_COEFF_LPBK_DEFAULT_H
+#define SPH_COEFF_LPBK_DEFAULT_H
+
+#define DEFAULT_SPEECH_LPBK_NORMAL_MODE_PARA \
+ 96, 253, 16388, 31, 57351, 799, 400, 64, \
+ 80, 4325, 611, 0, 20488, 0, 0, 8192
+
+#define DEFAULT_SPEECH_LPBK_EARPHONE_MODE_PARA \
+ 0, 189, 10756, 31, 57351, 31, 400, 64, \
+ 80, 4325, 611, 0, 20488, 0, 0, 0
+
+#define DEFAULT_SPEECH_LPBK_LOUDSPK_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132, \
+ 84, 4325, 611, 0, 20488, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_record_mode_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_record_mode_default.h
new file mode 100644
index 0000000..9bcd912
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/sph_coeff_record_mode_default.h
@@ -0,0 +1,207 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ *
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ *
+ * Author:
+ * -------
+ * Charlie Lu
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$ 1.0.0
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *******************************************************************************/
+#ifndef HD_RECORD_MODE_SPEECH_COEFF_DEFAULT_H
+#define HD_RECORD_MODE_SPEECH_COEFF_DEFAULT_H
+
+#define DEFAULT_HD_RECORD_SPH_MODE_PAR \
+ 0, 479, 16388, 36892, 4356, 8192, 784, 4, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 4356, 8192, 784, 4, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37639, 8192, 896, 4, 36624, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37639, 8192, 1152, 4, 36624, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1152, 4, 36560, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1152, 4, 36560, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1664, 12, 36688, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1664, 12, 36688, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37639, 8192, 896, 4, 36624, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37639, 8192, 1152, 4, 36624, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1152, 4, 36560, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37127, 8192, 1152, 4, 36560, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 192, 32512, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 32520, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+34464, 194, 32512, 28, 40960, 28, 0, 10, 468, 197, 611, 0, 32520, 0, 0, 0, \
+ 0, 479, 32512, 28, 40960, 28, 0, 4, 468, 197, 611, 0, 32520, 0, 0, 0, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192, \
+ 0, 479, 16388, 36892, 37124, 8192, 768, 0, 4048, 197, 611, 0, 0, 0, 0, 8192
+
+#define DEFAULT_HD_RECORD_MODE_DEV_MAPPING \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3, \
+ 0, 1, 3
+
+#define DEFAULT_HD_RECORD_MODE_INPUT_SRC_MAPPING \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3, \
+ 5, 2, 3
+
+#define DEFAULT_STEREO_FLAG \
+ 1, 0
+#define DEFAULT_MONO_FLAG \
+ 0, 0
+
+#define DEFAULT_HD_RECORD_MODE_STEREO_FLAGS \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_STEREO_FLAG, \
+ DEFAULT_STEREO_FLAG, \
+ DEFAULT_STEREO_FLAG, \
+ DEFAULT_STEREO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_STEREO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG, \
+ DEFAULT_MONO_FLAG
+
+#define DEFAULT_HD_RECORD_NUM_VOICE_RECOGNITION_SCENES 1
+#define DEFAULT_HD_RECORD_NUM_VOICE_SCENES 3
+#define DEFAULT_HD_RECORD_NUM_VIDEO_SCENES 2
+#define DEFAULT_HD_RECORD_NUM_VOICE_UNLOCK_SCENES 1
+#define DEFAULT_HD_RECORD_NUM_CUSTOMIZATION_SCENES 3
+
+#define DEFAULT_HD_RECORD_SCENE_TABLE \
+ 0, 1, 0xFF,\
+ 2, 3, 29,\
+ 4, 5, 0xFF,\
+ 6, 7, 0xFF,\
+ 8, 9, 0xFF,\
+ 10, 11, 0xFF,\
+ 12, 13, 0xFF,\
+ 14, 15, 0xFF,\
+ 16, 17, 0xFF,\
+ 18, 19, 0xFF
+
+#define DEFAULT_HD_RECORD_SCENE_NAME \
+ "VR",\
+ "Normal",\
+ "Meeting",\
+ "Lecture",\
+ "Normal",\
+ "Meeting",\
+ "VoiceUnLk",\
+ "Reserve1",\
+ "Reserve2",\
+ "Reserve3"
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/voice_recognition_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/voice_recognition_custom.h
new file mode 100644
index 0000000..36dc23b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgdefault/voice_recognition_custom.h
@@ -0,0 +1,115 @@
+#ifndef VOICE_RECOGNITION_CUSTOM_H
+#define VOICE_RECOGNITION_CUSTOM_H
+
+/****************************************************
+* Define default voice feature customization parameters
+*****************************************************/
+
+
+#define DEFAULT_AP_NUM 5
+#define DEFAULT_LANGUAGE_NUM 3
+
+// for voice ui - pattern file
+#define DEFAULT_LANGUAGE_FOLDER_NAME \
+ "Chinese-Mandarin",\
+ "Chinese-Taiwan",\
+ "English",\
+ "Reserve1",\
+ "Reserve2",\
+ "Reserve3",\
+ "Reserve4",\
+ "Reserve5"
+
+#define DEFAULT_COMMAND_NUM_PER_LAN \
+ 17,17,17,0,0,0,0,0
+
+#define DEFAULT_PHONE_SUPPORT_INFO \
+ 1,2,0,0,0,0,0,0, \
+ 1,2,0,0,0,0,0,0, \
+ 1,2,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_CAMERA_SUPPORT_INFO \
+ 3,4,0,0,0,0,0,0, \
+ 3,4,0,0,0,0,0,0, \
+ 3,4,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_ALARM_SUPPORT_INFO \
+ 5,6,16,17,0,0,0,0, \
+ 5,6,16,17,0,0,0,0, \
+ 5,6,16,17,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_MUSIC_SUPPORT_INFO \
+ 7,8,9,10,11,12,13,0, \
+ 7,8,9,10,11,12,13,0, \
+ 7,8,9,10,11,12,13,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_EBOOK_SUPPORT_INFO \
+ 14,15,0,0,0,0,0,0, \
+ 14,15,0,0,0,0,0,0, \
+ 14,15,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_RESERVE_SUPPORT_INFO \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0
+
+#define DEFAULT_AP_SUPPORT_INFO \
+ DEFAULT_PHONE_SUPPORT_INFO, \
+ DEFAULT_CAMERA_SUPPORT_INFO, \
+ DEFAULT_ALARM_SUPPORT_INFO, \
+ DEFAULT_MUSIC_SUPPORT_INFO, \
+ DEFAULT_EBOOK_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO, \
+ DEFAULT_RESERVE_SUPPORT_INFO
+
+// for CTO
+#define DEFAULT_ALGORITHM_PARAM \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 8,7,6,7,14,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, \
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+
+#endif
\ No newline at end of file
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_ADC_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_ADC_File.h
new file mode 100644
index 0000000..ff56d4f
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_ADC_File.h
@@ -0,0 +1,115 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_ADC_File.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of ADC CFG file
+ *
+ * Author:
+ * -------
+ * MTK80198(Chunlei Wang)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_AUXADC_FILE_H
+#define _CFG_AUXADC_FILE_H
+
+
+
+// the record structure define of adc nvram file
+typedef struct
+{
+ int Slop[9];
+ int Offset[9];
+ int cal;
+}AUXADC_CFG_Struct;
+
+///please define it according to your module
+#define CFG_FILE_AUXADC_REC_SIZE sizeof(AUXADC_CFG_Struct)
+#define CFG_FILE_AUXADC_REC_TOTAL 1
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_AUDIO_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_AUDIO_File.h
new file mode 100644
index 0000000..066d632
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_AUDIO_File.h
@@ -0,0 +1,931 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_audio_file.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Ning.F
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 12 29 2012 donglei.ji
+ * [ALPS00425279] [Need Patch] [Volunteer Patch] voice ui and password unlock feature check in
+ * voice ui - NVRAM .
+ *
+ * 08 26 2012 weiguo.li
+ * [ALPS00347285] [Need Patch] [Volunteer Patch]LGE AudioGainTable modification
+ * .
+ *
+ * 07 29 2012 weiguo.li
+ * [ALPS00319405] ALPS.JB.BSP.PRA check in CR for Jades
+ * .
+ *
+ * Jun 22 2009 mtk01352
+ * [DUMA00007771] Moving modem side customization to AP
+ *
+ *
+ * Apr 29 2009 mtk80306
+ * [DUMA00116080] revise the customization of nvram
+ * revise nvram customization
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * modify code convention
+ *
+ * Mar 9 2009 mtk80306
+ * [DUMA00111088] nvram customization
+ * nvram customization
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef _CFG_AUDIO_FILE_H
+#define _CFG_AUDIO_FILE_H
+
+#define CUSTOM_VOLUME_STEP (7)
+#define AUDIO_MAX_VOLUME_STEP (15)
+
+#define NB_FIR_NUM (45)
+#define NB_FIR_INDEX_NUM (6)
+#define SPEECH_COMMON_NUM (12)
+#define SPEECH_PARA_MODE_NUM (8)
+#define SPEECH_PARA_NUM (16)
+#define AUDIO_EQ_PARAM_NUM (8)
+
+#define WB_FIR_NUM (90)
+#define WB_FIR_INDEX_NUM (6)
+
+#define HD_REC_MODE_INDEX_NUM (30)
+#define HD_REC_FIR_INDEX_NUM (16) //extend 8-->16
+
+#define VOIP_INDEX_NUM (4)
+
+// for voice ui feature
+#define VOICE_FOLDER_NAME_LEN_MAX 32
+#define VOICE_AP_NUM_MAX 16
+#define VOICE_LANGUAGE_NUM_MAX 8
+#define VOICE_CMDS_NUM_MAX 8
+#define VOICE_CMDS_PER_LAN_NUM_MAX 32
+#define VOICE_RECOG_FEATURE_NUM_MAX 8
+#define VOICE_RECOG_PARAM_NUM_MAX 32
+/* audio nvram structure definition*/
+typedef enum
+{
+ VOL_NORMAL = 0 ,
+ VOL_HEADSET ,
+ VOL_HANDFREE ,
+ MAX_VOL_CATE
+} volume_category_enum;
+
+typedef enum
+{
+ VOL_TYPE_TON = 0 ,
+ VOL_TYPE_KEY ,
+ VOL_TYPE_MIC ,
+ VOL_TYPE_FMR ,
+ VOL_TYPE_SPH ,
+ VOL_TYPE_SID ,
+ VOL_TYPE_MEDIA ,
+ MAX_VOL_TYPE
+} volume_type_enum;
+
+// new volume customization data structure
+enum VolumeType {
+ VER1_VOL_TYPE_RING = 0,
+ VER1_VOL_TYPE_SIP,
+ VER1_VOL_TYPE_MIC,
+ VER1_VOL_TYPE_FM,
+ VER1_VOL_TYPE_SPH,
+ VER1_VOL_TYPE_SPH2,
+ VER1_VOL_TYPE_SID,
+ VER1_VOL_TYPE_MEDIA,
+ VER1_VOL_TYPE_MATV,
+ VER1_NUM_OF_VOL_TYPE
+};
+
+enum VolumeMode {
+ VOLUME_NORMAL_MODE = 0,
+ VOLUME_HEADSET_MODE,
+ VOLUME_SPEAKER_MODE,
+ VOLUME_HEADSET_SPEAKER_MODE,
+ NUM_OF_VOL_MODE
+};
+
+enum VOLUME_NORMAL_TYPE {
+ NORMAL_AUDIO_BUFFER = 0,
+ NORMAL_FM_RECORD_A,
+ NORMAL_FM_RECORD_D,
+ NORMAL_SIP_AUDIO_BUFFER,
+ NORMAL_RSERVED_2,
+ NORMAL_RSERVED_3,
+ NORMAL_VOLUME_TYPE_MAX
+};
+
+enum VOLUME_HEADSET_TYPE {
+ HEADSET_AUDIO_BUFFER = 0,
+ HEADSET_FM_RECORD_A,
+ HEADSET_FM_RECORD_D,
+ HEADSET_SIP_AUDIO_BUFFER,
+ HEADSET_RSERVED_2,
+ HEADSET_RSERVED_3,
+ HEADSET_VOLUME_TYPE_MAX
+};
+
+enum VOLUME_SPEAKER_TYPE {
+ SPEAKER_AMP = 0,
+ SPEAKER_FM_RECORD_A,
+ SPEAKER_FM_RECORD_D,
+ SPEAKER_SIP_AUDIO_BUFFER,
+ SPEAKER_RSERVED_2,
+ SPEAKER_RSERVED_3,
+ SPEAKER_VOLUME_TYPE_MAX
+};
+
+enum VOLUME_HEADSET_SPEAKER_TYPE {
+ HEADSET_SPEAKER_AUDIO_BUFFER = 0,
+ HEADSET_SPEAKER_AMP,
+ HEADSET_SPEAKER_IV_BUFFER,
+ HEADSET_SPEAKER_FM_RECORD_A,
+ HEADSET_SPEAKER_FM_RECORD_D,
+ HEADSET_SPEAKER_SIP_AUDIO_BUFFER,
+ HEADSET_SPEAKER_RSERVED_2,
+ HEADSET_SPEAKER_RSERVED_3,
+ HEADSET_SPEAKER_VOLUME_TYPE_MAX
+};
+
+// use for external amp
+enum VOLUME_EXTAMP_TYPE {
+ VOLUME_IV_BUFFER_EXTAMP = 0,
+ VOLUME_AUDIO_BUFFER_EXTAMP,
+ VOLUME_EXTAMP, // control exp amp gain
+ VOLUME_EXTAMP_RSERVED_1,
+ VOLUME_EXTAMP_RSERVED_2,
+ VOLUME_EXTAMP_RSERVED_3,
+ EXTAMP_VOLUME_TYPE_MAX
+};
+
+#define NUM_ABF_PARAM 44
+#define NUM_ABFWB_PARAM 76
+
+//DMNR calibration data
+typedef struct _AUDIO_CUSTOM_EXTRA_PARAM_STRUCT
+{
+ /* ABF parameters */
+ unsigned short ABF_para[NUM_ABF_PARAM + NUM_ABFWB_PARAM]; //in-call DMNR normal mode with WB
+ unsigned short ABF_para_LoudSPK[NUM_ABF_PARAM + NUM_ABFWB_PARAM]; //in-call DMNR loud speaker mode with WB
+ unsigned short ABF_para_VR[NUM_ABFWB_PARAM]; //VR DMNR, only WB
+ unsigned short ABF_para_VOIP[NUM_ABFWB_PARAM]; //VoIP normal mode DMNR, only WB
+ unsigned short ABF_para_VOIP_LoudSPK[NUM_ABFWB_PARAM]; //VoIP loud speaker mode DMNR, only WB
+} AUDIO_CUSTOM_EXTRA_PARAM_STRUCT;
+
+
+#define CFG_FILE_SPEECH_DUAL_MIC_SIZE sizeof(AUDIO_CUSTOM_EXTRA_PARAM_STRUCT)
+#define CFG_FILE_SPEECH_DUAL_MIC_TOTAL 1
+
+#define NUM_ANC_PARAM 60
+
+typedef struct _AUDIO_ANC_CUSTOM_PARAM_STRUCT
+{
+ unsigned short ANC_para[NUM_ANC_PARAM];
+ unsigned short ANC_apply;
+ unsigned short ANC_log;
+ unsigned short ANC_log_downsample;
+ unsigned char ANC_dl_pga;
+} AUDIO_ANC_CUSTOM_PARAM_STRUCT;
+
+#define CFG_FILE_SPEECH_ANC_SIZE sizeof(AUDIO_ANC_CUSTOM_PARAM_STRUCT)
+#define CFG_FILE_SPEECH_ANC_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT
+{
+ unsigned short sph_voice_tracking_mode_para[16];
+ unsigned short sph_voice_tracking_mode_wb_para[16];
+} AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT;
+
+#define CFG_FILE_SPEECH_MAGI_CONFERENCE_SIZE sizeof(AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT)
+#define CFG_FILE_SPEECH_MAGI_CONFERENCE_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_HAC_PARAM_STRUCT
+{
+ /* speech enhancement */
+ unsigned short speech_hac_mode_nb_para[16];
+ /* WB speech enhancement */
+ unsigned short speech_hac_mode_wb_para[16];
+ /* speech input FIR */
+ short sph_hac_in_fir[45];
+ /* speech output FIR */
+ short sph_hac_out_fir[45];
+
+ /* WB speech input FIR */
+ short sph_hac_wb_in_fir[90];
+ /* WB speech output FIR */
+ short sph_hac_wb_out_fir[90];
+ /* mic volume setting */
+ unsigned char audiovolume_mic_hac[AUDIO_MAX_VOLUME_STEP];
+ /* speech dl volume setting */
+ unsigned char audiovolume_sph_hac[AUDIO_MAX_VOLUME_STEP];
+ /* sidetone volume setting */
+ unsigned char audiovolume_sid_hac[AUDIO_MAX_VOLUME_STEP];
+
+} AUDIO_CUSTOM_HAC_PARAM_STRUCT;
+
+#define CFG_FILE_SPEECH_HAC_PARAM_SIZE sizeof(AUDIO_CUSTOM_HAC_PARAM_STRUCT)
+#define CFG_FILE_SPEECH_HAC_PARAM_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_SPEECH_LPBK_PARAM_STRUCT
+{
+ /* speech enhancement */
+ unsigned short lpbk_speech_mode_nb_para[3][16];
+
+} AUDIO_CUSTOM_SPEECH_LPBK_PARAM_STRUCT;
+
+#define CFG_FILE_SPEECH_LPBK_PARAM_SIZE sizeof(AUDIO_CUSTOM_SPEECH_LPBK_PARAM_STRUCT)
+#define CFG_FILE_SPEECH_LPBK_PARAM_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_PARAM_STRUCT
+{
+ /* volume setting */
+ unsigned char volume[MAX_VOL_CATE][MAX_VOL_TYPE];
+ /* speech enhancement */
+ unsigned short speech_common_para[SPEECH_COMMON_NUM];
+ unsigned short speech_mode_para[SPEECH_PARA_MODE_NUM][SPEECH_PARA_NUM];
+ unsigned short speech_volume_para[4];//in the feature, should extend to [MAX_VOL_CATE][MAX_VOL_TYPE][4]
+ /* debug info */
+ unsigned short debug_info[16];
+ /* speech input FIR */
+ short sph_in_fir[NB_FIR_INDEX_NUM][NB_FIR_NUM];
+ /* speech output FIR */
+ short sph_out_fir[NB_FIR_INDEX_NUM][NB_FIR_NUM];
+ /* digital gain of DL speech */
+ unsigned short Digi_DL_Speech;
+ /* digital gain of uplink speech */
+ unsigned short Digi_Microphone;
+ /* FM record volume*/
+ unsigned short FM_Record_Volume;
+ /* user mode : normal mode, earphone mode, loud speaker mode */
+ unsigned short Bluetooth_Sync_Type;
+ unsigned short Bluetooth_Sync_Length;
+ unsigned short bt_pcm_in_vol;
+ unsigned short bt_pcm_out_vol;
+ unsigned short user_mode;
+ /* auto VM record setting */
+ unsigned short uSupportVM;
+ unsigned short uAutoVM;
+ // mic bias
+ unsigned short uMicbiasVolt;
+
+} AUDIO_CUSTOM_PARAM_STRUCT;
+
+#define CFG_FILE_SPEECH_REC_SIZE sizeof(AUDIO_CUSTOM_PARAM_STRUCT)
+#define CFG_FILE_SPEECH_REC_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_WB_A2M_PARAM_STRUCT_
+{
+ /* WB speech enhancement */
+ unsigned short speech_mode_wb_para[SPEECH_PARA_MODE_NUM][SPEECH_PARA_NUM];
+ /* WB speech input/output FIR */
+ short sph_wb_fir[WB_FIR_INDEX_NUM][WB_FIR_NUM];
+ /* in_out flag */
+ short input_out_fir_flag; // 0: input, 1: output
+} AUDIO_CUSTOM_WB_A2M_PARAM_STRUCT;
+
+typedef struct _AUDIO_CUSTOM_WB_PARAM_STRUCT
+{
+ /* WB speech enhancement */
+ unsigned short speech_mode_wb_para[SPEECH_PARA_MODE_NUM][SPEECH_PARA_NUM];
+ /* WB speech input FIR */
+ short sph_wb_in_fir[WB_FIR_INDEX_NUM][WB_FIR_NUM];
+ /* WB speech output FIR */
+ short sph_wb_out_fir[WB_FIR_INDEX_NUM][WB_FIR_NUM];
+} AUDIO_CUSTOM_WB_PARAM_STRUCT;
+
+#define CFG_FILE_WB_SPEECH_REC_SIZE sizeof(AUDIO_CUSTOM_WB_PARAM_STRUCT)
+#define CFG_FILE_WB_SPEECH_REC_TOTAL 1
+
+#if defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V5)
+
+typedef struct _AUDIO_ACF_V5F_PARAM
+{
+ unsigned int bes_loudness_L_hpf_fc;
+ unsigned int bes_loudness_L_hpf_order;
+ unsigned int bes_loudness_L_lpf_fc;
+ unsigned int bes_loudness_L_lpf_order;
+ unsigned int bes_loudness_L_bpf_fc[8];
+ unsigned int bes_loudness_L_bpf_bw[8];
+ int bes_loudness_L_bpf_gain[8];
+ unsigned int bes_loudness_R_hpf_fc;
+ unsigned int bes_loudness_R_hpf_order;
+ unsigned int bes_loudness_R_lpf_fc;
+ unsigned int bes_loudness_R_lpf_order;
+ unsigned int bes_loudness_R_bpf_fc[8];
+ unsigned int bes_loudness_R_bpf_bw[8];
+ int bes_loudness_R_bpf_gain[8];
+
+}AUDIO_ACF_V5F_PARAM;
+
+typedef struct _AUDIO_ACF_V5VIBSPK_PARAM
+{
+ unsigned int bes_loudness_bpf_coeff[2][6][3];
+
+}AUDIO_ACF_V5VIBSPK_PARAM;
+
+
+typedef struct _AUDIO_ACF_CUSTOM_PARAM_STRUCT
+{
+
+ union{
+ AUDIO_ACF_V5F_PARAM V5F;
+ AUDIO_ACF_V5VIBSPK_PARAM V5ViVSPK;
+ }bes_loudness_f_param;
+ unsigned int bes_loudness_Sep_LR_Filter;
+ unsigned int bes_loudness_WS_Gain_Max;
+ unsigned int bes_loudness_WS_Gain_Min;
+ unsigned int bes_loudness_Filter_First;
+ unsigned int bes_loudness_Num_Bands;
+ unsigned int bes_loudness_Flt_Bank_Order;
+ unsigned int bes_loudness_Cross_Freq[7];
+ int DRC_Th[8][5];
+ int DRC_Gn[8][5];
+ int SB_Gn[8];
+ unsigned int SB_Mode[8];
+ unsigned int DRC_Delay;
+ unsigned int Att_Time[8][6];
+ unsigned int Rel_Time[8][6];
+ int Hyst_Th[8][6];
+ int Lim_Th;
+ int Lim_Gn;
+ unsigned int Lim_Const;
+ unsigned int Lim_Delay;
+ int SWIPRev;
+} AUDIO_ACF_CUSTOM_PARAM_STRUCT;
+#if 0
+typedef struct _AUDIO_ACF_CUSTOM_PARAM_STRUCT
+{
+ unsigned int bes_loudness_hsf_coeff_L[2][9][5]; // Compensation Filter HSF coeffs [9][4]->[2][9][5]
+ unsigned int bes_loudness_bpf_coeff_L[8][6][3]; // Compensation Filter BPF coeffs [4][6][3]->[6][6][3]->[8][6][3]
+ unsigned int bes_loudness_lpf_coeff_L[6][3];
+
+ unsigned int bes_loudness_hsf_coeff_R[2][9][5]; // Compensation Filter HSF coeffs [9][4]->[2][9][5]
+ unsigned int bes_loudness_bpf_coeff_R[8][6][3]; // Compensation Filter BPF coeffs [4][6][3]->[6][6][3]->[8][6][3]
+ unsigned int bes_loudness_lpf_coeff_R[6][3];
+
+ unsigned int bes_loudness_WS_Gain_Max; // Q2.14
+ unsigned int bes_loudness_WS_Gain_Min; // Q2.14
+ unsigned int bes_loudness_Filter_First; // 0: DRC First, 1: Filter First
+ unsigned int bes_loudness_Sep_LR_Filter; // 0: Use same filter for both L / R, // 1: Separate L / R filter
+
+ unsigned int bes_loudness_Num_Bands; // range: 1 ~ 8
+ unsigned int bes_loudness_Flt_Bank_Order; // range: 3, 5, 7
+ unsigned int bes_loudness_Cross_Freq[7]; // unit: Hz
+ int bes_loudness_DRC_Th[8][5]; // Q24.8, unit: dB
+ int bes_loudness_DRC_Gn[8][5]; // Q24.8, unit: dB
+ int bes_loudness_SB_Gn[8]; // Q24.8, unit: dB
+ unsigned int bes_loudness_SB_Mode[8]; // 0: makeup gain, 1: subband limiter,
+ // 2: bypass, 3: mute
+ unsigned int bes_loudness_DRC_Delay;
+ unsigned int bes_loudness_Att_Time[8][6]; // unit: 0.1 ms / 6dB
+ unsigned int bes_loudness_Rel_Time[8][6]; // unit: 0.1 ms / 6dB
+ int bes_loudness_Hyst_Th[8][6]; // Q24.8, unit: dB
+ int bes_loudness_Lim_Th;
+ int bes_loudness_Lim_Gn;
+ unsigned int bes_loudness_Lim_Const;
+ unsigned int bes_loudness_Lim_Delay;
+
+ /*
+ unsigned int bes_loudness_WS_Gain_Max;
+ unsigned int bes_loudness_WS_Gain_Min;
+ unsigned int bes_loudness_Filter_First;
+ unsigned int bes_loudness_Att_Time; // unit: 0.1 ms / 6dB
+ unsigned int bes_loudness_Rel_Time; // unit: 0.1 ms / 6dB
+ char bes_loudness_Gain_Map_In[5];
+ char bes_loudness_Gain_Map_Out[5];
+ */
+} AUDIO_ACF_CUSTOM_PARAM_STRUCT;
+#endif
+#elif defined(MTK_AUDIO_BLOUD_CUSTOMPARAMETER_V4)
+typedef struct _AUDIO_ACF_CUSTOM_PARAM_STRUCT
+{
+ unsigned int bes_loudness_hsf_coeff[2][9][5]; // Compensation Filter HSF coeffs [9][4]->[2][9][5]
+ unsigned int bes_loudness_bpf_coeff[8][6][3]; // Compensation Filter BPF coeffs [4][6][3]->[6][6][3]->[8][6][3]
+ //unsigned int bes_loudness_DRC_Forget_Table[9][2];
+ unsigned int bes_loudness_lpf_coeff[6][3];
+ unsigned int bes_loudness_WS_Gain_Max;
+ unsigned int bes_loudness_WS_Gain_Min;
+ unsigned int bes_loudness_Filter_First;
+ unsigned int bes_loudness_Att_Time; // unit: 0.1 ms / 6dB
+ unsigned int bes_loudness_Rel_Time; // unit: 0.1 ms / 6dB
+ char bes_loudness_Gain_Map_In[5];
+ char bes_loudness_Gain_Map_Out[5];
+} AUDIO_ACF_CUSTOM_PARAM_STRUCT;
+#else
+typedef struct _AUDIO_ACF_CUSTOM_PARAM_STRUCT
+{
+ /* Compensation Filter HSF coeffs */
+ /* BesLoudness also uses this coeffs */
+ unsigned int bes_loudness_hsf_coeff[9][4];
+
+ /* Compensation Filter BPF coeffs */
+ unsigned int bes_loudness_bpf_coeff[4][6][3];
+ unsigned int bes_loudness_DRC_Forget_Table[9][2];
+ unsigned int bes_loudness_WS_Gain_Max;
+ unsigned int bes_loudness_WS_Gain_Min;
+ unsigned int bes_loudness_Filter_First;
+ char bes_loudness_Gain_Map_In[5];
+ char bes_loudness_Gain_Map_Out[5];
+
+} AUDIO_ACF_CUSTOM_PARAM_STRUCT;
+#endif
+/*
+*/
+#define CFG_FILE_AUDIO_COMPFLT_REC_SIZE sizeof(AUDIO_ACF_CUSTOM_PARAM_STRUCT)
+#define CFG_FILE_AUDIO_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_HEADPHONE_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_VIBSPK_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_AUDIOSUB_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_AUDIOSUB_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_MUSICDRC_COMPFLT_REC_TOTAL 1
+#define CFG_FILE_RINGTONEDRC_COMPFLT_REC_TOTAL 1
+
+
+typedef struct _AUDIO_EFFECT_CUSTOM_PARAM_STRUCT
+{
+ //surround parameters
+ int bsrd_level;
+ unsigned int Distance1;
+ unsigned int Distance2;
+ int bsrd_band_select;
+
+ //bass parameters
+ unsigned int bass_CutoffFreq;
+ int bass_IsVB;
+
+ //EQ parameters
+ short Normal_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Dance_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Bass_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Classical_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Treble_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Party_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Pop_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+ short Rock_Gain_dB_level[AUDIO_EQ_PARAM_NUM];
+
+ //loudness mode
+ int LoudEnhancemode;
+
+ // time stretch
+ int Time_TD_FD;
+ int Time_TS_Ratio;
+
+} AUDIO_EFFECT_CUSTOM_PARAM_STRUCT;
+
+#define CFG_FILE_AUDIO_EFFECT_REC_SIZE sizeof(AUDIO_EFFECT_CUSTOM_PARAM_STRUCT)
+#define CFG_FILE_AUDIO_EFFECT_REC_TOTAL 1
+
+typedef struct _AUDIO_PARAM_MED_STRUCT
+{
+ short speech_input_FIR_coeffs[SPEECH_PARA_MODE_NUM][NB_FIR_NUM];
+ short speech_output_FIR_coeffs[SPEECH_PARA_MODE_NUM][NB_FIR_INDEX_NUM][NB_FIR_NUM];
+ short select_FIR_output_index[SPEECH_PARA_MODE_NUM];
+ short select_FIR_intput_index[SPEECH_PARA_MODE_NUM];
+ short speech_mode_para[SPEECH_PARA_MODE_NUM][SPEECH_PARA_NUM];
+} AUDIO_PARAM_MED_STRUCT;
+
+#define CFG_FILE_AUDIO_PARAM_MED_REC_SIZE sizeof(AUDIO_PARAM_MED_STRUCT)
+#define CFG_FILE_AUDIO_PARAM_MED_REC_TOTAL 1
+
+
+typedef struct _AUDIO_VOLUME_CUSTOM_STRUCT
+{
+ unsigned char audiovolume_ring[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_key[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_mic[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_fmr[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_sph[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_sid[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_media[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+ unsigned char audiovolume_matv[MAX_VOL_CATE][CUSTOM_VOLUME_STEP];
+} AUDIO_VOLUME_CUSTOM_STRUCT;
+
+#define CFG_FILE_AUDIO_VOLUME_CUSTOM_REC_SIZE sizeof(AUDIO_VOLUME_CUSTOM_STRUCT)
+#define CFG_FILE_AUDIO_VOLUME_CUSTOM_REC_TOTAL 1
+
+typedef struct _AUDIO_VER1_CUSTOM_VOLUME_STRUCT {
+ unsigned char audiovolume_ring[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_sip[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_mic[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_fm[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_sph[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_sph2[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_sid[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_media[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+ unsigned char audiovolume_matv[NUM_OF_VOL_MODE][AUDIO_MAX_VOLUME_STEP];
+
+ unsigned char normalaudiovolume[NORMAL_VOLUME_TYPE_MAX];
+ unsigned char headsetaudiovolume[HEADSET_VOLUME_TYPE_MAX];
+ unsigned char speakeraudiovolume[SPEAKER_VOLUME_TYPE_MAX];
+ unsigned char headsetspeakeraudiovolume[HEADSET_SPEAKER_VOLUME_TYPE_MAX];
+ unsigned char extampaudiovolume[EXTAMP_VOLUME_TYPE_MAX];
+
+ unsigned char audiovolume_level[VER1_NUM_OF_VOL_TYPE];
+} AUDIO_VER1_CUSTOM_VOLUME_STRUCT;
+
+#define CFG_FILE_AUDIO_VER1_VOLUME_CUSTOM_REC_SIZE sizeof(AUDIO_VER1_CUSTOM_VOLUME_STRUCT)
+#define CFG_FILE_AUDIO_VER1_VOLUME_CUSTOM_REC_TOTAL 1
+
+
+
+/********************************************************************
+* Audio Gain Table
+*********************************************************************/
+#define AUDIO_MAX_AMP_CONTROL_POINTS (10)
+#define AUDIO_MAX_GAIN_TABLE_STEP (18)
+#define AUDIO_MAX_MIC_GAIN_NUMS (32)
+
+typedef enum {
+ AUDIO_GAIN_DEFAULT =-1,
+ AUDIO_GAIN_VOICE_CALL = 0,
+ AUDIO_GAIN_SYSTEM = 1,
+ AUDIO_GAIN_RING = 2,
+ AUDIO_GAIN_MUSIC = 3,
+ AUDIO_GAIN_ALARM = 4,
+ AUDIO_GAIN_NOTIFICATION = 5,
+ AUDIO_GAIN_BLUETOOTH_SCO = 6,
+ AUDIO_GAIN_ENFORCED_AUDIBLE = 7, // Sounds that cannot be muted by user and must be routed to speaker
+ AUDIO_GAIN_DTMF = 8,
+ AUDIO_GAIN_TTS = 9,
+ AUDIO_GAIN_FM = 10,
+ AUDIO_GAIN_MATV = 11,
+ AUDIO_GAIN_MAX_STREAM = 11, //max index of stream
+ NUM_AUDIO_GAIN_TYPES
+}audio_gain_type;
+
+//devices
+typedef enum {
+ GAIN_OUTPUT_EARPIECE = 0,
+ GAIN_OUTPUT_HEADSET = 1,
+ GAIN_OUTPUT_SPEAKER = 2,
+ GAIN_OUTPUT_DOCK = 3,
+ NUM_GAIN_OUTPUT_DEVICES = 4
+}output_gain_device;
+
+//mic types
+typedef enum {
+ GAIN_IDLE_RECORD_MIC =0,
+ GAIN_IDLE_RECORD_HEADSET ,
+ GAIN_VOICE_REC_MIC,
+ GAIN_VOICE_REC_HEADSET,
+ GAIN_VIDEO_REC_MIC,
+ GAIN_VIDEO_REC_HEADSET,
+ GAIN_INCALL_NB_ECEIVER,
+ GAIN_INCALL_NB_HEADSET,
+ GAIN_INCALL_NB_SPEAKER,
+ GAIN_INCALL_WB_ECEIVER,
+ GAIN_INCALL_WB_HEADSET,
+ GAIN_INCALL_WB_SPEAKER,
+ GAIN_VOIP_RECEIVER,
+ GAIN_VOIP_HEADSET,
+ GAIN_VOIP_SPEAKER,
+ GAIN_TTY_DEVICE,
+ GAIN_LEVEL_SHIFT,
+ GAIN_ANALOG_PLAY,
+ GAIN_VOICE_UNLOCK_MIC,
+ GAIN_VOICE_UNLOCK_HEADSET,
+ GAIN_RESERVED1_MIC,
+ GAIN_RESERVED1_HEADSET,
+ GAIN_RESERVED2_MIC,
+ GAIN_RESERVED2_HEADSET,
+ NUM_MIC_GAINS
+}microphone_device_gain;
+
+
+//stream type gain
+typedef struct _STREAM_ITEM_GAIN_STRUCT
+{
+ unsigned char digital[AUDIO_MAX_GAIN_TABLE_STEP];
+ unsigned char analog;
+ unsigned char amp[AUDIO_MAX_AMP_CONTROL_POINTS];
+
+}STREAM_ITEM_GAIN;
+
+typedef struct _STREAM_GAIN_STRUCT
+{
+ STREAM_ITEM_GAIN stream[NUM_GAIN_OUTPUT_DEVICES];
+
+}STREAM_GAIN;
+
+//speech gain
+typedef struct _SPEECH_ITEM_GAIN_STRUCT
+{
+ unsigned char digital;
+ unsigned char analog;
+ unsigned char amp[AUDIO_MAX_AMP_CONTROL_POINTS];
+
+}SPEECH_ITEM_GAIN;
+
+typedef struct _SPEECH_GAIN_STRUCT
+{
+ SPEECH_ITEM_GAIN speech[NUM_GAIN_OUTPUT_DEVICES][AUDIO_MAX_GAIN_TABLE_STEP];
+
+}SPEECH_GAIN;
+
+//sidetone gain
+
+typedef struct _SIDETONE_GAIN_STRUCT
+{
+ unsigned char sidetone[NUM_GAIN_OUTPUT_DEVICES];
+} SIDETONE_GAIN;
+
+//mic gain
+
+typedef struct _MIC_ITEM_GAIN_STRUCT
+{
+ unsigned char digital;
+ unsigned char analog;
+}MIC_ITEM_GAIN;
+
+typedef struct _MICROPHONE_GAIN_STRUCT
+{
+ MIC_ITEM_GAIN mic[AUDIO_MAX_MIC_GAIN_NUMS];
+
+} MIC_GAIN;
+
+typedef struct _AUDIO_CUSTOM_GAIN_TABLE {
+ STREAM_GAIN voiceCall;
+ STREAM_GAIN system;
+ STREAM_GAIN ring;
+ STREAM_GAIN music;
+ STREAM_GAIN alarm;
+ STREAM_GAIN notification;
+ STREAM_GAIN blueToothSco;
+ STREAM_GAIN enforceAudible;
+ STREAM_GAIN dtmf;
+ STREAM_GAIN tts;
+ STREAM_GAIN fm;
+ STREAM_GAIN matv;
+ SPEECH_GAIN speechNB;
+ SPEECH_GAIN speechWB;
+ SIDETONE_GAIN sideToneNB;
+ SIDETONE_GAIN sideToneWB;
+ MIC_GAIN mic;
+} AUDIO_GAIN_TABLE_STRUCT;
+
+#define CFG_FILE_AUDIO_GAIN_TABLE_CUSTOM_REC_SIZE sizeof(AUDIO_GAIN_TABLE_STRUCT)
+#define CFG_FILE_AUDIO_GAIN_TABLE_CUSTOM_REC_TOTAL 1
+
+typedef struct _AUDIO_CUSTOM_BT_GAIN {
+ STREAM_GAIN blueToothNrec;
+} AUDIO_BT_GAIN_STRUCT;
+
+#define CFG_FILE_AUDIO_BT_GAIN_CUSTOM_SIZE sizeof(AUDIO_BT_GAIN_STRUCT)
+#define CFG_FILE_AUDIO_BT_GAIN_CUSTOM_TOTAL 1
+
+//#if defined(MTK_HD_RECORD_SUPPORT)
+
+#define SPC_MAX_NUM_RECORD_SPH_MODE HD_REC_MODE_INDEX_NUM
+#define SPC_MAX_NUM_RECORD_INPUT_FIR HD_REC_FIR_INDEX_NUM //extend 8 -->16
+typedef struct _AUDIO_HD_RECORD_PARAM_STRUCT
+{
+ /* HD RECORD Mode Num & FIR Num*/
+ unsigned short hd_rec_mode_num; // max(hd_rec_fir_num) == 30 ??
+ unsigned short hd_rec_fir_num; // max(hd_rec_fir_num) == 16 ??
+
+ /* HD RECORD Speech Enhancement */
+ unsigned short hd_rec_speech_mode_para[SPC_MAX_NUM_RECORD_SPH_MODE][SPEECH_PARA_NUM]; // the contain only have hd_rec_mode_num effective values
+
+ /* HD RECORD FIR */
+ short hd_rec_fir[SPC_MAX_NUM_RECORD_INPUT_FIR][WB_FIR_NUM]; // the contain only have hd_rec_fir_num effective values
+
+ /* HD RECORD FIR Mapping (ex, map[sph_mode] = FIR3) */
+ unsigned short hd_rec_map_to_fir_for_ch1[SPC_MAX_NUM_RECORD_SPH_MODE];
+ unsigned short hd_rec_map_to_fir_for_ch2[SPC_MAX_NUM_RECORD_SPH_MODE];
+
+ /* HD RECORD Device Mode Mapping (ex, map[sph_mode] = SPH_MODE_NORMAL ) */
+ unsigned char hd_rec_map_to_dev_mode[SPC_MAX_NUM_RECORD_SPH_MODE];
+
+ /* HD RECORD Input Source Mapping (ex, map[sph_mode] = BT Earphone mic)*/
+ unsigned char hd_rec_map_to_input_src[SPC_MAX_NUM_RECORD_SPH_MODE];
+
+ /* HD RECORD mode is stereo or not (ex, map[sph_mode] = 0(mono), 1(stereo) )*/
+ unsigned char hd_rec_map_to_stereo_flag[SPC_MAX_NUM_RECORD_SPH_MODE];
+
+} AUDIO_HD_RECORD_PARAM_STRUCT;
+
+
+#define CFG_FILE_AUDIO_HD_REC_PAR_SIZE sizeof(AUDIO_HD_RECORD_PARAM_STRUCT)
+#define CFG_FILE_AUDIO_HD_REC_PAR_TOTAL 1
+
+
+
+#define MAX_HD_REC_SCENES 10 // max #scene = 10 (10 * 3 = 30 = max modes)
+
+enum HD_REC_DEVICE_SOURCE_T
+{
+ HD_REC_DEVICE_SOURCE_HANDSET = 0,
+ HD_REC_DEVICE_SOURCE_HEADSET = 1,
+ HD_REC_DEVICE_SOURCE_BT_EARPHONE = 2,
+ NUM_HD_REC_DEVICE_SOURCE
+};
+
+typedef struct
+{
+ unsigned char num_voice_recognition_scenes; //for voice recognition
+ unsigned char num_voice_rec_scenes;
+ unsigned char num_video_rec_scenes;
+ unsigned char num_voice_unlock_scenes; //for voice unlock feature
+ unsigned char num_customization_scenes; //for customization
+ unsigned char scene_table[MAX_HD_REC_SCENES][NUM_HD_REC_DEVICE_SOURCE];
+ unsigned char scene_name[MAX_HD_REC_SCENES][10]; //name of each scene
+} AUDIO_HD_RECORD_SCENE_TABLE_STRUCT;
+
+
+#define CFG_FILE_AUDIO_HD_REC_SCENE_TABLE_SIZE sizeof(AUDIO_HD_RECORD_SCENE_TABLE_STRUCT)
+#define CFG_FILE_AUDIO_HD_REC_SCENE_TABLE_TOTAL 1
+
+
+
+//#endif //MTK_HD_RECORD_SUPPORT
+
+//for voice recognition customization
+typedef struct _VOICE_RECOGNITION_PARAM_STRUCT
+{
+ /* HD RECORD 48k FIR */
+ unsigned char ap_num;
+ unsigned char language_num;
+ unsigned char language_folder[VOICE_LANGUAGE_NUM_MAX][VOICE_FOLDER_NAME_LEN_MAX];
+ unsigned char cmd_num[VOICE_LANGUAGE_NUM_MAX];
+ unsigned char ap_support_info[VOICE_AP_NUM_MAX][VOICE_LANGUAGE_NUM_MAX][VOICE_CMDS_NUM_MAX];
+ unsigned char cust_param[VOICE_RECOG_FEATURE_NUM_MAX][VOICE_RECOG_PARAM_NUM_MAX];
+
+} VOICE_RECOGNITION_PARAM_STRUCT;
+
+
+#define CFG_FILE_VOICE_RECOGNIZE_PAR_SIZE sizeof(VOICE_RECOGNITION_PARAM_STRUCT)
+#define CFG_FILE_VOICE_RECOGNIZE_PAR_TOTAL 1
+
+
+typedef struct
+{
+ unsigned int u32EnableFlg;
+
+}AUDIO_AUDENH_CONTROL_OPTION_STRUCT;
+
+#define CFG_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_SIZE sizeof(AUDIO_AUDENH_CONTROL_OPTION_STRUCT)
+#define CFG_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_TOTAL 1
+
+//for DC Calibration
+typedef struct _AUDIO_BUFFER_DC_CALIBRATION_STRUCT
+{
+ unsigned short cali_flag;
+ unsigned short cali_val_hp_left;
+ unsigned short cali_val_hp_right;
+ unsigned short cali_val_speaker;
+} AUDIO_BUFFER_DC_CALIBRATION_STRUCT;
+
+
+#define CFG_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_SIZE sizeof(AUDIO_BUFFER_DC_CALIBRATION_STRUCT)
+#define CFG_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_TOTAL 1
+
+
+enum AUDIO_VOIP_DEVICE_TYPE {
+ AUDIO_VOIP_DEVICE_NORMAL = 0, //path receiver
+ AUDIO_VOIP_DEVICE_SPEAKER = 1,
+ AUDIO_VOIP_DEVICE_HEADSET = 2,
+ AUDIO_VOIP_DEVICE_BT = 3,
+ NUM_AUDIO_VOIP_DEVICE = VOIP_INDEX_NUM
+};
+
+typedef struct _AUDIO_VOIP_PARAM_STRUCT
+{
+ /* speech enhancement param */
+ unsigned short speech_common_para[SPEECH_COMMON_NUM]; //normal/Loud speaker/headser/BT
+ unsigned short speech_mode_para[VOIP_INDEX_NUM][SPEECH_PARA_NUM]; //normal/Loud speaker/headser/BT
+
+ /* speech input FIR */
+ short in_fir[VOIP_INDEX_NUM][WB_FIR_NUM]; //normal/Loud speaker/headser/BT
+ /* speech output FIR */
+ short out_fir[VOIP_INDEX_NUM][WB_FIR_NUM]; //normal/Loud speaker/headser/BT
+
+} AUDIO_VOIP_PARAM_STRUCT;
+
+
+#define CFG_FILE_AUDIO_VOIP_PAR_SIZE sizeof(AUDIO_VOIP_PARAM_STRUCT)
+#define CFG_FILE_AUDIO_VOIP_PAR_TOTAL 1
+
+//for Speaker Monitor
+typedef struct _AUDIO_SPEAKER_MONITOR_PARAM_STRUCT
+{
+ float resistor[512];
+ float temp_initial; // initial value
+ /* hardware setting */
+ float current_sensing_resistor; // unit: ohm
+ /* resonant frqquency*/
+ unsigned short reso_freq_center;
+ unsigned short reso_freq_bw;
+ unsigned short reso_freq_gain;
+ /* temperature estimation */
+ unsigned short prefer_band_upper;
+ unsigned short prefer_band_lower;
+ /* temperature estimation control */
+ unsigned short temp_limit_low; // start to log
+ unsigned short temp_limit_high; // start to control gain
+ unsigned short temp_control_time_slots; // max log time
+ /* monitor interval */
+ unsigned short monitor_timer; //unit: ms
+} AUDIO_SPEAKER_MONITOR_PARAM_STRUCT;
+
+
+#define CFG_FILE_SPEAKER_MONITOR_SIZE sizeof(AUDIO_SPEAKER_MONITOR_PARAM_STRUCT)
+#define CFG_FILE_SPEAK_MONITOR_REC_TOTAL 1
+
+#endif // _CFG_AUDIO_FILE_H
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BT_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BT_File.h
new file mode 100644
index 0000000..2eb275f
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BT_File.h
@@ -0,0 +1,65 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+
+#ifndef _CFG_BT_FILE_H
+#define _CFG_BT_FILE_H
+
+
+// the record structure define of bt nvram file
+typedef struct
+{
+ unsigned char addr[6]; // BT address
+ unsigned char Voice[2]; // Voice setting for SCO connection
+ unsigned char Codec[4]; // PCM codec setting
+ unsigned char Radio[6]; // RF configuration
+ unsigned char Sleep[7]; // Sleep mode configuration
+ unsigned char BtFTR[2]; // Other feature setting
+ unsigned char TxPWOffset[3]; // TX power channel offset compensation
+ unsigned char CoexAdjust[6]; // BT/WIFI coexistence performance adjustment
+ unsigned char Reserved1[2]; // Reserved
+ unsigned char Reserved2[2]; // Reserved
+ unsigned char Reserved3[4]; // Reserved
+ unsigned char Reserved4[4]; // Reserved
+ unsigned char Reserved5[8]; // Reserved
+ unsigned char Reserved6[8]; // Reserved
+} ap_nvram_btradio_struct, ap_nvram_btradio_mt6610_struct;
+
+//the record size and number of bt nvram file
+#define CFG_FILE_BT_ADDR_REC_SIZE sizeof(ap_nvram_btradio_struct)
+#define CFG_FILE_BT_ADDR_REC_TOTAL 1
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BWCS_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BWCS_File.h
new file mode 100644
index 0000000..16bcebe
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_BWCS_File.h
@@ -0,0 +1,128 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_bwcs_file.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Saker Hsia(MTK02327)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 30 2010 saker.hsia
+ * [ALPS00002764][Need Patch] [Volunteer Patch] ALPS.10X.W10.28 Volunteer patch for BWCS NVRAM customization
+ * .
+ *
+ * 05 05 2010 saker.hsia
+ * [ALPS00001913][BWCS] BT WiFi Single Antenna Feature check in Android 2.1
+ * Check in BT/WiFi Single Antenna Feature
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_BWCS_FILE_H
+#define _CFG_BWCS_FILE_H
+
+
+// the record structure define of bt nvram file
+typedef struct
+{
+ unsigned int rt_rssi_th[3];
+ unsigned int nrt_rssi_th[3];
+ unsigned int ant_path_comp;
+ unsigned int ant_switch_prot_time;
+ unsigned int wifi_tx_flow[2];
+ unsigned int bt_rx_range[2];
+ unsigned int bt_tx_power[3];
+ unsigned int reserved[5];
+} ap_nvram_bwcs_config_struct;
+
+
+//the record size and number of bt nvram file
+#define CFG_FILE_BWCS_CONFIG_SIZE sizeof(ap_nvram_bwcs_config_struct)
+#define CFG_FILE_BWCS_CONFIG_TOTAL 1
+
+#endif /* _CFG_BWCS_FILE_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File.h
new file mode 100644
index 0000000..01f0d77
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File.h
@@ -0,0 +1,210 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * MSDK_NVRAM_CAMERA_exp.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * Definition of the data structures of ISP drivers that will be stored into NRVAM
+ *
+ *
+ * Author:
+ * -------
+ * PC Huang (MTK02204)
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 11 16 2011 koli.lin
+ * [ALPS00030473] [Camera]
+ * [Camera] Add two parameters to NVRAM for CCT tuning.
+ *
+ * 05 17 2010 koli.lin
+ * [ALPS00000143][Camera]
+ * Synchronize the NVRAM structure and Code gen.
+ *
+ * 05 14 2010 koli.lin
+ * [ALPS00000143][Camera]
+ * Add one parameters for AE NVRAM used.
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 15 2009 mtk80306
+ * [DUMA00111629] add camera nvram files
+ * add camera nvram file
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef __MSDK_NVRAM_CAMERA_EXP_H
+#define __MSDK_NVRAM_CAMERA_EXP_H
+
+#include "CFG_Camera_File_Max_Size.h"
+
+typedef unsigned char UINT8;
+
+typedef struct
+{
+
+ UINT8 CameraData[MAXIMUM_NVRAM_CAMERA_SENSOR_FILE_SIZE];
+} NVRAM_SENSOR_DATA_STRUCT, *PNVRAM_SENSOR_DATA_STRUCT;
+typedef struct
+{
+ UINT8 CameraData[MAXIMUM_NVRAM_CAMERA_PARA_FILE_SIZE];
+} NVRAM_CAMERA_PARA_STRUCT, *PNVRAM_CAMERA_PARA_STRUCT;
+
+
+typedef struct
+{
+ UINT8 Data[MAXIMUM_NVRAM_CAMERA_DEFECT_FILE_SIZE];
+} NVRAM_CAMERA_DEFECT_STRUCT, *PNVRAM_CAMERA_DEFECT_STRUCT;
+
+/*******************************************************************************
+* shading
+********************************************************************************/
+
+typedef struct
+{
+ UINT8 CameraData[MAXIMUM_NVRAM_CAMERA_SHADING_FILE_SIZE];
+} NVRAM_CAMERA_SHADING_STRUCT, *PNVRAM_CAMERA_SHADING_STRUCT;
+
+/*******************************************************************************
+* 3A
+********************************************************************************/
+
+typedef struct
+{
+ UINT8 Data[MAXIMUM_NVRAM_CAMERA_3A_FILE_SIZE];
+} NVRAM_CAMERA_3A_STRUCT, *PNVRAM_CAMERA_3A_STRUCT;
+
+/*******************************************************************************
+* ISP parameter
+********************************************************************************/
+
+typedef struct
+{
+ UINT8 Data[MAXIMUM_NVRAM_CAMERA_ISP_FILE_SIZE];
+} NVRAM_CAMERA_ISP_PARAM_STRUCT, *PNVRAM_CAMERA_ISP_PARAM_STRUCT;
+
+
+
+/*******************************************************************************
+* Lens
+********************************************************************************/
+
+typedef struct
+{
+ UINT8 reserved[MAXIMUM_NVRAM_CAMERA_LENS_FILE_SIZE];
+} NVRAM_LENS_PARA_STRUCT, *PNVRAM_LENS_PARA_STRUCT;
+
+
+/* define the LID and total record for NVRAM interface */
+#define CFG_FILE_CAMERA_PARA_REC_SIZE MAXIMUM_NVRAM_CAMERA_ISP_FILE_SIZE
+#define CFG_FILE_CAMERA_3A_REC_SIZE MAXIMUM_NVRAM_CAMERA_3A_FILE_SIZE
+#define CFG_FILE_CAMERA_SHADING_REC_SIZE MAXIMUM_NVRAM_CAMERA_SHADING_FILE_SIZE
+#define CFG_FILE_CAMERA_DEFECT_REC_SIZE MAXIMUM_NVRAM_CAMERA_DEFECT_FILE_SIZE
+#define CFG_FILE_CAMERA_SENSOR_REC_SIZE MAXIMUM_NVRAM_CAMERA_SENSOR_FILE_SIZE
+#define CFG_FILE_CAMERA_LENS_REC_SIZE MAXIMUM_NVRAM_CAMERA_LENS_FILE_SIZE
+#define CFG_FILE_CAMERA_VERSION_REC_SIZE MAXIMUM_NVRAM_CAMERA_VERSION_FILE_SIZE
+#define CFG_FILE_CAMERA_FEATURE_REC_SIZE MAXIMUM_NVRAM_CAMERA_FEATURE_FILE_SIZE
+#define CFG_FILE_CAMERA_GEOMETRY_REC_SIZE MAXIMUM_NVRAM_CAMERA_GEOMETRY_FILE_SIZE
+
+#define CFG_FILE_CAMERA_PLINE_REC_SIZE MAXIMUM_NVRAM_CAMERA_PLINE_FILE_SIZE
+
+
+#define CFG_FILE_CAMERA_PARA_REC_TOTAL 3
+#define CFG_FILE_CAMERA_3A_REC_TOTAL 3
+#define CFG_FILE_CAMERA_SHADING_REC_TOTAL 3
+#define CFG_FILE_CAMERA_DEFECT_REC_TOTAL 3
+#define CFG_FILE_CAMERA_SENSOR_REC_TOTAL 3
+#define CFG_FILE_CAMERA_LENS_REC_TOTAL 3
+#define CFG_FILE_CAMERA_VERSION_REC_TOTAL 1
+#define CFG_FILE_CAMERA_FEATURE_REC_TOTAL 3
+#define CFG_FILE_CAMERA_GEOMETRY_REC_TOTAL 3
+#define CFG_FILE_CAMERA_PLINE_REC_TOTAL 3
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File_Max_Size.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File_Max_Size.h
new file mode 100644
index 0000000..4aa1827
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Camera_File_Max_Size.h
@@ -0,0 +1,23 @@
+#ifndef __CFG_CAMERA_FILE_MAX_SIZE_H__
+#define __CFG_CAMERA_FILE_MAX_SIZE_H__
+
+#define MAXIMUM_NVRAM_CAMERA_DEFECT_FILE_SIZE (5120) //BYTE 81920
+
+
+#define MAXIMUM_NVRAM_CAMERA_ISP_FILE_SIZE (143360) // 140K bytes
+#define MAXIMUM_NVRAM_CAMERA_3A_FILE_SIZE (25600) // 25K bytes
+#define MAXIMUM_NVRAM_CAMERA_SENSOR_FILE_SIZE (4096)
+#define MAXIMUM_NVRAM_CAMERA_LENS_FILE_SIZE (16384)
+#define MAXIMUM_NVRAM_CAMERA_VERSION_FILE_SIZE (80)
+#define MAXIMUM_NVRAM_CAMERA_FEATURE_FILE_SIZE (5120)
+#define MAXIMUM_NVRAM_CAMERA_GEOMETRY_FILE_SIZE (100)
+
+#define MAXIMUM_NVRAM_CAMERA_PLINE_FILE_SIZE (90000)
+#define MAXIMUM_NVRAM_CAMERA_SHADING_FILE_SIZE (90000) //BYTE 81920--> 16000 for meta tool limitation
+
+#define MAXIMUM_CAMERA_SHADING_SIZE (1050652)
+#define MAXIMUM_CAMERA_PLINE_SIZE (900000)
+
+#define MAXIMUM_NVRAM_CAMERA_PARA_FILE_SIZE MAXIMUM_NVRAM_CAMERA_ISP_FILE_SIZE
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Custom1_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Custom1_File.h
new file mode 100644
index 0000000..8d8a6b8
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Custom1_File.h
@@ -0,0 +1,12 @@
+#ifndef _CFG_CUSTOM1_FILE_H
+#define _CFG_CUSTOM1_FILE_H
+
+typedef struct
+{
+ unsigned int Array[1];
+}File_Custom1_Struct;
+
+#define CFG_FILE_CUSTOM1_REC_SIZE sizeof(File_Custom1_Struct)
+#define CFG_FILE_CUSTOM1_REC_TOTAL 1
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_EXT_MDTYPE_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_EXT_MDTYPE_File.h
new file mode 100644
index 0000000..b2c0813
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_EXT_MDTYPE_File.h
@@ -0,0 +1,77 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2012
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_EXT_MDTYPE_Default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * EXT Modem Type Structure headerfile.
+ *
+ * Author:
+ * -------
+ * AP Wang (mtk05304)
+ *
+ *
+ * ==========================================================================
+ * $Log$
+ ****************************************************************************/
+#ifndef _CFG_EXT_MDFILE_D_H
+#define _CFG_EXT_MDFILE_D_H
+
+
+// the record structure define of md type nvram file
+typedef struct
+{
+
+ unsigned int md_id;
+ unsigned int md_type;
+
+} ext_md_type_struct;
+
+
+//the record size and number of md type nvram file
+#define CFG_FILE_EXT_MDTYPE_CONFIG_SIZE sizeof(ext_md_type_struct)
+#define CFG_FILE_EXT_MDTYPE_CONFIG_TOTAL 1
+
+#endif /* _CFG_MDTYPE_FILE_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_FACTORY_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_FACTORY_File.h
new file mode 100644
index 0000000..6fa96cf
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_FACTORY_File.h
@@ -0,0 +1,112 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_FACTORY_FILE.h
+ *
+ * Project:
+ * --------
+ * YUSU
+ *
+ * Description:
+ * ------------
+ * Hheader file of FACTORY CFG file
+ *
+ * Author:
+ * -------
+ * MTK02528(Koshi Chiu)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_FACTORY_FILE_H
+#define _CFG_FACTORY_FILE_H
+
+
+///define meta nvram record
+typedef struct
+{
+// UINT32 rf_calabrated;
+ unsigned int rf_calabrated;
+} FACTORY_CFG_Struct;
+
+//please define it according to your module
+#define CFG_FILE_FACTORY_REC_SIZE sizeof(FACTORY_CFG_Struct)
+#define CFG_FILE_FACTORY_REC_TOTAL 1
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_GPS_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_GPS_File.h
new file mode 100644
index 0000000..3527110
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_GPS_File.h
@@ -0,0 +1,96 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_gps_file.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Mike Chang(MTK02063)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 24 2010 yunchang.chang
+ * [ALPS00002677][Need Patch] [Volunteer Patch] ALPS.10X.W10.26 Volunteer patch for GPS customization use NVRam
+ * .
+ *
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_GPS_FILE_H
+#define _CFG_GPS_FILE_H
+
+
+// the record structure define of bt nvram file
+typedef struct
+{
+ char dsp_dev[20];
+ unsigned char gps_if_type;
+
+ unsigned int gps_tcxo_hz;
+ unsigned int gps_tcxo_ppb;
+ unsigned char gps_tcxo_type;
+
+ unsigned char gps_lna_mode;
+
+ unsigned char gps_sbas_mode;
+ unsigned int C0;
+ unsigned int C1;
+ unsigned int initU;
+ unsigned int lastU;
+} ap_nvram_gps_config_struct;
+
+
+//the record size and number of bt nvram file
+#define CFG_FILE_GPS_CONFIG_SIZE sizeof(ap_nvram_gps_config_struct)
+#define CFG_FILE_GPS_CONFIG_TOTAL 1
+
+#endif /* _CFG_GPS_FILE_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_HWMON_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_HWMON_File.h
new file mode 100644
index 0000000..532b55d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_HWMON_File.h
@@ -0,0 +1,137 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN HWMON_ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_HWMON_FILE.h
+ *
+ * Project:
+ * --------
+ * YUSU
+ *
+ * Description:
+ * ------------
+ * Hheader file of HWMON(all HW sensor) CFG file
+ *
+ * Author:
+ * -------
+ * MTK02404(MingHsien Hsieh)
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_HWMON_FILE_H
+#define _CFG_HWMON_FILE_H
+/********************************************************************************
+ * Accelerometer
+ *******************************************************************************/
+#define C_HWMON_ACC_AXES 3
+/*-----------------------------------------------------------------------------*/
+typedef struct
+{
+ int offset[C_HWMON_ACC_AXES];
+} NVRAM_HWMON_ACC_STRUCT;
+/*-----------------------------------------------------------------------------*/
+#define CFG_FILE_HWMON_ACC_REC_SIZE sizeof(NVRAM_HWMON_ACC_STRUCT)
+#define CFG_FILE_HWMON_ACC_REC_TOTAL 1
+/*-----------------------------------------------------------------------------*/
+
+/********************************************************************************
+ * Gyroscope
+ *******************************************************************************/
+#define C_HWMON_GYRO_AXES 3
+/*-----------------------------------------------------------------------------*/
+typedef struct
+{
+ int offset[C_HWMON_GYRO_AXES];
+} NVRAM_HWMON_GYRO_STRUCT;
+/*-----------------------------------------------------------------------------*/
+#define CFG_FILE_HWMON_GYRO_REC_SIZE sizeof(NVRAM_HWMON_GYRO_STRUCT)
+#define CFG_FILE_HWMON_GYRO_REC_TOTAL 1
+/*-----------------------------------------------------------------------------*/
+/********************************************************************************
+ * ALSPS
+ *******************************************************************************/
+#define C_HWMON_ALSPS_AXES 3
+/*-----------------------------------------------------------------------------*/
+typedef struct
+{
+ int ps_cali[C_HWMON_ALSPS_AXES];
+} NVRAM_HWMON_PS_STRUCT;
+/*-----------------------------------------------------------------------------*/
+#define CFG_FILE_HWMON_PS_REC_SIZE sizeof(NVRAM_HWMON_PS_STRUCT)
+#define CFG_FILE_HWMON_PS_REC_TOTAL 1
+/*-----------------------------------------------------------------------------*/
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDMODE_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDMODE_File.h
new file mode 100644
index 0000000..ece762f
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDMODE_File.h
@@ -0,0 +1,113 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_MDMODE_File.h
+ *
+ * Project:
+ * --------
+ * MiFi
+ *
+ * Description:
+ * ------------
+ * header file of MD Mode CFG file
+ *
+ * Author:
+ * -------
+ * MTK02065(Shane Chang)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_MDMODE_FILE_H
+#define _CFG_MDMODE_FILE_H
+
+
+
+// the record structure define of MD mode nvram file
+typedef struct
+{
+ char type[3]; /* TDD / FDD */
+}MDMODE_CFG_Struct;
+
+///please define it according to your module
+#define CFG_FILE_MDMODE_REC_SIZE sizeof(MDMODE_CFG_Struct)
+#define CFG_FILE_MDMODE_REC_TOTAL 1
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDTYPE_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDTYPE_File.h
new file mode 100644
index 0000000..41ade22
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MDTYPE_File.h
@@ -0,0 +1,81 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_mdtype_file.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Haow Wang(MTK81183)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_MDTYPE_FILE_H
+#define _CFG_MDTYPE_FILE_H
+
+
+// the record structure define of md type nvram file
+typedef struct
+{
+
+ unsigned int md_type;
+
+} md_type_struct;
+
+
+//the record size and number of md type nvram file
+#define CFG_FILE_MDTYPE_CONFIG_SIZE sizeof(md_type_struct)
+#define CFG_FILE_MDTYPE_CONFIG_TOTAL 1
+
+#endif /* _CFG_MDTYPE_FILE_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MD_SBP_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MD_SBP_File.h
new file mode 100644
index 0000000..fe582a2
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_MD_SBP_File.h
@@ -0,0 +1,82 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_MD_SBP_FILE.h
+ *
+ * Project:
+ * --------
+ * KK
+ *
+ * Description:
+ * ------------
+ * header file of md SBP config struct
+ *
+ * Author:
+ * -------
+ * Jue Zhou (mtk80024)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_MD_SBP_FILE_H
+#define _CFG_MD_SBP_FILE_H
+
+#define SBP_FLAG_UPDATED 1 // updated, need not send to md, 0: the latest setting, need update
+// SBP: Single Binary Platfor, used for modem customization
+typedef struct
+{
+ unsigned int md_sbp_code; // bit defined by modem;
+ unsigned int flag_updated; // 0: not updated, needn't send to md, 1:updated, need send to md
+ unsigned int md2_sbp_code; // bit defined by modem 2;
+ unsigned int flag2_updated; // 0: not updated, needn't send to md, 1:updated, need send to md
+ unsigned int md3_sbp_code; // bit defined by modem 3;
+ unsigned int flag3_updated; // 0: not updated, needn't send to md, 1:updated, need send to md
+} MD_SBP_Struct;
+
+#define CFG_FILE_MD_SBP_CONFIG_SIZE sizeof(MD_SBP_Struct)
+#define CFG_FILE_MD_SBP_CONFIG_TOTAL 1
+
+#endif // _CFG_MD_SBP_FILE_H
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_META_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_META_File.h
new file mode 100644
index 0000000..700ca62
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_META_File.h
@@ -0,0 +1,127 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_META_FILE.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of META CFG file
+ *
+ * Author:
+ * -------
+ * MTK80306(Ning Feng)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_META_FILE_H
+#define _CFG_META_FILE_H
+
+
+///define meta nvram record
+typedef struct
+{
+ char cComPort[20];
+ char cLogPort[20];
+ unsigned int iCombps;
+ unsigned int iLogbps;
+ unsigned int bLogEnable;
+
+} META_CFG_Struct;
+
+//buad rate define
+#define BUD_4800 4800
+#define BUD_9600 9600
+#define BUD_19200 19200
+#define BUD_38400 38400
+#define BUD_57600 57600
+#define BUD_115200 115200
+#define BUD_230400 230400
+#define BUD_460800 460800
+#define BUD_921600 921600
+
+///please define it according to your module
+#define CFG_FILE_META_REC_SIZE sizeof(META_CFG_Struct)
+#define CFG_FILE_META_REC_TOTAL 1
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_OMADMUSB_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_OMADMUSB_File.h
new file mode 100644
index 0000000..8cc7166
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_OMADMUSB_File.h
@@ -0,0 +1,116 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_OMADMUSB_File.h
+ *
+ * Project:
+ * --------
+ * YUSU
+ *
+ * Description:
+ * ------------
+ * header file of OMADMUSB CFG file
+ *
+ * Author:
+ * -------
+ * MTK80863(Hao Lin)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_OMADMUSB_FILE_H
+#define _CFG_OMADMUSB_FILE_H
+
+
+
+// the record structure define of OMADM USB nvram file
+typedef struct
+{
+ int iIsEnable;
+ int iUsb;
+ int iAdb;
+ int iRndis;
+}OMADMUSB_CFG_Struct;
+
+///please define it according to your module
+#define CFG_FILE_OMADMUSB_REC_SIZE sizeof(OMADMUSB_CFG_Struct)
+#define CFG_FILE_OMADMUSB_REC_TOTAL 1
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_PRODUCT_INFO_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_PRODUCT_INFO_File.h
new file mode 100644
index 0000000..1f2e100
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_PRODUCT_INFO_File.h
@@ -0,0 +1,83 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_PRODUCT_INFO_File.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Yuchi Xu(MTK81073)
+ *
+ *------------------------------------------------------------------------------
+ *
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_PRODUCT_INFO_FILE_H
+#define _CFG_PRODUCT_INFO_FILE_H
+
+
+// the record structure define of PRODUCT_INFO nvram file
+typedef struct
+{
+ unsigned char imei[8];
+ unsigned char svn;
+ unsigned char pad;
+} nvram_ef_imei_imeisv_struct;
+
+typedef struct{
+ unsigned char barcode[64];
+ nvram_ef_imei_imeisv_struct IMEI[4];
+ unsigned char reserved[1024-40-64];
+}PRODUCT_INFO;
+
+//the record size and number of PRODUCT_INFO nvram file
+#define CFG_FILE_PRODUCT_INFO_SIZE sizeof(PRODUCT_INFO)
+#define CFG_FILE_PRODUCT_INFO_TOTAL 1
+
+#endif /* _CFG_PRODUCT_INFO_FILE_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SDIO_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SDIO_File.h
new file mode 100644
index 0000000..3cfe712
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SDIO_File.h
@@ -0,0 +1,81 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_sdio_file.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Juju sung(MTK04314)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_SDIO_FILE_H
+#define _CFG_SDIO_FILE_H
+
+
+// the record structure define of bt nvram file
+typedef struct
+{
+ unsigned char file_count;
+ unsigned char id[19];
+ unsigned int file_length[19];
+ char data[3998];
+} ap_nvram_sdio_config_struct;
+
+
+//the record size and number of bt nvram file
+#define CFG_FILE_SDIO_CONFIG_SIZE sizeof(ap_nvram_sdio_config_struct)
+#define CFG_FILE_SDIO_CONFIG_TOTAL 1
+
+#endif /* _CFG_GPS_FILE_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SIM_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SIM_File.h
new file mode 100644
index 0000000..91d7d31
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_SIM_File.h
@@ -0,0 +1,115 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_SIM_FILE.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of SIM config struct
+ *
+ * Author:
+ * -------
+ * Liwen Chang (MTK02556)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * mtk02556
+ * [DUMA00128675] [NVRAM] Add NVRAM SIM struct
+ * NVRAM SIM new struct add
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_SIM_FILE_H
+#define _CFG_SIM_FILE_H
+
+typedef struct
+{
+ unsigned char sim2_ctl_flag;//0: AP side control, 1: MD side control;
+}ap_nvram_sim_config_struct;
+
+#define CFG_FILE_SIM_CONFIG_SIZE sizeof(ap_nvram_sim_config_struct)
+#define CFG_FILE_SIM_CONFIG_TOTAL 1
+
+#endif// _CFG_SIM_FILE_H
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UART_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UART_File.h
new file mode 100644
index 0000000..5b5d2e0
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UART_File.h
@@ -0,0 +1,126 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_uart_file.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of UART config struct
+ *
+ * Author:
+ * -------
+ * LiChunhui (MTK80143)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * Mar 24 2009 mtk80143
+ * [DUMA00112375] [uart] UART EM mode
+ * Add for UART EM mode
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _CFG_UART_FILE_H
+#define _CFG_UART_FILE_H
+
+
+#if 1 //defined (__MT6516_AP__)
+ #define UART_TOTAL_NUM 0x04
+#elif defined (__TK6516_AP__)
+ #define UART_TOTAL_NUM 0x03
+#endif
+
+typedef struct
+{
+ unsigned char uart_ctl_flag[UART_TOTAL_NUM];//0: AP side control, 1: MD side control;
+ //uart_ctl_flag[0]<->UART1
+ //uart_ctl_flag[1]<->UART2
+ //uart_ctl_flag[2]<->UART3
+ //........................
+}ap_nvram_uart_config_struct;
+
+#define CFG_FILE_UART_CONFIG_SIZE sizeof(ap_nvram_uart_config_struct)
+#define CFG_FILE_UART_CONFIG_TOTAL 1
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UUID_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UUID_File.h
new file mode 100644
index 0000000..cacbe5b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_UUID_File.h
@@ -0,0 +1,114 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_UUID_File.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of UUID CFG file
+ *
+ * Author:
+ * -------
+ * MTK02556(Liwen Chang)
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef _CFG_UUID_FILE_H
+#define _CFG_UUID_FILE_H
+
+
+
+// the record structure define of adc nvram file
+typedef struct
+{
+ // UINT32 uid[2];
+ unsigned int uid[2];
+} NVRAM_UUID_STRUCT;
+
+///please define it according to your module
+#define CFG_FILE_UUID_REC_SIZE sizeof(NVRAM_UUID_STRUCT)
+#define CFG_FILE_UUID_REC_TOTAL 1
+
+
+#endif //_CFG_UUID_FILE_H
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Wifi_File.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Wifi_File.h
new file mode 100644
index 0000000..055ff57
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/cfgfileinc/CFG_Wifi_File.h
@@ -0,0 +1,293 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_wifi_file.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Ning.F (MTK08139) 09/11/2008
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 09 22 2011 cp.wu
+ * [ALPS00070736] MT6573¤W±ªº Wifi ©w¨î¤Æ»Ý¨D
+ * add fields for Wi-Fi regularity domain control.
+ *
+ * 05 27 2011 cp.wu
+ * [ALPS00050349] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM
+ * change size of reserved fields.
+ *
+ * 05 26 2011 cp.wu
+ * [ALPS00050349] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi][Driver] Add band edge tx power control to Wi-Fi NVRAM
+ * update Wi-Fi NVRAM definition for band edge tx power control.
+ *
+ * 04 19 2011 cp.wu
+ * [ALPS00041285] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi] Merge MT6620 Wi-Fi into mt6575_evb project
+ * 1. update init.rc for normal boot/meta/factory for MT6620 Wi-Fi related part.
+ * 2. update NVRAM structure definition and default value for MT6620 Wi-Fi
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ * Jul 9 2009 mtk80306
+ * [DUMA00122953] optimize nvram and change meta clean boot flag.
+ * modify wifi str
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 9 2009 mtk80306
+ * [DUMA00111088] nvram customization
+ * change wifi cmd structure.
+ *
+ * Dec 17 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Dec 8 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Nov 24 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Oct 29 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+
+#ifndef _CFG_WIFI_FILE_H
+#define _CFG_WIFI_FILE_H
+
+// the record structure define of wifi nvram file
+/*******************************************************************************
+* C O M P I L E R F L A G S
+********************************************************************************
+*/
+
+/*******************************************************************************
+* E X T E R N A L R E F E R E N C E S
+********************************************************************************
+*/
+
+/*******************************************************************************
+* C O N S T A N T S
+********************************************************************************
+*/
+
+/*******************************************************************************
+* D A T A T Y P E S
+********************************************************************************
+*/
+typedef signed char INT_8, *PINT_8, **PPINT_8;
+typedef unsigned char UINT_8, *PUINT_8, **PPUINT_8, *P_UINT_8;
+typedef unsigned short UINT_16, *PUINT_16, **PPUINT_16;
+typedef unsigned int UINT_32, *PUINT_32, **PPUINT_32;
+
+
+/*******************************************************************************
+* P U B L I C D A T A
+********************************************************************************
+*/
+// duplicated from nic_cmd_event.h to avoid header dependency
+typedef struct _TX_PWR_PARAM_T {
+ INT_8 cTxPwr2G4Cck; /* signed, in unit of 0.5dBm */
+#if defined(MT6620)
+ INT_8 acReserved[3];
+#else/*For MT6628 and later chip*/
+ INT_8 cTxPwr2G4Dsss; /* signed, in unit of 0.5dBm */
+ INT_8 acReserved[2];
+#endif
+
+ INT_8 cTxPwr2G4OFDM_BPSK;
+ INT_8 cTxPwr2G4OFDM_QPSK;
+ INT_8 cTxPwr2G4OFDM_16QAM;
+ INT_8 cTxPwr2G4OFDM_Reserved;
+ INT_8 cTxPwr2G4OFDM_48Mbps;
+ INT_8 cTxPwr2G4OFDM_54Mbps;
+
+ INT_8 cTxPwr2G4HT20_BPSK;
+ INT_8 cTxPwr2G4HT20_QPSK;
+ INT_8 cTxPwr2G4HT20_16QAM;
+ INT_8 cTxPwr2G4HT20_MCS5;
+ INT_8 cTxPwr2G4HT20_MCS6;
+ INT_8 cTxPwr2G4HT20_MCS7;
+
+ INT_8 cTxPwr2G4HT40_BPSK;
+ INT_8 cTxPwr2G4HT40_QPSK;
+ INT_8 cTxPwr2G4HT40_16QAM;
+ INT_8 cTxPwr2G4HT40_MCS5;
+ INT_8 cTxPwr2G4HT40_MCS6;
+ INT_8 cTxPwr2G4HT40_MCS7;
+
+ INT_8 cTxPwr5GOFDM_BPSK;
+ INT_8 cTxPwr5GOFDM_QPSK;
+ INT_8 cTxPwr5GOFDM_16QAM;
+ INT_8 cTxPwr5GOFDM_Reserved;
+ INT_8 cTxPwr5GOFDM_48Mbps;
+ INT_8 cTxPwr5GOFDM_54Mbps;
+
+ INT_8 cTxPwr5GHT20_BPSK;
+ INT_8 cTxPwr5GHT20_QPSK;
+ INT_8 cTxPwr5GHT20_16QAM;
+ INT_8 cTxPwr5GHT20_MCS5;
+ INT_8 cTxPwr5GHT20_MCS6;
+ INT_8 cTxPwr5GHT20_MCS7;
+
+ INT_8 cTxPwr5GHT40_BPSK;
+ INT_8 cTxPwr5GHT40_QPSK;
+ INT_8 cTxPwr5GHT40_16QAM;
+ INT_8 cTxPwr5GHT40_MCS5;
+ INT_8 cTxPwr5GHT40_MCS6;
+ INT_8 cTxPwr5GHT40_MCS7;
+} TX_PWR_PARAM_T, *P_TX_PWR_PARAM_T;
+
+typedef struct _PWR_5G_OFFSET_T {
+ INT_8 cOffsetBand0; /* 4.915-4.980G */
+ INT_8 cOffsetBand1; /* 5.000-5.080G */
+ INT_8 cOffsetBand2; /* 5.160-5.180G */
+ INT_8 cOffsetBand3; /* 5.200-5.280G */
+ INT_8 cOffsetBand4; /* 5.300-5.340G */
+ INT_8 cOffsetBand5; /* 5.500-5.580G */
+ INT_8 cOffsetBand6; /* 5.600-5.680G */
+ INT_8 cOffsetBand7; /* 5.700-5.825G */
+} PWR_5G_OFFSET_T, *P_PWR_5G_OFFSET_T;
+
+typedef struct _PWR_PARAM_T {
+ UINT_32 au4Data[28];
+ UINT_32 u4RefValue1;
+ UINT_32 u4RefValue2;
+} PWR_PARAM_T, *P_PWR_PARAM_T;
+
+typedef struct _MT6620_CFG_PARAM_STRUCT {
+ /* 256 bytes of MP data */
+ UINT_16 u2Part1OwnVersion;
+ UINT_16 u2Part1PeerVersion;
+ UINT_8 aucMacAddress[6];
+ UINT_8 aucCountryCode[2];
+ TX_PWR_PARAM_T rTxPwr;
+ UINT_8 aucEFUSE[144];
+ UINT_8 ucTxPwrValid;
+ UINT_8 ucSupport5GBand;
+ UINT_8 fg2G4BandEdgePwrUsed;
+ INT_8 cBandEdgeMaxPwrCCK;
+ INT_8 cBandEdgeMaxPwrOFDM20;
+ INT_8 cBandEdgeMaxPwrOFDM40;
+
+ UINT_8 ucRegChannelListMap;
+ UINT_8 ucRegChannelListIndex;
+ UINT_8 aucRegSubbandInfo[36];
+ UINT_8 ucDefaultTestMode;
+ UINT_8 aucReserved2[256-241];
+
+ /* 256 bytes of function data */
+ UINT_16 u2Part2OwnVersion;
+ UINT_16 u2Part2PeerVersion;
+ UINT_8 uc2G4BwFixed20M;
+ UINT_8 uc5GBwFixed20M;
+ UINT_8 ucEnable5GBand;
+ UINT_8 aucPreTailReserved;
+ UINT_8 aucTailReserved[256-8];
+} MT6620_CFG_PARAM_STRUCT, *P_MT6620_CFG_PARAM_STRUCT,
+ WIFI_CFG_PARAM_STRUCT, *P_WIFI_CFG_PARAM_STRUCT;
+
+typedef struct _WIFI_CUSTOM_PARAM_STRUCT
+{
+ UINT_32 u4Resv; /* Reserved */
+} WIFI_CUSTOM_PARAM_STRUCT;
+
+
+
+/*******************************************************************************
+* P R I V A T E D A T A
+********************************************************************************
+*/
+
+/*******************************************************************************
+* M A C R O S
+********************************************************************************
+*/
+#define CFG_FILE_WIFI_REC_SIZE sizeof(WIFI_CFG_PARAM_STRUCT)
+#define CFG_FILE_WIFI_REC_TOTAL 1
+
+#define CFG_FILE_WIFI_CUSTOM_REC_SIZE sizeof(WIFI_CUSTOM_PARAM_STRUCT)
+#define CFG_FILE_WIFI_CUSTOM_REC_TOTAL 1
+
+/*******************************************************************************
+* F U N C T I O N D E C L A R A T I O N S
+********************************************************************************
+*/
+
+/*******************************************************************************
+* F U N C T I O N S
+********************************************************************************
+*/
+
+
+#endif
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~3.H b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~3.H
new file mode 100644
index 0000000..d88af89
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~3.H
@@ -0,0 +1,42 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+#include "../cfgdefault/CFG_UART_Config_Default.h"
+#include "../cfgdefault/CFG_BT_Default.h"
+#include "../cfgdefault/CFG_SIM_CONFIG_Default.h"
+#include "../cfgdefault/CFG_ADC_Default.h"
+#include "../cfgdefault/CFG_BWCS_Default.h"
+#include "../cfgdefault/CFG_Audio_Default.h"
+#include "../cfgdefault/CFG_OMADMUSB_Default.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~4.H b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~4.H
new file mode 100644
index 0000000..46d8430
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_MO~4.H
@@ -0,0 +1,47 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+#include "../cfgfileinc/CFG_FACTORY_File.h"
+#include "../cfgfileinc/CFG_BT_File.h"
+#include "../cfgfileinc/CFG_BWCS_File.h"
+#include "../cfgfileinc/CFG_Camera_File.h"
+#include "../cfgfileinc/CFG_UART_File.h"
+#include "../cfgfileinc/CFG_META_File.h"
+#include "../cfgfileinc/CFG_SIM_File.h"
+#include "../cfgfileinc/CFG_ADC_File.h"
+#include "../cfgfileinc/CFG_HWMON_File.h"
+#include "../cfgfileinc/CFG_UUID_File.h"
+#include "../cfgfileinc/CFG_AUDIO_File.h"
+#include "../cfgfileinc/CFG_OMADMUSB_File.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info.h
new file mode 100644
index 0000000..4ebd8de
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info.h
@@ -0,0 +1,163 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_file_info.c
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * Configuration File List
+ *
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ ****************************************************************************/
+
+#ifndef __CFG_FILE_INFO_H__
+#define __CFG_FILE_INFO_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/*
+#include "CFG_file_public.h"
+#include "CFG_file_lid.h"
+#include "CFG_module_file.h"
+#include "CFG_module_default.h"
+
+const TCFG_FILE g_akCFG_File[]=
+{
+ //nvram version information
+ { "/nvram/APCFG/APRDCL/FILE_VER", VER(AP_CFG_FILE_VER_INFO_LID), 4,
+ CFG_FILE_VER_FILE_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDEB/BT_Addr", VER(AP_CFG_RDEB_FILE_BT_ADDR_LID), CFG_FILE_BT_ADDR_REC_SIZE,
+ CFG_FILE_BT_ADDR_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stBtDefault},
+
+ { "/nvram/APCFG/APRDEB/WIFI", VER(AP_CFG_RDEB_FILE_WIFI_LID), CFG_FILE_WIFI_REC_SIZE,
+ CFG_FILE_WIFI_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCfgDefault},
+
+ { "/nvram/APCFG/APRDCL/AUXADC", VER(AP_CFG_RDCL_FILE_AUXADC_LID), CFG_FILE_AUXADC_REC_SIZE,
+ CFG_FILE_AUXADC_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stADCDefualt},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_Para", VER(AP_CFG_RDCL_CAMERA_PARA_LID), CFG_FILE_CAMERA_PARA_REC_SIZE,
+ CFG_FILE_CAMERA_PARA_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_3A", VER(AP_CFG_RDCL_CAMERA_3A_LID), CFG_FILE_CAMERA_3A_REC_SIZE,
+ CFG_FILE_CAMERA_3A_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_SHADING", VER(AP_CFG_RDCL_CAMERA_SHADING_LID),CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_DEFECT", VER(AP_CFG_RDCL_CAMERA_DEFECT_LID), CFG_FILE_CAMERA_DEFECT_REC_SIZE,
+ CFG_FILE_CAMERA_DEFECT_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_SENSOR", VER(AP_CFG_RDCL_CAMERA_SENSOR_LID), CFG_FILE_CAMERA_SENSOR_REC_SIZE,
+ CFG_FILE_CAMERA_SENSOR_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/CAMERA_LENS", VER(AP_CFG_RDCL_CAMERA_LENS_LID), CFG_FILE_CAMERA_LENS_REC_SIZE,
+ CFG_FILE_CAMERA_LENS_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/UART", VER(AP_CFG_RDCL_UART_LID), CFG_FILE_UART_CONFIG_SIZE,
+ CFG_FILE_UART_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stUARTConfigDefault},
+
+ { "/nvram/APCFG/APRDCL/FACTORY", VER(AP_CFG_RDCL_FACTORY_LID), CFG_FILE_FACTORY_REC_SIZE,
+ CFG_FILE_FACTORY_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDCL/BWCS", VER(AP_CFG_RDCL_BWCS_LID), CFG_FILE_BWCS_CONFIG_SIZE,
+ CFG_FILE_BWCS_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stBWCSConfigDefault},
+
+ { "/nvram/APCFG/APRDCL/HWMON_ACC", VER(AP_CFG_RDCL_HWMON_ACC_LID), CFG_FILE_HWMON_ACC_REC_SIZE,
+ CFG_FILE_HWMON_ACC_REC_TOTAL, DEFAULT_ZERO, 0},
+
+ { "/nvram/APCFG/APRDEB/WIFI_CUSTOM", VER(AP_CFG_RDEB_WIFI_CUSTOM_LID), CFG_FILE_WIFI_CUSTOM_REC_SIZE,
+ CFG_FILE_WIFI_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCustomDefault},
+};
+const int g_i4CFG_File_Count = sizeof(g_akCFG_File)/sizeof(TCFG_FILE);
+
+extern const TCFG_FILE g_akCFG_File[];
+
+extern const int g_i4CFG_File_Count;
+*/
+const TCFG_FILE g_akCFG_File[];
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info_custom.h
new file mode 100644
index 0000000..04165a8
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_info_custom.h
@@ -0,0 +1,196 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_file_info_custom.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * Configuration File List for Customer
+ *
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ ****************************************************************************/
+
+#ifndef __CFG_FILE_INFO_CUSTOM_H__
+#define __CFG_FILE_INFO_CUSTOM_H__
+
+#include "CFG_file_public.h"
+#include "CFG_file_lid.h"
+#include "Custom_NvRam_LID.h"
+//#include "../../../custom/common/cgen/cfgfileinc/CFG_AUDIO_File.h"
+//#include "../../../custom/common/cgen/cfgdefault/CFG_Audio_Default.h"
+#include "../cfgfileinc/CFG_AUDIO_File.h"
+#include "../cfgdefault/CFG_Audio_Default.h"
+#include "../cfgfileinc/CFG_GPS_File.h"
+#include "../cfgdefault/CFG_GPS_Default.h"
+#include "../cfgfileinc/CFG_Wifi_File.h"
+#include "../cfgdefault/CFG_WIFI_Default.h"
+#include "../cfgfileinc/CFG_PRODUCT_INFO_File.h"
+#include "../cfgdefault/CFG_PRODUCT_INFO_Default.h"
+#include <stdio.h>
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ const TCFG_FILE g_akCFG_File_Custom[]=
+ {
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Sph", VER(AP_CFG_RDCL_FILE_AUDIO_LID), CFG_FILE_SPEECH_REC_SIZE,
+ CFG_FILE_SPEECH_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&speech_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/GPS", VER(AP_CFG_CUSTOM_FILE_GPS_LID), CFG_FILE_GPS_CONFIG_SIZE,
+ CFG_FILE_GPS_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stGPSConfigDefault, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_CompFlt", VER(AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID), CFG_FILE_AUDIO_COMPFLT_REC_SIZE,
+ CFG_FILE_AUDIO_COMPFLT_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Effect", VER(AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID), CFG_FILE_AUDIO_EFFECT_REC_SIZE,
+ CFG_FILE_AUDIO_EFFECT_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_effect_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI", VER(AP_CFG_RDEB_FILE_WIFI_LID), CFG_FILE_WIFI_REC_SIZE,
+ CFG_FILE_WIFI_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCfgDefault, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI_CUSTOM", VER(AP_CFG_RDEB_WIFI_CUSTOM_LID), CFG_FILE_WIFI_CUSTOM_REC_SIZE,
+ CFG_FILE_WIFI_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCustomDefault, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Sph_Med", VER(AP_CFG_RDCL_FILE_AUDIO_PARAM_MED_LID), CFG_FILE_AUDIO_PARAM_MED_REC_SIZE,
+ CFG_FILE_AUDIO_PARAM_MED_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_param_med_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Vol_custom", VER(AP_CFG_RDCL_FILE_AUDIO_VOLUME_CUSTOM_LID), CFG_FILE_AUDIO_VOLUME_CUSTOM_REC_SIZE,
+ CFG_FILE_AUDIO_VOLUME_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_volume_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Sph_Dual_Mic", VER(AP_CFG_RDCL_FILE_DUAL_MIC_CUSTOM_LID), CFG_FILE_SPEECH_DUAL_MIC_SIZE,
+ CFG_FILE_SPEECH_DUAL_MIC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&dual_mic_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Wb_Sph", VER(AP_CFG_RDCL_FILE_AUDIO_WB_PARAM_LID), CFG_FILE_WB_SPEECH_REC_SIZE,
+ CFG_FILE_WB_SPEECH_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&wb_speech_custom_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/PRODUCT_INFO", VER(AP_CFG_REEB_PRODUCT_INFO_LID), CFG_FILE_PRODUCT_INFO_SIZE,
+ CFG_FILE_PRODUCT_INFO_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stPRODUCT_INFOConfigDefault,DataReset, NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Headphone_CompFlt", VER(AP_CFG_RDCL_FILE_HEADPHONE_COMPFLT_LID), CFG_FILE_AUDIO_COMPFLT_REC_SIZE,
+ CFG_FILE_HEADPHONE_COMPFLT_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_hcf_custom_default, DataReset , NULL
+ },
+
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_gain_table", VER(AP_CFG_RDCL_FILE_AUDIO_GAIN_TABLE_LID), CFG_FILE_AUDIO_GAIN_TABLE_CUSTOM_REC_SIZE,
+ CFG_FILE_AUDIO_GAIN_TABLE_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Gain_control_table_default, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_ver1_Vol_custom", VER(AP_CFG_RDCL_FILE_AUDIO_VER1_VOLUME_CUSTOM_LID), CFG_FILE_AUDIO_VER1_VOLUME_CUSTOM_REC_SIZE,
+ CFG_FILE_AUDIO_VER1_VOLUME_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&audio_ver1_custom_default, DataReset , NULL
+ },
+
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Hd_Record_Param", VER(AP_CFG_RDCL_FILE_AUDIO_HD_REC_PAR_LID), CFG_FILE_AUDIO_HD_REC_PAR_SIZE,
+ CFG_FILE_AUDIO_HD_REC_PAR_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Hd_Recrod_Par_default, DataReset , NULL
+ },
+
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Hd_Record_Scene_Table", VER(AP_CFG_RDCL_FILE_AUDIO_HD_REC_SCENE_LID), CFG_FILE_AUDIO_HD_REC_SCENE_TABLE_SIZE,
+ CFG_FILE_AUDIO_HD_REC_SCENE_TABLE_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Hd_Recrod_Scene_Table_default, DataReset , NULL
+ },
+
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_Buffer_DC_Calibration_Param", VER(AP_CFG_RDCL_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_LID), CFG_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_SIZE,
+ CFG_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Audio_Buffer_DC_Calibration_Par_default, DataReset , NULL
+ },
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/VibSpk_CompFlt", VER(AP_CFG_RDCL_FILE_VIBSPK_COMPFLT_LID), CFG_FILE_AUDIO_COMPFLT_REC_SIZE,
+ CFG_FILE_VIBSPK_COMPFLT_REC_TOTAL, SIGNLE_DEFUALT_REC , (char *)&audio_vibspk_custom_default, DataReset , NULL
+ },
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/MusicDRC_CompFlt", VER(AP_CFG_RDCL_FILE_AUDIO_MUSIC_DRC_LID), CFG_FILE_AUDIO_COMPFLT_REC_SIZE,
+ CFG_FILE_MUSICDRC_COMPFLT_REC_TOTAL, SIGNLE_DEFUALT_REC , (char *)&audio_musicdrc_custom_default, DataReset , NULL
+ },
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/RingToneDRC_CompFlt", VER(AP_CFG_RDCL_FILE_AUDIO_RINGTONE_DRC_LID), CFG_FILE_AUDIO_COMPFLT_REC_SIZE,
+ CFG_FILE_RINGTONEDRC_COMPFLT_REC_TOTAL, SIGNLE_DEFUALT_REC , (char *)&audio_ringtonedrc_custom_default, DataReset , NULL
+ },
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_MAGI_CONFERENCE", VER(AP_CFG_RDCL_FILE_AUDIO_MAGI_CONFERENCE_LID), CFG_FILE_SPEECH_MAGI_CONFERENCE_SIZE,
+ CFG_FILE_SPEECH_MAGI_CONFERENCE_TOTAL, SIGNLE_DEFUALT_REC , (char *)&speech_magi_conference_custom_default, DataReset , NULL
+ },
+ { "/mnt/vendor/nvdata/APCFG/APRDCL/Audio_HAC_Param", VER(AP_CFG_RDCL_FILE_AUDIO_HAC_PARAM_LID), CFG_FILE_SPEECH_HAC_PARAM_SIZE,
+ CFG_FILE_SPEECH_HAC_PARAM_TOTAL, SIGNLE_DEFUALT_REC , (char *)&speech_hac_param_custom_default, DataReset , NULL
+ },
+ };
+
+ int iNvRamFileMaxLID=AP_CFG_CUSTOM_FILE_MAX_LID;
+ extern int iNvRamFileMaxLID;
+ const unsigned int g_i4CFG_File_Custom_Count = sizeof(g_akCFG_File_Custom)/sizeof(TCFG_FILE);
+
+ extern const TCFG_FILE g_akCFG_File_Custom[];
+
+ extern const unsigned int g_i4CFG_File_Custom_Count;
+
+ int iFileWIFILID=AP_CFG_RDEB_FILE_WIFI_LID;
+ extern int iFileWIFILID;
+ int iFileCustomWIFILID=AP_CFG_RDEB_WIFI_CUSTOM_LID;
+ extern int iFileCustomWIFILID;
+ int iFilePRODUCT_INFOLID=AP_CFG_REEB_PRODUCT_INFO_LID;
+ extern int iFilePRODUCT_INFOLID;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_lid.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_lid.h
new file mode 100644
index 0000000..951720c
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_file_lid.h
@@ -0,0 +1,341 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_file_lid.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Ning.F (MTK08139) 09/11/2008
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 12 29 2012 donglei.ji
+ * [ALPS00425279] [Need Patch] [Volunteer Patch] voice ui and password unlock feature check in
+ * voice ui - NVRAM .
+ *
+ * 01 14 2011 hao.lin
+ * [ALPS00138458] [Need Patch] [Volunteer Patch] OMA DM USB and SD format
+ * <saved by Perforce>
+ *
+ * 12 24 2010 hao.lin
+ * [ALPS00138458] [Need Patch] [Volunteer Patch] OMA DM USB and SD format
+ * <saved by Perforce>
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ * 05 05 2010 saker.hsia
+ * [ALPS00001913][BWCS] BT WiFi Single Antenna Feature check in Android 2.1
+ * .
+ *
+ * 04 26 2010 renbang.jiang
+ * [ALPS00005487][Wi-Fi] change Wi-Fi nvram LID
+ * [ALPS00005487] [Wi-Fi] change Wi-Fi nvram LID
+ * .
+ *
+ * mtk02556
+ * [DUMA00128675] [NVRAM] Add NVRAM SIM struct
+ * Add NVRAM SIM LID
+ *
+ * mtk02556
+ * [DUMA00128426] [NVRAM] Reconstrcut ADC struct and add UUID struct
+ * Add NVRAM UUID VER
+ *
+ * Jul 9 2009 mtk80306
+ * [DUMA00122953] optimize nvram and change meta clean boot flag.
+ * modify wifi version
+ *
+ * Apr 29 2009 mtk80306
+ * [DUMA00116080] revise the customization of nvram
+ * revise nvram customization
+ *
+ * Apr 15 2009 mtk80306
+ * [DUMA00204156] Power on_it display start in mobile screen
+ * add uart file
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 15 2009 mtk80306
+ * [DUMA00111629] add camera nvram files
+ * add camera nvram files
+ *
+ * Mar 9 2009 mtk80306
+ * [DUMA00111088] nvram customization
+ * nvram customization
+ *
+ * Feb 23 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ *
+ *
+ * Feb 19 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ * add meta_battery
+ *
+ * Jan 13 2009 mtk80306
+ * [DUMA00107334] add nvram dll code
+ *
+ *
+ * Jan 13 2009 mtk80306
+ * [DUMA00107334] add nvram dll code
+ * add nvram dll code.
+ *
+ * Dec 17 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Dec 8 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Nov 24 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Oct 29 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef CFG_FILE_LID_H
+#define CFG_FILE_LID_H
+
+
+
+#define VER_LID(lid) lid##_VERNO lid
+#define VER(lid) lid##_VERNO
+
+
+/* the definition of file LID */
+typedef enum
+{
+ AP_CFG_FILE_VER_INFO_LID,
+ AP_CFG_RDEB_FILE_BT_ADDR_LID,
+// AP_CFG_RDEB_FILE_WIFI_LID,
+ AP_CFG_RDCL_FILE_AUXADC_LID,
+ AP_CFG_RDCL_CAMERA_PARA_LID,
+ AP_CFG_RDCL_CAMERA_3A_LID,
+ AP_CFG_RDCL_CAMERA_SHADING_LID,
+ AP_CFG_RDCL_CAMERA_DEFECT_LID,
+ AP_CFG_RDCL_CAMERA_SENSOR_LID, //10
+ AP_CFG_RDCL_CAMERA_LENS_LID,
+ AP_CFG_RDCL_UART_LID,
+ //AP_CFG_RDCL_UUID_LID,
+ //AP_CFG_RDCL_SIM_LID,
+ AP_CFG_RDCL_FACTORY_LID,
+ AP_CFG_RDCL_BWCS_LID,
+ AP_CFG_RDCL_HWMON_ACC_LID,
+ AP_CFG_RDCL_HWMON_GYRO_LID,
+// AP_CFG_RDEB_WIFI_CUSTOM_LID,
+ AP_CFG_RDEB_OMADM_USB_LID,
+ AP_CFG_RDCL_FILE_VOICE_RECOGNIZE_PARAM_LID,
+ AP_CFG_RDCL_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_LID,
+ AP_CFG_RDCL_FILE_AUDIO_VOIP_PAR_LID,
+ AP_CFG_RDCL_HWMON_PS_LID,
+ AP_CFG_FILE_MDTYPE_LID,
+ AP_CFG_FILE_EXT_MDTYPE_LID,
+ AP_CFG_RDCL_FILE_SDIO_LID,
+ AP_CFG_RDCL_CAMERA_VERSION_LID,
+ AP_CFG_RDCL_CAMERA_FEATURE_LID,
+ AP_CFG_RDCL_CAMERA_GEOMETRY_LID,
+ AP_CFG_RDCL_FILE_MD_SBP_LID,
+#if (defined MT6752) | (defined MT6795) | (defined MT6735) | (defined MT8163) | (defined MT6580)
+ AP_CFG_RDCL_CAMERA_SHADING2_LID,
+ AP_CFG_RDCL_CAMERA_SHADING3_LID,
+ AP_CFG_RDCL_CAMERA_SHADING4_LID,
+ AP_CFG_RDCL_CAMERA_SHADING5_LID,
+ AP_CFG_RDCL_CAMERA_SHADING6_LID,
+ AP_CFG_RDCL_CAMERA_SHADING7_LID,
+ AP_CFG_RDCL_CAMERA_SHADING8_LID,
+ AP_CFG_RDCL_CAMERA_SHADING9_LID,
+ AP_CFG_RDCL_CAMERA_SHADING10_LID,
+ AP_CFG_RDCL_CAMERA_SHADING11_LID,
+ AP_CFG_RDCL_CAMERA_SHADING12_LID,
+ AP_CFG_RDCL_CAMERA_PLINE_LID,
+ AP_CFG_RDCL_CAMERA_PLINE2_LID,
+ AP_CFG_RDCL_CAMERA_PLINE3_LID,
+ AP_CFG_RDCL_CAMERA_PLINE4_LID,
+ AP_CFG_RDCL_CAMERA_PLINE5_LID,
+ AP_CFG_RDCL_CAMERA_PLINE6_LID,
+ AP_CFG_RDCL_CAMERA_PLINE7_LID,
+ AP_CFG_RDCL_CAMERA_PLINE8_LID,
+ AP_CFG_RDCL_CAMERA_PLINE9_LID,
+ AP_CFG_RDCL_CAMERA_PLINE10_LID,
+ AP_CFG_RDCL_CAMERA_PLINE11_LID,
+ AP_CFG_RDCL_CAMERA_PLINE12_LID,
+#else
+#endif
+ AP_CFG_CUSTOM_BEGIN_LID, ///Max LID.
+}CFG_FILE_LID;
+/*
+int iCustomBeginLID=AP_CFG_CUSTOM_BEGIN_LID;
+extern int iCustomBeginLID;
+int iFileVerInfoLID=AP_CFG_FILE_VER_INFO_LID;
+extern int iFileVerInfoLID;
+int iFileBTAddrLID=AP_CFG_RDEB_FILE_BT_ADDR_LID;
+extern int iFileBTAddrLID;
+
+#if 0
+int iFileWIFILID=AP_CFG_RDEB_FILE_WIFI_LID;
+extern int iFileWIFILID;
+int iFileCustomWIFILID=AP_CFG_RDEB_WIFI_CUSTOM_LID;
+extern int iFileCustomWIFILID;
+#endif
+
+int iFileAuxADCLID=AP_CFG_RDCL_FILE_AUXADC_LID;
+extern int iFileAuxADCLID;
+*/
+////if file num changed, the define of CFG_FILE_VER_FILE_REC_TOTAL should be changed too ///
+#define CFG_FILE_VER_FILE_REC_TOTAL 936
+
+/* verno of data items */
+/* ver file version */
+/* md type file version*/
+#define AP_CFG_FILE_MDTYPE_LID_VERNO "000"
+#define AP_CFG_FILE_EXT_MDTYPE_LID_VERNO "000"
+#define AP_CFG_FILE_VER_INFO_LID_VERNO "000"
+/* BT file version */
+#define AP_CFG_RDEB_FILE_BT_ADDR_LID_VERNO "001"
+/* WIFI file version */
+//#define AP_CFG_RDEB_FILE_WIFI_LID_VERNO "000"
+/* WIFI MAC addr file version */
+//#define AP_CFG_RDCL_FILE_WIFI_ADDR_LID_VERNO "000"
+/* ADC file version */
+#define AP_CFG_RDCL_FILE_AUXADC_LID_VERNO "000"
+
+/* camera nvram files */
+#define AP_CFG_RDCL_CAMERA_PARA_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_3A_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_SHADING_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_DEFECT_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_SENSOR_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_LENS_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_VERSION_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_FEATURE_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_GEOMETRY_LID_VERNO "000"
+#define AP_CFG_RDCL_CAMERA_PLINE_LID_VERNO "000"
+
+#define AP_CFG_RDCL_UART_LID_VERNO "000"
+
+#define AP_CFG_RDCL_UUID_LID_VERNO "000"
+
+#define AP_CFG_RDCL_SIM_LID_VERNO "000"
+
+/* For the factory mode info. used */
+#define AP_CFG_RDCL_FACTORY_LID_VERNO "000"
+
+#define AP_CFG_RDCL_BWCS_LID_VERNO "000"
+
+#define AP_CFG_RDCL_HWMON_ACC_LID_VERNO "000"
+#define AP_CFG_RDCL_HWMON_GYRO_LID_VERNO "000"
+#define AP_CFG_RDCL_HWMON_PS_LID_VERNO "000"
+//#define AP_CFG_RDEB_WIFI_CUSTOM_LID_VERNO "000"
+#define AP_CFG_RDEB_OMADM_USB_LID_VERNO "000"
+#define AP_CFG_RDCL_FILE_VOICE_RECOGNIZE_PARAM_LID_VERNO "000"
+
+/* audio audenh control custom file version*/
+#define AP_CFG_RDCL_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_LID_VERNO "000"
+
+//audio VoIP params custom file version
+#define AP_CFG_RDCL_FILE_AUDIO_VOIP_PAR_LID_VERNO "000"
+/* SDIO file version */
+#define AP_CFG_RDCL_FILE_SDIO_LID_VERNO "001"
+
+/* MD SBP fle version */
+#define AP_CFG_RDCL_FILE_MD_SBP_LID_VERNO "001"
+
+#endif /* CFG_FILE_LID_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_default.h
new file mode 100644
index 0000000..99e158b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_default.h
@@ -0,0 +1,46 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+#include "cfgdefault/CFG_UART_Config_Default.h"
+#include "cfgdefault/CFG_BT_Default.h"
+#include "cfgdefault/CFG_SIM_CONFIG_Default.h"
+#include "cfgdefault/CFG_ADC_Default.h"
+#include "cfgdefault/CFG_BWCS_Default.h"
+#include "cfgdefault/CFG_Audio_Default.h"
+#include "cfgdefault/CFG_OMADMUSB_Default.h"
+#include "cfgdefault/CFG_MDTYPE_Default.h"
+#include "cfgdefault/CFG_EXT_MDTYPE_Default.h"
+#include "cfgdefault/CFG_MD_SBP_Default.h"
+#include "cfgdefault/CFG_SDIO_Default.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_file.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_file.h
new file mode 100644
index 0000000..d2a630e
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/CFG_module_file.h
@@ -0,0 +1,51 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+#include "cfgfileinc/CFG_FACTORY_File.h"
+#include "cfgfileinc/CFG_BT_File.h"
+#include "cfgfileinc/CFG_BWCS_File.h"
+#include "cfgfileinc/CFG_Camera_File.h"
+#include "cfgfileinc/CFG_UART_File.h"
+#include "cfgfileinc/CFG_META_File.h"
+#include "cfgfileinc/CFG_SIM_File.h"
+#include "cfgfileinc/CFG_ADC_File.h"
+#include "cfgfileinc/CFG_HWMON_File.h"
+#include "cfgfileinc/CFG_UUID_File.h"
+#include "cfgfileinc/CFG_AUDIO_File.h"
+#include "cfgfileinc/CFG_OMADMUSB_File.h"
+#include "cfgfileinc/CFG_MDTYPE_File.h"
+#include "cfgfileinc/CFG_EXT_MDTYPE_File.h"
+#include "cfgfileinc/CFG_MD_SBP_File.h"
+#include "cfgfileinc/CFG_SDIO_File.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_LID.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_LID.h
new file mode 100644
index 0000000..3195032
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_LID.h
@@ -0,0 +1,232 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * Custom_NvRam_lid.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of Custom_NvRam_lid
+ *
+ * Author:
+ * -------
+ * Ning.F (MTK08139) 03/09/2009
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 11 12 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 11 05 2010 renbang.jiang
+ * [ALPS00134025] [Wi-Fi] move Wi-Fi NVRAM definition source file to project folder from common folder
+ * .
+ *
+ * 06 24 2010 yunchang.chang
+ * [ALPS00002677][Need Patch] [Volunteer Patch] ALPS.10X.W10.26 Volunteer patch for GPS customization use NVRam
+ * .
+ *
+ * Jun 22 2009 mtk01352
+ * [DUMA00007771] Moving modem side customization to AP
+ *
+ *
+ * Apr 29 2009 mtk80306
+ * [DUMA00116080] revise the customization of nvram
+ * revise nvram customization
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * modify code convention
+ *
+ * Mar 9 2009 mtk80306
+ * [DUMA00111088] nvram customization
+ * nvram customization
+ *
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+
+#ifndef CUSTOM_CFG_FILE_LID_H
+#define CUSTOM_CFG_FILE_LID_H
+
+
+//#include "../../../../../common/inc/cfg_file_lid.h"
+//#include "../../../common/cgen/inc/CFG_File_LID.h"
+#include "CFG_file_lid.h"
+
+/* the definition of file LID */
+typedef enum
+{
+ AP_CFG_RDCL_FILE_AUDIO_LID=AP_CFG_CUSTOM_BEGIN_LID, //AP_CFG_CUSTOM_BEGIN_LID: this lid must not be changed, it is reserved for system.
+ AP_CFG_CUSTOM_FILE_GPS_LID,
+ AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID,
+ AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID,
+ AP_CFG_RDEB_FILE_WIFI_LID,
+ AP_CFG_RDEB_WIFI_CUSTOM_LID,
+ AP_CFG_RDCL_FILE_AUDIO_PARAM_MED_LID,
+ AP_CFG_RDCL_FILE_AUDIO_VOLUME_CUSTOM_LID,
+ AP_CFG_RDCL_FILE_DUAL_MIC_CUSTOM_LID,
+ AP_CFG_RDCL_FILE_AUDIO_WB_PARAM_LID,
+ AP_CFG_REEB_PRODUCT_INFO_LID,
+// AP_CFG_RDCL_FILE_META_LID,
+// AP_CFG_CUSTOM_FILE_CUSTOM1_LID,
+// AP_CFG_CUSTOM_FILE_CUSTOM2_LID,
+ AP_CFG_RDCL_FILE_HEADPHONE_COMPFLT_LID,
+ AP_CFG_RDCL_FILE_AUDIO_GAIN_TABLE_LID,
+ AP_CFG_RDCL_FILE_AUDIO_VER1_VOLUME_CUSTOM_LID,
+ AP_CFG_RDCL_FILE_AUDIO_HD_REC_PAR_LID,
+ AP_CFG_RDCL_FILE_AUDIO_HD_REC_SCENE_LID,
+ AP_CFG_RDCL_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_LID,
+ AP_CFG_RDCL_FILE_VIBSPK_COMPFLT_LID,
+ AP_CFG_RDCL_FILE_AUDIO_MUSIC_DRC_LID,
+ AP_CFG_RDCL_FILE_AUDIO_RINGTONE_DRC_LID,
+ AP_CFG_RDCL_FILE_AUDIO_MAGI_CONFERENCE_LID,
+ AP_CFG_RDCL_FILE_AUDIO_HAC_PARAM_LID,
+ AP_CFG_CUSTOM_FILE_MAX_LID,
+} CUSTOM_CFG_FILE_LID;
+
+
+/* verno of data items */
+/* audio file version */
+#define AP_CFG_RDCL_FILE_AUDIO_LID_VERNO "001"
+
+/* GPS file version */
+#define AP_CFG_CUSTOM_FILE_GPS_LID_VERNO "000"
+
+/* audio acf file version */
+#define AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID_VERNO "001"
+
+/* audio hcf file version */
+#define AP_CFG_RDCL_FILE_HEADPHONE_COMPFLT_LID_VERNO "001"
+/* audio vibspk hcf file version */
+#define AP_CFG_RDCL_FILE_VIBSPK_COMPFLT_LID_VERNO "001"
+
+/* audio effect file version */
+#define AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID_VERNO "001"
+
+/* audio med file version */
+#define AP_CFG_RDCL_FILE_AUDIO_PARAM_MED_LID_VERNO "001"
+
+/* audio volume custom file version */
+#define AP_CFG_RDCL_FILE_AUDIO_VOLUME_CUSTOM_LID_VERNO "001"
+#define AP_CFG_RDCL_FILE_AUDIO_VER1_VOLUME_CUSTOM_LID_VERNO "001"
+
+/* dual mic custom file version */
+#define AP_CFG_RDCL_FILE_DUAL_MIC_CUSTOM_LID_VERNO "002"
+
+/* audio wb specch param custom file version */
+#define AP_CFG_RDCL_FILE_AUDIO_WB_PARAM_LID_VERNO "001"
+
+/* audio gain table custom file version */
+#define AP_CFG_RDCL_FILE_AUDIO_GAIN_TABLE_LID_VERNO "001"
+
+/* audio hd record par custom file version*/
+#define AP_CFG_RDCL_FILE_AUDIO_HD_REC_PAR_LID_VERNO "001"
+#define AP_CFG_RDCL_FILE_AUDIO_HD_REC_SCENE_LID_VERNO "001"
+
+/* audio buffer dc calibration custom file version*/
+#define AP_CFG_RDCL_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_LID_VERNO "000"
+
+/* META log and com port config file version */
+#define AP_CFG_RDCL_FILE_META_LID_VERNO "000"
+
+/* custom2 file version */
+#define AP_CFG_CUSTOM_FILE_CUSTOM1_LID_VERNO "000"
+/* custom2 file version */
+#define AP_CFG_CUSTOM_FILE_CUSTOM2_LID_VERNO "000"
+
+/* WIFI file version */
+#define AP_CFG_RDEB_FILE_WIFI_LID_VERNO "000"
+/* WIFI MAC addr file version */
+#define AP_CFG_RDCL_FILE_WIFI_ADDR_LID_VERNO "000"
+#define AP_CFG_RDEB_WIFI_CUSTOM_LID_VERNO "000"
+#define AP_CFG_REEB_PRODUCT_INFO_LID_VERNO "000"
+
+#define AP_CFG_RDCL_FILE_AUDIO_MUSIC_DRC_LID_VERNO "000"
+#define AP_CFG_RDCL_FILE_AUDIO_RINGTONE_DRC_LID_VERNO "000"
+
+#define AP_CFG_RDCL_FILE_AUDIO_MAGI_CONFERENCE_LID_VERNO "000"
+#define AP_CFG_RDCL_FILE_AUDIO_HAC_PARAM_LID_VERNO "000"
+
+#endif /* CFG_FILE_LID_H */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_data_item.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_data_item.h
new file mode 100644
index 0000000..20e8cd2
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/Custom_NvRam_data_item.h
@@ -0,0 +1,205 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+#ifndef CUSTOM_NVRAM_DATA_ITEM_H
+#define CUSTOM_NVRAM_DATA_ITEM_H
+
+#include "custom_cfg_module_file.h"
+#include "Custom_NvRam_LID.h"
+
+
+
+/*****************************************************************************
+* NVRAM database define
+*****************************************************************************/
+BEGIN_NVRAM_DATA
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_LID)
+AUDIO_CUSTOM_PARAM_STRUCT *CFG_FILE_SPEECH_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_CUSTOM_FILE_GPS_LID)
+ap_nvram_gps_config_struct *CFG_FILE_GPS_CONFIG_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT *CFG_FILE_AUDIO_COMPFLT_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_HEADPHONE_COMPFLT_LID)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT *CFG_FILE_HEADPHONE_COMPFLT_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID)
+AUDIO_EFFECT_CUSTOM_PARAM_STRUCT *CFG_FILE_AUDIO_EFFECT_REC_TOTAL
+{
+
+};
+
+
+LID_BIT VER_LID(AP_CFG_RDEB_FILE_WIFI_LID)
+WIFI_CFG_PARAM_STRUCT *CFG_FILE_WIFI_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDEB_WIFI_CUSTOM_LID)
+WIFI_CUSTOM_PARAM_STRUCT *CFG_FILE_WIFI_CUSTOM_REC_TOTAL
+{
+
+};
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_PARAM_MED_LID)
+AUDIO_PARAM_MED_STRUCT *CFG_FILE_AUDIO_PARAM_MED_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_VOLUME_CUSTOM_LID)
+AUDIO_VOLUME_CUSTOM_STRUCT *CFG_FILE_AUDIO_VOLUME_CUSTOM_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_DUAL_MIC_CUSTOM_LID)
+AUDIO_CUSTOM_EXTRA_PARAM_STRUCT *CFG_FILE_SPEECH_DUAL_MIC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_WB_PARAM_LID)
+AUDIO_CUSTOM_WB_PARAM_STRUCT *CFG_FILE_WB_SPEECH_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_REEB_PRODUCT_INFO_LID)
+PRODUCT_INFO *CFG_FILE_PRODUCT_INFO_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_GAIN_TABLE_LID)
+AUDIO_GAIN_TABLE_STRUCT *CFG_FILE_AUDIO_GAIN_TABLE_CUSTOM_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_VER1_VOLUME_CUSTOM_LID)
+AUDIO_VER1_CUSTOM_VOLUME_STRUCT *CFG_FILE_AUDIO_VER1_VOLUME_CUSTOM_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_HD_REC_PAR_LID)
+AUDIO_HD_RECORD_PARAM_STRUCT *CFG_FILE_AUDIO_HD_REC_PAR_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_HD_REC_SCENE_LID)
+AUDIO_HD_RECORD_SCENE_TABLE_STRUCT *CFG_FILE_AUDIO_HD_REC_SCENE_TABLE_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_VOICE_RECOGNIZE_PARAM_LID)
+VOICE_RECOGNITION_PARAM_STRUCT *CFG_FILE_VOICE_RECOGNIZE_PAR_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_LID)
+AUDIO_AUDENH_CONTROL_OPTION_STRUCT *CFG_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_TOTAL
+{
+
+};
+
+
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_LID)
+AUDIO_BUFFER_DC_CALIBRATION_STRUCT *CFG_FILE_AUDIO_BUFFER_DC_CALIBRATION_PAR_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_VOIP_PAR_LID)
+AUDIO_VOIP_PARAM_STRUCT *CFG_FILE_AUDIO_VOIP_PAR_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_VIBSPK_COMPFLT_LID)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT *CFG_FILE_VIBSPK_COMPFLT_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_MUSIC_DRC_LID)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT *CFG_FILE_MUSICDRC_COMPFLT_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_RINGTONE_DRC_LID)
+AUDIO_ACF_CUSTOM_PARAM_STRUCT *CFG_FILE_RINGTONEDRC_COMPFLT_REC_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_MAGI_CONFERENCE_LID)
+AUDIO_CUSTOM_MAGI_CONFERENCE_STRUCT *CFG_FILE_SPEECH_MAGI_CONFERENCE_TOTAL
+{
+
+};
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUDIO_HAC_PARAM_LID)
+AUDIO_CUSTOM_HAC_PARAM_STRUCT *CFG_FILE_SPEECH_HAC_PARAM_TOTAL
+{
+
+};
+
+END_NVRAM_DATA
+
+#endif /* CUSTOM_NVRAM_DATA_ITEM_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/NVRAM_Data_Type.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/NVRAM_Data_Type.h
new file mode 100644
index 0000000..7b2016c
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/NVRAM_Data_Type.h
@@ -0,0 +1,163 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_file_info.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * this file is used to define the nvram data type
+ *
+ * Author:
+ * -------
+ * Ning.F (MTK08139) 09/11/2008
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * Jun 18 2009 mtk80306
+ * [DUMA00120904] optimize the power button and nvram
+ *
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 15 2009 mtk80306
+ * [DUMA00111629] add camera nvram files
+ * add the data type define
+ *
+ * Mar 10 2009 mtk80306
+ * [DUMA00111223] [Need Patch] [Sanity Fail] DUMA.W09.11 Sanity Test of headset was failed
+ * change audio nvram defualt value
+ *
+ * Mar 9 2009 mtk80306
+ * [DUMA00111088] nvram customization
+ * nvram customization
+ *
+ * Feb 23 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ *
+ *
+ * Feb 19 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ *
+ *
+ * Feb 19 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ * add meta_battery
+ *
+ * Jan 13 2009 mtk80306
+ * [DUMA00107334] add nvram dll code
+ * add nvram dll code.
+ *
+ * Dec 17 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Dec 8 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Nov 24 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Oct 29 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+#ifndef _NVRAM_DATA_TYPE_H
+#define _NVRAM_DATA_TYPE_H
+
+
+
+typedef unsigned int UINT32;
+typedef unsigned char UINT8;
+typedef unsigned short UINT16;
+typedef char INT8;
+
+
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/ap_editor_data_item.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/ap_editor_data_item.h
new file mode 100644
index 0000000..c2cd31b
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/ap_editor_data_item.h
@@ -0,0 +1,162 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+#ifndef AP_EDTIOR_DATA_ITEM_SYSTEM_H
+#define AP_EDTIOR_DATA_ITEM_SYSTEM_H
+
+#include "NVRAM_Data_Type.h"
+#include "cfg_module_file.h"
+#include "CFG_file_lid.h"
+//#include "CFG_File_LID.h"
+
+// add by chipeng , temporary modify
+//#include "../../custom/oppo/cgen/inc/Custom_NvRam_LID.h"
+#include "Custom_NvRam_LID.h"
+
+/*****************************************************************************
+* Include
+*****************************************************************************/
+
+/*****************************************************************************
+* Define
+*****************************************************************************/
+typedef struct
+{
+ char cFileVer[4];
+}File_Ver_Struct;
+
+
+
+/*****************************************************************************
+* META Description
+*****************************************************************************/
+BEGIN_NVRAM_DATA
+
+
+/***********************************************************************
+ *** This is a nvram data item bit level description for meta tools nvram editor
+ ***
+ *** Logical Data Item ID : AP_CFG_FILE_AUXADC_LID
+ ***
+ *** Module:
+ ***
+ *** Description:
+ ***
+ *** Maintainer:
+ ***
+ ***********************************************************************/
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_AUXADC_LID)
+ AUXADC_CFG_Struct *CFG_FILE_AUXADC_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDEB_FILE_BT_ADDR_LID)
+ ap_nvram_btradio_mt6610_struct *CFG_FILE_BT_ADDR_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_FACTORY_LID)
+ FACTORY_CFG_Struct *CFG_FILE_FACTORY_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_PARA_LID)
+ NVRAM_CAMERA_PARA_STRUCT *CFG_FILE_CAMERA_PARA_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_3A_LID)
+ NVRAM_CAMERA_3A_STRUCT *CFG_FILE_CAMERA_3A_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_SHADING_LID)
+ NVRAM_CAMERA_SHADING_STRUCT *CFG_FILE_CAMERA_SHADING_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_DEFECT_LID)
+ NVRAM_CAMERA_DEFECT_STRUCT *CFG_FILE_CAMERA_DEFECT_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_SENSOR_LID)
+ NVRAM_SENSOR_DATA_STRUCT *CFG_FILE_CAMERA_SENSOR_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_CAMERA_LENS_LID)
+ NVRAM_LENS_PARA_STRUCT *CFG_FILE_CAMERA_LENS_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_BWCS_LID)
+ ap_nvram_bwcs_config_struct *CFG_FILE_BWCS_CONFIG_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_HWMON_ACC_LID)
+ NVRAM_HWMON_ACC_STRUCT *CFG_FILE_HWMON_ACC_REC_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_MD_SBP_LID)
+ MD_SBP_Struct *CFG_FILE_MD_SBP_CONFIG_TOTAL
+ {
+
+ };
+
+LID_BIT VER_LID(AP_CFG_RDCL_FILE_SDIO_LID)
+ ap_nvram_sdio_config_struct *CFG_FILE_SDIO_CONFIG_TOTAL
+ {
+
+ };
+
+END_NVRAM_DATA
+
+#endif /* AP_EDTIOR_DATA_ITEM_SYSTEM_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_acf_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_acf_default.h
new file mode 100644
index 0000000..a567f3f
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_acf_default.h
@@ -0,0 +1,186 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_acf_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision: 1.1.1.1 $
+ * $Modtime:$
+ * $Log: audio_acf_default.h,v $
+ * Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+ *
+ *
+ * Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+ *
+ *
+ * Revision 1.1 2012-02-10 01:41:58 mtk01984
+ * *** empty log message ***
+ *
+ *
+ * 02 10 2011 pheoby.wang
+ * [ALPS00030529] Please help to create ZTE63V3 project based on ZTE73V1_2
+ * .
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_ACF_DEFAULT_H
+#define AUDIO_ACF_DEFAULT_H
+
+ /* Compensation Filter HSF coeffs: default all pass filter */
+ /* BesLoudness also uses this coeffs */
+ #define BES_LOUDNESS_HSF_COEFF \
+ 0x7DA1709,0xF054253E,0x7D1C95A,0x7D56C298, \
+ 0x7D6C2CA,0xF05B867F,0x7CDBD5F,0x7D19C2D1, \
+ 0x7C751CD,0xF07DBC74,0x7BAFE48,0x7BFEC3DA, \
+ 0x7B4AD39,0xF0A6FF57,0x7A46980,0x7AA5C515, \
+ 0x7AE1CEE,0xF0B5836B,0x79C79B1,0x7A2BC583, \
+ 0x78FC91E,0xF0F882BF,0x777E4BF,0x77F0C777, \
+ 0x76B705A,0xF148A5E6,0x74C3E63,0x7537C9BF, \
+ 0x75EB726,0xF164A91C,0x73D0346,0x7440CA88, \
+ 0x7247308,0xF1E4AE1B,0x6F7957D,0x6FC0CE05
+
+ /* Compensation Filter BPF coeffs: default all pass filter */
+ #define BES_LOUDNESS_BPF_COEFF \
+ 0x3FD481A8,0x3EFF7E57,0xC12C0000, \
+ 0x3FD081DA,0x3EE97E25,0xC1460000, \
+ 0x3FBE82D7,0x3E817D28,0xC1C00000, \
+ 0x3FA98440,0x3E037BBF,0xC2520000, \
+ 0x3FA184CE,0x3DD77B31,0xC2860000, \
+ 0x3F7E87BD,0x3D0C7842,0xC3740000, \
+ \
+ 0x3FD481C0,0x3EFF7E3F,0xC12C0000, \
+ 0x3FD081F5,0x3EE97E0A,0xC1460000, \
+ 0x3FBE830B,0x3E817CF4,0xC1C00000, \
+ 0x3FA9849C,0x3E037B63,0xC2520000, \
+ 0x3FA1853A,0x3DD77AC5,0xC2860000, \
+ 0x3F7E8889,0x3D0C7776,0xC3740000, \
+ \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0, \
+ 0x0,0x0,0x0
+
+ #define BES_LOUDNESS_DRC_FORGET_TABLE \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000, \
+ 0x00000000, 0x00000000
+
+ #define BES_LOUDNESS_WS_GAIN_MAX 0
+
+ #define BES_LOUDNESS_WS_GAIN_MIN 0
+
+ #define BES_LOUDNESS_FILTER_FIRST 0
+
+ #define BES_LOUDNESS_GAIN_MAP_IN \
+ 0, 0, 0, 0, 0
+
+ #define BES_LOUDNESS_GAIN_MAP_OUT \
+ 0, 0, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_custom.h
new file mode 100644
index 0000000..7a3986e
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_custom.h
@@ -0,0 +1,467 @@
+/* Copyright Statement:
+*
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws. The information contained herein
+* is confidential and proprietary to MediaTek Inc. and/or its licensors.
+* Without the prior written permission of MediaTek inc. and/or its licensors,
+* any reproduction, modification, use or disclosure of MediaTek Software,
+* and information contained herein, in whole or in part, shall be strictly prohibited.
+*/
+/* MediaTek Inc. (C) 2010. All rights reserved.
+*
+* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+* THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+* CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+* SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+* CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* The following software/firmware and/or related documentation ("MediaTek Software")
+* have been modified by MediaTek Inc. All revisions are subject to any receiver's
+* applicable license agreements with MediaTek Inc.
+*/
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+*
+* Filename:
+* ---------
+* aud_custom_exp.h
+*
+* Project:
+* --------
+* DUMA
+*
+* Description:
+* ------------
+* This file is the header of audio customization related function or definition.
+*
+* Author:
+* -------
+* JY Huang
+*
+*============================================================================
+* HISTORY
+* Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+*------------------------------------------------------------------------------
+* $Revision: 1.1.1.1 $
+* $Modtime:$
+* $Log: audio_custom.h,v $
+* Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+*
+*
+* Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+*
+*
+* Revision 1.1 2012-02-10 01:41:58 mtk01984
+* *** empty log message ***
+*
+*
+* 05 26 2010 chipeng.chang
+* [ALPS00002287][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for audio paramter
+* modify audio parameter.
+*
+* 05 26 2010 chipeng.chang
+* [ALPS00002287][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for audio paramter
+* modify for Audio parameter
+*
+* mtk80306
+* [DUMA00132370] waveform driver file re-structure.
+* waveform driver file re-structure.
+*
+* Jul 28 2009 mtk01352
+* [DUMA00009909] Check in TWO_IN_ONE_SPEAKER and rearrange
+*
+*
+*
+*------------------------------------------------------------------------------
+* Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+*============================================================================
+****************************************************************************/
+#ifndef AUDIO_CUSTOM_H
+#define AUDIO_CUSTOM_H
+
+/* define Gain For Normal */
+/* Normal volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+/*
+#define GAIN_NOR_TON_VOL 8 // reserved
+#define GAIN_NOR_KEY_VOL 43 // TTY_CTM_Mic
+#define GAIN_NOR_MIC_VOL 26 // IN_CALL BuiltIn Mic gain
+// GAIN_NOR_FMR_VOL is used as idle mode record volume
+#define GAIN_NOR_FMR_VOL 0 // Normal BuiltIn Mic gain
+#define GAIN_NOR_SPH_VOL 20 // IN_CALL EARPIECE Volume
+#define GAIN_NOR_SID_VOL 100 // IN_CALL EARPICE sidetone
+#define GAIN_NOR_MED_VOL 25 // reserved
+*/
+
+#define GAIN_NOR_TON_VOL 8 // reserved
+#define GAIN_NOR_KEY_VOL 43 // TTY_CTM_Mic
+#define GAIN_NOR_MIC_VOL 26 // IN_CALL BuiltIn Mic gain
+// GAIN_NOR_FMR_VOL is used as idle mode record volume
+#define GAIN_NOR_FMR_VOL 0 // Normal BuiltIn Mic gain
+#define GAIN_NOR_SPH_VOL 20 // IN_CALL EARPIECE Volume
+#define GAIN_NOR_SID_VOL 100 // IN_CALL EARPICE sidetone
+#define GAIN_NOR_MED_VOL 25 // reserved
+
+/* define Gain For Headset */
+/* Headset volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+/*
+#define GAIN_HED_TON_VOL 8 // reserved
+#define GAIN_HED_KEY_VOL 24 // reserved
+#define GAIN_HED_MIC_VOL 20 // IN_CALL BuiltIn headset gain
+#define GAIN_HED_FMR_VOL 24 // reserved
+#define GAIN_HED_SPH_VOL 12 // IN_CALL Headset volume
+#define GAIN_HED_SID_VOL 100 // IN_CALL Headset sidetone
+#define GAIN_HED_MED_VOL 12 // Idle, headset Audio Buf Gain setting
+*/
+
+#define GAIN_HED_TON_VOL 8 // reserved
+#define GAIN_HED_KEY_VOL 24 // reserved
+#define GAIN_HED_MIC_VOL 20 // IN_CALL BuiltIn headset gain
+#define GAIN_HED_FMR_VOL 24 // reserved
+#define GAIN_HED_SPH_VOL 12 // IN_CALL Headset volume
+#define GAIN_HED_SID_VOL 100 // IN_CALL Headset sidetone
+#define GAIN_HED_MED_VOL 12 // Idle, headset Audio Buf Gain setting
+
+/* define Gain For Handfree */
+/* Handfree volume: TON, SPK, MIC, FMR, SPH, SID, MED */
+/* GAIN_HND_TON_VOL is used as class-D Amp gain*/
+/*
+#define GAIN_HND_TON_VOL 15 //
+#define GAIN_HND_KEY_VOL 24 // reserved
+#define GAIN_HND_MIC_VOL 20 // IN_CALL LoudSpeak Mic Gain = BuiltIn Gain
+#define GAIN_HND_FMR_VOL 24 // reserved
+#define GAIN_HND_SPH_VOL 6 // IN_CALL LoudSpeak
+#define GAIN_HND_SID_VOL 100// IN_CALL LoudSpeak sidetone
+#define GAIN_HND_MED_VOL 12 // Idle, loudSPK Audio Buf Gain setting
+*/
+
+#define GAIN_HND_TON_VOL 8 // use for ringtone volume
+#define GAIN_HND_KEY_VOL 24 // reserved
+#define GAIN_HND_MIC_VOL 20 // IN_CALL LoudSpeak Mic Gain = BuiltIn Gain
+#define GAIN_HND_FMR_VOL 24 // reserved
+#define GAIN_HND_SPH_VOL 12 // IN_CALL LoudSpeak
+#define GAIN_HND_SID_VOL 100 // IN_CALL LoudSpeak sidetone
+#define GAIN_HND_MED_VOL 12 // Idle, loudSPK Audio Buf Gain setting
+
+ /* 0: Input FIR coefficients for 2G/3G Normal mode */
+ /* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */
+ /* 2: Input FIR coefficients for 2G/3G Handfree mode */
+ /* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */
+ /* 4: Input FIR coefficients for VoIP Normal mode */
+ /* 5: Input FIR coefficients for VoIP Handfree mode */
+#define SPEECH_INPUT_FIR_COEFF \
+ -2026, 1645, -1366, 645, 18,\
+ -1662, 1364, -2524, 3392, -3066,\
+ 3952, -1868, 894, 1564, -1665,\
+ 5922, -5153, 10797,-11633, 14090,\
+ -19859, 32767, 32767,-19859, 14090,\
+ -11633, 10797, -5153, 5922, -1665,\
+ 1564, 894, -1868, 3952, -3066,\
+ 3392, -2524, 1364, -1662, 18,\
+ 645, -1366, 1645, -2026, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+ /* 0: Output FIR coefficients for 2G/3G Normal mode */
+ /* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */
+ /* 2: Output FIR coefficients for 2G/3G Handfree mode */
+ /* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */
+ /* 4: Output FIR coefficients for VoIP Normal mode */
+ /* 5: Output FIR coefficients for VoIP Handfree mode */
+#define SPEECH_OUTPUT_FIR_COEFF \
+ 4281, 2930, 1816, 1664, 939,\
+ -873, -2205, -3623, -3057, -4807,\
+ -6317, -5516, -8544, -5419, -9091,\
+ -1161, -1533, 6783, 3093, 17314,\
+ 847, 32767, 32767, 847, 17314,\
+ 3093, 6783, -1533, -1161, -9091,\
+ -5419, -8544, -5516, -6317, -4807,\
+ -3057, -3623, -2205, -873, 939,\
+ 1664, 1816, 2930, 4281, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+#define DG_DL_Speech 0xE3D
+#define DG_Microphone 0x1400
+#define FM_Record_Vol 6 /* 0 is smallest. each step increase 1dB.
+ Be careful of distortion when increase too much.
+ Generally, it's not suggested to tune this parameter */
+/*
+* The Bluetooth DAI Hardware COnfiguration Parameter
+*/
+#define DEFAULT_BLUETOOTH_SYNC_TYPE 0
+#define DEFAULT_BLUETOOTH_SYNC_LENGTH 1
+ /* 0: Input FIR coefficients for 2G/3G Normal mode */
+ /* 1: Input FIR coefficients for 2G/3G/VoIP Headset mode */
+ /* 2: Input FIR coefficients for 2G/3G Handfree mode */
+ /* 3: Input FIR coefficients for 2G/3G/VoIP BT mode */
+ /* 4: Input FIR coefficients for VoIP Normal mode */
+ /* 5: Input FIR coefficients for VoIP Handfree mode */
+#define WB_Speech_Input_FIR_Coeff \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ /* 0: Output FIR coefficients for 2G/3G Normal mode */
+ /* 1: Output FIR coefficients for 2G/3G/VoIP Headset mode */
+ /* 2: Output FIR coefficients for 2G/3G Handfree mode */
+ /* 3: Output FIR coefficients for 2G/3G/VoIP BT mode */
+ /* 4: Output FIR coefficients for VoIP Normal mode */
+ /* 5: Output FIR coefficients for VoIP Handfree mode */
+#define WB_Speech_Output_FIR_Coeff \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_effect_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_effect_default.h
new file mode 100644
index 0000000..93ea6aa
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_effect_default.h
@@ -0,0 +1,150 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * audio_coeff_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related parameters or definition.
+ *
+ * Author:
+ * -------
+ * Tina Tsai
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision: 1.1.1.1 $
+ * $Modtime:$
+ * $Log: audio_effect_default.h,v $
+ * Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+ *
+ *
+ * Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+ *
+ *
+ * Revision 1.1 2012-02-10 01:41:58 mtk01984
+ * *** empty log message ***
+ *
+ *
+ * 02 10 2011 pheoby.wang
+ * [ALPS00030529] Please help to create ZTE63V3 project based on ZTE73V1_2
+ * .
+ *
+ *
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef AUDIO_EFFECT_DEFAULT_H
+#define AUDIO_EFFECT_DEFAULT_H
+
+#define BSRD_LEVEL 50
+#define BSRD_DISTANCE1 20
+#define BSRD_DISTANCE2 30
+#define BSRD_BAND_SELECT 0
+
+#define BASS_CUTOFF_FREQ 400
+#define BASS_ISVB 0
+
+#define NORMAL_GAIN_LEVEL \
+ 0,0,0,0,0,0,0,0
+#define DANCE_GAIN_LEVEL \
+ 16,64,0,8,32,40,32,16
+#define BASS_GAIN_LEVEL \
+ 48,32,24,16,0,0,0,0
+#define CLASSICAL_GAIN_LEVEL \
+ 40,24,0,-16,-8,0,24,32
+#define TREBLE_GAIN_LEVEL \
+ 0,0,0,0,8,24,40,48
+#define PARTY_GAIN_LEVEL \
+ 40,32,0,0,0,0,0,32
+#define POP_GAIN_LEVEL \
+ -12,0,8,40,40,8,-8,-16
+#define ROCK_GAIN_LEVEL \
+ 48,16,8,-8,-16,8,24,40
+
+#define LOUDENHANCEMODE 3
+
+#define TIME_TD_TF 0
+#define TIME_TS_RATIO 100
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_volume_custom_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_volume_custom_default.h
new file mode 100644
index 0000000..68c0f05
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/audio_volume_custom_default.h
@@ -0,0 +1,147 @@
+/* Copyright Statement:
+*
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws. The information contained herein
+* is confidential and proprietary to MediaTek Inc. and/or its licensors.
+* Without the prior written permission of MediaTek inc. and/or its licensors,
+* any reproduction, modification, use or disclosure of MediaTek Software,
+* and information contained herein, in whole or in part, shall be strictly prohibited.
+*/
+/* MediaTek Inc. (C) 2010. All rights reserved.
+*
+* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+* THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+* CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+* SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+* CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* The following software/firmware and/or related documentation ("MediaTek Software")
+* have been modified by MediaTek Inc. All revisions are subject to any receiver's
+* applicable license agreements with MediaTek Inc.
+*/
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+*
+* Filename:
+* ---------
+* audio_volume_custom_default.h
+*
+* Project:
+* --------
+* ALPS
+*
+* Description:
+* ------------
+* This file is the header of audio customization related parameters or definition.
+*
+* Author:
+* -------
+* Chipeng chang
+*
+*============================================================================
+* HISTORY
+* Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+*------------------------------------------------------------------------------
+* $Revision: 1.1.1.1 $
+* $Modtime:$
+* $Log: audio_volume_custom_default.h,v $
+* Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+*
+*
+* Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+*
+*
+* Revision 1.1 2012-02-10 01:41:58 mtk01984
+* *** empty log message ***
+*
+*
+*
+*
+*
+*------------------------------------------------------------------------------
+* Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+*============================================================================
+****************************************************************************/
+#ifndef AUDIO_VOLUME_CUSTOM_DEFAULT_H
+#define AUDIO_VOLUME_CUSTOM_DEFAULT_H
+#define AUD_VOLUME_RING \
+0, 32, 64, 96, 128, 160, 192, \
+0, 32, 64, 96, 128, 132, 144, \
+0, 85, 128, 171, 190, 213, 255
+#define AUD_VOLUME_KEY \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255
+#define AUD_VOLUME_MIC \
+56, 255, 255, 160, 255, 255, 160, \
+255, 192, 192, 172, 255, 192, 172, \
+255, 208, 208, 172, 255, 208, 172
+#define AUD_VOLUME_FMR \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255
+#define AUD_VOLUME_SPH \
+80, 92, 104, 116, 128, 140, 152, \
+76, 88, 100, 112, 124, 136, 148, \
+40, 52, 64, 76, 88, 100, 112
+#define AUD_VOLUME_SID \
+0, 0, 16, 16, 0, 0, 0, \
+0, 0, 32, 0, 0, 0, 0, \
+0, 0, 0, 0, 0, 0, 0
+#define AUD_VOLUME_MEDIA \
+100, 148, 148, 148, 120, 148, 140, \
+0, 43, 85, 128, 171, 213, 255, \
+0, 56, 96, 136, 176, 216, 255
+#define AUD_VOLUME_MATV \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255, \
+0, 43, 85, 128, 171, 213, 255
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/bwcs_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/bwcs_custom.h
new file mode 100644
index 0000000..aff8dff
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/bwcs_custom.h
@@ -0,0 +1,101 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * bwcs_custom.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * This file is the header of bwcs customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Saker Hsia(MTK02327)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 06 30 2010 saker.hsia
+ * [ALPS00002764][Need Patch] [Volunteer Patch] ALPS.10X.W10.28 Volunteer patch for BWCS NVRAM customization
+ * .
+ *
+ *******************************************************************************/
+#ifndef BWCS_CUSTOM_H
+#define BWCS_CUSTOM_H
+
+
+#define RT_RSSI_TH_BT 73
+#define RT_RSSI_TH_WIFI1 73
+#define RT_RSSI_TH_WIFI2 73
+
+#define NRT_RSSI_TH_BT 73
+#define NRT_RSSI_TH_WIFI1 73
+#define NRT_RSSI_TH_WIFI2 73
+#define ANT_PATH_COMP 10
+#define ANT_SWITCH_PROT_TIME 10
+#define BT_RX_RANGE {0xC4, 0xE2}
+#if defined (MTK_MT6611)
+#define WIFI_TX_FLOW_CTRL {0x0E00, 0x0001}
+#define BT_TX_PWR_WIFI_OFF 0x7
+#define BT_TX_PWR_SCO 0x4
+#define BT_TX_PWR_ACL 0x4
+#elif defined (MTK_MT6612)
+#define WIFI_TX_FLOW_CTRL {0x0E00, 0x0001}
+#define BT_TX_PWR_WIFI_OFF 0x7
+#define BT_TX_PWR_SCO 0x4
+#define BT_TX_PWR_ACL 0x3
+#elif defined (MTK_MT6616)
+#define WIFI_TX_FLOW_CTRL {0x1100, 0x0001}
+#define BT_TX_PWR_WIFI_OFF 0x7
+#define BT_TX_PWR_SCO 0x4
+#define BT_TX_PWR_ACL 0x3
+#else
+#define WIFI_TX_FLOW_CTRL {0x1100, 0x0001}
+#define BT_TX_PWR_WIFI_OFF 0x7
+#define BT_TX_PWR_SCO 0x4
+#define BT_TX_PWR_ACL 0x4
+#endif
+#define RESERVED {0x00, 0x00, 0x00, 0x00, 0x00}
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_default.h
new file mode 100644
index 0000000..ae13d72
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_default.h
@@ -0,0 +1,4 @@
+#include "../cfgdefault/CFG_Custom1_Default.h"
+#include "../cfgdefault/CFG_GPS_Default.h"
+#include "../cfgdefault/CFG_PRODUCT_INFO_Default.h"
+#include "../cfgdefault/CFG_WIFI_Default.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_file.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_file.h
new file mode 100644
index 0000000..6bfcb3a
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/custom_cfg_module_file.h
@@ -0,0 +1,4 @@
+#include "../cfgfileinc/CFG_Custom1_File.h"
+#include "../cfgfileinc/CFG_GPS_File.h"
+#include "../cfgfileinc/CFG_PRODUCT_INFO_File.h"
+#include "../cfgfileinc/CFG_Wifi_File.h"
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/med_audio_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/med_audio_default.h
new file mode 100644
index 0000000..c2f7d37
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/med_audio_default.h
@@ -0,0 +1,718 @@
+/* Copyright Statement:
+*
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws. The information contained herein
+* is confidential and proprietary to MediaTek Inc. and/or its licensors.
+* Without the prior written permission of MediaTek inc. and/or its licensors,
+* any reproduction, modification, use or disclosure of MediaTek Software,
+* and information contained herein, in whole or in part, shall be strictly prohibited.
+*/
+/* MediaTek Inc. (C) 2010. All rights reserved.
+*
+* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+* THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+* CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+* SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+* CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* The following software/firmware and/or related documentation ("MediaTek Software")
+* have been modified by MediaTek Inc. All revisions are subject to any receiver's
+* applicable license agreements with MediaTek Inc.
+*/
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * med_audio_default.h
+ *
+ * Project:
+ * --------
+ * ALPS
+ *
+ * Description:
+ * ------------
+ * This file is the header of audio customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Chipeng Chang
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * $Revision: 1.1.1.1 $
+ * $Modtime:$
+ * $Log: med_audio_default.h,v $
+ * Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+ *
+ *
+ * Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+ *
+ *
+ * Revision 1.1 2012-02-10 01:41:58 mtk01984
+ * *** empty log message ***
+ *
+
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by CC/CQ. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#ifndef MED_AUDIO_CUSTOM_H
+#define MED_AUDIO_CUSTOM_H
+// normal mode parameters ------------------------
+#define NORMAL_SPEECH_OUTPUT_FIR_COEFF \
+ 4281, 2930, 1816, 1664, 939,\
+ -873, -2205, -3623, -3057, -4807,\
+ -6317, -5516, -8544, -5419, -9091,\
+ -1161, -1533, 6783, 3093, 17314,\
+ 847, 32767, 32767, 847, 17314,\
+ 3093, 6783, -1533, -1161, -9091,\
+ -5419, -8544, -5516, -6317, -4807,\
+ -3057, -3623, -2205, -873, 939,\
+ 1664, 1816, 2930, 4281, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// headset mode parameters ------------------------
+#define HEADSET_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// handfree mode parameters ------------------------
+#define HANDFREE_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// VoIP_BT mode parameters ------------------------
+#define VOIPBT_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// VoIP_NORMAL mode parameters ------------------------
+#define VOIPNORMAL_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// VoIP_Handfree mode parameters ------------------------
+#define VOIPHANDFREE_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// AUX1 mode parameters ------------------------
+#define AUX1_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+// AUX2 mode parameters ------------------------
+#define AUX2_SPEECH_OUTPUT_FIR_COEFF \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+#define SPEECH_OUTPUT_MED_FIR_COEFF \
+NORMAL_SPEECH_OUTPUT_FIR_COEFF,\
+HEADSET_SPEECH_OUTPUT_FIR_COEFF ,\
+HANDFREE_SPEECH_OUTPUT_FIR_COEFF ,\
+VOIPBT_SPEECH_OUTPUT_FIR_COEFF,\
+VOIPNORMAL_SPEECH_OUTPUT_FIR_COEFF,\
+VOIPHANDFREE_SPEECH_OUTPUT_FIR_COEFF,\
+AUX1_SPEECH_OUTPUT_FIR_COEFF,\
+AUX2_SPEECH_OUTPUT_FIR_COEFF
+#define SPEECH_INPUT_MED_FIR_COEFF\
+ -2026, 1645, -1366, 645, 18,\
+ -1662, 1364, -2524, 3392, -3066,\
+ 3952, -1868, 894, 1564, -1665,\
+ 5922, -5153, 10797,-11633, 14090,\
+ -19859, 32767, 32767,-19859, 14090,\
+ -11633, 10797, -5153, 5922, -1665,\
+ 1564, 894, -1868, 3952, -3066,\
+ 3392, -2524, 1364, -1662, 18,\
+ 645, -1366, 1645, -2026, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ \
+ 32767, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0
+#define FIR_output_index\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define FIR_input_index\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_NORMAL_MODE_PARA \
+ 96, 253, 16388, 30, -8185, 31, 400, 1,\
+ 4112, 4325, 11, 0, 0, 0, 0, 8192
+#define MED_SPEECH_EARPHONE_MODE_PARA \
+ 96, 253, 10756, 30, -8185, 31, 400, 0,\
+ 4112, 4325, 11, 0, 0, 0, 0, 0
+#define MED_SPEECH_BT_EARPHONE_MODE_PARA \
+ 64, 253, 8228, 0,-15787, 0, 400, 0,\
+ 4112, 4325, 11, 0, 0, 0, 0, 86
+#define MED_SPEECH_LOUDSPK_MODE_PARA \
+ 96, 224, 4710, 30, -8185, 0, 400, 0,\
+ 4112, 4325, 11, 0, 0, 0, 0, 0
+#define MED_SPEECH_CARKIT_MODE_PARA \
+ 96, 224, 5256, 30, -8185, 0, 400, 0,\
+ 4112, 4325, 11, 0, 0, 0, 0, 0
+#define MED_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_AUX1_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define MED_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/sph_coeff_default.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/sph_coeff_default.h
new file mode 100644
index 0000000..d809ed5
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/sph_coeff_default.h
@@ -0,0 +1,234 @@
+/* Copyright Statement:
+*
+* This software/firmware and related documentation ("MediaTek Software") are
+* protected under relevant copyright laws. The information contained herein
+* is confidential and proprietary to MediaTek Inc. and/or its licensors.
+* Without the prior written permission of MediaTek inc. and/or its licensors,
+* any reproduction, modification, use or disclosure of MediaTek Software,
+* and information contained herein, in whole or in part, shall be strictly prohibited.
+*/
+/* MediaTek Inc. (C) 2010. All rights reserved.
+*
+* BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+* THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+* CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+* SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+* STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+* CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* The following software/firmware and/or related documentation ("MediaTek Software")
+* have been modified by MediaTek Inc. All revisions are subject to any receiver's
+* applicable license agreements with MediaTek Inc.
+*/
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+*
+* Filename:
+* ---------
+*
+*
+* Project:
+* --------
+* ALPS
+*
+* Description:
+* ------------
+*
+* Author:
+* -------
+* ChiPeng
+*
+*------------------------------------------------------------------------------
+* $Revision: 1.1.1.1 $ 1.0.0
+* $Modtime:$
+* $Log: sph_coeff_default.h,v $
+* Revision 1.1.1.1 2012-04-02 10:41:40 mtk01984
+*
+*
+* Revision 1.1.1.1 2012-03-30 01:08:07 mtk01984
+*
+*
+* Revision 1.1 2012-02-10 01:41:58 mtk01984
+* *** empty log message ***
+*
+*
+* 06 26 2010 chipeng.chang
+* [ALPS00002705][Need Patch] [Volunteer Patch] ALPS.10X.W10.11 Volunteer patch for speech parameter
+* modify speech parameters.
+*
+* Mar 15 2010 mtk02308
+* [ALPS] Init Custom parameter
+*
+*
+
+*
+*
+*******************************************************************************/
+#ifndef SPEECH_COEFF_DEFAULT_H
+#define SPEECH_COEFF_DEFAULT_H
+#ifndef FALSE
+#define FALSE 0
+#endif
+//speech parameter depen on BT_CHIP cersion
+#if defined(MTK_MT6611)
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+#elif defined(MTK_MT6612)
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+#elif defined(MTK_MT6616)
+#define BT_COMP_FILTER (1 << 15)
+#define BT_SYNC_DELAY 86
+#else // MTK_MT6620
+#define BT_COMP_FILTER (0 << 15)
+#define BT_SYNC_DELAY 0
+#endif
+#ifdef MTK_DUAL_MIC_SUPPORT
+#define SPEECH_MODE_PARA13 (371)
+#define SPEECH_MODE_PARA14 (23)
+#else
+#define SPEECH_MODE_PARA13 (0)
+#define SPEECH_MODE_PARA14 (0)
+#endif
+#define DEFAULT_SPEECH_NORMAL_MODE_PARA \
+ 96, 253, 16388, 31, 57351, 31, 400, 0,\
+ 80, 4325, 99, 0, 20488, 0|SPEECH_MODE_PARA13, 0|SPEECH_MODE_PARA14, 8192
+#define DEFAULT_SPEECH_EARPHONE_MODE_PARA \
+ 0, 189, 10756, 31, 57351, 31, 400, 0,\
+ 80, 4325, 99, 0, 20488, 0, 0, 0
+#define DEFAULT_SPEECH_LOUDSPK_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132,\
+ 80, 4325, 99, 0, 20488, 0, 0, 0
+#define DEFAULT_SPEECH_BT_EARPHONE_MODE_PARA \
+ 0, 253, 10756, 31, 53255, 31, 400, 0,\
+ 80, 4325, 99, 0, 53256|BT_COMP_FILTER, 0, 0,BT_SYNC_DELAY
+#define DEFAULT_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define DEFAULT_SPEECH_CARKIT_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132,\
+ 80, 4325, 99, 0, 20488, 0, 0, 0
+#define DEFAULT_SPEECH_AUX1_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define DEFAULT_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define DEFAULT_SPEECH_COMMON_PARA \
+ 0, 55997, 31000, 10752, 32769, 0, 0, 0, \
+ 0, 0, 0, 0
+#define DEFAULT_SPEECH_VOL_PARA \
+ 0, 0, 0, 0
+#define DEFAULT_AUDIO_DEBUG_INFO \
+ 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_VM_SUPPORT FALSE
+#define DEFAULT_AUTO_VM FALSE
+#define MICBAIS 1900
+/* The Bluetooth PCM digital volume */
+/* default_bt_pcm_in_vol : uplink, only for enlarge volume,
+ 0x100 : 0dB gain
+ 0x200 : 6dB gain
+ 0x300 : 9dB gain
+ 0x400 : 12dB gain
+ 0x800 : 18dB gain
+ 0xF00 : 24dB gain */
+#define DEFAULT_BT_PCM_IN_VOL 0x100
+/* default_bt_pcm_out_vol : downlink gain,
+ 0x1000 : 0dB; maximum 0x7FFF */
+#define DEFAULT_BT_PCM_OUT_VOL 0x1000
+#define DEFAULT_WB_SPEECH_NORMAL_MODE_PARA \
+ 96, 253, 16388, 31, 57351, 31, 400, 0,\
+ 80, 4325, 99, 0, 16392, 0, 0, 8192
+#define DEFAULT_WB_SPEECH_EARPHONE_MODE_PARA \
+ 0, 189, 10756, 31, 57351, 31, 400, 0,\
+ 80, 4325, 99, 0, 16392, 0, 0, 0
+#define DEFAULT_WB_SPEECH_LOUDSPK_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132,\
+ 80, 4325, 99, 0, 16392, 0, 0, 0
+#define DEFAULT_WB_SPEECH_BT_EARPHONE_MODE_PARA \
+ 0, 253, 10756, 31, 53255, 31, 400, 0,\
+ 80, 4325, 99, 0, 49160 | BT_COMP_FILTER, 0, 0,BT_SYNC_DELAY
+#define DEFAULT_WB_SPEECH_BT_CORDLESS_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+#define DEFAULT_WB_SPEECH_CARKIT_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 24607, 400, 132,\
+ 80, 4325, 99, 0, 16392, 0, 0, 0
+#define DEFAULT_WB_SPEECH_AUX1_MODE_PARA \
+ 96, 224, 5256, 31, 57351, 0, 400, 0,\
+ 4112, 4325, 11, 0, 0, 0, 0, 0
+#define DEFAULT_WB_SPEECH_AUX2_MODE_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0,\
+ 0, 0, 0, 0, 0, 0, 0, 0
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABF_PARA \
+ 4, 4, 3, 5, 4, \
+ 3, 3, 3, 10052, 8546, \
+ 14680, 8774, 9806, 13568, 10378, \
+ 12692, 3, 0, 15, 16, \
+ 34, 26, 24, 26, 30, \
+ 32, 7377, 6200, 6656, 9209, \
+ 9111, 15041, 13410, 9904, 4321, \
+ 9726, 1, 1, 1, 0, \
+ 68, 0, 0, 0
+
+#define DEFAULT_SPEECH_DUAL_MIC_ABFWB_PARA \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
+ 0, 0, 68, 0, 0, 0
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/wifi_custom.h b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/wifi_custom.h
new file mode 100644
index 0000000..dc81312
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/cgen/inc/wifi_custom.h
@@ -0,0 +1,202 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * wifi_custom.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * This file is the header of wifi customization related function or definition.
+ *
+ * Author:
+ * -------
+ * Renbang Jiang (MTK80150)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * 04 19 2011 cp.wu
+ * [ALPS00041285] [Need Patch] [Volunteer Patch][MT6620 Wi-Fi] Merge MT6620 Wi-Fi into mt6575_evb project
+ * 1. update init.rc for normal boot/meta/factory for MT6620 Wi-Fi related part.
+ * 2. update NVRAM structure definition and default value for MT6620 Wi-Fi
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ * 07 10 2010 renbang.jiang
+ * [ALPS00121785][Need Patch] [Volunteer Patch] use NVRAM to save Wi-Fi custom data
+ * .
+ *
+ *
+ *******************************************************************************/
+#ifndef __WIFI_CUSTOM_H
+#define __WIFI_CUSTOM_H
+
+#define WIFI_CUSTOM_SD_BLOCK_SIZE 512
+#define WIFI_CUSTOM_SD_BUS_WIDTH 4
+#define WIFI_CUSTOM_SD_CLOCK_RATE 0
+
+#define WIFI_CUSTOM_BT_COEXIST_WINDOW_T 0
+#define WIFI_CUSTOM_ENABLE_TX_AUTO_FRAGMENT_FOR_BT 0
+#define WIFI_CUSTOM_BTCR0 0
+#define WIFI_CUSTOM_BTCR1 0
+#define WIFI_CUSTOM_BTCR2 0
+#define WIFI_CUSTOM_BTCR3 0
+
+#if defined (MTK_MT6611)
+
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR0 0x82048041
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR1 0x19040F00
+
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR0 0x82040061
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR1 0x19040E00
+
+#define WIFI_CUSTOM_DUAL_ACL_BTCR0 0x82000061
+#define WIFI_CUSTOM_DUAL_ACL_BTCR1 0x09040F00
+
+#define WIFI_CUSTOM_DUAL_MIX_BTCR0 0x82000061
+#define WIFI_CUSTOM_DUAL_MIX_BTCR1 0x09040F00
+
+#elif defined (MTK_MT6612)
+
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR0 0x7E048041
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR1 0x18840F00
+
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR0 0x82040061
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR1 0x18840E00
+
+#define WIFI_CUSTOM_DUAL_ACL_BTCR0 0x7E000061
+#define WIFI_CUSTOM_DUAL_ACL_BTCR1 0x08840F00
+
+#define WIFI_CUSTOM_DUAL_MIX_BTCR0 0x7E000061
+#define WIFI_CUSTOM_DUAL_MIX_BTCR1 0x08840F00
+
+#elif defined (MTK_MT6616)
+
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR0 0x79048041
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR1 0x18040F00
+
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR0 0x82040061
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR1 0x18040E00
+
+#define WIFI_CUSTOM_DUAL_ACL_BTCR0 0x79000061
+#define WIFI_CUSTOM_DUAL_ACL_BTCR1 0x08040F00
+
+#define WIFI_CUSTOM_DUAL_MIX_BTCR0 0x79000061
+#define WIFI_CUSTOM_DUAL_MIX_BTCR1 0x08040F00
+
+#else
+
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR0 0x82048041
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR1 0x19040F00
+
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR0 0x82040061
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR1 0x19040E00
+
+#define WIFI_CUSTOM_DUAL_ACL_BTCR0 0x82000061
+#define WIFI_CUSTOM_DUAL_ACL_BTCR1 0x09040F00
+
+#define WIFI_CUSTOM_DUAL_MIX_BTCR0 0x82000061
+#define WIFI_CUSTOM_DUAL_MIX_BTCR1 0x09040F00
+
+#endif
+
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR2 0x0F0001D0
+#define WIFI_CUSTOM_SINGLE_ACL_BTCR3 0x0200000A
+
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR2 0x00000000
+#define WIFI_CUSTOM_SINGLE_MIX_BTCR3 0x00000000
+
+#define WIFI_CUSTOM_DUAL_ACL_BTCR2 0x0A0001D0
+#define WIFI_CUSTOM_DUAL_ACL_BTCR3 0x02000000
+
+#define WIFI_CUSTOM_DUAL_MIX_BTCR2 0x00000000
+#define WIFI_CUSTOM_DUAL_MIX_BTCR3 0x00000000
+
+#define WIFI_CUSTOM_BT_SETTING 1
+#define WIFI_CUSTOM_SINGLE_ANT 0
+#define WIFI_CUSTOM_BT_PROFILE 0
+#define WIFI_CUSTOM_PTA_ENABLED 0
+
+#define WIFI_CUSTOM_MAC_ADDRESS {0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+#define WIFI_CUSTOM_COUNTRY_CODE {0x0000, 0x0000, 0x0000, 0x0000}
+#define WIFI_CUSTOM_UAPSD_AC 0xFF
+#define WIFI_CUSTOM_POWER_MODE 2
+#define WIFI_CUSTOM_ATIM_WINDOW 0
+#define WIFI_CUSTOM_VOIP_INTERVAL 0
+#define WIFI_CUSTOM_POLL_INTERVAL 0
+#define WIFI_CUSTOM_POLL_INTERVAL_B 500
+#define WIFI_CUSTOM_L3_PKT_FILTER_EN 0
+#define WIFI_CUSTOM_ADHOC_MODE 1
+#define WIFI_CUSTOM_ROAMING_EN 1
+
+#define WIFI_CUSTOM_MULTI_DOMAIN_CAP 0
+
+#define WIFI_CUSTOM_GPIO2_MODE 0
+
+#define WIFI_CUSTOM_VI_AIFSN_BIAS 0
+#define WIFI_CUSTOM_VI_MAX_TXOP_LIMIT 0xFFFF
+
+#define WIFI_CUSTOM_INIT_DELAY_IND 100
+
+#define WIFI_CUSTOM_USE_WAPI 0
+
+#define WIFI_CUSTOM_DAISY_CHAIN_EN 0
+
+#define WIFI_CUSTOM_LED_BLINK_MODE 3
+#define WIFI_CUSTOM_LED_BLINK_ON_TIME 80
+#define WIFI_CUSTOM_LED_BLINK_OFF_TIME 24
+
+#define WIFI_CUSTOM_WMM_PS_EN 0
+#define WIFI_CUSTOM_MULTI_DTIM_WAKE 300
+
+#define WIFI_CUSTOM_RESERVED { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/MTK_LICENSE b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/MTK_LICENSE
new file mode 100644
index 0000000..901b162
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/MTK_LICENSE
@@ -0,0 +1,35 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein
+is confidential and proprietary to MediaTek Inc. and/or its licensors.
+Without the prior written permission of MediaTek inc. and/or its licensors,
+any reproduction, modification, use or disclosure of MediaTek Software,
+and information contained herein, in whole or in part, shall be strictly prohibited.
+
+MediaTek Inc. (C) 2018. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+
+The following software/firmware and/or related documentation ("MediaTek Software")
+have been modified by MediaTek Inc. All revisions are subject to any receiver's
+applicable license agreements with MediaTek Inc.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/NOTICE b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/NOTICE
new file mode 100644
index 0000000..c3f777d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/NOTICE
@@ -0,0 +1,4 @@
+This MediaTek software package contains software with the following notices and under the following licenses:
+
+=============================================================================
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/README b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/README
new file mode 100644
index 0000000..23743e7
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/README
@@ -0,0 +1,38 @@
+This directory contains NvRAM libfile_op interface, which defines the interface of
+libfile_op and is used to build a libfile_op related shared library.
+
+
+WHAT IT DOES?
+=============
+It provide interface to backup NvRAM data to backup partition.
+and restore NvRAM partition when fielsystem is empty.
+Without NvRAM backup or restore feature, factory data maybe lost in some
+case.
+
+
+HOW IT WAS BUILT?
+==================
+
+It needs the following libs from AOSP:
+1. libc.so
+2. libcutils.so
+
+and the following libs from MediaTek:
+1. libnvram.so
+2. libcustom_nvram.so
+
+
+All source/dependency modules of this module are already put in
+'vendor/mediatek/libs' folder.
+
+
+HOW TO USE IT?
+==============
+
+Files in this directory is used to
+generate a shared library 'libfile_op.so'.
+
+The shared library 'libfile_op.so' is loaded and invoked by
+meta tool for backup, invoked by NvRAM daemon tool for restore operation.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c
new file mode 100644
index 0000000..0de1590
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.c
@@ -0,0 +1,7804 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * libfile_op.c
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * driver main function
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ *******************************************************************************/
+#include <sys/types.h>
+//add for log
+#include <unistd.h>
+#include <time.h>
+//add for log
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <dirent.h>
+#include <string.h>
+#include <sys/mount.h>
+#include <sys/ioctl.h>
+#include <linux/fs.h>
+#include "libfile_op.h"
+#include "libnvram_log.h"
+#include "libnvram.h"
+#include "CFG_file_public.h"
+//#include "../../../../kernel/include/mtd/mtd-abi.h"
+#include <mtd/mtd-abi.h>
+//#include "android_filesystem_config.h"
+#include <pthread.h>
+// NVRAM Data Size About 1MB
+//#define BinTitleSize 128*1*1024
+//#define BinContentSize 128*7*1024
+
+#define MTK_WRITE_ON_PROTECTION
+#define AID_SYSTEM 0
+#define AID_BLUETOOTH 0
+#define AID_AUDIO 0
+
+#define SHRT_MAX 0x7fff
+#define INT_MAX 0x7fffffff
+
+#define Loop_num 4096
+#define MaxFileNum 936
+#define INVALID_HANDLE_VALUE -1
+
+typedef struct {
+ unsigned int ulCheckSum;
+ unsigned int iCommonFileNum;
+ unsigned int iCustomFileNum;
+} BackupFileInfo;
+typedef struct {
+ char cFileName[128];
+ unsigned int iLID;
+} FileName;
+
+typedef struct {
+ char cCheckFileName[128];
+ int iCheckFileIndex;
+} CheckFileName;
+
+typedef struct {
+ char cRecordCallerName[128];
+ int iRecordCallerIndex;
+} RecordCallerName;
+
+
+//#define FILETITLE_START_BLOCK IMAGE_MTK_META_START_BLOCK
+//#define FILETILE_BLOCK_SIZE 1
+//#define CONTENT_START_BLOCK (FILETITLE_START_BLOCK + FILETILE_BLOCK_SIZE)
+//#define CONTENT_BLOCK_SIZE 7
+
+static const char *g_pcNVM_AllFile = "/mnt/vendor/nvdata/AllFile";
+static const char *g_pcNVM_AllMap = "/mnt/vendor/nvdata/AllMap";
+static const char *g_pcNVM_AllFile_Check = "/mnt/vendor/nvdata/AllFileCheck";
+static const char *g_pcNVM_AllMap_Check = "/mnt/vendor/nvdata/AllMapCheck";
+static const char *g_pcNVM_Flag =
+ "/mnt/vendor/nvdata/RestoreFlag";//The File Will be Created after restore
+static const char *g_pcNVM_BackFlag =
+ "/mnt/vendor/nvdata/BackupFlag";//The file will be updated after modifying important data
+
+static const char *g_pcNVM_APCalFile = "/mnt/vendor/nvdata/APCFG/APRDCL";
+static const char *g_pcNVM_APRdebFile = "/mnt/vendor/nvdata/APCFG/APRDEB";
+static const char *g_pcNVM_MDCalFile = "/mnt/vendor/nvdata/md/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MDRdebFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MDImptFile = "/mnt/vendor/nvdata/md/NVRAM/IMPORTNT";
+static const char *g_pcNVM_MDDataFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_DATA";
+static const char *g_pcNVM_MDCoreFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_CORE";
+//Add for second modem for MT658*
+static const char *g_pcNVM_MD2CalFile = "/mnt/vendor/nvdata/md2/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD2RdebFile = "/mnt/vendor/nvdata/md2/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD2ImptFile = "/mnt/vendor/nvdata/md2/NVRAM/IMPORTNT";
+//End of Comment
+
+/*Add for C2K modem*/
+static const char *g_pcNVM_MD3CalFile = "/mnt/vendor/nvdata/md3/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD3RdebFile = "/mnt/vendor/nvdata/md3/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD3ImptFile = "/mnt/vendor/nvdata/md3/NVRAM/IMPORTNT";
+
+
+//LTE support
+
+static const char *g_pcNVM_MD5CalFile = "/mnt/vendor/nvdata/md5/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD5RdebFile = "/mnt/vendor/nvdata/md5/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD5ImptFile = "/mnt/vendor/nvdata/md5/NVRAM/IMPORTNT";
+
+
+static const char *g_pcNVM_Via = "/mnt/vendor/nvdata/md_via";
+
+static const char *g_pcBKP_APCalFile = "/backup/APCFG/APRDCL";
+static const char *g_pcBKP_APRdebFile = "/backup/APCFG/APRDEB";
+static const char *g_pcBKP_MDCalFile = "/backup/md/NVRAM/CALIBRAT";
+static const char *g_pcBKP_MDRdebFile = "/backup/md/NVRAM/NVD_IMEI";
+static const char *g_pcBKP_MDImptFile = "/backup/md/NVRAM/IMPORTNT";
+static const char *g_pcBKP_MDDataFile = "/backup/md/NVRAM/NVD_DATA";
+static const char *g_pcBKP_MDCoreFile = "/backup/md/NVRAM/NVD_CORE";
+static const char *g_pcNVM_ModomBackNum =
+ "/mnt/vendor/nvdata/md/NVRAM/IMPORTNT/MP0D_000";////The file will be updated after modifying MD important data
+
+unsigned int gFileStartAddr = 0;
+pthread_mutex_t gFileStartAddrlock = PTHREAD_MUTEX_INITIALIZER;
+
+extern int nvram_platform_log_block;
+extern int nvram_platform_resv_block;
+extern int nvram_platform_DM_block;
+extern int nvram_platform_header_offset;
+#define min(a,b) ((a) <= (b) ? (a) : (b))
+#define CHECK_FILE_EXIST_NUMBER 10
+#define CHECK_FILE_EXIST_MARK 0x54535845
+unsigned int gFileExistMark[CHECK_FILE_EXIST_NUMBER] = {0};
+extern FileName aPerformance[];
+extern FileName aBackupToBinRegion[];
+extern CheckFileName aCheckExistList[];
+extern RecordCallerName aRecordCallerList[];
+extern unsigned int g_i4CFG_File_Count;
+extern const unsigned int g_Backup_File_Count;
+extern const unsigned int g_Check_File_Count;
+extern const unsigned int g_Performance_File_Count;
+extern unsigned int g_i4CFG_File_Custom_Count;
+extern const unsigned int g_RecordCaller_Count;
+
+extern int nvram_misc_log_feature;
+extern int nvram_check_exist_feature;
+extern int nvram_read_back_feature;
+extern int nvram_check_exist_block_offset;
+extern int nvram_platform_layout_version;
+pthread_mutex_t dirlock = PTHREAD_MUTEX_INITIALIZER;
+
+extern char g_NVRAM_BACKUP_DEVICE[128];
+
+int isWriteOnProtection() {
+ #ifdef MTK_WRITE_ON_PROTECTION
+ return 1;
+ #endif
+ return 0;
+}
+static int open_file_with_dirs(const char *fn, mode_t mode) {
+ char tmp[PATH_MAX];
+ int i = 0;
+ int filedesc = 0;
+ struct stat info;
+ int val = 0;
+
+ umask(000);
+ pthread_mutex_lock(&dirlock);
+ while (*fn) {
+ tmp[i] = *fn;
+
+ if (*fn == '/' && i) {
+ tmp[i] = '\0';
+ if (access(tmp, F_OK) != 0) {
+ if (mkdir(tmp, 0771) == -1) {
+ NVRAM_LOG("mkdir error! %s\n", (char*)strerror(errno));
+ if (errno != EEXIST) {
+ pthread_mutex_unlock(&dirlock);
+ return -1;
+ }
+ }
+#if 1
+ val = stat(tmp, &info);
+ if ((val == 0)) {
+ //maybe meta tool operate these files
+ if (strstr(tmp, "/media")) {
+ if (-1 == chown(tmp, -1, AID_AUDIO))
+ NVRAM_LOG("change dir group owner failed(media):%s\n", (char*)strerror(errno));
+ } else if (strstr(tmp, "BT_Addr")) {
+ if (-1 == chown(tmp, -1, AID_BLUETOOTH))
+ NVRAM_LOG("change dir group owner failed(bt):%s\n", (char*)strerror(errno));
+ } else {
+ if (-1 == chown(tmp, -1, AID_SYSTEM))
+ NVRAM_LOG("change dir group owner failed:%s\n", (char*)strerror(errno));
+ }
+ }
+#endif
+ }
+ tmp[i] = '/';
+ }
+ i++;
+ fn++;
+ }
+ tmp[i] = '\0';
+ filedesc = open(tmp, O_TRUNC | O_CREAT | O_WRONLY, mode);
+ if (-1 != filedesc) {
+ val = stat(tmp, &info);
+#if 1
+ if ((val == 0) ) {
+ if (strstr(tmp, "/media")) {
+ if (-1 == chown(tmp, -1, AID_AUDIO))
+ NVRAM_LOG("change file group owner failed(media):%s\n", (char*)strerror(errno));
+ } else if (strstr(tmp, "BT_Addr")) {
+ if (-1 == chown(tmp, -1, AID_BLUETOOTH))
+ NVRAM_LOG("change file group owner failed(bt):%s\n", (char*)strerror(errno));
+ } else {
+ if (-1 == chown(tmp, -1, AID_SYSTEM))
+ NVRAM_LOG("change file group owner failed:%s\n", (char*)strerror(errno));
+ }
+ if (!S_ISDIR(info.st_mode)) {
+ if (-1 == chmod(tmp, mode))
+ NVRAM_LOG("chmod file failed: %s\n", (char*)strerror(errno));
+ }
+ }
+#endif
+ }
+ pthread_mutex_unlock(&dirlock);
+ return filedesc;
+
+}
+
+#if 0
+//-----------------------------------------------------------------------------
+static bool FileOp_CopyFile(const char* src, const char* dst) {
+ unsigned char acBuffer[1024];
+ int iSrc, iDst, iFileSize, iWriteSize, iSize;
+ bool bRet = false;
+ struct stat statbuf;
+
+ iSrc = open(src, O_RDONLY, S_IRUSR);
+ iDst = open(dst, O_CREAT | O_WRONLY, S_IRUSR | S_IWUSR);
+ if (-1 == iSrc || -1 == iDst) {
+ goto EXIT;
+ }
+
+ fstat(iSrc, &statbuf);
+ iFileSize = (int)statbuf.st_size;
+
+ while (iFileSize > 0) {
+ iWriteSize = min(iFileSize, (int)sizeof(acBuffer));
+ iSize = (int)read(iSrc, acBuffer, iWriteSize);
+ if (iSize != iWriteSize) {
+ goto EXIT;
+ }
+ iSize = (int)write(iDst, acBuffer, iWriteSize);
+ if (iSize != iWriteSize) {
+ goto EXIT;
+ }
+ iFileSize -= iWriteSize;
+ }
+
+ bRet = true;
+EXIT:
+ if (iDst != -1) {
+ close(iDst);
+ }
+ if (iSrc != -1) {
+ close(iSrc);
+ }
+ return bRet;
+}
+//-----------------------------------------------------------------------------
+bool FileOp_CreateNVMFolder(void) {
+ if (0 != mkdir("/nvram/APCFG", S_IRUSR | S_IWUSR)) {
+ NVBAK_LOG("Err Create Directory APCFG Fail\n");
+ return false;
+ }
+
+ if (0 != mkdir(g_pcNVM_APCalFile, S_IRUSR | S_IWUSR)) {
+ NVBAK_LOG("Err CreateDirectory APCFG Fail\n");
+ return false;
+ }
+
+ if (0 != mkdir(g_pcNVM_APRdebFile, S_IRUSR | S_IWUSR)) {
+ NVBAK_LOG("Err CreateDirectory APCFG Fail\n");
+ return false;
+ }
+
+ NVBAK_LOG("CreateData Folder Success!\n");
+ return true;
+
+}
+//-----------------------------------------------------------------------------
+bool FileOp_RestoreData(MetaData eRestoreType ) {
+ DIR *dir;
+ struct dirent *entry;
+ struct stat statbuf;
+ const char* lpSrcDirName = NULL;
+ const char* lpDstDirName = NULL;
+ char acSrcPathName[MAX_NAMESIZE];
+ char acDstPathName[MAX_NAMESIZE];
+ bool bRet = true;
+
+ switch (eRestoreType) {
+ case APBOOT:
+ lpSrcDirName = g_pcBKP_APRdebFile;
+ lpDstDirName = g_pcNVM_APRdebFile;
+ break;
+
+ case MDBOOT:
+ lpSrcDirName = g_pcBKP_MDRdebFile;
+ lpDstDirName = g_pcNVM_MDRdebFile;
+ break;
+
+ case APCLN:
+ lpSrcDirName = g_pcBKP_APCalFile;
+ lpDstDirName = g_pcNVM_APCalFile;
+ break;
+
+ case MDCLN:
+ lpSrcDirName = g_pcBKP_MDCalFile;
+ lpDstDirName = g_pcNVM_MDCalFile;
+ break;
+ case ALL:
+ default:
+ return false;
+ break;
+ }
+
+ dir = opendir(lpSrcDirName);
+ if (dir == NULL) {
+ printf("ERROR FileOp_RestoreData open dir: %s", lpSrcDirName);
+ return false;
+ }
+
+ while (1) {
+ entry = readdir(dir);
+ if (entry == NULL) {
+ break;
+ }
+ lstat(entry->d_name, &statbuf);
+ /*
+ if (!strcmp(entry->d_name, ".")|| !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+ */
+ if (!S_ISREG(statbuf.st_mode)) {
+ continue;
+ }
+ sprintf(acSrcPathName, "%s/%s", lpSrcDirName, entry->d_name);
+ sprintf(acDstPathName, "%s/%s", lpDstDirName, entry->d_name);
+
+ if (!FileOp_CopyFile(acSrcPathName, acDstPathName)) {
+ printf("ERROR FileOp_RestoreData %s\n", lpSrcDirName);
+ bRet = false;
+ continue;
+ }
+ }
+ closedir(dir);
+ return bRet;
+}
+//-----------------------------------------------------------------------------
+bool FileOp_BackupData(MetaData eBackupType ) {
+ DIR *dir;
+ struct dirent *entry;
+ struct stat statbuf;
+ const char* lpSrcDirName = NULL;
+ const char* lpDstDirName = NULL;
+ char acSrcPathName[MAX_NAMESIZE];
+ char acDstPathName[MAX_NAMESIZE];
+ bool bRet = true;
+
+ switch (eBackupType) {
+ case APBOOT:
+ lpSrcDirName = g_pcNVM_APRdebFile;
+ lpDstDirName = g_pcBKP_APRdebFile;
+ break;
+
+ case MDBOOT:
+ lpSrcDirName = g_pcNVM_MDRdebFile;
+ lpDstDirName = g_pcBKP_MDRdebFile;
+ break;
+
+ case APCLN:
+ lpSrcDirName = g_pcNVM_APCalFile;
+ lpDstDirName = g_pcBKP_APCalFile;
+ break;
+
+ case MDCLN:
+ lpSrcDirName = g_pcNVM_MDCalFile;
+ lpDstDirName = g_pcBKP_MDCalFile;
+ break;
+
+ case ALL:
+ default:
+ return false;
+ break;
+ }
+
+ dir = opendir(lpSrcDirName);
+ if (dir == NULL) {
+ printf("ERROR FileOp_BackupData open dir: %s", lpSrcDirName);
+ return false;
+ }
+
+ while (1) {
+ entry = readdir(dir);
+ if (entry == NULL) {
+ break;
+ }
+ lstat(entry->d_name, &statbuf);
+ /*
+ if (!strcmp(entry->d_name, ".")|| !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+ */
+ if (!S_ISREG(statbuf.st_mode)) {
+ continue;
+ }
+ sprintf(acSrcPathName, "%s/%s", lpSrcDirName, entry->d_name);
+ sprintf(acDstPathName, "%s/%s", lpDstDirName, entry->d_name);
+
+ if (!FileOp_CopyFile(acSrcPathName, acDstPathName)) {
+ printf("ERROR FileOp_BackupData %s\n", lpSrcDirName);
+ bRet = false;
+ continue;
+ }
+ }
+ closedir(dir);
+ return bRet;
+}
+//-----------------------------------------------------------------------------
+bool FileOp_DeleteData(const char* pcDirName) {
+ DIR *dir = NULL;
+ struct dirent *entry;
+ struct stat statbuf;
+ char acLongPathName[MAX_NAMESIZE];
+
+ NVBAK_LOG("Delete Data\n");
+
+ //find the first file
+ dir = opendir(pcDirName);
+ if (dir == NULL) {
+ NVBAK_LOG("Cannot open FindFirstFile file.\n");
+ return false;
+ }
+
+ //get the next nvram file in the folder
+ while (1) {
+ entry = readdir(dir);
+ if (entry == NULL) {
+ break;
+ }
+
+ lstat(entry->d_name, &statbuf);
+ /*
+ if (!strcmp(entry->d_name, ".")|| !strcmp(entry->d_name, "..")) {
+ NVBAK_LOG("open .........input file.\n");
+ continue;
+ }
+ */
+ if (!S_ISREG(statbuf.st_mode)) {
+ continue;
+ }
+
+ NVBAK_LOG("the file is: %c%c%c%c%c%c \n",
+ entry->d_name[0], entry->d_name[1], entry->d_name[2],
+ entry->d_name[3], entry->d_name[4], entry->d_name[5]);
+
+ sprintf(acLongPathName, "%s/%s", pcDirName, entry->d_name);
+
+ remove(acLongPathName);
+ }
+
+ closedir(dir);
+
+ return true;
+}
+//-----------------------------------------------------------------------------
+void FileOp_BackupAll(void ) {
+ FileOp_BackupData(APBOOT);
+ FileOp_BackupData(MDBOOT);
+ FileOp_BackupData(APCLN);
+ FileOp_BackupData(MDCLN);
+}
+//-----------------------------------------------------------------------------
+void FileOp_RestoreAll(void ) {
+ //restore the all files to fat2 partition one by one type
+ FileOp_RestoreData(APBOOT);
+ FileOp_RestoreData(MDBOOT);
+ FileOp_RestoreData(APCLN);
+ FileOp_RestoreData(MDCLN);
+}
+//-----------------------------------------------------------------------------
+void FileOp_DeleteAll(void ) {
+ FileOp_CreateNVMFolder();
+ FileOp_DeleteData(g_pcNVM_APRdebFile);
+ FileOp_DeleteData(g_pcNVM_APCalFile);
+}
+//-----------------------------------------------------------------------------
+void FileOp_DeleteRdebData(void ) {
+ FileOp_CreateNVMFolder();
+ FileOp_DeleteData(g_pcNVM_APRdebFile);
+}
+//-----------------------------------------------------------------------------
+void FileOp_RestoreBootData(void ) {
+ FileOp_RestoreData(APBOOT);
+ FileOp_RestoreData(MDBOOT);
+}
+#endif
+
+//#define Backup_PARTITION 1
+#define CleanBootFlag 0x12345678
+#define BitmapFlag 0xAABBCCDD
+//#define forDMBlockNum 2
+int NvRamBlockNum = 0;
+int BinRegionBlockTotalNum = 0;
+static char *bBadBlockBitMap = NULL;
+bool FileOp_GetBadBlockBitMap(char* cMtdDevName) {
+ int fd, iResult;
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, j, pos = 0, iBlockSize, iBlockNum, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ NVBAK_LOG("[NVRAM]:GetBadBlockBitMap\r\n");
+
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_GetBadBlockBitMap get device info error\r\n");
+
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+
+ iBlockSize = info.erasesize;
+ //iPartitionSize=info.size;
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error,errono:%d,error:%s\r\n", errno,
+ strerror(errno));
+ close(fd);
+ return false;
+ }
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ return false;
+ }
+
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if (lseek(fd, iBlockNum * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVBAK_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ } else {
+ NVBAK_LOG("[NVRAM]:Find bad block bit map!\r\n");
+ bBadBlockBitMap = NULL;
+ bBadBlockBitMap = (char*)malloc(NvRamBlockNum * sizeof(char));
+ if (bBadBlockBitMap == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc bBadBlockBitMap Failed!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(bBadBlockBitMap, tempBitmap1, NvRamBlockNum * sizeof(char));
+ NVBAK_LOG("[NVRAM]:find bBadBlockBitMap!\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return true;
+ }
+
+}
+bool FileOp_SetCleanBootFlag(bool bSetFlag) {
+ int fd, iResult;
+ char cMtdDevName[128] = {0};
+ char *tempBuffer = NULL;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ int iWriteSize, iBlockSize;
+ unsigned int iCleanBootFlag;
+ int i, pos = 0;
+// int iBackup_Partition=get_partition_numb("nvram");
+
+ if (NVM_Init()) {
+ NVBAK_LOG("[NVRAM]:FileOp_SetCleanBootFlag--NVM_Init Fail !!!\n");
+ return false;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+ NVBAK_LOG("[NVRAM]:FileOp_SetCleanBootFlag\n");
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+ if (!FileOp_GetBadBlockBitMap(cMtdDevName)) {
+ NVBAK_LOG("[NVRAM]:GetBadBlockBitMap Failed\r\n");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]:FileOp_SetCleanBootFlag:find BadBlockBitMap\n");
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_SetCleanBootFlag get device info error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if ( fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error %s\r\n", (char*)strerror(errno));
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+
+ NVBAK_LOG("NvRamBlockNum:%d\r\n", NvRamBlockNum);
+ tempBuffer = (char *)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iBlockSize);
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for set cleanboot flag\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ free(bBadBlockBitMap);
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ if (iResult < 0) {
+ NVBAK_LOG("[NVRAM]:mtd read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ //set clean boot flag
+ if (bSetFlag) {
+ *((unsigned int*)(tempBuffer + 2 * sizeof(unsigned int))) = CleanBootFlag;
+ } else {
+ *((unsigned int*)(tempBuffer + 2 * sizeof(unsigned int))) = 0xFFFFFFFF;
+ }
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ erase_info.start = pos * iBlockSize;
+ erase_info.length = iBlockSize;
+
+
+
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+
+ if (!NVM_EraseDeviceBlock(cMtdDevName, erase_info)) {
+ NVBAK_LOG("[NVRAM]:mtd erase error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iResult = write(fd, tempBuffer, iBlockSize);
+ if (iResult != iBlockSize) {
+ NVBAK_LOG("[NVRAM]:mtd write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iResult = read(fd, tempBuffer, iBlockSize);
+ if (iResult < 0 ) {
+ NVBAK_LOG("[NVRAM]:mtd re-read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iCleanBootFlag = *((unsigned int*)(tempBuffer + 2 * sizeof(unsigned int)));
+ NVBAK_LOG("[NVRAM]:set/clear clean boot:%x,pos:%d\n", iCleanBootFlag, pos);
+ if (bSetFlag) {
+ if (iCleanBootFlag != CleanBootFlag) {
+ NVBAK_LOG("[NVRAM]:mtd set clean boot flag error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ } else {
+ if (iCleanBootFlag != 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:mtd set clean boot flag error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ }
+
+ NVBAK_LOG("[NVRAM]:mtd set clean boot flag success\r\n");
+ close(fd);
+ free(tempBuffer);
+ return true;
+}
+
+bool Fileop_SetBackupFileNum(bool bSetFlag) {
+ //int iFileDesc,iResult;
+ int fd, iResult, iFileDesc;
+ char cMtdDevName[128] = { 0 };
+ char *tempBuffer = NULL;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ int iWriteSize, iBlockSize;
+ unsigned int iBackupFileNum = 0, iBackupFileNum1, iMapFileSize, open_error = 0;
+ unsigned short iMDBackupNum = 0, iMDBackupNum1;
+ int i, pos = 0;
+// int iBackup_Partition=get_partition_numb("nvram");
+ NVBAK_LOG("[NVRAM]:Fileop_SetBackupFileNum:find BadBlockBitMap\n");
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+ NVBAK_LOG("[NVRAM]:Fileop_SetBackupFileNum\n");
+ iFileDesc = open(g_pcNVM_BackFlag, O_RDWR);
+ if (iFileDesc == -1) {
+ NVBAK_LOG("[NVRAM]:can not open BackupFileNum Flag\n");
+ ++open_error;
+ } else {
+ if (!NVM_CheckBackFlag(iFileDesc)) {
+ NVBAK_LOG("[NVRAM]:Fileop_SetBackupFileNum Backflag is wrong\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ goto mdflag;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("[NVRAM]:Fileop_SetBackupFileNum lseek error\n");
+ iBackupFileNum = 0;
+ close(iFileDesc);
+ goto mdflag;
+ }
+ iResult = read(iFileDesc, &iBackupFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:can not read BackupFileNum Flag(ignore):%d\n", iResult);
+ iBackupFileNum = 0;
+ unlink(g_pcNVM_BackFlag);
+ }
+ close(iFileDesc);
+ }
+mdflag:
+ iResult = 0;
+ iFileDesc = -1;
+ iFileDesc = open(g_pcNVM_ModomBackNum, O_RDWR);
+ if (iFileDesc == -1) {
+ NVBAK_LOG("[NVRAM]:can not open ModomBackNum Flag\n");
+ ++open_error;
+ } else {
+ if (!NVM_CheckMDBackFlag(iFileDesc)) {
+ NVBAK_LOG("[NVRAM]:MDBackflag is wrong!\n");
+ unlink(g_pcNVM_ModomBackNum);
+ close(iFileDesc);
+ goto readbackupdone;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("Fileop_SetBackupFileNum:lseek MDBackflag error\n");
+ close(iFileDesc);
+ iMDBackupNum = 0;
+ goto readbackupdone;
+ }
+ iResult = read(iFileDesc, &iMDBackupNum, sizeof(unsigned short));
+ if (iResult != sizeof(unsigned short)) {
+ NVBAK_LOG("[NVRAM]:can not read ModomBackNum Flag(ignore):%d\n", iResult);
+ iMDBackupNum = 0;
+ unlink(g_pcNVM_ModomBackNum);
+ }
+ close(iFileDesc);
+ }
+ if (open_error >= 2) {
+ NVBAK_LOG("[NVRAM]:BackupFileNum Flag and ModemBackupNum not exist!\n");
+ }
+ NVBAK_LOG("[NVRAM]:AP modified file Num:%d\n", iBackupFileNum);
+
+ NVBAK_LOG("[NVRAM]:MD modified file Num:%d\n", iMDBackupNum);
+ //search the first avaiable block to write
+readbackupdone:
+ if (!FileOp_GetBadBlockBitMap(cMtdDevName)) {
+ NVBAK_LOG("[NVRAM]:GetBadBlockBitMap Failed\r\n");
+ return false;
+ }
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:Fileop_SetBackupFileNum get device info error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+
+
+ tempBuffer = malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iBlockSize);
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for set cleanboot flag\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ free(bBadBlockBitMap);
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ if (iResult < 0) {
+ NVBAK_LOG("[NVRAM]:mtd read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ iMapFileSize = *((unsigned int*)(tempBuffer));
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) > (iBlockSize - sizeof(
+ unsigned int) - sizeof(unsigned short))) {
+ NVBAK_LOG("[NVRAM]:there is no space for storing backup file num\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ if (bSetFlag) {
+ *((unsigned int*)(tempBuffer + 3 * sizeof(unsigned int) + iMapFileSize)) =
+ iBackupFileNum;
+ *((unsigned short*)(tempBuffer + 3 * sizeof(unsigned int) + iMapFileSize +
+ sizeof(unsigned int))) = iMDBackupNum;
+ } else {
+ *((unsigned int*)(tempBuffer + 3 * sizeof(unsigned int) + iMapFileSize)) =
+ 0xFFFFFFFF;
+ *((unsigned short*)(tempBuffer + 3 * sizeof(unsigned int) + iMapFileSize +
+ sizeof(unsigned int))) = 0xFFFF;
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ erase_info.start = pos * iBlockSize;
+ erase_info.length = iBlockSize;
+
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+
+ if (!NVM_EraseDeviceBlock(cMtdDevName, erase_info)) {
+ NVBAK_LOG("[NVRAM]:mtd erase error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iResult = write(fd, tempBuffer, iBlockSize);
+ if (iResult != iBlockSize) {
+ NVBAK_LOG("[NVRAM]:mtd write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0 ){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iResult = read(fd, tempBuffer, iBlockSize);
+ if (iResult < 0 ) {
+ NVBAK_LOG("[NVRAM]:mtd re-read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+
+ iBackupFileNum1 = *((unsigned int*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize));
+ iMDBackupNum1 = *((unsigned short*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize + sizeof(unsigned int)));
+ NVBAK_LOG("[NVRAM]:set AP backup file num:%d,MD backup file num:%d,pos:%d\n",
+ iBackupFileNum1, iMDBackupNum1, pos);
+ if (bSetFlag) {
+ if (iBackupFileNum1 != iBackupFileNum || iMDBackupNum1 != iMDBackupNum) {
+ NVBAK_LOG("[NVRAM]:mtd set File Backup Num error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ } else {
+ if (iBackupFileNum1 != 0xFFFFFFFF || iMDBackupNum1 != 0xFFFF) {
+ NVBAK_LOG("[NVRAM]:set File Backup Num error\r\n");
+ close(fd);
+ free(tempBuffer);
+ return false;
+ }
+ }
+
+ NVBAK_LOG("[NVRAM]:Fileop_SetBackupFileNum success\r\n");
+ close(fd);
+ free(tempBuffer);
+ return true;
+}
+bool FileOp_GetCleanBootFlag(unsigned int * iCleanBootFlag) {
+ int fd, iResult;
+ char cMtdDevName[128] = { 0 };
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, j, pos = 0, iBlockSize, iBlockNum, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ //int iBackup_Partition=get_partition_numb("nvram");
+
+
+ if (iCleanBootFlag == NULL) {
+ NVBAK_LOG("[NVRAM]:the pointer of iCleanBootFlag is error\r\n");
+ return false;
+ }
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+
+
+
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_GetCleanBootFlag get device info error\r\n");
+ return false;
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+ iBlockSize = info.erasesize;
+ //iPartitionSize=info.size;
+ BinRegionBlockTotalNum = info.size / iBlockSize;
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ return false;
+ }
+
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if (lseek(fd, iBlockNum * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVBAK_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ #if 0
+ for (i = 0; i < iBlockNum; i++) {
+ NVBAK_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, tempBitmap1[i]);
+ }
+ #endif
+ for (i = 0; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:can not find map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = lseek(fd, pos * iBlockSize + 2 * sizeof(unsigned int), SEEK_SET);
+ if (iResult != (int)(pos * iBlockSize + 2 * sizeof(unsigned int))) {
+ NVBAK_LOG("[NVRAM]:mtd lseek error\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = read(fd, iCleanBootFlag, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:mtd read error\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]:Clean Boot Flag:%x\n", *iCleanBootFlag);
+ NVBAK_LOG("[NVRAM]:mtd get CleanBoot Flag success\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return true;
+
+}
+
+bool FileOp_CmpBackupFileNum() {
+ unsigned int iSavedAPBackupFileNum = 0, iAPBackupFileNum = 0, open_error = 0;
+ unsigned short iSavedMDBackupFileNum = 0, iMDBackupFileNum = 0;
+ int iFileDesc, iResult, iFileDesc_Flag;
+ struct stat statbuf;
+ unsigned int iCompleteFlag;
+
+ NVBAK_LOG("[NVRAM]:FileOp_CmpBackupFileNum\n");
+ iFileDesc = open(g_pcNVM_BackFlag, O_RDWR);
+ if (iFileDesc == -1) {
+ NVBAK_LOG("[NVRAM]:can not open BackupFileNum Flag1,maybe this file doesn't exist\n");
+ //there is no important data to modify
+ ++open_error;
+ } else {
+ if (!NVM_CheckBackFlag(iFileDesc)) {
+ NVBAK_LOG("[NVRAM]:Backflag is wrong\n");
+ goto recover;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("FileOp_CmpBackupFileNum:lseek BackupFileNum error\n");
+ close(iFileDesc);
+ return true;
+ }
+ iResult = read(iFileDesc, &iAPBackupFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:can not read BackupFileNum Flag:%d\n", iResult);
+ close(iFileDesc);
+ return true;
+ }
+ close(iFileDesc);
+ }
+
+ iFileDesc = open(g_pcNVM_ModomBackNum, O_RDWR);
+ if (iFileDesc == -1) {
+ NVBAK_LOG("[NVRAM]:can not open ModomBackNum Flag\n");
+ ++open_error;
+ } else {
+ if (!NVM_CheckMDBackFlag(iFileDesc)) {
+ NVBAK_LOG("[NVRAM]:MDBackflag is wrong!\n");
+ unlink(g_pcNVM_ModomBackNum);
+ close(iFileDesc);
+ return true;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("FileOp_CmpBackupFileNum:lseek MDBackflag error\n");
+ close(iFileDesc);
+ return true;
+ }
+ iResult = read(iFileDesc, &iMDBackupFileNum, sizeof(unsigned short));
+ if (iResult != sizeof(unsigned short)) {
+ NVBAK_LOG("[NVRAM]:can not read ModomBackNum Flag:%d\n", iResult);
+ close(iFileDesc);
+ return true;
+ }
+ if (iMDBackupFileNum == 0)
+ ++open_error;
+ close(iFileDesc);
+ }
+ if (open_error >= 2) {
+ NVBAK_LOG("[NVRAM]:BackupFileNum Flag and ModemBackupNum not exist!\n");
+ return true;
+ }
+
+ if (NVM_GetBackupFileNum(&iSavedAPBackupFileNum, &iSavedMDBackupFileNum)) {
+ if (iSavedAPBackupFileNum != iAPBackupFileNum
+ || iSavedMDBackupFileNum != iMDBackupFileNum) {
+ iResult = stat(g_pcNVM_Flag, &statbuf);
+ if (-1 == iResult) {
+ NVBAK_LOG("[NVRAM]:Last Restore is failed, can not trigger auto backup!!!");
+ return true;
+ }
+ iFileDesc_Flag = open(g_pcNVM_Flag, O_RDONLY);
+ if (-1 == iFileDesc_Flag) {
+ NVBAK_LOG("[NVRAM]:Open Restore Flag file failed!!!");
+ return true;
+ }
+ iResult = read(iFileDesc_Flag, &iCompleteFlag, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:Read retore Flag file failed!!!");
+ close(iFileDesc_Flag);
+ return true;
+ }
+ if (0x12345678 != iCompleteFlag) {
+ NVBAK_LOG("[NVRAM]:Restore Flag is error!!!");
+ close(iFileDesc_Flag);
+ return true;
+ }
+ close(iFileDesc_Flag);
+
+ NVBAK_LOG("[NVRAM]:SavedAPBackupFileNum:%d,APBackupFileNum:%d\n",
+ iSavedAPBackupFileNum, iAPBackupFileNum);
+ NVBAK_LOG("[NVRAM]:SavedMDBackupFileNum:%d,MDBackupFileNum:%d\n",
+ iSavedMDBackupFileNum, iMDBackupFileNum);
+ NVBAK_LOG("[NVRAM]:Saved and Current NOT match!Back up!\n");
+ //close(iFileDesc);
+ return false;
+ }
+ } else {
+ NVBAK_LOG("[NVRAM]:Get SavedBackupFileNum Fail\n");
+ //close(iFileDesc);
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]:SavedAPBackupFileNum:%d,APBackupFileNum:%d SUCCESS\n",
+ iSavedAPBackupFileNum, iAPBackupFileNum);
+ NVBAK_LOG("[NVRAM]:SavedMDBackupFileNum:%d,MDBackupFileNum:%d SUCCESS\n",
+ iSavedMDBackupFileNum, iMDBackupFileNum);
+ NVBAK_LOG("[NVRAM]:Saved and Current match!\n");
+ return true;
+recover:
+ if (NVM_GetBackupFileNum(&iSavedAPBackupFileNum, &iSavedMDBackupFileNum)) {
+ close(iFileDesc);
+ iFileDesc = open(g_pcNVM_BackFlag, O_TRUNC | O_RDWR);
+ if(INVALID_HANDLE_VALUE == iFileDesc)
+ {
+ NVBAK_LOG("[NVRAM]: cannot open backup flag\n");
+ return false;
+ }
+ if (iSavedAPBackupFileNum == 0xFFFFFFFF ) {
+ NVBAK_LOG("[NVRAM]:FileOp_CmpBackupFileNum:SavedAPBackupFileNum:%d\n",
+ iSavedAPBackupFileNum);
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ return true;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("FileOp_CmpBackupFileNum:lseek error\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ return true;
+ }
+ iResult = write(iFileDesc, &iSavedAPBackupFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CmpBackupFileNum:can not write BackupFileNum Flag:%d\n",
+ iResult);
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ return true;
+ }
+ if (!NVM_ComputeBackflagCheckSum(iFileDesc)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CmpBackupFileNum:Backflag compute check sum failed(ignore)\r\n");
+ unlink(g_pcNVM_BackFlag);
+ }
+ close(iFileDesc);
+ return true;
+ } else {
+ NVBAK_LOG("[NVRAM]:FileOp_CmpBackupFileNum:Get SavedBackupFileNum Fail\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ return true;
+ }
+}
+
+bool FileOp_CreateBinRegionBadBlockBitMap() {
+ int fd, iResult, i;
+ char cMtdDevName[128] = {0};
+ int iWriteSize, iBlockSize, iPartitionSize, iBlockNum;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //int iBackup_Partition=get_partition_numb("nvram");
+ /*
+ if(TotalBlockNum==NULL)
+ {
+ NVBAK_LOG("[NVRAM]:input pointer of blocknum is NULL\r\n");
+ return false;
+ }
+ */
+
+
+ NVBAK_LOG("[NVRAM]:FileOp_CreateBinRegionBadBlockBitMap:%s\n", cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ NVBAK_LOG("[NVRAM]:FileOp_CreateBinRegionBadBlockBitMap:%s\n", cMtdDevName);
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CreateBinRegionBadBlockBitMap get device info error\r\n");
+ return false;
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+
+ BinRegionBlockTotalNum = iPartitionSize / iBlockSize - nvram_platform_log_block
+ - nvram_platform_resv_block;
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+ bBadBlockBitMap = NULL;
+ bBadBlockBitMap = (char*)malloc(NvRamBlockNum);
+ if (bBadBlockBitMap == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc bBadBlockBitMap error!!\r\n");
+ close(fd);
+ return false;
+ }
+ memset(bBadBlockBitMap, 0, (NvRamBlockNum * sizeof(char)));
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:mtd get info:iBlockSize:%d,iPartitionSize:%d,iBlockNum:%d\n",
+ iBlockSize, iPartitionSize, iBlockNum);
+
+ for (i = 0; i < iBlockNum; i++) {
+ erase_info.start = i * iBlockSize;
+ erase_info.length = iBlockSize;
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+
+ if (!NVM_EraseDeviceBlock(cMtdDevName, erase_info)) {
+ NVBAK_LOG("[NVRAM]:mtd erase error,block id:%d\r\n", i);
+ bBadBlockBitMap[i] = 1;
+ } else {
+ bBadBlockBitMap[i] = 0;
+ }
+
+ }
+ }
+ close(fd);
+ #if 0
+ for (i = 0; i < iBlockNum; i++) {
+ NVBAK_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, bBadBlockBitMap[i]);
+ }
+ #endif
+ return true;
+
+}
+
+bool FileOp_CheckFileExist() {
+ int i, fd, iResult, pos;
+ unsigned int iWriteSize, iBlockSize, iPartitionSize;
+ struct stat st;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ loff_t start_address;
+ char cMtdDevName[128] = {0};
+
+
+
+ if (nvram_platform_layout_version == 1) {
+ NVBAK_LOG("[NVRAM]:FileOp_CheckFileExist not support in this layout.\r\n");
+ return false;
+ }
+
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ memset(gFileExistMark, 0, sizeof(gFileExistMark));
+ gFileExistMark[0] = CHECK_FILE_EXIST_MARK;
+ if (g_Check_File_Count == 0)
+ return true;
+ for (i = 0; i < g_Check_File_Count; i++) {
+ if (stat(aCheckExistList[i].cCheckFileName, &st) == 0) {
+ gFileExistMark[aCheckExistList[i].iCheckFileIndex / 32 + 1] |= (0x1U <<
+ (aCheckExistList[i].iCheckFileIndex - (aCheckExistList[i].iCheckFileIndex / 32)
+ * 32));
+ } else {
+ NVBAK_LOG("FileOp_CheckFileExist stat %s fail: %s",
+ aCheckExistList[i].cCheckFileName, (char*)strerror(errno));
+ gFileExistMark[aCheckExistList[i].iCheckFileIndex / 32 + 1] &= ~(0x1U <<
+ (aCheckExistList[i].iCheckFileIndex - (aCheckExistList[i].iCheckFileIndex / 32)
+ * 32));
+ }
+ }
+
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:FileOp_CheckFileExist open /dev/nvram error\r\n");
+ return false;
+ }
+
+
+
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CheckFileExist get device info error\r\n");
+ close(fd);
+ return false;
+ }
+ start_address = info.size - ((loff_t)nvram_platform_log_block +
+ (loff_t)nvram_check_exist_block_offset ) * (loff_t)info.erasesize;
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ erase_info.start = start_address ;
+ erase_info.length = info.erasesize;
+ if (!NVM_EraseDeviceBlock(cMtdDevName, erase_info)) {
+ NVRAM_LOG("[NVRAM]:FileOp_CheckFileExist erase block fail!!!\n");
+ close(fd);
+ return false;
+ }
+ }
+ iResult = lseek(fd, start_address , SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVRAM]:FileOp_CheckFileExist seek log device fail!!!\n");
+ close(fd);
+ return false;
+ }
+ iResult = write(fd, gFileExistMark, CHECK_FILE_EXIST_NUMBER * 4);
+ if (iResult != (int)(CHECK_FILE_EXIST_NUMBER * 4)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CheckFileExist write mark error\r\n");
+ close(fd);
+ return false;
+ }
+ close(fd);
+ NVBAK_LOG("FileOp_CheckFileExist exist .\n");
+ return true;
+}
+
+bool FileOp_CreatMdFileList(const char* SrcDirName)
+{
+ DIR *dir = NULL;
+ struct dirent *entry;
+ char filelist[MAX_NAMESIZE];
+ char filelistPathName[MAX_NAMESIZE];
+ int filelistfd;
+ int pos =0;
+ int iResult =0;
+ NVBAK_LOG("open dir %s !", SrcDirName);
+ if (SrcDirName) {
+ dir = opendir(SrcDirName);
+ }
+
+ if (dir == NULL)
+ {
+ NVBAK_LOG("FileOp_CreatMdFileList %s ,this dir not exist!", SrcDirName);
+ return false;
+ }
+ sprintf(filelistPathName, "%s/FILELIST", SrcDirName);
+ filelistfd = open(filelistPathName, O_TRUNC|O_CREAT|O_WRONLY, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
+ if (filelistfd < 0){
+ NVBAK_LOG("[NVRAM]: open error. (errno=%d)", errno);
+ closedir(dir);
+ return false;
+ }
+ while(1)
+ {
+ entry = readdir(dir);
+ if (entry == NULL)
+ {
+ break;
+ }
+ if (!strcmp(entry->d_name, ".")|| !strcmp(entry->d_name, ".."))
+ {
+ continue;
+ }
+ if (snprintf(filelist, sizeof(filelist), "%s/%s", SrcDirName, entry->d_name) < 0) {
+ NVBAK_LOG("[FileOp_CreatMdFileList sprintf() error\r\n");
+ close(filelistfd);
+ closedir(dir);
+ return false;
+ }
+ NVBAK_LOG("FileOp_CreatMdFileList: (%s)\n", filelist);
+ iResult = write(filelistfd,entry->d_name,strlen(entry->d_name)+1);
+ if (iResult != (strlen(entry->d_name)+1)) {
+ NVBAK_LOG("[FileOp_CreatMdFileList write error\r\n");
+ close(filelistfd);
+ closedir(dir);
+ return false;
+ }
+ pos+=strlen(entry->d_name)+1;
+ iResult = lseek(filelistfd, pos , SEEK_SET);
+ if(iResult != (int)(pos))
+ {
+ NVBAK_LOG("FileOp_CreatMdFileList lseek error\r\n");
+ close(filelistfd);
+ closedir(dir);
+ return false;
+ }
+ }
+ if(-1 == chmod(filelistPathName, 0644))
+ NVRAM_LOG("chmod file failed: %s\n", (char*)strerror(errno));
+ close(filelistfd);
+ closedir(dir);
+ return true;
+}
+bool FileOp_BackupToBinRegion_All( ) {
+ bool bRet = true;
+ struct stat st;
+ char *tempBuffer = NULL;
+ char *BitMapBuffer = NULL;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ unsigned int iMapFileSize, iDatFileSize, iWriteSize, iBlockSize, iPartitionSize;
+ unsigned int iMemSize;
+ unsigned int iBitmapFlag = BitmapFlag;
+ int iFileDesc_file, iFileDesc_map, fd, iResult, i, j, m, iWriteTime, pos = 0,
+ iFreeBlockNum = 0;
+ int pos_old = 0;
+ int iReserveBlockCount = 0;
+ int iReservePos = 0;
+ // int iBackup_Partition=get_partition_numb("nvram");
+
+ char cMtdDevName[128] = {0};
+ NVBAK_LOG("Enter BackupToBinRegion_all\n");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/CALIBRAT");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/BACKUP");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/INFO_FILE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_CORE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_DATA");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_IMEI");
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("FileOp_BackupToBinRegion_All--NVM_Init fail !!!");
+ return false;
+ }
+ /* GenerateFileVer again to avoid wrong FILE_VER backup to BIN region */
+ if (false == NVM_GenerateFileVer(true)) {
+ NVRAM_LOG("GenerateFileVer Fail!\n");
+ return false;
+ }
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+
+ //Add NVRAM history log
+ bRet = NVRAM_HISTORY_LOG(1, "Enter BackupToBinRegion_all");
+ if (bRet == false) {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Enter BackupToBinRegion_all");
+
+
+ bool bWorkForBinRegion = true;
+ int iFileMask[ALL];
+ //need init ifilemark value ,otherwize it cause backup fail on 6592+kk1.mp3+non lte project
+ memset(iFileMask, 0, (ALL * (sizeof(int))));
+ if (!nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ iFileMask[13] = 1;
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[13] = 1;
+ } else {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ }
+ if (!(nvram_ecci_c2k_support())) {
+ iFileMask[14] = 1;
+ iFileMask[15] = 1;
+ iFileMask[16] = 1;
+ }
+
+// ret=FileOp_BackupData_All();
+ bRet = FileOp_BackupDataToFiles(iFileMask, bWorkForBinRegion);
+ if (bRet == false) {
+ NVBAK_LOG("[NVRAM]:Crete the map file and the data file fail\n");
+ return false;
+ }
+ if (stat(g_pcNVM_AllMap, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error MapFile stat \n");
+ return false;
+ }
+ iMapFileSize = st.st_size;
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error DatFile stat \n");
+ return false;
+ }
+ iDatFileSize = st.st_size;
+ NVBAK_LOG("[NVRAM]:info:iMapFileSize:%d,iDatFileSize:%d\n", iMapFileSize,
+ iDatFileSize);
+
+ if (!FileOp_CreateBinRegionBadBlockBitMap()) {
+ NVBAK_LOG("[NVRAM]:Error create Badblock Bitmap \n");
+ return false;
+ }
+
+ if (nvram_check_exist_feature)
+ FileOp_CheckFileExist();
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_BackupToBinRegion_All get device info error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+ //NVBAK_LOG("[NVRAM]:Backup_Partition:%d\n",iBackup_Partition);
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+ NVBAK_LOG("[NVRAM]:mtd get info:iBlockSize:%d,iPartitionSize:%d\n", iBlockSize,
+ iPartitionSize);
+ //already erase nand in CreateBitmap
+ /*
+ erase_info.start=0;
+ erase_info.length=iPartitionSize;
+
+ result=ioctl(fd, MEMERASE, &erase_info);
+ if(result<0)
+ {
+ NVBAK_LOG("[NVRAM]:mtd erase error\r\n");
+ close(fd);
+ return false;
+ }
+ */
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize = (((iMapFileSize + 3 * sizeof(unsigned int)) / iWriteSize) + 1) *
+ iWriteSize;//mapfile size, datfile size, cleanboot flag
+ else
+ iMemSize = iMapFileSize + 3 * sizeof(unsigned
+ int); //mapfile size, datfile size, cleanboot flag
+ //iMemSize=iBlockSize;
+ if (iMemSize > 2 * iBlockSize) {
+ NVBAK_LOG("[NVRAM]:MapFile size is biger than a Block Size\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBuffer = (char*)malloc(iMemSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iMemSize);
+ memcpy(tempBuffer, &iMapFileSize, sizeof(unsigned int));
+ memcpy(tempBuffer + sizeof(unsigned int), &iDatFileSize, sizeof(unsigned int));
+
+ iResult = read(iFileDesc_map, tempBuffer + 3 * sizeof(unsigned int),
+ iMapFileSize);
+ if (iResult != (int)iMapFileSize) {
+ NVBAK_LOG("[NVRAM]:map file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for mapfile:%d,i:%d\n", pos, i);
+ if (i == NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ if(lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos * iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if (iMemSize > iBlockSize) {
+ iResult = write(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM Backup]:map file write one blocksize:%d\n", iResult);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ // check if or not have enough block for write map file
+ for (m = pos + 1; m < NvRamBlockNum; m++) {
+ if (bBadBlockBitMap[m] == 0) {
+ pos = m;
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for mapfile:%d,i:%d\n", pos, m);
+ if ( m >= NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for write nvram map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if(lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {// offset 128KB
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos * iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, tempBuffer + iBlockSize,
+ iMemSize - iBlockSize); // write the less
+ NVBAK_LOG("[NVRAM Backup]:map file write another blocksize:%d\n", iResult);
+ if (iResult != (int)(iMemSize - iBlockSize)) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the iResult of write
+ pos_old = pos - 1;
+ if(lseek(fd, pos_old * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos_old * iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ i = 0;
+ iResult = read(fd, &i, sizeof(unsigned int));
+ if (iResult < 0 || (i != (int)iMapFileSize)) {
+ NVBAK_LOG("[NVRAM]:check map file write error:%d,iMapfileSize:%d\n", i,
+ iMapFileSize);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ } else {
+ iResult = write(fd, tempBuffer, iMemSize);
+ NVBAK_LOG("[NVRAM Backup]:map file write :%d\n", iResult);
+ if (iResult != (int)iMemSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ //check the iResult of write
+ if(lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos * iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ i = 0;
+ iResult = read(fd, &i, sizeof(unsigned int));
+ if (iResult < 0 || (i != (int)iMapFileSize)) {
+ NVBAK_LOG("[NVRAM]:check map file write error:%d,iMapfileSize:%d\n", i,
+ iMapFileSize);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+
+
+ for (j = (NvRamBlockNum - 1); j > pos; j--) {
+ if (bBadBlockBitMap[j] == 0) {
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for bitmap:%d\n", j);
+ if (j == pos) {
+ NVBAK_LOG("[NVRAM]:there is no space for bitmap in nand\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //write the map file and bitmap file into the last available block of nand
+ if (iMemSize > iBlockSize) {
+ iReserveBlockCount = 2;
+ iReservePos = 1;
+ } else {
+ iReserveBlockCount = 1;
+ iReservePos = 0;
+ }
+
+ BitMapBuffer = (char*)malloc(iBlockSize * iReserveBlockCount);
+ if (BitMapBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc memory BitMapBuffer error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(BitMapBuffer, 0xFF, iBlockSize * iReserveBlockCount);
+ memcpy(BitMapBuffer, bBadBlockBitMap, NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + NvRamBlockNum * sizeof(char), bBadBlockBitMap,
+ NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + 2 * NvRamBlockNum * sizeof(char), bBadBlockBitMap,
+ NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + 3 * NvRamBlockNum * sizeof(char), &iBitmapFlag,
+ sizeof(unsigned int));
+ if((3 * NvRamBlockNum * sizeof(char) + sizeof(unsigned int)+ iMemSize)< iBlockSize * iReserveBlockCount) {
+ memcpy(BitMapBuffer + 3 * NvRamBlockNum * sizeof(char) + sizeof(unsigned int),
+ tempBuffer, iMemSize);
+ } else {
+ NVBAK_LOG("[NVRAM]block too small,do not save Mapfile in last block \r\n");
+ }
+ if(lseek(fd, (j - iReservePos)*iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",(j - iReservePos)*iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, BitMapBuffer, iBlockSize * iReserveBlockCount);
+ if (iResult != (int)iBlockSize * iReserveBlockCount) {
+ NVBAK_LOG("[NVRAM]:bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the iResult of write the bitmap
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ return false;
+ }
+ if(lseek(fd, (j - iReservePos) * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",(j - iReservePos) * iBlockSize, (char*)strerror(errno));
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBitmap1, NvRamBlockNum * sizeof(char));
+ if(iResult != NvRamBlockNum * sizeof(char)) {
+ NVBAK_LOG("[NVRAM]:read bimap1 error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBitmap2, NvRamBlockNum * sizeof(char));
+ if(iResult != NvRamBlockNum * sizeof(char)) {
+ NVBAK_LOG("[NVRAM]:read bimap2 error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ for (i = 0; i < NvRamBlockNum; i++) {
+ NVBAK_LOG("[NVRAM]:pos:%d,bitmap[i]:%d\n", j, tempBitmap1[i]);
+ }
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:check bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ free(BitMapBuffer);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ tempBuffer = NULL;
+
+ if (iDatFileSize % iBlockSize != 0)
+ iMemSize = ((iDatFileSize / iBlockSize) + 1) * iBlockSize;
+ else
+ iMemSize = iDatFileSize;
+ tempBuffer = (char*)malloc(iMemSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iMemSize);
+ iResult = read(iFileDesc_file, tempBuffer, iDatFileSize);
+ if (iResult != (int)iDatFileSize) {
+ NVBAK_LOG("[NVRAM]:dat file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for (i = pos + 1; i < j; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == j) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ } else {
+ for (; i < j; i++) {
+ if (bBadBlockBitMap[i] == 0)
+ iFreeBlockNum++;
+ }
+ if ((iFreeBlockNum * iBlockSize) < (iMemSize)) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for data file:%d\n", pos);
+ iWriteTime = iMemSize / iBlockSize;
+ int iAlreadyWrite = 0;
+ int bitmappos = j;
+ NVBAK_LOG("[NVRAM]:iWriteTime:%d\n", iWriteTime);
+ for (i = 0; i < iWriteTime; i++) {
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != (int)(pos * iBlockSize)) {
+ NVBAK_LOG("[NVRAM]:dat file lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, tempBuffer + i * iBlockSize, iBlockSize);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iAlreadyWrite++;
+ if (iAlreadyWrite == iWriteTime)
+ break;
+ for (j = pos + 1; j < bitmappos; j++) {
+ if (bBadBlockBitMap[j] == 0) {
+ pos = j;
+ break;
+ }
+ }
+ if (j >= bitmappos) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for write nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:end:%d\n", pos);
+ free(bBadBlockBitMap);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ NVBAK_LOG("setBackupFileNum\n");
+
+ if (-1 == chown(g_pcNVM_AllFile , -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllFile fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+ if (-1 == chown(g_pcNVM_AllMap, -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllMap fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ if (!Fileop_SetBackupFileNum(true)) {
+ NVBAK_LOG("SetBackupFileNum Fail\n");
+ return false;
+ }
+#endif
+
+
+ NVBAK_LOG("SetBackupFileNum Success\n");
+ NVBAK_LOG("Leave BackupToBinRegion_all\n");
+ bRet = NVRAM_HISTORY_LOG(1, "Leave BackupToBinRegion_all\n");
+ if (bRet == false) {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Leave BackupToBinRegion_all");
+
+ sync();
+
+
+ if (nvram_read_back_feature) {
+ NVBAK_LOG("[NVRAM]Enter Check Backup\n");
+ if (!FileOp_RestoreFromBinRegion_ToFile()) {
+ NVBAK_LOG("[NVRAM]: FileOp_RestoreFromBinRegion_ToFile fail\n");
+ return false;
+ }
+ if (!FileOp_CheckBackUpResult()) {
+ NVBAK_LOG("[NVRAM]: FileOp_CheckBackUpResult fail\n");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]Leave Check Backup\n");
+ }
+ return true;
+}
+//add by min
+bool FileOp_BackupToBinRegion_All_Exx(unsigned char *time_value)
+{
+ time_t before;
+ time_t after;
+ unsigned char *leave_time={'\0'};//can't get end time of FileOp_BackupToBinRegion_All_Ex,use NULL.
+ bool bRet = true;
+ struct stat st;
+ char *tempBuffer=NULL;
+ char *BitMapBuffer=NULL;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ unsigned int iMapFileSize,iDatFileSize,iWriteSize,iBlockSize,iPartitionSize;
+ unsigned int iMemSize;
+ unsigned int iBitmapFlag=BitmapFlag;
+ int iFileDesc_file, iFileDesc_map, fd, iResult,i,j,m,iWriteTime,pos=0,iFreeBlockNum=0;
+ int pos_old = 0;
+ int iReserveBlockCount = 0;
+ int iReservePos = 0;
+ // int iBackup_Partition=get_partition_numb("nvram");
+
+ char cMtdDevName[128] = {0};
+ NVBAK_LOG("Enter BackupToBinRegion_all\n");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/CALIBRAT");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/BACKUP");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/INFO_FILE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_CORE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_DATA");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_IMEI");
+
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0)
+ {
+ NVBAK_LOG("FileOp_BackupToBinRegion_All--NVM_Init fail !!!");
+ return false;
+ }
+ /* GenerateFileVer again to avoid wrong FILE_VER backup to BIN region */
+ if (false == NVM_GenerateFileVer(true)) {
+ NVRAM_LOG("GenerateFileVer Fail!\n");
+ return false;
+ }
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+
+ //Add NVRAM history log
+ before=time(&before); //add for time
+ NVRAM_LOG("FileOp_BackupToBinRegion_All_Ex: before is %s\n",ctime(&before));
+ //NVRAM_LOG("size is %d\n",sizeof(time_t));
+ if(nvram_md1_support())
+ bRet = NVRAM_HISTORY_LOG_TIME(1, time_value, "Enter FileOp_BackupToBinRegion_All_Ex");
+ else
+ bRet = NVRAM_HISTORY_LOG(1, "Enter FileOp_BackupToBinRegion_All_Ex");
+ if (bRet == false)
+ {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Enter BackupToBinRegion_all");
+
+
+ bool bWorkForBinRegion=true;
+ int iFileMask[ALL];
+ //need init ifilemark value ,otherwize it cause backup fail on 6592+kk1.mp3+non lte project
+ memset(iFileMask,0,(ALL*(sizeof(int))));
+ if(!nvram_md5_support() && !nvram_evdo_support())
+ {
+ iFileMask[5]=1;iFileMask[6]=1;iFileMask[10]=1;iFileMask[11]=1;iFileMask[12]=1;iFileMask[13]=1;
+ }
+ else
+ if(!nvram_md5_support() && nvram_evdo_support())
+ {
+ iFileMask[5]=1;iFileMask[6]=1;iFileMask[10]=1;iFileMask[11]=1;iFileMask[12]=1;
+ }
+ else
+ if(nvram_md5_support() && !nvram_evdo_support())
+ {
+ iFileMask[5]=1;iFileMask[6]=1;iFileMask[13]=1;
+ }
+ else
+ {
+ iFileMask[5]=1;iFileMask[6]=1;
+ }
+ if(!(nvram_ecci_c2k_support()))
+ {
+ iFileMask[14]=1;iFileMask[15]=1;iFileMask[16]=1;
+ }
+
+// ret=FileOp_BackupData_All();
+ bRet = FileOp_BackupDataToFiles(iFileMask,bWorkForBinRegion);
+ if(bRet == false)
+ {
+ NVBAK_LOG("[NVRAM]:Crete the map file and the data file fail\n");
+ return false;
+ }
+ if(stat(g_pcNVM_AllMap,&st)<0)
+ {
+ NVBAK_LOG("[NVRAM]:Error MapFile stat \n");
+ return false;
+ }
+ iMapFileSize=st.st_size;
+ if(stat(g_pcNVM_AllFile,&st)<0)
+ {
+ NVBAK_LOG("[NVRAM]:Error DatFile stat \n");
+ return false;
+ }
+ iDatFileSize=st.st_size;
+ NVBAK_LOG("[NVRAM]:info:iMapFileSize:%d,iDatFileSize:%d\n",iMapFileSize,iDatFileSize);
+
+ if(!FileOp_CreateBinRegionBadBlockBitMap())
+ {
+ NVBAK_LOG("[NVRAM]:Error create Badblock Bitmap \n");
+ return false;
+ }
+
+ if (nvram_check_exist_feature)
+ FileOp_CheckFileExist();
+
+ if(!NVM_GetDeviceInfo(cMtdDevName,&info))
+ {
+ NVBAK_LOG("[NVRAM]:FileOp_BackupToBinRegion_All get device info error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+ //NVBAK_LOG("[NVRAM]:Backup_Partition:%d\n",iBackup_Partition);
+ fd=open(cMtdDevName,O_RDWR);
+ if(fd<0)
+ {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+
+
+ iWriteSize=info.writesize;
+ iBlockSize=info.erasesize;
+ iPartitionSize=info.size;
+ NVBAK_LOG("[NVRAM]:mtd get info:iBlockSize:%d,iPartitionSize:%d\n",iBlockSize,iPartitionSize);
+ //already erase nand in CreateBitmap
+ /*
+ erase_info.start=0;
+ erase_info.length=iPartitionSize;
+
+ result=ioctl(fd, MEMERASE, &erase_info);
+ if(result<0)
+ {
+ NVBAK_LOG("[NVRAM]:mtd erase error\r\n");
+ close(fd);
+ return false;
+ }
+ */
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if(INVALID_HANDLE_VALUE == iFileDesc_file)
+ {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if(iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if(INVALID_HANDLE_VALUE == iFileDesc_map)
+ {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if((iMapFileSize+3*sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize=(((iMapFileSize+3*sizeof(unsigned int))/iWriteSize)+1)*iWriteSize;//mapfile size, datfile size, cleanboot flag
+ else
+ iMemSize=iMapFileSize+3*sizeof(unsigned int);//mapfile size, datfile size, cleanboot flag
+ //iMemSize=iBlockSize;
+ if(iMemSize > 2 * iBlockSize)
+ {
+ NVBAK_LOG("[NVRAM]:MapFile size is biger than a Block Size\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBuffer=(char*)malloc(iMemSize);
+ if(tempBuffer==NULL)
+ {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer,0xFF,iMemSize);
+ memcpy(tempBuffer,&iMapFileSize,sizeof(unsigned int));
+ memcpy(tempBuffer+sizeof(unsigned int),&iDatFileSize,sizeof(unsigned int));
+
+ iResult = read(iFileDesc_map,tempBuffer+3*sizeof(unsigned int),iMapFileSize);
+ if(iResult != (int)iMapFileSize)
+ {
+ NVBAK_LOG("[NVRAM]:map file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for(i=0;i<NvRamBlockNum;i++)
+ {
+ if(bBadBlockBitMap[i]==0)
+ {
+ pos=i;
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for mapfile:%d,i:%d\n",pos,i);
+ if(i==NvRamBlockNum)
+ {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ if (lseek(fd,pos*iBlockSize,SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if (iMemSize > iBlockSize) {
+ iResult = write(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM Backup]:map file write one blocksize:%d\n",iResult);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ // check if or not have enough block for write map file
+ for (m = pos + 1; m < NvRamBlockNum; m++) {
+ if (bBadBlockBitMap[m] == 0) {
+ pos = m;
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for mapfile:%d,i:%d\n",pos,m);
+ if ( m >= NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for write nvram map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ iResult = write(fd, tempBuffer + iBlockSize, iMemSize - iBlockSize); // write the less
+ NVBAK_LOG("[NVRAM Backup]:map file write another blocksize:%d\n",iResult);
+ if (iResult != (int)(iMemSize - iBlockSize)) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the iResult of write
+ pos_old = pos -1;
+ if (lseek(fd, pos_old * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ i = 0;
+ iResult = read(fd, &i, sizeof(unsigned int));
+ if(iResult < 0||(i != (int)iMapFileSize)) {
+ NVBAK_LOG("[NVRAM]:check map file write error:%d,iMapfileSize:%d\n",i,iMapFileSize);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ } else {
+ iResult = write(fd,tempBuffer,iMemSize);
+ NVBAK_LOG("[NVRAM Backup]:map file write :%d\n",iResult);
+ if(iResult != (int)iMemSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ //check the iResult of write
+ lseek(fd,pos*iBlockSize,SEEK_SET);
+ i=0;
+ iResult = read(fd,&i,sizeof(unsigned int));
+ if(iResult < 0 || (i != (int)iMapFileSize)) {
+ NVBAK_LOG("[NVRAM]:check map file write error:%d,iMapfileSize:%d\n",i,iMapFileSize);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+
+
+ for(j=(NvRamBlockNum-1);j>pos;j--)
+ {
+ if(bBadBlockBitMap[j]==0)
+ {
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for bitmap:%d\n",j);
+ if(j==pos)
+ {
+ NVBAK_LOG("[NVRAM]:there is no space for bitmap in nand\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //write the map file and bitmap file into the last available block of nand
+ if (iMemSize > iBlockSize) {
+ iReserveBlockCount = 2;
+ iReservePos = 1;
+ } else {
+ iReserveBlockCount = 1;
+ iReservePos = 0;
+ }
+
+ BitMapBuffer=(char*)malloc(iBlockSize * iReserveBlockCount);
+ if(BitMapBuffer == NULL)
+ {
+ NVBAK_LOG("[NVRAM]:malloc memory BitMapBuffer error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(BitMapBuffer,0xFF,iBlockSize * iReserveBlockCount);
+ memcpy(BitMapBuffer,bBadBlockBitMap,NvRamBlockNum*sizeof(char));
+ memcpy(BitMapBuffer+NvRamBlockNum*sizeof(char),bBadBlockBitMap,NvRamBlockNum*sizeof(char));
+ memcpy(BitMapBuffer+2*NvRamBlockNum*sizeof(char),bBadBlockBitMap,NvRamBlockNum*sizeof(char));
+ memcpy(BitMapBuffer+3*NvRamBlockNum*sizeof(char),&iBitmapFlag,sizeof(unsigned int));
+ if((3 * NvRamBlockNum * sizeof(char) + sizeof(unsigned int)+ iMemSize)< iBlockSize * iReserveBlockCount) {
+ memcpy(BitMapBuffer+3*NvRamBlockNum*sizeof(char)+sizeof(unsigned int),tempBuffer,iMemSize);
+ } else {
+ NVBAK_LOG("[NVRAM]block too small,do not save Mapfile in last block \r\n");
+ }
+ if (lseek(fd,(j-iReservePos)*iBlockSize,SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd,BitMapBuffer,iBlockSize * iReserveBlockCount);
+ if (iResult != (int)iBlockSize * iReserveBlockCount)
+ {
+ NVBAK_LOG("[NVRAM]:bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the iResult of write the bitmap
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ tempBitmap1=(char *)malloc(NvRamBlockNum);
+ if(tempBitmap1 == NULL){
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBitmap2=(char *)malloc(NvRamBlockNum);
+ if(tempBitmap2 == NULL){
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ return false;
+ }
+ if (lseek(fd, (j - iReservePos) * iBlockSize, SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd,tempBitmap1,NvRamBlockNum*sizeof(char));
+ iResult = read(fd,tempBitmap2,NvRamBlockNum*sizeof(char));
+ for(i=0;i<NvRamBlockNum;i++)
+ {
+ NVBAK_LOG("[NVRAM]:pos:%d,bitmap[i]:%d\n",j,tempBitmap1[i]);
+ }
+ for(i=0;i<NvRamBlockNum;i++)
+ {
+ if(tempBitmap1[i]!=tempBitmap2[i])
+ {
+ NVBAK_LOG("[NVRAM]:check bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ free(BitMapBuffer);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ tempBuffer=NULL;
+
+ if(iDatFileSize%iBlockSize != 0)
+ iMemSize=((iDatFileSize/iBlockSize)+1)*iBlockSize;
+ else
+ iMemSize=iDatFileSize;
+ tempBuffer=(char*)malloc(iMemSize);
+ if(tempBuffer==NULL)
+ {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer,0xFF,iMemSize);
+ iResult = read(iFileDesc_file,tempBuffer,iDatFileSize);
+ if(iResult != (int)iDatFileSize)
+ {
+ NVBAK_LOG("[NVRAM]:dat file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for(i=pos+1;i<j;i++)
+ {
+ if(bBadBlockBitMap[i]==0)
+ {
+ pos=i;
+ break;
+ }
+ }
+ if(i==j)
+ {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ else
+ {
+ for(;i<j;i++)
+ {
+ if(bBadBlockBitMap[i]==0)
+ iFreeBlockNum++;
+ }
+ if((iFreeBlockNum*iBlockSize)<(iMemSize))
+ {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for data file:%d\n",pos);
+ iWriteTime=iMemSize/iBlockSize;
+ int iAlreadyWrite=0;
+ int bitmappos=j;
+ NVBAK_LOG("[NVRAM]:iWriteTime:%d\n",iWriteTime);
+ for(i=0;i<iWriteTime;i++)
+ {
+ iResult = lseek(fd,pos*iBlockSize,SEEK_SET);
+ if(iResult != (int)(pos*iBlockSize))
+ {
+ NVBAK_LOG("[NVRAM]:dat file lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd,tempBuffer+i*iBlockSize,iBlockSize);
+ if(iResult != (int)iBlockSize)
+ {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iAlreadyWrite++;
+ if(iAlreadyWrite==iWriteTime)
+ break;
+ for(j=pos+1;j<bitmappos;j++)
+ {
+ if(bBadBlockBitMap[j]==0)
+ {
+ pos=j;
+ break;
+ }
+ }
+ if(j>=bitmappos){
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for write nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:end:%d\n",pos);
+ free(bBadBlockBitMap);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ NVBAK_LOG("setBackupFileNum\n");
+
+ if(-1 == chown(g_pcNVM_AllFile , -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllFile fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+ if(-1 == chown(g_pcNVM_AllMap, -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllMap fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ if(!Fileop_SetBackupFileNum(true))
+ {
+ NVBAK_LOG("SetBackupFileNum Fail\n");
+ return false;
+ }
+#endif
+
+
+ NVBAK_LOG("SetBackupFileNum Success\n");
+ NVBAK_LOG("Leave BackupToBinRegion_all\n");
+ after = time(&after); //add for time
+ NVRAM_LOG("FileOp_BackupToBinRegion_All_Ex: after is %s\n",ctime(&after));
+ if(nvram_md1_support())
+ bRet = NVRAM_HISTORY_LOG_TIME(1, leave_time, "Leave FileOp_BackupToBinRegion_All_Ex");
+ else
+ bRet = NVRAM_HISTORY_LOG(1, "Leave BackupToBinRegion_all\n");
+ if (bRet == false)
+ {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Leave BackupToBinRegion_all");
+
+ sync();
+
+
+ if (nvram_read_back_feature)
+ {
+ NVBAK_LOG("[NVRAM]Enter Check Backup\n");
+ if(!FileOp_RestoreFromBinRegion_ToFile())
+ {
+ NVBAK_LOG("[NVRAM]: FileOp_RestoreFromBinRegion_ToFile fail\n");
+ return false;
+ }
+ if(!FileOp_CheckBackUpResult())
+ {
+ NVBAK_LOG("[NVRAM]: FileOp_CheckBackUpResult fail\n");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]Leave Check Backup\n");
+ }
+ return true;
+}
+bool FileOp_BackupToBinRegion_All_Ex(int value) {
+ bool bRet = true;
+ struct stat st;
+ char cMtdDevName[128] = {0};
+ char cCallerName[20] = {0};
+ char cLog[MAX_LOG_LENGTH] = {0};
+ char *tempBuffer = NULL;
+ char *BitMapBuffer = NULL;
+ bool bMarkCaller = false;
+
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+ unsigned int iMapFileSize, iDatFileSize, iWriteSize, iBlockSize, iPartitionSize;
+ unsigned int iMemSize;
+ unsigned int iBitmapFlag = BitmapFlag;
+ int iFileDesc_file, iFileDesc_map, fd, iResult, i, j, iWriteTime, pos = 0,
+ iFreeBlockNum = 0;
+
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ for (i = 0; i < g_RecordCaller_Count; i++) {
+
+ if (value == aRecordCallerList[i].iRecordCallerIndex) {
+ memcpy(cCallerName, aRecordCallerList[i].cRecordCallerName, 10);
+ bMarkCaller = true;
+ break;
+ }
+ }
+
+
+// int iBackup_Partition=get_partition_numb("nvram");
+
+
+
+ NVBAK_LOG("Enter BackupToBinRegion_all_ex\n");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/CALIBRAT");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/BACKUP");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/INFO_FILE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_CORE");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_DATA");
+ FileOp_CreatMdFileList("/mnt/vendor/nvdata/md/NVRAM/NVD_IMEI");
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("BackupToBinRegion_all_ex--NVM_Init fail !!!\n");
+ return false;
+ }
+
+ //Add NVRAM history log
+ snprintf(cLog, sizeof(cLog),"%s", "Enter BackupToBinRegion_all");
+ if (bMarkCaller) {
+ //strcat(cLog, "_");
+ //strcat(cLog, cCallerName);
+ strncat(cLog,"_",strlen("_"));
+ strncat(cLog,cCallerName,strlen(cCallerName));
+ }
+ NVBAK_LOG("cLog ==%s,bMarkCaller==%d\n", cLog, bMarkCaller);
+ bRet = NVRAM_HISTORY_LOG(1, cLog);
+ if (bRet == false) {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, cLog);
+
+ bool bWorkForBinRegion = true;
+ int iFileMask[ALL];
+ //need init ifilemark value ,otherwize it cause backup fail on 6592+kk1.mp3+non lte project
+ memset(iFileMask, 0, (ALL * (sizeof(int))));
+ if (!nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ iFileMask[13] = 1;
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[13] = 1;
+ } else {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ }
+
+ if (!nvram_ecci_c2k_support()) {
+ iFileMask[14] = 1;
+ iFileMask[15] = 1;
+ iFileMask[16] = 1;
+ }
+
+// ret=FileOp_BackupData_All();
+ bRet = FileOp_BackupDataToFiles(iFileMask, bWorkForBinRegion);
+ if (bRet == false) {
+ NVBAK_LOG("[NVRAM]:Crete the map file and the data file fail\n");
+ return false;
+ }
+ if (stat(g_pcNVM_AllMap, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error MapFile stat \n");
+ return false;
+ }
+ iMapFileSize = st.st_size;
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error DatFile stat \n");
+ return false;
+ }
+ iDatFileSize = st.st_size;
+ NVBAK_LOG("[NVRAM]:info:iMapFileSize:%d,iDatFileSize:%d\n", iMapFileSize,
+ iDatFileSize);
+
+ if (!FileOp_CreateBinRegionBadBlockBitMap()) {
+ NVBAK_LOG("[NVRAM]:Error create Badblock Bitmap \n");
+ return false;
+ }
+ FileOp_CheckFileExist();
+
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+ //NVBAK_LOG("[NVRAM]:Backup_Partition:%d\n",iBackup_Partition);
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_BackupToBinRegion_All_Ex get device info error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+ NVBAK_LOG("[NVRAM]:mtd get info:iBlockSize:%d,iPartitionSize:%d\n", iBlockSize,
+ iPartitionSize);
+ //already erase nand in CreateBitmap
+ /*
+ erase_info.start=0;
+ erase_info.length=iPartitionSize;
+
+ result=ioctl(fd, MEMERASE, &erase_info);
+ if(result<0)
+ {
+ NVBAK_LOG("[NVRAM]:mtd erase error\r\n");
+ close(fd);
+ return false;
+ }
+ */
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize = (((iMapFileSize + 3 * sizeof(unsigned int)) / iWriteSize) + 1) *
+ iWriteSize;//mapfile size, datfile size, cleanboot flag
+ else
+ iMemSize = iMapFileSize + 3 * sizeof(unsigned
+ int); //mapfile size, datfile size, cleanboot flag
+ //iMemSize=iBlockSize;
+ if (iMemSize > iBlockSize) {
+ NVBAK_LOG("[NVRAM]:MapFile size is biger than a Block Size\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBuffer = (char*)malloc(iMemSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iMemSize);
+ memcpy(tempBuffer, &iMapFileSize, sizeof(unsigned int));
+ memcpy(tempBuffer + sizeof(unsigned int), &iDatFileSize, sizeof(unsigned int));
+
+ iResult = read(iFileDesc_map, tempBuffer + 3 * sizeof(unsigned int),
+ iMapFileSize);
+ if (iResult != (int)iMapFileSize) {
+ NVBAK_LOG("[NVRAM]:map file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for mapfile:%d,i:%d\n", pos, i);
+ if (i == NvRamBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, tempBuffer, iMemSize);
+ NVBAK_LOG("[NVRAM Backup]:map file write :%d\n", iResult);
+ if (iResult != (int)iMemSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the result of write
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ i = 0;
+ iResult = read(fd, &i, sizeof(unsigned int));
+ if (iResult < 0 || (i != (int)iMapFileSize)) {
+ NVBAK_LOG("[NVRAM]:check map file write error:%d,iMapfileSize:%d\n", i,
+ iMapFileSize);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ for (j = (NvRamBlockNum - 1); j > pos; j--) {
+ if (bBadBlockBitMap[j] == 0) {
+ break;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for bitmap:%d\n", j);
+ if (j == pos) {
+ NVBAK_LOG("[NVRAM]:there is no space for bitmap in nand\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //write the map file and bitmap file into the last available block of nand
+ BitMapBuffer = (char*)malloc(iBlockSize);
+ if (BitMapBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc memory BitMapBuffer error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(BitMapBuffer, 0xFF, iBlockSize);
+ memcpy(BitMapBuffer, bBadBlockBitMap, NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + NvRamBlockNum * sizeof(char), bBadBlockBitMap,
+ NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + 2 * NvRamBlockNum * sizeof(char), bBadBlockBitMap,
+ NvRamBlockNum * sizeof(char));
+ memcpy(BitMapBuffer + 3 * NvRamBlockNum * sizeof(char), &iBitmapFlag,
+ sizeof(unsigned int));
+ if((3 * NvRamBlockNum * sizeof(char) + sizeof(unsigned int)+ iMemSize)< iBlockSize) {
+ memcpy(BitMapBuffer + 3 * NvRamBlockNum * sizeof(char) + sizeof(unsigned int),
+ tempBuffer, iMemSize);
+ } else {
+ NVBAK_LOG("[NVRAM]block too small,do not save Mapfile in last block \r\n");
+ }
+ if (lseek(fd, j * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, BitMapBuffer, iBlockSize);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ //check the result of write the bitmap
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ return false;
+ }
+ if (lseek(fd, j * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBitmap1, NvRamBlockNum * sizeof(char));
+ iResult = read(fd, tempBitmap2, NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ NVBAK_LOG("[NVRAM]:pos:%d,bitmap[i]:%d\n", j, tempBitmap1[i]);
+ }
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:check bimap file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(BitMapBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ free(BitMapBuffer);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ tempBuffer = NULL;
+
+ if (iDatFileSize % iBlockSize != 0)
+ iMemSize = ((iDatFileSize / iBlockSize) + 1) * iBlockSize;
+ else
+ iMemSize = iDatFileSize;
+ tempBuffer = (char*)malloc(iMemSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ memset(tempBuffer, 0xFF, iMemSize);
+ iResult = read(iFileDesc_file, tempBuffer, iDatFileSize);
+ if (iResult != (int)iDatFileSize) {
+ NVBAK_LOG("[NVRAM]:dat file read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ for (i = pos + 1; i < j; i++) {
+ if (bBadBlockBitMap[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == j) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ } else {
+ for (; i < j; i++) {
+ if (bBadBlockBitMap[i] == 0)
+ iFreeBlockNum++;
+ }
+ if ((iFreeBlockNum * iBlockSize) < (iMemSize)) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for backup nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:pos for data file:%d\n", pos);
+ iWriteTime = iMemSize / iBlockSize;
+ int iAlreadyWrite = 0;
+ int bitmappos = j;
+ NVBAK_LOG("[NVRAM]:iWriteTime:%d\n", iWriteTime);
+ for (i = 0; i < iWriteTime; i++) {
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != (int)(pos * iBlockSize)) {
+ NVBAK_LOG("[NVRAM]:dat file lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iResult = write(fd, tempBuffer + i * iBlockSize, iBlockSize);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ iAlreadyWrite++;
+ if (iAlreadyWrite == iWriteTime)
+ break;
+ for (j = pos + 1; j < bitmappos; j++) {
+ if (bBadBlockBitMap[j] == 0) {
+ pos = j;
+ break;
+ }
+ }
+ if (j >= bitmappos) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for write nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(bBadBlockBitMap);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:end:%d\n", pos);
+ free(bBadBlockBitMap);
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ NVBAK_LOG("setBackupFileNum\n");
+
+ if (-1 == chown(g_pcNVM_AllFile , -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllFile fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+ if (-1 == chown(g_pcNVM_AllMap, -1, AID_SYSTEM)) {
+ NVBAK_LOG("chown for AllMap fail: %s", (char*)strerror(errno));
+ // return false;
+ }
+
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ if (!Fileop_SetBackupFileNum(true)) {
+ NVBAK_LOG("SetBackupFileNum Fail\n");
+ return false;
+ }
+#endif
+
+
+ NVBAK_LOG("SetBackupFileNum Success\n");
+ NVBAK_LOG("Leave BackupToBinRegion_all_ex\n");
+
+ snprintf(cLog, sizeof(cLog),"%s", "Leave BackupToBinRegion_all");
+ if (bMarkCaller) {
+ strncat (cLog,"_",strlen("_"));
+ strncat (cLog,cCallerName,strlen(cCallerName));
+ }
+ bRet = NVRAM_HISTORY_LOG(1, cLog);
+ if (bRet == false) {
+ NVBAK_LOG("NVRAM_HISTORY_LOG write error!!!");
+ return false;
+ }
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, cLog);
+
+ sync();
+
+
+ if (nvram_read_back_feature) {
+ NVBAK_LOG("[NVRAM]Enter Check Backup\n");
+ if (!FileOp_RestoreFromBinRegion_ToFile()) {
+ NVBAK_LOG("[NVRAM]: FileOp_RestoreFromBinRegion_ToFile fail\n");
+ return false;
+ }
+ if (!FileOp_CheckBackUpResult()) {
+ NVBAK_LOG("[NVRAM]: FileOp_CheckBackUpResult fail\n");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]Leave Check Backup\n");
+ }
+ return true;
+}
+
+
+bool FileOp_RestoreFromBinRegion(bool bCleanBoot) {
+ int iFileDesc_file, iFileDesc_map, fd, iResult, iBlockNum, iFileDesc_backupflag;
+ unsigned int iMapFileSize, iDatFileSize, iBlockSize, iPartitionSize,
+ iAPBackupFileNum, iWriteSize;
+ unsigned short iMDBackupFileNum;
+ bool bRet = true;
+ struct stat st;
+ char cMtdDevName[128] = {0};
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, j, pos = 0, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ #if 1
+ int linkret =0 ;
+ #endif
+ // int iBackup_Partition=get_partition_numb("nvram");
+
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegion\r\n");
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegion--NVM_Init fail !!!\n");
+ return false;
+ }
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_CreateBinRegionBadBlockBitMap get device info error\r\n");
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+ iWriteSize = info.writesize;
+#if 1
+ NVBAK_LOG("libfile nvram_platform_log_block =%d,nvram_platform_resv_block=%d,nvram_platform_DM_block=%d nvram_platform_layout_version##=%d\n",
+ nvram_platform_log_block, nvram_platform_resv_block, nvram_platform_DM_block,
+ nvram_platform_layout_version);
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+ NVRAM_LOG("[NVRAM]: BinRegionBlockTotalNum %d , NvRamBlockNum=%d\r\n",
+ BinRegionBlockTotalNum, NvRamBlockNum);
+
+#else
+ NVBAK_LOG("libfile nvram_platform_log_block =%d,nvram_platform_resv_block=%d,nvram_platform_DM_block=%d\n",
+ nvram_platform_log_block, nvram_platform_resv_block, nvram_platform_DM_block);
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+#endif
+
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+ if(lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos * iBlockSize, (char*)strerror(errno));
+ free(tempBuffer);
+ close(fd);
+ return false;
+ } else {
+ NVBAK_LOG("[NVRAM]:seek to %d Success\n",pos * iBlockSize);
+ }
+
+ iResult = read(fd, tempBuffer, iBlockSize);
+ if(iResult != iBlockSize) {
+ NVBAK_LOG("[NVRAM]:read error %s\n",(char*)strerror(errno));
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+
+ iMapFileSize = *((unsigned int*)tempBuffer); // get the mapfile
+ iDatFileSize = *((unsigned int*)(tempBuffer + 4));
+ NVBAK_LOG("[NVRAM]: map file:%d,dat file:%d\n", iMapFileSize, iDatFileSize);
+ if(iMapFileSize == 0 || iMapFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:map file size error\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ if(iDatFileSize == 0 || iDatFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:data file size error\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ unsigned int iMemSize;
+ int iReservePos = 0;
+ int iReserveBlockCount = 0;
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize = (((iMapFileSize + 3 * sizeof(unsigned int)) / iWriteSize) + 1) *
+ iWriteSize;
+ else
+ iMemSize = iMapFileSize + 3 * sizeof(unsigned
+ int); //mapfile size, datfile size, cleanboot fla
+ NVBAK_LOG("[NVRAM Restore - heli]:map file size:%d\n", iMemSize);
+
+ if ( iMemSize > iBlockSize ) { // > 180KB
+ iReservePos = 1;
+ iReserveBlockCount = 2;
+ } else { // < 128KB
+ iReservePos = 0;
+ iReserveBlockCount = 1;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ tempBuffer = (char*)malloc(iBlockSize *
+ iReserveBlockCount); // for 128KB and 256KB
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ return false;
+ }
+
+ int iBitmapFlag = 0;
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if(lseek(fd, (iBlockNum - iReservePos)*iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",(iBlockNum - iReservePos)*iBlockSize, (char*)strerror(errno));
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ close(fd);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(&iBitmapFlag, tempBuffer + 3 * NvRamBlockNum * sizeof(char),
+ sizeof(unsigned int));
+ if (iBitmapFlag != (int)BitmapFlag) {
+ NVBAK_LOG("[NVRAM]:iBitMapFlag:%d,BitMapFlag:%d\n", iBitmapFlag, BitmapFlag);
+ continue;
+ }
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVBAK_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ #if 0
+ for (i = 0; i < NvRamBlockNum; i++) {
+ NVBAK_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, tempBitmap1[i]);
+ }
+ #endif
+ for (i = 0; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:can not find map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ if(lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %d error %s\n",pos * iBlockSize, (char*)strerror(errno));
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ close(fd);
+ return false;
+ } else {
+ NVBAK_LOG("[NVRAM]:seek to %d Success\n",pos * iBlockSize);
+ }
+ iResult = read(fd, tempBuffer,
+ iBlockSize * iReserveBlockCount); // if mapfile > 128KB read 2*128KB
+ NVBAK_LOG("[NVRAM]:map file read size:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iMapFileSize = *((unsigned int*)tempBuffer);
+ iDatFileSize = *((unsigned int*)(tempBuffer + 4));
+ iAPBackupFileNum = *((unsigned int*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize));
+ iMDBackupFileNum = *((unsigned short*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize + sizeof(unsigned int)));
+ NVBAK_LOG("[NVRAM]: map file:%d,dat file:%d\n", iMapFileSize, iDatFileSize);
+ NVBAK_LOG("[NVRAM]: AP:%d,MD:%d\n", iAPBackupFileNum, iMDBackupFileNum);
+ if(iMapFileSize == 0 || iMapFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:map file size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ if(iDatFileSize == 0 || iDatFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:data file size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ NVBAK_LOG("[NVRAM]: AP backup file num:%d,MD backup file num:%d\n",
+ iAPBackupFileNum, iMDBackupFileNum);
+ if (iAPBackupFileNum != 0 ) {
+ iFileDesc_backupflag = open(g_pcNVM_BackFlag , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (INVALID_HANDLE_VALUE == iFileDesc_backupflag) {
+ NVBAK_LOG("[NVRAM]: cannot open backup file num data\n");
+ close(iFileDesc_backupflag);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ goto restorefiles;
+ }
+ iResult = write(iFileDesc_backupflag, &iAPBackupFileNum, sizeof(unsigned int));
+ if (iResult != (int)sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:Backflag write error(ignore)\r\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc_backupflag);
+ }
+ if (!NVM_ComputeBackflagCheckSum(iFileDesc_backupflag)) {
+ NVBAK_LOG("[NVRAM]:Backflag compute check sum failed(ignore)\r\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc_backupflag);
+ }
+ }
+#endif
+restorefiles:
+ iFileDesc_file = open(g_pcNVM_AllFile , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = write(iFileDesc_map, tempBuffer + 3 * sizeof(unsigned int),
+ iMapFileSize);
+ if (iResult != (int)iMapFileSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ if (iDatFileSize % iBlockSize != 0)
+ tempBuffer = (char*)malloc((iDatFileSize / iBlockSize + 1) * iBlockSize);
+ else
+ tempBuffer = (char*)malloc(iDatFileSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ int iFreeBlockNum = 0;
+ for (i = pos + 1 + iReservePos; i < iBlockNum;
+ i++) { // heli if > 126KB need pos + 2
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ } else {
+ for (; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0)
+ iFreeBlockNum++;
+ }
+ if ((iFreeBlockNum * iBlockSize) < (iDatFileSize)) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ int iReadTime = 0;
+ if (iDatFileSize % iBlockSize != 0)
+ iReadTime = iDatFileSize / iBlockSize + 1;
+ else
+ iReadTime = iDatFileSize / iBlockSize;
+ int iAlreadyRead = 0;
+ NVBAK_LOG("[NVRAM]:dat file read begin:%d,then write to ALLFile(data/nvram/ALLFile)\n", pos);
+ for (i = 0; i < iReadTime; i++) {
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != pos * (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:binregion lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = read(fd, tempBuffer + i * iBlockSize, iBlockSize);
+ NVBAK_LOG("[NVRAM]:dat file read size:%d\n", iResult);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:bin region read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iAlreadyRead++;
+ if (iAlreadyRead == iReadTime)
+ break;
+ for (j = pos + 1; j < iBlockNum; j++) {
+ if (tempBitmap1[j] == 0) {
+ pos = j;
+ break;
+ }
+ }
+ if (j >= iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks to read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:dat file read end:%d\n", pos);
+ iResult = write(iFileDesc_file, tempBuffer, iDatFileSize);
+ if (iResult != (int)iDatFileSize) {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+
+ if (bCleanBoot) {
+ bRet = FileOp_RestoreData_All();
+ } else {
+ bRet = FileOp_RestoreFromFiles(APBOOT);
+ bRet = FileOp_RestoreFromFiles(MDBOOT);
+ //Add for second modem in MT658*
+ bRet = FileOp_RestoreFromFiles(MD2BOOT);
+ //End of Comment
+ }
+
+ return bRet;
+
+}
+
+bool FileOp_ClearBinRegion(void)
+{
+ unsigned int fd;
+ unsigned long long blksize;
+ unsigned long long times;
+ struct timeval start, end;
+ unsigned long long range[2];
+ char path[128];
+ bool ret = true;
+ struct stat statbuf;
+ int iFileSize;
+
+ NVBAK_LOG("%s +++\n", __func__);
+
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("%s: NVM_Init fail", __func__);
+ return false;
+ }
+
+ memset(path, 0, sizeof(path));
+ snprintf(path, sizeof(path), "%s", g_NVRAM_BACKUP_DEVICE);
+
+ fd = open(path, O_WRONLY);
+ if (fd < 0) {
+ NVBAK_LOG("%s: can't open %s", __func__, path);
+ return false;
+ }
+
+#ifdef MTK_NVRAM_IN_A_FILE // NAND // openwrt/package/mtk/system/mtk_nvram/Makefile
+#define tempBufferSize (1024)
+ if (fd >= 0) {
+ if (fstat(fd, &statbuf) < 0) {
+ NVBAK_LOG("%s: fstat error. (errno=%d)", __func__, errno);
+ close(fd);
+ return false;
+ }
+ }
+ iFileSize = (int)statbuf.st_size;
+ NVBAK_LOG("%s: file size is %d", __func__, iFileSize);
+ blksize = statbuf.st_size;
+ gettimeofday(&start, NULL);
+ if (statbuf.st_size > 0) {
+ int write_size = 0;
+ int iSize = 0, iSizeTotal = 0;
+ char *tempBuffer = NULL;
+ tempBuffer = (char*)malloc(tempBufferSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("%s: memory malloc error,errono:%d,error:%s", __func__, errno, strerror(errno));
+ close(fd);
+ return false;
+ }
+ memset(tempBuffer, 0, tempBufferSize);
+ NVBAK_LOG("%s: Buffer Size is %d", __func__, tempBufferSize);
+ if (lseek(fd, 0, SEEK_SET) < 0) {
+ NVBAK_LOG("%s: lseek error. (errno=%d)", __func__, errno);
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+
+ if (tempBufferSize > statbuf.st_size) write_size = statbuf.st_size;
+ else write_size = tempBufferSize;
+
+ do {
+ iSize = (int)write(fd, tempBuffer, write_size);
+ if (iSize != write_size) {
+ NVBAK_LOG("%s: Real write size = %d, write Size = %d", __func__, iSize, write_size);
+ }
+ iSizeTotal += iSize;
+ if ((tempBufferSize + iSizeTotal) < statbuf.st_size) {
+ write_size = tempBufferSize;
+ }
+ else {
+ write_size = statbuf.st_size - iSizeTotal;
+ }
+ } while (iSizeTotal < statbuf.st_size);
+ free(tempBuffer);
+ NVBAK_LOG("%s: Total Size is %d", __func__, iSizeTotal);
+ blksize = iSizeTotal;
+ }
+#else // EMMC
+ if (ioctl(fd, BLKGETSIZE64, &blksize)) {
+ NVBAK_LOG("%s: %s: BLKGETSIZE64 ioctl failed",
+ __func__, path);
+ ret = false;
+ goto end;
+ }
+
+ range[0] = 0;
+ range[1] = blksize;
+
+ gettimeofday(&start, NULL);
+ if (ioctl(fd, BLKDISCARD, &range)) {
+ NVBAK_LOG("%s: %s: BLKDISCARD ioctl failed",
+ __func__, path);
+ ret = false;
+ goto end;
+ }
+#endif
+
+ gettimeofday(&end, NULL);
+
+ times = (((end.tv_sec - start.tv_sec) * 1000 * 1000) +
+ (end.tv_usec - start.tv_usec)) / 1000;
+
+ NVBAK_LOG("%s ---: clear %s bytes: %ld use %ld ms\n",
+ __func__, path, blksize, times);
+
+end:
+ close(fd);
+ return ret;
+}
+
+/*
+ * Notice
+ * For origin design, ccci_fsd may create files and folders whose attribute is "0000, root.root".
+ * In order to make cell phone more safe, ccci_fsd change its user from root to ccci.
+ * For, MOTA update, data patition will not be ereased; then, ccci_fsd loss the capability to read/write md nvram.
+ * EE will occur. So, we modify md nvram files's attribute fisrt here
+ */
+void change_md_nvram_attr(void) {
+#if 0
+ struct stat statbuf;
+ NVBAK_LOG("[NVRAM]:change_md_nvram_attr++");
+ if (stat("/mnt/vendor/nvdata/md/new_ver", &statbuf) == 0) {
+ NVBAK_LOG("[NVRAM]:new_ver file exist!!!");
+ NVBAK_LOG("[NVRAM]:change_md_nvram_attr--0");
+ return;
+ }
+
+ NVBAK_LOG("[NVRAM]:new_ver file NOT exist, change attr");
+ // Begin to change file mode and group
+ //system("chmod 0770 /mnt/vendor/nvdata/md");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM/NVD_IMEI");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM/IMPORTNT");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM/CALIBRAT");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM/NVD_CORE");
+ system("chmod 0770 /mnt/vendor/nvdata/md/NVRAM/NVD_DATA");
+ system("chmod 0660 /mnt/vendor/nvdata/md/NVRAM/NVD_IMEI/*");
+ system("chmod 0660 /mnt/vendor/nvdata/md/NVRAM/IMPORTNT/*");
+ system("chmod 0660 /mnt/vendor/nvdata/md/NVRAM/CALIBRAT/*");
+ system("chmod 0660 /mnt/vendor/nvdata/md/NVRAM/NVD_CORE/*");
+ system("chmod 0660 /mnt/vendor/nvdata/md/NVRAM/NVD_DATA/*");
+ // Make sure files has correct owner and group
+ system("chown root.nvram /mnt/vendor/nvdata/md");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_IMEI");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/IMPORTNT");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/CALIBRAT");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_CORE");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_DATA");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_IMEI/*");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/IMPORTNT/*");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/CALIBRAT/*");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_CORE/*");
+ system("chown root.nvram /mnt/vendor/nvdata/md/NVRAM/NVD_DATA/*");
+ // Write a flag file
+ system("echo flag > /mnt/vendor/nvdata/md/new_ver");
+ system("chmod 0660 /mnt/vendor/nvdata/md/new_ver");
+ NVBAK_LOG("[NVRAM]:change_md_nvram_attr--1");
+#endif
+}
+
+bool FileOp_RecoveryData() {
+ bool bRet;
+ int iResult;
+ unsigned int iCleanBootFlag = 0;
+ bool bCleanBoot;
+ int iFileDesc_Flag;
+ struct stat statbuf;
+ unsigned int iCompleteFlag;
+
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("[NVRAM]:FileOp_RecoveryData--NVM_Init fail!!!\n");
+ return false;
+ }
+ change_md_nvram_attr();
+
+ iResult = stat(g_pcNVM_Flag, &statbuf);
+ /*if(ret==0)
+ {
+ result=FileOp_GetCleanBootFlag(&iCleanBootFlag);
+ if(result!=true)
+ {
+ NVBAK_LOG("FileOp_RecoveryData:get clean boot flag fail\n");
+ return false;
+ }
+ }
+
+ if(ret==-1||iCleanBootFlag==CleanBootFlag)*/
+ NVBAK_LOG("[NVRAM]:iResult = %d, g_pcNVM_Flag=%s, errno=%d \n", iResult, g_pcNVM_Flag, errno);
+ if (0 == iResult) {
+
+ iFileDesc_Flag = open(g_pcNVM_Flag, O_RDONLY);
+ if (-1 == iFileDesc_Flag) {
+ NVBAK_LOG("[NVRAM]:Open Restore Flag file failed,go to restore!!!");
+ goto Recovery;
+ }
+ iResult = read(iFileDesc_Flag, &iCompleteFlag, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]:Read retore Flag file failed,go to restore!!!");
+ close(iFileDesc_Flag);
+ goto Recovery;
+ }
+ if (0x12345678 != iCompleteFlag) {
+ NVBAK_LOG("[NVRAM]:Restore Flag is error, go to retore!!!");
+ close(iFileDesc_Flag);
+ goto Recovery;
+ }
+ close(iFileDesc_Flag);
+ }
+
+ if (iResult == -1) {
+Recovery:
+ bCleanBoot = true;
+ NVBAK_LOG("enter clean boot\n");
+
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Enter clean boot, Restore From BinRegion");
+
+ if (!FileOp_RestoreFromBinRegion(bCleanBoot)) {
+ NVBAK_LOG("FileOp_RecoveryData:recovery all data fail\n");
+ return false;
+ }
+ /*if(!FileOp_SetCleanBootFlag(false))
+ {
+ NVBAK_LOG("FileOp_RecoveryData:clear claenboot flag fail\n");
+ return false;
+ }*/
+ iFileDesc_Flag = open(g_pcNVM_Flag, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (iFileDesc_Flag == -1) {
+ NVBAK_LOG("FileOp_RecoveryData:set claenboot done file fail\n");
+ return false;
+ }
+ unsigned int iCompleteFlag = 0x12345678;
+ write(iFileDesc_Flag, &iCompleteFlag, sizeof(unsigned int));
+ close(iFileDesc_Flag);
+
+ NVBAK_LOG("Leave clean boot, Restore From BinRegion\n");
+
+ if (nvram_misc_log_feature)
+ NVRAM_MISC_LOG(1, "Leave clean boot, Restore From BinRegion");
+ iResult = FileOp_RestoreFromBinRegionForDM();
+ if (!iResult) {
+ NVBAK_LOG("FileOp_RecoveryData:RestoreFromBinRegionForDM fail\n");
+ return false;
+ }
+ }
+ return true;
+}
+
+//-----------------------------------------------------------------------------
+static bool FileOp_MakeFile(const char* src, unsigned int* iFileNum,
+ int* FileSize) {
+ unsigned char acBuffer[1024];
+ int iSrc, iDst, iFileSize, iWriteSize, iSize; //FileSize;
+ int iFileDesc_file, iFileDesc_map, iFileDesc;
+ File_Title *FileInfo = NULL;
+ bool bRet = false;
+ struct stat statbuf;
+ off_t iResult = 0;
+
+ /* Koshi start */
+
+ NVBAK_LOG("FileOp_MakeFile: Handle the file (%s)", src);
+ if (iFileNum == NULL) {
+ NVBAK_LOG("FileOp_MakeFile:Input iFileNum Null pointer!\n");
+ return false;
+ }
+ if (FileSize == NULL) {
+ NVBAK_LOG("FileOp_MakeFile:Input FileSize Null pointer!\n");
+ return false;
+ }
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ close(iFileDesc_file);
+ return false;
+ }
+
+ /* Seek to the file end */
+ iResult = lseek(iFileDesc_file, 0, SEEK_END);
+ if (iResult == (off_t) - 1) {
+ NVBAK_LOG("iFileDesc_file seek error !\n");
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+
+ iResult = lseek(iFileDesc_map, 0, SEEK_END);
+
+ if (iResult == (off_t) - 1) {
+ NVBAK_LOG("iFileDesc_map seek error !\n");
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+
+ /* Koshi end */
+
+ iSrc = open(src, O_RDONLY);
+
+ if (-1 == iSrc) {
+ goto EXIT;
+ }
+
+ if (fstat(iSrc, &statbuf) < 0) {
+ NVBAK_LOG("[NVRAM]: fstat error. (errno=%d)", errno);
+ goto EXIT;
+ }
+ *FileSize = iFileSize = (int)statbuf.st_size;
+
+ NVBAK_LOG("File size is (%d)", iFileSize);
+
+ if (iFileSize == 0) {
+ goto EXIT;
+ }
+
+ while (iFileSize > 0) {
+ iWriteSize = min(iFileSize, (int)sizeof(acBuffer));
+ iSize = (int)read(iSrc, acBuffer, iWriteSize);
+ if (iSize != iWriteSize) {
+ goto EXIT;
+ }
+ iSize = (int)write(iFileDesc_file, acBuffer, iWriteSize);
+ if (iSize != iWriteSize) {
+ goto EXIT;
+ }
+ iFileSize -= iWriteSize;
+ }
+ /* malloc the buffer of title buf */
+ FileInfo = (File_Title *)malloc(sizeof(File_Title));
+ if (FileInfo == NULL) {
+ NVBAK_LOG("FileOp_MakeFile malloc memory for FileInfo failed!!\n");
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(iSrc);
+ return false;
+ }
+ memset(FileInfo, 0, sizeof(File_Title));
+
+ /* Koshi: write map file */
+ FileInfo->Filesize = *FileSize;
+ FileInfo->NameSize = 7;
+ *iFileNum += 1;
+ pthread_mutex_lock(&gFileStartAddrlock);
+ FileInfo->FielStartAddr = gFileStartAddr;
+ memcpy(FileInfo->cFileName, src, MAX_NAMESIZE);
+ write(iFileDesc_map, FileInfo, sizeof(File_Title));
+ NVBAK_LOG("FileInfo: Filenum %u (addr - %d / size - %d) \n", *iFileNum,
+ FileInfo->FielStartAddr, FileInfo->Filesize);
+ gFileStartAddr += FileInfo->Filesize;
+ pthread_mutex_unlock(&gFileStartAddrlock);
+
+ bRet = true;
+
+EXIT:
+ if (iSrc != -1) {
+ close(iSrc);
+ }
+ if (iFileDesc_file != -1) {
+ close(iFileDesc_file);
+ }
+ if (iFileDesc_map != -1) {
+ close(iFileDesc_map);
+ }
+ free(FileInfo);
+ return bRet;
+}
+
+bool FileOp_RestoreFromFiles(int eBackupType) {
+ int iFileDesc_file, iFileDesc_map, iFileDesc, iSize;
+ int iFileTitleOffset = 0;
+ short int iFileNum = 0;
+ char *buf; /* content */
+ File_Title *FileInfo = NULL;
+ bool bRet = true;
+ off_t iResult;
+ File_Title_Header1 FileTitleInfo1;
+ File_Title_Header2 FileTitleInfo2;
+ File_Title_Header3 FileTitleInfo3;
+ File_Title_Header4 FileTitleInfo4;
+ File_Title_Header5 FileTitleInfo5;
+ memset(&FileTitleInfo1, 0, sizeof(File_Title_Header1));
+ memset(&FileTitleInfo2, 0, sizeof(File_Title_Header2));
+ memset(&FileTitleInfo3, 0, sizeof(File_Title_Header3));
+ memset(&FileTitleInfo4, 0, sizeof(File_Title_Header4));
+ memset(&FileTitleInfo5, 0, sizeof(File_Title_Header5));
+ int fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header1);//In order to align, minus sizeof(short int)
+
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles: File_Title_Header1 set\n");
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles: File_Title_Header2 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header2) - 2 * sizeof(short
+ int); //In order to align, minus 2*sizeof(short int)
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles: File_Title_Header3 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header3) - 4 * sizeof(short
+ int); //In order to align, minus 4*sizeof(short int)
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles: File_Title_Header4 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header4) - 4 * sizeof(short int);
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles: File_Title_Header5 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header5);
+ }
+
+ int fis = sizeof(File_Title);
+
+ /* malloc the buffer of title buf */
+ FileInfo = (File_Title *)malloc(sizeof(File_Title));
+ if (FileInfo == NULL) {
+ NVBAK_LOG("FileOp_MakeFile malloc mermory for FileInfo failed\n");
+ return false;
+ }
+ memset(FileInfo, 0, sizeof(File_Title));
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ free(FileInfo);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open map data\n");
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+
+ if (lseek(iFileDesc_map, sizeof(unsigned int) + 2 * sizeof(unsigned int), SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(FileInfo);
+ return false;
+ }
+
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo1, sizeof(File_Title_Header1));
+ else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo2,
+ sizeof(File_Title_Header2) - 2 * sizeof(short
+ int)); //In order to align, minus 2*sizeof(short int)
+ else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo3,
+ sizeof(File_Title_Header3) - 4 * sizeof(short
+ int)); //In order to align, minus 4*sizeof(short int)
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo4,
+ sizeof(File_Title_Header4) - 4 * sizeof(short int));
+ else
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo5, sizeof(File_Title_Header5));
+#if 0
+ NVBAK_LOG("File_Title_Header iApBootNum(%d)", FileTitleInfo1.iApBootNum);
+ NVBAK_LOG("File_Title_Header iApCleanNum(%d)", FileTitleInfo1.iApCleanNum);
+ NVBAK_LOG("File_Title_Header iMdBootNum(%d)", FileTitleInfo1.iMdBootNum);
+ NVBAK_LOG("File_Title_Header iMdCleanNum(%d)", FileTitleInfo1.iMdCleanNum);
+ NVBAK_LOG("File_Title_Header iMdImpntNum(%d)", FileTitleInfo1.iMdImpntNum);
+ NVBAK_LOG("File_Title_Header iMdCoreNum(%d)", FileTitleInfo1.iMdCoreNum);
+ NVBAK_LOG("File_Title_Header iMdDataNum(%d)", FileTitleInfo1.iMdDataNum);
+
+ if (nvram_platform_header_offset == 0) {
+ //Add for second modem for MT658*
+ NVBAK_LOG("File_Title_Header iMd2BootNum(%d)", FileTitleInfo1.iMd2BootNum);
+ NVBAK_LOG("File_Title_Header iMd2CleanNum(%d)", FileTitleInfo1.iMd2CleanNum);
+ NVBAK_LOG("File_Title_Header iMd2ImpntNum(%d)", FileTitleInfo1.iMd2ImpntNum);
+ //End of Comemnt
+ if (nvram_md5_support()) {
+ NVBAK_LOG("File_Title_Header iMd5BootNum(%d)", FileTitleInfo1.iMd5BootNum);
+ NVBAK_LOG("File_Title_Header iMd5CleanNum(%d)", FileTitleInfo1.iMd5CleanNum);
+ NVBAK_LOG("File_Title_Header iMd5ImpntNum(%d)", FileTitleInfo1.iMd5ImpntNum);
+ }
+ }
+
+ if (nvram_evdo_support())
+ NVBAK_LOG("File_Title_Header iViaNum(%d)", FileTitleInfo1.iViaNum);
+
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)", FileTitleInfo1.iFileBufLen);
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)", FileTitleInfo1.BackupFlag);
+ }
+ if (nvram_platform_header_offset != 0) {
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)",
+ *( (short int *) & (FileTitleInfo1.iFileBufLen) -
+ nvram_platform_header_offset) );
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)",
+ *( (short int *) & (FileTitleInfo1.BackupFlag) -
+ nvram_platform_header_offset) );
+ }
+#endif
+ if (nvram_platform_header_offset != 0) {
+ fhs = fhs - nvram_platform_header_offset * 2;
+ }
+ switch (eBackupType) {
+ case APBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APBOOT start !");
+ iFileNum = FileTitleInfo1.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APBOOT start !");
+ iFileNum = FileTitleInfo2.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APBOOT start !");
+ iFileNum = FileTitleInfo3.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APBOOT start !");
+ iFileNum = FileTitleInfo4.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else { /*nvram_ecci_c2k_support()==ture*/
+ NVBAK_LOG("FileOp_RestoreFromFiles APBOOT start !");
+ iFileNum = FileTitleInfo5.iApBootNum;
+ iFileTitleOffset = fhs;
+ }
+ break;
+
+ case APCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APCLN start !");
+ iFileNum = FileTitleInfo1.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APCLN start !");
+ iFileNum = FileTitleInfo2.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APCLN start !");
+ iFileNum = FileTitleInfo3.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles APCLN start !");
+ iFileNum = FileTitleInfo4.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles APCLN start !");
+ iFileNum = FileTitleInfo5.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum) * fis;
+ }
+ break;
+
+ case MDBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDBOOT start !");
+ iFileNum = FileTitleInfo1.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum +
+ FileTitleInfo1.iApCleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDBOOT start !");
+ iFileNum = FileTitleInfo2.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum +
+ FileTitleInfo2.iApCleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDBOOT start !");
+ iFileNum = FileTitleInfo3.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum +
+ FileTitleInfo3.iApCleanNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDBOOT start !");
+ iFileNum = FileTitleInfo4.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum +
+ FileTitleInfo4.iApCleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDBOOT start !");
+ iFileNum = FileTitleInfo5.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum +
+ FileTitleInfo5.iApCleanNum) * fis;
+ }
+ break;
+
+ case MDCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCLN start !");
+ iFileNum = FileTitleInfo1.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCLN start !");
+ iFileNum = FileTitleInfo2.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCLN start !");
+ iFileNum = FileTitleInfo3.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCLN start !");
+ iFileNum = FileTitleInfo4.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCLN start !");
+ iFileNum = FileTitleInfo5.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum) * fis;
+ }
+ break;
+
+ case MDIMP:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDIMP start !");
+ iFileNum = FileTitleInfo1.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDIMP start !");
+ iFileNum = FileTitleInfo2.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDIMP start !");
+ iFileNum = FileTitleInfo3.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDIMP start !");
+ iFileNum = FileTitleInfo4.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDIMP start !");
+ iFileNum = FileTitleInfo5.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum) * fis;
+ }
+ break;
+
+ case MDCOR:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCOR start !");
+ iFileNum = FileTitleInfo1.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCOR start !");
+ iFileNum = FileTitleInfo2.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCOR start !");
+ iFileNum = FileTitleInfo3.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCOR start !");
+ iFileNum = FileTitleInfo4.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDCOR start !");
+ iFileNum = FileTitleInfo5.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum) * fis;
+ }
+ break;
+
+ case MDDATA:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDDATA start !");
+ iFileNum = FileTitleInfo1.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDDATA start !");
+ iFileNum = FileTitleInfo2.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDDATA start !");
+ iFileNum = FileTitleInfo3.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDDATA start !");
+ iFileNum = FileTitleInfo4.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MDDATA start !");
+ iFileNum = FileTitleInfo5.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum) * fis;
+ }
+ break;
+ //Add for second modem for MT658*
+ case MD2BOOT:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo1.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo2.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo3.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo4.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo5.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum) * fis;
+ }
+ }
+ break;
+
+ case MD2CLN:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo1.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo2.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo3.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo4.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum + FileTitleInfo4.iMd2BootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo5.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum) * fis;
+ }
+ }
+ break;
+
+ case MD2IMP:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo1.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo2.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo3.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum +
+ FileTitleInfo3.iMd2CleanNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo4.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum + FileTitleInfo4.iMd2BootNum +
+ FileTitleInfo4.iMd2CleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo5.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum) * fis;
+ }
+ }
+ break;
+
+ //End of Comment
+ case MD5BOOT:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo1.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo2.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo5.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum) * fis;
+ }
+ break;
+
+ case MD5CLN:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo1.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo2.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum +
+ FileTitleInfo2.iMd5BootNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo5.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum) * fis;
+ }
+
+ break;
+
+ case MD5IMP:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo1.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum + FileTitleInfo1.iMd5CleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo2.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum +
+ FileTitleInfo2.iMd5BootNum + FileTitleInfo2.iMd5CleanNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo5.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum) * fis;
+ }
+
+ break;
+
+ case VIA:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo1.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum + FileTitleInfo1.iMd5CleanNum +
+ FileTitleInfo1.iMd5ImpntNum) * fis;
+ } else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo3.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum +
+ FileTitleInfo3.iMd2CleanNum + FileTitleInfo3.iMd2ImpntNum) * fis;
+ } else if (nvram_platform_header_offset != 0 && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo3.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum) * fis;
+ } else
+ break;
+ break;
+ /*Add for C2K modem*/
+ case MD3BOOT:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3BOOT start !");
+ iFileNum = FileTitleInfo5.iMd3BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum) * fis;
+ }
+ break;
+
+ case MD3CLN:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3CLN start !");
+ iFileNum = FileTitleInfo5.iMd3CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum + FileTitleInfo5.iMd3BootNum) * fis;
+ }
+ break;
+
+ case MD3IMP:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3IMP start !");
+ iFileNum = FileTitleInfo5.iMd3ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum + FileTitleInfo5.iMd3BootNum +
+ FileTitleInfo5.iMd3CleanNum) * fis;
+ }
+ break;
+
+
+ //End of Comment
+
+ case ALL:
+ break;
+ default:
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ //break;
+ }
+
+ iResult = lseek(iFileDesc_map, iFileTitleOffset, SEEK_SET);
+
+ //restore all files one by one according to the fout.txt and fTitleInfo.txt
+ //do
+ //avoid the file num of some folder is zero
+ while (iFileNum > 0 && iFileNum <=SHRT_MAX) {
+ memset(FileInfo, 0, sizeof(File_Title));
+ iSize = (int)read(iFileDesc_map, FileInfo, sizeof(File_Title));
+ FileInfo->cFileName[MAX_NAMESIZE-1]='\0';
+ NVBAK_LOG("FileInfo: %s\n", FileInfo->cFileName);
+ NVBAK_LOG("FileInfo: startaddr(%x) size(%x) .\n", FileInfo->FielStartAddr,
+ FileInfo->Filesize);
+
+ if (strstr(FileInfo->cFileName, "FILE_VER")) {
+ iFileDesc = open_file_with_dirs(FileInfo->cFileName, 0664);
+ } else {
+ iFileDesc = open_file_with_dirs(FileInfo->cFileName, 0660);
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_RestoreFromFiles cannot create %s\n", FileInfo->cFileName);
+
+ //added
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ if (FileInfo->Filesize <= 0 || FileInfo->Filesize >=INT_MAX) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_RestoreFromFiles FileInfo->Filesize <= 0\n");
+
+ //added
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(iFileDesc);
+ free(FileInfo);
+ return false;
+ }
+
+ buf = (char *)malloc(FileInfo->Filesize);
+ if (buf == NULL) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_RestoreFromFiles malloc memory for buff faild\n");
+
+ //added
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(iFileDesc);
+ free(FileInfo);
+ return false;
+ }
+
+ //read the data and write to the file
+ iResult = lseek(iFileDesc_file, FileInfo->FielStartAddr, SEEK_SET);
+ if (iResult == -1) {
+ NVBAK_LOG("lseek fail !");
+ close(iFileDesc);
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ iSize = (int)read(iFileDesc_file, buf, FileInfo->Filesize);
+ if (iSize != FileInfo->Filesize) {
+ NVBAK_LOG("read fail !");
+ close(iFileDesc);
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ iSize = (int)write(iFileDesc, buf, FileInfo->Filesize);
+ if (iSize != FileInfo->Filesize) {
+ NVBAK_LOG("write fail !");
+ close(iFileDesc);
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ close(iFileDesc);
+ free(buf);
+ --iFileNum;
+ }
+ //while (--iFileNum);
+
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return true;
+}
+static unsigned int FileOp_ComputeCheckSum(void)
+{
+ time_t start = time(NULL);
+ NVBAK_LOG("Starting FileOp_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start));////add for log
+ int iFileDesc_file;
+ char cReadData;
+ unsigned int iFileSize;
+ unsigned int ulCheckSum=0;
+ int looptime;
+ struct stat st;
+ int i,flag,j;//add j
+ int iResult;
+ int iLength=sizeof(unsigned int);
+ unsigned int tempNum;
+ unsigned int tempBuf[4096] ;//add for read
+ int jloop_num=0;
+ int tmplooptime;//add for read
+ if(stat(g_pcNVM_AllFile,&st)<0)
+ {
+ NVBAK_LOG("Error FileOp_ComputeCheckSum stat \n");
+ return 0;
+ }
+ iFileSize=st.st_size;
+ looptime=iFileSize/(sizeof(unsigned int));
+ tmplooptime = looptime/(Loop_num) + 1;
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ if(iFileDesc_file<0)
+ {
+ NVBAK_LOG("FileOp_ComputeCheckSum cannot open data file\n");
+ return 0;
+ }
+ flag=1;
+ NVBAK_LOG("looptime is %d \n", looptime);////add for log
+ NVBAK_LOG("tmplooptime is %d \n", tmplooptime);////add for log
+ time_t start_while = time(NULL);////add for log
+ NVBAK_LOG("Start_while FileOp_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start_while));//add
+ for(i=0;i<tmplooptime;i++)
+ {
+ if(i != tmplooptime-1 )
+ {
+ jloop_num=Loop_num;}
+ else
+ {
+ jloop_num=looptime%(Loop_num);}
+ //NVBAK_LOG("Start_while: i is %d, FileOp_ComputeCheckSum (pid %d) on %s",i,getpid(),ctime(&start_while));// add for log
+ iResult=read(iFileDesc_file, tempBuf, jloop_num*iLength);
+ //NVBAK_LOG("Start_while: iResult is %d, FileOp_ComputeCheckSum (pid %d) on %s",iResult,getpid(),ctime(&start_while));//add for log
+ if(iResult!= jloop_num*iLength)
+ {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ //NVBAK_LOG("Start_while:before_while FileOp_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start_while));//add for log
+ for(j=0;j<jloop_num;j++)
+ {
+ if(flag)
+ {
+ ulCheckSum^=tempBuf[j];
+ flag=0;
+ }
+ else
+ {
+ ulCheckSum+=tempBuf[j];
+ flag=1;
+ }
+ }
+ }
+ tempNum=0;
+ iLength=iFileSize%(sizeof(unsigned int));
+ iResult=read(iFileDesc_file, &tempNum, iLength);
+ NVBAK_LOG("tempNum = %x", tempNum);//add for log
+ if(iResult!= iLength)
+ {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read last checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ ulCheckSum+=tempNum;
+ //ulCheckSum^=gFileStartAddr;
+ close(iFileDesc_file);
+ time_t end = time(NULL);
+ NVBAK_LOG("Ending FileOp_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&end));//add for log
+ return ulCheckSum;
+}
+#if 0
+static unsigned int FileOp_ComputeCheckSum(void) {
+ int iFileDesc_file;
+ char cReadData;
+ unsigned int iFileSize;
+ unsigned int ulCheckSum = 0;
+ int looptime;
+ struct stat st;
+ int i, flag;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+ unsigned int tempNum;
+
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("Error FileOp_ComputeCheckSum stat \n");
+ return 0;
+ }
+
+ iFileSize = st.st_size;
+
+ looptime = iFileSize / (sizeof(unsigned int));
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ if (iFileDesc_file < 0) {
+ NVBAK_LOG("FileOp_ComputeCheckSum cannot open data file\n");
+ return 0;
+ }
+ flag = 1;
+ for (i = 0; i < looptime; i++) {
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ if (flag) {
+ ulCheckSum ^= tempNum;
+ flag = 0;
+ } else {
+ ulCheckSum += tempNum;
+ flag = 1;
+ }
+ }
+ tempNum = 0;
+ iLength = iFileSize % (sizeof(unsigned int));
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read last checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ ulCheckSum += tempNum;
+ //ulCheckSum^=gFileStartAddr;
+ close(iFileDesc_file);
+ return ulCheckSum;
+}
+#endif
+
+static unsigned int FileOp_ComputeReadBackCheckSum(void) {
+ int iFileDesc_file;
+ char cReadData;
+ unsigned int iFileSize;
+ unsigned int ulCheckSum = 0;
+ int looptime;
+ struct stat st;
+ int i, flag;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+ unsigned int tempNum;
+
+ if (stat(g_pcNVM_AllFile_Check, &st) < 0) {
+ NVBAK_LOG("Error FileOp_ComputeCheckSum stat \n");
+ return 0;
+ }
+
+ iFileSize = st.st_size;
+
+ looptime = iFileSize / (sizeof(unsigned int));
+
+ iFileDesc_file = open(g_pcNVM_AllFile_Check , O_RDWR);
+ if (iFileDesc_file < 0) {
+ NVBAK_LOG("FileOp_ComputeCheckSum cannot open data file\n");
+ return 0;
+ }
+ flag = 1;
+ for (i = 0; i < looptime; i++) {
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ if (flag) {
+ ulCheckSum ^= tempNum;
+ flag = 0;
+ } else {
+ ulCheckSum += tempNum;
+ flag = 1;
+ }
+ }
+ tempNum = 0;
+ iLength = iFileSize % (sizeof(unsigned int));
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read last checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ ulCheckSum += tempNum;
+ //ulCheckSum^=gFileStartAddr;
+ close(iFileDesc_file);
+ return ulCheckSum;
+}
+
+static BackupFileInfo stBackupFileInfo;
+static bool FileOp_GetCheckSum(void) {
+ int iFileDesc_map;
+ unsigned int ulCheckSum;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDONLY);
+ if (iFileDesc_map < 0) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot open/create map data\n");
+ return false;
+ }
+ iResult = read(iFileDesc_map, &stBackupFileInfo.ulCheckSum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iLength = sizeof(unsigned int);
+ iResult = read(iFileDesc_map, &stBackupFileInfo.iCommonFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = read(iFileDesc_map, &stBackupFileInfo.iCustomFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ close(iFileDesc_map);
+
+ return true;
+}
+
+static bool FileOp_SetCheckSum(unsigned int ulCheckSum) {
+ int iFileDesc_map = 0;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+ unsigned int iOldCommonFileNum = g_i4CFG_File_Count;
+ unsigned int iOldCustomFileNum = g_i4CFG_File_Custom_Count;
+
+ pthread_mutex_lock(&gFileStartAddrlock);
+ ulCheckSum ^= gFileStartAddr;
+ gFileStartAddr = 0;
+ pthread_mutex_unlock(&gFileStartAddrlock);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_WRONLY);
+ if (iFileDesc_map < 0) {
+ NVBAK_LOG("FileOp_SetCheckSum cannot open/create map data\n");
+ return false;
+ }
+ iResult = write(iFileDesc_map, &ulCheckSum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_SetCheckSum cannot write checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ NVBAK_LOG("common file num:%d,custom file num:%d\n", iOldCommonFileNum,
+ iOldCustomFileNum);
+ iLength = sizeof(unsigned int);
+ iResult = write(iFileDesc_map, &iOldCommonFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_SetCheckSum cannot write common file num data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = write(iFileDesc_map, &iOldCustomFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("FileOp_SetCheckSum cannot write custom file num data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ close(iFileDesc_map);
+ return true;
+}
+
+static bool FileOp_CompareCheckSum(unsigned int ulCheckSum1,
+ unsigned int ulCheckSum2) {
+ if (ulCheckSum1 != ulCheckSum2)
+ return false;
+ return true;
+}
+
+bool FileOp_IsSyncWithBinRegion( ) {
+ bool bRet = true;
+ struct stat st;
+ unsigned int iMapFileSize, iDatFileSize;
+ int fd, iResult;
+ char cMtdDevName[128] = {0};
+ unsigned int ulCheckSum;
+
+ NVBAK_LOG("Enter %s\n", __FUNCTION__);
+
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("%s--NVM_Init fail !!!", __FUNCTION__);
+ return false;
+ }
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+ bool bWorkForBinRegion = true;
+ int iFileMask[ALL];
+ //need init ifilemark value ,otherwize it cause backup fail on 6592+kk1.mp3+non lte project
+ memset(iFileMask, 0, (ALL * (sizeof(int))));
+ if (!nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ iFileMask[13] = 1;
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[13] = 1;
+ } else {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ }
+ if (!(nvram_ecci_c2k_support())) {
+ iFileMask[14] = 1;
+ iFileMask[15] = 1;
+ iFileMask[16] = 1;
+ }
+
+// ret=FileOp_BackupData_All();
+ bRet = FileOp_BackupDataToFiles(iFileMask, bWorkForBinRegion);
+ if (bRet == false) {
+ NVBAK_LOG("[NVRAM]:Crete the map file and the data file fail\n");
+ return false;
+ }
+ if (stat(g_pcNVM_AllMap, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error MapFile stat \n");
+ return false;
+ }
+ iMapFileSize = st.st_size;
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("[NVRAM]:Error DatFile stat \n");
+ return false;
+ }
+ iDatFileSize = st.st_size;
+ NVBAK_LOG("[NVRAM]:info:iMapFileSize:%d,iDatFileSize:%d\n", iMapFileSize,
+ iDatFileSize);
+
+ //NVBAK_LOG("[NVRAM]:Backup_Partition:%d\n",iBackup_Partition);
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ free(bBadBlockBitMap);
+ return false;
+ }
+
+ // get checksum from AllMap
+ if (!FileOp_GetCheckSum()) {
+ NVBAK_LOG("[NVRAM]: FileOp_GetCheckSum() error \n");
+ close(fd);
+ return false;
+ }
+
+ // read checksum from bin region
+ if(lseek(fd, 3 * sizeof(unsigned int), SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]:seek to %lu error %d\n", 3 * sizeof(unsigned int), errno);
+ close(fd);
+ return false;
+ }
+ iResult = read(fd, &ulCheckSum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVBAK_LOG("[NVRAM]: read bin region error\r\n");
+ close(fd);
+ return false;
+ }
+ close(fd);
+
+ NVBAK_LOG("[NVRAM]: %s, checksum(in nvdata)=0x%X, checksum(in binregion)=0x%X \n", __FUNCTION__, stBackupFileInfo.ulCheckSum, ulCheckSum);
+ return (stBackupFileInfo.ulCheckSum == ulCheckSum);
+}
+
+//-----------------------------------------------------------------------------
+bool FileOp_BackupDataToFiles(int * iFileMask, bool bWorkForBinRegion) {
+ DIR *dir;
+ struct dirent *entry;
+ struct stat statbuf;
+ const char* lpSrcDirName = NULL;
+ char acSrcPathName[MAX_NAMESIZE];
+ char acDstPathName[MAX_NAMESIZE];
+ unsigned int iFileNum = 0;
+ int iFileDesc_map, FileSize = 0, eBackupType, iFileDesc_file;
+ bool bRet = true;
+ off_t iResult;
+ unsigned int i = 0;
+ unsigned int ulCheckSum = 0;
+ unsigned int iOldCommonFileNum = 0;
+ unsigned int iOldCustomFileNum = 0;
+ bool bMask = true;
+ int iMask[ALL];
+ File_Title_Header1 FileTitleInfo1;
+ File_Title_Header2 FileTitleInfo2;
+ File_Title_Header3 FileTitleInfo3;
+ File_Title_Header4 FileTitleInfo4;
+ File_Title_Header5 FileTitleInfo5;
+ memset(&FileTitleInfo1, 0, sizeof(File_Title_Header1));
+ memset(&FileTitleInfo2, 0, sizeof(File_Title_Header2));
+ memset(&FileTitleInfo3, 0, sizeof(File_Title_Header3));
+ memset(&FileTitleInfo4, 0, sizeof(File_Title_Header4));
+ memset(&FileTitleInfo5, 0, sizeof(File_Title_Header5));
+
+ if (iFileMask != NULL)
+ memcpy(iMask, iFileMask, (ALL * sizeof(int)));
+ else {
+ NVBAK_LOG("iFileMask is NULL\n");
+ return false;
+ }
+
+ /* Create the map file */
+ iFileDesc_map = open(g_pcNVM_AllMap, O_TRUNC | O_CREAT | O_WRONLY,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ return false;
+ }
+
+ write(iFileDesc_map, &ulCheckSum, sizeof(unsigned int));
+ write(iFileDesc_map, &iOldCommonFileNum, sizeof(unsigned int));
+ write(iFileDesc_map, &iOldCustomFileNum, sizeof(unsigned int));
+ /* Reserve the FileTitleInfo space */
+ if (!nvram_ecci_c2k_support()) {
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo1, sizeof(FileTitleInfo1));
+ else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short
+ int));//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short
+ int));//In order to align, minus 4*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo4,
+ sizeof(FileTitleInfo4) - 4 * sizeof(short int));
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo1,
+ sizeof(FileTitleInfo1) - nvram_platform_header_offset * 2);
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset != 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 4*sizeof(short int)
+ else
+ write(iFileDesc_map, &FileTitleInfo4,
+ sizeof(FileTitleInfo4) - 4 * sizeof(short int) - nvram_platform_header_offset *
+ 2);
+ } else
+ write(iFileDesc_map, &FileTitleInfo5, sizeof(FileTitleInfo5));
+
+
+ close(iFileDesc_map);
+ /* Create the data file */
+ iFileDesc_file = open(g_pcNVM_AllFile , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create data file\n");
+ return false;
+ }
+ close(iFileDesc_file);
+
+ for (eBackupType = APBOOT; eBackupType < ALL; eBackupType++) {
+ if (iMask[eBackupType] == 1)
+ continue;
+
+ switch (eBackupType) {
+ case APBOOT:
+ NVBAK_LOG("FileOp_BackupData_All APBOOT start !");
+ lpSrcDirName = g_pcNVM_APRdebFile;
+ break;
+
+ case MDBOOT:
+ NVBAK_LOG("FileOp_BackupData_All MDBOOT start !");
+ lpSrcDirName = g_pcNVM_MDRdebFile;
+ break;
+
+ case APCLN:
+ NVBAK_LOG("FileOp_BackupData_All APCLN start !");
+ lpSrcDirName = g_pcNVM_APCalFile;
+ break;
+
+ case MDCLN:
+ NVBAK_LOG("FileOp_BackupData_All MDCLN start !");
+ lpSrcDirName = g_pcNVM_MDCalFile;
+ break;
+
+ case MDIMP:
+ NVBAK_LOG("FileOp_BackupData_All MDIMP start !");
+ lpSrcDirName = g_pcNVM_MDImptFile;
+ break;
+
+ case MDCOR:
+ NVBAK_LOG("FileOp_BackupData_All MDCOR start !");
+ lpSrcDirName = g_pcNVM_MDCoreFile;
+ break;
+
+ case MDDATA:
+ NVBAK_LOG("FileOp_BackupData_All MDDATA start !");
+ lpSrcDirName = g_pcNVM_MDDataFile;
+ break;
+ //Add for second modem for MT658*
+ case MD2BOOT:
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("FileOp_BackupData_All MD2BOOT start !");
+ lpSrcDirName = g_pcNVM_MD2RdebFile;
+ }
+ break;
+
+ case MD2CLN:
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("FileOp_BackupData_All MD2CLN start !");
+ lpSrcDirName = g_pcNVM_MD2CalFile;
+ }
+ break;
+
+ case MD2IMP:
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("FileOp_BackupData_All MD2IMP start !");
+ lpSrcDirName = g_pcNVM_MD2ImptFile;
+ }
+ break;
+
+ //End of Comment
+ //LTE support
+ case MD5BOOT:
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("FileOp_BackupData_All MD5BOOT start !");
+ lpSrcDirName = g_pcNVM_MD5RdebFile;
+ }
+ break;
+
+ case MD5CLN:
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("FileOp_BackupData_All MD5CLN start !");
+ lpSrcDirName = g_pcNVM_MD5CalFile;
+ }
+ break;
+
+ case MD5IMP:
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("FileOp_BackupData_All MD5IMP start !");
+ lpSrcDirName = g_pcNVM_MD5ImptFile;
+ }
+ break;
+ case VIA:
+ NVBAK_LOG("FileOp_BackupData_All VIA start !");
+ lpSrcDirName = g_pcNVM_Via;
+ break;
+ /*Add for C2K modem*/
+ case MD3BOOT:
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("FileOp_BackupData_All MD3BOOT start !");
+ lpSrcDirName = g_pcNVM_MD3RdebFile;
+ }
+ break;
+
+ case MD3CLN:
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("FileOp_BackupData_All MD3CLN start !");
+ lpSrcDirName = g_pcNVM_MD3CalFile;
+ }
+ break;
+
+ case MD3IMP:
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("FileOp_BackupData_All MD3IMP start !");
+ lpSrcDirName = g_pcNVM_MD3ImptFile;
+ }
+ break;
+ /*Add for C2K modem -End*/
+ case ALL:
+ default:
+ return false;
+ //break;
+ }
+
+ /* Check the folder in NvRam is exists */
+ NVBAK_LOG("open dir %s !", lpSrcDirName);
+ if (lpSrcDirName) {
+ dir = opendir(lpSrcDirName);
+ }
+
+ if (dir == NULL) {
+ NVBAK_LOG("FileOp_BackupData open dir: %s ,this dir not exist!", lpSrcDirName);
+ continue;
+ //return false;
+ }
+
+ while (1) {
+ entry = readdir(dir);
+
+ if (entry == NULL) {
+ break;
+ }
+
+ if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+
+ sprintf(acSrcPathName, "%s/%s", lpSrcDirName, entry->d_name);
+ NVBAK_LOG("FileOp_BackupData: (%s)\n", acSrcPathName);
+ if (bWorkForBinRegion) {
+ if (eBackupType == APBOOT || eBackupType == APCLN) {
+ bMask = true;
+ for (i = 0; i < g_Backup_File_Count; i++) {
+ if (0 == strcmp(entry->d_name, aBackupToBinRegion[i].cFileName) ) {
+ bMask = false;
+ break;
+ }
+ }
+
+ if (bMask == true)
+ continue;
+ }
+ }
+
+ // avoid backup the files in performace array to PC side.
+ if (!bWorkForBinRegion) {
+ if (eBackupType == APBOOT || eBackupType == APCLN) {
+ bMask = false;
+ for (i = 0; i < g_Performance_File_Count; i++) {
+
+ if (0 == strcmp(entry->d_name, aPerformance[i].cFileName) ) {
+ NVBAK_LOG("skip (%s)\n", entry->d_name);
+ bMask = true;
+ break;
+ }
+ }
+
+ if (bMask == true)
+ continue;
+ }
+ }
+ if (!FileOp_MakeFile(acSrcPathName, &iFileNum, &FileSize)) {
+ NVBAK_LOG("ERROR FileOp_BackupData (%s)\n", acSrcPathName);
+ bRet = false;
+ continue;
+ }
+ }
+ closedir(dir);
+ NVBAK_LOG("FileSize is (%d) !", FileSize);
+ NVBAK_LOG("FileNum is (%u) !", iFileNum);
+ if (nvram_platform_header_offset == 0 && !nvram_ecci_c2k_support()) {
+ if (nvram_md5_support() && nvram_evdo_support()) {
+ FileTitleInfo1.iFileBufLen += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !", FileTitleInfo1.iFileBufLen);
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ FileTitleInfo2.iFileBufLen += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !", FileTitleInfo2.iFileBufLen);
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ FileTitleInfo3.iFileBufLen += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !", FileTitleInfo3.iFileBufLen);
+ } else {
+ FileTitleInfo4.iFileBufLen += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !", FileTitleInfo4.iFileBufLen);
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ FileTitleInfo5.iFileBufLen += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !", FileTitleInfo5.iFileBufLen);
+ }
+
+ if (nvram_platform_header_offset != 0 && !nvram_ecci_c2k_support()) {
+ if (nvram_md5_support() && nvram_evdo_support()) {
+ *((short int *) & (FileTitleInfo1.iFileBufLen) - nvram_platform_header_offset)
+ += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !",
+ *((short int *) & (FileTitleInfo1.iFileBufLen) - nvram_platform_header_offset));
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ *((short int *) & (FileTitleInfo2.iFileBufLen) - nvram_platform_header_offset)
+ += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !",
+ *((short int *) & (FileTitleInfo2.iFileBufLen) - nvram_platform_header_offset));
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ *((short int *) & (FileTitleInfo3.iFileBufLen) - nvram_platform_header_offset)
+ += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !",
+ *((short int *) & (FileTitleInfo3.iFileBufLen) - nvram_platform_header_offset));
+ } else {
+ *((short int *) & (FileTitleInfo4.iFileBufLen) - nvram_platform_header_offset)
+ += FileSize;
+ NVBAK_LOG("iFileBufLen is (%d) !",
+ *((short int *) & (FileTitleInfo4.iFileBufLen) - nvram_platform_header_offset));
+ }
+ }
+
+
+ switch (eBackupType) {
+ case APBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iApBootNum = iFileNum;
+ NVBAK_LOG("APBOOT num (%d) !", FileTitleInfo1.iApBootNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iApBootNum = iFileNum;
+ NVBAK_LOG("APBOOT num (%d) !", FileTitleInfo2.iApBootNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iApBootNum = iFileNum;
+ NVBAK_LOG("APBOOT num (%d) !", FileTitleInfo3.iApBootNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iApBootNum = iFileNum;
+ NVBAK_LOG("APBOOT num (%d) !", FileTitleInfo4.iApBootNum);
+ } else {
+ FileTitleInfo5.iApBootNum = iFileNum;
+ NVBAK_LOG("APBOOT num (%d) !", FileTitleInfo5.iApBootNum);
+ }
+ break;
+
+ case MDBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMdBootNum = iFileNum;
+ NVBAK_LOG("MDBOOT num (%d) !", FileTitleInfo1.iMdBootNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMdBootNum = iFileNum;
+ NVBAK_LOG("MDBOOT num (%d) !", FileTitleInfo2.iMdBootNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMdBootNum = iFileNum;
+ NVBAK_LOG("MDBOOT num (%d) !", FileTitleInfo3.iMdBootNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMdBootNum = iFileNum;
+ NVBAK_LOG("MDBOOT num (%d) !", FileTitleInfo4.iMdBootNum);
+ } else {
+ FileTitleInfo5.iMdBootNum = iFileNum;
+ NVBAK_LOG("MDBOOT num (%d) !", FileTitleInfo5.iMdBootNum);
+ }
+ break;
+
+ case APCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iApCleanNum = iFileNum;
+ NVBAK_LOG("APCLN num (%d) !", FileTitleInfo1.iApCleanNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iApCleanNum = iFileNum;
+ NVBAK_LOG("APCLN num (%d) !", FileTitleInfo2.iApCleanNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iApCleanNum = iFileNum;
+ NVBAK_LOG("APCLN num (%d) !", FileTitleInfo3.iApCleanNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iApCleanNum = iFileNum;
+ NVBAK_LOG("APCLN num (%d) !", FileTitleInfo4.iApCleanNum);
+
+ } else {
+ FileTitleInfo5.iApCleanNum = iFileNum;
+ NVBAK_LOG("APCLN num (%d) !", FileTitleInfo5.iApCleanNum);
+
+ }
+ break;
+
+ case MDCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMdCleanNum = iFileNum;
+ NVBAK_LOG("MDCLN num (%d) !", FileTitleInfo1.iMdCleanNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMdCleanNum = iFileNum;
+ NVBAK_LOG("MDCLN num (%d) !", FileTitleInfo2.iMdCleanNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMdCleanNum = iFileNum;
+ NVBAK_LOG("MDCLN num (%d) !", FileTitleInfo3.iMdCleanNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMdCleanNum = iFileNum;
+ NVBAK_LOG("MDCLN num (%d) !", FileTitleInfo4.iMdCleanNum);
+ } else {
+ FileTitleInfo5.iMdCleanNum = iFileNum;
+ NVBAK_LOG("MDCLN num (%d) !", FileTitleInfo5.iMdCleanNum);
+ }
+ break;
+
+ case MDIMP:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMdImpntNum = iFileNum;
+ NVBAK_LOG("MDIMP num (%d) !", FileTitleInfo1.iMdImpntNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMdImpntNum = iFileNum;
+ NVBAK_LOG("MDIMP num (%d) !", FileTitleInfo2.iMdImpntNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMdImpntNum = iFileNum;
+ NVBAK_LOG("MDIMP num (%d) !", FileTitleInfo3.iMdImpntNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMdImpntNum = iFileNum;
+ NVBAK_LOG("MDIMP num (%d) !", FileTitleInfo4.iMdImpntNum);
+ } else {
+ FileTitleInfo5.iMdImpntNum = iFileNum;
+ NVBAK_LOG("MDIMP num (%d) !", FileTitleInfo5.iMdImpntNum);
+ }
+ break;
+
+ case MDCOR:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMdCoreNum = iFileNum;
+ NVBAK_LOG("MDCOR num (%d) !", FileTitleInfo1.iMdCoreNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMdCoreNum = iFileNum;
+ NVBAK_LOG("MDCOR num (%d) !", FileTitleInfo2.iMdCoreNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMdCoreNum = iFileNum;
+ NVBAK_LOG("MDCOR num (%d) !", FileTitleInfo3.iMdCoreNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMdCoreNum = iFileNum;
+ NVBAK_LOG("MDCOR num (%d) !", FileTitleInfo4.iMdCoreNum);
+ } else {
+ FileTitleInfo5.iMdCoreNum = iFileNum;
+ NVBAK_LOG("MDCOR num (%d) !", FileTitleInfo5.iMdCoreNum);
+ }
+ break;
+
+ case MDDATA:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMdDataNum = iFileNum;
+ NVBAK_LOG("MDDATA num (%d) !", FileTitleInfo1.iMdDataNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMdDataNum = iFileNum;
+ NVBAK_LOG("MDDATA num (%d) !", FileTitleInfo2.iMdDataNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMdDataNum = iFileNum;
+ NVBAK_LOG("MDDATA num (%d) !", FileTitleInfo3.iMdDataNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMdDataNum = iFileNum;
+ NVBAK_LOG("MDDATA num (%d) !", FileTitleInfo4.iMdDataNum);
+ } else {
+ FileTitleInfo5.iMdDataNum = iFileNum;
+ NVBAK_LOG("MDDATA num (%d) !", FileTitleInfo5.iMdDataNum);
+ }
+ break;
+ //Add for second modem for MT658*
+ case MD2BOOT:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMd2BootNum = iFileNum;
+ NVBAK_LOG("MD2BOOT num (%d) !", FileTitleInfo1.iMd2BootNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd2BootNum = iFileNum;
+ NVBAK_LOG("MD2BOOT num (%d) !", FileTitleInfo2.iMd2BootNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd2BootNum = iFileNum;
+ NVBAK_LOG("MD2BOOT num (%d) !", FileTitleInfo3.iMd2BootNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd2BootNum = iFileNum;
+ NVBAK_LOG("MD2BOOT num (%d) !", FileTitleInfo4.iMd2BootNum);
+ } else {
+ FileTitleInfo5.iMd2BootNum = iFileNum;
+ NVBAK_LOG("MD2BOOT num (%d) !", FileTitleInfo5.iMd2BootNum);
+ }
+ }
+ break;
+
+ case MD2CLN:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMd2CleanNum = iFileNum;
+ NVBAK_LOG("MD2CLN num (%d) !", FileTitleInfo1.iMd2CleanNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd2CleanNum = iFileNum;
+ NVBAK_LOG("MD2CLN num (%d) !", FileTitleInfo2.iMd2CleanNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd2CleanNum = iFileNum;
+ NVBAK_LOG("MD2CLN num (%d) !", FileTitleInfo3.iMd2CleanNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd2CleanNum = iFileNum;
+ NVBAK_LOG("MD2CLN num (%d) !", FileTitleInfo4.iMd2CleanNum);
+ } else {
+ FileTitleInfo5.iMd2CleanNum = iFileNum;
+ NVBAK_LOG("MD2CLN num (%d) !", FileTitleInfo5.iMd2CleanNum);
+ }
+ }
+ break;
+
+ case MD2IMP:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMd2ImpntNum = iFileNum;
+ NVBAK_LOG("MD2IMP num (%d) !", FileTitleInfo1.iMd2ImpntNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd2ImpntNum = iFileNum;
+ NVBAK_LOG("MD2IMP num (%d) !", FileTitleInfo2.iMd2ImpntNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd2ImpntNum = iFileNum;
+ NVBAK_LOG("MD2IMP num (%d) !", FileTitleInfo3.iMd2ImpntNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd2ImpntNum = iFileNum;
+ NVBAK_LOG("MD2IMP num (%d) !", FileTitleInfo4.iMd2ImpntNum);
+ } else {
+ FileTitleInfo5.iMd2ImpntNum = iFileNum;
+ NVBAK_LOG("MD2IMP num (%d) !", FileTitleInfo5.iMd2ImpntNum);
+ }
+ }
+ break;
+ //End of Comment
+
+ //LTE support
+ case MD5BOOT:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMd5BootNum = iFileNum;
+ NVBAK_LOG("MD5BOOT num (%d) !", FileTitleInfo1.iMd5BootNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd5BootNum = iFileNum;
+ NVBAK_LOG("MD5BOOT num (%d) !", FileTitleInfo2.iMd5BootNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd5BootNum = iFileNum;
+ NVBAK_LOG("MD5BOOT num (%d) !", FileTitleInfo3.iMd5BootNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd5BootNum = iFileNum;
+ NVBAK_LOG("MD5BOOT num (%d) !", FileTitleInfo4.iMd5BootNum);
+ } else {
+ FileTitleInfo5.iMd5BootNum = iFileNum;
+ NVBAK_LOG("MD5BOOT num (%d) !", FileTitleInfo5.iMd5BootNum);
+ }
+ }
+ break;
+
+ case MD5CLN:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iMd5CleanNum = iFileNum;
+ NVBAK_LOG("MD5CLN num (%d) !", FileTitleInfo1.iMd5CleanNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd5CleanNum = iFileNum;
+ NVBAK_LOG("MD5CLN num (%d) !", FileTitleInfo2.iMd5CleanNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd5CleanNum = iFileNum;
+ NVBAK_LOG("MD5CLN num (%d) !", FileTitleInfo3.iMd5CleanNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd5CleanNum = iFileNum;
+ NVBAK_LOG("MD5CLN num (%d) !", FileTitleInfo4.iMd5CleanNum);
+ } else {
+ FileTitleInfo5.iMd5CleanNum = iFileNum;
+ NVBAK_LOG("MD5CLN num (%d) !", FileTitleInfo5.iMd5CleanNum);
+ }
+ }
+ break;
+
+ case MD5IMP:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support() ) {
+ FileTitleInfo1.iMd5ImpntNum = iFileNum;
+ NVBAK_LOG("MD5IMP num (%d) !", FileTitleInfo1.iMd5ImpntNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iMd5ImpntNum = iFileNum;
+ NVBAK_LOG("MD5IMP num (%d) !", FileTitleInfo2.iMd5ImpntNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iMd5ImpntNum = iFileNum;
+ NVBAK_LOG("MD5IMP num (%d) !", FileTitleInfo3.iMd5ImpntNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iMd5ImpntNum = iFileNum;
+ NVBAK_LOG("MD5IMP num (%d) !", FileTitleInfo4.iMd5ImpntNum);
+ } else {
+ FileTitleInfo5.iMd5ImpntNum = iFileNum;
+ NVBAK_LOG("MD5IMP num (%d) !", FileTitleInfo5.iMd5ImpntNum);
+ }
+ }
+ break;
+ case VIA:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ FileTitleInfo1.iViaNum = iFileNum;
+ NVBAK_LOG("VIA num (%d) !", FileTitleInfo1.iViaNum);
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo2.iViaNum = iFileNum;
+ NVBAK_LOG("VIA num (%d) !", FileTitleInfo2.iViaNum);
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo3.iViaNum = iFileNum;
+ NVBAK_LOG("VIA num (%d) !", FileTitleInfo3.iViaNum);
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ FileTitleInfo4.iViaNum = iFileNum;
+ NVBAK_LOG("VIA num (%d) !", FileTitleInfo4.iViaNum);
+ }
+ break;
+ case MD3BOOT:
+ if (nvram_ecci_c2k_support()) {
+ FileTitleInfo5.iMd3BootNum = iFileNum;
+ NVBAK_LOG("iMd3BootNum num (%d) !", FileTitleInfo5.iMd3BootNum);
+ }
+ break;
+ case MD3CLN:
+ if (nvram_ecci_c2k_support()) {
+ FileTitleInfo5.iMd3CleanNum = iFileNum;
+ NVBAK_LOG("iMd3CleanNum num (%d) !", FileTitleInfo5.iMd3CleanNum);
+ }
+ break;
+ case MD3IMP:
+ if (nvram_ecci_c2k_support()) {
+ FileTitleInfo5.iMd3ImpntNum = iFileNum;
+ NVBAK_LOG("iMd3ImpntNum num (%d) !", FileTitleInfo5.iMd3ImpntNum);
+ }
+ break;
+ case ALL:
+ default:
+ return false;
+ break;
+ }
+ iFileNum = 0;
+ FileSize = 0;
+ }
+
+ iFileDesc_map = open(g_pcNVM_AllMap, O_WRONLY);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ return false;
+ }
+ write(iFileDesc_map, &ulCheckSum, sizeof(unsigned int));
+ write(iFileDesc_map, &iOldCommonFileNum, sizeof(unsigned int));
+ write(iFileDesc_map, &iOldCustomFileNum, sizeof(unsigned int));
+ if (!nvram_ecci_c2k_support()) {
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo1, sizeof(FileTitleInfo1));
+ else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short
+ int));//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short
+ int));//In order to align, minus 4*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo4,
+ sizeof(FileTitleInfo4) - 4 * sizeof(short int));
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo1,
+ sizeof(FileTitleInfo1) - nvram_platform_header_offset * 2);
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset != 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ write(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 4*sizeof(short int)
+ else {
+ int len = sizeof(FileTitleInfo4) - 4 * sizeof(short int) - nvram_platform_header_offset * 2;
+ if (write(iFileDesc_map, &FileTitleInfo4, len) != len) {
+ NVBAK_LOG("[NVRAM]: write error. (errno=%d)", errno);
+ close(iFileDesc_map);
+ return false;
+ }
+ }
+ } else
+ write(iFileDesc_map, &FileTitleInfo5, sizeof(FileTitleInfo5));
+
+ close(iFileDesc_map);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDONLY);
+ memset(&FileTitleInfo1, 0, sizeof(File_Title_Header1));
+ memset(&FileTitleInfo2, 0, sizeof(File_Title_Header2));
+ memset(&FileTitleInfo3, 0, sizeof(File_Title_Header3));
+ memset(&FileTitleInfo4, 0, sizeof(File_Title_Header4));
+ if(INVALID_HANDLE_VALUE == iFileDesc_map)
+ {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ return false;
+ }
+ iResult = lseek(iFileDesc_map, sizeof(unsigned int) + 2 * sizeof(unsigned int),
+ SEEK_SET);
+ if (!nvram_ecci_c2k_support()) {
+
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo1, sizeof(FileTitleInfo1));
+ else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short
+ int));//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short
+ int));//In order to align, minus 4*sizeof(short int)
+ else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && !nvram_evdo_support())
+ if (read(iFileDesc_map, &FileTitleInfo4,sizeof(FileTitleInfo4) - 4 * sizeof(short int)) != sizeof(FileTitleInfo4) - 4 * sizeof(short int)) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc_map);
+ return false;
+ }
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo1,
+ sizeof(FileTitleInfo1) - nvram_platform_header_offset * 2);
+ else if (nvram_platform_header_offset != 0 && nvram_md5_support()
+ && !nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo2,
+ sizeof(FileTitleInfo2) - 2 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 2*sizeof(short int)
+ else if (nvram_platform_header_offset != 0 && !nvram_md5_support()
+ && nvram_evdo_support())
+ read(iFileDesc_map, &FileTitleInfo3,
+ sizeof(FileTitleInfo3) - 4 * sizeof(short int) - nvram_platform_header_offset *
+ 2);//In order to align, minus 4*sizeof(short int)
+ else
+ if (read(iFileDesc_map, &FileTitleInfo4,
+ sizeof(FileTitleInfo4) - 4 * sizeof(short int) - nvram_platform_header_offset *
+ 2) != sizeof(FileTitleInfo4) - 4 * sizeof(short int) - nvram_platform_header_offset * 2) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc_map);
+ return false;
+ }
+ } else
+ read(iFileDesc_map, &FileTitleInfo5, sizeof(FileTitleInfo5));
+#if 0
+ NVBAK_LOG("File_Title_Header iApBootNum(%d)", FileTitleInfo1.iApBootNum);
+ NVBAK_LOG("File_Title_Header iApCleanNum(%d)", FileTitleInfo1.iApCleanNum);
+ NVBAK_LOG("File_Title_Header iMdBootNum(%d)", FileTitleInfo1.iMdBootNum);
+ NVBAK_LOG("File_Title_Header iMdCleanNum(%d)", FileTitleInfo1.iMdCleanNum);
+ NVBAK_LOG("File_Title_Header iMdImpntNum(%d)", FileTitleInfo1.iMdImpntNum);
+ NVBAK_LOG("File_Title_Header iMdCoreNum(%d)", FileTitleInfo1.iMdCoreNum);
+ NVBAK_LOG("File_Title_Header iMdDataNum(%d)", FileTitleInfo1.iMdDataNum);
+ if (nvram_platform_header_offset == 0) {
+ //Add for second modem for MT658*
+ NVBAK_LOG("File_Title_Header iMd2BootNum(%d)", FileTitleInfo1.iMd2BootNum);
+ NVBAK_LOG("File_Title_Header iMd2CleanNum(%d)", FileTitleInfo1.iMd2CleanNum);
+ NVBAK_LOG("File_Title_Header iMd2ImpntNum(%d)", FileTitleInfo1.iMd2ImpntNum);
+ //End of Comment
+ if (nvram_md5_support()) {
+ NVBAK_LOG("File_Title_Header iMd5BootNum(%d)", FileTitleInfo1.iMd5BootNum);
+ NVBAK_LOG("File_Title_Header iMd5CleanNum(%d)", FileTitleInfo1.iMd5CleanNum);
+ NVBAK_LOG("File_Title_Header iMd5ImpntNum(%d)", FileTitleInfo1.iMd5ImpntNum);
+ }
+ }
+
+ if (nvram_evdo_support())
+ NVBAK_LOG("File_Title_Header iViaNum(%d)", FileTitleInfo1.iViaNum);
+
+
+ if (nvram_platform_header_offset == 0) {
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)", FileTitleInfo1.iFileBufLen);
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)", FileTitleInfo1.BackupFlag);
+ }
+ if (nvram_platform_header_offset != 0) {
+
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)",
+ *((short int *) & (FileTitleInfo1.iFileBufLen) - nvram_platform_header_offset));
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)",
+ *((short int *) & (FileTitleInfo1.BackupFlag) - nvram_platform_header_offset));
+ }
+
+#endif
+
+ close(iFileDesc_map);
+
+ ulCheckSum = FileOp_ComputeCheckSum();
+ NVBAK_LOG("FileOp_ComputeCheckSum:%x", ulCheckSum);
+ if (!FileOp_SetCheckSum(ulCheckSum)) {
+ NVBAK_LOG("FileOp_SetCheckSum Fail !");
+ return false;
+ }
+ NVBAK_LOG("FileOp_BackupData_All end !");
+ return bRet;
+}
+
+
+bool FileOp_BackupData_Special(char * buffer, int count , int mode) {
+ int iLen = 0, iTmpStart = 0, iNum = 0, eBackupType, i;
+ int iFolderNo;
+ bool bResult;
+
+ char strFolder[ALL][10];
+ snprintf(strFolder[0], sizeof(strFolder[0]),"%s", "APRDEB");
+ snprintf(strFolder[1], sizeof(strFolder[1]),"%s", "APRDCL");
+ snprintf(strFolder[2], sizeof(strFolder[2]),"%s", "NVD_IMEI");
+ snprintf(strFolder[3], sizeof(strFolder[3]),"%s", "CALIBRAT");
+ snprintf(strFolder[4], sizeof(strFolder[4]),"%s", "IMPORTNT");
+ snprintf(strFolder[5], sizeof(strFolder[5]),"%s", "NVD_CORE");
+ snprintf(strFolder[6], sizeof(strFolder[6]),"%s", "NVD_DATA");
+
+
+ if (buffer == NULL) {
+ NVBAK_LOG("BackupData_Special:The pointer of buffer is NULL!");
+ return false;
+ }
+ NVBAK_LOG("buffer:%s", buffer);
+
+ if ( count < 0 || count >= 1024 || mode < 0 ) {
+ NVBAK_LOG("BackupData_Special: the value of count and mode is wrong!");
+ return false;
+ }
+
+ int iMask[ALL];
+ memset(iMask, 0, (ALL * (sizeof(int))));
+ char tempBuf[count][(1024 / count) + 1];
+ iLen = strlen(buffer);
+
+ for (i = 0; i < iLen; i++) {
+ if (buffer[i] == ';') {
+ memcpy(tempBuf[iNum], buffer + iTmpStart, i - iTmpStart);
+ tempBuf[iNum][i - iTmpStart] = '\0';
+ iTmpStart += (i - iTmpStart + 1);
+ iNum++;
+ }
+ }
+ if (iNum != count) {
+ NVBAK_LOG("BackupData_Special: the num of real string doesn't match with the value of count !");
+ return false;
+ }
+ for (i = 0; i < iNum; i++) {
+ for (iFolderNo = 0; iFolderNo < ALL; iFolderNo++) {
+ if (0 == strcmp(tempBuf[i], strFolder[iFolderNo])) {
+ iMask[iFolderNo] = 1;
+ break;
+ }
+ }
+ }
+ NVBAK_LOG("iMask:%d,%d,%d,%d,%d,%d,%d\n", iMask[0], iMask[1], iMask[2],
+ iMask[3], iMask[4], iMask[5], iMask[6]);
+ bool bWorkForBinRegionBackup = false;
+ bResult = FileOp_BackupDataToFiles(iMask, bWorkForBinRegionBackup);
+ return bResult;
+}
+
+//-----------------------------------------------------------------------------
+bool FileOp_RestoreData_All(void) {
+ DIR *dir;
+ struct dirent *entry;
+ struct stat statbuf;
+ const char* lpDestDirName = NULL;
+ char acSrcPathName[MAX_NAMESIZE];
+ char acDstPathName[MAX_NAMESIZE];
+ bool bRet = true;
+ int iResult, eBackupType;
+ unsigned int ulSavedCheckSum;
+ unsigned int ulCheckSum;
+ struct stat st;
+ unsigned int iFileSize;
+ int error_flag = 0;
+ int iFileMask[ALL];
+ memset(iFileMask, 0, (ALL * (sizeof(int))));
+ if (!nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ iFileMask[13] = 1;
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[13] = 1;
+ } else {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ }
+ if (!nvram_ecci_c2k_support()) {
+ iFileMask[14] = 1;
+ iFileMask[15] = 1;
+ iFileMask[16] = 1;
+ }
+
+ NVBAK_LOG("[FileOp_RestoreData_All] start !");
+
+ if (!FileOp_GetCheckSum()) {
+ NVBAK_LOG("[FileOp_RestoreData_All] GetCheckSum Fail !");
+ return false;
+ }
+ ulSavedCheckSum = stBackupFileInfo.ulCheckSum;
+ ulCheckSum = FileOp_ComputeCheckSum();
+ NVBAK_LOG("ulCheckSun:%x", ulCheckSum);
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("Error FileOp_RestoreData stat \n");
+ return false;
+ }
+ iFileSize = st.st_size;
+ NVBAK_LOG("iFileSize:%d\n", iFileSize);
+ ulCheckSum ^= iFileSize;
+
+ NVBAK_LOG("FileOp_CheckSum:%x,%x", ulSavedCheckSum, ulCheckSum);
+ if (!FileOp_CompareCheckSum(ulSavedCheckSum, ulCheckSum)) {
+ NVBAK_LOG("check sum not match!");
+ return false;
+ }
+ for (eBackupType = APBOOT; eBackupType < ALL; eBackupType++) {
+ if (iFileMask[eBackupType] == 1)
+ continue;
+ bRet = FileOp_RestoreFromFiles(eBackupType);
+ if (bRet == false) {
+ NVBAK_LOG("RestoreFromFiles Error!! The No.%d file", eBackupType);
+ error_flag = 1;
+ }
+ }
+ if (error_flag == 0) {
+ NVBAK_LOG("[FileOp_RestoreData_All] end !");
+ return true;
+ } else {
+ NVBAK_LOG("[FileOp_RestoreData_All] some file restore failed !");
+ return false;
+ }
+
+}
+
+bool FileOp_BackupAll_NvRam(void) {
+ bool bRet = true;
+ int iMask[ALL];
+ bool bWorkForBinRegionBackup = false;
+ memset(iMask, 0, (ALL * (sizeof(int))));
+ NVBAK_LOG("FileOp_BackupAll_NvRam Start !");
+
+ bRet = FileOp_BackupDataToFiles(iMask, bWorkForBinRegionBackup);
+
+ NVBAK_LOG("FileOp_BackupAll_NvRam End !");
+
+ return bRet;
+}
+
+bool FileOp_RestoreAll_NvRam(void) {
+ bool bRet = true;
+
+ NVBAK_LOG("[FileOp_RestoreAll_NvRam] Start !");
+
+ bRet = FileOp_RestoreData_All();
+
+ NVBAK_LOG("[FileOp_RestoreAll_NvRam] End !");
+
+ if (bRet == true) {
+ bRet = NVM_DataVerConvertAll(stBackupFileInfo.iCommonFileNum,
+ stBackupFileInfo.iCustomFileNum);
+ if (bRet != true)
+ NVBAK_LOG("[FileOp_RestoreAll_NvRam] convert data fail !");
+
+ }
+ return bRet;
+}
+
+static int iDMFlag = 0x12121212;
+char *strDMFileFolderPath = "/mnt/vendor/nvdata/dm";
+bool FileOp_BackupToBinRegionForDM() {
+ DIR *dir;
+ struct dirent *entry;
+ struct stat statbuf;
+ struct stat st;
+ char acSrcPathName[MAX_NAMESIZE];
+ char *tempBuf = NULL;
+ //char *strDMFileFolderPath = "/mnt/vendor/nvdata/dm";
+ char *strUSBFilePath = "/mnt/vendor/nvdata/APCFG/APRDEB/OMADM_USB";
+ int iFileDesc_map, iFileDesc_file;
+ int iFileSize, iFileNum, iResult, fd, iMapFileSize, iDatFileSize;
+
+ iFileSize = 0;
+ iFileNum = 0;
+ /* Create the map file */
+ NVBAK_LOG("enter backup to binregion for DM\n");
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("FileOp_BackupToBinRegionForDM--NVM_Init fail !!!\n");
+ return false;
+ }
+
+ iFileDesc_map = open(g_pcNVM_AllMap, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ return false;
+ }
+ iResult = write(iFileDesc_map, &iFileNum,
+ sizeof(int)); //alloct the space for iFileNum
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create data file\n");
+ close(iFileDesc_map);
+ return false;
+ }
+
+ dir = opendir(strDMFileFolderPath);
+ if (dir == NULL) {
+ NVBAK_LOG("FileOp_BackupData open dir: %s ,this dir not exist!",
+ strDMFileFolderPath);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ return false;
+ }
+
+ while (1) {
+ entry = readdir(dir);
+
+ if (entry == NULL) {
+ break;
+ }
+
+ if (lstat(entry->d_name, &statbuf) < 0) {
+ NVBAK_LOG("[NVRAM]: lstat error. (errno=%d)", errno);
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ return false;
+ }
+
+ if (!strcmp(entry->d_name, ".") || !strcmp(entry->d_name, "..")) {
+ continue;
+ }
+
+ sprintf(acSrcPathName, "%s/%s", strDMFileFolderPath, entry->d_name);
+ NVBAK_LOG("FileOp_BackupData (%s)\n", acSrcPathName);
+ iFileNum++;
+ if (stat(acSrcPathName, &st) < 0) {
+ NVBAK_LOG("Error FileOp_RestoreData stat \n");
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ return false;
+ }
+ iFileSize = st.st_size;
+ tempBuf = (char*)malloc(iFileSize);
+ if (tempBuf == NULL) {
+ NVBAK_LOG("Error malloc\n");
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ return false;
+ }
+ iResult = write(iFileDesc_map, acSrcPathName, MAX_NAMESIZE);
+ if (iResult != MAX_NAMESIZE) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:write1:%d\n", iResult);
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuf);
+ return false;
+ }
+
+ iResult = write(iFileDesc_map, &iFileSize, sizeof(int));
+ if (iResult != sizeof(int)) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:write2:%d\n", iResult);
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuf);
+ return false;
+ }
+ fd = open(acSrcPathName , O_RDONLY);
+ if (INVALID_HANDLE_VALUE == fd) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create data file\n");
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuf);
+ return false;
+ }
+
+ iResult = read(fd, tempBuf, iFileSize);
+
+ if (iResult != iFileSize) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:read1:%d\n", iResult);
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuf);
+ return false;
+ }
+ /*
+ if(strcmp(acSrcPathName,"/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr")==0)
+ {
+ int m;
+ for(m=0;m<8;m++)
+ NVBAK_LOG("capid:%d\n",*(char*)(tempBuf+m));
+ }*/
+ iResult = write(iFileDesc_file, tempBuf, iFileSize);
+ if (iResult != iFileSize) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:write dat:%d\n", iResult);
+ closedir(dir);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuf);
+ return false;
+ }
+ /*
+ if(strcmp(acSrcPathName,"/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr")==0)
+ {
+ int m;
+ for(m=0;m<8;m++)
+ NVBAK_LOG("capid:%d\n",*(char*)(tempBuf+m));
+ }*/
+ close(fd);
+ free(tempBuf);
+ tempBuf = NULL;
+ }
+ closedir(dir);
+ //USB File
+ if (stat(strUSBFilePath, &st) >= 0) {
+ NVBAK_LOG("FileOp_RestoreData stat:%s \n",strUSBFilePath);
+ iFileSize = st.st_size;
+ memset(acSrcPathName, 0, MAX_NAMESIZE);
+ memcpy(acSrcPathName, strUSBFilePath, strlen(strUSBFilePath) + 1);
+ NVBAK_LOG("USB file:%s\n", acSrcPathName);
+
+ iResult = write(iFileDesc_map, acSrcPathName, MAX_NAMESIZE);
+ iResult = write(iFileDesc_map, &iFileSize, sizeof(int));
+ iFileNum++;
+ /*lseek(iFileDesc_map, 0, SEEK_SET);
+ iResult = write(iFileDesc_map, &iFileNum, sizeof(int));*/
+ tempBuf = (char*)malloc(iFileSize);
+ if (tempBuf == NULL) {
+ NVBAK_LOG("Error malloc2\n");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ return false;
+ }
+ fd = open(strUSBFilePath , O_RDONLY);
+ if (INVALID_HANDLE_VALUE == fd) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create data file\n");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuf);
+ return false;
+ }
+
+ iResult = read(fd, tempBuf, iFileSize);
+ if (iResult != iFileSize) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:read1:%d\n", iResult);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuf);
+ return false;
+ }
+
+ iResult = write(iFileDesc_file, tempBuf, iFileSize);
+ if (iResult != iFileSize) {
+ NVBAK_LOG("Error FileOp_BackupSpecialFile:write dat:%d\n", iResult);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuf);
+ return false;
+ }
+ close(fd);
+ }
+ lseek(iFileDesc_map, 0, SEEK_SET);
+ iResult = write(iFileDesc_map, &iFileNum, sizeof(int));
+ NVBAK_LOG("Write filenum(%d) to ALLMAP\n", iFileNum);
+ free(tempBuf);
+ tempBuf = NULL;
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+
+ //backup to bin region
+ if (stat(g_pcNVM_AllMap, &st) < 0) {
+ NVBAK_LOG("[NVRAM]: stat error. (errno=%d)", errno);
+ return false;
+ }
+ iMapFileSize = st.st_size;
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("[NVRAM]: stat error. (errno=%d)", errno);
+ return false;
+ }
+ iDatFileSize = st.st_size;
+
+ int iWriteSize, iBlockSize, iPartitionSize, i, pos = 0;
+ char cMtdDevName[128] = {0};
+ char *bDMBitmap = NULL;
+ struct mtd_info_user info;
+ struct erase_info_user erase_info;
+// int iBackup_Partition=get_partition_numb("nvram");
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_NVRAM_BACKUP_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_BackupToBinRegionForDM get device info error\r\n");
+ return false;
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+ iWriteSize = info.writesize;
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+
+
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+
+ bDMBitmap = (char*)malloc(BinRegionBlockTotalNum - NvRamBlockNum);
+ if (bDMBitmap == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc bDMBitmap Failed!\n");
+ close(fd);
+ return false;
+ }
+ memset(bDMBitmap, 0, ((BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char)));
+ NVBAK_LOG("[NVRAM]:mtd get info:iBlockSize:%d,iPartitionSize:%d\n", iBlockSize,
+ iPartitionSize);
+ //check whether the block is a bad block or not
+ for (i = (BinRegionBlockTotalNum - 1); i >= NvRamBlockNum; i--) {
+ erase_info.start = i * iBlockSize;
+ erase_info.length = iBlockSize;
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+
+ if (!NVM_EraseDeviceBlock(cMtdDevName, erase_info)) {
+ NVBAK_LOG("[NVRAM]:mtd erase error,block id:%d\r\n", i);
+ bDMBitmap[i - NvRamBlockNum] = 1;
+ } else {
+ bDMBitmap[i - NvRamBlockNum] = 0;
+ pos++;
+ }
+ } else
+ pos++;
+ }
+ NVBAK_LOG("[NVRAM]DM the available block num:%d\n", pos);
+ if ((int)(iMapFileSize + iDatFileSize + 3 * sizeof(int) +
+ (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char)) >= (pos * iBlockSize)) {
+ NVBAK_LOG("[NVRAM]DM File Size is more than the available block size \n");
+ close(fd);
+ free(bDMBitmap);
+ return false;
+ }
+ tempBuf = (char*)malloc(pos * iBlockSize);
+ if (tempBuf == NULL) {
+ NVBAK_LOG("[NVRAM]DM malloc error \n");
+ close(fd);
+ free(bDMBitmap);
+ return false;
+ }
+ memset(tempBuf, 0xFF, pos * iBlockSize);
+ memcpy(tempBuf, &iDMFlag, sizeof(int));
+ memcpy(tempBuf + sizeof(int), &iMapFileSize, sizeof(int));
+ memcpy(tempBuf + 2 * sizeof(int), &iDatFileSize, sizeof(int));
+ memcpy(tempBuf + 3 * sizeof(int), bDMBitmap,
+ (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char));
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDONLY);
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("DM FileOp_MakeFile cannot open map data\n");
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return false;
+ }
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDONLY);
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("DM FileOp_MakeFile cannot open data file\n");
+ close(fd);
+ free(tempBuf);
+ close(iFileDesc_map);
+ free(bDMBitmap);
+ return false;
+ }
+ iResult = read(iFileDesc_map,
+ tempBuf + 3 * sizeof(int) + (BinRegionBlockTotalNum - NvRamBlockNum) * sizeof(
+ char), iMapFileSize);
+ if (iResult != iMapFileSize) {
+ NVBAK_LOG("DM FileOp_MakeFile cannot read map file:%d\n", iResult);
+ close(fd);
+ free(tempBuf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(bDMBitmap);
+ return false;
+ }
+
+ iResult = read(iFileDesc_file,
+ tempBuf + 3 * sizeof(int) + (BinRegionBlockTotalNum - NvRamBlockNum) * sizeof(
+ char) + iMapFileSize, iDatFileSize);
+ if (iResult != iDatFileSize) {
+ NVBAK_LOG("DM FileOp_MakeFile cannot read map file:%d\n", iResult);
+ close(fd);
+ free(tempBuf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(bDMBitmap);
+ return false;
+ }
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+
+ //write file into bin region
+ iWriteSize = 0;
+ if ((int)(3 * sizeof(int) + (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(
+ char) + iMapFileSize + iDatFileSize) > iBlockSize) {
+ int offset = 0;
+ for (pos = NvRamBlockNum; pos < BinRegionBlockTotalNum; pos++) {
+ if (bDMBitmap[pos - NvRamBlockNum] == 0) {
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return false;
+ }
+ iResult = write(fd, tempBuf + offset * iBlockSize, iBlockSize);
+ if (iResult != iBlockSize) {
+ NVBAK_LOG("DM FileOp_MakeFile cannot write file into bin region :%d,%d\n",
+ iResult, pos);
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return false;
+ }
+ offset++;
+ iWriteSize += iBlockSize;
+ if (iWriteSize >= (int)(3 * sizeof(int) + (BinRegionBlockTotalNum -
+ NvRamBlockNum)*sizeof(char) + iMapFileSize + iDatFileSize))
+ break;
+ } else
+ continue;
+
+ }
+
+ } else {
+ for (pos = NvRamBlockNum; pos < BinRegionBlockTotalNum; pos++) {
+ if (bDMBitmap[pos - NvRamBlockNum] == 0) {
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return false;
+ }
+
+ iResult = write(fd, tempBuf, iBlockSize);
+ if (iResult != iBlockSize) {
+ NVBAK_LOG("DM FileOp_MakeFile cannot write file into bin region :%d,%d\n",
+ iResult, pos);
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return false;
+ } else
+ break;
+ } else
+ continue;
+ }
+
+ }
+
+ NVBAK_LOG("BackupToBinRegion for DM success\n");
+ close(fd);
+ free(tempBuf);
+ free(bDMBitmap);
+ return true;
+}
+
+bool FileOp_RestoreFromBinRegionForDM() {
+ char acSrcPathName[MAX_NAMESIZE];
+ int iFileDesc_file, iFileDesc_map, fd, iResult, iBlockNum, iFileDesc;
+ int iMapFileSize, iDatFileSize, iBlockSize, i, iDMBackupFlag, iFileNum,
+ iFileSize;
+
+ char cMtdDevName[128] = {0};
+ char *bDMBitmap = NULL;
+ char *tempBuffer = NULL;
+ char *tempBuffer1 = NULL;
+ struct mtd_info_user info;
+ bool bFound = false;
+ // int iBackup_Partition=get_partition_numb("nvram");
+ NVBAK_LOG("enter restore from binregion for DM\n");
+
+ if(isWriteOnProtection()) {
+ NVBAK_LOG("[NVRAM]: Skip to restore DM because DM doesn't backup to bin region for new chip.\n");
+ return true;
+ }
+
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegionForDM--NVM_Init fail !!!\n");
+ return false;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegionForDM get device info error\r\n");
+ return false;
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+
+ iBlockSize = info.erasesize;
+ //iPartitionSize=info.size;
+
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+
+ bDMBitmap = (char*)malloc(BinRegionBlockTotalNum - NvRamBlockNum);
+ if (bDMBitmap == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc bDMBitmap Failed!\n");
+ close(fd);
+ return false;
+ }
+ tempBuffer = (char*)malloc((BinRegionBlockTotalNum - NvRamBlockNum) *
+ iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ free(bDMBitmap);
+ return false;
+ }
+ int offset = 0;
+ for (i = NvRamBlockNum; i < BinRegionBlockTotalNum; i++) {
+ lseek(fd, i * iBlockSize, SEEK_SET);
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(bDMBitmap);
+ return false;
+ }
+ memcpy(&iDMBackupFlag, tempBuffer, sizeof(int));
+ if (iDMBackupFlag == iDMFlag) {
+ NVBAK_LOG("[NVRAM]:DM bin region found:%d\n", i);
+ bFound = true;
+ } else
+ continue;
+ memcpy(&iMapFileSize, tempBuffer + sizeof(int), sizeof(int));
+ memcpy(&iDatFileSize, tempBuffer + 2 * sizeof(int), sizeof(int));
+ memcpy(bDMBitmap, tempBuffer + 3 * sizeof(int),
+ (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char));
+ if ((int)(iMapFileSize + iDatFileSize + 3 * sizeof(int) +
+ (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char)) > iBlockSize) {
+ int j, iReadSize = iBlockSize;
+ for (j = i - NvRamBlockNum + 1; j < BinRegionBlockTotalNum - NvRamBlockNum;
+ j++) {
+ if (bDMBitmap[j] == 0) {
+ lseek(fd, (j + NvRamBlockNum)*iBlockSize, SEEK_SET);
+ iResult = read(fd, tempBuffer + iReadSize, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(bDMBitmap);
+ return false;
+ }
+ iReadSize += iBlockSize;
+ if (iReadSize >= (int)(iMapFileSize + iDatFileSize + 3 * sizeof(int) +
+ (BinRegionBlockTotalNum - NvRamBlockNum)*sizeof(char))) {
+ NVBAK_LOG("[NVRAM]:All DM File read from bin region\n");
+ break;
+ }
+ }
+ }
+ break;
+ } else
+ break;
+ }
+ if (!bFound) {
+ NVBAK_LOG("[NVRAM]:not find DM file in bin region\n");
+ close(fd);
+ free(tempBuffer);
+ free(bDMBitmap);
+ return false;
+ }
+ free(bDMBitmap);
+ iFileDesc_file = open(g_pcNVM_AllFile , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create file data\n");
+ free(tempBuffer);
+ close(fd);
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open/create map data\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ return false;
+ }
+ if (iMapFileSize<0 || iMapFileSize>=INT_MAX) {
+ NVBAK_LOG("iMapFileSize overflow\n");
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(fd);
+ return false;
+ }
+ if (iDatFileSize<0 || iDatFileSize>=INT_MAX) {
+ NVBAK_LOG("iDatFileSize overflow\n");
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(fd);
+ return false;
+ }
+ iResult = write(iFileDesc_map,
+ tempBuffer + 3 * sizeof(int) + (BinRegionBlockTotalNum - NvRamBlockNum) *
+ sizeof(char), iMapFileSize);
+ if (iResult != iMapFileSize) {
+ NVBAK_LOG("write map file fail:%d\n", iResult);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(fd);
+ return false;
+ }
+
+ iResult = write(iFileDesc_file,
+ tempBuffer + 3 * sizeof(int) + (BinRegionBlockTotalNum - NvRamBlockNum) *
+ sizeof(char) + iMapFileSize, iDatFileSize);
+ if (iResult != iDatFileSize) {
+ NVBAK_LOG("write dat file fail:%d\n", iResult);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(fd);
+ return false;
+ }
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ close(fd);
+
+ //creat files based on the temp file
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDONLY);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDONLY);
+ if(INVALID_HANDLE_VALUE == iFileDesc_file)
+ {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open file data\n");
+ if(iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ return false;
+ }
+
+ if(INVALID_HANDLE_VALUE == iFileDesc_map)
+ {
+ /* Error handling */
+ NVBAK_LOG("FileOp_MakeFile cannot open map data\n");
+ close(iFileDesc_file);
+ return false;
+ }
+ tempBuffer = (char*)malloc(iMapFileSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("malloc tempBuffer fail!\n");
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+ tempBuffer1 = (char*)malloc(iDatFileSize);
+ if (tempBuffer1 == NULL) {
+ NVBAK_LOG("malloc tempBuffer1 fail!\n");
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = read(iFileDesc_map, tempBuffer, iMapFileSize);
+ if (iResult != iMapFileSize) {
+ NVBAK_LOG("read map file fail:%d\n", iResult);
+ free(tempBuffer);
+ free(tempBuffer1);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = read(iFileDesc_file, tempBuffer1, iDatFileSize);
+ if (iResult != iDatFileSize) {
+ NVBAK_LOG("read dat file fail:%d\n", iResult);
+ free(tempBuffer);
+ free(tempBuffer1);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ return false;
+ }
+ iFileNum = 0;
+ memcpy(&iFileNum, tempBuffer, sizeof(int));
+ offset = 0;
+ i = 0;
+ NVBAK_LOG("dat file num:%d\n", iFileNum);
+ while (iFileNum > 0 && iFileNum <= INT_MAX) {
+ memcpy(acSrcPathName, tempBuffer + sizeof(int) + i * (MAX_NAMESIZE + sizeof(
+ int)), MAX_NAMESIZE);
+ NVBAK_LOG("dm file:%s\n", acSrcPathName);
+ memcpy(&iFileSize, tempBuffer + sizeof(int) + i * (MAX_NAMESIZE + sizeof(
+ int)) + MAX_NAMESIZE, sizeof(int));
+ NVBAK_LOG("file size:%d\n", iFileSize);
+ if (iFileSize <= 0 || iFileSize >= INT_MAX) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_RestoreFromFilesForDM cannot create %s\n", acSrcPathName);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuffer);
+ free(tempBuffer1);
+ return false;
+ }
+ iFileDesc = open_file_with_dirs(acSrcPathName, 0660);
+ if (INVALID_HANDLE_VALUE == iFileDesc) {
+ /* Error handling */
+ NVBAK_LOG("FileOp_RestoreFromFilesForDM cannot create %s\n", acSrcPathName);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuffer);
+ free(tempBuffer1);
+ return false;
+ }
+
+ /*
+ if(strcmp(acSrcPathName,"/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr")==0)
+ {
+ int m;
+ for(m=0;m<8;m++)
+ NVBAK_LOG("capid:%d\n",*(char*)(tempBuffer1+offset+m));
+ }
+ */
+ iResult = write(iFileDesc, tempBuffer1 + offset, iFileSize);
+ if (iResult != iFileSize) {
+ NVBAK_LOG("FileOp_RestoreFromFilesForDM cannot write %s,%d\n", acSrcPathName,
+ iResult);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuffer);
+ free(tempBuffer1);
+ close(iFileDesc);
+ return false;
+ }
+ offset += iFileSize;
+ iFileNum--;
+ i++;
+ close(iFileDesc);
+ }
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(tempBuffer);
+ free(tempBuffer1);
+ // close(iFileDesc);
+ NVBAK_LOG("restore from binregion for DM Success\n");
+ return true;
+}
+
+
+bool FileOp_RestoreFromBinRegion_ToFile() {
+ int iFileDesc_file, iFileDesc_map, fd, iResult, iBlockNum, iFileDesc_backupflag;
+ unsigned int iMapFileSize, iDatFileSize, iBlockSize, iPartitionSize, iWriteSize;
+ unsigned short iAPBackupFileNum, iMDBackupFileNum;
+ bool bRet = true;
+ struct stat st;
+
+ char cMtdDevName[128] = {0};
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, j, pos = 0, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ char temp[128];
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegion_ToFile--NVM_Init fail !!!\n");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]:Enter FileOp_RestoreFromBinRegion_ToFile\n");
+
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (bRet == false) {
+ NVBAK_LOG("[NVRAM]:FileOp_RestoreFromBinRegion_ToFile get device info error\r\n");
+ return false;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error\r\n");
+ return false;
+ }
+
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+ iWriteSize = info.writesize;
+
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+
+ lseek(fd, pos * iBlockSize, SEEK_SET);
+ iResult = read(fd, tempBuffer, iBlockSize);
+
+ iMapFileSize = *((unsigned int*)tempBuffer); // get the mapfile
+ unsigned int iMemSize;
+ int iReservePos = 0;
+ int iReserveBlockCount = 0;
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize = (((iMapFileSize + 3 * sizeof(unsigned int)) / iWriteSize) + 1) *
+ iWriteSize;
+ else
+ iMemSize = iMapFileSize + 3 * sizeof(unsigned
+ int); //mapfile size, datfile size, cleanboot fla
+ NVBAK_LOG("[NVRAM Restore - heli]:map file size:%d\n", iMemSize);
+
+ if ( iMemSize > iBlockSize ) { // > 180KB
+ iReservePos = 1;
+ iReserveBlockCount = 2;
+ } else { // < 128KB
+ iReservePos = 0;
+ iReserveBlockCount = 1;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ tempBuffer = (char*)malloc(iBlockSize *
+ iReserveBlockCount); // for 128KB and 256KB
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:iBlockSize:%d\n", iBlockSize);
+ NVBAK_LOG("[NVRAM]:iPartitionSize:%d\n", iPartitionSize);
+ NVBAK_LOG("[NVRAM]:BinRegionBlockTotalNum:%d\n", BinRegionBlockTotalNum);
+ NVBAK_LOG("[NVRAM]:NvRamBlockNum:%d\n", NvRamBlockNum);
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ return false;
+ }
+
+ int iBitmapFlag = 0;
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if (lseek(fd, (iBlockNum - iReservePos)*iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(&iBitmapFlag, tempBuffer + 3 * NvRamBlockNum * sizeof(char),
+ sizeof(unsigned int));
+ if (iBitmapFlag != (int)BitmapFlag) {
+ NVBAK_LOG("[NVRAM]:iBitMapFlag:%d,BitMapFlag:%d\n", iBitmapFlag, BitmapFlag);
+ continue;
+ }
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVBAK_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ #if 0
+ for (i = 0; i < NvRamBlockNum; i++) {
+ NVBAK_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, tempBitmap1[i]);
+ }
+ #endif
+ for (i = 0; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:can not find map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer,
+ iBlockSize * iReserveBlockCount); // if mapfile > 128KB read 2*128KB
+ NVBAK_LOG("[NVRAM]:map file read size:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iMapFileSize = *((unsigned int*)tempBuffer);
+ iDatFileSize = *((unsigned int*)(tempBuffer + 4));
+ iAPBackupFileNum = *((unsigned int*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize));
+ iMDBackupFileNum = *((unsigned short*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize + sizeof(unsigned int)));
+ NVBAK_LOG("[NVRAM]: map file:%d,dat file:%d\n", iMapFileSize, iDatFileSize);
+ /* NVBAK_LOG("[NVRAM]: AP backup file num:%d,MD backup file num:%d\n",iAPBackupFileNum,iMDBackupFileNum);
+ if(iAPBackupFileNum != 0 ){
+ iFileDesc_backupflag = open(g_pcNVM_BackFlag , O_TRUNC|O_CREAT|O_RDWR|O_SYNC, S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP);
+ if(INVALID_HANDLE_VALUE == iFileDesc_backupflag)
+ {
+ NVBAK_LOG("[NVRAM]: cannot open backup file num data\n");
+ close(iFileDesc_backupflag);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ result=write(iFileDesc_backupflag,&iAPBackupFileNum,sizeof(unsigned int));
+ if(result!=(int)sizeof(unsigned int))
+ {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_backupflag);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }*/
+ iFileDesc_file = open(g_pcNVM_AllFile_Check, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ iFileDesc_map = open(g_pcNVM_AllMap_Check, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = write(iFileDesc_map, tempBuffer + 3 * sizeof(unsigned int),
+ iMapFileSize);
+ if (iResult != (int)iMapFileSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ if (iDatFileSize % iBlockSize != 0)
+ tempBuffer = (char*)malloc((iDatFileSize / iBlockSize + 1) * iBlockSize);
+ else
+ tempBuffer = (char*)malloc(iDatFileSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ int iFreeBlockNum = 0;
+ for (i = pos + 1 + iReservePos; i < iBlockNum;
+ i++) { // heli if > 126KB need pos + 2
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ } else {
+ for (; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0)
+ iFreeBlockNum++;
+ }
+ if ((iFreeBlockNum * iBlockSize) < (iDatFileSize)) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ int iReadTime = 0;
+ if (iDatFileSize % iBlockSize != 0)
+ iReadTime = iDatFileSize / iBlockSize + 1;
+ else
+ iReadTime = iDatFileSize / iBlockSize;
+ int iAlreadyRead = 0;
+ NVBAK_LOG("[NVRAM]:dat file read begin:%d\n", pos);
+ for (i = 0; i < iReadTime; i++) {
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != pos * (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:binregion lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = read(fd, tempBuffer + i * iBlockSize, iBlockSize);
+ NVBAK_LOG("[NVRAM]:dat file read size:%d\n", iResult);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:bin region read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iAlreadyRead++;
+ if (iAlreadyRead == iReadTime)
+ break;
+ for (j = pos + 1; j < iBlockNum; j++) {
+ if (tempBitmap1[j] == 0) {
+ pos = j;
+ break;
+ }
+ }
+ if (j >= iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks to read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:dat file read end:%d\n", pos);
+ iResult = write(iFileDesc_file, tempBuffer, iDatFileSize);
+ if (iResult != (int)iDatFileSize) {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ NVBAK_LOG("[NVRAM]:Leave FileOp_RestoreFromBinRegion_ToFile\n");
+ return true;
+}//end FileOp_RestoreFromBinRegion_ToFile
+bool FileOp_CheckBackUpResult() {
+ unsigned int ulSavedCheckSum;
+ unsigned int ulCheckSum;
+ struct stat st;
+ unsigned int iFileSize;
+
+ NVBAK_LOG("[NVRAM]: Enter FileOp_CheckBackUpResult\n");
+
+ if (!FileOp_GetCheckSum()) {
+ NVBAK_LOG("[FileOp_RestoreData_All] GetCheckSum Fail !");
+ return false;
+ }
+ ulSavedCheckSum = stBackupFileInfo.ulCheckSum;
+ ulCheckSum = FileOp_ComputeReadBackCheckSum();
+ NVBAK_LOG("[NVRAM]ulSavedCheckSum:%x", ulSavedCheckSum);
+ NVBAK_LOG("[NVRAM]ulCheckSun:%x", ulCheckSum);
+ if (stat(g_pcNVM_AllFile_Check, &st) < 0) {
+ NVBAK_LOG("[NVRAM]Error FileOp_CheckBackUpResult stat \n");
+ return false;
+ }
+ iFileSize = st.st_size;
+ NVBAK_LOG("[NVRAM]iFileSize:%d\n", iFileSize);
+ ulCheckSum ^= iFileSize;
+
+ NVBAK_LOG("[NVRAM]FileOp_CheckSum:%x,%x", ulSavedCheckSum, ulCheckSum);
+ if (!FileOp_CompareCheckSum(ulSavedCheckSum, ulCheckSum)) {
+ NVBAK_LOG("[NVRAM]check sum not match!");
+ return false;
+ }
+ NVBAK_LOG("[NVRAM]: Leave FileOp_CheckBackUpResult\n");
+ return true;
+}//end of FileOp_CheckBackUpResult
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.h b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.h
new file mode 100644
index 0000000..a32a0ef
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libfile_op/libfile_op.h
@@ -0,0 +1,518 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * File_OP.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * Jun 18 2009 mtk80306
+ * [DUMA00120904] optimize the power button and nvram
+ *
+ *
+ * Apr 29 2009 mtk80306
+ * [DUMA00116080] revise the customization of nvram
+ * revise nvram customization
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 15 2009 mtk80306
+ * [DUMA00111629] add camera nvram files
+ * add the check of bin region.
+ *
+ * Feb 23 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ *
+ *
+ * Nov 24 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Oct 29 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+//
+// FILE_OP driver.
+//
+#include <stdbool.h>
+
+#ifndef __FILE_OP_H__
+#define __FILE_OP_H__
+
+//*****************************************************************************
+//
+// TTT Driver MACRO def
+//
+//*****************************************************************************
+
+//-------------------------------------
+// underlying COM port related defines
+//-------------------------------------
+
+//*****************************************************************************
+//
+// FILE_OP Driver data stru def
+//
+//*****************************************************************************
+
+//*****************************************************************************
+//
+// FILE_OP Driver var def
+//
+//*****************************************************************************
+
+
+//*****************************************************************************
+// FILE_OP Driver General Functions Prototypes
+//
+//*****************************************************************************
+/*
+#ifdef _WIN32
+#define LOGD(x)
+#else
+#include <utils/Log.h>
+#undef LOG_TAG
+#define LOG_TAG "NVBACKUP"
+#endif
+
+#define NVBAK_LOG(...) \
+ do { \
+ LOGD(__VA_ARGS__); \
+ } while (0)
+*/
+#define MAX_NAMESIZE 128
+#define DATA_FLAG (0xfecf)
+
+//#define MaxFileNum 936
+
+typedef struct {
+ int NameSize; //the size of file name
+ int FielStartAddr; //the file offset address in content block
+ int Filesize; //the size of nvram files
+ char cFileName[MAX_NAMESIZE]; //the name of nvram file
+} File_Title;
+
+//the header in title block
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //End of Comment
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iViaNum; //test for VIA
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+} File_Title_Header1;
+
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //End of Comment
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+ short int iViaNum; //test for VIA
+} File_Title_Header2;
+
+
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iViaNum; //test for VIA
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+ //End of Comment
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+} File_Title_Header3;
+
+
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+ //End of Comment
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iViaNum; //test for VIA
+} File_Title_Header4;
+
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //End of Comment
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd3BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd3CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd3ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+} File_Title_Header5;
+
+typedef struct {
+ short int iApBootNum; //the numbers of nvram file which will resotre ervery boot in ap side.
+ short int iApCleanNum; //the numbers of nvram file which will resotre when clean boot in ap side .
+ short int iMdBootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMdCleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdCoreNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMdDataNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //Add for second modem for MT658*
+ short int iMd2BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd2CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd2ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ //End of Comment
+ short int iMd3BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd3CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd3ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ int iFileBufLen; //the size of file content.
+ int BackupFlag; //the flag of valid block
+ short int iMd5BootNum; //the numbers of nvram file which will resotre ervery boot in modem side.
+ short int iMd5CleanNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+ short int iMd5ImpntNum; //the numbers of nvram file which will resotre when clean boot in modem side.
+} File_Title_Header6;
+
+//the type of nvram file
+typedef enum {
+ APBOOT = 0, //resotre ervery boot in ap side.
+ APCLN, //resotre when clean boot in ap side.
+ MDBOOT, //resotre ervery boot in modem side.
+ MDCLN, //resotre when clean boot in modem side.
+ MDIMP,
+ MDCOR,
+ MDDATA,
+ //Add for second modem for MT658*
+ MD2BOOT, //resotre ervery boot in modem side.
+ MD2CLN, //resotre when clean boot in modem side.
+ MD2IMP,
+ //End of Comment
+ //LTE support
+ MD5BOOT, //resotre ervery boot in modem side.
+ MD5CLN, //resotre when clean boot in modem side.
+ MD5IMP,
+ VIA,
+ /*Add for C2K modem*/
+ MD3BOOT, //resotre ervery boot in modem side.
+ MD3CLN, //resotre when clean boot in modem side.
+ MD3IMP,
+ /*Add for C2K modem-End*/
+ ALL //all files
+} MetaData;
+
+//#ifndef bool
+//#define bool int
+//#define false 0
+//#define true 1
+//#endif
+
+extern char *strDMFileFolderPath;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+/********************************************************************************
+//FUNCTION:
+// FileOp_CreateNVMFolder
+//DESCRIPTION:
+// this function is called to create the directory for ap side
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool FileOp_CreateNVMFolder(void );
+
+
+/********************************************************************************
+//FUNCTION:
+// RestoreData
+//DESCRIPTION:
+// this function is called to read the the information and content of nvram files in binregion and generate
+// the file of title and content
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool FileOp_RestoreData(MetaData eRestoreType);
+
+/********************************************************************************
+//FUNCTION:
+// BackupData
+//DESCRIPTION:
+// this function is called to read the the information and content of nvram files in binregion and generate
+// the file of title and content
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool FileOp_BackupData(MetaData eBackupType);
+
+/********************************************************************************
+//FUNCTION:
+// BackupAll
+//DESCRIPTION:
+// this function is called to backup data from fat2 parittion to bin region
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// None
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+void FileOp_BackupAll(void );
+
+/********************************************************************************
+//FUNCTION:
+// RestoreAll
+//DESCRIPTION:
+// this function is called to restore all files from bin region to fat2 partition
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// None
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+void FileOp_RestoreAll(void );
+
+/********************************************************************************
+//FUNCTION:
+// DeleteAll
+//DESCRIPTION:
+// this function is called to delete all files in fat2 partition
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// None
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+void FileOp_DeleteAll(void );
+
+/********************************************************************************
+//FUNCTION:
+// DeleteAll
+//DESCRIPTION:
+// this function is called to delete all files in fat2 partition
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// None
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+void FileOp_DeleteRdebData(void );
+
+
+/********************************************************************************
+//FUNCTION:
+// RestoreBootData
+//DESCRIPTION:
+// this function is called to restore the APBOOT and MDBOOT file to FAT2 partition from binregion
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// None
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+void FileOp_RestoreBootData(void );
+
+bool FileOp_BackupAll_NvRam(void);
+bool FileOp_RestoreAll_NvRam(void);
+bool FileOp_RestoreFromBinRegion(bool bCleanBoot);
+bool FileOp_IsSyncWithBinRegion();
+bool FileOp_BackupToBinRegion_All();
+bool FileOp_ClearBinRegion();
+bool FileOp_RestoreFromBinRegion_ToFile();
+bool FileOp_CheckBackUpResult();
+
+bool FileOp_RecoveryData();
+bool FileOp_SetCleanBootFlag(bool bSetFlag);
+bool FileOp_GetCleanBootFlag(unsigned int * iCleanBootFlag);
+bool FileOp_RestoreFromFiles(int eBackupType);
+bool FileOp_BackupDataToFiles(int * iFileMask, bool bWorkForBinRegion);
+bool FileOp_RestoreData_All(void);
+bool FileOp_BackupData_Special(char * buffer, int count , int mode);
+bool FileOp_CreateBinRegionBadBlockBitMap();
+bool FileOp_CmpBackupFileNum();
+
+bool FileOp_RestoreFromBinRegionForDM();
+bool FileOp_BackupToBinRegionForDM();
+bool FileOp_BackupToBinRegion_All_Ex(int value);
+bool FileOp_BackupToBinRegion_All_Exx(unsigned char *time_value);
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __FILE_OP_H__ */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_info.c b/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_info.c
new file mode 100644
index 0000000..4cc0ae8
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_info.c
@@ -0,0 +1,932 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * CFG_file_info.c
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * Configuration File List
+ *
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ ****************************************************************************/
+/*
+#ifndef __CFG_FILE_INFO_H__
+#define __CFG_FILE_INFO_H__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+*/
+#define __ALLOCATE_CFG_AUDIO_DEFAULT_H
+
+#include "CFG_file_public.h"
+#include "libnvram.h"
+#include "libnvram_log.h"
+#include "inc/CFG_file_lid.h"
+#include "inc/CFG_module_file.h"
+#include "inc/CFG_module_default.h"
+#include "inc/CFG_file_info.h"
+#include "CFG_file_info_custom.h"
+#include <string.h>
+#include <stdio.h>
+//#include <cutils/properties.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+#define MAX_FILENAMELEN 128;
+#define RESERVE_PATH "Reserved"
+#define RESERVE_VER "000"
+#define MTK_PRODUCT_INFO_SUPPORT
+
+int BT_ConvertFunc(int, int, char*, char*);
+int SBP_ConvertFunc(int, int, char*, char*);
+
+const TCFG_FILE g_akCFG_File[] = {
+ //nvram version information
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/FILE_VER", VER(AP_CFG_FILE_VER_INFO_LID), 4,
+ CFG_FILE_VER_FILE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr", VER(AP_CFG_RDEB_FILE_BT_ADDR_LID), CFG_FILE_BT_ADDR_REC_SIZE,
+ CFG_FILE_BT_ADDR_REC_TOTAL, DEFAULT_ZERO, 0, DataConvert , BT_ConvertFunc
+ },
+
+#if 0
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI", VER(AP_CFG_RDEB_FILE_WIFI_LID), CFG_FILE_WIFI_REC_SIZE,
+ CFG_FILE_WIFI_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCfgDefault, DataReset , NULL
+ },
+#endif
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/AUXADC", VER(AP_CFG_RDCL_FILE_AUXADC_LID), CFG_FILE_AUXADC_REC_SIZE,
+ CFG_FILE_AUXADC_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stADCDefualt, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_Para", VER(AP_CFG_RDCL_CAMERA_PARA_LID), CFG_FILE_CAMERA_PARA_REC_SIZE,
+ CFG_FILE_CAMERA_PARA_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_3A", VER(AP_CFG_RDCL_CAMERA_3A_LID), CFG_FILE_CAMERA_3A_REC_SIZE,
+ CFG_FILE_CAMERA_3A_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_DEFECT", VER(AP_CFG_RDCL_CAMERA_DEFECT_LID), CFG_FILE_CAMERA_DEFECT_REC_SIZE,
+ CFG_FILE_CAMERA_DEFECT_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SENSOR", VER(AP_CFG_RDCL_CAMERA_SENSOR_LID), CFG_FILE_CAMERA_SENSOR_REC_SIZE,
+ CFG_FILE_CAMERA_SENSOR_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_LENS", VER(AP_CFG_RDCL_CAMERA_LENS_LID), CFG_FILE_CAMERA_LENS_REC_SIZE,
+ CFG_FILE_CAMERA_LENS_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/UART", VER(AP_CFG_RDCL_UART_LID), CFG_FILE_UART_CONFIG_SIZE,
+ CFG_FILE_UART_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stUARTConfigDefault, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/FACTORY", VER(AP_CFG_RDCL_FACTORY_LID), CFG_FILE_FACTORY_REC_SIZE,
+ CFG_FILE_FACTORY_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/BWCS", VER(AP_CFG_RDCL_BWCS_LID), CFG_FILE_BWCS_CONFIG_SIZE,
+ CFG_FILE_BWCS_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stBWCSConfigDefault, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/HWMON_ACC", VER(AP_CFG_RDCL_HWMON_ACC_LID), CFG_FILE_HWMON_ACC_REC_SIZE,
+ CFG_FILE_HWMON_ACC_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/HWMON_GYRO", VER(AP_CFG_RDCL_HWMON_GYRO_LID), CFG_FILE_HWMON_GYRO_REC_SIZE,
+ CFG_FILE_HWMON_GYRO_REC_TOTAL, DEFAULT_ZERO, 0, DataReset, NULL
+ },
+#if 0
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/WIFI_CUSTOM", VER(AP_CFG_RDEB_WIFI_CUSTOM_LID), CFG_FILE_WIFI_CUSTOM_REC_SIZE,
+ CFG_FILE_WIFI_CUSTOM_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stWifiCustomDefault, DataReset , NULL
+ },
+#endif
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDEB/OMADM_USB", VER(AP_CFG_RDEB_OMADM_USB_LID), CFG_FILE_OMADMUSB_REC_SIZE,
+ CFG_FILE_OMADMUSB_REC_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stOMADMUSBDefualt, DataReset , NULL
+ },
+ // { "/nvram/APCFG/APRDCL/ADDED", VER(AP_CFG_RDCL_ADDED_LID), CFG_FILE_added_CONFIG_SIZE,
+ // CFG_FILE_added_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stAddedDefault},
+ {
+ "/mnt/vendor/nvdata/media/Voice_Recognize_Param", VER(AP_CFG_RDCL_FILE_VOICE_RECOGNIZE_PARAM_LID), CFG_FILE_VOICE_RECOGNIZE_PAR_SIZE,
+ CFG_FILE_VOICE_RECOGNIZE_PAR_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Voice_Recognize_Par_default, DataReset , NULL
+ },
+//Reserved ten item
+ {
+ "/mnt/vendor/nvdata/media/Audio_AudEnh_Control_Opt", VER(AP_CFG_RDCL_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_LID), CFG_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_SIZE,
+ CFG_FILE_AUDIO_AUDENH_CONTROL_OPTION_PAR_TOTAL, SIGNLE_DEFUALT_REC , (char *)&AUDENH_Control_Option_Par_default, DataReset , NULL
+ },
+ {
+ "/mnt/vendor/nvdata/media/Audio_VOIP_Param", VER(AP_CFG_RDCL_FILE_AUDIO_VOIP_PAR_LID), CFG_FILE_AUDIO_VOIP_PAR_SIZE,
+ CFG_FILE_AUDIO_VOIP_PAR_TOTAL, SIGNLE_DEFUALT_REC , (char *)&Audio_VOIP_Par_default, DataReset , NULL
+ },
+ /*yucong add for PS calibration*/
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/HWMON_PS", VER(AP_CFG_RDCL_HWMON_PS_LID), CFG_FILE_HWMON_PS_REC_SIZE,
+ CFG_FILE_HWMON_PS_REC_TOTAL, DEFAULT_ZERO, 0, DataReset, NULL
+ },
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/MD_Type", VER(AP_CFG_FILE_MDTYPE_LID), CFG_FILE_MDTYPE_CONFIG_SIZE,
+ CFG_FILE_MDTYPE_CONFIG_TOTAL, SIGNLE_DEFUALT_REC , (char *)&stMDTypeDefault, DataReset , NULL
+ },
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/EXT_MD_Type", VER(AP_CFG_FILE_EXT_MDTYPE_LID), CFG_FILE_EXT_MDTYPE_CONFIG_SIZE,
+ CFG_FILE_EXT_MDTYPE_CONFIG_TOTAL, SIGNLE_DEFUALT_REC, (char *)&stEXTMDTypeDefault, DataReset , NULL
+ },
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/SDIO", VER(AP_CFG_RDCL_FILE_SDIO_LID), CFG_FILE_SDIO_CONFIG_SIZE,
+ CFG_FILE_SDIO_CONFIG_TOTAL, SIGNLE_DEFUALT_REC , (char *)&stSDIOConfigDefault, DataReset , NULL
+ },
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_VERSION", VER(AP_CFG_RDCL_CAMERA_VERSION_LID), CFG_FILE_CAMERA_VERSION_REC_SIZE,
+ CFG_FILE_CAMERA_VERSION_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_FEATURE", VER(AP_CFG_RDCL_CAMERA_FEATURE_LID), CFG_FILE_CAMERA_FEATURE_REC_SIZE,
+ CFG_FILE_CAMERA_FEATURE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_GEOMETRY", VER(AP_CFG_RDCL_CAMERA_GEOMETRY_LID), CFG_FILE_CAMERA_GEOMETRY_REC_SIZE,
+ CFG_FILE_CAMERA_GEOMETRY_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/APCFG/APRDCL/MD_SBP", VER(AP_CFG_RDCL_FILE_MD_SBP_LID), CFG_FILE_MD_SBP_CONFIG_SIZE,
+ CFG_FILE_MD_SBP_CONFIG_TOTAL, SIGNLE_DEFUALT_REC , (char *)&stMDSBPConfigDefault, DataReset , NULL
+ },
+
+//Reserved
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING2", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING3", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING4", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING5", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING6", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING7", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING8", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING9", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING10", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING11", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_SHADING12", VER(AP_CFG_RDCL_CAMERA_SHADING_LID), CFG_FILE_CAMERA_SHADING_REC_SIZE,
+ CFG_FILE_CAMERA_SHADING_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE2", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE3", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE4", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE5", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE6", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE7", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE8", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE9", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE10", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE11", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_PLINE12", VER(AP_CFG_RDCL_CAMERA_PLINE_LID), CFG_FILE_CAMERA_PLINE_REC_SIZE,
+ CFG_FILE_CAMERA_PLINE_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ #if 0
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_AF", VER(AP_CFG_RDCL_CAMERA_AF_LID), CFG_FILE_CAMERA_AF_REC_SIZE,
+ CFG_FILE_CAMERA_AF_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+
+ {
+ "/mnt/vendor/nvdata/media/CAMERA_FLASH_CALIBRATION", VER(AP_CFG_RDCL_CAMERA_FLASH_CALIBRATION_LID), CFG_FILE_CAMERA_FLASH_CALIBRATION_REC_SIZE,
+ CFG_FILE_CAMERA_FLASH_CALIBRATION_REC_TOTAL, DEFAULT_ZERO, 0, DataReset , NULL
+ },
+ #endif
+};
+int iCustomBeginLID = AP_CFG_CUSTOM_BEGIN_LID;
+extern int iCustomBeginLID;
+int iFileVerInfoLID = AP_CFG_FILE_VER_INFO_LID;
+extern int iFileVerInfoLID;
+int iFileBTAddrLID = AP_CFG_RDEB_FILE_BT_ADDR_LID;
+extern int iFileBTAddrLID;
+int iFileAuxADCLID = AP_CFG_RDCL_FILE_AUXADC_LID;
+extern int iFileAuxADCLID;
+int iFileOMADMUSBLID = AP_CFG_RDEB_OMADM_USB_LID;
+extern int iFileOMADMUSBLID;
+
+
+typedef struct {
+ char cFileName[128];
+ unsigned int iLID;
+} FileName;
+typedef struct {
+ char cCheckFileName[128];
+ int iCheckFileIndex;
+
+} CheckFileName;
+
+typedef struct {
+ char cRecordCallerName[128];
+ int iRecordCallerIndex;
+} RecordCallerName;
+
+
+typedef struct {
+ int lid;
+ unsigned char meta_mode_write;
+ unsigned char security_enable;
+} TCFG_FILE_PROTECT;
+
+
+
+FileName aBackupToBinRegion[] = {
+ {"FILE_VER", AP_CFG_FILE_VER_INFO_LID},
+ {"BT_Addr", AP_CFG_RDEB_FILE_BT_ADDR_LID},
+ {"WIFI", AP_CFG_RDEB_FILE_WIFI_LID},
+ {"AUXADC", AP_CFG_RDCL_FILE_AUXADC_LID},
+ {"FACTORY", AP_CFG_RDCL_FACTORY_LID},
+ {"HWMON_ACC", AP_CFG_RDCL_HWMON_ACC_LID},
+ {"HWMON_GYRO", AP_CFG_RDCL_HWMON_GYRO_LID},
+ {"HWMON_PS", AP_CFG_RDCL_HWMON_PS_LID}, //yucong add for ALSPS calibration
+ {"WIFI_CUSTOM", AP_CFG_RDEB_WIFI_CUSTOM_LID},
+ {"GPS", AP_CFG_CUSTOM_FILE_GPS_LID},
+#ifndef MTK_PRODUCT_INFO_SUPPORT
+ {"PRODUCT_INFO", AP_CFG_REEB_PRODUCT_INFO_LID},
+#endif
+#ifdef MTK_SDIORETRY_SUPPORT
+ {"SDIO_RETRY", AP_CFG_RDEB_SDIO_RETRY_LID},
+#endif
+#if defined(MTK_MT8193_HDMI_SUPPORT)||defined(MTK_INTERNAL_HDCP_SUPPORT)
+ {"Hdcp_Key_Table", AP_CFG_RDCL_FILE_HDCP_KEY_LID},
+#endif
+ {"SDIO", AP_CFG_RDCL_FILE_SDIO_LID},
+ {"MD_SBP", AP_CFG_RDCL_FILE_MD_SBP_LID},
+#ifdef MTK_SPEAKER_MONITOR_SUPPORT
+ {"Spk_Monitor", AP_CFG_RDCL_FILE_AUDIO_SPEAKER_MONITOR_LID},
+#endif
+ {"CAMERA_VERSION", AP_CFG_RDCL_CAMERA_VERSION_LID},
+ #if 0
+ {"CAMERA_AF", AP_CFG_RDCL_CAMERA_AF_LID},
+ {"CAMERA_FLASH_CALIBRATION", AP_CFG_RDCL_CAMERA_FLASH_CALIBRATION_LID},
+ #endif
+#ifdef CFG_FILE_FG_CONFIG_TOTAL
+ {"FG", AP_CFG_CUSTOM_FILE_FUEL_GAUGE_LID},
+#endif
+#ifdef MTK_FACTORY_GAMMA_SUPPORT
+ {"PQ_CUSTOM", AP_CFG_RDCL_FILE_PQ_LID},
+#endif
+#ifdef MTK_SCP_SMARTPA_SUPPORT
+ {"smartpa_calib", AP_CFG_CUSTOM_FILE_SMARTPA_CALIB_LID},
+#endif
+};
+FileName aPerformance[] = {
+ {"CAMERA_Para", AP_CFG_RDCL_CAMERA_PARA_LID},
+ {"CAMERA_3A", AP_CFG_RDCL_CAMERA_3A_LID},
+ {"CAMERA_SHADING", AP_CFG_RDCL_CAMERA_SHADING_LID},
+ {"CAMERA_DEFECT", AP_CFG_RDCL_CAMERA_DEFECT_LID},
+ {"CAMERA_SENSOR", AP_CFG_RDCL_CAMERA_SENSOR_LID},
+ {"CAMERA_LENS", AP_CFG_RDCL_CAMERA_LENS_LID},
+ #if 0
+ {"CAMERA_SHADING2", AP_CFG_RDCL_CAMERA_SHADING2_LID},
+ {"CAMERA_SHADING3", AP_CFG_RDCL_CAMERA_SHADING3_LID},
+ {"CAMERA_SHADING4", AP_CFG_RDCL_CAMERA_SHADING4_LID},
+ {"CAMERA_SHADING5", AP_CFG_RDCL_CAMERA_SHADING5_LID},
+ {"CAMERA_SHADING6", AP_CFG_RDCL_CAMERA_SHADING6_LID},
+ {"CAMERA_SHADING7", AP_CFG_RDCL_CAMERA_SHADING7_LID},
+ {"CAMERA_SHADING8", AP_CFG_RDCL_CAMERA_SHADING8_LID},
+ {"CAMERA_SHADING9", AP_CFG_RDCL_CAMERA_SHADING9_LID},
+ {"CAMERA_SHADING10", AP_CFG_RDCL_CAMERA_SHADING10_LID},
+ {"CAMERA_SHADING11", AP_CFG_RDCL_CAMERA_SHADING11_LID},
+ {"CAMERA_SHADING12", AP_CFG_RDCL_CAMERA_SHADING12_LID},
+ {"CAMERA_PLINE", AP_CFG_RDCL_CAMERA_PLINE_LID},
+ {"CAMERA_PLINE2", AP_CFG_RDCL_CAMERA_PLINE2_LID},
+ {"CAMERA_PLINE3", AP_CFG_RDCL_CAMERA_PLINE3_LID},
+ {"CAMERA_PLINE4", AP_CFG_RDCL_CAMERA_PLINE4_LID},
+ {"CAMERA_PLINE5", AP_CFG_RDCL_CAMERA_PLINE5_LID},
+ {"CAMERA_PLINE6", AP_CFG_RDCL_CAMERA_PLINE6_LID},
+ {"CAMERA_PLINE7", AP_CFG_RDCL_CAMERA_PLINE7_LID},
+ {"CAMERA_PLINE8", AP_CFG_RDCL_CAMERA_PLINE8_LID},
+ {"CAMERA_PLINE9", AP_CFG_RDCL_CAMERA_PLINE9_LID},
+ {"CAMERA_PLINE10", AP_CFG_RDCL_CAMERA_PLINE10_LID},
+ {"CAMERA_PLINE11", AP_CFG_RDCL_CAMERA_PLINE11_LID},
+ {"CAMERA_PLINE12", AP_CFG_RDCL_CAMERA_PLINE12_LID},
+ {"CAMERA_GEOMETRY", AP_CFG_RDCL_CAMERA_GEOMETRY_LID},
+ {"CAMERA_AF", AP_CFG_RDCL_CAMERA_AF_LID},
+ {"CAMERA_FLASH_CALIBRATION", AP_CFG_RDCL_CAMERA_FLASH_CALIBRATION_LID},
+ #endif
+};
+const TCFG_FILE_PROTECT g_akCFG_File_Protect[] = {
+ // {AP_CFG_RDEB_FILE_BT_ADDR_LID,1,1},
+};
+CheckFileName aCheckExistList[] = {
+/// {"/mnt/vendor/nvdata/APCFG/APRDCL/FILE_VER", 0},
+
+
+};
+
+RecordCallerName aRecordCallerList[] = {
+ {"Barcode", 1},
+ {"IMEI", 2},
+};
+
+
+
+extern const TCFG_FILE g_akCFG_File[];
+extern FileName aBackupToBinRegion[];
+extern FileName aPerformance[];
+extern CheckFileName aCheckExistList[];
+extern const TCFG_FILE_PROTECT g_akCFG_File_Protect[];
+
+
+
+const unsigned int g_i4CFG_File_Count = sizeof(g_akCFG_File)/sizeof(TCFG_FILE);
+const unsigned int g_Backup_File_Count = sizeof(aBackupToBinRegion)/(sizeof(FileName));
+const unsigned int g_Performance_File_Count = sizeof(aPerformance)/(sizeof(FileName));
+const unsigned int g_Check_File_Count = sizeof(aCheckExistList)/(sizeof(CheckFileName));
+const unsigned int g_i4CFG_File_Protect_Count = sizeof(g_akCFG_File_Protect)/(sizeof(TCFG_FILE_PROTECT));
+const unsigned int g_RecordCaller_Count = sizeof(aRecordCallerList)/(sizeof(RecordCallerName));
+
+extern const unsigned int g_i4CFG_File_Count;
+extern const unsigned int g_Backup_File_Count;
+extern const unsigned int g_Performance_File_Count;
+extern const unsigned int g_Check_File_Count ;
+extern const unsigned int g_i4CFG_File_Protect_Count;
+extern const unsigned int g_RecordCaller_Count;
+//misc log feature
+int nvram_misc_log_feature = 0;
+int nvram_misc_log_block_offset = 2;
+
+
+//check exist feature
+int nvram_check_exist_feature = 0;
+int nvram_check_exist_block_offset = 1;
+
+
+//read back check feature
+int nvram_read_back_feature = 0;
+
+pfConvertFunc aNvRamConvertFuncTable[] = {
+ NULL,//AP_CFG_FILE_VER_INFO_LID
+ NULL,//AP_CFG_RDEB_FILE_BT_ADDR_LID
+ NULL,//AP_CFG_RDCL_FILE_AUXADC_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PARA_LID
+ NULL,//AP_CFG_RDCL_CAMERA_3A_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING_LID
+ NULL,//AP_CFG_RDCL_CAMERA_DEFECT_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SENSOR_LID
+ NULL,//AP_CFG_RDCL_CAMERA_LENS_LID
+ NULL,//AP_CFG_RDCL_UART_LID
+ NULL,//AP_CFG_RDCL_FACTORY_LID
+ NULL,//AP_CFG_RDCL_BWCS_LID
+ NULL,//AP_CFG_RDCL_HWMON_ACC_LID
+ NULL,//AP_CFG_RDCL_HWMON_GYRO_LID
+ NULL,//AP_CFG_RDCL_HWMON_PS_LID
+ NULL,//AP_CFG_RDCL_FILE_AUDIO_LID
+ NULL,//AP_CFG_RDCL_FILE_AUDIO_COMPFLT_LID
+ NULL,//AP_CFG_RDCL_FILE_AUDIO_EFFECT_LID
+ NULL,//AP_CFG_CUSTOM_FILE_GPS_LID
+ NULL,//AP_CFG_RDEB_FILE_WIFI_LID
+ NULL,//AP_CFG_RDEB_WIFI_CUSTOM_LID
+ NULL,//AP_CFG_RDEB_OMADM_USB_LID
+ NULL,//AP_CFG_REEB_PRODUCT_INFO_LID
+#ifdef MTK_SDIORETRY_SUPPORT
+ NULL,//AP_CFG_REEB_SDIO_RETRY_LID
+#endif
+ NULL,//AP_CFG_RDCL_FILE_MD_SBP_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING2_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING3_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING4_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING5_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING6_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING7_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING8_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING9_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING10_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING11_LID
+ NULL,//AP_CFG_RDCL_CAMERA_SHADING12_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE2_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE3_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE4_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE5_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE6_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE7_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE8_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE9_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE10_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE11_LID
+ NULL,//AP_CFG_RDCL_CAMERA_PLINE12_LID
+
+};
+
+extern pfConvertFunc aNvRamConvertFuncTable[];
+
+//Add for new nvram partition feature
+pfCallbackForDaemon callback_for_nvram_daemon = NULL;
+extern pfCallbackForDaemon callback_for_nvram_daemon;
+
+#ifdef MTK_PRODUCT_INFO_SUPPORT
+extern bool nvram_new_partition_support() {
+ return true;
+}
+const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[] = {
+#ifdef MTK_MLC_NAND_SUPPORT
+ { AP_CFG_REEB_PRODUCT_INFO_LID, 0, 2 * 1024 * 1024 },
+#else
+ { AP_CFG_REEB_PRODUCT_INFO_LID, 0, 1024 * 1024 },
+#endif
+};
+const unsigned int g_new_nvram_lid_count = sizeof(g_new_nvram_lid) / sizeof(
+ TABLE_FOR_SPECIAL_LID);
+const char *nvram_new_partition_name = "/dev/pro_info";
+extern const char *nvram_new_partition_name;
+extern const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[];
+extern const unsigned int g_new_nvram_lid_count;
+#else
+extern bool nvram_new_partition_support() {
+ return false;
+}
+const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[] = {0 , 0, 0};
+const unsigned int g_new_nvram_lid_count = 0;
+const char *nvram_new_partition_name = NULL;
+extern const char *nvram_new_partition_name;
+extern const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[];
+extern const unsigned int g_new_nvram_lid_count;
+#endif
+//end new nvram partition feature
+
+#if 0
+int nvram_bt_default_value(unsigned char *ucNvRamData) {
+ unsigned int chipId = 0;
+ int chipId_ready_retry = 0;
+ char chipId_val[PROPERTY_VALUE_MAX];
+ int rec_size = CFG_FILE_BT_ADDR_REC_SIZE;
+
+ do {
+ if (property_get("persist.vendor.connsys.chipid", chipId_val, NULL) &&
+ 0 != strcmp(chipId_val, "-1")) {
+ chipId = (unsigned int)strtoul(chipId_val, NULL, 16);
+ break;
+ } else {
+ chipId_ready_retry ++;
+ usleep(500000);
+ }
+ } while (chipId_ready_retry < 10);
+
+ NVRAM_LOG("Get combo chip id retry %d\n", chipId_ready_retry);
+ if (chipId_ready_retry >= 10) {
+ NVRAM_LOG("Get combo chip id fails!\n");
+ return false;
+ } else {
+ NVRAM_LOG("Combo chip id %04x\n", chipId);
+
+ switch (chipId) {
+ case 0x6628:
+ /* NVRAM is MT6628 default */
+ memcpy(ucNvRamData, &stBtDefault_6628, rec_size);
+ break;
+ case 0x6630:
+ /* NVRAM is MT6630 default */
+ memcpy(ucNvRamData, &stBtDefault_6630, rec_size);
+ break;
+ case 0x6632:
+ /* NVRAM is MT6632 default */
+ //memcpy(ucNvRamData, &stBtDefault_6632, rec_size);
+ break;
+ case 0x8163:
+ case 0x8127:
+ case 0x8167:
+ case 0x6582:
+ case 0x6592:
+ case 0x6752:
+ case 0x0321:
+ case 0x0335:
+ case 0x0337:
+ case 0x6580:
+ case 0x6570:
+ case 0x6755:
+ case 0x6797:
+ case 0x6757:
+ case 0x6759:
+ case 0x6763:
+ case 0x6758:
+ case 0x6739:
+ case 0x6771:
+ case 0x6775:
+ /* NVRAM is A-D die chip default */
+ //memcpy(ucNvRamData, &stBtDefault_consys, rec_size);
+ break;
+ case 0x6765:
+ case 0x3967:
+ case 0x6761:
+ /* NVRAM is CONNAC chip default */
+ //memcpy(ucNvRamData, &stBtDefault_connac, rec_size);
+ break;
+ default:
+ NVRAM_LOG("Unknown combo chip id\n");
+ return false;
+ }
+
+ return true;
+ }
+}
+#endif
+
+int BT_ConvertFunc(int CurrentVerID, int NewVerID, char *pSrcMem,
+ char *pDstMem) {
+ int rec_size = CFG_FILE_BT_ADDR_REC_SIZE;
+ int rec_num = CFG_FILE_BT_ADDR_REC_TOTAL;
+
+ if (NULL == pSrcMem || NULL == pDstMem) {
+ return false;
+ } else {
+ NVRAM_LOG("BT_ConvertFunc: CurrentVerID = %d, NewVerID = %d\n", CurrentVerID, NewVerID);
+
+ if (0 == CurrentVerID && 1 == NewVerID) {
+ memcpy(pDstMem, pSrcMem, 30); /* Keep the customization data */
+ memset(pDstMem + 30, 0, rec_size * rec_num - 30);
+ return true;
+ } else if (1 == CurrentVerID && 2 == NewVerID) {
+ memcpy(pDstMem, pSrcMem, 64); /* Keep the customization data */
+ memset(pDstMem + 64, 0, rec_size * rec_num - 64);
+ return true;
+ }
+ return false;
+ }
+}
+
+#ifdef MTK_EMMC_SUPPORT
+extern bool nvram_emmc_support() {
+ return true;
+}
+#else
+extern bool nvram_emmc_support() {
+ return false;
+}
+#endif
+
+#ifdef MTK_UFS_SUPPORT
+extern bool nvram_ufs_support() {
+ return true;
+}
+#else
+extern bool nvram_ufs_support() {
+ return false;
+}
+#endif
+
+extern bool nvram_md1_support() {
+ #if 0
+
+ char prop_value[PROPERTY_VALUE_MAX];
+ unsigned int md1_support = 0;
+ bool is_support_md1 = false;
+ if (property_get("ro.boot.opt_md1_support", prop_value, NULL)) {
+ md1_support = (unsigned int)strtoul(prop_value, NULL, 0);
+ if (md1_support)
+ is_support_md1 = true;
+ } else {
+ NVRAM_LOG("ro.boot.opt_md1_support property get fail : %s\n", prop_value);
+ }
+ return is_support_md1;
+ #endif
+ return false;
+}
+
+extern bool nvram_md5_support() {
+ #if 0
+ char prop_value[PROPERTY_VALUE_MAX];
+ unsigned int md5_support = 0;
+ bool is_support_md5 = false;
+ if (property_get("ro.boot.opt_md5_support", prop_value, NULL)) {
+ md5_support = (unsigned int)strtoul(prop_value, NULL, 0);
+ if (md5_support)
+ is_support_md5 = true;
+ } else {
+ //NVRAM_LOG("ro.boot.opt_md5_support property get fail : %s\n", prop_value);
+ }
+ return is_support_md5;
+ #endif
+ return false;
+}
+
+
+extern bool nvram_evdo_support() {
+ #if 0
+ char c2k_state_value[PROPERTY_VALUE_MAX];
+ unsigned int c2k_support = 0;
+ bool is_support_c2k = false;
+ if (property_get("ro.boot.opt_md3_support", c2k_state_value, NULL)) {
+ c2k_support = (unsigned int)strtoul(c2k_state_value, NULL, 0);
+ if (c2k_support)
+ is_support_c2k = true;
+ NVRAM_LOG("c2k_support %d\n", c2k_support);
+ } else {
+ NVRAM_LOG("ro.boot.opt_md3_support property get fail : %s\n", c2k_state_value);
+ }
+ return is_support_c2k;
+ #endif
+ return false;
+}
+extern bool nvram_ecci_c2k_support() {
+ #if 0
+ char prop_value[PROPERTY_VALUE_MAX];
+ unsigned int ecci_c2k_support = 0;
+ bool is_support_ecci_c2k = false;
+ if (property_get("ro.boot.opt_eccci_c2k", prop_value, NULL)) {
+ ecci_c2k_support = (unsigned int)strtoul(prop_value, NULL, 0);
+ if (ecci_c2k_support)
+ is_support_ecci_c2k = true;
+ } else {
+ NVRAM_LOG("ro.boot.opt_eccci_c2k property get fail : %s\n", prop_value);
+ }
+ if (is_support_ecci_c2k == false) {
+ property_get("ro.hardware", prop_value, "");
+ if (!strstr(prop_value, "mt2601") && !strstr(prop_value, "mt6572") &&
+ !strstr(prop_value, "mt6580") && !strstr(prop_value, "mt6582") &&
+ !strstr(prop_value, "mt6592") && !strstr(prop_value, "mt6735") &&
+ !strstr(prop_value, "mt6752") && !strstr(prop_value, "mt6755") &&
+ !strstr(prop_value, "mt6795") && !strstr(prop_value, "mt6797") &&
+ !strstr(prop_value, "mt7623") && !strstr(prop_value, "mt8127") &&
+ !strstr(prop_value, "mt8163") && !strstr(prop_value, "mt8173")) {
+ is_support_ecci_c2k = true;
+ }
+ }
+ NVRAM_LOG("is_support_ecci_c2k %d\n", is_support_ecci_c2k);
+ return is_support_ecci_c2k;
+ #endif
+ return false;
+}
+
+
+
+#ifdef NVRAM_MULTI_STORAGE_SUPPORT
+extern int nvram_multi_storage_support(NVRAM_PLATFORM_T* pPlatform ) {
+ pPlatform->log_block = g_CpPlatform_Block_Custom.log_block;
+ pPlatform->resv_block = g_CpPlatform_Block_Custom.resv_block;
+ pPlatform->DM_block = g_CpPlatform_Block_Custom.DM_block;
+ pPlatform->layout_version = g_CpPlatform_Block_Custom.layout_version;
+ pPlatform->header_offset = g_CpPlatform_Block_Custom.header_offset;
+ return true;
+}
+#else
+extern int nvram_multi_storage_support(NVRAM_PLATFORM_T* pPlatform ) {
+ pPlatform->log_block = 0;
+ pPlatform->resv_block = 0;
+ pPlatform->DM_block = 0;
+ pPlatform->layout_version = 0;
+ pPlatform->header_offset = 0;
+ return false;
+}
+#endif
+
+
+int SBP_ConvertFunc(int CurrentVerID, int NewVerID, char *pSrcMem,
+ char *pDstMem) {
+ int rec_size = CFG_FILE_MD_SBP_CONFIG_SIZE;
+ int rec_num = CFG_FILE_MD_SBP_CONFIG_TOTAL;
+ int src_size = 2 * sizeof(unsigned int);
+ unsigned int *pStart = (unsigned int *)pSrcMem;
+ int i, len = 0;
+
+ if (NULL == pSrcMem || NULL == pDstMem) {
+ return false;
+ } else {
+ if (0 == CurrentVerID && 1 == NewVerID) {
+ NVRAM_LOG("SBP_ConvertFunc curid:%d, newid:%d, src[0]:%d, src[1]:%d\n"
+ , CurrentVerID, NewVerID, *pStart, *(pStart + 1));
+ memcpy(pDstMem, pSrcMem, src_size); // Keep the customization data
+ // default value: {0, 1}
+ pStart = (unsigned int *)(pDstMem + src_size);
+ len = (rec_size * rec_num - src_size) / sizeof(unsigned int);
+ for (i = 0; i < len; i += 2) {
+ *pStart = 0;
+ *(pStart + 1) = 1;
+ NVRAM_LOG("SBP_ConvertFunc data[%d]:%d, data[%d]:%d\n", i + 2, *pStart, i + 3,
+ *(pStart + 1));
+ pStart += 2;
+ }
+ return true;
+ }
+ return false;
+ }
+}
+
+int WIFI_ConvertFunc(int CurrentVerID, int NewVerID, char *pSrcMem, char *pDstMem) {
+ unsigned int *pStart = (unsigned int *)pSrcMem;
+
+ if (!pSrcMem && !pDstMem) {
+ NVRAM_LOG("WIFI_ConvertFunc curid:%d, newid:%d, src[%p] or dst[%p]\n",
+ CurrentVerID, NewVerID, pSrcMem, pDstMem);
+ return 0;
+ }
+
+ NVRAM_LOG("WIFI_ConvertFunc curid:%d, newid:%d, src[0]:%d, src[1]:%d\n",
+ CurrentVerID, NewVerID, *pStart, *(pStart + 1));
+
+ /* Keep the customization data.
+ * Copy version 0 nvram data to the same location of the version 1.
+ * Modify Wi-Fi nvram version from 0x0106 to 0x0107,
+ * Then Set new 0x200 bytes value to 0*/
+ if (CurrentVerID == 0 && NewVerID == 1) {
+ memcpy(pDstMem, pSrcMem, 0x200);
+ memset(pDstMem, 0x07, sizeof(char));
+ memset(pDstMem + 0x200, 0, 0x200);
+ return 1;
+ }
+ return 0;
+}
+
+
+/*
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+*/
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_public.h b/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_public.h
new file mode 100644
index 0000000..8c37ac1
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/CFG_file_public.h
@@ -0,0 +1,136 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein
+ * is confidential and proprietary to MediaTek Inc. and/or its licensors.
+ * Without the prior written permission of MediaTek inc. and/or its licensors,
+ * any reproduction, modification, use or disclosure of MediaTek Software,
+ * and information contained herein, in whole or in part, shall be strictly prohibited.
+ */
+/* MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+ * THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+ * CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+ * SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+ * CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek Software")
+ * have been modified by MediaTek Inc. All revisions are subject to any receiver's
+ * applicable license agreements with MediaTek Inc.
+ */
+
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * cfg_file_lid.h
+ *
+ * Project:
+ * --------
+ * DUMA
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ *******************************************************************************/
+
+#ifndef CFG_FILE_PUBLIC_H
+#define CFG_FILE_PUBLIC_H
+
+#include <sys/types.h>
+
+// the size of file name
+#define FILENAMELENGTH 70
+//the size of versino information
+#define FILEVERLENGTH 4
+
+#define DataReset 1
+#define DataConvert 0
+
+typedef int(*pfConvertFunc)(int, int, char*, char*);
+typedef enum {
+ APRDEB, //file will reset to default value every boot
+ APRDCL //file will reset to default value only when clean boot
+
+} FILE_RESTORE_TYPE;
+
+typedef enum {
+ MULTIPLE_DEFUALT_REC, //default value is defined global varible * record number
+ SIGNLE_DEFUALT_REC, //default value is defined global variable.
+ DEFAULT_ZERO, //default value is 0
+ DEFAULT_FF, //default value is 0xff
+
+} FILE_DEFAULT_TYPE;
+
+typedef struct {
+ char cFileName[FILENAMELENGTH]; //file name
+ char cFileVer[FILEVERLENGTH]; //nvram file version information
+ int i4RecSize; //record size
+ int i4RecNum; //record total
+ FILE_DEFAULT_TYPE stDefualType; //the type of default value
+ char *pDefualtVaule; //the defualt value.
+ int bDataProcessingType;
+ pfConvertFunc NVM_DataConvertFunc;
+} TCFG_FILE;
+
+typedef struct {
+ int lid;
+ off_t start_address;
+ off_t size;
+} TABLE_FOR_SPECIAL_LID;
+typedef int(*pfCallbackForDaemon)(void);
+#endif /* CFG_FILE_LID_H */
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/MTK_LICENSE b/src/telephonyware/3.0/mtk_nvram/src/libnvram/MTK_LICENSE
new file mode 100644
index 0000000..901b162
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/MTK_LICENSE
@@ -0,0 +1,35 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein
+is confidential and proprietary to MediaTek Inc. and/or its licensors.
+Without the prior written permission of MediaTek inc. and/or its licensors,
+any reproduction, modification, use or disclosure of MediaTek Software,
+and information contained herein, in whole or in part, shall be strictly prohibited.
+
+MediaTek Inc. (C) 2018. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+
+The following software/firmware and/or related documentation ("MediaTek Software")
+have been modified by MediaTek Inc. All revisions are subject to any receiver's
+applicable license agreements with MediaTek Inc.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/README b/src/telephonyware/3.0/mtk_nvram/src/libnvram/README
new file mode 100644
index 0000000..86068ae
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/README
@@ -0,0 +1,34 @@
+This directory contains NvRAM libnvram interface, which defines the interface of
+libnvram and is used to build a libnvram shared library.
+
+
+WHAT IT DOES?
+=============
+It provide interface to access NvRAM data which need by modules like WIFI/BT etc.
+
+HOW IT WAS BUILT?
+==================
+
+It needs the following libs from AOSP:
+1. libc.so
+2. libcutils.so
+
+and the following libs from MediaTek:
+1. libcustom_nvram.so
+2. libnvram_sec.so
+3. libnvram_platform.so
+
+All source/dependency modules of this module are already put in
+'vendor/mediatek/libs' folder.
+
+
+HOW TO USE IT?
+==============
+
+Files in this directory is used to
+generate a shared library 'libnvram.so'.
+
+The shared library 'libnvram.so' is called by
+NvRAM user which like WIFI/BT modules to access coresponed factory data.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.c b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.c
new file mode 100644
index 0000000..736f98c
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.c
@@ -0,0 +1,6200 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * Nvram_lib.c
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * Stream interface implementation for NVM Driver.
+ *
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ ****************************************************************************/
+
+#include <stdbool.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/wait.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+//#include "CFG_file_lid.h"
+#include <dirent.h>
+#include<sys/mount.h>
+//#include <fs_mgr.h>
+//#include <fstab.h>
+//#include <cutils/properties.h>
+#include "libnvram_log.h"
+#include "libnvram.h"
+#include "libfile_op.h"
+//#include "../../../../kernel/include/mtd/mtd-abi.h"
+#include <mtd/mtd-abi.h>
+
+// #include "android_filesystem_config.h"
+#include <pthread.h>
+//add for log
+#include <time.h>
+//add for log
+#define PREFIX_IMEI "MP0B_"
+#define PREFIX_BARCODE "MP09_"
+#define MAXLINE 1024
+#define MaxFileNum 936
+#define INVALID_HANDLE_VALUE -1
+
+#define AID_SYSTEM 0
+#define AID_RADIO 0
+#define AID_ROOT 0
+#define AID_BLUETOOTH 0
+#define AID_AUDIO 0
+#define SHRT_MAX 0x7fff
+#define INT_MAX 0x7fffffff
+
+//#include "libnvram_sec.h"
+#define MTK_BASIC_PACKAGE
+
+extern const char* __progname;
+
+typedef struct {
+ unsigned int ulCheckSum;
+ unsigned int iCommonFileNum;
+ unsigned int iCustomFileNum;
+} BackupFileInfo;
+
+
+extern int iCustomBeginLID;
+extern int iFileVerInfoLID;
+static const char *g_pcNVM = "/mnt/vendor/nvdata";
+static const char *g_pcNVM_BT = "/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr";
+static const char *g_pcNVM_AllFile = "/mnt/vendor/nvdata/AllFile";
+static const char *g_pcNVM_AllMap = "/mnt/vendor/nvdata/AllMap";
+static const char *g_pcNVM_Flag =
+ "/mnt/vendor/nvdata/RestoreFlag";//The File Will be Created after restore
+
+#ifdef MTK_NVRAM_AUTO_BACKUP
+static const char *g_pcNVM_BackFlag =
+ "/mnt/vendor/nvdata/BackupFlag";//The file will be updated after modifying important data
+#endif
+
+#if 0
+static const char *g_pcNVM_APCalFile = "/mnt/vendor/nvdata/APCFG/APRDCL";
+static const char *g_pcNVM_APRdebFile = "/mnt/vendor/nvdata/APCFG/APRDEB";
+#endif
+static const char *g_pcNVM_MD = "/mnt/vendor/nvdata/md/NVRAM";
+static const char *g_pcNVM_MDCalFile = "/mnt/vendor/nvdata/md/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MDRdebFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_IMEI";
+#if 0
+static const char *g_pcNVM_MDImptFile = "/mnt/vendor/nvdata/md/NVRAM/IMPORTNT";
+static const char *g_pcNVM_MDDataFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_DATA";
+static const char *g_pcNVM_MDCoreFile = "/mnt/vendor/nvdata/md/NVRAM/NVD_CORE";
+//Add for second modem for MT658*
+static const char *g_pcNVM_MD2CalFile = "/mnt/vendor/nvdata/md2/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD2RdebFile = "/mnt/vendor/nvdata/md2/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD2ImptFile = "/mnt/vendor/nvdata/md2/NVRAM/IMPORTNT";
+//End of Comment
+
+/*Add for C2K modem*/
+static const char *g_pcNVM_MD3CalFile = "/mnt/vendor/nvdata/md3/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD3RdebFile = "/mnt/vendor/nvdata/md3/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD3ImptFile = "/mnt/vendor/nvdata/md3/NVRAM/IMPORTNT";
+
+
+//LTE support
+static const char *g_pcNVM_MD5CalFile = "/mnt/vendor/nvdata/md5/NVRAM/CALIBRAT";
+static const char *g_pcNVM_MD5RdebFile = "/mnt/vendor/nvdata/md5/NVRAM/NVD_IMEI";
+static const char *g_pcNVM_MD5ImptFile = "/mnt/vendor/nvdata/md5/NVRAM/IMPORTNT";
+static const char *g_pcNVM_Via = "/mnt/vendor/nvdata/md_via";
+
+
+static const char *g_pcBKP_APCalFile = "/backup/APCFG/APRDCL";
+static const char *g_pcBKP_APRdebFile = "/backup/APCFG/APRDEB";
+static const char *g_pcBKP_MDCalFile = "/backup/md/NVRAM/CALIBRAT";
+static const char *g_pcBKP_MDRdebFile = "/backup/md/NVRAM/NVD_IMEI";
+static const char *g_pcBKP_MDImptFile = "/backup/md/NVRAM/IMPORTNT";
+static const char *g_pcBKP_MDDataFile = "/backup/md/NVRAM/NVD_DATA";
+static const char *g_pcBKP_MDCoreFile = "/backup/md/NVRAM/NVD_CORE";
+static const char *g_pcNVM_ModomBackNum =
+ "/mnt/vendor/nvdata/md/NVRAM/IMPORTNT/MP0D_000";////The file will be updated after modifying MD important data
+#endif
+
+// partition device path
+#ifdef MTK_NVRAM_IN_A_FILE
+char g_NVRAM_BACKUP_DEVICE[128] = "/mnt/vendor/nvram/raw";
+char g_LOG_DEVICE[128] = "/mnt/vendor/nvram/raw";
+char g_MISC_DEVICE[128] = "/mnt/sncfg/para";
+char g_NVRAM_PROINFO_DEVICE[128] = "/mnt/sncfg/proinfo";
+#else
+char g_NVRAM_BACKUP_DEVICE[128] = "/dev/block/nvram";
+char g_LOG_DEVICE[128] = "/dev/block/nvram";
+char g_MISC_DEVICE[128] = "/dev/block/para";
+char g_NVRAM_PROINFO_DEVICE[128] = "/dev/block/proinfo";
+#endif
+
+//char g_NVRAM_NVDATA_DEVICE[128] = "/dev/block/platform/mtk-msdc.0/by-name/nvdata";
+
+unsigned int gFileStartAddr = 0;
+pthread_mutex_t gFileStartAddrlock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t generateFileVerlock = PTHREAD_MUTEX_INITIALIZER;
+#define BitmapFlag 0xAABBCCDD
+#define MAX_FILENUM 32767
+typedef struct {
+ char cFileName[128];
+ unsigned int iLID;
+} FileName;
+
+extern const TCFG_FILE g_akCFG_File[];
+extern const int g_i4CFG_File_Count;
+extern const TCFG_FILE g_akCFG_File_Custom[];
+extern const int g_i4CFG_File_Custom_Count;
+extern int iCustomBeginLID;
+extern int iFileVerInfoLID;
+extern int iNvRamFileMaxLID;
+extern pfConvertFunc aNvRamConvertFuncTable[];
+volatile int g_i4MaxNvRamLid = 0;
+extern FileName aBackupToBinRegion[];
+extern const unsigned int g_Backup_File_Count;
+//#define forDMBlockNum (2)
+const char *strVerInfo = "NVRAM_VER_INFO";
+pthread_mutex_t dirlock = PTHREAD_MUTEX_INITIALIZER;
+pthread_mutex_t backuplock = PTHREAD_MUTEX_INITIALIZER;
+int NvRamBlockNum = 0;
+
+#define FSTAB_PREFIX "/mnt/vendor/nvdata/fstab."
+static struct fstab* fstab = NULL;
+
+int nvram_platform_log_block = 2;
+int nvram_platform_resv_block = 2;
+int nvram_platform_DM_block = 1;
+int nvram_platform_layout_version = 0;
+int nvram_platform_header_offset = 0;
+int nvram_init_flag = 0;
+int nvram_gpt_flag = 1;
+int BinRegionBlockTotalNum = 0;
+
+extern const char *nvram_new_partition_name;
+extern const TABLE_FOR_SPECIAL_LID g_new_nvram_lid[];
+extern const unsigned int g_new_nvram_lid_count;
+extern int nvram_misc_log_block_offset;
+
+#if 0
+static struct fstab* read_fstab(void) {
+ char fstab_filename[PROPERTY_VALUE_MAX + sizeof(FSTAB_PREFIX)];
+ char propbuf[PROPERTY_VALUE_MAX];
+
+ property_get("ro.hardware", propbuf, "");
+ snprintf(fstab_filename, sizeof(fstab_filename), FSTAB_PREFIX"%s", propbuf);
+
+ fstab = fs_mgr_read_fstab(fstab_filename);
+ if (!fstab) {
+ NVRAM_LOG("failed to read %s \n", fstab_filename);
+ return NULL;
+ }
+
+ return fstab;
+}
+
+static char *get_device_path(const char *mount_point) {
+ struct fstab_rec *rec = NULL;
+ char *source = NULL;
+
+ rec = fs_mgr_get_entry_for_mount_point(fstab, mount_point);
+ if (!rec) {
+ NVRAM_LOG("failed to get entry for %s \n", mount_point);
+ return NULL;
+ }
+
+ source = rec->blk_device;
+ return source;
+}
+
+static void free_fstab(void) {
+ fs_mgr_free_fstab(fstab);
+}
+
+static int get_partition_path(void) {
+ char *source_path = NULL;
+ if (nvram_emmc_support() || nvram_ufs_support()) {
+ if (!read_fstab()) {
+ NVRAM_LOG("failed to read fstab \n");
+ return -1;
+ }
+
+ source_path = get_device_path(NVRAM_MNT_POINT);
+ if (!source_path) {
+ NVRAM_LOG("failed to get nvram path %s \n", NVRAM_MNT_POINT);
+ } else {
+ memset(g_LOG_DEVICE, 0, sizeof(g_LOG_DEVICE));
+ memset(g_NVRAM_BACKUP_DEVICE, 0, sizeof(g_NVRAM_BACKUP_DEVICE));
+ //strcpy(g_LOG_DEVICE,source_path);
+ //strcpy(g_NVRAM_BACKUP_DEVICE,source_path);
+ snprintf(g_LOG_DEVICE, sizeof(g_LOG_DEVICE),"%s", source_path);
+ snprintf(g_NVRAM_BACKUP_DEVICE, sizeof(g_NVRAM_BACKUP_DEVICE),"%s", source_path);
+ NVRAM_LOG("length of g_NVRAM_BACKUP_DEVICE=%d\n", strlen(source_path));
+ }
+
+ source_path = get_device_path(MISC_MNT_POINT);
+ if (!source_path) {
+ NVRAM_LOG("failed to get misc path %s \n", MISC_MNT_POINT);
+ } else {
+ memset(g_MISC_DEVICE, 0, sizeof g_MISC_DEVICE);
+ //strcpy(g_MISC_DEVICE,source_path);
+ snprintf(g_MISC_DEVICE, sizeof(g_MISC_DEVICE),"%s", source_path);
+ }
+
+ source_path = get_device_path(NVDATA_MNT_POINT);
+ if (!source_path) {
+ NVRAM_LOG("failed to get nvdata path %s \n", NVDATA_MNT_POINT);
+ } else {
+ memset(g_NVRAM_NVDATA_DEVICE, 0, sizeof g_NVRAM_NVDATA_DEVICE);
+ //strcpy(g_NVRAM_NVDATA_DEVICE,source_path);
+ snprintf(g_NVRAM_NVDATA_DEVICE, sizeof(g_NVRAM_NVDATA_DEVICE),"%s", source_path);
+ }
+
+ source_path = get_device_path(PROINFO_MNT_POINT);
+ if (!source_path) {
+ NVRAM_LOG("failed to get proinfo path %s \n", PROINFO_MNT_POINT);
+ } else {
+ memset(g_NVRAM_PROINFO_DEVICE, 0, sizeof g_NVRAM_PROINFO_DEVICE);
+ //strcpy(g_NVRAM_PROINFO_DEVICE,source_path);
+ snprintf(g_NVRAM_PROINFO_DEVICE, sizeof(g_NVRAM_PROINFO_DEVICE),"%s", source_path);
+ }
+
+ free_fstab();
+ } else {
+ memset(g_LOG_DEVICE, 0, sizeof(g_LOG_DEVICE));
+ memset(g_NVRAM_BACKUP_DEVICE, 0, sizeof(g_NVRAM_BACKUP_DEVICE));
+ sprintf(g_LOG_DEVICE, "/dev/nvram");
+ sprintf(g_NVRAM_BACKUP_DEVICE, "/dev/nvram");
+ memset(g_MISC_DEVICE, 0, sizeof g_MISC_DEVICE);
+ sprintf(g_MISC_DEVICE, "/dev/misc");
+ memset(g_NVRAM_PROINFO_DEVICE, 0, sizeof g_NVRAM_PROINFO_DEVICE);
+ sprintf(g_NVRAM_PROINFO_DEVICE, "/dev/pro_info");
+ }
+
+ return 0;
+}
+#endif
+
+int open_file_with_dirs(const char *fn, int flag, mode_t mode) {
+ char tmp[PATH_MAX];
+ int i = 0;
+ int filedesc = 0;
+ struct stat info;
+ int val = 0;
+ umask(000);
+ pthread_mutex_lock(&dirlock);
+ while (*fn) {
+ tmp[i] = *fn;
+
+ if (*fn == '/' && i) {
+ tmp[i] = '\0';
+ if (access(tmp, F_OK) != 0) {
+ if (mkdir(tmp, 0771) == -1) {
+ NVRAM_LOG("mkdir error! %s\n", (char*)strerror(errno));
+ if (errno != EEXIST) {
+ pthread_mutex_unlock(&dirlock);
+ return -1;
+ }
+ }
+#if 1
+ val = stat(tmp, &info);
+ if (val == 0) {
+ //maybe meta tool operate these files
+ if (strstr(tmp, "/media")) {
+ if (-1 == chown(tmp, -1, AID_AUDIO))
+ NVRAM_LOG("change dir group owner failed(media):%s\n", (char*)strerror(errno));
+ } else if (strstr(tmp, "BT_Addr")) {
+ if (-1 == chown(tmp, -1, AID_BLUETOOTH))
+ NVRAM_LOG("change dir group owner failed(bt):%s\n", (char*)strerror(errno));
+ } else {
+ if (-1 == chown(tmp, -1, AID_SYSTEM))
+ NVRAM_LOG("change dir group owner failed:%s\n", (char*)strerror(errno));
+ }
+ }
+#endif
+ }
+ tmp[i] = '/';
+ }
+ i++;
+ fn++;
+ }
+ tmp[i] = '\0';
+ filedesc = open(tmp, flag, mode);
+ if (-1 != filedesc) {
+ val = stat(tmp, &info);
+#if 1
+ if (val == 0) {
+ if (strstr(tmp, "/media")) {
+ if (-1 == chown(tmp, -1, AID_AUDIO))
+ NVRAM_LOG("change file group owner failed(media):%s\n", (char*)strerror(errno));
+ } else if (strstr(tmp, "BT_Addr")) {
+ if (-1 == chown(tmp, -1, AID_BLUETOOTH))
+ NVRAM_LOG("change file group owner failed(bt):%s\n", (char*)strerror(errno));
+ } else {
+ if (-1 == chown(tmp, -1, AID_SYSTEM))
+ NVRAM_LOG("change file group owner failed:%s\n", (char*)strerror(errno));
+ }
+ if (!S_ISDIR(info.st_mode)) {
+ if (-1 == chmod(tmp, mode))
+ NVRAM_LOG("chmod file failed: %s\n", (char*)strerror(errno));
+ }
+ }
+#endif
+ }
+ pthread_mutex_unlock(&dirlock);
+ return filedesc;
+}
+
+bool NVM_GetDeviceInfo(const char *path, struct mtd_info_user *device_info) {
+ int fd;
+ int iRet;
+
+ fd = open(path, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_GetDeviceInfo : open %s fail!!! %s\n", path,
+ (char*)strerror(errno));
+ return false;
+ }
+ if (nvram_gpt_flag == 1
+ #ifdef MTK_NVRAM_IN_A_FILE
+ || true
+ #endif
+ ) {
+ device_info->type = MTD_NANDFLASH;
+ device_info->flags = MTD_WRITEABLE;
+ device_info->size = lseek(fd, 0, SEEK_END);
+ device_info->erasesize = 128 * 1024;
+ device_info->writesize = 512;
+ device_info->oobsize = 0;
+ } else {
+ iRet = ioctl(fd, MEMGETINFO, device_info);
+ if (iRet < 0) {
+ NVRAM_LOG("NVM_GetDeviceInfo : dumchar ioctl fail %s\n",
+ (char*)strerror(errno));
+ close(fd);
+ return false;
+ }
+ }
+ close(fd);
+
+ return true;
+}
+
+bool NVM_EraseDeviceBlock(const char *path, struct erase_info_user erase_info) {
+ int fd;
+ int iRet;
+
+ if (strstr(path, "mmcblk")) {
+ NVRAM_LOG("NVM_EraseDeviceBlock: mmcblk devie. Skip\n");
+ return true;
+ }
+
+ #ifdef BOOTING_DEVICE_NOT_NAND
+ NVRAM_LOG("NVM_EraseDeviceBlock: BOOTING_DEVICE_NOT_NAND is defined. Skip\n");
+ return true;
+ #endif
+
+ fd = open(path, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_EraseDeviceBlock: dumchar open fail!!! %s\n",
+ (char*)strerror(errno));
+ return false;
+ } else {
+ #ifdef MTK_NVRAM_IN_A_FILE
+ NVRAM_LOG("NVM_EraseDeviceBlock: MTK_NVRAM_IN_A_FILE is defined. Skip\n");
+ #else
+ iRet = ioctl(fd, MEMERASE, &erase_info);
+ if (iRet < 0) {
+ NVRAM_LOG("NVM_EraseDeviceBlock: dumchar erase fail! %s\n",
+ (char*)strerror(errno));
+ close(fd);
+ return false;
+ }
+ #endif
+ }
+ close(fd);
+
+ return true;
+}
+
+
+//iModifiedFileNum:the num of modified file
+//iSrc:0,from modem;1:from AP
+bool NVM_CheckBackFlag(int iFileDesc) {
+ unsigned int index = 0;
+ char cChecksum = 0;
+ char cBuf = 0;
+ bool flag = true;
+ int iResult = 0;
+ char savedchecksum = 0;
+ struct stat buf;
+ memset(&buf, 0, sizeof(struct stat));
+ if (-1 == iFileDesc) {
+ NVRAM_LOG("NVM_CheckBackFlag:file desc is wrong(ignore)\n");
+ return false;
+ }
+ if (-1 == fstat(iFileDesc, &buf)) {
+ NVRAM_LOG("NVM_CheckBackFlag:Err fstat(checksum)(ignore)\n");
+ return false;
+ }
+ if (buf.st_size != sizeof(unsigned int) + sizeof(char)) {
+ NVRAM_LOG("NVM_CheckBackFlag:file size is wrong\n");
+ return false;
+ }
+ for (index = 0; index < sizeof(unsigned int); ++index) {
+ if (sizeof(char) == read(iFileDesc, &cBuf, sizeof(char))) {
+ if (flag) {
+ cChecksum ^= cBuf;
+ flag = false;
+ } else {
+ cChecksum += cBuf;
+ flag = true;
+ }
+ } else {
+ NVRAM_LOG("NVM_CheckBackFlag:Err read Fail(checksum)(ignore):%d\n", iResult);
+ return false;
+ }
+ }
+ iResult = read(iFileDesc, &savedchecksum, sizeof(char));
+ if (iResult != sizeof(char)) {
+ NVRAM_LOG("[NVRAM]:can not read BackupFlag check sum:%d\n", iResult);
+ return false;
+ }
+ if (cChecksum == savedchecksum)
+ return true;
+ else
+ return false;
+}
+bool NVM_CheckMDBackFlag(int iFileDesc ) {
+ unsigned int index = 0;
+ unsigned short cChecksum = 0;
+ unsigned char *byte_checksum = (unsigned char *)&cChecksum;
+ char cBuf = 0;
+ int iResult = 0;
+ unsigned short savedchecksum = 0;
+ struct stat buf;
+ memset(&buf, 0, sizeof(struct stat));
+
+ if (-1 == iFileDesc) {
+ NVRAM_LOG("NVM_CheckMDBackFlag:file desc is wrong(ignore)\n");
+ return false;
+ }
+ if (-1 == fstat(iFileDesc, &buf)) {
+ NVRAM_LOG("NVM_CheckMDBackFlag:Err fstat(checksum)(ignore)\n");
+ return false;
+ }
+ if (buf.st_size != 4 * sizeof(char)) {
+ NVRAM_LOG("NVM_CheckMDBackFlag:file size is wrong\n");
+ return false;
+ }
+ for (index = 0; index < 2 * sizeof(char); ++index) {
+ if (sizeof(char) == read(iFileDesc, &cBuf, sizeof(char))) {
+ if (index & 0x1)
+ *(byte_checksum + 1) += cBuf;
+ else
+ *(byte_checksum) += cBuf;
+ } else {
+ NVRAM_LOG("NVM_CheckMDBackFlag:Err read Fail(checksum)(ignore):%d\n", iResult);
+ return false;
+ }
+ }
+ iResult = read(iFileDesc, &savedchecksum, sizeof(unsigned short));
+ if (iResult != sizeof(unsigned short)) {
+ NVBAK_LOG("[NVRAM]:can not read MDBackupFile check sum:%d\n", iResult);
+ return false;
+ }
+ if (cChecksum == savedchecksum)
+ return true;
+ else if (savedchecksum == 0xCDEF && cChecksum == 0x0)
+ return true;
+ else
+ return false;
+}
+
+bool NVM_ComputeBackflagCheckSum(int iFileDesc) {
+ char buf = 0;
+ char cChecksum = 0;
+ unsigned int index = 0;
+ bool flag = true;
+ int iResult = 0;
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_ComputeBackflagCheckSum:File desc is wrong\n");
+ return false;
+ }
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("NVM_ComputeBackflagCheckSum:(check sum)lseek error\n");
+ return false;
+ }
+ for (index = 0; index < sizeof(unsigned int); ++index) {
+ if (sizeof(char) == read(iFileDesc, &buf, sizeof(char))) {
+ if (flag) {
+ cChecksum ^= buf;
+ flag = false;
+ } else {
+ cChecksum += buf;
+ flag = true;
+ }
+ } else {
+ NVRAM_LOG("NVM_ComputeBackflagCheckSum:Err read Fail(checksum)(ignore):%d\n",
+ iResult);
+ return false;
+ }
+ }
+ iResult = write(iFileDesc, &cChecksum, sizeof(char));
+ if (iResult != sizeof(char)) {
+ NVRAM_LOG("write BackupFlag File check sum Fail:%d\n", iResult);
+ return false;
+ }
+ return true;
+
+}
+bool NVM_GetBackupFileNum(unsigned int * iAPBackupFileNum,
+ unsigned short *iMDBackupFileNum)
+
+{
+ int fd, iResult;
+ char cMtdDevName[128] = {0};
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, pos = 0, iBlockSize, iBlockNum, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ unsigned int iMapFileSize;
+ bool bRet;
+// int iBackup_Partition=get_partition_numb("nvram");
+
+
+ NVRAM_LOG("Get BackupFileNum:\n");
+ if (iAPBackupFileNum == NULL || iMDBackupFileNum == NULL) {
+ NVRAM_LOG("[NVRAM]:the pointer of iAPBackupFileNum or iMDBackupFileNum is error\r\n");
+ return false;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName,g_NVRAM_BACKUP_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ NVRAM_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+
+
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("[NVRAM]:BackupFileNum: get device info fail!!!\n");
+ return false;
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("[NVRAM]:mtd open error %s\r\n", (char*)strerror(errno));
+ return false;
+ }
+
+
+ iBlockSize = info.erasesize;
+ //iPartitionSize=info.size;
+ if ( nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if ( nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize ;
+ else {
+ NVRAM_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVRAM_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+ iBlockNum = NvRamBlockNum;
+ NVRAM_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVRAM_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVRAM_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ return false;
+ }
+
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVRAM_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if (lseek(fd, iBlockNum * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVRAM_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVRAM_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVRAM_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVRAM_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVRAM_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ #if 0
+ for (i = 0; i < iBlockNum; i++) {
+ NVRAM_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, tempBitmap1[i]);
+ }
+ #endif
+ for (i = 0; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVRAM_LOG("[NVRAM]:can not find map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != (pos * iBlockSize)) {
+ NVRAM_LOG("[NVRAM]:mtd lseek error\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, &iMapFileSize, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVRAM_LOG("[NVRAM]:mtd read error\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ if (iMapFileSize == 0) {
+ NVRAM_LOG("[NVRAM]:MapFile size is zero, BinRegion is empty\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = lseek(fd, pos * iBlockSize + 3 * sizeof(unsigned int) + iMapFileSize,
+ SEEK_SET);
+
+ iResult = read(fd, iAPBackupFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVRAM_LOG("[NVRAM]:mtd read error(AP)\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = read(fd, iMDBackupFileNum, sizeof(unsigned short));
+ if (iResult != sizeof(unsigned short)) {
+ NVRAM_LOG("[NVRAM]:mtd read error(MD)r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ NVRAM_LOG("[NVRAM]:Saved AP Backup File Num:%d,Saved MD Backup File Num:%d\n",
+ *iAPBackupFileNum, *iMDBackupFileNum);
+ NVRAM_LOG("[NVRAM]:mtd Get Backup File Num success\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return true;
+
+}
+
+bool NVM_AddBackupNum(unsigned int iModifiedFileNum, int iSrc) {
+ (void)(iModifiedFileNum);
+ (void)(iSrc);
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ int iFileDesc, iResult;
+ unsigned int iSavedFileNum = 0;
+ unsigned short iMDBackupFileNum = 0;
+
+ if (iModifiedFileNum <= 0) {
+ NVRAM_LOG("Err iModifiedFileNum:%d\n", iModifiedFileNum);
+ return false;
+ }
+ if (iSrc == 0)
+ NVRAM_LOG("iModifiedFileNum:%d,from modem\n", iModifiedFileNum);
+ else
+ NVRAM_LOG("iModifiedFileNum:%d,from AP\n", iModifiedFileNum);
+
+ pthread_mutex_lock(&backuplock);
+ iFileDesc = open(g_pcNVM_BackFlag, O_RDWR);
+ if (-1 == iFileDesc) {
+ iFileDesc = open_file_with_dirs(g_pcNVM_BackFlag, O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (-1 == iFileDesc) {
+ NVRAM_LOG("Err Create BackupFlag File Fail\n");
+ pthread_mutex_unlock(&backuplock);
+ return false;
+ }
+ } else {
+ if (NVM_CheckBackFlag(iFileDesc)) {
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("NVM_AddBackupNum:read lseek error\n");
+ goto read_from_bin;
+ }
+ iResult = read(iFileDesc, &iSavedFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVRAM_LOG("Err read BackupFlag File Fail(ignore):%d\n", iResult);
+ goto read_from_bin;
+ }
+ goto read_done;
+ }
+read_from_bin:
+ close(iFileDesc);
+ iFileDesc = open(g_pcNVM_BackFlag, O_TRUNC | O_RDWR);
+ if (!NVM_GetBackupFileNum(&iSavedFileNum, &iMDBackupFileNum)
+ || iSavedFileNum == 0xFFFFFFFF) {
+ NVRAM_LOG("Err read Backup Number(BIN) Fail(ignore)\n");
+ iSavedFileNum = 0;
+ }
+ }
+read_done:
+ NVRAM_LOG("AddBackupNum Saved:%d\n", iSavedFileNum);
+ iSavedFileNum += iModifiedFileNum;
+ NVRAM_LOG("AddBackupNum Update:%d\n", iSavedFileNum);
+ if (-1 == lseek(iFileDesc, 0, SEEK_SET)) {
+ NVRAM_LOG("NVM_AddBackupNum:write lseek error\n");
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ pthread_mutex_unlock(&backuplock);
+ return false;
+ }
+
+ iResult = write(iFileDesc, &iSavedFileNum, sizeof(unsigned int));
+ if (iResult != sizeof(unsigned int)) {
+ NVRAM_LOG("Err write BackupFlag File Fail:%d\n", iResult);
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ pthread_mutex_unlock(&backuplock);
+ return false;
+ }
+ if (!NVM_ComputeBackflagCheckSum(iFileDesc)) {
+ unlink(g_pcNVM_BackFlag);
+ close(iFileDesc);
+ pthread_mutex_unlock(&backuplock);
+ return false;
+ }
+ pthread_mutex_unlock(&backuplock);
+ close(iFileDesc);
+#endif
+
+ return true;
+}
+
+bool NVM_AddBackupFileNum(unsigned int iLid) {
+ int i;
+
+ for (i = 0; i < (int)g_Backup_File_Count; i++) {
+ if (iLid == aBackupToBinRegion[i].iLID) {
+ if (NVM_AddBackupNum(1, 1)) {
+ NVRAM_LOG("write BackupFlag File success:%d\n", iLid);
+ } else {
+ NVRAM_LOG("write BackupFlag File fail:%d\n", iLid);
+ }
+ }
+ }
+ return true;
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_Init
+//DESCRIPTION:
+// this function is called to call nvram lib and get max lid.
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// the max Lid number.
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+ extern int nvram_platform_callback(NVRAM_PLATFORM_T* pPlatform );
+#ifdef __cplusplus
+}
+#endif
+
+#if 0
+extern int init_nvram_platform_callback();
+extern int nvram_platform_callback();
+
+typedef int(*pfCallbackForPlatform)(NVRAM_PLATFORM_T*);
+extern pfCallbackForPlatform callback_for_nvram_platform;
+#endif
+
+
+
+FileName *gFileNameArray = NULL;
+
+
+int NVM_Init(void) {
+#if 0
+ int ret_callback = 0;
+#endif
+ NVRAM_PLATFORM_T nvram_platform = {0,0,0,0,0};
+ int ret;
+
+ memset(&nvram_platform, 0, sizeof(NVRAM_PLATFORM_T));
+
+ /* If NVRAM Init Completed, do not run twice*/
+ if (nvram_init_flag) {
+ return (g_i4MaxNvRamLid);
+ }
+
+ #if 0
+ /* Each proecss need get nvram device path once*/
+ ret = get_partition_path();
+ if (ret < 0) {
+ NVRAM_LOG("failed to get partition path\n");
+ return -1;
+ }
+ #endif
+#if 0
+ ret_callback = init_nvram_platform_callback();
+ NVRAM_LOG("init_nvram_platform_callback: %d\n", ret_callback);
+ if (callback_for_nvram_platform != NULL) {
+ ret_callback = callback_for_nvram_platform(&nvram_platform);
+ nvram_platform_log_block = nvram_platform.log_block;
+ nvram_platform_resv_block = nvram_platform.resv_block;
+ nvram_platform_DM_block = nvram_platform.DM_block;
+ }
+ /* NVRAM platform layout initialzation*/
+ nvram_platform_callback(&nvram_platform);
+ nvram_platform_log_block = nvram_platform.log_block;
+ nvram_platform_resv_block = nvram_platform.resv_block;
+ nvram_platform_DM_block = nvram_platform.DM_block;
+ nvram_platform_layout_version = nvram_platform.layout_version;
+ nvram_platform_header_offset = nvram_platform.header_offset;
+
+ if (nvram_multi_storage_support(&nvram_platform)) {
+ NVRAM_LOG("Enter nvram_multi_storage_support.\n");
+ nvram_platform_log_block = nvram_platform.log_block;
+ nvram_platform_resv_block = nvram_platform.resv_block;
+ nvram_platform_DM_block = nvram_platform.DM_block;
+ nvram_platform_layout_version = nvram_platform.layout_version;
+ nvram_platform_header_offset = nvram_platform.header_offset;
+ }
+#endif
+
+ NVRAM_LOG("nvram_platform_log_block: %d\n", nvram_platform_log_block);
+ NVRAM_LOG("nvram_platform_resv_block: %d\n", nvram_platform_resv_block);
+ NVRAM_LOG("nvram_platform_DM_block: %d\n", nvram_platform_DM_block);
+ NVRAM_LOG("nvram_platform_layout_version: %d\n", nvram_platform_layout_version);
+ NVRAM_LOG("nvram_platform_header_offset: %d\n", nvram_platform_header_offset);
+ NVRAM_LOG("g_i4CFG_File_Count: %d\n", g_i4CFG_File_Count);
+
+ /* Calculate the Max Lid, contain the common lid and custom lid*/
+ g_i4MaxNvRamLid = g_i4CFG_File_Count + g_i4CFG_File_Custom_Count;
+ NVRAM_LOG("NVM_Init Max Lid: %d\n", g_i4MaxNvRamLid);
+
+ /*
+ * If g_NVRAM_BACKUP_DEVICE get the path through the get_partition_path operations,
+ * need confirm this path is for GPT solution or PMT solution.
+ */
+ NVRAM_LOG("[NVRAM]: info nvram_gpt_flag =%d\r\n", nvram_gpt_flag);
+
+ /* NVRAM_Init Completed and set one flag in each process */
+ nvram_init_flag = 1;
+ NVRAM_LOG("[NVRAM]: info NVRAM Init Completed!");
+
+ return (g_i4MaxNvRamLid);
+}
+int NVM_GetLIDByName(char* filename) {
+
+ int i = 0;
+ int Lid = - 1;
+
+ NVRAM_LOG("NVM_GetLIDByName %s \n", filename);
+ if (NVM_Init() < 0) {
+ NVRAM_LOG("NVM_GetLIDByName--NVM_Init fail !!!\n");
+ return -1;
+ }
+
+ if (gFileNameArray == NULL) {
+
+ gFileNameArray = (FileName*)malloc(g_i4MaxNvRamLid * sizeof(FileName));
+ //NVRAM_LOG("gFileNameArray =%x\n", gFileNameArray);
+
+ if (gFileNameArray == NULL) {
+ NVRAM_LOG("Filename array malloc fail \n");
+ free(gFileNameArray);
+ return -1;
+ }
+
+
+ for ( i = 0; i < g_i4CFG_File_Count; i++) {
+
+ //strcpy(gFileNameArray[i].cFileName, g_akCFG_File[i].cFileName);
+ snprintf(gFileNameArray[i].cFileName, sizeof(g_akCFG_File[i].cFileName),"%s", g_akCFG_File[i].cFileName);
+ gFileNameArray[i].iLID = i;
+
+ NVRAM_LOG("deal with cfgfile =%s,%d\n", gFileNameArray[i].cFileName,
+ gFileNameArray[i].iLID);
+ }
+ for ( i = g_i4CFG_File_Count ;
+ i < g_i4CFG_File_Count + g_i4CFG_File_Custom_Count; i++) {
+
+ //strcpy(gFileNameArray[i].cFileName, g_akCFG_File_Custom[i-iCustomBeginLID].cFileName);
+ snprintf(gFileNameArray[i].cFileName, sizeof(gFileNameArray[i].cFileName),"%s", g_akCFG_File_Custom[i-iCustomBeginLID].cFileName);
+ gFileNameArray[i].iLID = i;
+
+ NVRAM_LOG("deal with cfgcustfile =%s,%d\n", gFileNameArray[i].cFileName,
+ gFileNameArray[i].iLID);
+ }
+
+ }
+
+
+
+ if (!filename || (strstr(filename, "Reserved") != NULL)
+ || (strlen(filename) > FILENAMELENGTH) || (strlen(filename) == 0)) {
+ NVRAM_LOG("NVRAM: Invalide argument for find LID name array! \n");
+ return -1;
+ }
+
+ for (i = 0 ; i < g_i4MaxNvRamLid; i++) {
+
+ if (strstr(gFileNameArray[i].cFileName, filename)) {
+
+
+ Lid = gFileNameArray[i].iLID;
+
+ break;
+ }
+ }
+ NVRAM_LOG("NVRAM: NVM_GetLIDByName Lid =%d \n", Lid);
+ return Lid;
+
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_GetCfgFileTable
+//DESCRIPTION:
+// this function is called to the array table of nvram file information .
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// refers to the definition of "TCFG_FILE"
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+const TCFG_FILE* NVM_GetCfgFileTable(int file_lid) {
+ //NVRAM_LOG("NVM_GetCfgFileTable : file_lid = %d\n", file_lid);
+ // NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+ // NVRAM_LOG("g_i4CFG_File_Count:%d,g_i4CFG_File_Custom_Count:%d\n",g_i4CFG_File_Count,g_i4CFG_File_Custom_Count);
+ if (file_lid >= (g_i4CFG_File_Count + g_i4CFG_File_Custom_Count)) {
+ NVRAM_LOG("NVM_GetCfgFileTable file_lid is over than maximum %d\n",
+ (g_i4CFG_File_Count + g_i4CFG_File_Custom_Count));
+ return NULL;
+ }
+ //if (file_lid < AP_CFG_CUSTOM_BEGIN_LID)
+ if (file_lid < iCustomBeginLID) {
+ //NVRAM_LOG("NVM_GetCfgFileTable MTK %d\n", file_lid);
+ return g_akCFG_File;
+ }
+
+ //NVRAM_LOG("NVM_GetCfgFileTable Customer %d\n", file_lid);
+ return g_akCFG_File_Custom;
+}
+
+/*******************************************************************************
+//FUNCTION:
+// NVM_GenerateFileVer
+//DESCRIPTION:
+// this function is called to generate the version file in backup or nvram partition.
+//
+//PARAMETERS:
+// CPY_File_To_NVM: [IN] true is generate version file in NVM partition
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+******************************************************************************/
+bool NVM_GenerateFileVer(bool CPY_File_To_NVM) {
+ int iFileDesc;
+ int iFilNO = 0;
+ char tempstr[FILENAMELENGTH];
+ int iStrLen = 0;
+ memset(tempstr, 0, FILENAMELENGTH);
+ iStrLen = strlen(strVerInfo);
+
+ NVRAM_LOG("NVM_GenerateFileVer: CPY_File_To_NVM=%d ++\n", CPY_File_To_NVM);
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ // we now use global varialbe to desribe the version instead of files,
+ // so it just return when check default version file
+ if (!CPY_File_To_NVM) {
+ return true;
+ }
+
+ pthread_mutex_lock(&generateFileVerlock);
+ // create the version file in FAT2 partitioin.
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
+ NVRAM_LOG("Create/Open the file of %s \n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Create the dir path of %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ iFileDesc = open_file_with_dirs(g_akCFG_File[iFileVerInfoLID].cFileName,
+ O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH);
+ }
+
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Fail to open %s\n", g_akCFG_File[iFileVerInfoLID].cFileName);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ memcpy(tempstr, strVerInfo, iStrLen + 1);
+ write(iFileDesc, tempstr, FILENAMELENGTH);
+ write(iFileDesc, g_akCFG_File[iFileVerInfoLID].cFileVer, 4);
+ memset(tempstr, 0, FILENAMELENGTH);
+ for (iFilNO = iFileVerInfoLID; iFilNO < iCustomBeginLID; iFilNO++) {
+ int i;
+ iStrLen = strlen(g_akCFG_File[iFilNO].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File[iFilNO].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File[iFilNO].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File[iFilNO].cFileName+i+1);
+ break;
+ }
+ }
+ write(iFileDesc, tempstr, FILENAMELENGTH);
+ write(iFileDesc, g_akCFG_File[iFilNO].cFileVer, 4);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+
+ for (iFilNO = iCustomBeginLID;
+ iFilNO < (g_i4CFG_File_Count + g_i4CFG_File_Custom_Count); iFilNO++) {
+ int i;
+ iStrLen = strlen(g_akCFG_File_Custom[iFilNO - iCustomBeginLID].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File_Custom[iFilNO - iCustomBeginLID].cFileName[i] == '/') {
+ strncpy(tempstr, g_akCFG_File_Custom[iFilNO-iCustomBeginLID].cFileName+i+1, sizeof(tempstr)-1);
+ tempstr[sizeof(tempstr)-1] = '\0';
+ break;
+ }
+ }
+ write(iFileDesc, tempstr, FILENAMELENGTH);
+ write(iFileDesc, g_akCFG_File_Custom[iFilNO - iCustomBeginLID].cFileVer, 4);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ if (-1 == chown(g_akCFG_File[iFileVerInfoLID].cFileName, -1, AID_SYSTEM))
+ NVRAM_LOG("change dir group owner failed:%s\n", (char*)strerror(errno));
+ if (-1 == chmod(g_akCFG_File[iFileVerInfoLID].cFileName, 0664))
+ NVRAM_LOG("chmod file failed: %s\n", (char*)strerror(errno));
+
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+
+ NVRAM_LOG("NVM_GenerateFileVer: CPY_File_To_NVM =%d --\n", CPY_File_To_NVM);
+
+ return true;
+}
+
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckVerFile
+//DESCRIPTION:
+// this function is called to check the exist of versiono file information
+// in NVM partition or default version.
+//
+//PARAMETERS:
+// Is_NVM: [IN] true is to check NVM partition, otherwise check default version
+//
+//RETURN VALUE:
+// true is exist, otherwise version is not exist.
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckVerFile(bool In_NVM) {
+ struct stat statbuf;
+ //NVRAM_LOG("NVM_CheckVerFile: %d\n", In_NVM);
+
+ // when check default version file, just return
+ // becuase we now use global variable (g_akCFG_File.cFileVer)
+ if (In_NVM) {
+ if (stat(g_akCFG_File[iFileVerInfoLID].cFileName, &statbuf) == -1
+ || !S_ISREG(statbuf.st_mode)) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_UpdateFileVerNo
+//DESCRIPTION:
+// this function is called to reset a NvRam to default value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_UpdateFileVerNo(int file_lid, VerInfoUpdateFlag UpdateFlag) {
+ int iFileDesc;
+ int iFileSize;
+ int iRealFileLid = 0;
+ struct stat st;
+ char * buffer1 = NULL;
+ char * buffer2 = NULL;
+ int iResult, iStrLen;
+ bool bIsNewVerInfo;
+ char tempstr[FILENAMELENGTH];
+ char tempstr1[FILENAMELENGTH];
+ const TCFG_FILE *pCfgFileTable = NULL;
+
+ struct stat statbuf;
+ int ilooptime, iIndex;
+ off_t offset = 0;
+
+ memset(tempstr, 0, FILENAMELENGTH);
+ memset(tempstr1,0,FILENAMELENGTH);
+
+ NVRAM_LOG("NVM_UpdateFileVerNo: %d ++\n", file_lid);
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ if (UpdateFlag == VerUpdate) {
+ pCfgFileTable = NVM_GetCfgFileTable(file_lid);
+ //NVRAM_LOG("NVM_GetCfgFileTable done\n");
+ if ( file_lid < iCustomBeginLID ) {
+ NVRAM_LOG("This File LID is belong to common lid!\n");
+ iRealFileLid = file_lid;
+ } else {
+ NVRAM_LOG("This File LID is belong to custom lid\n");
+ iRealFileLid = file_lid - iCustomBeginLID;
+ }
+
+ if (pCfgFileTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!! \n");
+ return false;
+ }
+
+ memset(tempstr1, 0, FILENAMELENGTH);
+ iStrLen = strlen(pCfgFileTable[iRealFileLid].cFileName);
+ for (iIndex = iStrLen; iIndex >= 0; iIndex--) {
+ if ( pCfgFileTable[iRealFileLid].cFileName[iIndex] == '/') {
+ //strcpy( tempstr1, pCfgFileTable[iRealFileLid].cFileName + iIndex + 1 );//get the target name
+ snprintf(tempstr1, sizeof(tempstr1),"%s", pCfgFileTable[iRealFileLid].cFileName + iIndex + 1);
+ break;
+ }
+ }
+
+ NVRAM_LOG("DEBUG searching LID = %d,%s\n", file_lid, tempstr1);
+
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDONLY);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo Open1 version file fail \n");
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ if (fstat(iFileDesc, &statbuf) < 0) {
+ NVBAK_LOG("[NVRAM]: fstat error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+
+ iFileSize = (int)statbuf.st_size;
+ ilooptime = iFileSize / (FILEVERLENGTH + FILENAMELENGTH);
+
+ for (iIndex = 0; iIndex < ilooptime; iIndex++) {
+#if 1
+ offset = iIndex * (FILEVERLENGTH + FILENAMELENGTH);
+ iResult =pread(iFileDesc, tempstr, FILENAMELENGTH-1, offset);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: pread error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, tempstr1)) {
+ break;
+ }
+#endif
+ }
+ if (iIndex == ilooptime) {
+ NVRAM_LOG("NVM_UpdateFileVerNo find target file fail: %d\n", file_lid);
+ UpdateFlag = VerAdd;
+
+ }
+ close(iFileDesc);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ /* open file */
+ pthread_mutex_lock(&generateFileVerlock);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDWR);
+
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo Open1 version file fail \n");
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ iResult = pread(iFileDesc,tempstr,FILENAMELENGTH-1, 0);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: pread error. (errno=%d)", errno);
+ pthread_mutex_unlock(&generateFileVerlock);
+ close(iFileDesc);
+ return false;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, strVerInfo))
+ bIsNewVerInfo = true;
+ else
+ bIsNewVerInfo = false;
+ memset(tempstr, 0, FILENAMELENGTH);
+
+ if (UpdateFlag == VerUpdate) {
+ /* Ver Info has existed , or added at the end of Version Info File
+ * move to the address in the version file.
+ * becuase we just use cFileVer to save the version,
+ * so the offset address is file_lid* sizeof(cFileVer)
+ */
+ if (!bIsNewVerInfo) {
+ offset = file_lid * FILEVERLENGTH;
+ }
+
+ if (file_lid < iCustomBeginLID) {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File[file_lid].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File[file_lid].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File[file_lid].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File[file_lid].cFileName+i+1);
+ break;
+ }
+ }
+ pwrite(iFileDesc, tempstr, FILENAMELENGTH, offset);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ pwrite(iFileDesc, g_akCFG_File[file_lid].cFileVer, FILEVERLENGTH,
+ offset + FILENAMELENGTH);
+ } else {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ break;
+ }
+ }
+ pwrite(iFileDesc, tempstr, FILENAMELENGTH, offset);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ pwrite(iFileDesc, g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileVer,
+ FILEVERLENGTH, offset + FILENAMELENGTH);
+ }
+ //close(iFileDesc);
+ } else if (UpdateFlag == VerDel) {
+ if (stat(g_akCFG_File[iFileVerInfoLID].cFileName, &st) < 0) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo stat \n");
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ offset = 0;
+ iFileSize = st.st_size;
+
+ buffer1 = (char*)malloc(iFileSize);
+ if (bIsNewVerInfo)
+ buffer2 = (char*)malloc(iFileSize - FILEVERLENGTH - FILENAMELENGTH);
+ else
+ buffer2 = (char*)malloc(iFileSize - FILEVERLENGTH);
+ if (buffer1 == NULL || buffer2 == NULL) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo stat \n");
+ if (buffer1 != NULL)
+ free(buffer1);
+ if (buffer2 != NULL)
+ free(buffer2);
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ iResult = pread(iFileDesc, buffer1, iFileSize, offset);
+ if (iResult != st.st_size) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo read del\n");
+ NVRAM_LOG("iResult = %d, st.st_size = %d.\n", iResult, (int)st.st_size);
+ free(buffer1);
+ free(buffer2);
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ if (!bIsNewVerInfo) {
+ memcpy(buffer2, buffer1, file_lid * FILEVERLENGTH);
+ memcpy(buffer2 + file_lid * FILEVERLENGTH,
+ buffer1 + (file_lid + 1)*FILEVERLENGTH,
+ iFileSize - (file_lid + 1)*FILEVERLENGTH);
+ } else {
+ memcpy(buffer2, buffer1, (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH));
+ memcpy(buffer2 + (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH),
+ buffer1 + (file_lid + 1 + 1) * (FILEVERLENGTH + FILENAMELENGTH),
+ iFileSize - (file_lid + 1 + 1) * (FILEVERLENGTH + FILENAMELENGTH));
+ }
+ pthread_mutex_lock(&generateFileVerlock);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName,
+ O_TRUNC | O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo Open2 version file fail \n");
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ if (!bIsNewVerInfo) {
+ iResult = pwrite(iFileDesc, buffer2, iFileSize - FILEVERLENGTH, 0);
+ if (iResult != (iFileSize - FILEVERLENGTH)) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo write version file fail \n");
+ close(iFileDesc);
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ } else {
+ iResult = pwrite(iFileDesc, buffer2, iFileSize - FILEVERLENGTH - FILENAMELENGTH,
+ 0);
+ if (iResult != (iFileSize - FILEVERLENGTH - FILENAMELENGTH)) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo write version file fail \n");
+ close(iFileDesc);
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ }
+ free(buffer1);
+ free(buffer2);
+ } else if (UpdateFlag == VerAdd) {
+ if (stat(g_akCFG_File[iFileVerInfoLID].cFileName, &st) < 0) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo stat \n");
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ iFileSize = st.st_size;
+ bool bAddedAtend;
+ if (bIsNewVerInfo) {
+ if ((file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH) >= iFileSize)
+ bAddedAtend = true;
+ else
+ bAddedAtend = false;
+ } else {
+ if (file_lid * FILEVERLENGTH >= iFileSize)
+ bAddedAtend = true;
+ else
+ bAddedAtend = false;
+ }
+ if (bAddedAtend) {
+ NVRAM_LOG("Added at the end of the file \n");
+ if (bIsNewVerInfo)
+ offset = (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH);
+ else
+ offset = file_lid * FILEVERLENGTH;
+
+ if (file_lid < iCustomBeginLID) {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File[file_lid].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File[file_lid].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File[file_lid].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File[file_lid].cFileName+i+1);
+ break;
+ }
+ }
+ pwrite(iFileDesc, tempstr, FILENAMELENGTH, offset);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ pwrite(iFileDesc, g_akCFG_File[file_lid].cFileVer, FILEVERLENGTH,
+ offset + FILENAMELENGTH);
+ } else {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ break;
+ }
+ }
+ pwrite(iFileDesc, tempstr, FILENAMELENGTH, offset);
+ memset(tempstr, 0, FILENAMELENGTH);
+ }
+ pwrite(iFileDesc, g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileVer,
+ FILEVERLENGTH, offset + FILENAMELENGTH);
+ }
+ } else {
+ NVRAM_LOG("Added at the middle part of the file \n");
+ buffer1 = (char*)malloc(iFileSize);
+ if (bIsNewVerInfo) {
+ buffer2 = (char*)malloc(iFileSize + FILEVERLENGTH + FILENAMELENGTH);
+ } else {
+ buffer2 = (char*)malloc(iFileSize + FILEVERLENGTH);
+ }
+ if (buffer1 == NULL || buffer2 == NULL) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo stat \n");
+ if (buffer1 != NULL)
+ free(buffer1);
+ if (buffer2 != NULL)
+ free(buffer2);
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ pthread_mutex_lock(&generateFileVerlock);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo Open1 version file fail \n");
+ pthread_mutex_unlock(&generateFileVerlock);
+ free(buffer1);
+ free(buffer2);
+ return false;
+ }
+ iResult = pread(iFileDesc, buffer1, iFileSize, 0);
+ if (iResult != iFileSize) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo read add \n");
+ free(buffer1);
+ free(buffer2);
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ NVRAM_LOG("cpy1\n");
+ if (bIsNewVerInfo) {
+ memcpy(buffer2, buffer1, (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH));
+ } else {
+ memcpy(buffer2, buffer1, file_lid * FILEVERLENGTH);
+ }
+ if (file_lid < iCustomBeginLID) {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File[file_lid].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File[file_lid].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File[file_lid].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File[file_lid].cFileName+i+1);
+ break;
+ }
+ }
+ memcpy(buffer2 + (file_lid + 1) * (FILENAMELENGTH + FILEVERLENGTH), tempstr,
+ FILENAMELENGTH);
+ memset(tempstr, 0, FILENAMELENGTH);
+ memcpy(buffer2 + (file_lid + 1) * (FILENAMELENGTH + FILEVERLENGTH) +
+ FILENAMELENGTH,
+ g_akCFG_File[file_lid].cFileVer, FILEVERLENGTH);
+ } else {
+ memcpy(buffer2 + file_lid * FILEVERLENGTH, g_akCFG_File[file_lid].cFileVer,
+ FILEVERLENGTH);
+ }
+ } else {
+ if (bIsNewVerInfo) {
+ int i;
+ iStrLen = strlen(g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileName[i] == '/') {
+ //strcpy(tempstr,g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ snprintf(tempstr, sizeof(tempstr),"%s", g_akCFG_File_Custom[file_lid-iCustomBeginLID].cFileName+i+1);
+ break;
+ }
+ }
+ memcpy(buffer2 + (file_lid + 1) * (FILENAMELENGTH + FILEVERLENGTH), tempstr,
+ FILENAMELENGTH);
+ memset(tempstr, 0, FILENAMELENGTH);
+ memcpy(buffer2 + (file_lid + 1) * (FILENAMELENGTH + FILEVERLENGTH) +
+ FILENAMELENGTH,
+ g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileVer, FILEVERLENGTH);
+
+ } else {
+ memcpy(buffer2 + file_lid * FILEVERLENGTH,
+ g_akCFG_File_Custom[file_lid - iCustomBeginLID].cFileVer, FILEVERLENGTH);
+ }
+ }
+ NVRAM_LOG("cpy2\n");
+ if (bIsNewVerInfo) {
+ memcpy(buffer2 + (file_lid + 1 + 1) * (FILEVERLENGTH + FILENAMELENGTH),
+ buffer1 + (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH),
+ iFileSize - (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH));
+ } else {
+ memcpy(buffer2 + (file_lid + 1)*FILEVERLENGTH,
+ buffer1 + file_lid * FILEVERLENGTH,
+ iFileSize - file_lid * FILEVERLENGTH);
+ }
+ NVRAM_LOG("cpy3\n");
+ pthread_mutex_lock(&generateFileVerlock);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_TRUNC | O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo Open2 version file fail \n");
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ if (bIsNewVerInfo) {
+ iResult = pwrite(iFileDesc, buffer2, iFileSize + FILEVERLENGTH + FILENAMELENGTH,
+ 0);
+ if (iResult != (iFileSize + FILEVERLENGTH + FILENAMELENGTH)) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo write version file fail \n");
+ close(iFileDesc);
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ } else {
+ iResult = pwrite(iFileDesc, buffer2, iFileSize + FILEVERLENGTH, 0);
+ if (iResult != (iFileSize + FILEVERLENGTH)) {
+ NVRAM_LOG("Error NVM_UpdateFileVerNo write version file fail \n");
+ close(iFileDesc);
+ free(buffer1);
+ free(buffer2);
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ }
+ free(buffer1);
+ free(buffer2);
+ }
+ } else {
+ pthread_mutex_unlock(&generateFileVerlock);
+ return false;
+ }
+ close(iFileDesc);
+ pthread_mutex_unlock(&generateFileVerlock);
+ NVRAM_LOG("UpdateFileVerNo: %d --\n", file_lid);
+ return true;
+}
+#define Loop_num 4096
+
+static unsigned int NVM_ComputeCheckSum(void)
+{
+ time_t start = time(NULL);
+ NVBAK_LOG("Starting NVM_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start));////add for log
+ int iFileDesc_file;
+ unsigned int iFileSize;
+ unsigned int ulCheckSum=0;
+ int looptime;
+ struct stat st;
+ int i,flag,j;//add j
+ int iResult;
+ int iLength=sizeof(unsigned int);
+ unsigned int tempNum;
+ unsigned int tempBuf[4096] ;//add for read
+ int jloop_num=0;
+ int tmplooptime;//add for read
+ if(stat(g_pcNVM_AllFile,&st)<0)
+ {
+ NVBAK_LOG("Error NVM_ComputeCheckSum stat \n");
+ return 0;
+ }
+ iFileSize=st.st_size;
+ looptime=iFileSize/(sizeof(unsigned int));
+ tmplooptime = looptime/(Loop_num) + 1;
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ if(iFileDesc_file<0)
+ {
+ NVBAK_LOG("NVM_ComputeCheckSum cannot open data file\n");
+ return 0;
+ }
+ flag=1;
+ //NVBAK_LOG("looptime is %d \n", looptime);////add for log
+ //NVBAK_LOG("tmplooptime is %d \n", tmplooptime);////add for log
+ //time_t start_while = time(NULL);////add for log
+ //NVBAK_LOG("Start_while NVM_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start_while));//add
+ for(i=0;i<tmplooptime;i++)
+ {
+ if(i != tmplooptime-1 )
+ {
+ jloop_num=Loop_num;}
+ else
+ {
+ jloop_num=looptime%(Loop_num);}
+ //NVBAK_LOG("Start_while: i is %d, NVM_ComputeCheckSum (pid %d) on %s",i,getpid(),ctime(&start_while));// add for log
+ iResult=read(iFileDesc_file, tempBuf, jloop_num*iLength);
+ //NVBAK_LOG("Start_while: iResult is %d, NVM_ComputeCheckSum (pid %d) on %s",iResult,getpid(),ctime(&start_while));//add for log
+ if(iResult!= jloop_num*iLength)
+ {
+ NVBAK_LOG("NVM_ComputeCheckSum cannot read checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ //NVBAK_LOG("Start_while:before_while NVM_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&start_while));//add for log
+ for(j=0;j<jloop_num;j++)
+ {
+ if(flag)
+ {
+ ulCheckSum^=tempBuf[j];
+ flag=0;
+ }
+ else
+ {
+ ulCheckSum+=tempBuf[j];
+ flag=1;
+ }
+ }
+ }
+ tempNum=0;
+ iLength=iFileSize%(sizeof(unsigned int));
+ iResult=read(iFileDesc_file, &tempNum, iLength);
+ NVBAK_LOG("tempNum = %x", tempNum);//add for log
+ if(iResult!= iLength)
+ {
+ NVBAK_LOG("NVM_ComputeCheckSum cannot read last checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ ulCheckSum+=tempNum;
+ //ulCheckSum^=gFileStartAddr;
+ close(iFileDesc_file);
+ time_t end = time(NULL);
+ NVBAK_LOG("Ending NVM_ComputeCheckSum (pid %d) on %s",getpid(),ctime(&end));//add for log
+ return ulCheckSum;
+}
+#if 0
+static unsigned int NVM_ComputeCheckSum(void) {
+ int iFileDesc_file;
+ char cReadData;
+ unsigned int iFileSize;
+ unsigned int ulCheckSum = 0;
+ int looptime;
+ struct stat st;
+ int i, flag;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+ unsigned int tempNum;
+
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("Error NVM_ComputeCheckSum stat \n");
+ return 0;
+ }
+
+ iFileSize = st.st_size;
+
+ looptime = iFileSize / (sizeof(unsigned int));
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+ if (iFileDesc_file < 0) {
+ NVBAK_LOG("NVM_ComputeCheckSum cannot open data file\n");
+ return 0;
+ }
+ flag = 1;
+ for (i = 0; i < looptime; i++) {
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ if (flag) {
+ ulCheckSum ^= tempNum;
+ flag = 0;
+ } else {
+ ulCheckSum += tempNum;
+ flag = 1;
+ }
+ }
+ tempNum = 0;
+ iLength = iFileSize % (sizeof(unsigned int));
+ iResult = read(iFileDesc_file, &tempNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_GetCheckSum cannot read last checksum data\n");
+ close(iFileDesc_file);
+ return 0;
+ }
+ ulCheckSum += tempNum;
+ //ulCheckSum^=gFileStartAddr;
+ close(iFileDesc_file);
+ return ulCheckSum;
+}
+#endif
+
+
+static BackupFileInfo stBackupFileInfo;
+static bool NVM_GetCheckSum(void) {
+ int iFileDesc_map;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDONLY);
+ if (iFileDesc_map < 0) {
+ NVBAK_LOG("NVM_GetCheckSum cannot open/create map data\n");
+ return false;
+ }
+ iResult = read(iFileDesc_map, &stBackupFileInfo.ulCheckSum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iLength = sizeof(unsigned int);
+ iResult = read(iFileDesc_map, &stBackupFileInfo.iCommonFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = read(iFileDesc_map, &stBackupFileInfo.iCustomFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_GetCheckSum cannot read checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ close(iFileDesc_map);
+
+ return true;
+}
+
+bool NVM_SetCheckSum(unsigned int ulCheckSum) {
+ int iFileDesc_map = 0;
+ int iResult;
+ int iLength = sizeof(unsigned int);
+ unsigned int iOldCommonFileNum = g_i4CFG_File_Count;
+ unsigned int iOldCustomFileNum = g_i4CFG_File_Custom_Count;
+
+ pthread_mutex_lock(&gFileStartAddrlock);
+ ulCheckSum ^= gFileStartAddr;
+ gFileStartAddr = 0;
+ pthread_mutex_unlock(&gFileStartAddrlock);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_WRONLY);
+ if (iFileDesc_map < 0) {
+ NVBAK_LOG("NVM_SetCheckSum cannot open/create map data\n");
+ return false;
+ }
+ iResult = write(iFileDesc_map, &ulCheckSum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_SetCheckSum cannot write checksum data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ NVBAK_LOG("common file num:%d,custom file num:%d\n", iOldCommonFileNum,
+ iOldCustomFileNum);
+ iLength = sizeof(unsigned int);
+ iResult = write(iFileDesc_map, &iOldCommonFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_SetCheckSum cannot write common file num data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ iResult = write(iFileDesc_map, &iOldCustomFileNum, iLength);
+ if (iResult != iLength) {
+ NVBAK_LOG("NVM_SetCheckSum cannot write custom file num data\n");
+ close(iFileDesc_map);
+ return false;
+ }
+ close(iFileDesc_map);
+ return true;
+}
+
+static bool NVM_CompareCheckSum(unsigned int ulCheckSum1,
+ unsigned int ulCheckSum2) {
+ if (ulCheckSum1 != ulCheckSum2)
+ return false;
+ return true;
+}
+bool NVM_RestoreFromFiles_OneFile(int eBackupType, int file_lid,
+ const char* filename, bool* find_flag) {
+ int iFileDesc_file, iFileDesc_map, iFileDesc, iSize;
+ int iFileTitleOffset = 0;
+ short int iFileNum = 0;
+ char *buf; /* content */
+ File_Title *FileInfo = NULL;
+ bool bRet = false;
+ off_t iRet;
+ File_Title_Header1 FileTitleInfo1;
+ File_Title_Header2 FileTitleInfo2;
+ File_Title_Header3 FileTitleInfo3;
+ File_Title_Header4 FileTitleInfo4;
+ File_Title_Header5 FileTitleInfo5;
+
+ memset(&FileTitleInfo3, 0x00, sizeof(File_Title_Header3));
+ int fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header1);
+
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: File_Title_Header1 set\n");
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: File_Title_Header2 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header2) - 2 * sizeof(short
+ int); //In order to align, minus 2*sizeof(short int)
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: File_Title_Header3 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header3) - 4 * sizeof(short
+ int); //In order to align, minus 4*sizeof(short int)
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: File_Title_Header4 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header4) - 4 * sizeof(short int);
+ } else {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: File_Title_Header5 set\n");
+ fhs = sizeof(unsigned int) + 2 * sizeof(unsigned int) + sizeof(
+ File_Title_Header5);
+ }
+ int fis = sizeof(File_Title);
+
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ int filesizeintable = 0;
+ if ((filename == NULL) && (file_lid >= 0)) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile : %d ++\n", file_lid);
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ if (!NVM_CheckVerFile(true)) {
+ NVM_GenerateFileVer(true);
+ }
+
+ //get the file informatin table.
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile: NVM_GetCfgFileTable Fail!!!\n");
+ return 0;
+ }
+
+
+ if (file_lid == iFileVerInfoLID) {
+ if (!NVM_GenerateFileVer(true)) {
+ return 0;
+ }
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile:Wrong file_lid Fail!!!\n");
+ return 0;
+ }
+
+ if (file_lid >= iCustomBeginLID) {
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+
+ } else {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile(MD): %s ++\n", filename);
+ }
+ /* malloc the buffer of title buf */
+ FileInfo = (File_Title *)malloc(sizeof(File_Title));
+ memset(FileInfo, 0, sizeof(File_Title));
+
+ iFileDesc_file = open(g_pcNVM_AllFile , O_RDWR);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ /* Error handling */
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile cannot open file data\n");
+ free(FileInfo);
+ return false;
+ }
+
+ iFileDesc_map = open(g_pcNVM_AllMap, O_RDWR);
+
+ if ( iFileDesc_map < 0) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile cannot open allmap file\n");
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ /* Error handling */
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile cannot open map data\n");
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+
+ if (lseek(iFileDesc_map, sizeof(unsigned int) + 2 * sizeof(unsigned int), SEEK_SET) < 0){
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(FileInfo);
+ return false;
+ }
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo1, sizeof(File_Title_Header1));
+ else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo2,
+ sizeof(File_Title_Header2) - 2 * sizeof(short
+ int)); //In order to align, minus 2*sizeof(short int)
+
+ else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo3,
+ sizeof(File_Title_Header3) - 4 * sizeof(short
+ int)); //In order to align, minus 4*sizeof(short int)
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support())
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo4,
+ sizeof(File_Title_Header4) - 4 * sizeof(short int));
+ else
+ iSize = (int)read(iFileDesc_map, &FileTitleInfo5, sizeof(File_Title_Header5));
+#if 0
+
+ NVBAK_LOG("File_Title_Header iApBootNum(%d)", FileTitleInfo1.iApBootNum);
+ NVBAK_LOG("File_Title_Header iApCleanNum(%d)", FileTitleInfo1.iApCleanNum);
+ NVBAK_LOG("File_Title_Header iMdBootNum(%d)", FileTitleInfo1.iMdBootNum);
+ NVBAK_LOG("File_Title_Header iMdCleanNum(%d)", FileTitleInfo1.iMdCleanNum);
+ NVBAK_LOG("File_Title_Header iMdImpntNum(%d)", FileTitleInfo1.iMdImpntNum);
+ NVBAK_LOG("File_Title_Header iMdCoreNum(%d)", FileTitleInfo1.iMdCoreNum);
+ NVBAK_LOG("File_Title_Header iMdDataNum(%d)", FileTitleInfo1.iMdDataNum);
+ if (nvram_platform_header_offset == 0) {
+ //Add for second modem for MT658*
+ NVBAK_LOG("File_Title_Header iMd2BootNum(%d)", FileTitleInfo1.iMd2BootNum);
+ NVBAK_LOG("File_Title_Header iMd2CleanNum(%d)", FileTitleInfo1.iMd2CleanNum);
+ NVBAK_LOG("File_Title_Header iMd2ImpntNum(%d)", FileTitleInfo1.iMd2ImpntNum);
+ //End of Comment
+ if (nvram_md5_support()) {
+ NVBAK_LOG("File_Title_Header iMd5BootNum(%d)", FileTitleInfo1.iMd5BootNum);
+ NVBAK_LOG("File_Title_Header iMd5CleanNum(%d)", FileTitleInfo1.iMd5CleanNum);
+ NVBAK_LOG("File_Title_Header iMd5ImpntNum(%d)", FileTitleInfo1.iMd5ImpntNum);
+ }
+ }
+ if (nvram_evdo_support())
+ NVBAK_LOG("File_Title_Header iViaNum(%d)", FileTitleInfo1.iViaNum);
+
+ if (nvram_platform_header_offset == 0) {
+
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)", FileTitleInfo1.iFileBufLen);
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)", FileTitleInfo1.BackupFlag);
+ }
+
+ if (nvram_platform_header_offset != 0) {
+ NVBAK_LOG("File_Title_Header iFileBufLen(%d)",
+ *((short int *) & (FileTitleInfo1.iFileBufLen) - nvram_platform_header_offset));
+ NVBAK_LOG("File_Title_Header BackupFlag(%d)",
+ *((short int *) & (FileTitleInfo1.BackupFlag) - nvram_platform_header_offset));
+ }
+
+#endif
+ if (nvram_platform_header_offset != 0) {
+ fhs = fhs - nvram_platform_header_offset * 2;
+ }
+ switch (eBackupType) {
+ case APBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APBOOT start !");
+ iFileNum = FileTitleInfo1.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APBOOT start !");
+ iFileNum = FileTitleInfo2.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APBOOT start !");
+ iFileNum = FileTitleInfo3.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APBOOT start !");
+ iFileNum = FileTitleInfo4.iApBootNum;
+ iFileTitleOffset = fhs;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APBOOT start !");
+ iFileNum = FileTitleInfo5.iApBootNum;
+ iFileTitleOffset = fhs;
+ }
+ break;
+
+ case APCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APCLN start !");
+ iFileNum = FileTitleInfo1.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APCLN start !");
+ iFileNum = FileTitleInfo2.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APCLN start !");
+ iFileNum = FileTitleInfo3.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APCLN start !");
+ iFileNum = FileTitleInfo4.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile APCLN start !");
+ iFileNum = FileTitleInfo5.iApCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum) * fis;
+ }
+ break;
+
+ case MDBOOT:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDBOOT start !");
+ iFileNum = FileTitleInfo1.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum +
+ FileTitleInfo1.iApCleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDBOOT start !");
+ iFileNum = FileTitleInfo2.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum +
+ FileTitleInfo2.iApCleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDBOOT start !");
+ iFileNum = FileTitleInfo3.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum +
+ FileTitleInfo3.iApCleanNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDBOOT start !");
+ iFileNum = FileTitleInfo4.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum +
+ FileTitleInfo4.iApCleanNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDBOOT start !");
+ iFileNum = FileTitleInfo5.iMdBootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum +
+ FileTitleInfo5.iApCleanNum) * fis;
+ }
+
+ break;
+
+ case MDCLN:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCLN start !");
+ iFileNum = FileTitleInfo1.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCLN start !");
+ iFileNum = FileTitleInfo2.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCLN start !");
+ iFileNum = FileTitleInfo3.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum) * fis;
+ } else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCLN start !");
+ iFileNum = FileTitleInfo4.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCLN start !");
+ iFileNum = FileTitleInfo5.iMdCleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum) * fis;
+ }
+ break;
+
+ case MDIMP:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDIMP start !");
+ iFileNum = FileTitleInfo1.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDIMP start !");
+ iFileNum = FileTitleInfo2.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDIMP start !");
+ iFileNum = FileTitleInfo3.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDIMP start !");
+ iFileNum = FileTitleInfo4.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDIMP start !");
+ iFileNum = FileTitleInfo5.iMdImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum) * fis;
+ }
+ break;
+
+ case MDCOR:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCOR start !");
+ iFileNum = FileTitleInfo1.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCOR start !");
+ iFileNum = FileTitleInfo2.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCOR start !");
+ iFileNum = FileTitleInfo3.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCOR start !");
+ iFileNum = FileTitleInfo4.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDCOR start !");
+ iFileNum = FileTitleInfo5.iMdCoreNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum) * fis;
+ }
+ break;
+
+ case MDDATA:
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDDATA start !");
+ iFileNum = FileTitleInfo1.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDDATA start !");
+ iFileNum = FileTitleInfo2.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDDATA start !");
+ iFileNum = FileTitleInfo3.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDDATA start !");
+ iFileNum = FileTitleInfo4.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum) * fis;
+ } else {
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile MDDATA start !");
+ iFileNum = FileTitleInfo5.iMdDataNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum) * fis;
+ }
+ break;
+
+ //Add for second modem for MT658*
+ case MD2BOOT:
+
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo1.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo2.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo3.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo4.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2BOOT start !");
+ iFileNum = FileTitleInfo5.iMd2BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum) * fis;
+ }
+ }
+ break;
+
+ case MD2CLN:
+ if (nvram_platform_header_offset == 0) {
+
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo1.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo2.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo3.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo4.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum + FileTitleInfo4.iMd2BootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2CLN start !");
+ iFileNum = FileTitleInfo5.iMd2CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum) * fis;
+ }
+ }
+ break;
+
+ case MD2IMP:
+ if (nvram_platform_header_offset == 0) {
+ if (nvram_md5_support() && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo1.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum) * fis;
+ } else if (nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo2.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum) * fis;
+ } else if (!nvram_md5_support() && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo3.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum +
+ FileTitleInfo3.iMd2CleanNum) * fis;
+ }
+
+ else if (!nvram_md5_support() && !nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo4.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo4.iApBootNum + FileTitleInfo4.iApCleanNum
+ + FileTitleInfo4.iMdBootNum + FileTitleInfo4.iMdCleanNum +
+ FileTitleInfo4.iMdImpntNum + FileTitleInfo4.iMdCoreNum +
+ FileTitleInfo4.iMdDataNum + FileTitleInfo4.iMd2BootNum +
+ FileTitleInfo4.iMd2CleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD2IMP start !");
+ iFileNum = FileTitleInfo5.iMd2ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum) * fis;
+ }
+ }
+ break;
+ //End of Comment
+
+ case MD5BOOT:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo1.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo2.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5BOOT start !");
+ iFileNum = FileTitleInfo5.iMd5BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum) * fis;
+ }
+ break;
+
+ case MD5CLN:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo1.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo2.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum +
+ FileTitleInfo2.iMd5BootNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5CLN start !");
+ iFileNum = FileTitleInfo5.iMd5CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum) * fis;
+ }
+ break;
+
+ case MD5IMP:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && !nvram_ecci_c2k_support()) {
+ if (nvram_evdo_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo1.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum + FileTitleInfo1.iMd5CleanNum) * fis;
+ } else {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo2.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo2.iApBootNum + FileTitleInfo2.iApCleanNum
+ + FileTitleInfo2.iMdBootNum + FileTitleInfo2.iMdCleanNum +
+ FileTitleInfo2.iMdImpntNum + FileTitleInfo2.iMdCoreNum +
+ FileTitleInfo2.iMdDataNum + FileTitleInfo2.iMd2BootNum +
+ FileTitleInfo2.iMd2CleanNum + FileTitleInfo2.iMd2ImpntNum +
+ FileTitleInfo2.iMd5BootNum + FileTitleInfo2.iMd5CleanNum) * fis;
+ }
+ } else if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD5IMP start !");
+ iFileNum = FileTitleInfo5.iMd5ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum) * fis;
+ }
+
+ break;
+ case VIA:
+ if (nvram_platform_header_offset == 0 && nvram_md5_support()
+ && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo1.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo1.iApBootNum + FileTitleInfo1.iApCleanNum
+ + FileTitleInfo1.iMdBootNum + FileTitleInfo1.iMdCleanNum +
+ FileTitleInfo1.iMdImpntNum + FileTitleInfo1.iMdCoreNum +
+ FileTitleInfo1.iMdDataNum + FileTitleInfo1.iMd2BootNum +
+ FileTitleInfo1.iMd2CleanNum + FileTitleInfo1.iMd2ImpntNum +
+ FileTitleInfo1.iMd5BootNum + FileTitleInfo1.iMd5CleanNum +
+ FileTitleInfo1.iMd5ImpntNum) * fis;
+ } else if (nvram_platform_header_offset == 0 && !nvram_md5_support()
+ && nvram_evdo_support() && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo3.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum + FileTitleInfo3.iMd2BootNum +
+ FileTitleInfo3.iMd2CleanNum + FileTitleInfo3.iMd2ImpntNum) * fis;
+ } else if (nvram_platform_header_offset != 0 && nvram_evdo_support()
+ && !nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles VIA start !");
+ iFileNum = FileTitleInfo3.iViaNum;
+ iFileTitleOffset = fhs + (FileTitleInfo3.iApBootNum + FileTitleInfo3.iApCleanNum
+ + FileTitleInfo3.iMdBootNum + FileTitleInfo3.iMdCleanNum +
+ FileTitleInfo3.iMdImpntNum + FileTitleInfo3.iMdCoreNum +
+ FileTitleInfo3.iMdDataNum) * fis;
+ } else
+ break;
+ break;
+
+ case MD3BOOT:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3BOOT start !");
+ iFileNum = FileTitleInfo5.iMd3BootNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum) * fis;
+ }
+ break;
+
+ case MD3CLN:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3CLN start !");
+ iFileNum = FileTitleInfo5.iMd3CleanNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum + FileTitleInfo5.iMd3BootNum) * fis;
+ }
+ break;
+
+
+ case MD3IMP:
+ if (nvram_platform_header_offset == 0 && nvram_ecci_c2k_support()) {
+ NVBAK_LOG("FileOp_RestoreFromFiles MD3IMP start !");
+ iFileNum = FileTitleInfo5.iMd3ImpntNum;
+ iFileTitleOffset = fhs + (FileTitleInfo5.iApBootNum + FileTitleInfo5.iApCleanNum
+ + FileTitleInfo5.iMdBootNum + FileTitleInfo5.iMdCleanNum +
+ FileTitleInfo5.iMdImpntNum + FileTitleInfo5.iMdCoreNum +
+ FileTitleInfo5.iMdDataNum + FileTitleInfo5.iMd2BootNum +
+ FileTitleInfo5.iMd2CleanNum + FileTitleInfo5.iMd2ImpntNum +
+ FileTitleInfo5.iMd5BootNum + FileTitleInfo5.iMd5CleanNum +
+ FileTitleInfo5.iMd5ImpntNum + FileTitleInfo5.iMd3BootNum +
+ FileTitleInfo5.iMd3CleanNum) * fis;
+ }
+ break;
+
+ case ALL:
+ break;
+ default:
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ //break;
+ }
+
+ iRet = lseek(iFileDesc_map, iFileTitleOffset, SEEK_SET);
+
+ //restore all files one by one according to the fout.txt and fTitleInfo.txt
+ //do
+ //avoid the file num of some folder is zero
+ while (iFileNum > 0 && iFileNum < MAX_FILENUM) {
+ iSize = (int)read(iFileDesc_map, FileInfo, sizeof(File_Title));
+ if ((filename == NULL) && (file_lid >= 0) && (pCfgFielTable != NULL)) {
+ if (strcmp(FileInfo->cFileName, pCfgFielTable[iRealFileLid].cFileName) != 0) {
+ --iFileNum;
+ continue;
+ }
+ } else if ((filename != NULL) && (strncmp("/nvdata", filename, 7) == 0)) {
+ NVBAK_LOG("filename+7 %s\n", filename + 7);
+ NVBAK_LOG("FileInfo->cFileName + 11 %s\n", FileInfo->cFileName + 11);
+
+ if (strcmp(FileInfo->cFileName + 11, filename + 7) != 0) { //compare string after /mnt/vendor/nvdata and /nvdata
+ --iFileNum;
+ continue;
+ }
+ } else if (filename != NULL){
+ if (strcmp(FileInfo->cFileName, filename) != 0) {
+ --iFileNum;
+ continue;
+ }
+ } else {
+ NVBAK_LOG("cFileName or filename == NULL\n");
+ }
+ *find_flag = 1;
+ iFileNum = 0;
+ NVBAK_LOG("FileInfo: %s\n", FileInfo->cFileName);
+ if ((filename == NULL) && (file_lid >= 0) && (pCfgFielTable != NULL)) {
+ filesizeintable = pCfgFielTable[iRealFileLid].i4RecNum *
+ pCfgFielTable[iRealFileLid].i4RecSize;
+ NVBAK_LOG("FileInfo: startaddr(0x%x) size(0x%x) size in table(0x%x).\n",
+ FileInfo->FielStartAddr, FileInfo->Filesize, filesizeintable);
+ if (FileInfo->Filesize != filesizeintable + 2) {
+ NVBAK_LOG("Restored file size error !");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ }
+ NVBAK_LOG("FileInfo->Filesize=%d,INT_MAX=%d\n",FileInfo->Filesize,INT_MAX);
+ if(FileInfo->Filesize <=0 || FileInfo->Filesize >=INT_MAX) {
+ NVBAK_LOG("FileInfo->Filesize overflow\n");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ buf = (char *)malloc(FileInfo->Filesize);
+
+ //read the data and write to the file
+ iRet = lseek(iFileDesc_file, FileInfo->FielStartAddr, SEEK_SET);
+ if (iRet == -1) {
+ NVBAK_LOG("lseek fail !");
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ iSize = (int)read(iFileDesc_file, buf, FileInfo->Filesize);
+ if (iSize != FileInfo->Filesize) {
+ NVBAK_LOG("read fail !iSize=%d,FileInfo->Filesize=%d\n", iSize,
+ FileInfo->Filesize);
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+
+ iFileDesc = open_file_with_dirs(FileInfo->cFileName, O_CREAT | O_TRUNC | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP );
+
+ if (INVALID_HANDLE_VALUE == iFileDesc) {
+ /* Error handling */
+ NVBAK_LOG("NVM_RestoreFromFiles_OneFile cannot create %s\n",
+ FileInfo->cFileName);
+
+ //added
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(buf);
+ free(FileInfo);
+ return false;
+ }
+ iSize = (int)write(iFileDesc, buf, FileInfo->Filesize);
+ if (iSize != FileInfo->Filesize) {
+ NVBAK_LOG("write fail !iSize=%d,FileInfo->Filesize=%d\n", iSize,
+ FileInfo->Filesize);
+ close(iFileDesc);
+ free(buf);
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ close(iFileDesc);
+ free(buf);
+ if ((filename == NULL) && (file_lid >= 0)) {
+
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(file_lid, DECODE)) {
+ NVRAM_LOG("Dnc fail!!!\n");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+#endif
+
+#if 0
+ if (NVM_ProtectDataFile(file_lid, true) == 1) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile ProtectDataFile Success!!\n");
+ } else {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile ProtectDataFile SET Fail!!\n");
+ return false;
+ }
+#endif
+ if (NVM_CheckFile(FileInfo->cFileName)
+ && (NVM_CheckFileSize(iRealFileLid, pCfgFielTable) != -1)) {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile ProtectDataFile Success!!\n");
+ } else {
+ NVRAM_LOG("NVM_RestoreFromFiles_OneFile ProtectDataFile Fail!!\n");
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return false;
+ }
+ }
+ bRet = true;
+ break;
+ }
+
+ close(iFileDesc_map);
+ close(iFileDesc_file);
+ free(FileInfo);
+ return bRet;
+}
+
+bool NVM_CheckData_OneFile(int file_lid, const char * filename) {
+ bool bRet = false;
+ int eBackupType;
+ unsigned int ulSavedCheckSum;
+ unsigned int ulCheckSum;
+ struct stat st;
+ unsigned int iFileSize;
+ bool find_flag = 0;
+ int iFileMask[ALL];
+ memset(iFileMask, 0, (ALL * (sizeof(int))));
+ if (!nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ iFileMask[13] = 1;
+ } else if (!nvram_md5_support() && nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[10] = 1;
+ iFileMask[11] = 1;
+ iFileMask[12] = 1;
+ } else if (nvram_md5_support() && !nvram_evdo_support()) {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ iFileMask[13] = 1;
+ } else {
+ iFileMask[5] = 1;
+ iFileMask[6] = 1;
+ }
+ if (!nvram_ecci_c2k_support()) {
+ iFileMask[14] = 1;
+ iFileMask[15] = 1;
+ iFileMask[16] = 1;
+ }
+
+ NVBAK_LOG("[NVM_CheckData_OneFile] start !");
+
+ if (!NVM_GetCheckSum()) {
+ NVBAK_LOG("[NVM_CheckData_OneFile] GetCheckSum Fail !");
+ return false;
+ }
+ ulSavedCheckSum = stBackupFileInfo.ulCheckSum;
+ ulCheckSum = NVM_ComputeCheckSum();
+ NVBAK_LOG("ulCheckSun:%u\n", ulCheckSum);
+ if (stat(g_pcNVM_AllFile, &st) < 0) {
+ NVBAK_LOG("Error NVM_CheckData_OneFile stat \n");
+ return false;
+ }
+ iFileSize = st.st_size;
+ NVBAK_LOG("iFileSize:%d\n", iFileSize);
+ ulCheckSum ^= iFileSize;
+
+ NVBAK_LOG("NVM_CheckData_OneFile:%x,%x", ulSavedCheckSum, ulCheckSum);
+ if (!NVM_CompareCheckSum(ulSavedCheckSum, ulCheckSum)) {
+ NVBAK_LOG("check sum not match!");
+ return false;
+ }
+
+ for (eBackupType = APBOOT; eBackupType < ALL; eBackupType++) {
+ if (iFileMask[eBackupType] == 1)
+ continue;
+ if (find_flag == 0)
+ bRet = NVM_RestoreFromFiles_OneFile(eBackupType, file_lid, filename,
+ &find_flag);
+ else
+ break;
+ }
+
+ NVBAK_LOG("[NVM_CheckData_OneFile] end !");
+ return bRet;
+}
+
+bool NVM_RestoreFromBinRegion_OneFile(int file_lid, const char * filename) {
+ int iFileDesc_file, iFileDesc_map, fd, iResult, iBlockNum, iFileDesc_backupflag;
+ unsigned int iMapFileSize, iDatFileSize, iBlockSize, iPartitionSize,
+ iAPBackupFileNum,iWriteSize;
+// int BinRegionBlockTotalNum,NvRamBlockNum,forDMBlockNum=2;
+ unsigned short iMDBackupFileNum;
+ bool bRet = true;
+ char cMtdDevName[128] = {0};
+ char *tempBuffer = NULL;
+ char *tempBitmap1 = NULL;
+ char *tempBitmap2 = NULL;
+ int i, j, pos = 0, flag = 0;
+ bool bSuccessFound = false;
+ struct mtd_info_user info;
+ NVBAK_LOG("[NVRAM]:NVM_RestoreFromBinRegion_OneFile\n");
+ //int iBackup_Partition=get_partition_numb("nvram");
+
+ (void)(iFileDesc_backupflag);
+
+ //fix nvram layout issue , reassgined block numerbers by different platform
+ if (NVM_Init() < 0) {
+ NVBAK_LOG("[NVRAM]:NVM_RestoreFromBinRegion_OneFile--NVM_Init fail !!!\n");
+ return false;
+ }
+
+ if ((file_lid < 0) && (filename == NULL)) {
+ NVBAK_LOG("[NVRAM]:NVM_RestoreFromBinRegion_OneFile bad arg\n");
+ return false;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_NVRAM_BACKUP_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_BACKUP_DEVICE);
+ NVBAK_LOG("[NVRAM]:cMtdDevName:%s\n", cMtdDevName);
+
+ if (!NVM_GetDeviceInfo(cMtdDevName, &info)) {
+ NVBAK_LOG("[NVRAM]:NVM_RestoreFromBinRegion_OneFile get device info fail!!!\n");
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVBAK_LOG("[NVRAM]:mtd open error %s\r\n", (char*)strerror(errno));
+ return false;
+ }
+ iBlockSize = info.erasesize;
+ iPartitionSize = info.size;
+ iWriteSize = info.writesize;
+
+ if (nvram_platform_layout_version == 0)
+ BinRegionBlockTotalNum = info.size / iBlockSize - nvram_platform_log_block -
+ nvram_platform_resv_block;
+ else if (nvram_platform_layout_version == 1)
+ BinRegionBlockTotalNum = info.size / iBlockSize;
+ else {
+ NVBAK_LOG("[NVRAM]: invalid nvram layout version %d\r\n",
+ nvram_platform_layout_version);
+ close(fd);
+ return false;
+ }
+
+ NvRamBlockNum = BinRegionBlockTotalNum - nvram_platform_DM_block;
+
+ tempBuffer = (char*)malloc(iBlockSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0 || read(fd, tempBuffer, iBlockSize) != iBlockSize) {
+ NVBAK_LOG("[NVRAM]: lseek or read error. (errno=%d)", errno);
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+
+ iMapFileSize = *((unsigned int*)tempBuffer); // get the mapfile
+ iDatFileSize = *((unsigned int*)(tempBuffer + 4));
+ NVBAK_LOG("[NVRAM]: map file:%d,dat file:%d\n", iMapFileSize, iDatFileSize);
+ if(iMapFileSize == 0 || iMapFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:map file size error\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ if(iDatFileSize == 0 || iDatFileSize == 0xFFFFFFFF) {
+ NVBAK_LOG("[NVRAM]:data file size error\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ unsigned int iMemSize;
+ int iReservePos = 0;
+ int iReserveBlockCount = 0;
+ if ((iMapFileSize + 3 * sizeof(unsigned int)) % iWriteSize != 0)
+ iMemSize = (((iMapFileSize + 3 * sizeof(unsigned int)) / iWriteSize) + 1) *
+ iWriteSize;
+ else
+ iMemSize = iMapFileSize + 3 * sizeof(unsigned
+ int); //mapfile size, datfile size, cleanboot fla
+ NVBAK_LOG("[NVRAM Restore - heli]:map file size:%d\n", iMemSize);
+
+ if ( iMemSize > iBlockSize ) { // > 180KB
+ iReservePos = 1;
+ iReserveBlockCount = 2;
+ } else { // < 128KB
+ iReservePos = 0;
+ iReserveBlockCount = 1;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ tempBuffer = (char*)malloc(iBlockSize *
+ iReserveBlockCount); // for 128KB and 256KB
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ return false;
+ }
+ iBlockNum = NvRamBlockNum;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+
+ tempBitmap1 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap1 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap1 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ return false;
+ }
+ tempBitmap2 = (char *)malloc(NvRamBlockNum);
+ if (tempBitmap2 == NULL) {
+ NVBAK_LOG("[NVRAM]:malloc tempBitmap2 Fail!!\r\n");
+ free(tempBuffer);
+ close(fd);
+ free(tempBitmap1);
+ return false;
+ }
+
+ int iBitmapFlag = 0;
+ while (iBlockNum > 0) {
+ flag = 0;
+ iBlockNum--;
+ NVBAK_LOG("[NVRAM]:iBlockNum:%d\n", iBlockNum);
+ if (lseek(fd, (iBlockNum - iReservePos)*iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer, iBlockSize);
+ NVBAK_LOG("[NVRAM]:read:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ memcpy(tempBitmap1, tempBuffer, NvRamBlockNum * sizeof(char));
+ memcpy(tempBitmap2, tempBuffer + NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:1i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(tempBitmap2, tempBuffer + 2 * NvRamBlockNum * sizeof(char),
+ NvRamBlockNum * sizeof(char));
+ for (i = 0; i < NvRamBlockNum; i++) {
+ if (tempBitmap1[i] != tempBitmap2[i]) {
+ NVBAK_LOG("[NVRAM]:2i:%d,1:%d,2:%d\n", i, tempBitmap1[i], tempBitmap2[i]);
+ flag = 1;
+ break;
+ }
+ }
+ if (flag)
+ continue;
+ memcpy(&iBitmapFlag, tempBuffer + 3 * NvRamBlockNum * sizeof(char),
+ sizeof(unsigned int));
+ if (iBitmapFlag != (int)BitmapFlag) {
+ NVBAK_LOG("[NVRAM]:iBitMapFlag:%d,BitMapFlag:%d\n", iBitmapFlag, BitmapFlag);
+ continue;
+ }
+ bSuccessFound = true;
+ break;
+ }
+ if (!bSuccessFound) {
+ NVBAK_LOG("[NVRAM]:can not find bad block bit map\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ #if 0
+ for (i = 0; i < NvRamBlockNum; i++) {
+ NVBAK_LOG("[NVRAM_Bitmap]:Block%d,%d\n", i, tempBitmap1[i]);
+ }
+ #endif
+ for (i = 0; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0) {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:can not find map file\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ if (lseek(fd, pos * iBlockSize, SEEK_SET) < 0) {
+ NVBAK_LOG("[NVRAM]: lseek error. (errno=%d)", errno);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iResult = read(fd, tempBuffer,
+ iBlockSize * iReserveBlockCount); // if mapfile > 128KB read 2*128KB
+ NVBAK_LOG("[NVRAM]:map file read size:%d\n", iResult);
+ if (iResult <= 0) {
+ NVBAK_LOG("[NVRAM]:read size error\r\n");
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iMapFileSize = *((unsigned int*)tempBuffer);
+ iDatFileSize = *((unsigned int*)(tempBuffer + 4));
+ iAPBackupFileNum = *((unsigned int*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize));
+ iMDBackupFileNum = *((unsigned short*)(tempBuffer + 3 * sizeof(
+ unsigned int) + iMapFileSize + sizeof(unsigned int)));
+ NVBAK_LOG("[NVRAM]: map file:%d,dat file:%d\n", iMapFileSize, iDatFileSize);
+ /* NVBAK_LOG("[NVRAM]: AP backup file num:%d,MD backup file num:%d\n",iAPBackupFileNum,iMDBackupFileNum);
+ if(iAPBackupFileNum != 0 ){
+ iFileDesc_backupflag = open(g_pcNVM_BackFlag , O_TRUNC|O_CREAT|O_RDWR, S_IRUSR|S_IWUSR| S_IRGRP |S_IWGRP);
+ if(INVALID_HANDLE_VALUE == iFileDesc_backupflag)
+ {
+ NVBAK_LOG("[NVRAM]: cannot open backup file num data\n");
+ close(iFileDesc_backupflag);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ result=write(iFileDesc_backupflag,&iAPBackupFileNum,sizeof(unsigned int));
+ if(result!=(int)sizeof(unsigned int))
+ {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_backupflag);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }*/
+ iFileDesc_file = open(g_pcNVM_AllFile , O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ iFileDesc_map = open(g_pcNVM_AllMap, O_TRUNC | O_CREAT | O_RDWR,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_file) {
+ NVBAK_LOG("[NVRAM]: cannot open file data\n");
+ if (iFileDesc_map != INVALID_HANDLE_VALUE)
+ close(iFileDesc_map);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ if (INVALID_HANDLE_VALUE == iFileDesc_map) {
+ NVBAK_LOG("[NVRAM]: cannot open map data\n");
+ close(iFileDesc_file);
+ close(fd);
+ free(tempBuffer);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = write(iFileDesc_map, tempBuffer + 3 * sizeof(unsigned int),
+ iMapFileSize);
+ if (iResult != (int)iMapFileSize) {
+ NVBAK_LOG("[NVRAM]:map file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ free(tempBuffer);
+ tempBuffer = NULL;
+ if (iDatFileSize % iBlockSize != 0)
+ tempBuffer = (char*)malloc((iDatFileSize / iBlockSize + 1) * iBlockSize);
+ else
+ tempBuffer = (char*)malloc(iDatFileSize);
+ if (tempBuffer == NULL) {
+ NVBAK_LOG("[NVRAM]:memory malloc error\r\n");
+ close(fd);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ int iFreeBlockNum = 0;
+ for (i = pos + 1 + iReservePos; i < iBlockNum;
+ i++) { // heli if > 126KB need pos + 2
+ if(tempBitmap1[i]==0)
+ {
+ pos = i;
+ break;
+ }
+ }
+ if (i == iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ } else {
+ for (; i < iBlockNum; i++) {
+ if (tempBitmap1[i] == 0)
+ iFreeBlockNum++;
+ }
+ if ((iFreeBlockNum * iBlockSize) < (iDatFileSize)) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks for read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ int iReadTime = 0;
+ if (iDatFileSize % iBlockSize != 0)
+ iReadTime = iDatFileSize / iBlockSize + 1;
+ else
+ iReadTime = iDatFileSize / iBlockSize;
+ int iAlreadyRead = 0;
+ NVBAK_LOG("[NVRAM]:dat file read begin:%d\n", pos);
+ for (i = 0; i < iReadTime; i++) {
+ iResult = lseek(fd, pos * iBlockSize, SEEK_SET);
+ if (iResult != pos * (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:binregion lseek error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+
+ iResult = read(fd, tempBuffer + i * iBlockSize, iBlockSize);
+ NVBAK_LOG("[NVRAM]:dat file read size:%d\n", iResult);
+ if (iResult != (int)iBlockSize) {
+ NVBAK_LOG("[NVRAM]:bin region read error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ iAlreadyRead++;
+ if (iAlreadyRead == iReadTime)
+ break;
+ for (j = pos + 1; j < iBlockNum; j++) {
+ if (tempBitmap1[j] == 0) {
+ pos = j;
+ break;
+ }
+ }
+ if (j >= iBlockNum) {
+ NVBAK_LOG("[NVRAM]:there are not enough good blocks to read nvram data file\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ }
+ NVBAK_LOG("[NVRAM]:dat file read end:%d\n", pos);
+ iResult = write(iFileDesc_file, tempBuffer, iDatFileSize);
+ if (iResult != (int)iDatFileSize) {
+ NVBAK_LOG("[NVRAM]:dat file write error\r\n");
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+ return false;
+ }
+ close(fd);
+ free(tempBuffer);
+ close(iFileDesc_file);
+ close(iFileDesc_map);
+ free(tempBitmap1);
+ free(tempBitmap2);
+
+
+ bRet = NVM_CheckData_OneFile(file_lid, filename);
+ return bRet;
+
+}
+
+/*******************************************************************************
+//FUNCTION:
+//NVM_ComputeCheckNo
+//DESCRIPTION:
+// this function is called to compute CheckNo of file in NvRam
+//PARAMETERS:
+// filepath:[IN] the path name of the file
+// ContentSize:[IN] the content size of the file
+// CheckNo_flag:[IN] the flag of CheckNo in the file
+//RETURN VALUE:
+// CheckNo
+//DEPENDENCY:
+// NVM_CheckFileSize must be called
+//GLOBALS AFFECTED:
+// None
+********************************************************************************/
+char NVM_ComputeCheckNo(const char * filepath, char *pCheckNo_flag,
+ bool IS_OLD_FILE) {
+ int iFileDesc = 0;
+ unsigned int i = 0, ilooptimes = 0;
+ bool flag = 0;
+ char buf, cCheckNo;
+ struct stat st;
+ if (filepath == NULL)
+ {
+ NVRAM_LOG("NVM_ComputeCheckNo: filepath == NULL!!\n");
+ return 0;
+ }
+ if (stat(filepath, &st) < 0) {
+ NVRAM_LOG("Error NVM_ComputeCheckNo stat!\n");
+ *pCheckNo_flag = 0xFF;
+ return 0;
+ }
+ iFileDesc = open(filepath, O_RDONLY);
+ if (iFileDesc == -1) { //if file doesn't exist
+ NVRAM_LOG("NVM_ComputeCheckNo:Open file failed!");
+ *pCheckNo_flag = 0xFF;
+ return 0;
+ }
+ memset(&buf, 0, sizeof(char));
+ memset(&cCheckNo, 0, sizeof(char));
+ if (IS_OLD_FILE)
+ ilooptimes = (st.st_size - 2 * sizeof(char)) / sizeof(char);
+ else
+ ilooptimes = st.st_size / sizeof(char);
+ for (i = 0; i < ilooptimes; ++i) {
+ if (sizeof(char) == read(iFileDesc, &buf, sizeof(char))) {
+ if (flag) {
+ cCheckNo ^= buf;
+ flag = false;
+ } else {
+ cCheckNo += buf;
+ flag = true;
+ }
+ } else {
+ NVRAM_LOG("NVM_ComputeCheckNo:Read file failed!");
+ *pCheckNo_flag = 0xFF;
+ close(iFileDesc);
+ return 0;
+ }
+
+ }
+ close(iFileDesc);
+ return cCheckNo;
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFileSize
+//DESCRIPTION:
+// this function is called to Check the size of the file in NvRam contain the check bytes.
+//
+//PARAMETERS:
+// file_lid:[IN] the lid of the file
+//
+//RETURN VALUE:
+// true is exist, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+int NVM_CheckFileSize(int iRealFileLid, const TCFG_FILE *pCfgFielTable) {
+ struct stat st;
+ if (stat(pCfgFielTable[iRealFileLid].cFileName, &st) < 0) {
+ NVRAM_LOG("NVM_CheckFileSize:stat Fail!!!\n");
+ return -1;
+ }
+
+ NVRAM_LOG("NVM_CheckFileSize:stat_size:%lld,size in table:%d\n", st.st_size,
+ pCfgFielTable[iRealFileLid].i4RecNum * pCfgFielTable[iRealFileLid].i4RecSize);
+ switch (pCfgFielTable[iRealFileLid].stDefualType) {
+ case DEFAULT_ZERO:
+ case DEFAULT_FF: // when the type of default value is DEFAULT_ZERO/DEFAULT_FF
+ case SIGNLE_DEFUALT_REC:
+ if (pCfgFielTable[iRealFileLid].i4RecNum * pCfgFielTable[iRealFileLid].i4RecSize
+ == st.st_size)
+ return 0;
+ else if (pCfgFielTable[iRealFileLid].i4RecNum *
+ pCfgFielTable[iRealFileLid].i4RecSize == st.st_size - 2 * sizeof(char))
+ return 1;
+ else {
+ NVRAM_LOG("NVM_CheckFileSize:File size not match!!!\n");
+ return -1;
+ }
+ break;
+
+ case MULTIPLE_DEFUALT_REC: // when the type of default value is MULTIPLE_DEFUALT_REC, we use the defined default value of one record to generate file
+ if (pCfgFielTable[iRealFileLid].i4RecNum * pCfgFielTable[iRealFileLid].i4RecNum
+ * pCfgFielTable[iRealFileLid].i4RecSize == st.st_size)
+ return 0;
+ else if (pCfgFielTable[iRealFileLid].i4RecNum *
+ pCfgFielTable[iRealFileLid].i4RecNum * pCfgFielTable[iRealFileLid].i4RecSize ==
+ st.st_size - 2 * sizeof(char))
+ return 1;
+ else {
+ NVRAM_LOG("NVM_CheckFileSize:File size not match!!!\n");
+ return -1;
+ }
+ break;
+ default:
+ break;
+
+ }
+ return -1;
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_SetCheckNo
+//DESCRIPTION:
+// this function is called to set the CheckNo of the file in NvRam.
+//
+//PARAMETERS:
+// filepath:[IN] the path name of the file
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// NVM_CheckFileSize must be called
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_SetCheckNo(const char *filepath, bool isOldFile) {
+ char cCheckNo = 0;
+ char cCheckFlag = 0;
+ int iFileDesc;
+ char cFlagValue = 0xAA;
+
+ cCheckNo = NVM_ComputeCheckNo(filepath, &cCheckFlag, isOldFile);
+ NVRAM_LOG("NVM_SetCheckNo: CheckNo:%x\n", cCheckNo);
+ NVRAM_LOG("NVM_SetCheckNo: CheckFlag:%x\n", cCheckFlag);
+ if (cCheckFlag == 0xFF) {
+ NVRAM_LOG("NVM_SetCheckNo: ComputeCheckNoFail!!\n");
+ return 0;
+ }
+ iFileDesc = open(filepath, O_RDWR | O_SYNC);
+ if (iFileDesc == -1) { //if file doesn't exist
+ NVRAM_LOG("NVM_SetCheckNo:Open file failed!");
+ return 0;
+ }
+ if (isOldFile) {
+ if (lseek(iFileDesc, -2 * (int)sizeof(char), SEEK_END) < 0) {
+ NVRAM_LOG("NVM_SetCheckNo: (OldFile) lseek Fail!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+ } else {
+ if (lseek(iFileDesc, 0, SEEK_END) < 0) {
+ NVRAM_LOG("NVM_SetCheckNo: (Newfile) lseek Fail!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+ }
+ if (sizeof(char) != write(iFileDesc, &cFlagValue, sizeof(char))) {
+ NVRAM_LOG("NVM_SetCheckNo: write Check flag Fail!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+ if (sizeof(char) == write(iFileDesc, &cCheckNo, sizeof(char))) {
+ NVRAM_LOG("NVM_SetCheckNo: CheckNo generate successfully!\n");
+ close(iFileDesc);
+ return 1;
+ } else {
+ NVRAM_LOG("NVM_SetCheckNo: CheckNo generate Fail!\n");
+ close(iFileDesc);
+ return 0;
+ }
+}
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFile
+//DESCRIPTION:
+// this function is called to Check file in NvRam correct.
+//
+//PARAMETERS:
+// filepath:[IN] the path name of the file
+//
+//RETURN VALUE:
+// true is correct (1), otherwise is fail(0)
+//
+//DEPENDENCY:
+// NVM_CheckFileSize must be called
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckFile(const char * filepath) {
+ char cCheckNo = 0;
+ char cCheckNo_file[2];
+ char cCheckFlag = 0;
+ int iFileDesc;
+ char cFlagValue = 0xAA;
+ bool ISOLDFILE = true;
+ if (filepath == NULL)
+ {
+ NVRAM_LOG("NVM_CheckFile: filepath == NULL!!\n");
+ return 0;
+ }
+ memset(cCheckNo_file, 0, 2 * sizeof(char));
+
+ cCheckNo = NVM_ComputeCheckNo(filepath, &cCheckFlag, ISOLDFILE);
+ if (cCheckFlag == 0xFF) {
+ NVRAM_LOG("NVM_CheckFile: ComputeCheckNo Fail!!\n");
+ return 0;
+ }
+ iFileDesc = open(filepath, O_RDONLY);
+ if (iFileDesc == -1) { //if file doesn't exist
+ NVRAM_LOG("NVM_CheckFile:Open file failed!");
+ return 0;
+ }
+ if (lseek(iFileDesc, -2 * sizeof(char), SEEK_END) < 0) {
+ NVRAM_LOG("NVM_CheckFile: lseek Fail!!\n");
+ close(iFileDesc);
+ return 0;
+ } else {
+ if (2 * sizeof(char) == read(iFileDesc, cCheckNo_file, 2 * sizeof(char)))
+ if (cCheckNo_file[0] == cFlagValue) {
+ if (cCheckNo_file[1] == cCheckNo) {
+ NVRAM_LOG("NVM_CheckFile: File is correct!\n");
+ close(iFileDesc);
+ return 1;
+
+ } else {
+ NVRAM_LOG("NVM_CheckFile: File has been modified!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+ } else {
+ NVRAM_LOG("NVM_CheckFile: Check flag in File has been destroyed!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+ else {
+ NVRAM_LOG("NVM_CheckFile: Read file Fail!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+
+ }
+
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_ProtectUserData
+//DESCRIPTION:
+// this function is called to Protect User's Data.
+//
+//PARAMETERS:
+// filepath:[IN] the path name of the file
+//
+//RETURN VALUE:
+// true is correct (1), otherwise is fail(0)
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+//int loop_Reset_Protect = 0;
+pthread_mutex_t recoverlock = PTHREAD_MUTEX_INITIALIZER;
+
+int NVM_ProtectDataFile(int file_lid, bool Setflag) {
+ int CheckFileSize_flag = 0;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ bool restore_flag = false;
+ int i = 0, j = 0;
+ char filename[MAX_NAMESIZE];
+ memset(filename, 0, MAX_NAMESIZE);
+
+ NVRAM_LOG("NVM_ProtectDataFile : %d ++\n", file_lid);
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ if (!NVM_CheckVerFile(true)) {
+ NVM_GenerateFileVer(true);
+ }
+
+ //get the file informatin table.
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_ProtectDataFile: NVM_GetCfgFileTable Fail!!!\n");
+ return -1;
+ }
+
+
+ if (file_lid == iFileVerInfoLID) {
+ if (!NVM_GenerateFileVer(true)) {
+ return -1;
+ }
+ NVRAM_LOG("NVM_ProtectDataFile:Wrong file_lid Fail!!!\n");
+ return -1;
+ }
+
+ if (file_lid >= iCustomBeginLID) {
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+
+ CheckFileSize_flag = NVM_CheckFileSize(iRealFileLid, pCfgFielTable);
+ //NVRAM_LOG("NVM_ProtectUserData\n");
+ if (CheckFileSize_flag == -1) {
+ NVRAM_LOG("NVM_ProtectUserData:File Size Error!!!\n");
+ goto restore;
+ }
+ if (Setflag || CheckFileSize_flag == 0) {
+ NVRAM_LOG("NVM_ProtectUserData:Set Check Num\n");
+ if (!NVM_SetCheckNo(pCfgFielTable[iRealFileLid].cFileName,
+ CheckFileSize_flag)) {
+ NVRAM_LOG("NVM_ProtectUserData:Set Check Num Fail!!!\n");
+ return 0;
+ } else {
+ NVRAM_LOG("NVM_ProtectUserData:Set Check Num Success\n");
+ return 1;
+ }
+
+ }
+ if (!Setflag) {
+ //NVRAM_LOG("NVM_ProtectUserData:Check File\n");
+ if (!NVM_CheckFile(pCfgFielTable[iRealFileLid].cFileName)) {
+ NVRAM_LOG("NVM_ProtectUserData:Check Failed!!!\n");
+ goto restore;
+ } else {
+ NVRAM_LOG("NVM_ProtectUserData:Check Success\n");
+ return 1;
+ }
+ }
+
+restore:
+ for (j = strlen(pCfgFielTable[iRealFileLid].cFileName) - 1; j >= 0; j--)
+ if (pCfgFielTable[iRealFileLid].cFileName[j] == '/') {
+ //strcpy(filename,pCfgFielTable[iRealFileLid].cFileName+j+1);
+ snprintf(filename, sizeof(filename),"%s", (char *)(pCfgFielTable[iRealFileLid].cFileName+j+1));
+ NVRAM_LOG("filename:%s\n", filename);
+ break;
+ }
+ for (i = 0; i < (int)g_Backup_File_Count; i++) {
+ if (0 == strcmp(filename, aBackupToBinRegion[i].cFileName)
+ && (unsigned int)file_lid == aBackupToBinRegion[i].iLID) {
+ restore_flag = true;
+ break;
+ }
+ }
+ NVRAM_LOG("NVM_ProtectUserData: Restore or Reset!\n");
+ pthread_mutex_lock(&recoverlock);
+ if (!restore_flag || (restore_flag
+ && !NVM_RestoreFromBinRegion_OneFile(file_lid, NULL))) {
+ pthread_mutex_unlock(&recoverlock);
+ if (restore_flag)
+ NVRAM_LOG("NVM_ProtectUserData Restore Fail! Reset!!\n");
+ else
+ NVRAM_LOG("NVM_ProtectUserData Reset\n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ NVRAM_LOG("NVM_ProtectUserData Reset Fail!!\n");
+ return 0;
+ } else {
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(file_lid, DECODE)) {
+ NVRAM_LOG("Dec fail!!!\n");
+ return false;
+ }
+#endif
+ NVRAM_LOG("NVM_ProtectUserData Reset Success\n");
+ return 1;
+ }
+ } else {
+ pthread_mutex_unlock(&recoverlock);
+ NVRAM_LOG("NVM_ProtectUserData Restore Success\n");
+ return 1;
+ }
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_ResetFileToDefault
+//DESCRIPTION:
+// this function is called to reset a NvRam to default value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+extern FileName aPerformance[];
+extern const unsigned int g_Performance_File_Count;
+bool NVM_ResetFileToDefault(int file_lid) {
+ int iFileDesc;
+ char *databuf = NULL;
+ int i = 0;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ int i4RecNum, i4RecSize;
+
+ NVRAM_LOG("NVM_ResetFileToDefault : %d ++\n", file_lid);
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ if (!NVM_CheckVerFile(true)) {
+ if (false == NVM_GenerateFileVer(true)) {
+ NVRAM_LOG("GenerateFileVer Fail!\n");
+ return false;
+ }
+ }
+
+ //get the file informatin table.
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!!\n");
+ return false;
+ }
+
+ // if the file lid is version file,
+ // just generate it directly by call NVM_GenerateFileVer(...)
+ //if (file_lid == AP_CFG_FILE_VER_INFO_LID)
+ if (file_lid == iFileVerInfoLID) {
+ if (!NVM_GenerateFileVer(true)) {
+ return false;
+ }
+ return true;
+ }
+
+ // calculate the offset lid in the file inforamtion table.
+ // because of custom's lid is from AP_CFG_CUSTOM_BEGIN_LID,
+ // so the offset(iRealFileLid) lid is file_lid - AP_CFG_CUSTOM_BEGIN_LID*/
+ //if (file_lid >= AP_CFG_CUSTOM_BEGIN_LID) {
+ if (file_lid >= iCustomBeginLID) {
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+
+ switch (pCfgFielTable[iRealFileLid].stDefualType) {
+ case DEFAULT_ZERO:
+ case DEFAULT_FF: // when the type of default value is DEFAULT_ZERO/DEFAULT_FF, we don't care the default vlaue
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (iFileDesc == -1) {
+ iFileDesc = open_file_with_dirs(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ NVRAM_LOG("Create the dir path of %s\n", pCfgFielTable[iRealFileLid].cFileName);
+ }
+
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_ResetFileToDefault can't open file %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ return false;
+ }
+
+ i4RecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ i4RecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+
+ databuf = (char*)malloc(i4RecSize * i4RecNum);
+ if (databuf == NULL) {
+ NVRAM_LOG("malloc databuf failed!\n");
+ close(iFileDesc);
+ return false;
+ }
+
+ if (pCfgFielTable[iRealFileLid].stDefualType == DEFAULT_ZERO) {
+ memset(databuf, 0, i4RecSize * i4RecNum);
+ } else {
+ memset(databuf, 0xff, i4RecSize * i4RecNum);
+ }
+ write(iFileDesc, databuf, i4RecSize * i4RecNum);
+
+ if (databuf != NULL) {
+ free(databuf);
+ }
+
+ close(iFileDesc);
+ break;
+
+ case SIGNLE_DEFUALT_REC: // when the type of default value is SIGNLE_DEFUALT_REC, we use the defined default vlaue to generate file
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (iFileDesc == -1) {
+ iFileDesc = open_file_with_dirs(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ NVRAM_LOG("Create the dir path of %s\n", pCfgFielTable[iRealFileLid].cFileName);
+ }
+
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_ResetFileToDefault can't open file %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ return false;
+ }
+
+ i4RecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ i4RecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+
+ write(iFileDesc, pCfgFielTable[iRealFileLid].pDefualtVaule,
+ i4RecSize * i4RecNum);
+ close(iFileDesc);
+ break;
+
+ case MULTIPLE_DEFUALT_REC: // when the type of default value is MULTIPLE_DEFUALT_REC, we use the defined default value of one record to generate file
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_TRUNC | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+
+ if (iFileDesc == -1) {
+ iFileDesc = open_file_with_dirs(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ NVRAM_LOG("Create the dir path of %s\n", pCfgFielTable[iRealFileLid].cFileName);
+ }
+
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_ResetFileToDefault can't open file %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ return false;
+ }
+
+ if ((pCfgFielTable[iRealFileLid].pDefualtVaule == NULL)
+ || (pCfgFielTable[iRealFileLid].i4RecNum < 2)) {
+
+ NVRAM_LOG("NVM_ResetFileToDefault Mulitple para is error \n");
+ close(iFileDesc);
+ return false;
+ }
+
+ i4RecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ i4RecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+
+ //use one record to generate all record value
+ for (i = 0; i < i4RecNum; i++) {
+ write(iFileDesc, pCfgFielTable[iRealFileLid].pDefualtVaule,
+ i4RecSize * i4RecNum);
+ }
+
+ close(iFileDesc);
+ break;
+
+ default:
+ break;
+
+ }
+
+ NVM_UpdateFileVerNo(file_lid, VerUpdate);
+ unsigned int index = 0;
+ bool maskflag = 0;
+ for (index = 0; index < g_Performance_File_Count; index++) {
+ if ((unsigned int)file_lid == aPerformance[index].iLID) {
+ maskflag = 1;
+ break;
+ }
+ }
+ if (maskflag == 0) {
+#if 0
+ if (NVM_ProtectDataFile(file_lid, Setflag) == 1) {
+ NVRAM_LOG("NVM_ResetFileToDefault ProtectDataFile Success!!\n");
+ } else {
+ NVRAM_LOG("NVM_ResetFileToDefault ProtectDataFile SET Fail!!\n");
+ return false;
+ }
+
+#endif
+ NVRAM_LOG("NVM_ResetFileToDefault :Set Check Num\n");
+ if (!NVM_SetCheckNo(pCfgFielTable[iRealFileLid].cFileName, false)) {
+ NVRAM_LOG("NVM_ResetFileToDefault :Set Check Num Fail!!!\n");
+ return false;
+ } else {
+ NVRAM_LOG("NVM_ResetFileToDefault :Set Check Num Success\n");
+ }
+ NVRAM_LOG("NVM_ResetFileToDefault Success!!\n");
+ }
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(file_lid, ENCODE)) {
+ NVRAM_LOG("Enc fail!!!\n");
+ return false;
+ }
+#endif
+ NVRAM_LOG("NVM_ResetFileToDefault : %d --\n", file_lid);
+ return true;
+}
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CmpFileVerNo
+//DESCRIPTION:
+// this function is called to compare file version between FAT2 and default version.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// true is same, otherwise is not same
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CmpFileVerNo(int file_lid) {
+ int iFileDesc;
+ char cFbyte[FILEVERLENGTH] = {0, 0, 0, 0};
+ int i = 0, iResult;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ char tempstr[FILENAMELENGTH]={0};
+ char tempstr1[FILENAMELENGTH]={0};
+ bool bIsNewVerInfo;
+
+ NVRAM_LOG("NVM_CmpFileVerNo %d \n" , file_lid);
+ //get the file informatin table. if the file lid is version file, just generate it directly by call GenerateFileVer
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!!\n");
+ return false;
+ }
+
+ //if (file_lid >= AP_CFG_CUSTOM_BEGIN_LID) {
+ if (file_lid >= iCustomBeginLID) {
+ //iRealFileLid = file_lid - AP_CFG_CUSTOM_BEGIN_LID;
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+ int iStrLen;
+ iStrLen = strlen(pCfgFielTable[iRealFileLid].cFileName);
+ for (i = iStrLen; i >= 0; i--) {
+ if (pCfgFielTable[iRealFileLid].cFileName[i] == '/') {
+ //strcpy(tempstr1,pCfgFielTable[iRealFileLid].cFileName+i+1);//get the target name
+ snprintf(tempstr1, sizeof(tempstr1),"%s", pCfgFielTable[iRealFileLid].cFileName+i+1);
+ break;
+ }
+ }
+ if (i < 0) {
+ NVRAM_LOG("Path parse Fail!!!\n");
+ return false;
+ }
+
+#if 1
+ //NVRAM_LOG("Check if FILE_VER exists before openning it!\n");
+ if (!NVM_CheckVerFile(true)) {
+ if (false == NVM_GenerateFileVer(true)) {
+ NVRAM_LOG("GenerateFileVer Fail!\n");
+ return false;
+ }
+ }
+#endif
+
+ //compare the file version
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDONLY);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo Open2 version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ return false;
+ }
+ iResult = read(iFileDesc,tempstr,FILENAMELENGTH-1);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, strVerInfo)) {
+ //NVRAM_LOG("New version info file\n");
+ bIsNewVerInfo = true;
+ } else {
+ //NVRAM_LOG("Old version info file\n");
+ bIsNewVerInfo = false;
+ }
+ if (bIsNewVerInfo) {
+ memset(tempstr, 0, FILENAMELENGTH);
+ if (-1 == lseek(iFileDesc, (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH),
+ SEEK_SET)) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return false;
+ }
+ iResult = read(iFileDesc, tempstr, FILENAMELENGTH-1);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, tempstr1)) {
+ if (-1 == lseek(iFileDesc,
+ (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH) + FILENAMELENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return false;
+ }
+ if (read(iFileDesc, cFbyte, FILEVERLENGTH) != FILEVERLENGTH) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ } else {
+ //search the version info from the file
+ struct stat statbuf;
+ int iFileSize, ilooptime;
+ if (fstat(iFileDesc, &statbuf) < 0) {
+ NVBAK_LOG("[NVRAM]: fstat error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ iFileSize = (int)statbuf.st_size;
+ ilooptime = iFileSize / (FILEVERLENGTH + FILENAMELENGTH);
+ for (i = 0; i < ilooptime; i++) {
+ if (-1 == lseek(iFileDesc, i * (FILEVERLENGTH + FILENAMELENGTH), SEEK_SET)) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return false;
+ }
+ iResult = read(iFileDesc, tempstr, FILENAMELENGTH-1);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, tempstr1)) {
+ memset(tempstr, 0, FILENAMELENGTH);
+ if (-1 == lseek(iFileDesc, i * (FILEVERLENGTH + FILENAMELENGTH)+FILENAMELENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return false;
+ }
+ if (read(iFileDesc, cFbyte, FILEVERLENGTH) != FILEVERLENGTH) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+ cFbyte[FILEVERLENGTH-1] = '\0';
+ NVRAM_LOG("FILEVER size change, Load File Version: %s, NvRam File Version: %s\n",
+ pCfgFielTable[iRealFileLid].cFileVer, cFbyte);
+ break;
+ } else {
+ memset(tempstr, 0, FILENAMELENGTH);
+ continue;
+ }
+ }
+ if (i == ilooptime) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo find target file fail: %d\n", file_lid);
+ close(iFileDesc);
+ return false;
+ }
+ }
+ } else {
+ if (-1 == lseek(iFileDesc, file_lid * FILEVERLENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return false;
+ }
+ if (read(iFileDesc, cFbyte, FILEVERLENGTH) != FILEVERLENGTH) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return false;
+ }
+
+ cFbyte[FILEVERLENGTH-1] = '\0';
+ NVRAM_LOG("!!old version FILEVER, Load File Version: %s, NvRam File Version: %s\n",
+ pCfgFielTable[iRealFileLid].cFileVer, cFbyte);
+ }
+
+ close(iFileDesc);
+ NVRAM_LOG("Load File Version: %s, NvRam File Version: %s\n",
+ pCfgFielTable[iRealFileLid].cFileVer, cFbyte);
+ // compare the version one by one char
+ for (i = 0; i < 4; i++) {
+ if (pCfgFielTable[iRealFileLid].cFileVer[i] != cFbyte[i]) {
+ NVRAM_LOG("Error NVM_CmpFileVerNo is not same %d, %d ,%d\n",
+ iRealFileLid, pCfgFielTable[iRealFileLid].cFileVer[i], cFbyte[i]);
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_DataVerConvert
+//DESCRIPTION:
+// this function is called to convert data acccording to the version info .
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//RETURN VALUE:
+// convert successfully?
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+int NVM_DataVerConvert(int file_lid) {
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ int iFileDesc;
+ int iCurrentFileVerNO;
+ int iNewFileVerNO;
+ int iResult = 1;
+ char pFileVerInfo[4]={0};
+ int rec_size = 0;
+ int rec_num = 0;
+ char* pSrcMem = NULL;
+ char* pDstMem = NULL;
+ struct stat st;
+ int iFileSize;
+ char tempstr[FILENAMELENGTH]={0};
+ bool bIsNewVerInfo;
+ bool setflag = true;
+ //return 1;
+ NVRAM_LOG("NVM_DataVerConvert %d \n" , file_lid);
+ //NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDONLY);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_DataVerConvert Open2 version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ return 0;
+ }
+
+ iResult = read(iFileDesc,tempstr,FILENAMELENGTH-1);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return 0;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, strVerInfo)) {
+ NVRAM_LOG("New version info file\n");
+ bIsNewVerInfo = true;
+ } else {
+ NVRAM_LOG("Old version info file\n");
+ bIsNewVerInfo = false;
+ }
+
+ if (stat(g_akCFG_File[iFileVerInfoLID].cFileName, &st) < 0) {
+ NVRAM_LOG("Error NVM_DataVerConvert stat \n");
+ close(iFileDesc);
+ return 0;
+ }
+ //if the file lid is greater than the max file lid
+ if (bIsNewVerInfo) {
+ if (((file_lid + 1 + 1) * (FILEVERLENGTH + FILENAMELENGTH)) > st.st_size) {
+ NVRAM_LOG("NVM_DataVerConvert:the file lid is greater than the max file lid, reset it\n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ NVRAM_LOG("reset the file fail\n");
+ close(iFileDesc);
+ return 0;
+ }
+ close(iFileDesc);
+ return 1;
+ }
+ } else {
+ if (((file_lid + 1) * FILEVERLENGTH) > st.st_size) {
+ NVRAM_LOG("NVM_DataVerConvert:the file lid is greater than the max file lid, reset it\n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ NVRAM_LOG("reset the file fail\n");
+ close(iFileDesc);
+ return 0;
+ }
+ close(iFileDesc);
+ return 1;
+ }
+
+ }
+
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!!\n");
+ close(iFileDesc);
+ return 0;
+ }
+
+ if (file_lid >= iCustomBeginLID) {
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+
+ if (bIsNewVerInfo) {
+ if (-1 == lseek(iFileDesc,
+ (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH) + FILENAMELENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_DataVerConvert lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return 0;
+ }
+ } else {
+ if (-1 == lseek(iFileDesc, file_lid * FILEVERLENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_DataVerConvert lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return 0;
+ }
+ }
+
+ iResult=read(iFileDesc, pFileVerInfo, FILEVERLENGTH-1);
+ if (iResult != FILEVERLENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return 0;
+ }
+ pFileVerInfo[iResult]='\0';
+ close(iFileDesc);
+
+ iNewFileVerNO = atoi(pCfgFielTable[iRealFileLid].cFileVer);
+ iCurrentFileVerNO = atoi(pFileVerInfo);
+
+ if (stat(pCfgFielTable[iRealFileLid].cFileName, &st) < 0) {
+ NVRAM_LOG("Error NVM_DataVerConvert stat \n");
+ return 0;
+ }
+
+ iFileSize = st.st_size;
+ //iFileDesc=NVM_GetFileDesc(file_lid, &rec_size, &rec_num, ISWRITE);
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_DataVerConvert Open2 file fail: %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ return 0;
+ }
+ pSrcMem = (char*)malloc(iFileSize);
+ if (pSrcMem == NULL) {
+ NVRAM_LOG("Error NVM_DataVerConvert malloc \n");
+ close(iFileDesc);
+ return 0;
+ }
+ memset(pSrcMem, 0, iFileSize);
+ if (read(iFileDesc, pSrcMem , iFileSize) < 0) {
+ NVRAM_LOG("Read NVRAM fails %d\n", errno);
+ close(iFileDesc);
+ free(pSrcMem);
+ return 0;
+ }
+
+ rec_size = pCfgFielTable[iRealFileLid].i4RecSize;
+ rec_num = pCfgFielTable[iRealFileLid].i4RecNum;
+ pDstMem = (char*)malloc(rec_size * rec_num);
+ if (pDstMem == NULL) {
+ NVRAM_LOG("Error NVM_DataVerConvert malloc2 \n");
+ free(pSrcMem);
+ close(iFileDesc);
+ return 0;
+ }
+ memset(pDstMem, 0, rec_size * rec_num);
+
+ //Call Nvram Data Convert Function
+ /*
+ if(aNvRamConvertFuncTable[file_lid]!=NULL)
+ {
+ iResult=aNvRamConvertFuncTable[file_lid](iCurrentFileVerNO,iNewFileVerNO,pSrcMem,pDstMem);
+ if(iResult!=1)
+ {
+ NVRAM_LOG("Error NVM_DataVerConvert fail \n");
+ free(pSrcMem);
+ free(pDstMem);
+ close(iFileDesc);
+ return 0;
+ }
+ }
+ */
+ if (pCfgFielTable[iRealFileLid].NVM_DataConvertFunc != NULL) {
+ iResult = pCfgFielTable[iRealFileLid].NVM_DataConvertFunc(iCurrentFileVerNO,
+ iNewFileVerNO, pSrcMem, pDstMem);
+ if (iResult != 1) {
+ NVRAM_LOG("Error NVM_DataVerConvert fail \n");
+ free(pSrcMem);
+ free(pDstMem);
+ close(iFileDesc);
+ return 0;
+ }
+ } else {
+ NVRAM_LOG("Error NVM_DataVerConvert doesn't exist \n");
+ free(pSrcMem);
+ free(pDstMem);
+ close(iFileDesc);
+ return 0;
+ }
+ close(iFileDesc);
+ //Clear the old content of the file
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_TRUNC | O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_DataVerConvert Open2 file fail: %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ free(pSrcMem);
+ free(pDstMem);
+ return 0;
+ }
+ //NVRAM_LOG("rec_num:%d,%d\n",rec_num,rec_size);
+ if (write(iFileDesc, pDstMem , rec_num * rec_size) < 0) {
+ printf("WriteFile bt nvram failed:%d\r\n", errno);
+ free(pSrcMem);
+ free(pDstMem);
+ close(iFileDesc);
+ return 0;
+ }
+ free(pSrcMem);
+ free(pDstMem);
+ close(iFileDesc);
+ if (iResult == 1) {
+ //if Data convert successfully, the data version info in ver file should also be changed.
+ NVM_UpdateFileVerNo(file_lid, VerUpdate);
+#if 0
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_DataVerConvert Open2 version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ return 0;
+ }
+ sprintf(pFileVerInfo, "%03d", iNewFileVerNO);
+ if (bIsNewVerInfo) {
+ if (-1 == lseek(iFileDesc,
+ (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH) + FILENAMELENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_DataVerConvert lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return 0;
+ }
+ } else {
+ if (-1 == lseek(iFileDesc, file_lid * FILEVERLENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_DataVerConvert lseek version file fail: %s\n",
+ g_akCFG_File[iFileVerInfoLID].cFileName);
+ close(iFileDesc);
+ return 0;
+ }
+ }
+ write(iFileDesc, pFileVerInfo, FILEVERLENGTH);
+ close(iFileDesc);
+#endif
+ }
+ bool maskflag = 0;
+ unsigned int index = 0;
+ for (index = 0; index < g_Performance_File_Count; index++) {
+ if ((unsigned int)file_lid == aPerformance[index].iLID) {
+ maskflag = 1;
+ break;
+ }
+ }
+ if (maskflag == 0) {
+ if (NVM_ProtectDataFile(file_lid, setflag) == 1) {
+ NVRAM_LOG("NVM_DataVerConvert ProtectDataFile Success!!\n");
+ } else {
+ NVRAM_LOG("NVM_DataVerConvert ProtectDataFile SET Fail!!\n");
+ return false;
+ }
+ }
+ return iResult;
+
+}
+static bool NVM_CheckFileNum(unsigned int iOldCommonFileNum,
+ unsigned int iOldCustomFileNum) {
+ unsigned int iLid = 0;
+ int iNewCustomFileNum = iNvRamFileMaxLID - iCustomBeginLID;
+ if ((iOldCommonFileNum == 0) || (iOldCustomFileNum == 0)) {
+ NVRAM_LOG("File Num is zero, maybe this nvram data is from 32mp,48mpv0 or SD update\n");//support for 32mp and 48mpv0
+ return true;
+ }
+ if ((iOldCommonFileNum == (unsigned int)iCustomBeginLID)
+ && (iOldCustomFileNum == (unsigned int)iNewCustomFileNum)) {
+ NVRAM_LOG("File Num matches\n");
+ return true;
+ } else {
+ if (iOldCommonFileNum < (unsigned int)iCustomBeginLID
+ && iOldCommonFileNum > 0) {
+ for (iLid = iOldCommonFileNum; iLid < (unsigned int)iCustomBeginLID; iLid++) {
+ if (!NVM_UpdateFileVerNo(iLid, VerAdd)) {
+ NVRAM_LOG("NVM_CheckFileNum: Update File Fail:%d\n", iLid);
+ return false;
+ }
+ }
+ }
+
+ if (iOldCustomFileNum < (unsigned int)iNewCustomFileNum
+ && iOldCustomFileNum > 0) {
+ for (iLid = (iCustomBeginLID + iOldCustomFileNum);
+ iLid < (unsigned int)(iCustomBeginLID + iNewCustomFileNum); iLid++) {
+ if (!NVM_UpdateFileVerNo(iLid, VerAdd)) {
+ NVRAM_LOG("NVM_CheckFileNum: Update File Fail:%d\n", iLid);
+ return false;
+ }
+ }
+ }
+
+ if (iOldCommonFileNum > (unsigned int)iCustomBeginLID) {
+ for (iLid = (unsigned int)iCustomBeginLID; iLid < iOldCommonFileNum; iLid++) {
+ if (!NVM_UpdateFileVerNo(iLid, VerDel)) {
+ NVRAM_LOG("NVM_CheckFileNum: Update File Version Fail:%d\n", iLid);
+ return false;
+ }
+ }
+ }
+
+ if (iOldCustomFileNum > (unsigned int)iNewCustomFileNum) {
+ for (iLid = (iOldCommonFileNum + iNewCustomFileNum);
+ iLid < (iOldCommonFileNum + iOldCustomFileNum); iLid++) {
+ if (!NVM_UpdateFileVerNo(iLid, VerDel)) {
+ NVRAM_LOG("NVM_CheckFileNum: Update File Version Fail:%d\n", iLid);
+ return false;
+ }
+ }
+ }
+
+ }
+
+ return true;
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_DataVerConvertAll
+//DESCRIPTION:
+// this function is called to convert all data acccording to the version info .
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//RETURN VALUE:
+// convert successfully?
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_DataVerConvertAll(unsigned int iOldCommonFileNum,
+ unsigned int iOldCustomFileNum) {
+ int iLID = 1;
+ int iFileDesc = 0;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid;
+ bool bWrongFileVer = false;
+ NVRAM_LOG("Enter DataConvert All\n");
+ if (iOldCommonFileNum == 0 || iOldCustomFileNum == 0) {
+ NVRAM_LOG("File Num is zero, maybe this nvram data is from 32mp,48mpv0 or SD update\n");//support for 32mp and 48mpv0
+ return true;
+ }
+ if (!NVM_CheckVerFile(true)) {
+ NVRAM_LOG("fatal error: cna't find version info file\n");
+ return false;
+ }
+ if (!NVM_CheckFileNum(iOldCommonFileNum, iOldCustomFileNum)) {
+ NVRAM_LOG("NVM_CheckFileNum fail\n");
+ return false;
+ }
+ for (iLID = 1; iLID < iNvRamFileMaxLID; iLID++) {
+ bool bFileExist = true;
+ struct stat st;
+ memset(&st, 0, sizeof(st));
+ pCfgFielTable = NVM_GetCfgFileTable(iLID);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!!\n");
+ return false;
+ }
+
+ if (iLID >= iCustomBeginLID) {
+ iRealFileLid = iLID - iCustomBeginLID;
+ } else {
+ iRealFileLid = iLID;
+ }
+ if (stat(pCfgFielTable[iRealFileLid].cFileName, &st) < 0) {
+ NVRAM_LOG("this file doesn't exist, maybe this file is a new file or camera file\n");
+ bFileExist = false;
+ }
+
+ if (bFileExist) { //Camera NvRam Data should not be checked.
+ if (!NVM_CmpFileVerNo(iLID)) {
+ NVRAM_LOG("DataConvert Begin\n");
+ if (0 == NVM_DataVerConvert(iLID)) {
+ //Clear the old content of the file
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_TRUNC | O_RDWR);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_Clear File Content Fail\n");
+ return false;
+ }
+ close(iFileDesc);
+
+ NVRAM_LOG("Data Convert Fail,reset the file\n");
+ if (!NVM_ResetFileToDefault(iLID)) {
+ NVRAM_LOG("reset the file fail\n");
+ return false;
+ }
+
+ }
+ NVRAM_LOG("DataConvert End\n");
+ } else {
+ //if version info is the same ,then output the size info
+ NVRAM_LOG("Compare the size of same vesion file\n");
+
+ int iLoadFileSize = (pCfgFielTable[iRealFileLid].i4RecSize) *
+ (pCfgFielTable[iRealFileLid].i4RecNum);
+ NVRAM_LOG("Compare the size,the load file size:%d, the nvram file size:%lld\n",
+ iLoadFileSize, st.st_size);
+ if (iLoadFileSize != st.st_size
+ && iLoadFileSize + 2 * (int)sizeof(char) != st.st_size) {
+ NVRAM_LOG("NvRam data size can't match between version \n");
+ bWrongFileVer = true;
+ }
+
+ }
+
+ }
+ }
+ NVRAM_LOG("Leave DataConvert All\n");
+ if (bWrongFileVer == true)
+ return false;
+ return true;
+}
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFileID
+//DESCRIPTION:
+// this function is called to check the file lid and record id of nvram file.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// rec_id: [IN] the record id
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckFileID(int file_lid, int rec_id) {
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+ //get the file informatin table. if the file lid is version file, just generate it directly by call GenerateFileVer
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!!\n");
+ return false;
+ }
+
+ //if (file_lid >= AP_CFG_CUSTOM_BEGIN_LID) {
+ if (file_lid >= iCustomBeginLID) {
+ //iRealFileLid = file_lid - AP_CFG_CUSTOM_BEGIN_LID;
+ iRealFileLid = file_lid - iCustomBeginLID;
+ } else {
+ iRealFileLid = file_lid;
+ }
+
+ // check the lid and record number
+ if ((rec_id > pCfgFielTable[iRealFileLid].i4RecNum)
+ || (file_lid >= g_i4MaxNvRamLid)) {
+ return false;
+ }
+
+ return true;
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_ReadFileVerInfo
+//DESCRIPTION:
+// this function is called to read the version information of nvram file.
+// if the file version is not right, it wll be reset to default value
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// refers to the definition of "F_INFO"
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+F_INFO NVM_ReadFileVerInfo(int file_lid) {
+ int iFileDesc;
+ struct stat statbuf;
+ char byte[4] = {0, 0, 0, 0};
+ F_INFO file_info;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ int iResult = 0;
+
+ NVRAM_LOG("NVM_ReadFileVerInfo ++\n");
+ NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+ memset(&file_info, 0, sizeof(file_info));
+
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!! \n");
+ return file_info;
+ }
+
+ // get the file informatin table. if the file lid is version file,
+ // just generate it directly by call GenerateFileVer
+ //if (file_lid >= AP_CFG_CUSTOM_BEGIN_LID)
+ if (file_lid >= iCustomBeginLID) {
+ //iRealFileLid = file_lid - AP_CFG_CUSTOM_BEGIN_LID;
+ iRealFileLid = file_lid - iCustomBeginLID;
+ NVRAM_LOG("Custom File Lid is %d !!! \n", iRealFileLid);
+ } else {
+ iRealFileLid = file_lid;
+ NVRAM_LOG("Default File Lid is %d !!! \n", iRealFileLid);
+ }
+
+ //check the version file is exist or not. if not, generate it.
+ if (NVM_CheckVerFile(true)) {
+ NVRAM_LOG("Version file is exist on nvram \n");
+ if (!NVM_CmpFileVerNo(file_lid)) {
+ // if file version is not same, reset it.
+ if (pCfgFielTable[iRealFileLid].bDataProcessingType == DataReset) { //Reset Data
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_Clear File Content Fail_Check Version \n");
+ return file_info;
+ }
+ close(iFileDesc);
+ if (!NVM_ResetFileToDefault(file_lid))
+ return file_info;
+ } else {
+ NVRAM_LOG("NVM_ReadFileVerInfo NVM_CheckFileInfo Fail: Convert!!! \n");
+ //only for test
+ iResult = NVM_DataVerConvert(file_lid);
+ if (iResult == 0) {
+
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_CREAT | O_TRUNC,
+ S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_Clear File Content Fail_Check Version \n");
+ return file_info;
+ }
+ close(iFileDesc);
+ if (!NVM_ResetFileToDefault(file_lid))
+ return file_info;
+ }
+ }
+ } else {
+ NVRAM_LOG("NvRam Read %s File \n", pCfgFielTable[iRealFileLid].cFileName);
+ if (stat(pCfgFielTable[iRealFileLid].cFileName, &statbuf) == -1
+ || !S_ISREG(statbuf.st_mode)) {
+ NVRAM_LOG("%s File is not exist: Reset!!! \n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ //only for test
+ if (!NVM_ResetFileToDefault(file_lid))
+ return file_info;
+ }
+ }
+ } else {
+ NVRAM_LOG("Version file is not exist on nvram \n");
+ if (!NVM_GenerateFileVer(true)) {
+ return file_info;
+ } else {
+ NVRAM_LOG("NVM_ReadFileVerInfo Version File is not exist: Reset!!! \n");
+ if (false == NVM_ResetFileToDefault(file_lid)) {
+ NVRAM_LOG("reset fail!\n");
+ return file_info;
+ }
+ }
+ }
+
+ //read the file version
+ //iFileDesc = open(g_akCFG_File[AP_CFG_FILE_VER_INFO_LID].cFileName, O_RDONLY, S_IRUSR);
+ iFileDesc = open(g_akCFG_File[iFileVerInfoLID].cFileName, O_RDONLY);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error NVM_ReadFileVerInfo Open version file fail\n");
+ return file_info;
+ }
+ char tempstr[FILENAMELENGTH]={0};
+ bool bIsNewVerInfo;
+ iResult =read(iFileDesc,tempstr,FILENAMELENGTH-1);
+ if (iResult != FILENAMELENGTH-1) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return file_info;
+ }
+ tempstr[iResult]='\0';
+ if (0 == strcmp(tempstr, strVerInfo)) {
+ NVRAM_LOG("New version info file\n");
+ bIsNewVerInfo = true;
+ } else {
+ NVRAM_LOG("Old version info file\n");
+ bIsNewVerInfo = false;
+ }
+ if (bIsNewVerInfo) {
+ if (-1 == lseek(iFileDesc,
+ (file_lid + 1) * (FILEVERLENGTH + FILENAMELENGTH) + FILENAMELENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_ReadFileVerInfo lseek version file fail\n");
+ close(iFileDesc);
+ return file_info;
+ }
+ } else {
+ if (-1 == lseek(iFileDesc, file_lid * FILEVERLENGTH, SEEK_SET)) {
+ NVRAM_LOG("Error NVM_ReadFileVerInfo lseek version file fail\n");
+ close(iFileDesc);
+ return file_info;
+ }
+ }
+ if (read(iFileDesc, byte, FILEVERLENGTH) != FILEVERLENGTH) {
+ NVBAK_LOG("[NVRAM]: read error. (errno=%d)", errno);
+ close(iFileDesc);
+ return file_info;
+ }
+ close(iFileDesc);
+
+ memcpy(file_info.cFileVer, byte, FILEVERLENGTH);
+ memcpy(file_info.cFileName, pCfgFielTable[iRealFileLid].cFileName,
+ FILENAMELENGTH);
+ file_info.i4RecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+ file_info.i4RecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ file_info.i4MaxFileLid = g_i4CFG_File_Count + g_i4CFG_File_Custom_Count;
+
+ NVRAM_LOG("ReadFileVerInfo --\n");
+ return file_info;
+}
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFileInfo
+//DESCRIPTION:
+// this function is called to check file information, including the file lid
+// and record id.if the file version is not right, it wll be reset to default
+// value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// rec_id: [IN] the record id
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckFileInfo(int file_lid, int rec_id) {
+ struct stat statbuf;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+
+ NVRAM_LOG("NVM_CheckFileInfo ++\n");
+ //NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+
+ // get the file informatin table. if the file lid is version file,
+ // just generate it directly by call GenerateFileVer
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_CheckFileInfo NVM_GetCfgFileTable Fail!!! \n");
+ return false;
+ }
+
+ //if (file_lid < AP_CFG_CUSTOM_BEGIN_LID) {
+ if (file_lid < iCustomBeginLID) {
+ iRealFileLid = file_lid;
+ } else {
+ //iRealFileLid = file_lid - AP_CFG_CUSTOM_BEGIN_LID;
+ iRealFileLid = file_lid - iCustomBeginLID;
+ }
+
+ //check the lid and record id are right or not
+ if (!NVM_CheckFileID(file_lid, rec_id)) {
+ return false;
+ }
+
+ //check the file versio and check the version file is exist or not. if not, generate it.
+ if (NVM_CheckVerFile(true)) {
+ if (!NVM_CmpFileVerNo(file_lid)) {
+ NVRAM_LOG("NVM_CheckFileInfo NVM_CheckFileInfo Fail: Reset!!! \n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ return false;
+ }
+ } else {
+ if (stat(pCfgFielTable[iRealFileLid].cFileName, &statbuf) == -1 ||
+ !S_ISREG(statbuf.st_mode)) {
+ NVRAM_LOG("NVM_CheckFileInfo File is not exist: Reset!!! \n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ return false;
+ }
+ }
+ }
+ } else {
+ if (!NVM_GenerateFileVer(true)) {
+ return false;
+ } else {
+ NVRAM_LOG("NVM_CheckFileInfo NVM_GenerateFileVer to Reset!!! \n");
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ return false;
+ }
+ }
+ }
+
+ NVRAM_LOG("NVM_CheckFileInfo --\n");
+ return true;
+}
+
+/********************************************************************************
+//FUNCTION:
+// NVM_GetFileDesc
+//DESCRIPTION:
+// this function is called to the desc of nvram file and the information
+// of record size and number.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// pRecSize: [OUT] the record size
+// pRecNum: [OUT] the rocord number
+// IsRead: [IN] true is read, otherwise is write
+//
+//RETURN VALUE:
+// the file file desc
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+
+F_ID NVM_GetFileDesc(int file_lid, int *pRecSize, int *pRecNum, bool IsRead) {
+ int iFileDesc;
+ int iResult;
+ const TCFG_FILE *pCfgFielTable = NULL;
+ int iRealFileLid = 0;
+ bool Checkflag = 0;
+ F_ID FileID;
+ FileID.iFileDesc = -1;
+ FileID.ifile_lid = file_lid;
+ FileID.bIsRead = IsRead;
+
+ unsigned int index = 0;
+ bool maskflag = 0;
+ bool bRet = false;
+ int index_in_list = -1;
+ struct mtd_info_user info;
+ int i = 0;
+ char cMtdDevName[128] = {0};
+ struct erase_info_user erase_info;
+ for (index = 0; index < g_Performance_File_Count; index++) {
+ if ((unsigned int)file_lid == aPerformance[index].iLID) {
+ maskflag = 1;
+ break;
+ }
+ }
+ //NVRAM_LOG("NVM_GetFileDesc ++\n");
+ if (NVM_Init() < 0) {
+ NVRAM_LOG("NVM_GetFileDesc--NVM_Init fail !!!\n");
+ return FileID;
+ }
+ //NVRAM_LOG("iCustomBeginLID = %d\n", iCustomBeginLID);
+ //get the file informatin table. if the file lid is version file, just generate it directly by call GenerateFileVer
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_CheckWritePermission(IsRead, file_lid)) {
+ return FileID;
+ }
+#endif
+
+ pCfgFielTable = NVM_GetCfgFileTable(file_lid);
+ //NVRAM_LOG("NVM_GetCfgFileTable done\n");
+ //if (file_lid < AP_CFG_CUSTOM_BEGIN_LID) {
+ if (file_lid < iCustomBeginLID) {
+ iRealFileLid = file_lid;
+ } else {
+ //iRealFileLid = file_lid - AP_CFG_CUSTOM_BEGIN_LID;
+ iRealFileLid = file_lid - iCustomBeginLID;
+ }
+
+ if (pCfgFielTable == NULL) {
+ NVRAM_LOG("NVM_GetCfgFileTable Fail!!! \n");
+ return FileID;
+ }
+
+ if (nvram_new_partition_support()) {
+ if (NVM_InSpecialLidList(file_lid, &index_in_list)) {
+ if (pRecSize != NULL && pRecNum != NULL) {
+ *pRecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+ *pRecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ }
+ goto Solve_Special_Lid;
+ }
+ }
+
+ //get file hanle.
+
+ NVRAM_LOG("%s: Open %s,LID:%d\n", __func__,
+ pCfgFielTable[iRealFileLid].cFileName, file_lid);
+ //Check if the lid is reserved.
+ if (strcmp(pCfgFielTable[iRealFileLid].cFileName, "Reserved") == 0) {
+ NVRAM_LOG("The LID is Reserved, please check lid you used!!!");
+ return FileID;
+ }
+ if (IsRead) {
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_RDONLY);
+ } else {
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_RDWR);
+ }
+ //get file RecSize and RecNum information
+ if (pRecSize != NULL && pRecNum != NULL) {
+ *pRecSize = pCfgFielTable[iRealFileLid].i4RecSize;
+ *pRecNum = pCfgFielTable[iRealFileLid].i4RecNum;
+ }
+ if (iFileDesc == -1) { //if file doesn't exist
+ if (access(g_pcNVM_Flag, F_OK) == 0) {
+ NVRAM_LOG("File is not exist, try to restore from binregion!!!");
+ for (i = 0; i < (int)g_Backup_File_Count; i++) {
+ if ((unsigned int)file_lid == aBackupToBinRegion[i].iLID) {
+ if (NVM_RestoreFromBinRegion_OneFile(file_lid, NULL)) {
+ NVRAM_LOG("successfully restore.\n");
+ goto ProtectData;
+ }
+ break;
+ }
+ }
+ }
+ NVRAM_LOG("Create the dir path of %s\n", pCfgFielTable[iRealFileLid].cFileName);
+ iFileDesc = open_file_with_dirs(pCfgFielTable[iRealFileLid].cFileName,
+ O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); //create the file
+ if (iFileDesc == -1) {
+ NVRAM_LOG("Error Num %s\n", (char*)strerror(errno));
+ NVRAM_LOG("Error NVM_GetFileDesc open_file_with_dirs file fail: %s\n",
+ pCfgFielTable[iRealFileLid].cFileName);
+ } else {
+ close(iFileDesc);
+ }
+ if (!NVM_ResetFileToDefault(file_lid)) {
+ NVRAM_LOG("ResetFileToDefault Failed\n");
+ return FileID;
+ }
+ } else {
+ close(iFileDesc);//avoid the bug of re-open file
+ if (!NVM_CmpFileVerNo(file_lid)) {
+ // if file version is not same, convert it.
+ if (pCfgFielTable[iRealFileLid].bDataProcessingType == DataReset) { //Reset Data
+ NVRAM_LOG("NVM_ReadFileVerInfo NVM_CheckFileInfo Fail: Reset!!! \n");
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_TRUNC);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_Clear File Content Fail_Get File Desc \n");
+ return FileID;
+ }
+ close(iFileDesc);
+ if (!NVM_ResetFileToDefault(file_lid))
+ return FileID;
+ } else {
+ NVRAM_LOG("NVM_ReadFileVerInfo NVM_CheckFileInfo Fail: Convert!!! \n");
+ //only for test
+ iResult = NVM_DataVerConvert(file_lid);
+ if (iResult == 0) {
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_TRUNC);
+ if (iFileDesc == -1) {
+ NVRAM_LOG("NVM_Clear File Content Fail_Get File Desc \n");
+ return FileID;
+ }
+ close(iFileDesc);
+ if (!NVM_ResetFileToDefault(file_lid))
+ return FileID;
+ }
+ }
+ }
+
+ }
+ProtectData:
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(file_lid, DECODE)) {
+ NVRAM_LOG("Dec fail!!!\n");
+ return FileID;
+ }
+#endif
+ if (maskflag == 0) {
+ if (NVM_ProtectDataFile(file_lid, Checkflag) == 1) {
+ NVRAM_LOG("NVM_GetFileDesc ProtectDataFile Check Success!!\n");
+ } else {
+ NVRAM_LOG("NVM_GetFileDesc ProtectDataFile Fail!!\n");
+ return FileID;
+ }
+ }
+ if (IsRead) {
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_RDONLY);
+ } else {
+ iFileDesc = open(pCfgFielTable[iRealFileLid].cFileName, O_RDWR | O_SYNC);
+ }
+ //NVRAM_LOG("NVM_GetFileDesc --\n");
+ FileID.iFileDesc = iFileDesc;
+ return FileID;
+
+
+Solve_Special_Lid:
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_NVRAM_PROINFO_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_NVRAM_PROINFO_DEVICE);
+ NVRAM_LOG("New NVRAM partition name is %s.\n", cMtdDevName);
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_GetSequenceNum: get device info fail!!!\n");
+ return FileID;
+ }
+
+ if (g_new_nvram_lid[index_in_list].start_address % info.erasesize != 0
+ || g_new_nvram_lid[index_in_list].start_address +
+ g_new_nvram_lid[index_in_list].size > (long)info.size) {
+ NVRAM_LOG("Lid info in special info is error!!!\n");
+ return FileID;
+ }
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ if ((pRecSize != NULL) && ((unsigned int)*pRecSize < info.writesize)) {
+ NVRAM_LOG("*pRecSize %d < info.writesize %d\n", *pRecSize, info.writesize);
+ *pRecSize = info.writesize;
+ }
+ }
+
+ if (*pRecSize % info.writesize != 0) {
+ NVRAM_LOG("Please make sure size for special lid in new nvram partition should alignment %d\n",
+ info.writesize);
+ return FileID;
+ }
+
+ if (IsRead) {
+ iFileDesc = open(cMtdDevName, O_RDONLY);
+ } else {
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ erase_info.start = g_new_nvram_lid[index_in_list].start_address;
+ erase_info.length = g_new_nvram_lid[index_in_list].size;
+ if (g_new_nvram_lid[index_in_list].size < (long)info.erasesize)
+ erase_info.length = info.erasesize;
+ bRet = NVM_EraseDeviceBlock(cMtdDevName, erase_info);
+ if ( false == bRet) {
+ NVRAM_LOG("NVM_IncSequenceNum: erase device failed");
+ return FileID;
+ }
+ }
+
+ iFileDesc = open(cMtdDevName, O_RDWR | O_SYNC);
+ }
+
+ if (iFileDesc < 0) {
+ NVRAM_LOG("Open new nvram partition fail!!!\n");
+ return FileID;
+ }
+
+ if (lseek(iFileDesc, g_new_nvram_lid[index_in_list].start_address,
+ SEEK_SET) < 0) {
+ NVRAM_LOG("seek for lid %d fail!!!\n", file_lid);
+ close(iFileDesc);
+ return FileID;
+ }
+ FileID.iFileDesc = iFileDesc;
+ return FileID;
+
+}
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CloseFileDesc
+//DESCRIPTION:
+// this function is called to close the file desc which is open by NVM_GetFileDesc.
+//
+//PARAMETERS:
+// hFile: [IN] the file desc
+//
+//RETURN VALUE:
+// true is success, otherwise is fail
+//
+//DEPENDENCY:
+// GetFileDesc must have been called
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CloseFileDesc(F_ID FileID) {
+
+ int index_in_list = -1;
+ bool Setflag = 1;
+ if (nvram_new_partition_support()) {
+ if (NVM_InSpecialLidList(FileID.ifile_lid, &index_in_list)) {
+ //the handle of pro info shoud be closed
+ if (FileID.iFileDesc == -1) {
+ return false;
+ }
+
+#if 0
+ //if (!FileID.bIsRead)
+ {
+ if (0 != fsync(FileID.iFileDesc)) {
+ NVRAM_LOG("NVM_CloseFileDesc fsync file error!!\n");
+ return false;
+ }
+ }
+#endif
+ if (0 != close(FileID.iFileDesc)) {
+ NVRAM_LOG("NVM_CloseFileDesc Close file error!!\n");
+ return false;
+ }
+ return true;
+ }
+ }
+
+ if (FileID.iFileDesc == -1) {
+ return false;
+ }
+
+ //if (!FileID.bIsRead)
+ {
+ if (0 != fsync(FileID.iFileDesc)) {
+ NVRAM_LOG("NVM_CloseFileDesc fsync file error!!\n");
+ return false;
+ }
+ }
+
+ if (0 != close(FileID.iFileDesc)) {
+ NVRAM_LOG("NVM_CloseFileDesc Close file error!!\n");
+ return false;
+ }
+ bool maskflag = 0;
+ unsigned int index = 0;
+ for (index = 0; index < g_Performance_File_Count; index++) {
+ if ((unsigned int)FileID.ifile_lid == aPerformance[index].iLID) {
+ maskflag = 1;
+ break;
+ }
+ }
+ if (maskflag || FileID.bIsRead) {
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(FileID.ifile_lid, ENCODE)) {
+ NVRAM_LOG("Enc fail!!!\n");
+ return false;
+ }
+#endif
+ }
+ if (maskflag)
+ return true;
+ if (true == FileID.bIsRead) {
+ NVRAM_LOG("NVM_CloseFileDesc: Open by Readonly, no need to check when close\n");
+ return true;
+ }
+ if (NVM_ProtectDataFile(FileID.ifile_lid, Setflag) == 1) {
+ NVRAM_LOG("NVM_CloseFileDesc ProtectDataFile Success!!\n");
+#ifndef MTK_BASIC_PACKAGE
+ if (!NVM_Enc_Dnc_File(FileID.ifile_lid, ENCODE)) {
+ NVRAM_LOG("Enc fail!!!\n");
+ return false;
+ }
+#endif
+ return true;
+ } else {
+ NVRAM_LOG("NVM_CloseFileDesc ProtectDataFile SET Fail!!\n");
+ return false;
+ }
+
+}
+
+unsigned int NVM_GetSequenceNum(void) {
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+ int fd;
+ int iResult;
+ unsigned int sequence = 0;
+ bool bRet;
+ loff_t offset = 0;
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ if (nvram_platform_layout_version == 0)
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_LOG_DEVICE);
+ else if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_GetSequenceNum: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return true;
+ // ret = NVM_GetDeviceInfo(MISC_DEVICE, &info);
+ } else {
+ NVRAM_LOG("NVM_GetSequenceNum: invalid nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return false;
+ }
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_GetSequenceNum: get device info fail!!!\n");
+ return -1;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_GetSequenceNum: journal size is larger than device write size!!!\n");
+ return -1;
+ }
+
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_GetSequenceNum : allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char *) malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_GetSequenceNum: allocate for temp buffer fail!!!\n");
+ free(journal);
+ return -1;
+ }
+ memset(buffer, 0, info.writesize);
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_GetSequenceNum: dumchar open fail!!!\n");
+ free(journal);
+ free(buffer);
+ return -1;
+ }
+
+ offset = info.size - info.erasesize;
+ iResult = lseek(fd, offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_GetSequenceNum: seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return -1;
+ }
+ iResult = read(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_GetSequenceNum: read nvram super page fail, iResult = %d !!!\n",
+ iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ memcpy(journal, buffer, sizeof(nvram_journal_handle_t));
+ if (journal->h_magic == NVRAM_JOURNAL_MAGIC) {
+ sequence = journal->h_sequence;
+ } else {
+ sequence = 0;
+ }
+ free(journal);
+ free(buffer);
+ return sequence;
+}
+
+bool NVM_IncSequenceNum(unsigned int sequence) {
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+
+ struct erase_info_user erase_info;
+
+ int fd;
+ int iResult;
+ bool bRet;
+ loff_t offset;
+ time_t tm;
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ if (nvram_platform_layout_version == 0)
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_LOG_DEVICE);
+ else if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_IncSequenceNum: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return true;
+ // ret = NVM_GetDeviceInfo(MISC_DEVICE, &info);
+ } else {
+ NVRAM_LOG("NVM_IncSequenceNum: invalid nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return false;
+ }
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_IncSequenceNum: get device info fail!!!\n");
+ return false;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_IncSequenceNum: journal size is larger than device write size!!!\n");
+ return false;
+ }
+
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_IncSequenceNum: allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char *) malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_IncSequenceNum: allocate for temp buffer fail!!!\n");
+ free(journal);
+ return false;
+ }
+ memset(buffer, 0, info.writesize);
+
+ tm = time(&tm);
+ journal->h_magic = NVRAM_JOURNAL_MAGIC;
+ journal->h_type = NVRAM_JOURNAL_SUPER_PAGE;
+ journal->h_sequence = ++sequence;
+ journal->h_utc_time = tm;
+
+ offset = info.size - info.erasesize;
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ erase_info.start = offset;
+ erase_info.length = info.erasesize;
+
+
+ bRet = NVM_EraseDeviceBlock(cMtdDevName, erase_info);
+ if ( false == bRet) {
+ NVRAM_LOG("NVM_IncSequenceNum: erase device failed\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ }
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_IncSequenceNum: dumchar open fail!!!\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ iResult = lseek(fd, offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_IncSequenceNum: seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ memcpy(buffer, journal, sizeof(nvram_journal_handle_t));
+ iResult = write(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_IncSequenceNum: read nvram super page fail, iResult = %d !!!\n",
+ iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ free(journal);
+ free(buffer);
+ close(fd);
+ return true;
+}
+
+//add by min
+bool NVM_HistoryLog_add_file(const char *fix_dir, const char *pre_fix_file,nvram_journal_handle_t *journal)
+{
+ DIR *dir;
+ struct dirent *entry;
+ struct stat st;
+ int size=0;
+ int read_size=0;
+ char acSrcPathName[MAX_NAMESIZE];
+ int fd;
+ unsigned char buffer[MAX_BARCODE_LENGTH];//3 barcode is 66*3 < MAX_BARCODE_LENGTH
+ NVRAM_LOG("NVRAM_HistoryLog: dir is %s\n",fix_dir);
+ dir = opendir(fix_dir);
+ int num=0;// how much barcode file
+ if(dir == NULL)
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: open dir %s error %s\n",fix_dir, (char*)strerror(errno));
+ return false;
+ }
+ while(1)
+ {
+ entry = readdir(dir);
+ if(entry == NULL)
+ {
+ break;
+ }
+
+ if (!strcmp(entry->d_name, ".")|| !strcmp(entry->d_name, ".."))
+ {
+ continue;
+ }
+ if(strncmp(entry->d_name,pre_fix_file,strlen(pre_fix_file)) == 0)
+ {
+ if(num >= 3)
+ break;// total 3 barcode file
+ sprintf(acSrcPathName, "%s/%s", fix_dir, entry->d_name);
+ NVRAM_LOG("NVRAM_HistoryLog: file is %s",acSrcPathName);
+ if(stat(acSrcPathName,&st)<0)
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: Error %s stat ",acSrcPathName);
+ closedir(dir);
+ return false;
+ }
+ size=st.st_size;
+ fd= open(acSrcPathName,O_RDONLY);
+ if (fd < 0)
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: open %s error %s\n",acSrcPathName, (char*)strerror(errno) );
+ closedir(dir);
+ return false;
+ }
+ NVRAM_LOG("NVRAM_HistoryLog: sizeofbuffer is %lu\n",sizeof(buffer));
+ read_size= (int)read(fd, buffer, size);
+ if (read_size != size)
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: read_size is %d",read_size);
+ close(fd);
+ closedir(dir);
+ return false;
+ }
+ NVRAM_LOG("NVRAM_HistoryLog: readsize is %d\n",read_size);
+ if(120 == read_size)
+ {
+ memcpy(journal->imei, entry->d_name, MAX_IMEI_LENGTH);//add by min, copy IMEI_FLAG to joural
+ memcpy(journal->imei+strlen(entry->d_name), buffer, size);//add by min, copy imei to joural
+ }
+ else if(66 == read_size)
+ {
+ memcpy(journal->barcode+num*(size+strlen(entry->d_name)), entry->d_name, strlen(entry->d_name));//add by min, copy BARCODE_FLAG to joural
+ memcpy(journal->barcode+num*(size+strlen(entry->d_name))+strlen(entry->d_name), buffer , size);//add by min, copy barcode to joural
+ }
+ else
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: read_size is wrong %d",read_size);
+ }
+ num++;
+ close(fd);
+ }
+ }
+ closedir(dir);
+ return true;
+// add
+}
+//add by min
+//add by min
+bool NVM_HistoryLog_Time(unsigned int level, const char *func, unsigned int line,const char *log,unsigned char *time)
+{//add
+ NVRAM_LOG("NVM_HistoryLog: time is %s\n",time);
+ bool bRet = false;
+ int iResult = 0;
+ int fd;
+ //time_t tm;//don't use tm
+ loff_t start_address;
+ loff_t offset;
+ unsigned int writepages_per_block = 0;
+ unsigned int sequence = 0;
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+
+ struct erase_info_user erase_info;
+
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+ //just when log level larger than default log level, the log will print
+ if (level < DEFAULT_LOG_LEVEL)
+ return true;
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ if (nvram_platform_layout_version == 0)
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_LOG_DEVICE);
+ else if (nvram_platform_layout_version == 1)
+ {
+ NVRAM_LOG("NVM_HistoryLog: could't support in nvram layout version %d\n",nvram_platform_layout_version);
+ return true;
+ // ret = NVM_GetDeviceInfo(MISC_DEVICE, &info);
+ }
+ else
+ {
+ NVRAM_LOG("NVM_HistoryLog: invalid nvram layout version %d\n",nvram_platform_layout_version);
+ return false;
+ }
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet)
+ {
+ NVRAM_LOG("NVM_HistoryLog : get device info failed!!!\n");
+ return false;
+ }
+ if(info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0)
+ {
+ NVRAM_LOG("NVM_HistoryLog : journal size is larger than device write size!!!\n");
+ return false;
+ }
+
+ //calculate the location for write log
+ writepages_per_block = info.erasesize/info.writesize;
+ sequence = NVM_GetSequenceNum();
+ if(sequence < 0)
+ {
+ NVRAM_LOG("NVM_HistoryLog : get sequence number fail!!!\n");
+ return false;
+ }
+
+ start_address = (loff_t)((loff_t)info.size - ((loff_t)nvram_platform_log_block * (loff_t)info.erasesize));
+ offset = (loff_t)((loff_t)info.writesize * ((loff_t)sequence % ((loff_t)writepages_per_block * ((loff_t)nvram_platform_log_block - 1))));
+
+ if((!nvram_emmc_support()) && (!nvram_ufs_support()))
+ {
+ if ((sequence % writepages_per_block ) == 0)
+ {
+ erase_info.start = start_address + offset;
+ erase_info.length = info.erasesize;
+
+ bRet = NVM_EraseDeviceBlock(cMtdDevName, erase_info);
+ if (false == bRet)
+ {
+ NVRAM_LOG("NVM_HistoryLog : erase super block fail!!!\n");
+ return false;
+ }
+ }
+ }
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_HistoryLog : allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char*)malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_HistoryLog : allocate for temp buffer fail!!!\n");
+ free(journal);
+ return false;
+ }
+ memset(buffer, 0, info.writesize);
+
+ //tm = time(&tm);//don't use tm
+ journal->h_magic = NVRAM_JOURNAL_MAGIC;
+ journal->h_type = NVRAM_JOURNAL_LOG_PAGE;
+ journal->h_sequence = sequence;
+ //journal->h_utc_time = time;//don't use tm
+ journal->h_func_line = line;
+ //by min,IMEI
+ if(!NVM_HistoryLog_add_file(g_pcNVM_MDRdebFile, PREFIX_IMEI,journal))
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: get IMEI error");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ //by min,BARCODE
+ if(!NVM_HistoryLog_add_file(g_pcNVM_MDCalFile, PREFIX_BARCODE,journal))
+ {
+ NVRAM_LOG("NVRAM_HistoryLog: get barcode error");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ memcpy(journal->h_func_name, func , strlen(func));
+ snprintf(journal->h_log, MAX_LOG_LENGTH, "%s:%s", time, log);
+ journal->h_log_lengeh = strlen(journal->h_log);
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0)
+ {
+ NVRAM_LOG("NVM_HistoryLog : open log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ iResult = lseek(fd, start_address + offset, SEEK_SET);
+ if (iResult < 0)
+ {
+ NVRAM_LOG("NVM_HistoryLog : seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ memcpy(buffer, journal, sizeof(nvram_journal_handle_t));
+ iResult = write(fd, buffer, info.writesize);
+ if((unsigned int)iResult != info.writesize)
+ {
+ NVRAM_LOG("NVM_HistoryLog : write log device fail, iResult = %d !!!\n", iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ free(journal);
+ free(buffer);
+ close(fd);
+ //sync();
+ bRet = NVM_IncSequenceNum(sequence);
+ if( false == bRet)
+ {
+ NVRAM_LOG("NVM_HistoryLog : update sequence number fail!!!\n");
+ return false;
+ }
+
+ return true;
+
+//add
+}
+
+bool NVM_HistoryLog(unsigned int level, const char *func, unsigned int line,
+ const char *log) {
+ bool bRet = false;
+ int iResult = 0;
+ int fd;
+ time_t tm;
+ loff_t start_address;
+ loff_t offset;
+ unsigned int writepages_per_block = 0;
+ unsigned int sequence = 0;
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+
+ struct erase_info_user erase_info;
+
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+ //just when log level larger than default log level, the log will print
+ if (level < DEFAULT_LOG_LEVEL)
+ return true;
+
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ if (nvram_platform_layout_version == 0)
+ //strcpy(cMtdDevName, g_LOG_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_LOG_DEVICE);
+ else if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_HistoryLog: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return true;
+ // ret = NVM_GetDeviceInfo(MISC_DEVICE, &info);
+ } else {
+ NVRAM_LOG("NVM_HistoryLog: invalid nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return false;
+ }
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_HistoryLog : get device info failed!!!\n");
+ return false;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_HistoryLog : journal size is larger than device write size!!!\n");
+ return false;
+ }
+
+ //calculate the location for write log
+ writepages_per_block = info.erasesize / info.writesize;
+ sequence = NVM_GetSequenceNum();
+ if (sequence < 0) {
+ NVRAM_LOG("NVM_HistoryLog : get sequence number fail!!!\n");
+ return false;
+ }
+
+ start_address = info.size - ((loff_t)nvram_platform_log_block *
+ (loff_t)info.erasesize);
+ offset = (loff_t)((loff_t)info.writesize * ((loff_t)sequence % ((loff_t)writepages_per_block *
+ (loff_t)(nvram_platform_log_block - 1))));
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ if ((sequence % writepages_per_block ) == 0) {
+ erase_info.start = start_address + offset;
+ erase_info.length = info.erasesize;
+
+ bRet = NVM_EraseDeviceBlock(cMtdDevName, erase_info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_HistoryLog : erase super block fail!!!\n");
+ return false;
+ }
+ }
+ }
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_HistoryLog : allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char*)malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_HistoryLog : allocate for temp buffer fail!!!\n");
+ free(journal);
+ return false;
+ }
+ memset(buffer, 0, info.writesize);
+
+ tm = time(&tm);
+ journal->h_magic = NVRAM_JOURNAL_MAGIC;
+ journal->h_type = NVRAM_JOURNAL_LOG_PAGE;
+ journal->h_sequence = sequence;
+ journal->h_utc_time = tm;
+ journal->h_func_line = line;
+
+ memcpy(journal->h_func_name, func , strlen(func));
+ snprintf(journal->h_log, MAX_LOG_LENGTH, "%s:%s", ctime(&tm), log);
+ journal->h_log_lengeh = strlen(journal->h_log);
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_HistoryLog : open log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ iResult = lseek(fd, start_address + offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_HistoryLog : seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ memcpy(buffer, journal, sizeof(nvram_journal_handle_t));
+ iResult = write(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_HistoryLog : write log device fail, iResult = %d !!!\n",
+ iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ free(journal);
+ free(buffer);
+ close(fd);
+ //sync();
+ bRet = NVM_IncSequenceNum(sequence);
+ if ( false == bRet) {
+ NVRAM_LOG("NVM_HistoryLog : update sequence number fail!!!\n");
+ return false;
+ }
+
+ return true;
+}
+
+unsigned int NVM_MiscGetSeqNum(void) {
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+ int fd;
+ int iResult;
+ unsigned int sequence = 0;
+ bool bRet;
+ loff_t offset = 0;
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: not support NAND\n");
+ return false;
+ }
+ if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return -1;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_MISC_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_MISC_DEVICE);
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: get device info fail!!!\n");
+ return -1;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: journal size is larger than device write size!!!\n");
+ return -1;
+ }
+
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_MiscGetSeqNum : allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char *) malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: allocate for temp buffer fail!!!\n");
+ free(journal);
+ return -1;
+ }
+ memset(buffer, 0, info.writesize);
+ if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return -1;
+ }
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: dumchar open fail!!!\n");
+ free(journal);
+ free(buffer);
+ return -1;
+ }
+ offset = (loff_t)((loff_t)info.size - (loff_t)info.erasesize * (loff_t)nvram_misc_log_block_offset);
+
+ iResult = lseek(fd, offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return -1;
+ }
+ iResult = read(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: read nvram super page fail, iResult = %d !!!\n",
+ iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return -1;
+ }
+ close(fd);
+ memcpy(journal, buffer, sizeof(nvram_journal_handle_t));
+ if (journal->h_magic == NVRAM_MISC_JOURNAL_MAGIC) {
+ sequence = journal->h_sequence;
+ } else {
+ sequence = 0;
+ }
+ free(journal);
+ free(buffer);
+ return sequence;
+}
+
+bool NVM_MiscIncSeqNum(unsigned int sequence) {
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+ char cMtdDevName[128] = {0};
+
+ int fd;
+ int iResult;
+ bool bRet;
+ loff_t offset;
+ time_t tm;
+ char *buffer = NULL;
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: not support NAND\n");
+ return false;
+ }
+ if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_MiscGetSeqNum: could't support in nvram layout version %d\n",
+ nvram_platform_layout_version);
+ return -1;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_MISC_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_MISC_DEVICE);
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: get device info fail!!!\n");
+ return false;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: journal size is larger than device write size!!!\n");
+ return false;
+ }
+
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char *) malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: allocate for temp buffer fail!!!\n");
+ free(journal);
+ return false;
+ }
+ memset(buffer, 0, info.writesize);
+
+ tm = time(&tm);
+ journal->h_magic = NVRAM_MISC_JOURNAL_MAGIC;
+ journal->h_type = NVRAM_JOURNAL_SUPER_PAGE;
+ journal->h_sequence = ++sequence;
+ journal->h_utc_time = tm;
+
+
+ offset = (loff_t)((loff_t)info.size - (loff_t)info.erasesize * (loff_t)nvram_misc_log_block_offset);
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: dumchar open fail!!!\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ iResult = lseek(fd, offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: seek log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ memcpy(buffer, journal, sizeof(nvram_journal_handle_t));
+ iResult = write(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_MiscIncSeqNum: read nvram super page fail, iResult = %d !!!\n",
+ iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ free(journal);
+ free(buffer);
+ close(fd);
+
+ return true;
+}
+
+
+bool NVM_MiscLog(unsigned int level, const char *func, unsigned int line,
+ const char *log) {
+ bool bRet = false;
+ int iResult = 0;
+ int fd;
+ time_t tm;
+ loff_t start_address;
+ loff_t offset;
+ unsigned int writepages_per_block = 0;
+ unsigned int sequence = 0;
+ nvram_journal_handle_t *journal;
+ struct mtd_info_user info;
+
+ char *buffer = NULL;
+ char cMtdDevName[128] = {0};
+
+ (void)(level);
+ if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_MiscLog: not support in layout version %d\n",
+ nvram_platform_layout_version);
+ return false;
+ }
+
+ if ((!nvram_emmc_support()) && (!nvram_ufs_support())) {
+ NVRAM_LOG("NVM_MiscLog: not support NAND\n");
+ return false;
+ }
+
+ //Get the info about log_device(/dev/nvram), we use the last 16 block(2M) for nvram journal log
+ if (nvram_platform_layout_version == 1) {
+ NVRAM_LOG("NVM_MiscLog : couldn't support in this nvram layout %d\n",
+ nvram_platform_layout_version);
+ return false;
+ }
+ memset(cMtdDevName, 0, sizeof cMtdDevName);
+ //strcpy(cMtdDevName, g_MISC_DEVICE);
+ snprintf(cMtdDevName, sizeof(cMtdDevName),"%s", g_MISC_DEVICE);
+ bRet = NVM_GetDeviceInfo(cMtdDevName, &info);
+ if (false == bRet) {
+ NVRAM_LOG("NVM_MiscLog : get device info failed!!!\n");
+ return false;
+ }
+ if (info.writesize < sizeof(nvram_journal_handle_t) || info.size == 0) {
+ NVRAM_LOG("NVM_MiscLog : journal size is larger than device write size!!!\n");
+ return false;
+ }
+
+ //calculate the location for write log
+ writepages_per_block = info.erasesize / info.writesize;
+ sequence = NVM_MiscGetSeqNum();
+ if (sequence < 0) {
+ NVRAM_LOG("NVM_MiscLog : get sequence number fail!!!\n");
+ return false;
+ }
+
+
+ //save NVRAM misc log at 3nd block of misc region
+ start_address = info.size - (loff_t)info.erasesize * (loff_t)
+ nvram_misc_log_block_offset ;
+ //sequence number always in first write unit
+ offset = (loff_t)((loff_t)info.writesize * ((loff_t)sequence % (loff_t)writepages_per_block + 1));
+
+
+ journal = (nvram_journal_handle_t *)malloc(sizeof(nvram_journal_handle_t));
+ if (NULL == journal) {
+ NVRAM_LOG("NVM_MiscLog : allocate for journal fail!!!\n");
+ return false;
+ }
+ memset(journal, 0, sizeof(nvram_journal_handle_t));
+
+ buffer = (char*)malloc(info.writesize);
+ if (NULL == buffer) {
+ NVRAM_LOG("NVM_MiscLog : allocate for temp buffer fail!!!\n");
+ free(journal);
+ return false;
+ }
+ memset(buffer, 0, info.writesize);
+
+ tm = time(&tm);
+ journal->h_magic = NVRAM_MISC_JOURNAL_MAGIC;
+ journal->h_type = NVRAM_JOURNAL_LOG_PAGE;
+ journal->h_sequence = sequence;
+ journal->h_utc_time = tm;
+ journal->h_func_line = line;
+ memcpy(journal->h_func_name, func , strlen(func));
+ snprintf(journal->h_log, MAX_LOG_LENGTH, "%s:%s", ctime(&tm), log);
+ journal->h_log_lengeh = strlen(journal->h_log);
+
+ fd = open(cMtdDevName, O_RDWR);
+ if (fd < 0) {
+ NVRAM_LOG("NVM_MiscLog : open log device fail!!!\n");
+ free(journal);
+ free(buffer);
+ return false;
+ }
+ iResult = lseek(fd, start_address + offset, SEEK_SET);
+ if (iResult < 0) {
+ NVRAM_LOG("NVM_MiscLog : seek log device fail start_address=%llx,offset=%llx!!!\n",
+ start_address, offset);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ memcpy(buffer, journal, sizeof(nvram_journal_handle_t));
+ iResult = write(fd, buffer, info.writesize);
+ if ((unsigned int)iResult != info.writesize) {
+ NVRAM_LOG("NVM_MiscLog : write log device fail, iResult = %d !!!\n", iResult);
+ free(journal);
+ free(buffer);
+ close(fd);
+ return false;
+ }
+ free(journal);
+ free(buffer);
+ close(fd);
+ //sync();
+ bRet = NVM_MiscIncSeqNum(sequence);
+ if ( false == bRet) {
+ NVRAM_LOG("NVM_MiscLog : update sequence number fail!!!\n");
+ return false;
+ }
+
+ return true;
+}
+bool NVM_InSpecialLidList(int file_lid, int *index) {
+ int i;
+ if (g_new_nvram_lid_count == 0) {
+ NVRAM_LOG("The spcial lid is empty!!!\n");
+ return false;
+ }
+
+ for (i = 0; i < (int)g_new_nvram_lid_count; i++) {
+ if (file_lid == g_new_nvram_lid[i].lid) {
+ *index = i;
+ break;
+ }
+ }
+
+ if (i == (int)g_new_nvram_lid_count)
+ return false;
+ else {
+ NVRAM_LOG("%d is in new nvram partition!!!\n", file_lid);
+ return true;
+ }
+}
+
+bool Check_FileVerinFirstBoot(void) {
+ int ret;
+ int max_lid_num = 0;
+ struct stat statbuf;
+
+ NVRAM_LOG("Check FILE_VER in first boot\n");
+ max_lid_num = NVM_Init();
+ if (max_lid_num <= 0) {
+ NVRAM_LOG("Check_FileVerinFirstBoot--NVM_Init fail !!!\n");
+ return false;
+ }
+ ret = stat(g_pcNVM_Flag, &statbuf);
+ if (-1 == ret) {
+ NVRAM_LOG("No RestoreFlag\n");
+ if (stat(g_akCFG_File[iFileVerInfoLID].cFileName, &statbuf) == -1
+ || !S_ISREG(statbuf.st_mode)
+ || statbuf.st_size != ((FILENAMELENGTH + FILEVERLENGTH) * (max_lid_num + 1))) {
+ NVRAM_LOG("FILE_VER is invalid, generate it manually\n");
+ return NVM_GenerateFileVer(true);
+ }
+ }
+ return true;
+}
+bool Check_UpdateStatus(void) {
+ struct stat info;
+ struct stat statbuf;
+ struct stat stb;
+ int val = 0;
+ int ret = 0;
+ int vre = 0;
+
+ NVRAM_LOG("Check if upgrade status\n");
+ val = stat(g_pcNVM, &info);
+ if (-1 == val) {
+ NVRAM_LOG("No data/nvram folder and no need to change permission\n");
+ return true;
+ } else {
+ ret = stat(g_pcNVM_MD, &statbuf);
+ //------KK->L/KK.AOSP->L
+ if ((info.st_gid != AID_SYSTEM) || (ret >= 0 && statbuf.st_uid != AID_RADIO
+ && statbuf.st_uid != AID_SYSTEM && statbuf.st_uid != AID_ROOT) || (ret >= 0
+ && statbuf.st_gid != AID_RADIO && statbuf.st_gid != AID_SYSTEM)) {
+ NVRAM_LOG("Upgrade status, need to change all files' permission!!\n");
+ if (chown("/mnt/vendor/nvdata", AID_ROOT, AID_SYSTEM)) {
+ NVRAM_LOG("Fail to change all files' permission when upgrade\n");
+ return false;
+ }
+ }
+ vre = stat(g_pcNVM_BT, &stb);
+ //------KK->cobranch/KK.AOSP->cobranch/L->cobranch
+ if (vre >= 0 && stb.st_gid != AID_BLUETOOTH) {
+ NVRAM_LOG("Upgrade status, need to change BT file permission!!\n");
+ if (chown("/mnt/vendor/nvdata/APCFG/APRDEB/BT_Addr", AID_ROOT, AID_BLUETOOTH)) {
+ NVRAM_LOG("Fail to change BT group permission when upgrade\n");
+ return false;
+ }
+ if (chmod("/mnt/vendor/nvdata/APCFG", 0771) ||
+ chmod("/mnt/vendor/nvdata/APCFG/APRDEB", 0771) ||
+ chmod("/mnt/vendor/nvdata/APCFG/APRDCL", 0771) ||
+ chmod("/mnt/vendor/nvdata/APCFG/APRDCL/FILE_VER", 0664)) {
+ NVRAM_LOG("Fail to change BT folder permission when upgrade for /mnt/vendor/nvdata\n");
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
+
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.h b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.h
new file mode 100644
index 0000000..a037554
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram.h
@@ -0,0 +1,481 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * Libnvram.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ *
+ *
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ ****************************************************************************/
+
+
+#ifndef __NVRAM_LIB_H
+#define __NVRAM_LIB_H
+
+#include "CFG_file_public.h"
+#include <stdbool.h>
+#include <time.h>
+#include <mtd/mtd-abi.h>
+#include <linux/limits.h>
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#define loff_t off_t
+#define NVRAM_JOURNAL_HANDLE_SIZE 512
+
+#define NVRAM_JOURNAL_MAGIC 0x5a5a7b7b
+#define NVRAM_MISC_JOURNAL_MAGIC 0x4D52564E
+#define MAX_FUNCTION_NAME_LENGTH 48
+#define MAX_IMEI_LENGTH 130 //IMEI is 120
+#define MAX_BARCODE_LENGTH 250 //barcode is 66
+//#define LOG_BLOCK_NUMBER 8
+//#define RESERVE_BLOCK_NUMBER 8
+#define MAX_LOG_LENGTH (NVRAM_JOURNAL_HANDLE_SIZE - 5 * sizeof(unsigned int) - sizeof(time_t) - MAX_FUNCTION_NAME_LENGTH-MAX_IMEI_LENGTH-MAX_BARCODE_LENGTH) //add by min,MAX_LOG_LENGTH must change
+#define DEFAULT_LOG_LEVEL 1
+#define NVRAM_JOURNAL_SUPER_PAGE 0
+#define NVRAM_JOURNAL_LOG_PAGE 1
+//#define NVRAM_MNT_POINT "/nvram"
+//#define MISC_MNT_POINT "/misc"
+//#define PROINFO_MNT_POINT "/proinfo"
+//#define NVDATA_MNT_POINT "/mnt/vendor/nvdata"
+
+// To prevent bad block in nand project, we save bin region to one file in file system.
+#define MTK_NVRAM_IN_A_FILE
+
+typedef struct {
+ char cFileVer[FILEVERLENGTH];
+ char cFileName[FILENAMELENGTH];
+ int i4RecSize;
+ int i4RecNum;
+ int i4MaxFileLid;
+} F_INFO;
+typedef struct {
+ int iFileDesc;
+ int ifile_lid;
+ bool bIsRead;
+} F_ID;
+
+typedef enum {
+ VerUpdate,
+ VerDel,
+ VerAdd,
+} VerInfoUpdateFlag;
+
+#pragma pack(4)
+typedef struct nvram_journal_handle {
+ unsigned int h_magic;
+ unsigned int h_type;
+ unsigned int h_sequence;
+ time_t h_utc_time;
+ char h_func_name[MAX_FUNCTION_NAME_LENGTH];
+ unsigned int h_func_line;
+ unsigned int h_log_lengeh;
+ char h_log[MAX_LOG_LENGTH];
+ unsigned char imei[MAX_IMEI_LENGTH];
+ unsigned char barcode[MAX_BARCODE_LENGTH];
+} nvram_journal_handle_t;
+#pragma pack()
+#define ISREAD 1
+#define ISWRITE 0
+#if 0
+#ifdef _WIN32
+#define LOGD(x)
+#else
+#include <log/log.h>
+#undef LOG_TAG
+#define LOG_TAG "NVRAM"
+#endif
+
+
+#define NVRAM_LOG(...) \
+ do { \
+ ALOGD(__VA_ARGS__); \
+ } while (0)
+#endif
+bool NVM_GetBackupFileNum(unsigned int * iAPBackupFileNum,
+ unsigned short *iMDBackupFileNum);
+
+bool NVM_AddBackupNum(unsigned int iModifiedFileNum, int iSrc);
+
+bool NVM_AddBackupFileNum(unsigned int iLid);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_Init
+//DESCRIPTION:
+// this function is called to call nvram pdd and get max lid.
+//
+//PARAMETERS:
+// None
+//
+//RETURN VALUE:
+// the max Lid number.
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+int NVM_Init(void);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckVerFile
+//DESCRIPTION:
+// this function is called to check the exist of versiono file information
+// in FAT 2 partition or default version.
+//
+//PARAMETERS:
+// Is_FAT2: [IN] TRUE is to check fat2 partition, otherwise check default version
+//
+//RETURN VALUE:
+// TRUE is exist, otherwise version is not exist.
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckVerFile(bool In_NVM);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_GenerateFileVer
+//DESCRIPTION:
+// this function is called to generate the version file in fat2 or user partition.
+//
+//PARAMETERS:
+// CPY_File_To_Fat2: [IN] TRUE is generate version file in FAT2 partition
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_GenerateFileVer(bool CPY_File_To_NVM);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CmpFileVerNo
+//DESCRIPTION:
+// this function is called to compare file version between FAT2 and default version.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// TRUE is same, otherwise is not same
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CmpFileVerNo(int file_lid);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFileID
+//DESCRIPTION:
+// this function is called to check the file lid and record id of nvram file.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// rec_id: [IN] the record id
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckFileID(int file_lid, int rec_id);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CheckFileInfo
+//DESCRIPTION:
+// this function is called to check file information, including the file lid
+// and record id.if the file version is not right, it wll be reset to default
+// value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// rec_id: [IN] the record id
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CheckFileInfo(int file_lid, int rec_id);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_ReadFileVerInfo
+//DESCRIPTION:
+// this function is called to read the version information of nvram file.
+// if the file version is not right, it wll be reset to default value
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// refers to the definition of "F_INFO"
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+F_INFO NVM_ReadFileVerInfo(int file_lid);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_UpdateFileVerNo
+//DESCRIPTION:
+// this function is called to reset a NvRam to default value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_UpdateFileVerNo(int file_lid, VerInfoUpdateFlag UpdateFlag);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_ResetFileToDefault
+//DESCRIPTION:
+// this function is called to reset a NvRam to default value.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_ResetFileToDefault(int file_lid);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_GetFileHandle
+//DESCRIPTION:
+// this function is called to the handle of nvram file and the information
+// of record size and number.
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+// pRecSize: [OUT] the record size
+// pRecNum: [OUT] the rocord number
+// IsRead: [IN] TRUE is read, otherwise is write
+//
+//RETURN VALUE:
+// the file handle
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+F_ID NVM_GetFileDesc(int file_lid, int *pRecSize, int *pRecNum, bool IsRead);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_CloseFileHandle
+//DESCRIPTION:
+// this function is called to close the handle which is open by GetFileHandle.
+//
+//PARAMETERS:
+// hFile: [IN] the file handle
+//
+//RETURN VALUE:
+// TRUE is success, otherwise is fail
+//
+//DEPENDENCY:
+// GetFileHandle must have been called
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+bool NVM_CloseFileDesc(F_ID iFileID);
+
+
+
+/********************************************************************************
+//FUNCTION:
+// NVM_GetLIDByName
+//DESCRIPTION:
+// this function is called to get right lid accoring to file name.
+//
+//PARAMETERS:
+// filename: [IN] the name of nvram file
+//RETURN VALUE:
+// Get lid successfully? -1 mean fail, others mean ok
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+int NVM_GetLIDByName(char* filename);
+
+/********************************************************************************
+//FUNCTION:
+// NVM_DataVerConvertAll
+//DESCRIPTION:
+// this function is called to convert all data acccording to the version info .
+//
+//PARAMETERS:
+// file_lid: [IN] the lid of nvram file
+//RETURN VALUE:
+// convert successfully?
+//
+//DEPENDENCY:
+// None
+//
+//GLOBALS AFFECTED
+// None
+********************************************************************************/
+
+
+bool NVM_DataVerConvertAll(unsigned int iOldCommonFileNum,
+ unsigned int iOldCustomFileNum);
+int NVM_DataVerConvert(int file_lid);
+int NVM_ProtectDataFile(int file_lid, bool Setflag);
+bool NVM_CheckBackFlag(int iFileDesc);
+bool NVM_CheckMDBackFlag(int iFileDesc);
+bool NVM_ComputeBackflagCheckSum(int iFileDesc);
+bool NVM_RestoreFromBinRegion_OneFile(int file_lid, const char * filename);
+bool NVM_HistoryLog(unsigned int level, const char *func, unsigned int line,
+ const char *log);
+bool NVM_HistoryLog_Time(unsigned int level, const char *func, unsigned int line,const char *log,unsigned char *time);
+unsigned int NVM_GetSequenceNum(void);
+bool NVM_IncSequenceNum(unsigned int sequence);
+bool NVM_InSpecialLidList(int file_lid, int *index);
+bool NVM_CheckFile(const char * filepath);
+
+#define NVRAM_HISTORY_LOG(n, log) NVM_HistoryLog(n, __func__, __LINE__, log)
+#define NVRAM_HISTORY_LOG_TIME(n,time,log) NVM_HistoryLog_Time(n, __func__, __LINE__, log , time)//add by min
+
+bool NVM_MiscIncSeqNum(unsigned int sequence);
+unsigned int NVM_MiscGetSeqNum(void);
+bool NVM_MiscLog(unsigned int level, const char *func, unsigned int line,
+ const char *log);
+#define NVRAM_MISC_LOG(n, log) NVM_MiscLog(n, __func__, __LINE__, log)
+
+bool NVM_GetDeviceInfo(const char *path, struct mtd_info_user *device_info);
+extern int init_nvram_platform_callback();
+
+
+bool Check_FileVerinFirstBoot(void);
+
+bool Check_UpdateStatus(void);
+
+bool NVM_EraseDeviceBlock(const char *path, struct erase_info_user erase_info);
+
+
+typedef struct NVRAM_PLATFORM {
+ int log_block;
+ int resv_block;
+ int DM_block;
+ int layout_version;
+ int header_offset;
+} NVRAM_PLATFORM_T;
+extern int nvram_platform_callback(NVRAM_PLATFORM_T* pPlatform );
+
+extern int nvram_multi_storage_support(NVRAM_PLATFORM_T* pPlatform );
+extern bool nvram_md1_support();
+extern bool nvram_md5_support();
+extern bool nvram_evdo_support();
+int NVM_CheckFileSize(int iRealFileLid, const TCFG_FILE *pCfgFielTable);
+extern bool nvram_new_partition_support();
+extern bool nvram_emmc_support();
+extern bool nvram_ecci_c2k_support();
+extern bool nvram_ufs_support();
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //__NVRAM_LIB_H
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_log.h b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_log.h
new file mode 100644
index 0000000..f00a209
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_log.h
@@ -0,0 +1,139 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2008
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * File_OP.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ * header file of main function
+ *
+ * Author:
+ * -------
+ * Nick Huang (mtk02183)
+ *
+ *------------------------------------------------------------------------------
+ * $Revision:$
+ * $Modtime:$
+ * $Log:$
+ *
+ * Jun 18 2009 mtk80306
+ * [DUMA00120904] optimize the power button and nvram
+ *
+ *
+ * Apr 29 2009 mtk80306
+ * [DUMA00116080] revise the customization of nvram
+ * revise nvram customization
+ *
+ * Mar 21 2009 mtk80306
+ * [DUMA00112158] fix the code convention.
+ * fix the codeing convention.
+ *
+ * Mar 15 2009 mtk80306
+ * [DUMA00111629] add camera nvram files
+ * add the check of bin region.
+ *
+ * Feb 23 2009 mtk80306
+ * [DUMA00109277] add meta _battery mode.
+ *
+ *
+ * Nov 24 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ * Oct 29 2008 mbj08139
+ * [DUMA00105099] create meta code
+ *
+ *
+ *
+ *
+ *******************************************************************************/
+
+#ifndef __NVRAM_LOG_H__
+#define __NVRAM_LOG_H__
+
+
+
+//#define LOG_TAG "META "
+
+
+//#define META_LOG(fmt, args...) printf(LOG_TAG fmt, ##args)
+#include <syslog.h>
+#include "log.h"
+
+#ifdef _WIN32
+#define LOGD(x)
+#else
+#undef LOG_TAG
+#define LOG_TAG "NVRAM"
+#endif
+
+//#undef ALOGD
+//#define ALOGD(...) ({printf(LOG_TAG " : " __VA_ARGS__); printf("\n");})
+
+
+#define TEXT(__a) __a
+
+#if 1
+//#define NVBAK_LOG(fmt, ...) syslog(LOG_DEBUG, fmt, ## __VA_ARGS__)
+//#define NVRAM_LOG(fmt, ...) syslog(LOG_DEBUG, fmt, ## __VA_ARGS__)
+//#define NVBAK_LOG(fmt, ...) LOG(fmt, ## __VA_ARGS__)
+//#define NVRAM_LOG(fmt, ...) LOG(fmt, ## __VA_ARGS__)
+#define NVBAK_LOG(fmt, ...) ({LOG(fmt, ## __VA_ARGS__);syslog(LOG_DEBUG, fmt, ## __VA_ARGS__);})
+#define NVRAM_LOG(fmt, ...) ({LOG(fmt, ## __VA_ARGS__);syslog(LOG_DEBUG, fmt, ## __VA_ARGS__);})
+#else
+#define NVBAK_LOG(fmt, ...) printf(fmt, ## __VA_ARGS__)
+#define NVRAM_LOG(fmt, ...) printf(fmt, ## __VA_ARGS__)
+//#define NVBAK_LOG(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__)
+//#define NVRAM_LOG(fmt, ...) fprintf(stderr, fmt, ## __VA_ARGS__)
+#endif
+
+/*****************************************************************************/
+
+
+
+
+
+
+
+#endif /* __NVRAM_LOG_H__ */
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_sec.h b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_sec.h
new file mode 100644
index 0000000..8e71a17
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/libnvram_sec.h
@@ -0,0 +1,117 @@
+/*****************************************************************************
+ * Copyright Statement:
+ * --------------------
+ * This software is protected by Copyright and the information contained
+ * herein is confidential. The software may not be copied and the information
+ * contained herein may not be used or disclosed except with the written
+ * permission of MediaTek Inc. (C) 2008
+ *
+ * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+ * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+ * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+ * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+ * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+ * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+ * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+ * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+ *
+ * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+ * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+ * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+ * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+ * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+ * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+ * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+ * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+ * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+ *
+ *****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * Libnvram_sec.h
+ *
+ * Project:
+ * --------
+ * YuSu
+ *
+ * Description:
+ * ------------
+ *
+ *
+ *
+ * Author:
+ * -------
+ * Jian lin (mtk81139)
+ *
+ ****************************************************************************/
+
+
+#ifndef __NVRAM_LIB_SEC_H
+#define __NVRAM_LIB_SEC_H
+
+#include "libnvram.h"
+#include "libnvram_log.h"
+//#include "CFG_file_lid.h"
+//#include "Custom_NvRam_LID.h"
+//#include "sec_nvram.h"
+
+
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+
+#define BOOT_MODE_FILE "/sys/class/BOOT/BOOT/boot/boot_mode"
+#define META_MODE '1'
+#define ADVMETA_MODE '5'
+#define ENCODE true
+#define DECODE false
+
+bool NVM_Enc_Dnc_File(int file_lid, bool IS_end);
+bool NVM_CheckWritePermission(bool IsRead, int file_lid);
+
+typedef struct {
+ int lid;
+ unsigned char meta_mode_write;
+ unsigned char security_enable;
+} TCFG_FILE_PROTECT;
+
+
+
+
+/* used for META library */
+#define NVRAM_CIPHER_LEN (16)
+
+/******************************************************************************
+ * MODEM CONTEXT FOR BOTH USER SPACE PROGRAM AND KERNEL MODULE
+ ******************************************************************************/
+typedef struct {
+ unsigned char data[NVRAM_CIPHER_LEN];
+ unsigned int ret;
+
+} META_CONTEXT;
+
+/******************************************************************************
+ * EXPORT FUNCTIONS
+ ******************************************************************************/
+int __attribute__((weak)) sec_nvram_enc (META_CONTEXT *meta_ctx);
+int __attribute__((weak)) sec_nvram_dec (META_CONTEXT *meta_ctx);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif //__NVRAM_LIB_H
diff --git a/src/telephonyware/3.0/mtk_nvram/src/libnvram/log.h b/src/telephonyware/3.0/mtk_nvram/src/libnvram/log.h
new file mode 100644
index 0000000..bcbe30e
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/libnvram/log.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2013 Felix Fietkau <nbd@openwrt.org>
+ * Copyright (C) 2013 John Crispin <blogic@openwrt.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1
+ * as published by the Free Software Foundation
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#ifndef __LOG_H
+#define __LOG_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <libubox/ulog.h>
+
+#ifdef URNGD_DEBUG
+#define DEBUG(level, fmt, ...) do { \
+ if (debug >= level) { \
+ ulog(LOG_DEBUG, fmt, ## __VA_ARGS__); \
+ } } while (0)
+#else
+#define DEBUG(level, fmt, ...)
+#endif
+
+#define LOG ULOG_INFO
+#define ERROR ULOG_ERR
+
+extern unsigned int debug;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/MTK_LICENSE b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/MTK_LICENSE
new file mode 100644
index 0000000..901b162
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/MTK_LICENSE
@@ -0,0 +1,35 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein
+is confidential and proprietary to MediaTek Inc. and/or its licensors.
+Without the prior written permission of MediaTek inc. and/or its licensors,
+any reproduction, modification, use or disclosure of MediaTek Software,
+and information contained herein, in whole or in part, shall be strictly prohibited.
+
+MediaTek Inc. (C) 2018. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+
+The following software/firmware and/or related documentation ("MediaTek Software")
+have been modified by MediaTek Inc. All revisions are subject to any receiver's
+applicable license agreements with MediaTek Inc.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/NOTICE b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/NOTICE
new file mode 100644
index 0000000..c3f777d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/NOTICE
@@ -0,0 +1,4 @@
+This MediaTek software package contains software with the following notices and under the following licenses:
+
+=============================================================================
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/README b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/README
new file mode 100644
index 0000000..a9d2c83
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/README
@@ -0,0 +1,37 @@
+This directory contains NvRAM daemon binary
+
+
+WHAT IT DOES?
+=============
+It provide restore NvRAM data from backup partition to file system when filesystem is empty
+And it provide callback for specific request of NvRAM modules, like do some data convert things.
+
+HOW IT WAS BUILT?
+==================
+
+It needs the following libs from AOSP:
+1. libc.so
+2. libcutils.so
+
+and the following libs from MediaTek:
+1. libnvram.so
+2. libcustom_nvram.so
+3. libfile_op
+4. libnvram_daemon_callback
+
+
+All source/dependency modules of this module are already put in
+'vendor/mediatek/libs' folder.
+
+
+HOW TO USE IT?
+==============
+
+Files in this directory is used to
+generate a binary which's name is 'nvram_daemon'
+
+The binary 'nvram_daemon'' is loaded when system boot up,
+it would do NvRAM data restore tings when file system is empty.
+
+
+All the source code of this library were written by MediaTek co..
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_daemon.c b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_daemon.c
new file mode 100644
index 0000000..392a7f4
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_daemon.c
@@ -0,0 +1,292 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+//#include <cutils/properties.h>
+#include "libnvram.h"
+#include "libnvram_log.h"
+
+#if 0
+#include "nvram_battery.h"
+#include "nvram_bt.h"
+#include "nvram_wifi.h"
+#endif
+
+//#include "nvram_touchpanel.h"
+#if 0
+ #include "nvram_acc.h"
+ #include "nvram_gyro.h"
+ #include "nvram_ps.h"
+#endif
+#include "nvram_productinfo.h"
+#include "libfile_op.h"
+enum NVRAM_USER {
+ NU_BATTERY,
+ NU_WIFI,
+ NU_BT,
+ NU_FM,
+ //NU_TOUCHPANEL,
+ NU_HWMON,
+ NU_HWMON_PS,
+ NU_PRODUCT_INFO,
+ NU_MAX
+};
+
+typedef struct _NVRAM_USER_DATA {
+ const char* pcName;
+ pthread_t kThread;
+ void* (*start_routine)(void*);
+} NVRAM_USER_DATA;
+
+static NVRAM_USER_DATA g_akNUData[NU_MAX] = {
+#if 0
+ {"Battery", 0, NVRAM_BATTERY},
+ {"Bluetooth", 0, NVRAM_BT},
+ {"WIFI", 0, NVRAM_WIFI},
+#endif
+ //{"Touchpanel", 0, NVRAM_TOUCHPANEL},
+#if 0
+ {"HWMON_ACC", 0, NVRAM_ACC},
+ {"HWMON_GYRO", 0, NVRAM_GYRO},
+ {"HWMON_PS", 0, NVRAM_PS},
+#endif
+ {"PROUDCT_INFO", 0, NVRAM_PRODUCTINFO},
+ {"None", 0, NULL}
+};
+extern int iCustomBeginLID;
+static bool bCleanBoot = true;
+extern pfCallbackForDaemon callback_for_nvram_daemon;
+
+bool Init_AllThreads_In_Nvram(void) {
+ int i, ret;
+ void* thread_result;
+ for (i = 0; i < NU_MAX; ++i) {
+ if (g_akNUData[i].start_routine) {
+ ret = pthread_create(&g_akNUData[i].kThread, NULL, g_akNUData[i].start_routine,
+ NULL);
+ if (ret != 0) {
+ //NVRAM_LOG("%s Thread creation failed\n", g_akNUData[i].pcName);
+ return false;
+ }
+ }
+ }
+ //NVRAM_LOG("Finish thread create\n");
+
+ for (i = NU_MAX - 1; i >= 0 ; --i) {
+ if (g_akNUData[i].start_routine) {
+ ret = pthread_join(g_akNUData[i].kThread, &thread_result);
+ if (ret != 0) {
+ //NVRAM_LOG("%s Thread join failed\n", g_akNUData[i].pcName);
+ return false;
+ }
+ }
+ }
+ //NVRAM_LOG("Finish thread joint\n");
+ return true;
+}
+bool Init_Productinfo_In_Nvram(void) {
+ int i, ret;
+ void* thread_result;
+ for (i = 0; i < NU_MAX; ++i) {
+ if (strcmp(g_akNUData[i].pcName, "PROUDCT_INFO") == 0) {
+ if (g_akNUData[i].start_routine) {
+ ret = pthread_create(&g_akNUData[i].kThread, NULL, g_akNUData[i].start_routine,
+ NULL);
+ if (ret != 0) {
+ //NVRAM_LOG("%s Thread creation failed\n", g_akNUData[i].pcName);
+ return false;
+ }
+ }
+ if (g_akNUData[i].start_routine) {
+ ret = pthread_join(g_akNUData[i].kThread, &thread_result);
+ if (ret != 0) {
+ //NVRAM_LOG("%s Thread join failed\n", g_akNUData[i].pcName);
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ NVRAM_LOG("PROUDCT_INFO thread is not in init list\n");
+ return false;
+}
+
+#define NVRAM_INIT_FILE_PATH "/tmp/nvram_init"
+
+int main(int argc, char** argv) {
+ int iMaxLidNum = 0;
+ int ret_callback = -1;
+ char cypto_state_value[100] = {0};
+ char nvram_init_value[100] = {0};
+ char decypt_state_value[100] = {0};
+ int iFD = -1, len = 0;
+#if 0
+ unsigned char fstab_filename[256];
+ unsigned char src1[256 + 1]; //"/odm/etc/fstab*"
+ unsigned char src2[256 + 1]; //"vendor/etc/fstab*"
+ unsigned char src3[256 + 1]; //"/fstab*"
+ unsigned char dst[256 + 12]; // "/mnt/vendor/nvdata"
+
+ /* copy /fstab.mt*** to /nvdata/fstab.mtxxx */
+ find_fstab_filename(fstab_filename, 256);
+ snprintf(src1, 256 + 1, "/odm/etc/""%s", fstab_filename);
+ snprintf(src2, 256 + 1, "/vendor/etc/""%s", fstab_filename);
+ snprintf(src3, 256 + 1, "/""%s", fstab_filename);
+ snprintf(dst, 256 + 12, "/mnt/vendor/nvdata/""%s", fstab_filename);
+
+ if (access(src1, F_OK) == 0) {
+ if (copy_file(src1, dst)) {
+ NVRAM_LOG("can't copy fstab file,src1(%s),dst(%s)!!!\n",src1,dst);
+ exit(EXIT_FAILURE);
+ }
+ }
+ else if(access(src2, F_OK) == 0) {
+ if (copy_file(src2, dst)) {
+ NVRAM_LOG("can't copy fstab file,src2(%s),dst(%s)!!!\n",src2,dst);
+ exit(EXIT_FAILURE);
+ }
+ }
+ else if(access(src3, F_OK) == 0) {
+ if (copy_file(src3, dst)) {
+ NVRAM_LOG("can't copy fstab file,src3(%s),dst(%s)!!!\n",src3,dst);
+ exit(EXIT_FAILURE);
+ }
+ }
+ else {
+ NVRAM_LOG("can't find fstab file!!!\n");
+ exit(EXIT_FAILURE);
+ }
+#endif
+ if (argc == 2) {
+ if(!strcmp("backup", argv[1])) {
+ NVRAM_LOG("into FileOp_BackupToBinRegion_All");
+ FileOp_BackupToBinRegion_All();
+ }else if(!strcmp("proinfo", argv[1])) {
+ NVRAM_LOG("Proinfo test");
+ Init_Productinfo_In_Nvram();
+ }
+ goto final;
+ }
+
+ ulog_open(ULOG_KMSG, LOG_DAEMON, "nvram_daemon");
+ iMaxLidNum = NVM_Init();
+ NVRAM_LOG("Total nvram Lid number is %d\n", iMaxLidNum);
+ umask(000);
+ if (iMaxLidNum <= 0) {
+ NVRAM_LOG("Total nvram Lid number is error !!!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ #if 0
+ if (nvram_emmc_support() || nvram_ufs_support()) {
+ if (!Check_UpdateStatus()) {
+ NVRAM_LOG("fail to check upgrade status in first boot\n");
+ }
+ }
+ #endif
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ if (!FileOp_CmpBackupFileNum()) {
+ FileOp_BackupToBinRegion_All();
+ FileOp_SetCleanBootFlag(true);
+ } else {
+#endif
+ if (!FileOp_RecoveryData())
+ //if(!FileOp_RestoreFromBinRegionForDM())
+ {
+ NVRAM_LOG("Bin Region Restore to NvRam Fail\n");
+ //exit(EXIT_FAILURE);
+ }
+#ifdef MTK_NVRAM_AUTO_BACKUP
+ }
+#endif
+
+ if (!Check_FileVerinFirstBoot()) {
+ NVRAM_LOG("Check FILE_VER in first boot, and fail to generate FILE_VER\n");
+ }
+
+ //Add for product info feature
+ #if 0
+ if (nvram_new_partition_support()) {
+ NVRAM_LOG("Begin excute customer callback!!!\n");
+ init_callback();
+ if (callback_for_nvram_daemon != NULL)
+ ret_callback = callback_for_nvram_daemon();
+ NVRAM_LOG("Callback return %d\n", ret_callback);
+ }
+ #endif
+ //end for product info feature
+
+#if 0
+ property_get("vendor.service.nvram_init", &nvram_init_value[0], "");
+
+ if (0 == property_set("vendor.service.nvram_init", "Ready")) {
+ NVRAM_LOG("Set Ready property success\n");
+ if (!Init_AllThreads_In_Nvram())
+ NVRAM_LOG("init all threads fail\n");
+ } else
+ NVRAM_LOG("Set property failed, %s\n", (char*)strerror(errno));
+#endif
+ iFD = open(NVRAM_INIT_FILE_PATH, O_CREAT | O_RDWR, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
+ if (iFD >= 0) {
+ nvram_init_value[0] = '1';
+ len = write(iFD, &nvram_init_value[0], 1);
+ if (1 == len) {
+ NVRAM_LOG("Write %s ready success\n", NVRAM_INIT_FILE_PATH);
+ } else {
+ NVRAM_LOG("Write %s ready failed\n", NVRAM_INIT_FILE_PATH);
+ }
+ close(iFD);
+ } else {
+ NVRAM_LOG("Cannot open %s\n", NVRAM_INIT_FILE_PATH);
+ }
+final:
+ NVRAM_LOG("NVRAM daemon sleep !\n");
+ NVRAM_LOG("NVRAM daemon sync start !\n");
+ sync();
+ NVRAM_LOG("NVRAM daemon sync end !\n");
+ NVRAM_LOG("NVRAM daemon exits !\n");
+ exit(EXIT_SUCCESS);
+}
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.c b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.c
new file mode 100644
index 0000000..4fcb726
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.c
@@ -0,0 +1,84 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+#include <time.h>
+#include "libnvram.h"
+#include "libnvram_log.h"
+extern int iFilePRODUCT_INFOLID;
+
+
+/* Just tell NVRAM to create Product info default record */
+void* NVRAM_PRODUCTINFO(void* arg) {
+ F_ID pin_fid = {0};
+ int rec_size = 0;
+ int rec_num = 0;
+ unsigned char proinfo_buf[1024];
+ unsigned char proinfo_wir[1024] = {0x01, 0x02, 0x03, 0x04, 0x05};
+
+ NVRAM_LOG("[NVRAM Daemon]product info lid %d ++\n", iFilePRODUCT_INFOLID);
+ pin_fid = NVM_GetFileDesc(iFilePRODUCT_INFOLID, &rec_size, &rec_num, ISWRITE);
+ NVRAM_LOG("[NVRAM Daemon] product info FID %d rec_size %d rec_num %d\n",
+ pin_fid.iFileDesc, rec_size, rec_num);
+
+ if (read(pin_fid.iFileDesc, &proinfo_buf, rec_num * rec_size) < 0) {
+ NVRAM_LOG("Read NVRAM fails %d\n", errno);
+ NVM_CloseFileDesc(pin_fid);
+ return NULL;
+ }
+
+ lseek(pin_fid.iFileDesc, 0, 0);
+
+ if (write(pin_fid.iFileDesc, &proinfo_wir, rec_num * rec_size) < 0) {
+ NVRAM_LOG("Initialize NVRAM fails %d\n", errno);
+ }
+
+ if (!NVM_CloseFileDesc(pin_fid))
+ NVRAM_LOG("[NVRAM Daemon] close product info error");
+
+ pthread_exit(NULL);
+ return NULL;
+}
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.h b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.h
new file mode 100644
index 0000000..046f870
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_daemon_src/nvram_productinfo.h
@@ -0,0 +1,48 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#ifndef __NVRAM_PRODUCTINFO_H__
+#define __NVRAM_PRODUCTINFO_H__
+void* NVRAM_PRODUCTINFO(void* arg);
+#endif
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/MTK_LICENSE b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/MTK_LICENSE
new file mode 100644
index 0000000..901b162
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/MTK_LICENSE
@@ -0,0 +1,35 @@
+Copyright Statement:
+
+This software/firmware and related documentation ("MediaTek Software") are
+protected under relevant copyright laws. The information contained herein
+is confidential and proprietary to MediaTek Inc. and/or its licensors.
+Without the prior written permission of MediaTek inc. and/or its licensors,
+any reproduction, modification, use or disclosure of MediaTek Software,
+and information contained herein, in whole or in part, shall be strictly prohibited.
+
+MediaTek Inc. (C) 2018. All rights reserved.
+
+BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER ON
+AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES TO LOOK ONLY TO SUCH
+THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. RECEIVER EXPRESSLY ACKNOWLEDGES
+THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES
+CONTAINED IN MEDIATEK SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK
+SOFTWARE RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND
+CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY RECEIVER TO
+MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+
+The following software/firmware and/or related documentation ("MediaTek Software")
+have been modified by MediaTek Inc. All revisions are subject to any receiver's
+applicable license agreements with MediaTek Inc.
+
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/NOTICE b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/NOTICE
new file mode 100644
index 0000000..c3f777d
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/NOTICE
@@ -0,0 +1,4 @@
+This MediaTek software package contains software with the following notices and under the following licenses:
+
+=============================================================================
+
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/README b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/README
new file mode 100644
index 0000000..732c805
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/README
@@ -0,0 +1,35 @@
+This directory contains NvRAM test binary
+
+
+WHAT IT DOES?
+=============
+It provides to backup NvRAM data to bin region
+
+
+HOW IT WAS BUILT?
+==================
+
+It needs the following libs from AOSP:
+1. libc.so
+2. libcutils.so
+
+and the following libs from MediaTek:
+1. libnvram.so
+2. libfile_op
+
+
+All source/dependency modules of this module are already put in
+'vendor/mediatek/libs' folder.
+
+
+HOW TO USE IT?
+==============
+
+Files in this directory is used to
+generate a binary which's name is 'nvram_test'
+
+The binary 'nvram_test' is loaded when system boot up,
+it would do NvRAM data backup operation.
+
+
+All the source code of this library were written by MediaTek co..
diff --git a/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/nvram_test.c b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/nvram_test.c
new file mode 100644
index 0000000..f70df81
--- /dev/null
+++ b/src/telephonyware/3.0/mtk_nvram/src/nvram_test_src/nvram_test.c
@@ -0,0 +1,65 @@
+/* Copyright Statement:
+ *
+ * This software/firmware and related documentation ("MediaTek Software") are
+ * protected under relevant copyright laws. The information contained herein is
+ * confidential and proprietary to MediaTek Inc. and/or its licensors. Without
+ * the prior written permission of MediaTek inc. and/or its licensors, any
+ * reproduction, modification, use or disclosure of MediaTek Software, and
+ * information contained herein, in whole or in part, shall be strictly
+ * prohibited.
+ *
+ * MediaTek Inc. (C) 2010. All rights reserved.
+ *
+ * BY OPENING THIS FILE, RECEIVER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+ * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+ * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO RECEIVER
+ * ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL
+ * WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
+ * NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH
+ * RESPECT TO THE SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY,
+ * INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK SOFTWARE, AND RECEIVER AGREES
+ * TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO.
+ * RECEIVER EXPRESSLY ACKNOWLEDGES THAT IT IS RECEIVER'S SOLE RESPONSIBILITY TO
+ * OBTAIN FROM ANY THIRD PARTY ALL PROPER LICENSES CONTAINED IN MEDIATEK
+ * SOFTWARE. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE
+ * RELEASES MADE TO RECEIVER'S SPECIFICATION OR TO CONFORM TO A PARTICULAR
+ * STANDARD OR OPEN FORUM. RECEIVER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S
+ * ENTIRE AND CUMULATIVE LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE
+ * RELEASED HEREUNDER WILL BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE
+ * MEDIATEK SOFTWARE AT ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE
+ * CHARGE PAID BY RECEIVER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+ *
+ * The following software/firmware and/or related documentation ("MediaTek
+ * Software") have been modified by MediaTek Inc. All revisions are subject to
+ * any receiver's applicable license agreements with MediaTek Inc.
+ */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/time.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <pthread.h>
+#include "libnvram.h"
+#include "libnvram_log.h"
+
+int main(int argc, char** argv) {
+ ulog_open(ULOG_KMSG, LOG_DAEMON, "nvram_test");
+ if (argc != 2) {
+ NVRAM_LOG("Usage: nvram_test <command>");
+ }
+
+ if(!strcmp("backup", argv[1])) {
+ FileOp_BackupToBinRegion_All();
+ } else if (!strcmp("clearBinRegion", argv[1])) {
+ FileOp_ClearBinRegion();
+ } else {
+ NVRAM_LOG("%s doesn't support this command, %s", argv[0], argv[1]);
+ }
+ exit(EXIT_SUCCESS);
+}