rjw | 6c1fd8f | 2022-11-30 14:33:01 +0800 | [diff] [blame] | 1 | /***************************************************************************** |
| 2 | * Copyright Statement: |
| 3 | * -------------------- |
| 4 | * This software is protected by Copyright and the information contained |
| 5 | * herein is confidential. The software may not be copied and the information |
| 6 | * contained herein may not be used or disclosed except with the written |
| 7 | * permission of MediaTek Inc. (C) 2016 |
| 8 | * |
| 9 | * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES |
| 10 | * THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE") |
| 11 | * RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON |
| 12 | * AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES, |
| 13 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF |
| 14 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT. |
| 15 | * NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE |
| 16 | * SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR |
| 17 | * SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH |
| 18 | * THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO |
| 19 | * NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S |
| 20 | * SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM. |
| 21 | * |
| 22 | * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE |
| 23 | * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE, |
| 24 | * AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE, |
| 25 | * OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO |
| 26 | * MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE. |
| 27 | * |
| 28 | * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE |
| 29 | * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF |
| 30 | * LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND |
| 31 | * RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER |
| 32 | * THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC). |
| 33 | * |
| 34 | *****************************************************************************/ |
| 35 | |
| 36 | /******************************************************************************* |
| 37 | * |
| 38 | * Filename: |
| 39 | * --------- |
| 40 | * nvram_cl1def.c |
| 41 | * |
| 42 | * Project: |
| 43 | * -------- |
| 44 | * 93 |
| 45 | * |
| 46 | * Description: |
| 47 | * ------------ |
| 48 | * Interface Implementation provided to NVRAM. |
| 49 | * |
| 50 | * |
| 51 | * Author: |
| 52 | * ------- |
| 53 | * |
| 54 | * |
| 55 | *============================================================================== |
| 56 | * HISTORY |
| 57 | * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!! |
| 58 | *------------------------------------------------------------------------------ |
| 59 | * |
| 60 | * |
| 61 | *------------------------------------------------------------------------------ |
| 62 | * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!! |
| 63 | *============================================================================== |
| 64 | *******************************************************************************/ |
| 65 | |
| 66 | #include "kal_public_api.h" |
| 67 | #include "cl1d_rf_common_defs.h" |
| 68 | #include "nvram_enums.h" |
| 69 | #include "cl1_nvram_def.h" |
| 70 | #include "cl1cal_nvram_def.h" |
| 71 | #include "nvram_cl1def.h" |
| 72 | #include "cl1d_rf_cid.h" |
| 73 | #include "cl1d_rf_error_check.h" |
| 74 | |
| 75 | /*** Need by getting default item info(lid, item index and size) ***/ |
| 76 | typedef struct |
| 77 | { |
| 78 | nvram_lid_enum lid; |
| 79 | kal_uint16 rec_idx; |
| 80 | kal_uint16 rec_num; |
| 81 | kal_uint32 size; |
| 82 | } CL1D_RF_CUST_DATA_LID_INFO_T; |
| 83 | |
| 84 | |
| 85 | #undef NVRAM_ITEM_RF_CUST |
| 86 | #undef NVRAM_ITEM_MIPI |
| 87 | #undef NVRAM_ITEM_RF_CAL |
| 88 | #undef NVRAM_ITEM_RF_POC |
| 89 | #undef NVRAM_ITEM_RF_TAS_VAR |
| 90 | #undef NVRAM_ITEM_RF_TAS_ARRAY |
| 91 | #undef NVRAM_ITEM_ELNA_VAR |
| 92 | #undef NVRAM_ITEM_TX_POWER_VAR |
| 93 | #undef NVRAM_ITEM_RF_TAS_TST |
| 94 | #define NVRAM_ITEM_RF_CUST(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 95 | #define NVRAM_ITEM_MIPI(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 96 | #define NVRAM_ITEM_RF_CAL(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1CAL_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 97 | #define NVRAM_ITEM_RF_POC(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1CAL_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 98 | #define NVRAM_ITEM_RF_TAS_VAR(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(C2K_CUSTOM_##tYPE)*(tYPEnUM)}, |
| 99 | #define NVRAM_ITEM_RF_TAS_ARRAY(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 100 | #define NVRAM_ITEM_ELNA_VAR(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 101 | #define NVRAM_ITEM_TX_POWER_VAR(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 102 | #define NVRAM_ITEM_RF_TAS_TST(nAME, aFFIX, rECnUM, tYPE, tYPEnUM, fUNC) {NVRAM_EF_CL1_##nAME##_LID, aFFIX##_IDX, rECnUM, sizeof(CL1D_RF_##tYPE)*(tYPEnUM)}, |
| 103 | |
| 104 | const CL1D_RF_CUST_DATA_LID_INFO_T cl1d_rf_cust_data_lid_info[CL1D_RF_NVRAM_ITEM_MAX_NUM] = |
| 105 | { |
| 106 | #include "cl1_nvram_id.h" |
| 107 | }; |
| 108 | |
| 109 | kal_uint16 setIndexDebug=5; |
| 110 | #if (IS_C2K_DRDI_SUPPORT) |
| 111 | static kal_bool cl1d_drdi_had_done = KAL_FALSE; |
| 112 | #endif |
| 113 | |
| 114 | const static CL1D_RF_CUST_DATA_SET_INFO_T* set_info_ptr; |
| 115 | |
| 116 | #if defined(__MD97__) |
| 117 | #else |
| 118 | extern void CL1D_RF_POC_Data_Default(const kal_int8 rf_band, |
| 119 | const kal_int8 c2k_band, |
| 120 | CL1D_RF_POC_FINAL_T *data_out); |
| 121 | #endif |
| 122 | extern void CL1D_RF_DPD_Data_Default(const kal_int8 rf_band, |
| 123 | const kal_int8 c2k_band, |
| 124 | CL1D_RF_TX_DPD_AM_PM_LUT_DATA_T *data_out); |
| 125 | extern kal_bool cl1_custom_drdi_enable; |
| 126 | |
| 127 | void nvram_CL1D_DrdiPointerInit(kal_uint16 setIdx) |
| 128 | { |
| 129 | ///TODO: Check setIdx |
| 130 | |
| 131 | set_info_ptr = c1ld_rf_cust_data_drdi_set_ptr[setIdx]; |
| 132 | } |
| 133 | |
| 134 | |
| 135 | void nvram_CL1D_Drdi(void) |
| 136 | { |
| 137 | #if (IS_C2K_DRDI_SUPPORT) |
| 138 | if(!cl1d_drdi_had_done) |
| 139 | { |
| 140 | |
| 141 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 142 | if(cl1_custom_drdi_enable) |
| 143 | { |
| 144 | kal_uint16 setIdx; |
| 145 | setIdx = MML1_RF_DRDI_Dynamic_GetParamAddr(MML1_RF_C2K); |
| 146 | setIndexDebug=setIdx; |
| 147 | /* set the pointer to RF custom data by set index */ |
| 148 | nvram_CL1D_DrdiPointerInit(setIdx); |
| 149 | } |
| 150 | else |
| 151 | { |
| 152 | nvram_CL1D_DrdiPointerInit(0); |
| 153 | } |
| 154 | #else //Use default setting when in modis. |
| 155 | nvram_CL1D_DrdiPointerInit(0); |
| 156 | #endif |
| 157 | |
| 158 | cl1d_drdi_had_done = KAL_TRUE; |
| 159 | } |
| 160 | #else |
| 161 | nvram_CL1D_DrdiPointerInit(0); |
| 162 | #endif/*IS_3G_DRDI_SUPPORT*/ |
| 163 | } |
| 164 | |
| 165 | kal_uint32 nvram_CL1D_get_item_idx(nvram_lid_enum lid, kal_uint16 rec_idx, kal_uint16* rec_amount) |
| 166 | { |
| 167 | kal_uint32 i; |
| 168 | |
| 169 | for (i = 0; i < CL1D_RF_NVRAM_ITEM_MAX_NUM; i++) |
| 170 | { |
| 171 | if (cl1d_rf_cust_data_lid_info[i].lid == lid && cl1d_rf_cust_data_lid_info[i].rec_idx == rec_idx) |
| 172 | { |
| 173 | *rec_amount = cl1d_rf_cust_data_lid_info[i].rec_num; |
| 174 | break; |
| 175 | } |
| 176 | } |
| 177 | |
| 178 | return i; |
| 179 | } |
| 180 | |
| 181 | void nvram_get_cl1_default_value_to_write(nvram_lid_enum lid, kal_uint8 *buffer, kal_uint16 buffer_size) |
| 182 | { |
| 183 | kal_uint32 nvram_item_idx; |
| 184 | kal_uint32 nvram_item_size; |
| 185 | kal_uint16 rec_idx = 1; |
| 186 | kal_uint16 rec_num; |
| 187 | kal_uint16 last_rec_num; |
| 188 | kal_uint16 last_nvram_item_size; |
| 189 | kal_bool first_record = TRUE; |
| 190 | nvram_CL1D_Drdi(); |
| 191 | |
| 192 | do |
| 193 | { |
| 194 | nvram_item_idx = nvram_CL1D_get_item_idx(lid, rec_idx, &rec_num); |
| 195 | #if defined(__MD93__)||defined(__MD95__) |
| 196 | EXT_ASSERT(rec_idx <= rec_num, lid, rec_idx, rec_num); |
| 197 | #elif defined(__MD97__) |
| 198 | if(rec_idx > rec_num){ //check rec_idx valid |
| 199 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 200 | CL1D_ErrorCheck_NVRAM_check_record_index((kal_uint32)lid, (kal_uint32)rec_idx, (kal_uint32)rec_num); |
| 201 | #endif |
| 202 | } |
| 203 | #endif |
| 204 | nvram_item_size = cl1d_rf_cust_data_lid_info[nvram_item_idx].size; |
| 205 | if(first_record) |
| 206 | { |
| 207 | first_record = FALSE; |
| 208 | #if defined(__MD93__)||defined(__MD95__) |
| 209 | EXT_ASSERT(rec_num * nvram_item_size <= buffer_size, lid, buffer_size, nvram_item_size); |
| 210 | #elif defined(__MD97__) |
| 211 | if(rec_num * nvram_item_size > buffer_size){ //check buffer size valid |
| 212 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 213 | CL1D_ErrorCheck_NVRAM_check_buffer_size((kal_uint32)lid, (kal_uint32)buffer_size, (kal_uint32)nvram_item_size); |
| 214 | #endif |
| 215 | } |
| 216 | #endif |
| 217 | } |
| 218 | else |
| 219 | { |
| 220 | /* Check second record data valid */ |
| 221 | #if defined(__MD93__)||defined(__MD95__) |
| 222 | EXT_ASSERT(last_rec_num == rec_num, lid, last_rec_num, rec_num); |
| 223 | EXT_ASSERT(last_nvram_item_size == nvram_item_size, lid, last_nvram_item_size, nvram_item_size); |
| 224 | #elif defined(__MD97__) |
| 225 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 226 | if(last_rec_num != rec_num){ |
| 227 | CL1D_ErrorCheck_NVRAM_check_record_num_2nd((kal_uint32)lid, (kal_uint32)last_rec_num, (kal_uint32)rec_num); |
| 228 | } |
| 229 | |
| 230 | if(last_nvram_item_size != nvram_item_size){ |
| 231 | CL1D_ErrorCheck_NVRAM_check_item_size_2nd((kal_uint32)lid, (kal_uint32)last_nvram_item_size, (kal_uint32)nvram_item_size); |
| 232 | } |
| 233 | #endif |
| 234 | #endif |
| 235 | } |
| 236 | |
| 237 | last_rec_num = rec_num; |
| 238 | last_nvram_item_size = nvram_item_size; |
| 239 | |
| 240 | kal_mem_cpy((kal_uint8*)buffer + (rec_idx - 1) * nvram_item_size, set_info_ptr[nvram_item_idx], nvram_item_size); |
| 241 | |
| 242 | }while(rec_idx++ < rec_num); |
| 243 | } |
| 244 | |
| 245 | kal_int32 nvram_get_cl1_default_band_idx_to_c2k_band(kal_int32 band_idx) |
| 246 | { |
| 247 | kal_uint32 nvram_item_idx; |
| 248 | CL1D_RF_CUST_PARAM_T *param_ptr = NULL; |
| 249 | kal_int32 c2k_band = SYS_BAND_CLASS_NOT_USED; |
| 250 | kal_uint16 rec_num; |
| 251 | #if defined(__MD93__)||defined(__MD95__) |
| 252 | ASSERT(band_idx < RF_CUST_SUPPORT_BAND_MAX_NUM); |
| 253 | #elif defined(__MD97__) |
| 254 | DEBUG_ASSERT(band_idx < RF_CUST_SUPPORT_BAND_MAX_NUM); |
| 255 | #endif |
| 256 | |
| 257 | nvram_CL1D_Drdi(); |
| 258 | nvram_item_idx = nvram_CL1D_get_item_idx(NVRAM_EF_CL1_CUST_PARAM_LID, 1, &rec_num); |
| 259 | param_ptr = (CL1D_RF_CUST_PARAM_T *)set_info_ptr[nvram_item_idx]; |
| 260 | |
| 261 | if (param_ptr->band_support[band_idx].is_supported) |
| 262 | c2k_band = param_ptr->band_support[band_idx].band_class; |
| 263 | |
| 264 | if (c2k_band > SYS_BAND_CLASS_NOT_USED) |
| 265 | c2k_band = SYS_BAND_CLASS_NOT_USED; |
| 266 | |
| 267 | return c2k_band; |
| 268 | } |
| 269 | |
| 270 | #if defined(__MD97__) |
| 271 | #else |
| 272 | void nvram_get_cl1_poc_default_value_to_write(nvram_lid_enum lid, kal_uint8 *buffer, kal_uint16 buffer_size) |
| 273 | { |
| 274 | #if 0 |
| 275 | /* under construction !*/ |
| 276 | /* under construction !*/ |
| 277 | /* under construction !*/ |
| 278 | /* under construction !*/ |
| 279 | /* under construction !*/ |
| 280 | /* under construction !*/ |
| 281 | #endif |
| 282 | |
| 283 | kal_uint32 nvram_item_idx; |
| 284 | kal_int32 band_idx = 0; |
| 285 | kal_int32 c2k_band; |
| 286 | kal_uint16 rec_num, last_rec_num; |
| 287 | do |
| 288 | { |
| 289 | nvram_item_idx = nvram_CL1D_get_item_idx(NVRAM_EF_CL1CAL_POC_FINAL_LID, (band_idx + 1), &rec_num); |
| 290 | c2k_band = nvram_get_cl1_default_band_idx_to_c2k_band(band_idx); |
| 291 | CL1D_RF_POC_Data_Default(band_idx, c2k_band, set_info_ptr[nvram_item_idx]); |
| 292 | |
| 293 | if(band_idx != 0) |
| 294 | EXT_ASSERT(last_rec_num == rec_num, band_idx, last_rec_num, rec_num); |
| 295 | |
| 296 | last_rec_num = rec_num; |
| 297 | band_idx++; |
| 298 | }while(band_idx < rec_num); |
| 299 | nvram_get_cl1_default_value_to_write(lid, buffer, buffer_size); |
| 300 | } |
| 301 | #endif |
| 302 | |
| 303 | void nvram_get_cl1_1xrtt_dpd_am_pm_default_value_to_write(nvram_lid_enum lid, kal_uint8 *buffer, kal_uint16 buffer_size) |
| 304 | { |
| 305 | kal_uint32 nvram_item_idx; |
| 306 | kal_int32 band_idx = 0; |
| 307 | kal_int32 c2k_band; |
| 308 | kal_uint16 rec_num, last_rec_num; |
| 309 | do |
| 310 | { |
| 311 | nvram_item_idx = nvram_CL1D_get_item_idx(NVRAM_EF_CL1CAL_TX_DPD_AM_PM_COMP_1XRTT_LID, (band_idx + 1), &rec_num); |
| 312 | c2k_band = nvram_get_cl1_default_band_idx_to_c2k_band(band_idx); |
| 313 | CL1D_RF_DPD_Data_Default(band_idx, c2k_band, set_info_ptr[nvram_item_idx]); |
| 314 | |
| 315 | |
| 316 | #if defined(__MD93__)||defined(__MD95__) |
| 317 | if(band_idx != 0){ |
| 318 | EXT_ASSERT(last_rec_num == rec_num, band_idx, last_rec_num, rec_num); |
| 319 | } |
| 320 | #elif defined(__MD97__) |
| 321 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 322 | if((band_idx != 0)&&(last_rec_num != rec_num)){ |
| 323 | CL1D_ErrorCheck_NVRAM_check_dpd_1x_default_write((kal_uint32)band_idx, (kal_uint32)last_rec_num, (kal_uint32)rec_num); |
| 324 | } |
| 325 | #endif |
| 326 | #endif |
| 327 | |
| 328 | last_rec_num = rec_num; |
| 329 | band_idx++; |
| 330 | }while(band_idx < rec_num); |
| 331 | nvram_get_cl1_default_value_to_write(lid, buffer, buffer_size); |
| 332 | } |
| 333 | |
| 334 | void nvram_get_cl1_evdo_dpd_am_pm_default_value_to_write(nvram_lid_enum lid, kal_uint8 *buffer, kal_uint16 buffer_size) |
| 335 | { |
| 336 | kal_uint32 nvram_item_idx; |
| 337 | kal_int32 band_idx = 0; |
| 338 | kal_int32 c2k_band; |
| 339 | kal_uint16 rec_num, last_rec_num; |
| 340 | do |
| 341 | { |
| 342 | nvram_item_idx = nvram_CL1D_get_item_idx(NVRAM_EF_CL1CAL_TX_DPD_AM_PM_COMP_EVDO_LID, (band_idx + 1), &rec_num); |
| 343 | c2k_band = nvram_get_cl1_default_band_idx_to_c2k_band(band_idx); |
| 344 | CL1D_RF_DPD_Data_Default(band_idx, c2k_band, set_info_ptr[nvram_item_idx]); |
| 345 | |
| 346 | #if defined(__MD93__)||defined(__MD95__) |
| 347 | if(band_idx != 0){ |
| 348 | EXT_ASSERT(last_rec_num == rec_num, band_idx, last_rec_num, rec_num); |
| 349 | } |
| 350 | #elif defined(__MD97__) |
| 351 | #ifndef MTK_PLT_ON_PC /*This macro will be opened in modis */ |
| 352 | if((band_idx != 0)&&(last_rec_num != rec_num)){ |
| 353 | CL1D_ErrorCheck_NVRAM_check_dpd_do_default_write((kal_uint32)band_idx, (kal_uint32)last_rec_num, (kal_uint32)rec_num); |
| 354 | } |
| 355 | #endif |
| 356 | #endif |
| 357 | |
| 358 | last_rec_num = rec_num; |
| 359 | band_idx++; |
| 360 | }while(band_idx < rec_num); |
| 361 | nvram_get_cl1_default_value_to_write(lid, buffer, buffer_size); |
| 362 | } |
| 363 | |
| 364 | |