blob: 7845e576aff711d9640c0b069a6f90820d37f9fc [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
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) ***/
76typedef 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
104const 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
109kal_uint16 setIndexDebug=5;
110#if (IS_C2K_DRDI_SUPPORT)
111static kal_bool cl1d_drdi_had_done = KAL_FALSE;
112#endif
113
114const static CL1D_RF_CUST_DATA_SET_INFO_T* set_info_ptr;
115
116#if defined(__MD97__)
117#else
118extern 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
122extern 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);
125extern kal_bool cl1_custom_drdi_enable;
126
127void 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
135void 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
165kal_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
181void 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
245kal_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
272void 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
303void 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
334void 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