Пример #1
0
/*****************************************************************************
 * FUNCTION
 *  jpim_evtdb_upddateEntry
 * DESCRIPTION
 *  This function updates an entry in the event database.
 *  The index (physical storage index) must refer to a valid entry
 *  in the database, otherwise an "invalid index" error is returned.
 *  If the sort index changes after the update, a new sort index is assigned
 * PARAMETERS
 *  entry           [IN/OUT]
 * RETURNS
 *  jpim_error_code_enum
 *****************************************************************************/
kal_int32 jpim_evtdb_upddateEntry_ext(mmi_evtdb_java_entry_struct *entry, kal_uint8 db_type, kal_int32 vm_id)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    kal_uint32 event_group;

    mmi_evtdb_java_set_entry_req_struct *p =
        (mmi_evtdb_java_set_entry_req_struct*) construct_local_para(
                                                sizeof(mmi_evtdb_java_set_entry_req_struct),
                                                TD_CTRL | TD_RESET);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    JPIM_DEBUG(TRACE_GROUP_2, JPIM_EVTDB_UPDDATEENTRY);

    jpim_evtdb_adjustEntry(entry, db_type);

#ifdef JSR_75_PIM_EXTRA_ALARM_TIME_USER_DEFINE
	  jpim_evtdb_adjustAlarmTime(entry, db_type, KAL_TRUE);
#endif

    p->entry_ptr = entry;
    p->index = entry->handle;
    p->sort_type = MMI_EVTDB_SORT_BY_TIME;
    p->db_index = jpim_evtdb_transfer_tdl_db(db_type);

    jpim_evtdb_result = MMI_EVTDB_JAVA_ERROR;
    jpim_evtdb_state = JPIM_EVTDB_STATE_UPDATE_ENTRY;
    jpim_evtdb_index = 0xffff;
    jpim_evtdb_handle = 0xffff;

	if (jpim_check_vm_state(1, vm_id))
    {
        jpim_send_ilm(p, MSG_ID_MMI_EVTDB_JAVA_SET_ENTRY_REQ);
        kal_retrieve_eg_events(g_java_event_group_1, JAVA_EG_PIM_EVTDB_UPDATE_ENTRY, KAL_OR_CONSUME, &event_group, KAL_SUSPEND);
        entry->index = jpim_evtdb_index;
        entry->handle = jpim_evtdb_handle;
    }
    else
    {
        free_local_para((local_para_struct*) p);
    }
    return jpim_transfer_error_code(JPIM_EVENTDB, jpim_evtdb_result);
}
Пример #2
0
/*****************************************************************************
 * FUNCTION
 *  jpim_evtdb_getCount
 * DESCRIPTION
 *  The function retrieves the total count of event database entries.
 * PARAMETERS
 *  void
 * RETURNS
 *  0~n, -1 means database error
 *****************************************************************************/
