blob: 90a2074910c9def62d87e48613eed5e16423dc2d [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_tst.c
41 *
42 * Project:
43 * --------
44 * MAUI
45 *
46 * Description:
47 * ------------
48 * This is tst 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 * removed!
68 * removed!
69 * removed!
70 * removed!
71 *
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 * removed!
145 * removed!
146 * removed!
147 *
148 * removed!
149 * removed!
150 * removed!
151 *
152 * removed!
153 * removed!
154 * removed!
155 *
156 * removed!
157 * removed!
158 * removed!
159 *
160 * removed!
161 * removed!
162 * removed!
163 *
164 * removed!
165 * removed!
166 * removed!
167 *
168 * removed!
169 * removed!
170 * removed!
171 *
172 * removed!
173 * removed!
174 * removed!
175 *
176 * removed!
177 * removed!
178 * removed!
179 *
180 * removed!
181 * removed!
182 * removed!
183 *
184 * removed!
185 * removed!
186 * removed!
187 *
188 * removed!
189 * removed!
190 * removed!
191 *
192 * removed!
193 * removed!
194 * removed!
195 *
196 *------------------------------------------------------------------------------
197 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
198 *============================================================================
199 ****************************************************************************/
200#include "string.h"
201#include "kal_general_types.h"
202#include "kal_public_api.h"
203#include "kal_internal_api.h" /* kal_internal_hisrid */
204#include "kal_trace.h"
205#include "nvram_msgid.h"
206
207#include "kal_public_defs.h" //MSBB change #include "stack_config.h"
208
209#include "nvram_interface.h"
210#include "nvram_data_items.h"
211#include "nvram_main.h"
212
213#include "tst_sap.h"
214
215/* Exception */
216#include "ex_item.h"
217
218/* Statistics */
219#include "ctrl_buff_pool.h"
220#include "sysconf_statistics.h"
221
222#include "task_config.h"
223
224extern task_info_struct *task_info_g;
225extern kal_internal_hisrid kal_hisr_ptrs_g[KAL_MAX_NUM_HISRS];
226extern kal_uint32 KALTotalTasks;
227
228
229/*****************************************************************************
230 * FUNCTION
231 * nvram_tst_handler
232 * DESCRIPTION
233 * This is nvram_tst_handler() function of NVRAM module.
234 * PARAMETERS
235 * ilm_ptr [IN] The primitives
236 * RETURNS
237 * void
238 *****************************************************************************/
239void nvram_tst_handler(ilm_struct *ilm_ptr)
240{
241 /*----------------------------------------------------------------*/
242 /* Local Variables */
243 /*----------------------------------------------------------------*/
244
245 tst_module_string_inject_struct *tst_inject = (tst_module_string_inject_struct*) ilm_ptr->local_para_ptr;
246
247 /*----------------------------------------------------------------*/
248 /* Code Body */
249 /*----------------------------------------------------------------*/
250 MD_TRC_FUNC_NVRAM_TST();
251
252 NVRAM_EXT_ASSERT(tst_inject != NULL,(kal_uint32)tst_inject, NVRAM_LOC_TST_INJECT_REQ_PTR_IS_NULL_1, 0);
253 if (!nvram_ptr->dev_broken && nvram_ptr->state == NVRAM_STATE_READY)
254 {
255
256 #ifdef __NVRAM_OTP__
257 if (strcmp((kal_char*) tst_inject->string, "otp_start")==0)
258 {
259 extern kal_uint32 nvram_otp_size;
260 extern void nvram_otp_construct(void);
261 nvram_otp_size = tst_inject->index * 10;
262 nvram_otp_construct();
263 }
264 else
265 #endif /* __NVRAM_OTP__ */
266 if (strcmp((kal_char*) tst_inject->string, "ex_reset") == 0)
267 {
268 nvram_ltable_entry_struct *ldi;
269
270 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_EXCEPTION_LID);
271
272 if (nvram_reset_data_items(NVRAM_RESET_CERTAIN, NVRAM_APP_RESERVED, ldi, 1, ldi->total_records) == KAL_TRUE)
273 {
274 MD_TRC_TEST_RESET_OK();
275 }
276 else
277 {
278 MD_TRC_TEST_RESET_FAIL();
279 }
280 }
281 else if (strcmp((kal_char*) tst_inject->string, "ex_fetch") == 0)
282 {
283 kal_uint8 i;
284 nvram_ltable_entry_struct *ldi;
285 peer_buff_struct *peer_buf_ptr;
286 kal_uint8 *pdu_ptr;
287 kal_uint16 pdu_length;
288 nvram_read_req_struct *local_data;
289 nvram_errno_enum ret;
290
291 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_EXCEPTION_LID);
292
293 if ((kal_uint8*) tst_inject->index == 0)
294 {
295 /* Get ALL Exception Records */
296 for (i = 1; i <= NVRAM_EF_SYS_EXCEPTION_TOTAL; i++)
297 {
298 local_data = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);
299 local_data->access_id = 0;
300 local_data->file_idx = (NVRAM_EF_SYS_EXCEPTION_LID);
301 local_data->para = i;
302
303 pdu_length = ldi->size;
304 peer_buf_ptr = construct_peer_buff(pdu_length, 0, 0, TD_CTRL);
305 pdu_ptr = get_peer_buff_pdu(peer_buf_ptr, &pdu_length);
306
307 ret = nvram_read_data_item(ldi, i, 1, pdu_ptr, pdu_length); /* multi-rec read support */
308
309 if (((EX_LOG_T*) pdu_ptr)->header.ex_nvram == 0xFF)
310 {
311 MD_TRC_TEST_VALID_EXCEPTIONS((i - 1));
312 free_peer_buff(peer_buf_ptr);
313 free_local_para((struct local_para_struct*)local_data);
314
315 break;
316 }
317
318 nvram_read_confirm(MOD_NVRAM, ret, local_data, ldi->size, peer_buf_ptr);
319
320 }
321
322 }
323 else if ((kal_uint8) tst_inject->index <= NVRAM_EF_SYS_EXCEPTION_TOTAL)
324 {
325 /* Get Certain Exception Records */
326 local_data = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);
327 local_data->access_id = 0;
328 local_data->file_idx = (NVRAM_EF_SYS_EXCEPTION_LID);
329 local_data->para = (kal_uint8) tst_inject->index;
330
331 pdu_length = ldi->size;
332 peer_buf_ptr = construct_peer_buff(pdu_length, 0, 0, TD_CTRL);
333 pdu_ptr = get_peer_buff_pdu(peer_buf_ptr, &pdu_length);
334
335 ret = nvram_read_data_item(ldi, (kal_uint8) tst_inject->index, 1, pdu_ptr, pdu_length); /* multi-rec read support */
336 if (((EX_LOG_T*) pdu_ptr)->header.ex_nvram == 0xFF)
337 {
338 MD_TRC_TEST_INVALID_EXCEPTIONS(tst_inject->index);
339 free_peer_buff(peer_buf_ptr);
340 free_local_para((struct local_para_struct*)local_data);
341 }
342 else
343 {
344
345 nvram_read_confirm(MOD_NVRAM, ret, local_data, ldi->size, peer_buf_ptr);
346 }
347
348 }
349 else
350 {
351 MD_TRC_TEST_REC_NUM_OUT_RANGE();
352 }
353 }
354 else if (strcmp((kal_char*) tst_inject->string, "stat_checked") == 0)
355 {
356 nvram_ltable_entry_struct *ldi;
357 stack_statistics_struct *stat_ptr;
358 nvram_errno_enum ret;
359
360 /* Dynamically allocates buffer, otherwise stack could overflow. */
361 stat_ptr = (stack_statistics_struct*) get_ctrl_buffer(NVRAM_EF_SYS_STATISTICS_SIZE);
362
363 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_STATISTICS_LID);
364
365 /* Read statistaics data item */
366 ret = nvram_read_data_item(ldi, 1, 1, (kal_uint8*) stat_ptr, NVRAM_EF_SYS_STATISTICS_SIZE); /* multi-rec read support */
367 if ((ret == NVRAM_IO_ERRNO_OK) || (ret == NVRAM_IO_ERRNO_INIT))
368 {
369 stat_ptr->stack_stats_status = STACK_STATS_NONE;
370 nvram_write_data_item(ldi, 1, (kal_uint8*) stat_ptr, KAL_FALSE);
371 }
372
373 free_ctrl_buffer(stat_ptr);
374 }
375 else if (strcmp((kal_char*) tst_inject->string, "stat_reset") == 0)
376 {
377 nvram_ltable_entry_struct *ldi;
378
379 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_EXCEPTION_LID);
380
381 if (nvram_reset_data_items(NVRAM_RESET_CERTAIN, NVRAM_APP_RESERVED, ldi, 1, ldi->total_records) == KAL_TRUE)
382 {
383 MD_TRC_TEST_RESET_STAT_OK();
384 }
385 else
386 {
387 MD_TRC_TEST_RESET_STAT_FAIL();
388 }
389 }
390 else if (strcmp((kal_char*) tst_inject->string, "stat_fetch") == 0)
391 {
392 nvram_errno_enum ret;
393 nvram_ltable_entry_struct *ldi;
394 peer_buff_struct *peer_buf_ptr;
395 kal_uint8 *pdu_ptr;
396 kal_uint16 pdu_length;
397 nvram_read_req_struct *local_data;
398 stack_statistics_struct *stat_ptr;
399 kal_uint8 i;
400
401 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_STATISTICS_LID);
402
403 local_data = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);
404 local_data->access_id = 0;
405 local_data->file_idx = (NVRAM_EF_SYS_STATISTICS_LID);
406 local_data->para = 1;
407
408 pdu_length = ldi->size;
409 peer_buf_ptr = construct_peer_buff(pdu_length, 0, 0, TD_CTRL);
410 pdu_ptr = get_peer_buff_pdu(peer_buf_ptr, &pdu_length);
411
412 /* read statistics information from nvram */
413 ret = nvram_read_data_item(ldi, 1, 1, pdu_ptr, pdu_length); /* multi-rec read support */
414 /* Send read confirm primitive to nvram itself for catcher display raw data */
415 nvram_read_confirm(MOD_NVRAM, ret, local_data, ldi->size, peer_buf_ptr);
416
417 /* Show detail to catcher sys trace window */
418 if (ret == NVRAM_IO_ERRNO_OK || ret == NVRAM_IO_ERRNO_INIT)
419 {
420 stat_ptr = get_ctrl_buffer(ldi->size);
421
422 if (!stat_ptr)
423 {
424 MD_TRC_TEST_RESET_ALLOC_FAIL();
425 return;
426 }
427 /* stat_ptr = (stack_statistics_struct *)pdu_ptr; */
428 kal_mem_cpy(stat_ptr, pdu_ptr, ldi->size);
429
430 MD_TRC_TEST_SYSINFO_STATUS(stat_ptr->stack_stats_status);
431 MD_TRC_TEST_SYSINFO_MAX_SYSMEM(stat_ptr->max_sys_mem_used);
432 MD_TRC_TEST_SYSINFO_MAX_SYSDBGMEM(stat_ptr->max_sysdebug_mem_used);
433
434 MD_TRC_TEST_SYSINFO_MAX_TASK_STACK_USED();
435 for (i = 0; i < KALTotalTasks; i += 5)
436 {
437 MD_TRC_TEST_SYSINFO_DETAIL2(
438 i,
439 ((i > KALTotalTasks ? NULL : task_info_g[i].task_id) == NULL ? "--" : task_info_g[i].task_name_ptr),
440 stat_ptr->max_task_stack_used[i],
441 ((i + 1 > KALTotalTasks ? NULL : task_info_g[i + 1].task_id) == NULL ? "--" : task_info_g[i + 1].task_name_ptr),
442 (i + 1 >= KALTotalTasks) ? 0 : stat_ptr->max_task_stack_used[(i + 1)],
443 ((i + 2 > KALTotalTasks ? NULL : task_info_g[i + 2].task_id) == NULL ? "--" : task_info_g[i + 2].task_name_ptr),
444 (i + 2 >= KALTotalTasks) ? 0 : stat_ptr->max_task_stack_used[(i + 2)],
445 ((i + 3 > KALTotalTasks ? NULL : task_info_g[i + 3].task_id) == NULL ? "--" : task_info_g[i + 3].task_name_ptr),
446 (i + 3 >= KALTotalTasks) ? 0 : stat_ptr->max_task_stack_used[(i + 3)],
447 ((i + 4 > KALTotalTasks ? NULL : task_info_g[i + 4].task_id) == NULL ? "--" : task_info_g[i + 4].task_name_ptr),
448 (i + 4 >= KALTotalTasks) ? 0 : stat_ptr->max_task_stack_used[(i + 4)]);
449
450 }
451 #ifdef DEBUG_KAL
452 MD_TRC_TEST_SYSINFO_MAX_HISR_STACK_USED();
453 for (i = 0; i < KAL_MAX_NUM_HISRS; i += 5)
454 {
455 MD_TRC_TEST_SYSINFO_DETAIL2(
456 i,
457 kal_hisr_ptrs_g[i] == NULL ? "--" : kal_hisr_ptrs_g[i]->hisr_name,
458 stat_ptr->max_hisr_stack_used[i],
459 kal_hisr_ptrs_g[i + 1] == NULL ? "--" : kal_hisr_ptrs_g[i + 1]->hisr_name,
460 (i + 1) >= KAL_MAX_NUM_HISRS ? 0 : stat_ptr->max_hisr_stack_used[(i + 1)],
461 kal_hisr_ptrs_g[i + 2] == NULL ? "--" : kal_hisr_ptrs_g[i + 2]->hisr_name,
462 (i + 2) >= KAL_MAX_NUM_HISRS ? 0 : stat_ptr->max_hisr_stack_used[(i + 2)],
463 kal_hisr_ptrs_g[i + 3] == NULL ? "--" : kal_hisr_ptrs_g[i + 3]->hisr_name,
464 (i + 3) >= KAL_MAX_NUM_HISRS ? 0 : stat_ptr->max_hisr_stack_used[(i + 3)],
465 kal_hisr_ptrs_g[i + 4] == NULL ? "--" : kal_hisr_ptrs_g[i + 4]->hisr_name,
466 (i + 4) >= KAL_MAX_NUM_HISRS ? 0 : stat_ptr->max_hisr_stack_used[(i + 4)]);
467 }
468 #endif /* DEBUG_KAL */
469
470 #ifdef DEBUG_ITC
471 MD_TRC_TEST_SYSINFO_MAX_TASK_EXTQ_ENQED();
472 for (i = 0; i < KALTotalTasks; i += 5)
473 {
474 MD_TRC_TEST_SYSINFO_DETAIL2(
475 i,
476 ((i > KALTotalTasks ? NULL : task_info_g[i].task_ext_qid) == NULL ? "--" : task_info_g[i].task_qname_ptr),
477 stat_ptr->max_task_extq_enqued[i],
478 ((i + 1 > KALTotalTasks ? NULL : task_info_g[i + 1].task_ext_qid) == NULL ? "--" : task_info_g[i + 1].task_qname_ptr),
479 (i + 1 >= KALTotalTasks) ? 0 : stat_ptr->max_task_extq_enqued[(i + 1)],
480 ((i + 2 > KALTotalTasks ? NULL : task_info_g[i + 2].task_ext_qid) == NULL ? "--" : task_info_g[i + 2].task_qname_ptr),
481 (i + 2 >= KALTotalTasks) ? 0 : stat_ptr->max_task_extq_enqued[(i + 2)],
482 ((i + 3 > KALTotalTasks ? NULL : task_info_g[i + 3].task_ext_qid) == NULL ? "--" : task_info_g[i + 3].task_qname_ptr),
483 (i + 3 >= KALTotalTasks) ? 0 : stat_ptr->max_task_extq_enqued[(i + 3)],
484 ((i + 4 > KALTotalTasks ? NULL : task_info_g[i + 4].task_ext_qid) == NULL ? "--" : task_info_g[i + 4].task_qname_ptr),
485 (i + 4 >= KALTotalTasks) ? 0 : stat_ptr->max_task_extq_enqued[(i + 4)]);
486 }
487 #endif /* DEBUG_ITC */
488
489 #if (defined(DEBUG_BUF1) || defined(DEBUG_BUF2))
490 MD_TRC_TEST_SYSINFO_CTRLBUFF_ALLOC();
491 MD_TRC_TEST_SYSINFO_CTRLBUFF_LIST();
492
493 for (i = 0; i < RPS_CREATED_CTRL_BUFF_POOLS; i += 5)
494 {
495 MD_TRC_TEST_SYSINFO_DETAIL1(
496 i,
497 stat_ptr->max_ctrl_buff_num_allocated[i],
498 (i + 1) >= RPS_CREATED_CTRL_BUFF_POOLS ? 0 : stat_ptr->max_ctrl_buff_num_allocated[(i + 1)],
499 (i + 2) >= RPS_CREATED_CTRL_BUFF_POOLS ? 0 : stat_ptr->max_ctrl_buff_num_allocated[(i + 2)],
500 (i + 3) >= RPS_CREATED_CTRL_BUFF_POOLS ? 0 : stat_ptr->max_ctrl_buff_num_allocated[(i + 3)],
501 (i + 4) >= RPS_CREATED_CTRL_BUFF_POOLS ? 0 : stat_ptr->max_ctrl_buff_num_allocated[(i + 4)]);
502 }
503 #endif /* DEBUG_BUF2 */
504
505 free_ctrl_buffer(stat_ptr);
506
507 }
508 else
509 {
510 MD_TRC_TEST_GET_STAT_FAIL();
511 }
512
513 }
514 else if (strcmp((kal_char*) tst_inject->string, "reset_all") == 0)
515 {
516 if (nvram_reset_data_items(NVRAM_RESET_ALL, NVRAM_APP_RESERVED, NULL, 0, 0) != KAL_TRUE)
517 {
518 MD_TRC_TEST_RESET_ALL_OK();
519 }
520 else
521 {
522 MD_TRC_TEST_RESET_ALL_FAIL();
523 }
524 }
525 else if (strcmp((kal_char*) tst_inject->string, "reset_certain") == 0)
526 {
527 nvram_ltable_entry_struct *ldi;
528
529 if (!NVRAM_IS_LID_VALID(tst_inject->index))
530 {
531 MD_TRC_TEST_RESET_INVALID_LID();
532 return;
533 }
534
535 nvram_util_get_data_item(&ldi, tst_inject->index);
536
537 if (nvram_reset_data_items(NVRAM_RESET_CERTAIN, NVRAM_APP_RESERVED, ldi, 1, ldi->total_records) != KAL_TRUE)
538 {
539 MD_TRC_TEST_RESET_CERTAIN_FAIL();
540 }
541 else
542 {
543 MD_TRC_TEST_RESET_CERTAIN_OK();
544 }
545
546 }
547
548 /* Belows are for internal debug testing only. >=) */
549 else
550 {
551 /* Create a exception record manually by issuing a command from Catcher. */
552 if (strcmp((kal_char*) tst_inject->string, "ex_create") == 0)
553 {
554 long *ex_data;
555
556 /* Dynamically allocates buffer, otherwise stack could overflow. */
557 ex_data = (long*)get_ctrl_buffer(NVRAM_EF_SYS_EXCEPTION_SIZE);
558
559 kal_mem_set((kal_uint8*) ex_data, 0x5, NVRAM_EF_SYS_EXCEPTION_SIZE);
560 nvram_write_exception(NVRAM_EF_SYS_EXCEPTION_SIZE, ex_data);
561
562 free_ctrl_buffer(ex_data);
563 }
564
565 /* Update statistics manually by issuing a command from Catcher. */
566 else if (strcmp((kal_char*) tst_inject->string, "stat_create") == 0)
567 {
568 nvram_ltable_entry_struct *ldi;
569 stack_statistics_struct *stat_ptr;
570
571 /* Dynamically allocates buffer, otherwise stack could overflow. */
572 stat_ptr = (stack_statistics_struct*) get_ctrl_buffer(NVRAM_EF_SYS_STATISTICS_SIZE);
573 kal_mem_set((kal_uint8*) stat_ptr, 0, NVRAM_EF_SYS_STATISTICS_SIZE);
574 stat_ptr->stack_stats_status = STACK_STATS_UPDATE;
575
576 nvram_util_get_data_item(&ldi, NVRAM_EF_SYS_STATISTICS_LID);
577
578 nvram_write_data_item(ldi, 1, (kal_uint8*) stat_ptr, KAL_FALSE);
579
580 free_ctrl_buffer(stat_ptr);
581 }
582
583 /* Test On Demand >>==)) */
584 else if (strcmp((kal_char*) tst_inject->string, "nvram_read") == 0)
585 {
586 nvram_read_req_struct *local_data;
587
588 local_data = (nvram_read_req_struct*) construct_local_para(sizeof(nvram_read_req_struct), TD_CTRL);
589 local_data->access_id = 0;
590 local_data->file_idx = (kal_uint8) tst_inject->index;
591 local_data->para = 1;
592 nvram_send_ilm(MOD_NVRAM, MSG_ID_NVRAM_READ_REQ, local_data, NULL);
593
594 }
595 else if (strcmp((kal_char*) tst_inject->string, "sw_lock") == 0)
596 {
597 nvram_set_lock_req_struct *local_data;
598
599 local_data =
600 (nvram_set_lock_req_struct*) construct_local_para(sizeof(nvram_set_lock_req_struct), TD_CTRL);
601
602 if ((kal_uint8) tst_inject->index == 1)
603 {
604 /* Lock */
605 local_data->lock_en = NVRAM_LOCK_ENABLE;
606 nvram_send_ilm(MOD_NVRAM, MSG_ID_NVRAM_SET_LOCK_REQ, local_data, NULL);
607 }
608 else if ((kal_uint8) tst_inject->index == 0)
609 {
610 /* UnLock */
611 local_data->lock_en = NVRAM_LOCK_DISABLE;
612 nvram_send_ilm(MOD_NVRAM, MSG_ID_NVRAM_SET_LOCK_REQ, local_data, NULL);
613 }
614 }
615 #ifdef __NVRAM_UNIT_TEST__
616 else if (strcmp((kal_char*) tst_inject->string, "unit_test") == 0)
617 {
618 nvram_unit_test();
619 }
620 #endif
621
622 #ifdef __NVRAM_SECURE_DATA_STORAGE__
623 /* Error commands */
624 else if (strcmp((kal_char*) tst_inject->string, "switch_mode") == 0)
625 {
626 if (tst_inject->index == 1)
627 {
628 nvram_access_sds(NVRAM_SDS_ACCESS_BACKUP);
629 }
630 else
631 {
632 nvram_access_sds(NVRAM_SDS_ACCESS_RESTORE);
633 }
634 }
635 #endif
636 else
637 {
638 MD_TRC_ERROR_NVRAM_TST_INVALID_COMM();
639 }
640 }
641 }
642 /* State error */
643 else
644 {
645 MD_TRC_STATE_NVRAM_NOT_READY();
646 }
647
648} /* end of nvram_tst_handler */
649