[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/service/nvram/src/nvram_handler_reset.c b/mcu/service/nvram/src/nvram_handler_reset.c
new file mode 100644
index 0000000..f596e9d
--- /dev/null
+++ b/mcu/service/nvram/src/nvram_handler_reset.c
@@ -0,0 +1,625 @@
+/*****************************************************************************
+* 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_handler_reset.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * This is reset handler function of NVRAM module.
+ *
+ * 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!
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+#include "kal_general_types.h"
+#include "kal_public_api.h"
+#include "kal_public_defs.h"
+#include "kal_trace.h"
+#include "nvram_msgid.h"
+#include "mcf_if.h"
+
+#ifdef __NVRAM_OTP__
+#include "fs_gprot.h"
+#include "fs_iprot.h"
+#endif
+
+//MSBB remove #include "fctycomp_config.h" /* MOD_FT */
+
+#include "nvram_main.h"
+#include "ex_public.h"
+#include "stdio.h"
+#include "stdarg.h"
+#include "us_timer.h"
+
+
+extern kal_mutexid g_nvram_impt_mutex;
+extern nvram_access_trace_information nvram_access_trace;
+extern kal_mutexid g_nvram_trace_mutex;
+
+extern nvram_ee_info_type* nvram_ee_info;
+extern kal_char nvram_trace_dump_temp_buffer[];
+extern kal_char nvram_trace_dump_buffer[];
+extern kal_mutexid g_nvram_dump_trace_mutex;
+extern kal_wchar nvram_trace_filename[];
+extern FS_HANDLE nvram_trace_file_hdl;
+extern kal_uint32 nvram_trace_dump_buffer_offset;
+
+
+static void nvram_reset_confirm(module_type dest_id, nvram_errno_enum result, nvram_reset_req_struct *nvram_reset_req);
+
+static void nvram_set_lock_confirm(
+ module_type dest_id,
+ nvram_errno_enum result,
+ nvram_set_lock_req_struct *nvram_set_lock_req);
+
+extern module_type stack_get_active_module_id( void );
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_reset_handler
+ * DESCRIPTION
+ * This is nvram_reset_handler() function of NVRAM module.
+ * PARAMETERS
+ * ilm_ptr [IN] The primitives
+ * RETURNS
+ * void
+ *****************************************************************************/
+void nvram_reset_handler(ilm_struct *ilm_ptr)
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ nvram_ltable_entry_struct *ldi;
+ nvram_ltable_entry_struct tmp_ldi = {0};
+ nvram_reset_req_struct *nvram_reset_req = (nvram_reset_req_struct*) ilm_ptr->local_para_ptr;
+ kal_uint32 nvram_trace_index = 0;
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+ nvram_util_take_mutex(g_nvram_trace_mutex);
+ nvram_trace_index = nvram_access_trace.reset_trace_index;
+ nvram_access_trace.reset_trace_index = (nvram_access_trace.reset_trace_index + 1) % MAX_TRACE_NUM;
+ nvram_util_give_mutex(g_nvram_trace_mutex);
+
+ MD_TRC_FUNC_NVRAM_RESET();
+ NVRAM_EXT_ASSERT(nvram_reset_req != NULL,(kal_uint32)nvram_reset_req, NVRAM_LOC_RESET_REQ_PTR_IS_NULL_1, 0);
+ kal_mem_set((void *)&(nvram_access_trace.reset_trace[nvram_trace_index]), 0, sizeof(trace_info));
+ nvram_access_trace.reset_trace[nvram_trace_index].access_way = NVRAM_ACCESS_BY_MSG;
+ nvram_access_trace.reset_trace[nvram_trace_index].LID = nvram_reset_req->LID;
+ nvram_access_trace.reset_trace[nvram_trace_index].start_time = ust_get_current_time();
+ if (nvram_ptr->dev_broken)
+ {
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_IO_ERRNO_DRV_BROKEN;
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_reset_req);
+ }
+ else
+ {
+
+ if (nvram_ptr->state == NVRAM_STATE_READY)
+ {
+ if (!(nvram_reset_req->reset_category & NVRAM_RESET_CERTAIN))
+ {
+ nvram_reset_req->LID = 0;
+ }
+
+ nvram_util_get_data_item(&ldi, nvram_reset_req->LID);
+
+ if (nvram_reset_req->reset_category == NVRAM_RESET_CERTAIN)
+ {
+ if (!NVRAM_IS_LID_VALID(nvram_reset_req->LID))
+ {
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_IO_ERRNO_INVALID_LID;
+ NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[Error]%s->LID 0x%04X NVRAM_IO_ERRNO_INVALID_LID \r\n",__FUNCTION__,nvram_reset_req->LID);
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_IO_ERRNO_INVALID_LID, nvram_reset_req);
+ return;
+ }
+
+ /* In Meta mode, we cannot access the data belongs to custom sensitve area
+ we also cannot reset the important data to prevent security problem */
+
+
+ if (NVRAM_IS_CATEGORY_IMPORTANT(ldi->category)
+ || NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category)
+ #if defined(__NVRAM_CUSTOM_SENSITIVE__) || defined(__NVRAM_CUSTOM_DISK__)
+ || NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category)
+ || NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category)
+ #endif
+ )
+ {
+ if (FACTORY_BOOT == kal_query_boot_mode() && ilm_ptr->src_mod_id == MOD_FT)
+ {
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_IO_ERRNO_ACCESS_DENIED;
+ NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[Error]%s LID 0x%04X NVRAM_IO_ERRNO_ACCESS_DENIED \r\n",__FUNCTION__,nvram_reset_req->LID);
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_IO_ERRNO_ACCESS_DENIED, nvram_reset_req);
+ return;
+ }
+ }
+ }
+
+ if (nvram_reset_data_items(nvram_reset_req->reset_category, nvram_reset_req->app_id, ldi, nvram_reset_req->rec_index, nvram_reset_req->rec_amount) == KAL_TRUE)
+ {
+ if(nvram_ptr->state == NVRAM_STATE_READY)
+ {
+ memcpy(&tmp_ldi,ldi,sizeof(nvram_ltable_entry_struct));
+ mcf_do_ota_by_lid(nvram_reset_req->LID,nvram_reset_req->rec_index, nvram_reset_req->rec_amount,&tmp_ldi);
+ }
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_ERRNO_SUCCESS;
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_reset_req);
+ }
+ else
+ {
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_ERRNO_FAIL;
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_reset_req);
+ }
+ }
+ /* State error */
+ else
+ {
+ MD_TRC_ERROR_NVRAM_STATE();
+ nvram_access_trace.reset_trace[nvram_trace_index].end_time = ust_get_current_time();
+ nvram_access_trace.reset_trace[nvram_trace_index].ret_value = NVRAM_ERRNO_NOT_READY;
+ NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[Error]%s->LID 0x%04X NVRAM_ERRNO_NOT_READY \r\n",__FUNCTION__,nvram_reset_req->LID);
+ nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_reset_req);
+ }
+ }
+} /* end of nvram_reset_handler */
+
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_reset_confirm
+ * DESCRIPTION
+ * This is nvram_reset_confirm() function of NVRAM module.
+ * PARAMETERS
+ * dest_id [IN]
+ * result [IN]
+ * nvram_reset_req [?]
+ * ilm_ptr(?) [IN] The primitives
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void nvram_reset_confirm(module_type dest_id, nvram_errno_enum result, nvram_reset_req_struct *nvram_reset_req)
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ nvram_reset_cnf_struct *nvram_reset_cnf;
+
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+ MD_TRC_FUNC_NVRAM_RESET_CNF(result);
+ nvram_reset_cnf = (nvram_reset_cnf_struct*) construct_local_para(sizeof(nvram_reset_cnf_struct), TD_CTRL);
+
+
+ nvram_reset_cnf->result = result;
+ nvram_reset_cnf->access_id = nvram_reset_req->access_id;
+
+ nvram_send_ilm(dest_id, MSG_ID_NVRAM_RESET_CNF, nvram_reset_cnf, NULL);
+
+ return;
+} /* end of nvram_reset_confirm */
+
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_set_lock_handler
+ * DESCRIPTION
+ * This is nvram_set_lock_handler() function of NVRAM module.
+ * PARAMETERS
+ * ilm_ptr [IN] The primitives
+ * RETURNS
+ * void
+ *****************************************************************************/
+void nvram_set_lock_handler(ilm_struct *ilm_ptr)
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ kal_bool lock_state = nvram_ptr->lock;
+ nvram_set_lock_req_struct *nvram_set_lock_req = (nvram_set_lock_req_struct*) ilm_ptr->local_para_ptr;
+ #ifdef __NVRAM_OTP__
+ kal_int32 result = 0;
+ #endif
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+ if (nvram_ptr->dev_broken)
+ {
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_INVALID, nvram_set_lock_req);
+ }
+ else
+ {
+ if ((nvram_set_lock_req->lock_en == NVRAM_LOCK_ENABLE && lock_state == KAL_TRUE) ||
+ (nvram_set_lock_req->lock_en == NVRAM_LOCK_DISABLE && lock_state == KAL_FALSE))
+ {
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_set_lock_req);
+ return;
+ }
+ else if (nvram_set_lock_req->lock_en == NVRAM_LOCK_TEMP_DISABLE)
+ {
+ #ifdef __NVRAM_IMEI_UNLOCK_DISABLE__
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_set_lock_req);
+ #else
+ nvram_ptr->lock = KAL_FALSE;
+ if(nvram_ee_info != NULL){
+ nvram_ee_info->nvram_init_context.lock = nvram_ptr->lock;
+ }
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_set_lock_req);
+ return;
+ #endif
+ }
+ #ifdef __NVRAM_OTP__
+ else if (nvram_set_lock_req->lock_en == NVRAM_LOCK_OTP)
+ {
+ NVRAM_FS_START(FS_OP_OTPLOCK);
+ result = FS_OTPLock(FS_DEVICE_TYPE_NOR);
+ NVRAM_FS_END(FS_OP_OTPLOCK,result);
+ if(result == FS_NO_ERROR)
+ {
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_set_lock_req);
+ }
+ else
+ {
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_set_lock_req);
+ }
+ return;
+ }
+ #endif /* __NVRAM_OTP__ */
+
+ if (nvram_set_lock_req->lock_en == NVRAM_LOCK_ENABLE)
+ {
+ nvram_write_system_record(NVRAM_LOCK_ENABLE);
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_set_lock_req);
+ }
+ else if (nvram_set_lock_req->lock_en == NVRAM_LOCK_DISABLE)
+ {
+ #ifdef __NVRAM_IMEI_UNLOCK_DISABLE__
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_set_lock_req);
+ #else
+ nvram_write_system_record(NVRAM_LOCK_DISABLE);
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_set_lock_req);
+ #endif
+ }
+ else
+ {
+ /* Invalid parameter */
+ nvram_set_lock_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_INVALID, nvram_set_lock_req);
+ return;
+ }
+
+ }
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_set_lock_confirm
+ * DESCRIPTION
+ * This is nvram_set_lock_confirm() function of NVRAM module.
+ * PARAMETERS
+ * dest_id [IN]
+ * result [IN]
+ * nvram_set_lock_req [?]
+ * ilm_ptr(?) [IN] The primitives
+ * RETURNS
+ * void
+ *****************************************************************************/
+static void nvram_set_lock_confirm(module_type dest_id,
+ nvram_errno_enum result,
+ nvram_set_lock_req_struct *nvram_set_lock_req)
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ nvram_set_lock_cnf_struct *nvram_set_lock_cnf;
+
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+ nvram_set_lock_cnf = (nvram_set_lock_cnf_struct*) construct_local_para(sizeof(nvram_set_lock_cnf_struct), TD_CTRL);
+
+ nvram_set_lock_cnf->result = result;
+
+ nvram_send_ilm(dest_id, MSG_ID_NVRAM_SET_LOCK_CNF, nvram_set_lock_cnf, NULL);
+
+ return;
+
+}
+
+
+/*****************************************************************************
+ * FUNCTION
+ * nvram_suspend_handler
+ * DESCRIPTION
+ * This is the handler to handle MSG_ID_NVRAM_SUSPEND_REQ
+ * After nvram receive this request, it will be suspend forever now.
+ * PARAMETERS
+ * ilm_ptr [IN] the message content
+ * RETURNS
+ * void
+ *****************************************************************************/
+void nvram_suspend_handler(ilm_struct *ilm_ptr)
+{
+ /*----------------------------------------------------------------*/
+ /* Local Variables */
+ /*----------------------------------------------------------------*/
+ nvram_suspend_req_struct *nvram_suspend_req = (nvram_suspend_req_struct*) ilm_ptr->local_para_ptr;
+ nvram_suspend_cnf_struct *nvram_suspend_cnf;
+
+ /*----------------------------------------------------------------*/
+ /* Code Body */
+ /*----------------------------------------------------------------*/
+
+ nvram_suspend_cnf = (nvram_suspend_cnf_struct*) construct_local_para(sizeof(nvram_suspend_cnf_struct), TD_CTRL);
+
+ nvram_suspend_cnf->result = NVRAM_ERRNO_SUCCESS;
+
+ nvram_send_ilm(ilm_ptr->src_mod_id, MSG_ID_NVRAM_SUSPEND_CNF, nvram_suspend_cnf, NULL);
+
+ if (nvram_suspend_req == NULL || nvram_suspend_req->suspend_time == 0)
+ {
+ while(1)
+ {
+ kal_sleep_task(kal_milli_secs_to_ticks(500));
+ }
+ }
+ else
+ {
+ kal_sleep_task(kal_milli_secs_to_ticks(5*nvram_suspend_req->suspend_time));
+ }
+
+ return;
+}