kal_int32 jpim_evtdb_getCount(kal_uint8 db_type, kal_int32 vm_id)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint32 event_group;
    mmi_evtdb_java_get_entry_req_struct *p =
        (mmi_evtdb_java_get_entry_req_struct*) construct_local_para(
                                                sizeof(mmi_evtdb_java_get_entry_req_struct),
                                                TD_CTRL | TD_RESET);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    JPIM_DEBUG(TRACE_GROUP_2, JPIM_EVTDB_GETCOUNT);

    p->count = 0;
    p->entry_ptr = NULL;
    p->index = 1;
    p->sort_type = MMI_EVTDB_SORT_BY_TIME;
	p->db_index = jpim_evtdb_transfer_tdl_db(db_type);

    /* set cmccphk_state before send message!! */
    jpim_evtdb_state = JPIM_EVTDB_STATE_GET_COUNT;
    jpim_evtdb_result = MMI_EVTDB_JAVA_ERROR;
    jpim_evtdb_count = -1;

	if (jpim_check_vm_state(0, vm_id))
    {
        jpim_send_ilm(p, MSG_ID_MMI_EVTDB_JAVA_GET_ENTRY_REQ);
        kal_retrieve_eg_events(g_java_event_group_1, JAVA_EG_PIM_EVTDB_GETCOUNT, KAL_OR_CONSUME, &event_group, KAL_SUSPEND);
    }
	  else
    {
        free_local_para((local_para_struct*) p);
    }

    if (jpim_evtdb_result != MMI_EVTDB_JAVA_SUCCESS)
    {
        return -1;
    }
    else
    {
        return jpim_evtdb_count;
    }
}
Пример #3
0
kal_bool csmss_reset(void)
{
    kal_uint8 index = 0;

    kal_uint8 i;
    for (i = 0; i < MAX_SIM_NUM; i++)
    {
        csmss_ptr_g = &csmss_g[i];
        csmss_cur_mod = MOD_CSM+i;

#if defined (__CPHS__) || defined (__REL4__)        
        csmss_ptr_g->cfu_flag_len = 0;
        csmss_ptr_g->cfis_record_len = 0;  
#endif

        for (index = 0; index < MMI_CS_MAX_CALLS; index++)
        {
            csmss_g_call_id_pool[index] = KAL_FALSE;
        }

    // Revise interrogate: 1.query again for active, 2.if no respones from NW, clear the line.
        #ifndef __SS_NOT_INTERROGATE_ACTIVATESS__
        if (csmss_g_query_act_req == KAL_TRUE)
        {
            csmss_g_query_act_req = KAL_FALSE;

            if (csmss_g_msg_ptr != NULL)
                free_local_para((local_para_struct *)csmss_g_msg_ptr);
            csmss_g_msg_ptr = NULL;
        }
        #endif
        #ifdef __SS_ERASURE_BEFORE_REGISTER__
        if (csmss_g_erase_reg_req == KAL_TRUE)
        {
            csmss_g_erase_reg_req = KAL_FALSE;
        }
        #endif

        /* MAUI_01722785 add cf number interface */
        csmss_g_cf_number_length = 0;
    }

    return KAL_TRUE;

} /* end of csmss_reset */
Пример #4
0
/*****************************************************************************
 * FUNCTION
 *  jpim_evtdb_deleteEntry
 * DESCRIPTION
 *  This function deletes an entry from the event database.
 * PARAMETERS
 *  handle           [IN]
 * RETURNS
 *  jpim_error_code_enum
 *****************************************************************************/
