[Feature]Upload Modem source code

Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/tools/NVRAMStatistic/src/nvram_gen_util.c b/mcu/tools/NVRAMStatistic/src/nvram_gen_util.c
new file mode 100644
index 0000000..2500552
--- /dev/null
+++ b/mcu/tools/NVRAMStatistic/src/nvram_gen_util.c
@@ -0,0 +1,1456 @@
+/*****************************************************************************
+*  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) 2006
+*
+*  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_gen_util.c
+ *
+ * Project:
+ * --------
+ *   MAUI
+ *
+ * Description:
+ * ------------
+ *   This file is intends for generating NVRAM information.
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ *             HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *
+ * removed!
+ * removed!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+
+#ifndef NVRAM_NOT_PRESENT
+/*
+ * Include
+ */
+#include <string.h>
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <sys/io.h>
+#include "kal_public_api.h"
+
+#include "nvram_auto_gen.h"
+#if defined(__MMI_FMI__)
+#include "nvram_user_defs.h"
+#endif
+#include "nvram_defs.h" /* NVRAM_MSP_ALIGNMENT_REMAINDER */
+#include "custom_nvram_cat.h"
+#include "custom_nvram_config.h"  /* __NVRAM_VENDOR_SUPPORT__ */
+#include "nvram_editor_data_item.h"
+#include "nvram_group_editor.h" //add for break group files from header file
+#ifdef __NVRAM_PSEUDO_MERGE__
+#include "nvram_pseudo_merge.h"
+#endif
+
+#include "nvram_internal.h"
+
+#include "custom_nvram_int_config.h"
+#ifdef __NV_CHKSUM_ENHANCE__
+#include "custom_nvram_sec.h"   // add ,get checksum type/size.
+
+/* CUSTOM_CHK_ALGO_CONFIG configure*/
+extern nvram_checksum_config CUSTOM_CHK_ALGO_CONFIG;
+kal_uint32 get_checksum_size(nvram_ltable_entry_struct* ldi);
+#endif
+
+kal_uint32 custpack_total_to_verify = 0;
+
+#ifdef __NVRAM_VENDOR_SUPPORT__
+kal_uint32 nvram_vendor_reserve_size = NVRAM_MAX_VENDOR_LID_SIZE;
+#endif
+
+#ifdef __NVRAM_OTP__
+kal_uint32 otp_total_to_verify = 0;
+kal_uint32 otp_size_to_verify = 0;
+#endif
+
+kal_uint32 secupack_total_to_verify = 0;
+kal_uint32 secupack_size_to_verify = 0;
+kal_uint16 secupack_idx = 0;
+
+#if defined(__NVRAM_SECURE_DATA_STORAGE__)
+kal_uint32 sds_total_to_verify = 0;
+kal_uint32 sds_size_to_verify = 0;
+#endif
+
+kal_uint32 nvram_gen_backup_size = 0;
+kal_uint32 nvram_gen_backup_total = 0;
+
+boot_mode_type system_boot_mode;
+
+
+nvram_ltable_entry_struct *logical_data_item_table;
+
+kal_uint32 nvram_gen_total_lid;
+
+/* Fake free_ilm */
+void free_int_ilm(ilm_struct *ilm_ptr, kal_char* file_name, kal_uint32 line)
+{
+}
+
+#define IS_POWER_OF_2(v) ((v & (v - 1)) == 0)
+
+
+ltable_entry_struct logical_data_item_table_internal[] =
+{
+    {
+        NVRAM_EF_SYS_LID,
+        NVRAM_EF_SYS_TOTAL,
+        NVRAM_EF_SYS_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_FF_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT_L1,
+        NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_MULTIPLE,
+        "MT00",
+        VER(NVRAM_EF_SYS_LID)
+    },
+#ifdef __NVRAM_SUPPORT_CUSTPACK__
+    {
+        NVRAM_EF_CUSTPACK_VERNO_LID,
+        NVRAM_EF_CUSTPACK_VERNO_TOTAL,
+        NVRAM_EF_CUSTPACK_VERNO_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_INTERNAL,
+        NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_AVERAGE,
+        "MT02",
+        VER(NVRAM_EF_CUSTPACK_VERNO_LID)
+    },
+#endif
+    {
+        NVRAM_EF_NVRAM_LOCK_LID,
+        NVRAM_EF_NVRAM_LOCK_TOTAL,
+        NVRAM_EF_NVRAM_LOCK_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_FF_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT,
+        NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_CONFIDENTIAL | NVRAM_ATTR_FAULT_ASSERT | NVRAM_ATTR_COMMITTED
+        #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
+         | NVRAM_ATTR_MSP | NVRAM_ATTR_MULTIPLE
+        #endif
+        ,
+        "NV01",
+        VER(NVRAM_EF_NVRAM_LOCK_LID)
+    },
+#ifdef __NVRAM_READ_RESERVED_FILE__    
+    {
+        NVRAM_EF_READ_RESERVED_LID,
+        NVRAM_EF_READ_RESERVED_TOTAL,
+        NVRAM_EF_READ_RESERVED_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_RESERVED,
+        NVRAM_ATTR_AVERAGE,
+        "NONE",
+        VER(NVRAM_EF_READ_RESERVED_LID)
+    },
+#endif    
+#ifdef __NVRAM_UNIT_TEST__
+    {
+        NVRAM_EF_NVRAM_UNIT_TEST_LID,
+        NVRAM_EF_NVRAM_UNIT_TEST_TOTAL,
+        NVRAM_EF_NVRAM_UNIT_TEST_SIZE,
+        NVRAM_NORMAL((const kal_uint8 *)NVRAM_EF_ZERO_DEFAULT),
+#ifdef __SECURE_DATA_STORAGE__
+        NVRAM_CATEGORY_INTERNAL,
+#else
+        NVRAM_CATEGORY_USER,
+#endif
+        NVRAM_ATTR_AVERAGE,
+        "MT10",
+        VER(NVRAM_EF_NVRAM_UNIT_TEST_LID)
+    },
+#endif
+
+#if defined (__NVRAM_UT_TEST__)
+
+    {
+        NVRAM_EF_NVRAM_TEST_1_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "MTT1",
+        VER(NVRAM_EF_NVRAM_TEST_1_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_2_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_INTERNAL,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "MTT2",
+        VER(NVRAM_EF_NVRAM_TEST_2_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_3_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_CALIBRAT,
+        NVRAM_ATTR_AVERAGE,
+        "MTT3",
+        VER(NVRAM_EF_NVRAM_TEST_3_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_4_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT
+        #if defined (__CCCIFS_SUPPORT__)
+        | NVRAM_ATTR_COMMITTED
+        #endif
+        ,
+        "MTT4",
+        VER(NVRAM_EF_NVRAM_TEST_4_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_5_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT_L1,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "MTT5",
+        VER(NVRAM_EF_NVRAM_TEST_5_LID)
+    },
+    
+    {
+        NVRAM_EF_NVRAM_TEST_6_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT_L4,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_CHKSUM_INTEGRATE
+        #if defined (__CCCIFS_SUPPORT__)
+         | NVRAM_ATTR_COMMITTED
+        #endif
+        ,
+        "MTT6",
+        VER(NVRAM_EF_NVRAM_TEST_6_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_7_LID,
+        1, //NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_CALIBRAT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_RAW_DATA,
+        "MTT7",
+        VER(NVRAM_EF_NVRAM_TEST_7_LID)
+    },
+
+    {
+        NVRAM_EF_NVRAM_TEST_8_LID,
+        NVRAM_EF_TEST_8_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_8_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_CHKSUM_INTEGRATE,
+        "MTT8",
+        VER(NVRAM_EF_NVRAM_TEST_8_LID)
+    },     
+    {
+        NVRAM_EF_NVRAM_TEST_9_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA_FOR_QUERY,
+        "MTT9",
+        VER(NVRAM_EF_NVRAM_TEST_9_LID)
+    },
+    {
+        NVRAM_EF_NVRAM_TEST_10_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA_BY_OP,
+        "MTTA",
+        VER(NVRAM_EF_NVRAM_TEST_10_LID)
+    },
+    {
+        NVRAM_EF_NVRAM_TEST_11_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_MCF_OTA_BY_OP,
+        "MTTB",
+        VER(NVRAM_EF_NVRAM_TEST_11_LID)
+    },
+    {
+        NVRAM_EF_NVRAM_TEST_12_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA,
+        "MTTC",
+        VER(NVRAM_EF_NVRAM_TEST_12_LID)
+    },
+    {
+        NVRAM_EF_INTERNAL_13_LID,
+        NVRAM_EF_TEST_13_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_13_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_IMPORTANT_L1,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "MTTD",
+        VER(NVRAM_EF_INTERNAL_13_LID)
+    },
+    {
+        NVRAM_EF_INTERNAL_TEST_14_LID,
+        NVRAM_EF_TEST_14_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_14_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
+        "MTTE",
+        VER(NVRAM_EF_INTERNAL_TEST_14_LID)
+    },
+	{
+        NVRAM_EF_INTERNAL_TEST_16_LID,
+        NVRAM_EF_INTERNAL_TEST_16_LID_RECORD_TOTAL,
+        NVRAM_EF_INTERNAL_TEST_16_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_CALIBRAT,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_CHKSUM_INTEGRATE | NVRAM_ATTR_FAULT_ASSERT,
+        "MTTG",
+        VER(NVRAM_EF_INTERNAL_TEST_16_LID)
+    },
+    {
+        NVRAM_EF_INTERNAL_TEST_17_LID,
+        NVRAM_EF_TEST_LID_RECORD_TOTAL,
+        NVRAM_EF_TEST_LID_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_USER,
+        NVRAM_ATTR_AVERAGE | NVRAM_ATTR_MULTIPLE,
+        "MTTH",
+        VER(NVRAM_EF_INTERNAL_TEST_17_LID)
+    },
+#endif
+
+#if defined(__NVRAM_STRUCTURE_CHANGE_RESET__) || defined(__NVRAM_DEFVAL_CHANGE_RESET__)
+    {
+        NVRAM_EF_CHKSUM_RESET_REC_LID,
+        NVRAM_EF_CHKSUM_RESET_REC_LID_TOTAL,
+        NVRAM_EF_CHKSUM_RESET_REC_SIZE,
+        NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
+        NVRAM_CATEGORY_INTERNAL,
+        NVRAM_ATTR_AVERAGE,
+        "MTCR", //NVRAM check sum reset
+        VER(NVRAM_EF_CHKSUM_RESET_REC_LID)
+    },
+#endif
+
+};
+
+/*****************************************************************************
+* FUNCTION
+*  nvram_gen_assign_entry
+* DESCRIPTION
+*  construct table
+* PARAMETERS
+*  position    [IN]
+*  ldi         [IN]
+* RETURNS
+*  none
+*****************************************************************************/
+void nvram_gen_assign_entry(nvram_ltable_entry_struct* ldi)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+    kal_int32 value;
+    kal_uint32 section_size;
+    
+    kal_uint32 tbl_idx = 0, entry_idx = 0;
+    kal_uint32 nvram_checksum_size = 0;
+    
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    #ifdef __NV_CHKSUM_ENHANCE__
+    nvram_checksum_size = get_checksum_size(ldi); // get nvram_checksum_size , read CUSTOM_CHK_ALGO_CONFIG.
+    #else
+    nvram_checksum_size = NVRAM_CHKSUM_SIZE;
+    #endif
+    
+    /*  Step 1:  Adjust attr / Category
+        Step 2:  Verify
+        Step 3:  Statistics */
+    
+    //Tool check begin: nvram_pre_gen.pl check if it is same as nvram_assign_table_entry() and nvram_gen_assign_entry() 
+    //***************************************************************************
+    // Adjust Attr/Category I
+    //     Do not need multiple attribute if nvram saved on nor flash
+    //***************************************************************************
+    if( (ldi->total_records < 2) && ( (ldi->attr & NVRAM_ATTR_MULTIREC_READ) || (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)))
+    {
+        fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_MULTIREC_READ or NVRAM_ATTR_MULTI_DEFAULT for the lid with only one record, %d, %s\n", ldi->LID, ldi->str_LID);
+        exit(3); /* NVRAM_EXIT_CODE_ERROR */
+    }
+
+    if (ldi->default_value == (kal_uint8 const*)NVRAM_EF_FF_DEFAULT ||
+        ldi->default_value == (kal_uint8 const*)NVRAM_EF_ZERO_DEFAULT)
+    {
+        #if defined (__NVRAM_UT_TEST__)
+        // Don't remove test lid gen default attribute
+        if(ldi->LID < NVRAM_EF_NVRAM_UNIT_TEST_LID || ldi->LID > NVRAM_EF_NVRAM_UNIT_TEST_LID_END)
+        #endif
+        if((ldi->attr & NVRAM_ATTR_GEN_DEFAULT) && !(NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category)))
+        {
+           fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_GEN_DEFAULT for the lid with Zero or FF default value, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+
+    if(NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category) && !(ldi->attr & NVRAM_ATTR_GEN_DEFAULT))
+    {
+        fprintf(stderr,
+                "Must Set the NVRAM_ATTR_GEN_DEFAULT for L4 Category LID, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+    }
+    
+    //***************************************************************************
+    // Adjust Attr/Category II
+    //     MULTIPLE / BACKUP_RAW / BACKUP_FAT  are mutually exclusive
+    //***************************************************************************
+    if (NVRAM_IS_CATEGORY_CALIBRAT(ldi->category))
+    {
+        if((ldi->attr &NVRAM_ATTR_RESERVE_BACKWARD) || (ldi->attr &NVRAM_ATTR_MULTIPLE))
+        {
+            fprintf(stderr,
+                "Can't Set NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_RESERVE_BACKWARD for Calibrate Lid, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }    
+    #if defined(__NVRAM_BACKUP_DISK_FAT__)
+
+        if((ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_BACKUP_RAW))
+        {
+            fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_BACKUP_RAW for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        if((ldi->attr & NVRAM_ATTR_BACKUP_FAT) == 0)
+        {
+            fprintf(stderr,
+                "Should set the NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        
+    #elif defined(__NVRAM_BACKUP_DISK_RAW__)
+        if((ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_BACKUP_FAT))
+        {
+            fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        if((ldi->attr & NVRAM_ATTR_BACKUP_RAW) == 0)
+        {
+            fprintf(stderr,
+                "Should set the NVRAM_ATTR_BACKUP_RAW for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    #else
+        #if !defined(__LOW_COST_SUPPORT_COMMON__) && !defined(__CCCIFS_SUPPORT__) && !defined(__FS_RAMDISK__)
+        if((ldi->attr & NVRAM_ATTR_MULTIPLE) == 0)
+        {
+            fprintf(stderr,
+                "Should set the NVRAM_ATTR_MULTIPLE for Calibrat under this scenario, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        #endif
+        if((ldi->attr & NVRAM_ATTR_BACKUP_RAW) || (ldi->attr & NVRAM_ATTR_BACKUP_FAT))
+        {
+            fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_BACKUP_RAW/NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    #endif
+    }
+
+    //***************************************************************************
+    // Adjust Attr/Category III
+    //     Just apply to smartphone
+    //     1: When AP side clean boot, nvram will reset all lid
+    //     2: When Modern side restore factory, nvram only reset data item in NVD_DATA
+    //        and don't care about data item in folder A & B
+    //     3: So, turn off NVRAM_CATEGORY_FACTORY
+    //***************************************************************************
+#if defined(__CCCIFS_SUPPORT__)
+    if (NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) || NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category))
+    {
+        if((ldi->attr & NVRAM_ATTR_RESERVE_BACKWARD))
+        {
+            fprintf(stderr,
+                "Can't Set the NVRAM_ATTR_RESERVE_BACKWARD for Important/Impotant_L4, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        if((ldi->attr & NVRAM_ATTR_COMMITTED) == 0)
+        {
+            fprintf(stderr,
+                "Suggest Set the NVRAM_ATTR_COMMITTED for Important/Impotant_L4, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }   
+#endif
+
+    //***************************************************************************
+    // Adjust Attr/Category IV
+    //       OTP category cannot use with many attribute together. Because it cannot be reset
+    //       OTP category also cannot use with other category together.
+    //***************************************************************************
+#ifdef __NVRAM_OTP__
+    if (NVRAM_IS_CATEGORY_OTP(ldi->category))
+    {
+        if( (ldi->attr & NVRAM_ATTR_WRITEPROTECT) || (ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_MSP) || (ldi->attr & NVRAM_ATTR_OTA_RESET) )
+        {
+            fprintf(stderr,
+                "Can't Set NVRAM_ATTR_WRITEPROTECT/NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_MSP/NVRAM_ATTR_OTA_RESET for OTP, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+#endif
+
+    //***************************************************************************
+    // Adjust Attr/Category V
+    //      Add pseudo merge attribute
+    //***************************************************************************
+    /* Record data item will be restored (end) */
+#ifdef __NVRAM_PSEUDO_MERGE__
+    if (!NVRAM_IS_CATEGORY_INTERNAL(ldi->category) &&
+        !NVRAM_IS_CATEGORY_SECUPACK(ldi->category) &&
+        !NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) &&
+        !NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) &&
+    #ifdef __NVRAM_CUSTOM_SENSITIVE__
+        !NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category) &&
+    #endif
+    #ifdef __NVRAM_CUSTOM_DISK__
+        !NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category) &&
+    #endif
+          ((ldi->size + nvram_checksum_size) * ldi->total_records < NVRAM_CLUSTER_SIZE))
+    {
+        if((ldi->attr & NVRAM_ATTR_PACKAGE) == 0)
+        {
+            fprintf(stderr,
+                "Should set the NVRAM_ATTR_PACKAGE for this lid %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+
+    if (NVRAM_IS_ATTR_PACKAGE(ldi->attr))
+    {
+        ldi->description = NULL;
+        if( (ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_MSP))
+        {
+            fprintf(stderr,
+                "Can't Set NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_MSP for PACKAGE Lid, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+        }
+    #endif
+
+    //***************************************************************************
+    // Adjust Attr/Category VI
+    //      Add MSP, confidential, multiple with secupack item
+    //***************************************************************************
+
+    if (NVRAM_IS_CATEGORY_SECUPACK(ldi->category))
+    {
+        if(!(ldi->attr & NVRAM_ATTR_CONFIDENTIAL) 
+            #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__ 
+            || !(ldi->attr & NVRAM_ATTR_MSP)
+            #endif
+         )
+        {
+            fprintf(stderr,
+                "Should set the NVRAM_ATTR_MSP/NVRAM_ATTR_CONFIDENTIAL, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+
+    //***************************************************************************
+    // Adjust Attr/Category VII
+    //      Add MSP, confidential, multiple with custom sensitve data
+    //***************************************************************************
+
+#ifdef __NVRAM_CUSTOM_SENSITIVE__
+    if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category))
+    {
+        if( !(ldi->attr & NVRAM_ATTR_MSP) || !(ldi->attr & NVRAM_ATTR_CONFIDENTIAL) || !(ldi->attr & NVRAM_ATTR_MULTIPLE))
+        {
+            fprintf(stderr,
+                "Should Set the NVRAM_ATTR_MSP/NVRAM_ATTR_CONFIDENTIAL/NVRAM_ATTR_MULTIPLE, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+#endif
+
+    //***************************************************************************
+    // Adjust Attr/Category
+    //      Simulation/Palladium/FPGA remove NVRAM_ATTR_GEN_DEFAULT
+    //***************************************************************************
+#if defined(_SIMULATION) || defined(__PALLADIUM__) || defined(__FPGA__)
+    if (!NVRAM_IS_CATEGORY_INTERNAL(ldi->category))
+    {
+        ldi->attr &= ~(NVRAM_ATTR_GEN_DEFAULT);
+    }
+#endif
+
+    //***************************************************************************
+    // Adjust Attr/Category VIII
+    //      remove all attribute if the data is in custom disk
+    //***************************************************************************
+#ifdef __NVRAM_CUSTOM_DISK__
+    if (NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category))
+    {
+        if(ldi->attr != NVRAM_ATTR_AVERAGE)
+        {
+            fprintf(stderr,
+                "Can't set other attribute except NVRAM_ATTR_AVERAGE, %d, %s\n", ldi->LID, ldi->str_LID);
+                exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+#endif
+
+    //***************************************************************************
+    // Adjust Attr/Category X
+    //      1. Compress the data in MT table and it is in custpack
+    //      2. Compress the default value of the data not in MT table
+    //         and its default value is not zero default or ff default
+    // coppress function had phaseout
+    //***************************************************************************
+
+    //***************************************************************************
+    // Adjust Attr/Category XI
+    //      Put Internal, Calibration, Important data into SDS
+    //***************************************************************************
+#if defined(__NVRAM_SECURE_DATA_STORAGE__)
+    if (NVRAM_IS_CATEGORY_INTERNAL(ldi->category) ||
+        NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) ||
+        NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) ||
+        NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category))
+    {
+        ldi->category |= NVRAM_CATEGORY_BACKUP_SDS;
+
+        ldi->attr &= ~ NVRAM_ATTR_MULTIPLE;
+        ldi->attr &= ~ NVRAM_ATTR_RING;
+        ldi->attr &= ~ NVRAM_ATTR_PACKAGE;
+        ldi->attr &= ~ NVRAM_ATTR_BACKUP_FAT;
+        ldi->attr &= ~ NVRAM_ATTR_BACKUP_RAW;
+    }
+    #endif
+    //Tool check end: nvram_pre_gen.pl
+
+    //***************************************************************************
+    // Check I
+    //     cannot put the data into two categories that are mutually exclusive
+    //***************************************************************************
+
+    value = (ldi->category &
+             (NVRAM_CATEGORY_INTERNAL
+             | NVRAM_CATEGORY_CALIBRAT
+             | NVRAM_CATEGORY_IMPORTANT
+             | NVRAM_CATEGORY_IMPORTANT_L4
+             | NVRAM_CATEGORY_IMPORTANT_L1
+            #ifdef __NVRAM_CUSTOM_SENSITIVE__
+             | NVRAM_CATEGORY_CUSTOM_SENSITIVE
+            #endif
+            #ifdef __NVRAM_CUSTOM_DISK__
+             | NVRAM_CATEGORY_CUSTOM_DISK
+            #endif
+             ));
+
+    /* check if value is power of 2 */
+    if (!IS_POWER_OF_2(value))
+    {
+        fprintf(stderr,
+                "Category inernal & calibrate & important & sensitive can't be used at the same time!, %d, %s\n", ldi->LID, ldi->str_LID);
+        exit(3); /* NVRAM_EXIT_CODE_ERROR */
+
+    }
+
+
+    //***************************************************************************
+    // Check II
+    //     cannot put the sds data with custom
+    //***************************************************************************
+#if defined(__NVRAM_SECURE_DATA_STORAGE__)
+    if (NVRAM_IS_CATEGORY_BACKUP_SDS(ldi->category))
+    {
+        if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category) ||
+            NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category)      ||
+            NVRAM_IS_CATEGORY_OTP(ldi->category))
+        {
+            fprintf(stderr,"Error: Sds use with wrong category LID:%s Desc:%s category %d\n",
+                ldi->str_LID, ldi->str_LID, ldi->category);
+
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+
+        if ((ldi->attr & NVRAM_ATTR_MULTIPLE)   ||
+            (ldi->attr & NVRAM_ATTR_RING)       ||
+            (ldi->attr & NVRAM_ATTR_PACKAGE)    ||
+            (ldi->attr & NVRAM_ATTR_BACKUP_FAT) ||
+            (ldi->attr & NVRAM_ATTR_BACKUP_RAW))
+        {
+            fprintf(stderr,"Error: Sds use with wrong attribute LID:%s Desc:%s attribute %d\n",
+                ldi->str_LID, ldi->str_LID, ldi->attr);
+
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+
+
+    #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
+        if (ldi->attr & NVRAM_ATTR_MSP)
+        {
+                /* 16 byte alignment */
+            section_size = ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size);
+        }
+        else
+    #endif
+        {
+            section_size = ldi->size + nvram_checksum_size;
+        }
+
+        if (section_size * ldi->total_records > NVRAM_CUSTOM_CFG_MAX_RECORD_SIZE)
+        {
+            fprintf(stderr,"Error: Data is too large to put into sds LID:%s Desc:%s %d %d\n",
+                ldi->str_LID, ldi->str_LID, ldi->size, ldi->total_records);
+
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+#endif
+
+
+    //***************************************************************************
+    // Check (III)
+    //     Cannot use zero default or ff default with multi default
+    //***************************************************************************
+
+    if (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)
+    {
+        if (strcmp(ldi->str_default_value, "NVRAM_EF_ZERO_DEFAULT") == 0 ||
+            strcmp(ldi->str_default_value, "NVRAM_EF_FF_DEFAULT") == 0)
+        {
+            fprintf(stderr,
+                "Cannot set ZERO_DEFAULT or FF_DEFAULT with multi_default!, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3);
+        }
+    }
+
+    //***************************************************************************
+    // Check (IV)
+    //     The record size cannot bigger than the biggest control buffer
+    //***************************************************************************
+#ifndef __NVRAM_LARGE_RECORD_SIZE__
+
+#ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
+    if (ldi->attr & NVRAM_ATTR_MSP)
+    {
+            /* 16 byte alignment */
+        section_size = ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size);
+    }
+    else
+#endif
+    {
+        section_size = ldi->size + nvram_checksum_size;
+    }
+
+
+
+    if (section_size > NVRAM_CUSTOM_CFG_MAX_RECORD_SIZE)
+    {
+        fprintf(stderr,
+                "LID Size is too big!, %d, %s\n", ldi->LID, ldi->str_LID);
+        exit(3);
+    }
+#endif
+
+    //***************************************************************************
+    // Check V
+    //      Items in custpack cannot use zero default or ff default as the default value
+    //***************************************************************************
+    if (NVRAM_IS_CATEGORY_CUSTPACK(ldi->category))
+    {
+        if (strcmp(ldi->str_default_value, "NVRAM_EF_ZERO_DEFAULT") == 0 ||
+            strcmp(ldi->str_default_value, "NVRAM_EF_FF_DEFAULT") == 0)
+        {
+            fprintf(stderr,
+                "Cannot set ZERO_DEFAULT or FF_DEFAULT with custpack!, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3);
+
+        }
+    }
+    
+    //***************************************************************************
+    // Check VI
+    //     Build error check: CALIBRAT LID should not have NVRAM_ATTR_OTA_RESET attribute.
+    //***************************************************************************
+    if (NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) && (ldi->attr&NVRAM_ATTR_OTA_RESET))
+    {
+        fprintf(stderr,
+                "Error usage: NVRAM_ATTR_SW_VERNO_REST and NVRAM_CATEGORY_CALIBRAT should not use together!, %d, %s\n", ldi->LID, ldi->str_LID);
+            exit(3);
+            
+    }
+    
+    //***************************************************************************
+    //  Statistics I
+    //      calculate the custpack
+    //***************************************************************************
+    if (NVRAM_IS_CATEGORY_CUSTPACK(ldi->category))
+    {
+        custpack_total_to_verify++;
+    }
+    //***************************************************************************
+    //  Statistics II
+    //      calculate the secupack
+    //***************************************************************************
+
+    if (NVRAM_IS_CATEGORY_SECUPACK(ldi->category))
+    {
+        secupack_total_to_verify++;
+
+        if (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)
+        {
+            secupack_size_to_verify += ldi->size * ldi->total_records + nvram_checksum_size;
+        }
+        else
+        {
+            secupack_size_to_verify += ldi->size + nvram_checksum_size;
+        }
+    }
+
+    //***************************************************************************
+    //  Statistics III
+    //      calculate the otp
+    //***************************************************************************
+#ifdef __NVRAM_OTP__
+    if (NVRAM_IS_CATEGORY_OTP(ldi->category))
+    {
+        otp_total_to_verify++;
+        otp_size_to_verify += ldi->size * ldi->total_records;
+    }
+#endif /* __NVRAM_OTP__ */
+
+
+    //***************************************************************************
+    //  Statistics IV
+    //      calculate the vendor reserve size
+    //***************************************************************************
+
+#ifdef __NVRAM_VENDOR_SUPPORT__
+    if (is_customregion)
+    {
+        kal_uint32 section_size = ldi->size * ldi->total_records + nvram_checksum_size;
+        if (section_size < nvram_vendor_reserve_size)
+        {
+            nvram_vendor_reserve_size -= section_size;
+        }
+        else
+        {
+            fprintf(stderr,
+                    "My dear, total size for vendor nvram shouldn't be larger than %d!\n", NVRAM_MAX_VENDOR_LID_SIZE);
+            exit(3); /* NVRAM_EXIT_CODE_ERROR */
+        }
+    }
+#endif /* __NVRAM_VENDOR_SUPPORT__ */
+
+    //***************************************************************************
+    //  Statistics IV
+    //      calculate the vendor reserve size
+    //***************************************************************************
+#if defined(__NVRAM_SECURE_DATA_STORAGE__)
+    if (NVRAM_IS_CATEGORY_BACKUP_SDS(ldi->category))
+    {
+        sds_total_to_verify++;
+        sds_size_to_verify += (ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size)) * ldi->total_records;
+    }
+#endif
+
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_assign_cat_entry
+ * DESCRIPTION
+ * PARAMETERS
+ * RETURNS
+ *****************************************************************************/
+static void nvram_gen_assign_cat_default_value(nvram_lid_enum position, nvram_cat_replace_setting* cat_item)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    if (cat_item->size != logical_data_item_table[position].size ||
+        cat_item->total_records != logical_data_item_table[position].total_records)
+    {
+        return;
+    }
+
+    logical_data_item_table[position].default_value = cat_item->default_value;
+
+    if (cat_item->is_multi_default)
+    {
+        logical_data_item_table[position].attr &= NVRAM_ATTR_MULTI_DEFAULT;
+    }
+    else
+    {
+        logical_data_item_table[position].attr &= ~NVRAM_ATTR_MULTI_DEFAULT;
+    }
+}
+
+int ltable_enum_cmp_local(nvram_ltable_entry_struct *ent_a, nvram_ltable_entry_struct *ent_b)
+{
+    return (int)(ent_a->LID - ent_b->LID);
+}
+
+/*****************************************************************************
+* FUNCTION
+*  nvram_gen_construct_ltable
+* DESCRIPTION
+*  To construct ltable.
+* PARAMETERS
+*  None
+* RETURNS
+*  None
+*****************************************************************************/
+void nvram_gen_construct_ltable(void)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+    extern unsigned char nvram_ltable_begin, nvram_ltable_end;
+    kal_uint32 i = 0, tbl_idx = 0, tbl_size;
+    nvram_ltable_entry_struct *logical_data_item_table_bak;
+	size_t tbl_entry_size = sizeof(nvram_ltable_entry_struct);
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+
+    logical_data_item_table_bak = (nvram_ltable_entry_struct *)&nvram_ltable_begin;
+    tbl_size = (kal_uint32)(&nvram_ltable_end - &nvram_ltable_begin);
+    nvram_gen_total_lid = tbl_size/sizeof(nvram_ltable_entry_struct);
+	logical_data_item_table = (nvram_ltable_entry_struct *) malloc(tbl_size);
+	memcpy(logical_data_item_table, logical_data_item_table_bak, tbl_size);
+	qsort(logical_data_item_table, nvram_gen_total_lid, tbl_entry_size, ltable_enum_cmp_local);
+    printf("addr = %x, entry size: %d, real size: %d %s result size:%d\n", logical_data_item_table, sizeof(nvram_ltable_entry_struct), tbl_size, tbl_size%sizeof(nvram_ltable_entry_struct)?"!=":"=",nvram_gen_total_lid * sizeof(nvram_ltable_entry_struct));
+
+    do 
+    {
+        printf("ltable[%d](0x%x) = %s(%d), size = %d, total_records = %d\n",
+            i, &logical_data_item_table[i], logical_data_item_table[i].str_LID, logical_data_item_table[i].LID, logical_data_item_table[i].size, logical_data_item_table[i].total_records);
+
+        nvram_gen_assign_entry(&logical_data_item_table[i]);
+
+    }while(++i < nvram_gen_total_lid);
+
+#if 0    
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+/* under construction !*/
+#endif
+}
+
+/*****************************************************************************
+ * FUNCTION
+ *  nvram_gen_search_entry
+ * DESCRIPTION
+ *  To construct ltable.
+ * PARAMETERS
+ *  None
+ * RETURNS
+ *  None
+ *****************************************************************************/
+nvram_ltable_entry_struct* nvram_gen_search_entry(nvram_lid_enum lid)
+{
+    /*----------------------------------------------------------------*/
+    /* Local Variables                                                */
+    /*----------------------------------------------------------------*/
+    kal_uint32 i = 0;
+
+    /*----------------------------------------------------------------*/
+    /* Code Body                                                      */
+    /*----------------------------------------------------------------*/
+    do 
+    {
+        if (logical_data_item_table[i].LID == lid)
+        {
+            return &logical_data_item_table[i];
+        }
+
+    }while(++i < nvram_gen_total_lid);
+
+    return NULL;
+}
+
+
+#endif /* NVRAM_NOT_PRESENT */