blob: 80b728b65799c05f201fecd323b5edbd426e3815 [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/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * nvram_handler_startup.c
41 *
42 * Project:
43 * --------
44 * MAUI
45 *
46 * Description:
47 * ------------
48 * This is startup handler function of NVRAM module.
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * removed!
59 *
60 * removed!
61 * removed!
62 * removed!
63 *
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 * removed!
72 * removed!
73 * removed!
74 * removed!
75 *
76 * removed!
77 * removed!
78 * removed!
79 *
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 *
88 * removed!
89 * removed!
90 * removed!
91 *
92 * removed!
93 * removed!
94 * removed!
95 *
96 * removed!
97 * removed!
98 * removed!
99 *
100 * removed!
101 * removed!
102 * removed!
103 *
104 * removed!
105 * removed!
106 * removed!
107 *
108 * removed!
109 * removed!
110 * removed!
111 *
112 * removed!
113 * removed!
114 * removed!
115 *
116 * removed!
117 * removed!
118 * removed!
119 *
120 * removed!
121 * removed!
122 * removed!
123 *
124 * removed!
125 * removed!
126 * removed!
127 *
128 * removed!
129 * removed!
130 * removed!
131 *
132 * removed!
133 * removed!
134 * removed!
135 *
136 * removed!
137 * removed!
138 * removed!
139 *
140 * removed!
141 * removed!
142 * removed!
143 *
144 *------------------------------------------------------------------------------
145 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
146 *============================================================================
147 ****************************************************************************/
148#include "kal_general_types.h"
149#include "kal_public_api.h"
150#include "nvram_msgid.h"
151
152#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
153
154#include "nvram_main.h"
155#include "nvram_data_items.h"
156#include "us_timer.h"
157#include "ex_public.h"
158
159extern nvram_ee_info_type* nvram_ee_info;
160extern kal_char nvram_trace_dump_temp_buffer[];
161extern kal_char nvram_trace_dump_buffer[];
162extern kal_mutexid g_nvram_dump_trace_mutex;
163extern kal_wchar nvram_trace_filename[];
164extern FS_HANDLE nvram_trace_file_hdl;
165extern kal_uint32 nvram_trace_dump_buffer_offset;
166
167extern module_type stack_get_active_module_id( void );
168
169
170extern kal_int32 nvram_recover_data_item(nvram_ltable_entry_struct *ldi);
171
172
173static void nvram_startup_confirm(
174 module_type dest_id,
175 nvram_errno_enum result,
176 nvram_startup_req_struct *nvram_startup_req);
177
178#if defined(__NVRAM_CRITICAL_DATA_SIGN_SUPPORT__)
179kal_bool nvram_check_critcal_data_at_bootup()
180{
181 kal_bool chk_ret = KAL_FALSE;
182
183 /* Read OEM critical data, and check signiture */
184 chk_ret = custom_nvram_read_and_check_signed_critical_data();
185 if (chk_ret == KAL_FALSE) {
186 // try to restore LID from bin region, then re-check again
187 nvram_ltable_entry_struct * ldi = NULL;
188
189 nvram_util_get_data_item(&ldi, custom_nvram_get_signed_critical_data_lid());
190 ASSERT(ldi != NULL);
191
192 if (NVRAM_IS_CATEGORY_IN_BIN_REGION(ldi->category)) {
193 if (nvram_recover_data_item(ldi) == NVRAM_IO_ERRNO_OK) {
194 chk_ret = custom_nvram_read_and_check_signed_critical_data();
195 }
196 }
197 }
198
199 return chk_ret;
200}
201#endif
202
203/*****************************************************************************
204 * FUNCTION
205 * nvram_startup_handler
206 * DESCRIPTION
207 * This is nvram_startup_handler() function of NVRAM module.
208 * PARAMETERS
209 * ilm_ptr [IN] The primitives
210 * RETURNS
211 * void
212 *****************************************************************************/
213void nvram_startup_handler(ilm_struct *ilm_ptr)
214{
215 /*----------------------------------------------------------------*/
216 /* Local Variables */
217 /*----------------------------------------------------------------*/
218 nvram_startup_req_struct *nvram_startup_req;
219
220 /*----------------------------------------------------------------*/
221 /* Code Body */
222 /*----------------------------------------------------------------*/
223 MD_TRC_FUNC_NVRAM_STARTUP();
224 nvram_startup_req = (nvram_startup_req_struct*) ilm_ptr->local_para_ptr;
225
226 NVRAM_EXT_ASSERT(nvram_startup_req != NULL,(kal_uint32)nvram_startup_req, NVRAM_LOC_STARTUP_REQ_PTR_IS_NULL_1, 0);
227 /* Everything fine. */
228 if (nvram_ptr->state == NVRAM_STATE_READY || nvram_ptr->state == NVRAM_STATE_NOT_READY)
229 {
230 MD_TRC_STATE_NVRAM_READY();
231
232 nvram_ptr->state = NVRAM_STATE_READY;
233
234 /* Check power-on mode */
235 if (nvram_startup_req->poweron_mode == NVRAM_POWERON_NORMAL)
236 {
237 /* nvram_send_ilm(MOD_LAYER1); */
238 }
239
240#if defined(__NVRAM_CRITICAL_DATA_SIGN_SUPPORT__)
241 if (ilm_ptr->src_mod_id == MOD_L4C) {
242 if (nvram_check_critcal_data_at_bootup() != KAL_TRUE) {
243 nvram_startup_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SIG_CHK_FAIL, nvram_startup_req);
244 return;
245 }
246 }
247#endif
248
249 /* Finally, startup success.. */
250 nvram_startup_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_SUCCESS, nvram_startup_req);
251 }
252 /* Fatal error. */
253 /* State error */
254 else
255 {
256 MD_TRC_ERROR_NVRAM_STATE();
257
258 nvram_startup_confirm(ilm_ptr->src_mod_id, NVRAM_ERRNO_FAIL, nvram_startup_req);
259 }
260} /* end of nvram_startup_handler */
261
262
263/*****************************************************************************
264 * FUNCTION
265 * nvram_startup_confirm
266 * DESCRIPTION
267 * This is nvram_startup_confirm() function of NVRAM module.
268 * PARAMETERS
269 * dest_id [IN]
270 * result [IN]
271 * nvram_startup_req [?]
272 * ilm_ptr(?) [IN] The primitives
273 * RETURNS
274 * void
275 *****************************************************************************/
276static void nvram_startup_confirm(
277 module_type dest_id,
278 nvram_errno_enum result,
279 nvram_startup_req_struct *nvram_startup_req)
280{
281 /*----------------------------------------------------------------*/
282 /* Local Variables */
283 /*----------------------------------------------------------------*/
284 nvram_startup_cnf_struct *nvram_startup_cnf;
285
286 /*----------------------------------------------------------------*/
287 /* Code Body */
288 /*----------------------------------------------------------------*/
289 MD_TRC_FUNC_NVRAM_STARTUP_CNF(result);
290 nvram_startup_cnf = (nvram_startup_cnf_struct*) construct_local_para(sizeof(nvram_startup_cnf_struct), TD_CTRL);
291
292 /* Cylen, __FLIGHT_MODE_SUPPORT__ */
293 if (result == NVRAM_ERRNO_SUCCESS)
294 {
295 /* read flight mode status */
296 nvram_ltable_entry_struct *ldi;
297
298 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_CACHE_OCTET_LID);
299 result = nvram_read_data_item(ldi, NVRAM_SYS_FLIGHTMODE_STATE, 1, nvram_startup_cnf->data, NVRAM_EF_SYS_CACHE_OCTET_SIZE);
300 }
301
302 nvram_startup_cnf->result = result;
303 nvram_startup_cnf->access_id = nvram_startup_req->access_id;
304
305 nvram_send_ilm(dest_id, MSG_ID_NVRAM_STARTUP_CNF, nvram_startup_cnf, NULL);
306
307 return;
308}
309