kal_int32 jpim_evtdb_deleteEntry(kal_uint16 handle, kal_uint8 db_type, kal_int32 vm_id)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    kal_uint32 event_group;

    mmi_evtdb_java_set_entry_req_struct *p =
        (mmi_evtdb_java_set_entry_req_struct*) construct_local_para(
                                                sizeof(mmi_evtdb_java_set_entry_req_struct),
                                                TD_CTRL | TD_RESET);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    JPIM_DEBUG(TRACE_GROUP_2, JPIM_EVTDB_DELETEENTRY);

    p->entry_ptr = NULL;
    p->index = handle;
    p->sort_type = MMI_EVTDB_SORT_BY_TIME;
    p->db_index = jpim_evtdb_transfer_tdl_db(db_type);

    jpim_evtdb_result = MMI_EVTDB_JAVA_ERROR;
    jpim_evtdb_state = JPIM_EVTDB_STATE_DELETE_ENTRY;

	if (jpim_check_vm_state(1, vm_id))
    {
        jpim_send_ilm(p, MSG_ID_MMI_EVTDB_JAVA_SET_ENTRY_REQ);
        kal_retrieve_eg_events(g_java_event_group_1, JAVA_EG_PIM_EVTDB_DELETE_ENTRY, KAL_OR_CONSUME, &event_group, KAL_SUSPEND);
    }
    else
    {
        free_local_para((local_para_struct*) p);
    }
    return jpim_transfer_error_code(JPIM_EVENTDB, jpim_evtdb_result);
}
Пример #5
0
/*****************************************************************************
 * FUNCTION
 *  nvram_send_L1_cal
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void nvram_send_L1_cal(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
   /**
    *    file_idx should be the first L1 element in the logical data item ID enum
    *    Currently, L1 calibration data element is as following:
    *    NVRAM_EF_L1_AGCPATHLOSS_LID, NVRAM_EF_L1_RAMPTABLE_GSM900_LID,
    *    NVRAM_EF_L1_RAMPTABLE_DCS1800_LID, NVRAM_EF_L1_RAMPTABLE_PCS1900_LID, 
    *    NVRAM_EF_L1_AFCDATA_LID, VRAM_EF_L1_L1SPFC_LID, 
    */

    nvram_lid_enum file_idx;
    ltable_entry_struct *ldi;
    peer_buff_struct *peer_buf_ptr;
    kal_uint8 *pdu_ptr;
    kal_uint16 pdu_length;
    nvram_read_req_struct *local_data;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    local_data = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);

    for (file_idx = NVRAM_EF_L1_START; file_idx <= NVRAM_EF_L1_END; file_idx++)
    {
        if (!NVRAM_IS_LID_VALID(file_idx))
        {
            continue;
        }
        
        switch(file_idx)
        {
            case NVRAM_EF_L1_AGCPATHLOSS_LID:
            case NVRAM_EF_L1_RAMPTABLE_GSM850_LID:
            case NVRAM_EF_L1_RAMPTABLE_GSM900_LID:
            case NVRAM_EF_L1_RAMPTABLE_DCS1800_LID:
            case NVRAM_EF_L1_RAMPTABLE_PCS1900_LID:
        #if defined(__EPSK_TX__)
            case NVRAM_EF_L1_EPSK_RAMPTABLE_GSM850_LID:
            case NVRAM_EF_L1_EPSK_RAMPTABLE_GSM900_LID:
            case NVRAM_EF_L1_EPSK_RAMPTABLE_DCS1800_LID:
            case NVRAM_EF_L1_EPSK_RAMPTABLE_PCS1900_LID:
            case NVRAM_EF_L1_EPSK_INTERSLOT_RAMP_GSM850_LID:
            case NVRAM_EF_L1_EPSK_INTERSLOT_RAMP_GSM900_LID:
            case NVRAM_EF_L1_EPSK_INTERSLOT_RAMP_DCS1800_LID:
            case NVRAM_EF_L1_EPSK_INTERSLOT_RAMP_PCS1900_LID:
        #endif /* __EPSK_TX__ */ 
            case NVRAM_EF_L1_AFCDATA_LID:
            case NVRAM_EF_L1_TXIQ_LID:
            case NVRAM_EF_L1_RFSPECIALCOEF_LID:
            case NVRAM_EF_L1_INTERSLOT_RAMP_GSM850_LID:
            case NVRAM_EF_L1_INTERSLOT_RAMP_GSM900_LID:
            case NVRAM_EF_L1_INTERSLOT_RAMP_DCS1800_LID:
            case NVRAM_EF_L1_INTERSLOT_RAMP_PCS1900_LID:
            case NVRAM_EF_L1_CRYSTAL_AFCDATA_LID:
            case NVRAM_EF_L1_CRYSTAL_CAPDATA_LID:
            {
                nvram_get_data_item(ldi, file_idx);
        
                local_data->access_id = 0;
                local_data->file_idx = file_idx;
                local_data->para = 1;
        
                pdu_length = ldi->size;
                peer_buf_ptr = construct_peer_buff(pdu_length, 0, 0, TD_CTRL);
                ASSERT(peer_buf_ptr != NULL);
        
                pdu_ptr = get_pdu_ptr(peer_buf_ptr, &pdu_length);
                ASSERT(pdu_ptr != NULL);
        
                nvram_read_confirm
                    (MOD_L1, nvram_read_data_item(ldi, 1, 1, pdu_ptr, pdu_length), local_data, ldi->size, peer_buf_ptr);
                
                break;
            }
        }
    }

    free_local_para((local_para_struct*) local_data);

}   /* end of nvram_send_L1_cal function */
Пример #6
0
/*****************************************************************************
 * FUNCTION
 *  jpim_evtdb_fetchByIndex
 * DESCRIPTION
 *  This function retrieves an entry from the event database. The data is filled into "entry" parameter.
 * PARAMETERS
 *  entry           [OUT]
 *  index           [IN]        0~n-1
 *  sort_type       [IN]        jpim_evtdb_sort_enum
 *  db_type         [IN]        jpim_evtdb_db_enum
 * RETURNS
 *  jpim_error_code_enum
 *****************************************************************************/
