blob: 5e1760a22e84930144c750f88d059e4165e2d78d [file] [log] [blame]
/*****************************************************************************
* 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) 2005
*
* 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_defs.h
*
* Project:
* --------
* MT6208
*
* Description:
* ------------
* This file contains definitions used by NVRAM task.
*
* 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!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
#ifndef NVRAM_DEFS_H
#define NVRAM_DEFS_H
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
#include "kal_general_types.h"
#include "kal_public_defs.h"
/***************************************************************
* Macro and Definition used for lid table
**********************************************************************/
/*****************************************************************************
* Include
****************************************************************************/
#ifndef NVRAM_NOT_PRESENT
#include "nvram_lid_statistics.h"
#endif
#include "nvram_enums.h"
#include "mmss_def.h"
#include "dhl_trace.h"
//***************************************************************************
// -- Custpack configuration --
//***************************************************************************
#ifdef __MULTIPLE_BINARY_FILES__
#if !defined(__L1_STANDALONE__)
#define __NVRAM_SUPPORT_CUSTPACK__
#endif
#endif
/*****************************************************************************
* Define
****************************************************************************/
#if defined (__NVRAM_UT_TEST__)
extern kal_taskid nvram_test_task1_id;
extern kal_uint32 nvram_ut_assert_flag;
#define NVRAM_EXT_ASSERT(expr, e1, e2, e3, ...) do{\
if(nvram_test_task1_id == kal_get_current_task() && !(expr)) {\
nvram_ut_assert_flag = e2;\
do{__VA_ARGS__;}while(0);\
return NVRAM_ERRNO_FAIL;\
}\
else {\
EXT_ASSERT(expr, e1, e2, e3);\
}\
}while(0)
/*BOOT_TRACE_XXXX is used for nvram_init() flow trace*/
#define BOOT_TRACE_DRV_UNFORMATTED 0x01
#define BOOT_TRACE_FOLDER_NOT_READY 0x02
#define BOOT_TRACE_DRIVE_BROKEN_VNOERR 0x04
#define BOOT_TRACE_READ_SYS_LID_FAIL 0x08
#define BOOT_TRACE_CLEAN_BOOT 0x10
#define BOOT_TRACE_SW_VERNO_COMPATIBLE 0x20
#define BOOT_TRACE_SW_VERNO_CONFLICT 0x40
#else
#define NVRAM_EXT_ASSERT(expr, e1, e2, e3, ...) EXT_ASSERT(expr, e1, e2, e3)
#endif
#define NVRAM_MAX_PATH_LEN 36
#define FILE_PREFIX_LEN 4
#define FILE_VERNO_LEN 3
#define FILE_RESERVED_LEN 9
#define NVRAM_FILE_LEN (FILE_PREFIX_LEN + 1 + FILE_VERNO_LEN)
#define NVRAM_MAX_DESC_LEN 20
#define NVRAM_EF_RESERVED_LID 0xFFFE
#define VER_LID(lid) lid##_VERNO lid
#ifndef NVRAM_AUTO_GEN
#define VER(lid) lid##_VERNO
#else
#if(defined(__NVRAM_LID_HASH_CHECK__) && defined(__MTK_INTERNAL__))
#define VER(lid) lid##_VERNO,#lid,NULL,lid##_HASH
#else
#define VER(lid) lid##_VERNO,#lid
#endif
#endif
#define NVRAM_EF_ZERO_DEFAULT_ZIP NVRAM_EF_ZERO_DEFAULT
#define NVRAM_EF_FF_DEFAULT_ZIP NVRAM_EF_FF_DEFAULT
#ifndef NVRAM_AUTO_GEN
#define NVRAM_NORMAL(X) (kal_uint8 const *)X
#define NVRAM_NORMAL_NOT_GEN(X) (kal_uint8 const *)X
#if !defined(__NVRAM_SUPPORT_CUSTPACK__) && !defined(__L1_STANDALONE__)
#define NVRAM_CUSTPACK(X) NVRAM_NORMAL(X)
#else
#define NVRAM_CUSTPACK(X) NVRAM_EF_ZERO_DEFAULT
#define NVRAM_CUSTPACK_DEFAULT_REPLACED
#endif /* __MMI_FMI__ */
#define NVRAM_SECUPACK(X) NVRAM_EF_ZERO_DEFAULT
#define NVRAM_DEFAULT_FUNC(X) (kal_uint8 const*)X
#else
#define NVRAM_NORMAL(X) #X, (kal_uint8 const *)X
#define NVRAM_NORMAL_NOT_GEN(X) #X,NVRAM_EF_ZERO_DEFAULT
#define NVRAM_CUSTPACK(X) #X,NVRAM_EF_SPECIAL_DEFAULT
#define NVRAM_SECUPACK(X) #X,(kal_uint8 const *)X
#define NVRAM_DEFAULT_FUNC(X) #X,NVRAM_EF_SPECIAL_DEFAULT
#endif
#define NVRAM_LOCK_PATTERN_LOCKED "_NVRAM_LOCK_YES_" //need 16b align
#define NVRAM_LOCK_PATTERN_UNLOCKED "__NVRAM_LOCK_NO_"
#define NVRAM_CHKSUM_SIZE 8
#define NVRAM_CHKSUM_SIZE_2B sizeof(kal_uint16)
/* AES 16 byte alignment, must be power of 2*/
#define NVRAM_MSP_ALIGNMENT 16
#define NVRAM_MSP_ALIGNMENT_REMAINDER(x) ((~(x) + 1) & (NVRAM_MSP_ALIGNMENT - 1))
#define NVRAM_MSP_ALIGNMENT_FLOOR(x) ((x) & (~(NVRAM_MSP_ALIGNMENT-1)))
#define NVRAM_MSP_ALIGNMENT_CEILING(x) (((x) + NVRAM_MSP_ALIGNMENT - 1) & ~(NVRAM_MSP_ALIGNMENT-1))
#define NVRAM_MSP_DECRYPT 0
#define NVRAM_MSP_ENCRYPT 1
#define NVRAM_APP_RESERVED 0
/* Attributes of a Logical Data Item, predefined. */
typedef kal_uint32 nvram_attr_enum;
#define NVRAM_ATTR_AVERAGE 0x00000000UL
#define NVRAM_ATTR_MULTI_DEFAULT 0x00000001UL
#define NVRAM_ATTR_WRITEPROTECT 0x00000002UL
#define NVRAM_ATTR_MULTIPLE 0x00000004UL
#define NVRAM_ATTR_CONFIDENTIAL 0x00000008UL
#define NVRAM_ATTR_MULTIREC_READ 0x00000010UL
#define NVRAM_ATTR_MSP 0x00000020UL /* Protected by MTK Secure Platform */
#define NVRAM_ATTR_OTA_RESET 0x00000040UL
#define NVRAM_ATTR_GEN_DEFAULT 0x00000080UL
#define NVRAM_ATTR_RING 0x00000100UL
#define NVRAM_ATTR_PACKAGE 0x00000200UL /* NVRAM Reserved.LID will package in file */
#define NVRAM_ATTR_BACKUP_FAT 0x00000400UL /* Put a copy into backup partition, and the format is FAT */
#define NVRAM_ATTR_BACKUP_RAW 0x00000800UL /* Put a copy into backup partition, and the format is Raw data */
#define NVRAM_ATTR_RESERVE_BACKWARD 0x00001000UL
#define NVRAM_ATTR_FAULT_ASSERT 0x00002000UL
#if 0
/* under construction !*/
/* under construction !*/
/* under construction !*/
#endif
#define NVRAM_ATTR_COMMITTED 0x00004000UL /* Add for SP, add FS_COMMITTED while opening file */
#define NVRAM_ATTR_RAW_DATA 0x00008000UL
#define NVRAM_ATTR_CHKSUM_INTEGRATE 0x00010000UL
#define NVRAM_ATTR_CHKSUM_ENHNC_ALGRTHM 0x00020000UL
//Add Attribute only for MCF Used
#define NVRAM_ATTR_MCF_OTA_ADDITIONAL_NOT_CHECK_VERNO 0x10000000UL /* MCF will not check LID version when OTA. User MUST!! make sure structure is backward compatible. MUST set at least one of OTA, OTA_FOR_QUERY, or OTA_BY_OP. */
#define NVRAM_ATTR_MCF_OTA_FOR_QUERY 0x20000000UL /* Customer can modify your LID when "OTA". MCF will NOT write setting to NVRAM. User need to query setting at run time. Conflict with NVRAM_ATTR_MCF_OTA. */
#define NVRAM_ATTR_MCF_OTA_BY_OP 0x40000000UL /* Customer can modify your LID when "OTA by operator". MCF will NOT write setting to NVRAM. User need to query setting at run time. */
#define NVRAM_ATTR_MCF_OTA 0x80000000UL /* Customer can modify your LID when "OTA". MCF will write setting to NVRAM. User does not aware.*/
#define NVRAM_ATTR_ALL 0xFFFFFFFFUL
typedef kal_uint32 nvram_category_enum;
/*
* byte 0: NVRAM internal or Not
*/
#define NVRAM_CATEGORY_USER 0x0000
#define NVRAM_CATEGORY_INTERNAL 0x0001
/*
* byte 1: storage information
*/
#define NVRAM_CATEGORY_BACKUP_SDS 0x0010
#define NVRAM_CATEGORY_OTP 0x0020
#define NVRAM_CATEGORY_CUSTOM_DISK 0x0040 /* Used by custom, it means the data is put into another partition */
/* Used by custom, NVRAM will put custom's sensitive data into another folder
if multiple folder feature turn on. Attribute of the data item in this category
must with NVRAM_ATTR_CONFIDENTIAL | NVRAM_ATTR_MULTIPLE */
#define NVRAM_CATEGORY_CUSTOM_SENSITIVE 0x0080
/*
* byte 2: default value information
*/
#define NVRAM_CATEGORY_CUSTPACK 0x0100
#define NVRAM_CATEGORY_SECUPACK 0x0200
#define NVRAM_CATEGORY_FUNC_DEFAULT 0x0400
/*
* byte 3: factory tool/Smartphone Nvram related information
*/
#if (defined(CURR_MODULE) && (CURR_MODULE == MOD_NVRAM)) || defined(NVRAM_AUTO_GEN) || defined(NVRAM_LID_SPLIT) || defined(__LTE_RAT__)
#define NVRAM_CATEGORY_CALIBRAT 0x1000
#define NVRAM_CATEGORY_IMPORTANT 0x2000
#define NVRAM_CATEGORY_IMPORTANT_L4 0x4000
#define NVRAM_CATEGORY_IMPORTANT_L1 0x8000
#else
#define NVRAM_CATEGORY_CALIBRAT "NVRAM_CATEGORY_CALIBRAT is not able to use here! Please contact META tool owner for help."
#define NVRAM_CATEGORY_IMPORTANT "NVRAM_CATEGORY_IMPORTANT is not able to use here! Please contact META tool owner for help."
#define NVRAM_CATEGORY_IMPORTANT_L4 "NVRAM_CATEGORY_IMPORTANT_L4 is not able to use here! Please contact META tool owner for help."
#define NVRAM_CATEGORY_IMPORTANT_L1 "NVRAM_CATEGORY_IMPORTANT_L1 is not able to use here! Please contact META tool owner for help."
#endif
#define NVRAM_CATEGORY_ALL 0xFFFF
#define NVRAM_CATEGORY_RESERVED 0x80000000UL /* for __NVRAM_READ_RESERVED_FILE__ feature*/
typedef enum
{
NVRAM_CLEAN_FOLDER_NONE = 0x00,
NVRAM_CLEAN_FOLDER_SYSTEM = 0x01, //custom_nvram_config.c
NVRAM_CLEAN_FOLDER_FACTORY = 0x02,
NVRAM_CLEAN_FOLDER_BRANCH = 0x04,
NVRAM_CLEAN_FOLDER_ALL = 0xFF
} nvram_clean_folder_enum;
/*****************************************************************************
* Typedef
****************************************************************************/
typedef void (*nvram_query_deault_func)(nvram_lid_enum file_id, kal_uint8 *buffer, kal_uint16 buffer_size);
#ifndef NVRAM_AUTO_GEN
#if !defined(_MSC_VER) || defined(GEN_FOR_PC)
typedef struct
#else
#ifdef L1_SIM
typedef struct
#else
typedef struct __declspec(align(32))
#endif
#endif
{
nvram_lid_enum LID; /* Logical Data Item ID, U16 */
kal_uint16 total_records; /* Number of records */
kal_uint32 size; /* Size of one record. < sizeof(control buffer) */
kal_uint8 const* default_value; /* Hardcoded default */
nvram_category_enum category; /* U32 */
nvram_attr_enum attr; /* U32 */
kal_char fileprefix[FILE_PREFIX_LEN + 1];
kal_char fileverno[FILE_VERNO_LEN + 1];
//kal_char* description;
kal_int32 append_offset;
kal_char* append_buffer;
} nvram_ltable_entry_struct;
#else
typedef struct
{
nvram_lid_enum LID;
kal_uint16 total_records;
kal_uint32 size;
kal_char* str_default_value;
kal_uint8 * default_value;
nvram_category_enum category;
nvram_attr_enum attr;
kal_char fileprefix[FILE_PREFIX_LEN + 1];
kal_char fileverno[FILE_VERNO_LEN + 1];
kal_char* str_LID;
kal_char* description;
#if(defined(__NVRAM_LID_HASH_CHECK__) && defined(__MTK_INTERNAL__))
kal_uint32 hash_key;
#endif
} nvram_ltable_entry_struct;
#ifdef NVRAM_AUTO_GEN // For nvram_auto_gen target build
typedef struct
{
nvram_lid_enum LID;
kal_uint16 total_records;
kal_uint32 size;
kal_uint32 str_default_value; //kal_char*
kal_uint32 default_value; //kal_uint8 const*
nvram_category_enum category;
nvram_attr_enum attr;
kal_char fileprefix[FILE_PREFIX_LEN + 1];
kal_char fileverno[FILE_VERNO_LEN + 1];
kal_uint32 str_LID; //kal_char*
kal_uint32 description; //kal_char*
} nvram_ltable_entry_struct_target;
#endif
#endif
typedef struct
{
nvram_ltable_entry_struct *ltable;
kal_uint32 size;
}nvram_ltable_tbl_struct;
#ifdef NVRAM_AUTO_GEN
#define SYS_CACHE_ENTRY(ENUM_ID, APP_ID, RESTORE, DESCRIPTION, VALUE1, VALUE2, VALUE3, VALUE4, VALUE5, VALUE6, VALUE7, VALUE8) \
{ \
ENUM_ID, \
APP_ID, \
RESTORE, \
VALUE1, \
VALUE2, \
VALUE3, \
VALUE4, \
VALUE5, \
VALUE6, \
VALUE7, \
VALUE8, \
#ENUM_ID, \
#APP_ID, \
#VALUE1, \
#VALUE2, \
#VALUE3, \
#VALUE4, \
#VALUE5, \
#VALUE6, \
#VALUE7, \
#VALUE8, \
DESCRIPTION \
}
typedef struct
{
kal_uint16 id; /* nvram_sys_cache_enum */
nvram_app_id_enum app_id; /* nvram_restore_app_id_enum */
kal_bool restore;
kal_uint8 value1;
kal_uint8 value2;
kal_uint8 value3;
kal_uint8 value4;
kal_uint8 value5;
kal_uint8 value6;
kal_uint8 value7;
kal_uint8 value8;
kal_char *id_str;
kal_char *app_id_str;
kal_char *value1_str;
kal_char *value2_str;
kal_char *value3_str;
kal_char *value4_str;
kal_char *value5_str;
kal_char *value6_str;
kal_char *value7_str;
kal_char *value8_str;
kal_char *description;
}nvram_sys_cache_entry;
#endif
#if defined(NVRAM_AUTO_GEN)
#define ltable_entry_struct nvram_ltable_entry_struct __attribute__((aligned(4))) __attribute__((__section__("_nvram_ltable")))
#define NVRAM_LIG_GRP_INIT(X)
#elif defined(__MTK_TARGET__)
#define ltable_entry_struct nvram_ltable_entry_struct __attribute__((section("_nvram_ltable")))
#define NVRAM_LIG_GRP_INIT(X) {\
extern nvram_ltable_entry_struct X##[];\
void *X##_p = (void *)&X;\
}
#else
#if defined(_MSC_VER) && (_MSC_VER >= 1500)
#define ltable_entry_struct __pragma(section("_nvram_ltable_content")) __declspec(align(64))\
nvram_ltable_entry_struct __declspec(allocate("_nvram_ltable_content"))
#elif defined(__GNUC__)
#define ltable_entry_struct nvram_ltable_entry_struct __attribute__((section("_nvram_ltable_content")))
#endif
#define NVRAM_LIG_GRP_INIT(X) extern nvram_ltable_entry_struct X##[];\
static void *X##_p = (void *)&X;
#endif
#ifndef NVRAM_CUSTPACK_TOTAL
#define NVRAM_CUSTPACK_TOTAL 1
#endif
typedef struct
{
kal_uint8 const* version;
void const* custpack_default[NVRAM_CUSTPACK_TOTAL];
}custpack_nvram_header;
typedef struct
{
nvram_clean_folder_enum category;
kal_wchar *folder_path;
} nvram_clean_folder_entry;
typedef struct
{
nvram_lid_enum LID;
kal_bool (*get_data)(kal_uint8 *buffer, kal_uint16 buf_size);
}nvram_shutdown_cb_struct;
typedef struct
{
nvram_lid_enum LID;
kal_uint32 size; /* Size of one record. < sizeof(control buffer) */
kal_uint16 total_records; /* Number of records */
kal_uint8 const *default_value;
kal_bool is_multi_default;
} nvram_cat_replace_setting;
//#endif
#define RST_CHKSUM_SIZE 16
typedef struct
{
kal_char header[4];
nvram_lid_enum LID;
kal_uint16 total_records;
kal_uint32 record_size;
kal_uint32 ldi_attr;
kal_uint32 ldi_category;
kal_uint8 defval_chkrst_h[RST_CHKSUM_SIZE-6];
kal_uint16 checksum;
} nvram_ldi_ota_header;
#define NVRAM_LDI_OTA_HEADER_SIZE 32
typedef struct
{
kal_uint32 last_write_taskID;
kal_uint8 defval_chkrst_l[6];
kal_uint16 last_write_time;
kal_uint32 write_times;
kal_uint8 struct_chkrst[RST_CHKSUM_SIZE];
} nvram_ldi_debug_header;
#define NVRAM_LDI_DEBUG_HEADER_SIZE 32
#define NVRAM_LDI_HEADER_SIZE (NVRAM_LDI_OTA_HEADER_SIZE + NVRAM_LDI_DEBUG_HEADER_SIZE)
typedef struct
{
nvram_ldi_ota_header nv_ota_header;
nvram_ldi_debug_header nv_dbg_header;
} nvram_ldi_header;
typedef struct
{
nvram_lid_enum LID;
kal_uint8 chksum[16];
}checksum_reset_struct;
typedef enum
{
LDI_HEADER_OTA_SECTION = 0x01,
LDI_HEADER_DBG_SECTION = 0x02,
LDI_HEADER_ALL_SECTION = 0x03
} nvram_header_section_enum;
#if defined(__MTK_TARGET__)
#define NVRAM_LTABLE_END
#else
#define NVRAM_LTABLE_END 0
#endif
#define NVRAM_READ_GPT_TIMEOUT 2000 //*10ms, 2000 stands 20s
#define NVRAM_WRITE_GPT_TIMEOUT 2000 //20s
#define MAX_TRACE_NUM 10
typedef struct
{
kal_uint32 LID;
kal_uint32 access_way;
kal_uint32 start_time;
kal_uint32 end_time;
kal_uint32 ret_value;
}trace_info;
typedef struct
{
kal_uint32 read_trace_index; //record which index is the last updated
kal_uint32 write_trace_index;
kal_uint32 reset_trace_index;
trace_info read_trace[MAX_TRACE_NUM]; //only record the info of last 10 times access
trace_info write_trace[MAX_TRACE_NUM];
trace_info reset_trace[MAX_TRACE_NUM];
}nvram_access_trace_information;
#define NWSEL_HISTORY_TABLE_SIZE 16
#define NVRAM_MAX_IMSI_LEN 9
#define NVRAM_MAX_LTE_RETRY_COUNT 5
#define NVRAM_APPEND_TYPE_CHKSUM 0x0001
#define NVRAM_APPEND_TYPE_END 0xFFFF
typedef struct
{
//--- common part -------------
kal_char header[4]; //"APDX"
kal_uint16 checksum;
nvram_appendix_type_enum type;
kal_uint32 data_offset;
//-----------------------------
kal_uint32 header_info[5];
} nvram_ldi_appendix_header;
#define NVRAM_LDI_APPENDIX_HEADER_SIZE 32
/////////////////////////////////////////
/*
Used to NVRAM Debug
*/
////////////////////////////////////////
typedef struct
{
nvram_access_type_enum access_type;
kal_char filename[NVRAM_MAX_PATH_LEN];
kal_uint32 start_time;
kal_uint32 end_time;
kal_uint32 consum_time;
kal_int32 access_result;
kal_uint32 access_count;
kal_uint32 max_time;
kal_uint32 min_time;
kal_uint32 total_time;
}nvram_access_info_type;
typedef struct
{
nvram_access_type_enum access_type;
kal_char filename[NVRAM_MAX_PATH_LEN];
kal_uint32 start_time;
kal_uint32 end_time;
kal_int32 access_result;
}nvram_access_info_ex_type;
typedef struct
{
kal_uint8 info_log:1;
kal_uint8 warning_log:1;
kal_uint8 error_log:1;
kal_uint8 enable_trace:1;
}nvram_trace_setting_type;
#define MAX_TIME_COUNT 19
#define RESERVED_MEMORY_FOR_NVRAM 100
#define MD_CCCI_INFO_SIZE 4
#define NVRAM_DUMP_TRACE_TEMP_BUFFER_SIZE 160
#define NVRAM_DUMP_TRACE_BUFFER_SIZE 4096
#define NVRAM_MD_VERSION_INFO_SIZE 34
#define NVRAM_SECRET_SEED_KEY_SIZE 32
typedef struct
{
kal_uint8 state;
kal_bool dev_broken;
kal_bool lock;
kal_bool saved_lock;
kal_uint8 secret_key[NVRAM_SECRET_SEED_KEY_SIZE];
kal_uint8 old_coded_version[NVRAM_MD_VERSION_INFO_SIZE + 1];
kal_uint8 old_branch_version[NVRAM_MD_VERSION_INFO_SIZE + 1];
kal_uint8 old_flavor_version[NVRAM_MD_VERSION_INFO_SIZE + 1];
kal_uint8 old_build_time[NVRAM_MD_VERSION_INFO_SIZE + 1];
nvram_lid_enum total_LID;
kal_uint32 area_size;
kal_uint32 sw_status;
}nvram_init_context_type;
typedef struct
{
kal_uint32 cache_memory_addr;
kal_uint32 cache_memory_size;
kal_uint32 cache_init_status;
}nvram_cache_setting_type;
typedef struct
{
kal_uint32 nvram_init_type;
kal_uint32 nvram_init_step;
kal_uint32 nvram_init_time[MAX_TIME_COUNT];
nvram_cache_setting_type nvram_cache_setting;
nvram_access_trace_setting_file_result_enum nvram_access_trace_setting_file_val;
//nvram_trace_setting is used to control nvram trace dump
//bit5:always_write;bit4:info_log;bit3:warning_log;
//bit2:critical_log;bit1:write_file_way;bit0:enable_trace
kal_uint32 nvram_trace_setting;
kal_uint8 nvram_trace_fs_access_val;
nvram_init_context_type nvram_init_context;
nvram_access_info_type nvram_access_info;
nvram_access_info_ex_type nvram_access_info_for_exception;
kal_uint8 reserved[RESERVED_MEMORY_FOR_NVRAM];
kal_uint32 md_ccci_debug_info[MD_CCCI_INFO_SIZE];
}nvram_ee_info_type;
#define NVRAM_INIT_NORMAL_BOOT_UP 0x0
#define NVRAM_INIT_FIRST_BOOT_UP 0x0001
#define NVRAM_INIT_OTA_BOOT_UP 0x0002
#define NVRAM_INIT_FACTORY_BOOT_UP 0x0004
#define NVRAM_TRACE_ALWAYS_WRITE 0x20
#define NVRAM_INFO_DUMP 0x10
#define NVRAM_WARNING_DUMP 0x8
#define NVRAM_CRITICAL_DUMP 0x4
#define NVRAM_DEBUG_DUMP(log_level,info, ...) \
do {\
if(nvram_ee_info != NULL){\
if((nvram_ee_info->nvram_trace_setting & 0x1) && (nvram_ee_info->nvram_trace_setting & log_level) && ((nvram_ee_info->nvram_trace_setting & NVRAM_TRACE_ALWAYS_WRITE) || !dhl_is_trace_started())) \
{\
kal_uint32 str_size = 0;\
kal_uint32 str_title_size = 0;\
kal_uint32 trace_len = 0;\
kal_uint8 trace_count = 0;\
kal_bool exception_flag = INT_QueryExceptionStatus();\
if(!exception_flag)\
{\
nvram_util_take_mutex(g_nvram_dump_trace_mutex);\
}\
kal_mem_set(nvram_trace_dump_temp_buffer,0,NVRAM_DUMP_TRACE_TEMP_BUFFER_SIZE);\
if(log_level & NVRAM_CRITICAL_DUMP)\
{\
str_title_size = sprintf(nvram_trace_dump_temp_buffer,"Time:[0x%08X]Module:[%d][NVM_Critical]",(kal_uint32)ust_get_current_time(),stack_get_active_module_id());\
}\
else if(log_level & NVRAM_WARNING_DUMP)\
{\
str_title_size = sprintf(nvram_trace_dump_temp_buffer,"Time:[0x%08X]Module:[%d][NVM_Warning]",(kal_uint32)ust_get_current_time(),stack_get_active_module_id());\
}\
else if(log_level & NVRAM_INFO_DUMP)\
{\
str_title_size = sprintf(nvram_trace_dump_temp_buffer,"Time:[0x%08X]Module:[%d][NVM_Info]",(kal_uint32)ust_get_current_time(),stack_get_active_module_id());\
}\
str_size = snprintf((nvram_trace_dump_temp_buffer+str_title_size),(NVRAM_DUMP_TRACE_TEMP_BUFFER_SIZE-str_title_size),info,__VA_ARGS__);\
str_size = str_size+str_title_size;\
if(nvram_trace_file_hdl == 0)\
{\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
nvram_trace_file_hdl = FS_Open((const WCHAR *)nvram_trace_filename, FS_CREATE | FS_READ_WRITE | FS_OPEN_NO_DIR);\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
}\
if((nvram_ee_info->nvram_trace_setting & 0x2))\
{ \
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
FS_Seek(nvram_trace_file_hdl, 0, FS_FILE_END);\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
FS_Write(nvram_trace_file_hdl, nvram_trace_dump_temp_buffer, str_size, &trace_len);\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
if(exception_flag)\
{\
FS_Close(nvram_trace_file_hdl);\
nvram_trace_file_hdl = 0;\
}\
}\
else \
{\
if(((nvram_trace_dump_buffer_offset+str_size) >= NVRAM_DUMP_TRACE_BUFFER_SIZE) || exception_flag)\
{\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
FS_Seek(nvram_trace_file_hdl, 0, FS_FILE_END);\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
FS_Write(nvram_trace_file_hdl, nvram_trace_dump_buffer, nvram_trace_dump_buffer_offset, &trace_len);\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
if(exception_flag)\
{\
FS_Close(nvram_trace_file_hdl);\
nvram_trace_file_hdl = 0;\
}\
nvram_ee_info->nvram_trace_fs_access_val = ++trace_count;\
kal_mem_set(nvram_trace_dump_buffer,0,NVRAM_DUMP_TRACE_BUFFER_SIZE);\
nvram_trace_dump_buffer_offset = str_size;\
kal_mem_cpy(nvram_trace_dump_buffer,nvram_trace_dump_temp_buffer,str_size);\
}\
else \
{\
kal_mem_cpy(nvram_trace_dump_buffer+nvram_trace_dump_buffer_offset,nvram_trace_dump_temp_buffer,str_size);\
nvram_trace_dump_buffer_offset += str_size;\
}\
}\
if(!exception_flag)\
{\
nvram_util_give_mutex(g_nvram_dump_trace_mutex);\
}\
}\
}\
}while(0)
#define NVRAM_FS_START(FS_OP)\
do {\
kal_bool exception_flag = INT_QueryExceptionStatus();\
if(nvram_ee_info != NULL){\
if(!exception_flag)\
{\
nvram_ee_info->nvram_access_info.access_type = FS_OP;\
nvram_ee_info->nvram_access_info.access_count++;\
nvram_ee_info->nvram_access_info.access_result = 0xFFFFFFFF;\
nvram_ee_info->nvram_access_info.start_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info.end_time = 0;\
nvram_ee_info->nvram_access_info.consum_time = 0;\
}\
else \
{\
nvram_ee_info->nvram_access_info_for_exception.access_type = FS_OP;\
nvram_ee_info->nvram_access_info_for_exception.access_result = 0xFFFFFFFF;\
nvram_ee_info->nvram_access_info_for_exception.start_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info_for_exception.end_time = 0;\
}\
}\
}while(0)
#define NVRAM_FS_START_EX(FS_OP,FS_FILE_NAME)\
do {\
kal_bool exception_flag = INT_QueryExceptionStatus();\
if(nvram_ee_info != NULL){\
if(!exception_flag)\
{\
nvram_ee_info->nvram_access_info.access_type = FS_OP;\
kal_mem_set(nvram_ee_info->nvram_access_info.filename,0,NVRAM_MAX_PATH_LEN);\
kal_dchar2char((WCHAR *)(FS_FILE_NAME), nvram_ee_info->nvram_access_info.filename);\
NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,#FS_OP":%s\r\n",nvram_ee_info->nvram_access_info.filename);\
nvram_ee_info->nvram_access_info.access_count++;\
nvram_ee_info->nvram_access_info.access_result = 0xFFFFFFFF;\
nvram_ee_info->nvram_access_info.start_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info.end_time = 0;\
nvram_ee_info->nvram_access_info.consum_time = 0;\
}\
else \
{\
nvram_ee_info->nvram_access_info_for_exception.access_type = FS_OP;\
kal_mem_set(nvram_ee_info->nvram_access_info_for_exception.filename,0,NVRAM_MAX_PATH_LEN);\
kal_dchar2char((WCHAR *)(FS_FILE_NAME), nvram_ee_info->nvram_access_info_for_exception.filename);\
nvram_ee_info->nvram_access_info_for_exception.access_result = 0xFFFFFFFF;\
nvram_ee_info->nvram_access_info_for_exception.start_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info_for_exception.end_time = 0;\
}\
}\
}while(0)
#define NVRAM_FS_END(FS_OP,Ret_Val) \
do {\
kal_bool exception_flag = INT_QueryExceptionStatus();\
if(Ret_Val < FS_NO_ERROR)\
{\
kal_prompt_trace(MOD_NVRAM,#FS_OP" Return %d\r\n",Ret_Val);\
}\
if(nvram_ee_info != NULL){\
if(!exception_flag)\
{\
nvram_ee_info->nvram_access_info.end_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info.access_result = Ret_Val;\
nvram_ee_info->nvram_access_info.consum_time = nvram_ee_info->nvram_access_info.end_time - nvram_ee_info->nvram_access_info.start_time;\
if(nvram_ee_info->nvram_access_info.consum_time > nvram_ee_info->nvram_access_info.max_time)\
{\
nvram_ee_info->nvram_access_info.max_time = nvram_ee_info->nvram_access_info.consum_time;\
}\
if(nvram_ee_info->nvram_access_info.consum_time < nvram_ee_info->nvram_access_info.min_time)\
{\
nvram_ee_info->nvram_access_info.min_time = nvram_ee_info->nvram_access_info.consum_time;\
}\
nvram_ee_info->nvram_access_info.total_time += nvram_ee_info->nvram_access_info.consum_time;\
}\
else \
{\
nvram_ee_info->nvram_access_info_for_exception.end_time = ust_get_current_time();\
nvram_ee_info->nvram_access_info_for_exception.access_result = Ret_Val;\
}\
if(Ret_Val < FS_NO_ERROR)\
{\
NVRAM_DEBUG_DUMP(NVRAM_WARNING_DUMP,#FS_OP" Return %d\r\n",Ret_Val);\
}\
}\
}while(0)
/*****************************************************************************
* Global Function
****************************************************************************/
extern const kal_uint8 NVRAM_EF_ZERO_DEFAULT[];
extern const kal_uint8 NVRAM_EF_FF_DEFAULT[];
extern const kal_uint8 NVRAM_EF_SPECIAL_DEFAULT[];
#ifdef __cplusplus
}
#endif
#endif /* NVRAM_DEFS_H */