Пример #1
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 */
Пример #2
0
/*****************************************************************************
 * 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_reset_req_struct *nvram_reset_req = (nvram_reset_req_struct*) ilm_ptr->local_para_ptr;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    nvram_trace(TRACE_FUNC, FUNC_NVRAM_RESET);
    ASSERT(nvram_reset_req != NULL);
    if (nvram_ptr->dev_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_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_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)
            {
                nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_reset_req);
            }
            else
            {
                nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_reset_req);
            }
        }
        /* State error */
        else
        {
            nvram_trace(TRACE_FUNC, ERROR_NVRAM_STATE);

            nvram_reset_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_reset_req);
        }
    }
}   /* end of nvram_reset_handler */