kal_int32 jpim_evtdb_fetchByIndex(mmi_evtdb_java_entry_struct *entry,
									   kal_uint16 index,
									   kal_uint8 sort_type,
									   kal_uint8 db_type,
									   kal_int32 vm_id)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_uint32 event_group;

    mmi_evtdb_java_get_entry_req_struct *p =
        (mmi_evtdb_java_get_entry_req_struct*) construct_local_para(
                                                sizeof(mmi_evtdb_java_get_entry_req_struct),
                                                TD_CTRL | TD_RESET);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/

    p->entry_ptr = entry;
    p->index = index;
    p->sort_type = MMI_EVTDB_SORT_BY_TIME;
    p->db_index = jpim_evtdb_transfer_tdl_db(db_type);
    p->count = 1;

    jpim_evtdb_result = MMI_EVTDB_JAVA_ERROR;
    jpim_evtdb_state = JPIM_EVTDB_STATE_GET_ENTRY;

	if (jpim_check_vm_state(0, vm_id))
    {
        jpim_send_ilm(p, MSG_ID_MMI_EVTDB_JAVA_GET_ENTRY_REQ);
        kal_retrieve_eg_events(g_java_event_group_1, JAVA_EG_PIM_EVTDB_FETCH_INDEX, KAL_OR_CONSUME, &event_group, KAL_SUSPEND);
        JPIM_DEBUG(TRACE_GROUP_2, JPIM_EVTDB_FETCHBYINDEX, entry->handle, entry->index);
    }
    else
    {
        free_local_para((local_para_struct*) p);
    }


    if(jpim_transfer_error_code(JPIM_EVENTDB, jpim_evtdb_result) == JPIM_SUCCESS)
    {
#ifdef JSR_75_PIM_EXTRA_ALARM_TIME_USER_DEFINE
        jpim_evtdb_adjustAlarmTime(entry, db_type, KAL_FALSE);
#endif
#ifndef __COSMOS_MMI_PACKAGE__
        if (db_type == JPIM_EVTDB_REMINDER || db_type == JPIM_EVTDB_MEETING || db_type == JPIM_EVTDB_COURSE ||
		    db_type == JPIM_EVTDB_DATE || db_type == JPIM_EVTDB_CALL|| db_type == JPIM_EVTDB_ANNIVERSARY || 
		    db_type == JPIM_EVTDB_ALL)
#else
        if (db_type == JPIM_EVTDB_PERSONAL || db_type == JPIM_EVTDB_MEETING || db_type == JPIM_EVTDB_SPECIALDAY ||
		    db_type == JPIM_EVTDB_BIRTHDAY || db_type == JPIM_EVTDB_OTHERS || db_type == JPIM_EVTDB_ALL)
#endif
        {
            if (applib_dt_compare_time(&(entry->endTime), &(entry->startTime), NULL) == DT_TIME_LESS)
            {
                memcpy(&(entry->endTime), &(entry->startTime), sizeof(applib_time_struct));
            }
        }
        if (db_type == JPIM_EVTDB_TASK)
        {
#ifdef JSR_75_PIM_EXTRA_TODO
		    if (entry->status == SRV_TDL_STATUS_UNDONE)
		    {
                entry->complete_time.nYear = 0;
                entry->complete_time.nMonth = 0;
                entry->complete_time.nDay = 0;
    }
#endif
		}
		
    }

    return jpim_transfer_error_code(JPIM_EVENTDB, jpim_evtdb_result);
}
Пример #7
0
/*************************************************************************
* FUNCTION
*  ccci_ipc_send_msg
*
* DESCRIPTION
*  This function is the internal api to send message
*
* PARAMETERS
*  ipc_task_id     -  
*  buffer_ptr      -
*  msg_size        -
*  wait_mode       -
*  message_to_head -
*
* RETURNS
*  status - success/fail
*
*************************************************************************/
kal_bool ccci_ipc_send_msg(kal_uint32 ipc_task_id, void *buffer_ptr, kal_uint16 msg_size,	kal_wait_mode wait_mode, kal_bool message_to_head)
{
    kal_uint32 i, j ;
    kal_uint32 retrieved_events = 0, orig_local_addr = 0 , orig_peer_addr = 0, update_buff_addr=0;
    kal_int32 result = CCCI_SUCCESS;
    ipc_ilm_t	*temp_ipc_ilm = (ipc_ilm_t *)buffer_ptr;
    ccci_io_request_t ior = {0};
	CCCI_BUFF_T *p_ccci_buff;
    kal_uint32 len = 0;
	
		
	ccci_ipc_trace(CCCI_IPC_TRACE, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_TRA);	
    ccci_ipc_trace(CCCI_IPC_TRACE, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_TRA_ILM,
                temp_ipc_ilm, temp_ipc_ilm->src_mod_id, temp_ipc_ilm->dest_mod_id,
                temp_ipc_ilm->sap_id, temp_ipc_ilm->msg_id,
                temp_ipc_ilm->local_para_ptr, temp_ipc_ilm->peer_buff_ptr);
		
    /* get ext queue id from mapping table of task id - destnation*/
    for (i = 0; i < MAX_CCCI_IPC_TASKS; i++) 
    {
        if ( ccci_ipc_maptbl[i].task_id == ipc_task_id )
        	{
                    break;
        	}
    }
	
    /* get ext queue id from mapping table of task id - source*/
    for (j = 0; j < MAX_CCCI_IPC_TASKS; j++) 
    {
        if ( ccci_ipc_maptbl[j].task_id == temp_ipc_ilm->src_mod_id )
        	{
                    break;
        	}
    }
  
    /* check src mod id, if it's not defined in CCCI IPC, don't set used bit */
    if(j >= MAX_CCCI_IPC_TASKS)
    {
        ccci_ipc_trace(CCCI_IPC_ERR, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_TASKID_ERROR, ipc_task_id, temp_ipc_ilm->src_mod_id);
        return KAL_FALSE;
    }
 
    /* check if the extquque id can not be found */
    if (i >= MAX_CCCI_IPC_TASKS) 
    {
	    ccci_ipc_trace(CCCI_IPC_ERR, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_TASKID_ERROR, ipc_task_id, temp_ipc_ilm->src_mod_id);
        ((CCCI_IPC_ILM_T*)buffer_ptr)->used = 0;  
        return KAL_FALSE;
    }
  
        /* check if the extquque id is to AP */
    if ((ccci_ipc_maptbl[i].extq_id & AP_UINFY_ID_FLAG) == 0)
    {
        ccci_ipc_trace(CCCI_IPC_ERR, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_DESTID_ERROR, ipc_task_id);
        ((CCCI_IPC_ILM_T*)buffer_ptr)->used = 0;   
	    return KAL_FALSE;
    }

    /* check if the ilm buffer is from ipc_msgsvc_allocate_ilm or not */
    if (buffer_ptr != &ccci_ipc_ilm_arr[j].ipc_ilm){
        ccci_ipc_trace(CCCI_IPC_ERR, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_ILM_ERROR);
        return KAL_FALSE;
    }
		    
	len = sizeof(CCCI_BUFF_T) + sizeof(ipc_ilm_t);
    if (temp_ipc_ilm->local_para_ptr != NULL){          
        len+= temp_ipc_ilm->local_para_ptr->msg_len ;
    }
    if( temp_ipc_ilm->peer_buff_ptr != NULL){
        len+= sizeof(peer_buff_struct) 
            + temp_ipc_ilm->peer_buff_ptr->pdu_len 
            + temp_ipc_ilm->peer_buff_ptr->free_header_space 
            + temp_ipc_ilm->peer_buff_ptr->free_tail_space;
    }
	//assert if ilm size > CCCI_IPC_GPD size
	EXT_ASSERT(len < CCCI_IPC_GPD_SIZE, len, CCCI_IPC_GPD_SIZE, 0);

    /* Use critical section to protect ENTER */
    CCCI_IPC_ENTER_CRITICAL_SECTION
    if (KAL_TRUE == kal_query_systemInit()){ // polling mode
        ior.first_gpd = ccci_ipc_ch.p_polling_gpd;
        ior.last_gpd  = ccci_ipc_ch.p_polling_gpd;
    }
    else{
#ifdef __SDIOC_PULL_Q_ENH_DL__
        ior.num_gpd = 
#endif 
        qbmt_alloc_q_no_tail( 
                            CCCI_IPC_GPD_TYPE,            /* type */
                            1,                            /* buff_num */
                            (void **)(&ior.first_gpd),    /* pp_head */
                            (void **)(&ior.last_gpd));    /* pp_tail */
        if(ior.first_gpd == NULL){
            ccci_ipc_trace(CCCI_IPC_ERR, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_ALLOC_GPD_ERROR);
            return KAL_FALSE;
        }
    }
    
	//initialize GPD CCCI_Header content
	p_ccci_buff = CCCIDEV_GET_QBM_DATAPTR(ior.first_gpd);
	p_ccci_buff->data[1] = (kal_uint32)len;
	p_ccci_buff->channel = (kal_uint32)ccci_ipc_ch.send_channel;
	p_ccci_buff->reserved = (kal_uint32)ccci_ipc_maptbl[i].extq_id;
    ccci_debug_add_seq(p_ccci_buff, CCCI_DEBUG_ASSERT_BIT); // add ccci seq
    QBM_DES_SET_DATALEN(ior.first_gpd, p_ccci_buff->data[1]);
    QBM_DES_SET_DATALEN(ior.first_gpd->p_data_tbd,  p_ccci_buff->data[1]);
    qbm_cal_set_checksum((kal_uint8 *)ior.first_gpd);
    qbm_cal_set_checksum((kal_uint8 *)ior.first_gpd->p_data_tbd);
    QBM_CACHE_FLUSH(ior.first_gpd, sizeof(qbm_gpd));
    QBM_CACHE_FLUSH(ior.first_gpd->p_data_tbd, sizeof(qbm_gpd));
    
    
    //copy ilm to GPD
    temp_ipc_ilm->src_mod_id =	ccci_ipc_maptbl[j].extq_id; 
    update_buff_addr = (kal_uint32)p_ccci_buff;
	update_buff_addr += sizeof(CCCI_BUFF_T);	
    CCCI_KAL_MSG_TO_AP_MSG(temp_ipc_ilm->msg_id, temp_ipc_ilm->msg_id);
	kal_mem_cpy((kal_uint8 *)update_buff_addr ,(kal_uint8 *)temp_ipc_ilm, sizeof(ipc_ilm_t));
    
	if (temp_ipc_ilm->local_para_ptr != NULL){			
			//copy loca_para_struct to GPD
			update_buff_addr += sizeof(ipc_ilm_t); //24 bytes
			orig_local_addr = update_buff_addr;
			kal_mem_cpy((kal_uint8 *)update_buff_addr,(kal_uint8 *)temp_ipc_ilm->local_para_ptr, temp_ipc_ilm->local_para_ptr->msg_len);
    }
    
    if( temp_ipc_ilm->peer_buff_ptr != NULL){
			//copy peer buff_struct to GPD
			if (temp_ipc_ilm->local_para_ptr != NULL){	 
			    update_buff_addr += temp_ipc_ilm->local_para_ptr->msg_len;//should be 4 bytes alignment?? 
			}
            else{
                update_buff_addr += sizeof(ipc_ilm_t); //24 bytes
            }
			orig_peer_addr = update_buff_addr;
			kal_mem_cpy((kal_uint8 *)update_buff_addr,(kal_uint8 *)temp_ipc_ilm->peer_buff_ptr, 
                          sizeof(peer_buff_struct) 
                          + temp_ipc_ilm->peer_buff_ptr->pdu_len 
                          + temp_ipc_ilm->peer_buff_ptr->free_header_space 
                          + temp_ipc_ilm->peer_buff_ptr->free_tail_space);
    }

    free_local_para(temp_ipc_ilm->local_para_ptr);
	temp_ipc_ilm->local_para_ptr = (local_para_struct *)orig_local_addr;//assign not NULL ptr to indicate there have content 
			
	free_peer_buff(temp_ipc_ilm->peer_buff_ptr);
	temp_ipc_ilm->peer_buff_ptr = (peer_buff_struct *)orig_peer_addr;//assign not NULL ptr to indicate there have content			

    QBM_CACHE_FLUSH(p_ccci_buff, len);
    
    if (KAL_TRUE == kal_query_systemInit()){ // polling mode
        result = ccci_polling_io(ccci_ipc_ch.send_channel, ccci_ipc_ch.p_polling_gpd, KAL_TRUE);
        CCCIDEV_RST_CCCI_COMM_GPD_LIST(ccci_ipc_ch.p_polling_gpd,ccci_ipc_ch.p_polling_gpd);
    }
    else{		
        result = ccci_ipc_ch.ccci_write_gpd(ccci_ipc_ch.send_channel, &ior, NULL);	
    	
        if (KAL_INFINITE_WAIT == wait_mode && CCCI_SUCCESS == result){		
    	    /* Wait for feedabck by retrieve event */
    	    kal_retrieve_eg_events(ccci_ipc_ch.event, 1 << i, KAL_AND_CONSUME,  &retrieved_events, KAL_SUSPEND);
        }
    }				
	/* Exit critical section */ 
	CCCI_IPC_EXIT_CRITICAL_SECTION
    ((CCCI_IPC_ILM_T*)buffer_ptr)->used = 0;  

    ccci_ipc_trace(CCCI_IPC_TRACE, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_TRA_CCCI,
                p_ccci_buff->data[0], p_ccci_buff->data[1], p_ccci_buff->channel, p_ccci_buff->reserved);
    ccci_ipc_trace(CCCI_IPC_TRACE, CCCI_IPC_MOD_DATA, CCCI_SEND_MSG_FUNC_PASS_TRA);	
		
	/* Finish */	
    if (result == CCCI_SUCCESS){
    	return KAL_TRUE;
    }
    else{
        return KAL_FALSE;
    }
        
}