blob: a8e59f389a23de6a45f6f129b377bb68d12b9f0e [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) 2005
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 * Include
37 */
38
39#include <string.h>
40
41#include "kal_general_types.h"
42#include "kal_internal_api.h"
43#include "kal_public_defs.h"
44#include "kal_public_api.h"
45#include "kal_trace.h"
46
47#include "fs_type.h" /* FS_HANDLE */
48#include "fs_func.h" /* FS_Delete */
49#include "fs_errcode.h" /* FS_NO_ERROR */
50#include "ex_item.h" /* EX_LOG_T */
51
52#include "tst_msgid.h"
53#include "sbp_public_utility.h"
54#if defined(__NVRAM_ACCESS_TIMEOUT_ASSERT__)
55#include "dcl_gpt.h"
56#endif
57
58#include "nvram_cache_interface.h"
59#include "nvram_defs.h"
60
61
62
63
64/*******************************************************
65 * External Function
66 *******************************************************/
67extern kal_uint32 pre_read_white_list[];
68extern kal_uint16 preread_white_list_amount;
69/*******************************************************
70 * Define
71 *******************************************************/
72
73
74/*******************************************************
75 * Typedef
76 *******************************************************/
77
78
79/*******************************************************
80 * Global Variable
81 *******************************************************/
82extern nvram_ee_info_type* nvram_ee_info;
83extern kal_char nvram_trace_dump_temp_buffer[];
84extern kal_char nvram_trace_dump_buffer[];
85extern kal_mutexid g_nvram_dump_trace_mutex;
86extern kal_wchar nvram_trace_filename[];
87extern FS_HANDLE nvram_trace_file_hdl;
88extern kal_uint32 nvram_trace_dump_buffer_offset;
89
90/*******************************************************
91 * Local Function
92 *******************************************************/
93
94
95/*******************************************************
96 * Local Variable
97 *******************************************************/
98nvram_errno_enum nvram_pre_read_white_list_lid(void)
99{
100#ifdef __NVRAM_LID_PREREAD__
101 kal_uint16 i,j;
102 nvram_ltable_entry_struct *ldi = NULL;
103 kal_uint8 *preread_temp_buffer = NULL;
104 kal_uint32 preread_temp_buffer_size = 0;
105 NVRAM_FILE_NAME nvramname;
106 kal_wchar filename[NVRAM_MAX_PATH_LEN];
107 nvram_folder_enum nvram_folder;
108 nvram_ldi_header nv_header;
109 kal_int32 rec_in_block = 0;
110
111 for(i = 0; i < preread_white_list_amount; i++)
112 {
113 if(!nvram_util_get_data_item(&ldi, pre_read_white_list[i]))
114 {
115 //NVRAM_EXT_ASSERT(pre_read_white_list[i], preread_white_list_amount, NVRAM_LOC_INIT_BUFFER_OVERFLOW, MAX_NVRAM_RECORD_SIZE);
116 continue;
117 }
118
119 if (!nvram_util_has_file_created(ldi))
120 {
121 continue;
122 }
123 preread_temp_buffer_size = ldi->size * ldi->total_records;
124 if (preread_temp_buffer_size > MAX_NVRAM_RECORD_SIZE)
125 {
126 preread_temp_buffer_size = MAX_NVRAM_RECORD_SIZE;
127 }
128
129 preread_temp_buffer = (kal_uint8 *)get_ctrl_buffer(preread_temp_buffer_size);
130 if(preread_temp_buffer == NULL)
131 {
132 kal_prompt_trace(MOD_NVRAM, "[NVUT] %s()ldi->LID:%x LID->attr=(%x) preread_temp_buffer is NULL\n\r", __FUNCTION__, ldi->LID, ldi->attr);
133 NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[OTA]%s->LINE 0x%04x :lid=0x%x preread_temp_buffer is NULL\r\n", __FUNCTION__, __LINE__, ldi->LID);
134 continue;
135 }
136
137 nvram_util_make_lid_filename(ldi, nvramname, KAL_TRUE);
138 nvram_folder = nvram_query_folder_index(ldi->category);
139 nvram_query_file_name(nvram_folder, nvramname, filename);
140 nvram_read_data_header(filename, LDI_HEADER_ALL_SECTION, &nv_header, NVRAM_LDI_HEADER_SIZE);
141
142 kal_prompt_trace(MOD_NVRAM, "[NVUT] %s()ldi->LID:%x LID->attr=(%x) default_attr\n\r", __FUNCTION__, ldi->LID, ldi->attr);
143 NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[OTA]%s->LINE 0x%04x :lid=0x%x \r\n", __FUNCTION__, __LINE__, ldi->LID);
144 rec_in_block = preread_temp_buffer_size / ldi->size;
145 for (j = 1 ; j <= ldi->total_records; )
146 {
147 kal_mem_set(preread_temp_buffer, 0x00, preread_temp_buffer_size);
148 if(NVRAM_ERRNO_SUCCESS != nvram_read_data_item(ldi, j, rec_in_block, preread_temp_buffer, preread_temp_buffer_size))
149 {
150 kal_prompt_trace(MOD_NVRAM, "[NVUT] %s()ldi->LID:%x LID->attr=(%x) nvram_read_data_item\n\r", __FUNCTION__, ldi->LID, ldi->attr);
151 NVRAM_DEBUG_DUMP(NVRAM_CRITICAL_DUMP,"[OTA]%s->LINE 0x%04x :lid=0x%x nvram_read_data_item failed\r\n", __FUNCTION__, __LINE__, ldi->LID);
152 break;
153 //free_ctrl_buffer(preread_temp_buffer);
154 //preread_temp_buffer = NULL;
155 //NVRAM_EXT_ASSERT(pre_read_white_list[i], ldi->size, NVRAM_LOC_INIT_BUFFER_OVERFLOW, ldi->total_records);
156 }
157 j += rec_in_block;
158 rec_in_block = rec_in_block < (ldi->total_records - j + 1)? rec_in_block : (ldi->total_records - j + 1);
159 }
160
161 free_ctrl_buffer(preread_temp_buffer);
162 preread_temp_buffer = NULL;
163 }
164#endif
165 return NVRAM_ERRNO_SUCCESS;
166}
167