blob: 25005523709a726b317239bbeafed87ac3222463 [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) 2006
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_gen_util.c
41 *
42 * Project:
43 * --------
44 * MAUI
45 *
46 * Description:
47 * ------------
48 * This file is intends for generating NVRAM information.
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 *
69 * removed!
70 * removed!
71 * removed!
72 * removed!
73 *
74 * removed!
75 * removed!
76 * removed!
77 * removed!
78 * removed!
79 * removed!
80 *
81 * removed!
82 * removed!
83 * removed!
84 * removed!
85 *
86 * removed!
87 * removed!
88 *
89 * removed!
90 * removed!
91 * removed!
92 * removed!
93 * removed!
94 * removed!
95 * removed!
96 * removed!
97 * removed!
98 * removed!
99 * removed!
100 *
101 * removed!
102 * removed!
103 * removed!
104 * removed!
105 * removed!
106 * removed!
107 * removed!
108 * removed!
109 * removed!
110 * removed!
111 *
112 * removed!
113 * removed!
114 * removed!
115 * removed!
116 *
117 * removed!
118 * removed!
119 * removed!
120 * removed!
121 *
122 * removed!
123 * removed!
124 * removed!
125 * removed!
126 * removed!
127 * removed!
128 * removed!
129 * removed!
130 *
131 * removed!
132 * removed!
133 *
134 * removed!
135 * removed!
136 * removed!
137 *
138 * removed!
139 * removed!
140 *
141 * removed!
142 * removed!
143 * removed!
144 * removed!
145 *
146 * removed!
147 * removed!
148 * removed!
149 * removed!
150 *
151 * removed!
152 * removed!
153 * removed!
154 * removed!
155 * removed!
156 * removed!
157 *
158 * removed!
159 * removed!
160 * removed!
161 * removed!
162 *
163 * removed!
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 *
183 * removed!
184 * removed!
185 *
186 * removed!
187 * removed!
188 * removed!
189 *
190 * removed!
191 * removed!
192 *
193 * removed!
194 * removed!
195 * removed!
196 *
197 * removed!
198 * removed!
199 * removed!
200 *
201 * removed!
202 * removed!
203 *
204 * removed!
205 * removed!
206 * removed!
207 *
208 * removed!
209 * removed!
210 * removed!
211 *
212 * removed!
213 * removed!
214 * removed!
215 *
216 * removed!
217 * removed!
218 * removed!
219 *
220 * removed!
221 * removed!
222 * removed!
223 *
224 * removed!
225 * removed!
226 * removed!
227 *
228 * removed!
229 * removed!
230 * removed!
231 * removed!
232 * removed!
233 * removed!
234 * removed!
235 * removed!
236 * removed!
237 * removed!
238 * removed!
239 * removed!
240 * removed!
241 * removed!
242 * removed!
243 *
244 * removed!
245 * removed!
246 * removed!
247 *
248 * removed!
249 * removed!
250 * removed!
251 *
252 * removed!
253 * removed!
254 * removed!
255 *
256 * removed!
257 * removed!
258 * removed!
259 *
260 * removed!
261 * removed!
262 * removed!
263 *
264 * removed!
265 * removed!
266 * removed!
267 *
268 * removed!
269 * removed!
270 * removed!
271 *
272 * removed!
273 * removed!
274 * removed!
275 *
276 * removed!
277 * removed!
278 * removed!
279 *
280 * removed!
281 * removed!
282 * removed!
283 *
284 * removed!
285 * removed!
286 * removed!
287 *
288 * removed!
289 * removed!
290 * removed!
291 *
292 * removed!
293 * removed!
294 * removed!
295 *
296 * removed!
297 * removed!
298 * removed!
299 *
300 * removed!
301 * removed!
302 * removed!
303 *
304 * removed!
305 * removed!
306 * removed!
307 *
308 * removed!
309 * removed!
310 * removed!
311 *
312 * removed!
313 * removed!
314 * removed!
315 *
316 * removed!
317 * removed!
318 * removed!
319 *
320 * removed!
321 * removed!
322 * removed!
323 *
324 * removed!
325 * removed!
326 * removed!
327 *
328 * removed!
329 * removed!
330 * removed!
331 *
332 * removed!
333 * removed!
334 * removed!
335 *
336 * removed!
337 * removed!
338 * removed!
339 *
340 * removed!
341 * removed!
342 * removed!
343 *
344 * removed!
345 * removed!
346 * removed!
347 *
348 * removed!
349 * removed!
350 * removed!
351 *
352 * removed!
353 * removed!
354 * removed!
355 *
356 * removed!
357 * removed!
358 * removed!
359 *
360 * removed!
361 * removed!
362 * removed!
363 *
364 * removed!
365 * removed!
366 * removed!
367 *
368 * removed!
369 * removed!
370 * removed!
371 *
372 * removed!
373 * removed!
374 * removed!
375 *
376 * removed!
377 * removed!
378 * removed!
379 *
380 * removed!
381 * removed!
382 *
383 *
384 * removed!
385 * removed!
386 *
387 *
388 * removed!
389 * removed!
390 *
391 *
392 * removed!
393 * removed!
394 *
395 *
396 * removed!
397 * removed!
398 *
399 *
400 * removed!
401 * removed!
402 *
403 *
404 * removed!
405 * removed!
406 *
407 *
408 * removed!
409 * removed!
410 *
411 *
412 * removed!
413 * removed!
414 *
415 *
416 * removed!
417 * removed!
418 *
419 *
420 * removed!
421 * removed!
422 *
423 *
424 * removed!
425 * removed!
426 *
427 *
428 * removed!
429 * removed!
430 *
431 *
432 * removed!
433 * removed!
434 *
435 *
436 * removed!
437 * removed!
438 *
439 *
440 * removed!
441 * removed!
442 *
443 *
444 * removed!
445 * removed!
446 *
447 *
448 * removed!
449 * removed!
450 *
451 *
452 * removed!
453 * removed!
454 *
455 *
456 * removed!
457 * removed!
458 *
459 *
460 * removed!
461 * removed!
462 *
463 *------------------------------------------------------------------------------
464 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
465 *============================================================================
466 ****************************************************************************/
467
468#ifndef NVRAM_NOT_PRESENT
469/*
470 * Include
471 */
472#include <string.h>
473#include <stdio.h>
474#include <stdarg.h>
475#include <stdlib.h>
476#include <sys/io.h>
477#include "kal_public_api.h"
478
479#include "nvram_auto_gen.h"
480#if defined(__MMI_FMI__)
481#include "nvram_user_defs.h"
482#endif
483#include "nvram_defs.h" /* NVRAM_MSP_ALIGNMENT_REMAINDER */
484#include "custom_nvram_cat.h"
485#include "custom_nvram_config.h" /* __NVRAM_VENDOR_SUPPORT__ */
486#include "nvram_editor_data_item.h"
487#include "nvram_group_editor.h" //add for break group files from header file
488#ifdef __NVRAM_PSEUDO_MERGE__
489#include "nvram_pseudo_merge.h"
490#endif
491
492#include "nvram_internal.h"
493
494#include "custom_nvram_int_config.h"
495#ifdef __NV_CHKSUM_ENHANCE__
496#include "custom_nvram_sec.h" // add ,get checksum type/size.
497
498/* CUSTOM_CHK_ALGO_CONFIG configure*/
499extern nvram_checksum_config CUSTOM_CHK_ALGO_CONFIG;
500kal_uint32 get_checksum_size(nvram_ltable_entry_struct* ldi);
501#endif
502
503kal_uint32 custpack_total_to_verify = 0;
504
505#ifdef __NVRAM_VENDOR_SUPPORT__
506kal_uint32 nvram_vendor_reserve_size = NVRAM_MAX_VENDOR_LID_SIZE;
507#endif
508
509#ifdef __NVRAM_OTP__
510kal_uint32 otp_total_to_verify = 0;
511kal_uint32 otp_size_to_verify = 0;
512#endif
513
514kal_uint32 secupack_total_to_verify = 0;
515kal_uint32 secupack_size_to_verify = 0;
516kal_uint16 secupack_idx = 0;
517
518#if defined(__NVRAM_SECURE_DATA_STORAGE__)
519kal_uint32 sds_total_to_verify = 0;
520kal_uint32 sds_size_to_verify = 0;
521#endif
522
523kal_uint32 nvram_gen_backup_size = 0;
524kal_uint32 nvram_gen_backup_total = 0;
525
526boot_mode_type system_boot_mode;
527
528
529nvram_ltable_entry_struct *logical_data_item_table;
530
531kal_uint32 nvram_gen_total_lid;
532
533/* Fake free_ilm */
534void free_int_ilm(ilm_struct *ilm_ptr, kal_char* file_name, kal_uint32 line)
535{
536}
537
538#define IS_POWER_OF_2(v) ((v & (v - 1)) == 0)
539
540
541ltable_entry_struct logical_data_item_table_internal[] =
542{
543 {
544 NVRAM_EF_SYS_LID,
545 NVRAM_EF_SYS_TOTAL,
546 NVRAM_EF_SYS_SIZE,
547 NVRAM_NORMAL(NVRAM_EF_FF_DEFAULT),
548 NVRAM_CATEGORY_IMPORTANT_L1,
549 NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_MULTIPLE,
550 "MT00",
551 VER(NVRAM_EF_SYS_LID)
552 },
553#ifdef __NVRAM_SUPPORT_CUSTPACK__
554 {
555 NVRAM_EF_CUSTPACK_VERNO_LID,
556 NVRAM_EF_CUSTPACK_VERNO_TOTAL,
557 NVRAM_EF_CUSTPACK_VERNO_SIZE,
558 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
559 NVRAM_CATEGORY_INTERNAL,
560 NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_AVERAGE,
561 "MT02",
562 VER(NVRAM_EF_CUSTPACK_VERNO_LID)
563 },
564#endif
565 {
566 NVRAM_EF_NVRAM_LOCK_LID,
567 NVRAM_EF_NVRAM_LOCK_TOTAL,
568 NVRAM_EF_NVRAM_LOCK_SIZE,
569 NVRAM_NORMAL(NVRAM_EF_FF_DEFAULT),
570 NVRAM_CATEGORY_IMPORTANT,
571 NVRAM_ATTR_WRITEPROTECT | NVRAM_ATTR_CONFIDENTIAL | NVRAM_ATTR_FAULT_ASSERT | NVRAM_ATTR_COMMITTED
572 #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
573 | NVRAM_ATTR_MSP | NVRAM_ATTR_MULTIPLE
574 #endif
575 ,
576 "NV01",
577 VER(NVRAM_EF_NVRAM_LOCK_LID)
578 },
579#ifdef __NVRAM_READ_RESERVED_FILE__
580 {
581 NVRAM_EF_READ_RESERVED_LID,
582 NVRAM_EF_READ_RESERVED_TOTAL,
583 NVRAM_EF_READ_RESERVED_SIZE,
584 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
585 NVRAM_CATEGORY_RESERVED,
586 NVRAM_ATTR_AVERAGE,
587 "NONE",
588 VER(NVRAM_EF_READ_RESERVED_LID)
589 },
590#endif
591#ifdef __NVRAM_UNIT_TEST__
592 {
593 NVRAM_EF_NVRAM_UNIT_TEST_LID,
594 NVRAM_EF_NVRAM_UNIT_TEST_TOTAL,
595 NVRAM_EF_NVRAM_UNIT_TEST_SIZE,
596 NVRAM_NORMAL((const kal_uint8 *)NVRAM_EF_ZERO_DEFAULT),
597#ifdef __SECURE_DATA_STORAGE__
598 NVRAM_CATEGORY_INTERNAL,
599#else
600 NVRAM_CATEGORY_USER,
601#endif
602 NVRAM_ATTR_AVERAGE,
603 "MT10",
604 VER(NVRAM_EF_NVRAM_UNIT_TEST_LID)
605 },
606#endif
607
608#if defined (__NVRAM_UT_TEST__)
609
610 {
611 NVRAM_EF_NVRAM_TEST_1_LID,
612 NVRAM_EF_TEST_LID_RECORD_TOTAL,
613 NVRAM_EF_TEST_LID_SIZE,
614 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
615 NVRAM_CATEGORY_USER,
616 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
617 "MTT1",
618 VER(NVRAM_EF_NVRAM_TEST_1_LID)
619 },
620
621 {
622 NVRAM_EF_NVRAM_TEST_2_LID,
623 NVRAM_EF_TEST_LID_RECORD_TOTAL,
624 NVRAM_EF_TEST_LID_SIZE,
625 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
626 NVRAM_CATEGORY_INTERNAL,
627 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
628 "MTT2",
629 VER(NVRAM_EF_NVRAM_TEST_2_LID)
630 },
631
632 {
633 NVRAM_EF_NVRAM_TEST_3_LID,
634 NVRAM_EF_TEST_LID_RECORD_TOTAL,
635 NVRAM_EF_TEST_LID_SIZE,
636 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
637 NVRAM_CATEGORY_CALIBRAT,
638 NVRAM_ATTR_AVERAGE,
639 "MTT3",
640 VER(NVRAM_EF_NVRAM_TEST_3_LID)
641 },
642
643 {
644 NVRAM_EF_NVRAM_TEST_4_LID,
645 NVRAM_EF_TEST_LID_RECORD_TOTAL,
646 NVRAM_EF_TEST_LID_SIZE,
647 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
648 NVRAM_CATEGORY_IMPORTANT,
649 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT
650 #if defined (__CCCIFS_SUPPORT__)
651 | NVRAM_ATTR_COMMITTED
652 #endif
653 ,
654 "MTT4",
655 VER(NVRAM_EF_NVRAM_TEST_4_LID)
656 },
657
658 {
659 NVRAM_EF_NVRAM_TEST_5_LID,
660 NVRAM_EF_TEST_LID_RECORD_TOTAL,
661 NVRAM_EF_TEST_LID_SIZE,
662 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
663 NVRAM_CATEGORY_IMPORTANT_L1,
664 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
665 "MTT5",
666 VER(NVRAM_EF_NVRAM_TEST_5_LID)
667 },
668
669 {
670 NVRAM_EF_NVRAM_TEST_6_LID,
671 NVRAM_EF_TEST_LID_RECORD_TOTAL,
672 NVRAM_EF_TEST_LID_SIZE,
673 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
674 NVRAM_CATEGORY_IMPORTANT_L4,
675 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_CHKSUM_INTEGRATE
676 #if defined (__CCCIFS_SUPPORT__)
677 | NVRAM_ATTR_COMMITTED
678 #endif
679 ,
680 "MTT6",
681 VER(NVRAM_EF_NVRAM_TEST_6_LID)
682 },
683
684 {
685 NVRAM_EF_NVRAM_TEST_7_LID,
686 1, //NVRAM_EF_TEST_LID_RECORD_TOTAL,
687 NVRAM_EF_TEST_LID_SIZE,
688 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
689 NVRAM_CATEGORY_CALIBRAT,
690 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_RAW_DATA,
691 "MTT7",
692 VER(NVRAM_EF_NVRAM_TEST_7_LID)
693 },
694
695 {
696 NVRAM_EF_NVRAM_TEST_8_LID,
697 NVRAM_EF_TEST_8_LID_RECORD_TOTAL,
698 NVRAM_EF_TEST_8_LID_SIZE,
699 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
700 NVRAM_CATEGORY_USER,
701 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_CHKSUM_INTEGRATE,
702 "MTT8",
703 VER(NVRAM_EF_NVRAM_TEST_8_LID)
704 },
705 {
706 NVRAM_EF_NVRAM_TEST_9_LID,
707 NVRAM_EF_TEST_LID_RECORD_TOTAL,
708 NVRAM_EF_TEST_LID_SIZE,
709 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
710 NVRAM_CATEGORY_USER,
711 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA_FOR_QUERY,
712 "MTT9",
713 VER(NVRAM_EF_NVRAM_TEST_9_LID)
714 },
715 {
716 NVRAM_EF_NVRAM_TEST_10_LID,
717 NVRAM_EF_TEST_LID_RECORD_TOTAL,
718 NVRAM_EF_TEST_LID_SIZE,
719 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
720 NVRAM_CATEGORY_USER,
721 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA_BY_OP,
722 "MTTA",
723 VER(NVRAM_EF_NVRAM_TEST_10_LID)
724 },
725 {
726 NVRAM_EF_NVRAM_TEST_11_LID,
727 NVRAM_EF_TEST_LID_RECORD_TOTAL,
728 NVRAM_EF_TEST_LID_SIZE,
729 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
730 NVRAM_CATEGORY_USER,
731 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA | NVRAM_ATTR_MCF_OTA_BY_OP,
732 "MTTB",
733 VER(NVRAM_EF_NVRAM_TEST_11_LID)
734 },
735 {
736 NVRAM_EF_NVRAM_TEST_12_LID,
737 NVRAM_EF_TEST_LID_RECORD_TOTAL,
738 NVRAM_EF_TEST_LID_SIZE,
739 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
740 NVRAM_CATEGORY_USER,
741 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT | NVRAM_ATTR_MCF_OTA,
742 "MTTC",
743 VER(NVRAM_EF_NVRAM_TEST_12_LID)
744 },
745 {
746 NVRAM_EF_INTERNAL_13_LID,
747 NVRAM_EF_TEST_13_LID_RECORD_TOTAL,
748 NVRAM_EF_TEST_13_LID_SIZE,
749 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
750 NVRAM_CATEGORY_IMPORTANT_L1,
751 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
752 "MTTD",
753 VER(NVRAM_EF_INTERNAL_13_LID)
754 },
755 {
756 NVRAM_EF_INTERNAL_TEST_14_LID,
757 NVRAM_EF_TEST_14_LID_RECORD_TOTAL,
758 NVRAM_EF_TEST_14_LID_SIZE,
759 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
760 NVRAM_CATEGORY_USER,
761 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_GEN_DEFAULT,
762 "MTTE",
763 VER(NVRAM_EF_INTERNAL_TEST_14_LID)
764 },
765 {
766 NVRAM_EF_INTERNAL_TEST_16_LID,
767 NVRAM_EF_INTERNAL_TEST_16_LID_RECORD_TOTAL,
768 NVRAM_EF_INTERNAL_TEST_16_LID_SIZE,
769 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
770 NVRAM_CATEGORY_CALIBRAT,
771 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_CHKSUM_INTEGRATE | NVRAM_ATTR_FAULT_ASSERT,
772 "MTTG",
773 VER(NVRAM_EF_INTERNAL_TEST_16_LID)
774 },
775 {
776 NVRAM_EF_INTERNAL_TEST_17_LID,
777 NVRAM_EF_TEST_LID_RECORD_TOTAL,
778 NVRAM_EF_TEST_LID_SIZE,
779 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
780 NVRAM_CATEGORY_USER,
781 NVRAM_ATTR_AVERAGE | NVRAM_ATTR_MULTIPLE,
782 "MTTH",
783 VER(NVRAM_EF_INTERNAL_TEST_17_LID)
784 },
785#endif
786
787#if defined(__NVRAM_STRUCTURE_CHANGE_RESET__) || defined(__NVRAM_DEFVAL_CHANGE_RESET__)
788 {
789 NVRAM_EF_CHKSUM_RESET_REC_LID,
790 NVRAM_EF_CHKSUM_RESET_REC_LID_TOTAL,
791 NVRAM_EF_CHKSUM_RESET_REC_SIZE,
792 NVRAM_NORMAL(NVRAM_EF_ZERO_DEFAULT),
793 NVRAM_CATEGORY_INTERNAL,
794 NVRAM_ATTR_AVERAGE,
795 "MTCR", //NVRAM check sum reset
796 VER(NVRAM_EF_CHKSUM_RESET_REC_LID)
797 },
798#endif
799
800};
801
802/*****************************************************************************
803* FUNCTION
804* nvram_gen_assign_entry
805* DESCRIPTION
806* construct table
807* PARAMETERS
808* position [IN]
809* ldi [IN]
810* RETURNS
811* none
812*****************************************************************************/
813void nvram_gen_assign_entry(nvram_ltable_entry_struct* ldi)
814{
815 /*----------------------------------------------------------------*/
816 /* Local Variables */
817 /*----------------------------------------------------------------*/
818 kal_int32 value;
819 kal_uint32 section_size;
820
821 kal_uint32 tbl_idx = 0, entry_idx = 0;
822 kal_uint32 nvram_checksum_size = 0;
823
824 /*----------------------------------------------------------------*/
825 /* Code Body */
826 /*----------------------------------------------------------------*/
827
828 #ifdef __NV_CHKSUM_ENHANCE__
829 nvram_checksum_size = get_checksum_size(ldi); // get nvram_checksum_size , read CUSTOM_CHK_ALGO_CONFIG.
830 #else
831 nvram_checksum_size = NVRAM_CHKSUM_SIZE;
832 #endif
833
834 /* Step 1: Adjust attr / Category
835 Step 2: Verify
836 Step 3: Statistics */
837
838 //Tool check begin: nvram_pre_gen.pl check if it is same as nvram_assign_table_entry() and nvram_gen_assign_entry()
839 //***************************************************************************
840 // Adjust Attr/Category I
841 // Do not need multiple attribute if nvram saved on nor flash
842 //***************************************************************************
843 if( (ldi->total_records < 2) && ( (ldi->attr & NVRAM_ATTR_MULTIREC_READ) || (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)))
844 {
845 fprintf(stderr,
846 "Can't Set the NVRAM_ATTR_MULTIREC_READ or NVRAM_ATTR_MULTI_DEFAULT for the lid with only one record, %d, %s\n", ldi->LID, ldi->str_LID);
847 exit(3); /* NVRAM_EXIT_CODE_ERROR */
848 }
849
850 if (ldi->default_value == (kal_uint8 const*)NVRAM_EF_FF_DEFAULT ||
851 ldi->default_value == (kal_uint8 const*)NVRAM_EF_ZERO_DEFAULT)
852 {
853 #if defined (__NVRAM_UT_TEST__)
854 // Don't remove test lid gen default attribute
855 if(ldi->LID < NVRAM_EF_NVRAM_UNIT_TEST_LID || ldi->LID > NVRAM_EF_NVRAM_UNIT_TEST_LID_END)
856 #endif
857 if((ldi->attr & NVRAM_ATTR_GEN_DEFAULT) && !(NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category)))
858 {
859 fprintf(stderr,
860 "Can't Set the NVRAM_ATTR_GEN_DEFAULT for the lid with Zero or FF default value, %d, %s\n", ldi->LID, ldi->str_LID);
861 exit(3); /* NVRAM_EXIT_CODE_ERROR */
862 }
863 }
864
865 if(NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category) && !(ldi->attr & NVRAM_ATTR_GEN_DEFAULT))
866 {
867 fprintf(stderr,
868 "Must Set the NVRAM_ATTR_GEN_DEFAULT for L4 Category LID, %d, %s\n", ldi->LID, ldi->str_LID);
869 exit(3); /* NVRAM_EXIT_CODE_ERROR */
870 }
871
872 //***************************************************************************
873 // Adjust Attr/Category II
874 // MULTIPLE / BACKUP_RAW / BACKUP_FAT are mutually exclusive
875 //***************************************************************************
876 if (NVRAM_IS_CATEGORY_CALIBRAT(ldi->category))
877 {
878 if((ldi->attr &NVRAM_ATTR_RESERVE_BACKWARD) || (ldi->attr &NVRAM_ATTR_MULTIPLE))
879 {
880 fprintf(stderr,
881 "Can't Set NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_RESERVE_BACKWARD for Calibrate Lid, %d, %s\n", ldi->LID, ldi->str_LID);
882 exit(3); /* NVRAM_EXIT_CODE_ERROR */
883 }
884 #if defined(__NVRAM_BACKUP_DISK_FAT__)
885
886 if((ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_BACKUP_RAW))
887 {
888 fprintf(stderr,
889 "Can't Set the NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_BACKUP_RAW for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
890 exit(3); /* NVRAM_EXIT_CODE_ERROR */
891 }
892 if((ldi->attr & NVRAM_ATTR_BACKUP_FAT) == 0)
893 {
894 fprintf(stderr,
895 "Should set the NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
896 exit(3); /* NVRAM_EXIT_CODE_ERROR */
897 }
898
899 #elif defined(__NVRAM_BACKUP_DISK_RAW__)
900 if((ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_BACKUP_FAT))
901 {
902 fprintf(stderr,
903 "Can't Set the NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
904 exit(3); /* NVRAM_EXIT_CODE_ERROR */
905 }
906 if((ldi->attr & NVRAM_ATTR_BACKUP_RAW) == 0)
907 {
908 fprintf(stderr,
909 "Should set the NVRAM_ATTR_BACKUP_RAW for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
910 exit(3); /* NVRAM_EXIT_CODE_ERROR */
911 }
912 #else
913 #if !defined(__LOW_COST_SUPPORT_COMMON__) && !defined(__CCCIFS_SUPPORT__) && !defined(__FS_RAMDISK__)
914 if((ldi->attr & NVRAM_ATTR_MULTIPLE) == 0)
915 {
916 fprintf(stderr,
917 "Should set the NVRAM_ATTR_MULTIPLE for Calibrat under this scenario, %d, %s\n", ldi->LID, ldi->str_LID);
918 exit(3); /* NVRAM_EXIT_CODE_ERROR */
919 }
920 #endif
921 if((ldi->attr & NVRAM_ATTR_BACKUP_RAW) || (ldi->attr & NVRAM_ATTR_BACKUP_FAT))
922 {
923 fprintf(stderr,
924 "Can't Set the NVRAM_ATTR_BACKUP_RAW/NVRAM_ATTR_BACKUP_FAT for Calibrat, %d, %s\n", ldi->LID, ldi->str_LID);
925 exit(3); /* NVRAM_EXIT_CODE_ERROR */
926 }
927 #endif
928 }
929
930 //***************************************************************************
931 // Adjust Attr/Category III
932 // Just apply to smartphone
933 // 1: When AP side clean boot, nvram will reset all lid
934 // 2: When Modern side restore factory, nvram only reset data item in NVD_DATA
935 // and don't care about data item in folder A & B
936 // 3: So, turn off NVRAM_CATEGORY_FACTORY
937 //***************************************************************************
938#if defined(__CCCIFS_SUPPORT__)
939 if (NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) || NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category))
940 {
941 if((ldi->attr & NVRAM_ATTR_RESERVE_BACKWARD))
942 {
943 fprintf(stderr,
944 "Can't Set the NVRAM_ATTR_RESERVE_BACKWARD for Important/Impotant_L4, %d, %s\n", ldi->LID, ldi->str_LID);
945 exit(3); /* NVRAM_EXIT_CODE_ERROR */
946 }
947 if((ldi->attr & NVRAM_ATTR_COMMITTED) == 0)
948 {
949 fprintf(stderr,
950 "Suggest Set the NVRAM_ATTR_COMMITTED for Important/Impotant_L4, %d, %s\n", ldi->LID, ldi->str_LID);
951 exit(3); /* NVRAM_EXIT_CODE_ERROR */
952 }
953 }
954#endif
955
956 //***************************************************************************
957 // Adjust Attr/Category IV
958 // OTP category cannot use with many attribute together. Because it cannot be reset
959 // OTP category also cannot use with other category together.
960 //***************************************************************************
961#ifdef __NVRAM_OTP__
962 if (NVRAM_IS_CATEGORY_OTP(ldi->category))
963 {
964 if( (ldi->attr & NVRAM_ATTR_WRITEPROTECT) || (ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_MSP) || (ldi->attr & NVRAM_ATTR_OTA_RESET) )
965 {
966 fprintf(stderr,
967 "Can't Set NVRAM_ATTR_WRITEPROTECT/NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_MSP/NVRAM_ATTR_OTA_RESET for OTP, %d, %s\n", ldi->LID, ldi->str_LID);
968 exit(3); /* NVRAM_EXIT_CODE_ERROR */
969 }
970 }
971#endif
972
973 //***************************************************************************
974 // Adjust Attr/Category V
975 // Add pseudo merge attribute
976 //***************************************************************************
977 /* Record data item will be restored (end) */
978#ifdef __NVRAM_PSEUDO_MERGE__
979 if (!NVRAM_IS_CATEGORY_INTERNAL(ldi->category) &&
980 !NVRAM_IS_CATEGORY_SECUPACK(ldi->category) &&
981 !NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) &&
982 !NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) &&
983 #ifdef __NVRAM_CUSTOM_SENSITIVE__
984 !NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category) &&
985 #endif
986 #ifdef __NVRAM_CUSTOM_DISK__
987 !NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category) &&
988 #endif
989 ((ldi->size + nvram_checksum_size) * ldi->total_records < NVRAM_CLUSTER_SIZE))
990 {
991 if((ldi->attr & NVRAM_ATTR_PACKAGE) == 0)
992 {
993 fprintf(stderr,
994 "Should set the NVRAM_ATTR_PACKAGE for this lid %d, %s\n", ldi->LID, ldi->str_LID);
995 exit(3); /* NVRAM_EXIT_CODE_ERROR */
996 }
997 }
998
999 if (NVRAM_IS_ATTR_PACKAGE(ldi->attr))
1000 {
1001 ldi->description = NULL;
1002 if( (ldi->attr & NVRAM_ATTR_MULTIPLE) || (ldi->attr & NVRAM_ATTR_MSP))
1003 {
1004 fprintf(stderr,
1005 "Can't Set NVRAM_ATTR_MULTIPLE/NVRAM_ATTR_MSP for PACKAGE Lid, %d, %s\n", ldi->LID, ldi->str_LID);
1006 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1007 }
1008 }
1009 #endif
1010
1011 //***************************************************************************
1012 // Adjust Attr/Category VI
1013 // Add MSP, confidential, multiple with secupack item
1014 //***************************************************************************
1015
1016 if (NVRAM_IS_CATEGORY_SECUPACK(ldi->category))
1017 {
1018 if(!(ldi->attr & NVRAM_ATTR_CONFIDENTIAL)
1019 #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
1020 || !(ldi->attr & NVRAM_ATTR_MSP)
1021 #endif
1022 )
1023 {
1024 fprintf(stderr,
1025 "Should set the NVRAM_ATTR_MSP/NVRAM_ATTR_CONFIDENTIAL, %d, %s\n", ldi->LID, ldi->str_LID);
1026 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1027 }
1028 }
1029
1030 //***************************************************************************
1031 // Adjust Attr/Category VII
1032 // Add MSP, confidential, multiple with custom sensitve data
1033 //***************************************************************************
1034
1035#ifdef __NVRAM_CUSTOM_SENSITIVE__
1036 if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category))
1037 {
1038 if( !(ldi->attr & NVRAM_ATTR_MSP) || !(ldi->attr & NVRAM_ATTR_CONFIDENTIAL) || !(ldi->attr & NVRAM_ATTR_MULTIPLE))
1039 {
1040 fprintf(stderr,
1041 "Should Set the NVRAM_ATTR_MSP/NVRAM_ATTR_CONFIDENTIAL/NVRAM_ATTR_MULTIPLE, %d, %s\n", ldi->LID, ldi->str_LID);
1042 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1043 }
1044 }
1045#endif
1046
1047 //***************************************************************************
1048 // Adjust Attr/Category
1049 // Simulation/Palladium/FPGA remove NVRAM_ATTR_GEN_DEFAULT
1050 //***************************************************************************
1051#if defined(_SIMULATION) || defined(__PALLADIUM__) || defined(__FPGA__)
1052 if (!NVRAM_IS_CATEGORY_INTERNAL(ldi->category))
1053 {
1054 ldi->attr &= ~(NVRAM_ATTR_GEN_DEFAULT);
1055 }
1056#endif
1057
1058 //***************************************************************************
1059 // Adjust Attr/Category VIII
1060 // remove all attribute if the data is in custom disk
1061 //***************************************************************************
1062#ifdef __NVRAM_CUSTOM_DISK__
1063 if (NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category))
1064 {
1065 if(ldi->attr != NVRAM_ATTR_AVERAGE)
1066 {
1067 fprintf(stderr,
1068 "Can't set other attribute except NVRAM_ATTR_AVERAGE, %d, %s\n", ldi->LID, ldi->str_LID);
1069 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1070 }
1071 }
1072#endif
1073
1074 //***************************************************************************
1075 // Adjust Attr/Category X
1076 // 1. Compress the data in MT table and it is in custpack
1077 // 2. Compress the default value of the data not in MT table
1078 // and its default value is not zero default or ff default
1079 // coppress function had phaseout
1080 //***************************************************************************
1081
1082 //***************************************************************************
1083 // Adjust Attr/Category XI
1084 // Put Internal, Calibration, Important data into SDS
1085 //***************************************************************************
1086#if defined(__NVRAM_SECURE_DATA_STORAGE__)
1087 if (NVRAM_IS_CATEGORY_INTERNAL(ldi->category) ||
1088 NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) ||
1089 NVRAM_IS_CATEGORY_IMPORTANT(ldi->category) ||
1090 NVRAM_IS_CATEGORY_IMPORTANT_L4(ldi->category))
1091 {
1092 ldi->category |= NVRAM_CATEGORY_BACKUP_SDS;
1093
1094 ldi->attr &= ~ NVRAM_ATTR_MULTIPLE;
1095 ldi->attr &= ~ NVRAM_ATTR_RING;
1096 ldi->attr &= ~ NVRAM_ATTR_PACKAGE;
1097 ldi->attr &= ~ NVRAM_ATTR_BACKUP_FAT;
1098 ldi->attr &= ~ NVRAM_ATTR_BACKUP_RAW;
1099 }
1100 #endif
1101 //Tool check end: nvram_pre_gen.pl
1102
1103 //***************************************************************************
1104 // Check I
1105 // cannot put the data into two categories that are mutually exclusive
1106 //***************************************************************************
1107
1108 value = (ldi->category &
1109 (NVRAM_CATEGORY_INTERNAL
1110 | NVRAM_CATEGORY_CALIBRAT
1111 | NVRAM_CATEGORY_IMPORTANT
1112 | NVRAM_CATEGORY_IMPORTANT_L4
1113 | NVRAM_CATEGORY_IMPORTANT_L1
1114 #ifdef __NVRAM_CUSTOM_SENSITIVE__
1115 | NVRAM_CATEGORY_CUSTOM_SENSITIVE
1116 #endif
1117 #ifdef __NVRAM_CUSTOM_DISK__
1118 | NVRAM_CATEGORY_CUSTOM_DISK
1119 #endif
1120 ));
1121
1122 /* check if value is power of 2 */
1123 if (!IS_POWER_OF_2(value))
1124 {
1125 fprintf(stderr,
1126 "Category inernal & calibrate & important & sensitive can't be used at the same time!, %d, %s\n", ldi->LID, ldi->str_LID);
1127 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1128
1129 }
1130
1131
1132 //***************************************************************************
1133 // Check II
1134 // cannot put the sds data with custom
1135 //***************************************************************************
1136#if defined(__NVRAM_SECURE_DATA_STORAGE__)
1137 if (NVRAM_IS_CATEGORY_BACKUP_SDS(ldi->category))
1138 {
1139 if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(ldi->category) ||
1140 NVRAM_IS_CATEGORY_CUSTOM_DISK(ldi->category) ||
1141 NVRAM_IS_CATEGORY_OTP(ldi->category))
1142 {
1143 fprintf(stderr,"Error: Sds use with wrong category LID:%s Desc:%s category %d\n",
1144 ldi->str_LID, ldi->str_LID, ldi->category);
1145
1146 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1147 }
1148
1149 if ((ldi->attr & NVRAM_ATTR_MULTIPLE) ||
1150 (ldi->attr & NVRAM_ATTR_RING) ||
1151 (ldi->attr & NVRAM_ATTR_PACKAGE) ||
1152 (ldi->attr & NVRAM_ATTR_BACKUP_FAT) ||
1153 (ldi->attr & NVRAM_ATTR_BACKUP_RAW))
1154 {
1155 fprintf(stderr,"Error: Sds use with wrong attribute LID:%s Desc:%s attribute %d\n",
1156 ldi->str_LID, ldi->str_LID, ldi->attr);
1157
1158 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1159 }
1160
1161
1162 #ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
1163 if (ldi->attr & NVRAM_ATTR_MSP)
1164 {
1165 /* 16 byte alignment */
1166 section_size = ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size);
1167 }
1168 else
1169 #endif
1170 {
1171 section_size = ldi->size + nvram_checksum_size;
1172 }
1173
1174 if (section_size * ldi->total_records > NVRAM_CUSTOM_CFG_MAX_RECORD_SIZE)
1175 {
1176 fprintf(stderr,"Error: Data is too large to put into sds LID:%s Desc:%s %d %d\n",
1177 ldi->str_LID, ldi->str_LID, ldi->size, ldi->total_records);
1178
1179 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1180 }
1181 }
1182#endif
1183
1184
1185 //***************************************************************************
1186 // Check (III)
1187 // Cannot use zero default or ff default with multi default
1188 //***************************************************************************
1189
1190 if (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)
1191 {
1192 if (strcmp(ldi->str_default_value, "NVRAM_EF_ZERO_DEFAULT") == 0 ||
1193 strcmp(ldi->str_default_value, "NVRAM_EF_FF_DEFAULT") == 0)
1194 {
1195 fprintf(stderr,
1196 "Cannot set ZERO_DEFAULT or FF_DEFAULT with multi_default!, %d, %s\n", ldi->LID, ldi->str_LID);
1197 exit(3);
1198 }
1199 }
1200
1201 //***************************************************************************
1202 // Check (IV)
1203 // The record size cannot bigger than the biggest control buffer
1204 //***************************************************************************
1205#ifndef __NVRAM_LARGE_RECORD_SIZE__
1206
1207#ifdef __NVRAM_BIND_TO_CHIP_CIPHER__
1208 if (ldi->attr & NVRAM_ATTR_MSP)
1209 {
1210 /* 16 byte alignment */
1211 section_size = ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size);
1212 }
1213 else
1214#endif
1215 {
1216 section_size = ldi->size + nvram_checksum_size;
1217 }
1218
1219
1220
1221 if (section_size > NVRAM_CUSTOM_CFG_MAX_RECORD_SIZE)
1222 {
1223 fprintf(stderr,
1224 "LID Size is too big!, %d, %s\n", ldi->LID, ldi->str_LID);
1225 exit(3);
1226 }
1227#endif
1228
1229 //***************************************************************************
1230 // Check V
1231 // Items in custpack cannot use zero default or ff default as the default value
1232 //***************************************************************************
1233 if (NVRAM_IS_CATEGORY_CUSTPACK(ldi->category))
1234 {
1235 if (strcmp(ldi->str_default_value, "NVRAM_EF_ZERO_DEFAULT") == 0 ||
1236 strcmp(ldi->str_default_value, "NVRAM_EF_FF_DEFAULT") == 0)
1237 {
1238 fprintf(stderr,
1239 "Cannot set ZERO_DEFAULT or FF_DEFAULT with custpack!, %d, %s\n", ldi->LID, ldi->str_LID);
1240 exit(3);
1241
1242 }
1243 }
1244
1245 //***************************************************************************
1246 // Check VI
1247 // Build error check: CALIBRAT LID should not have NVRAM_ATTR_OTA_RESET attribute.
1248 //***************************************************************************
1249 if (NVRAM_IS_CATEGORY_CALIBRAT(ldi->category) && (ldi->attr&NVRAM_ATTR_OTA_RESET))
1250 {
1251 fprintf(stderr,
1252 "Error usage: NVRAM_ATTR_SW_VERNO_REST and NVRAM_CATEGORY_CALIBRAT should not use together!, %d, %s\n", ldi->LID, ldi->str_LID);
1253 exit(3);
1254
1255 }
1256
1257 //***************************************************************************
1258 // Statistics I
1259 // calculate the custpack
1260 //***************************************************************************
1261 if (NVRAM_IS_CATEGORY_CUSTPACK(ldi->category))
1262 {
1263 custpack_total_to_verify++;
1264 }
1265 //***************************************************************************
1266 // Statistics II
1267 // calculate the secupack
1268 //***************************************************************************
1269
1270 if (NVRAM_IS_CATEGORY_SECUPACK(ldi->category))
1271 {
1272 secupack_total_to_verify++;
1273
1274 if (ldi->attr & NVRAM_ATTR_MULTI_DEFAULT)
1275 {
1276 secupack_size_to_verify += ldi->size * ldi->total_records + nvram_checksum_size;
1277 }
1278 else
1279 {
1280 secupack_size_to_verify += ldi->size + nvram_checksum_size;
1281 }
1282 }
1283
1284 //***************************************************************************
1285 // Statistics III
1286 // calculate the otp
1287 //***************************************************************************
1288#ifdef __NVRAM_OTP__
1289 if (NVRAM_IS_CATEGORY_OTP(ldi->category))
1290 {
1291 otp_total_to_verify++;
1292 otp_size_to_verify += ldi->size * ldi->total_records;
1293 }
1294#endif /* __NVRAM_OTP__ */
1295
1296
1297 //***************************************************************************
1298 // Statistics IV
1299 // calculate the vendor reserve size
1300 //***************************************************************************
1301
1302#ifdef __NVRAM_VENDOR_SUPPORT__
1303 if (is_customregion)
1304 {
1305 kal_uint32 section_size = ldi->size * ldi->total_records + nvram_checksum_size;
1306 if (section_size < nvram_vendor_reserve_size)
1307 {
1308 nvram_vendor_reserve_size -= section_size;
1309 }
1310 else
1311 {
1312 fprintf(stderr,
1313 "My dear, total size for vendor nvram shouldn't be larger than %d!\n", NVRAM_MAX_VENDOR_LID_SIZE);
1314 exit(3); /* NVRAM_EXIT_CODE_ERROR */
1315 }
1316 }
1317#endif /* __NVRAM_VENDOR_SUPPORT__ */
1318
1319 //***************************************************************************
1320 // Statistics IV
1321 // calculate the vendor reserve size
1322 //***************************************************************************
1323#if defined(__NVRAM_SECURE_DATA_STORAGE__)
1324 if (NVRAM_IS_CATEGORY_BACKUP_SDS(ldi->category))
1325 {
1326 sds_total_to_verify++;
1327 sds_size_to_verify += (ldi->size + nvram_checksum_size + NVRAM_MSP_ALIGNMENT_REMAINDER(ldi->size + nvram_checksum_size)) * ldi->total_records;
1328 }
1329#endif
1330
1331}
1332
1333/*****************************************************************************
1334 * FUNCTION
1335 * nvram_assign_cat_entry
1336 * DESCRIPTION
1337 * PARAMETERS
1338 * RETURNS
1339 *****************************************************************************/
1340static void nvram_gen_assign_cat_default_value(nvram_lid_enum position, nvram_cat_replace_setting* cat_item)
1341{
1342 /*----------------------------------------------------------------*/
1343 /* Local Variables */
1344 /*----------------------------------------------------------------*/
1345
1346 /*----------------------------------------------------------------*/
1347 /* Code Body */
1348 /*----------------------------------------------------------------*/
1349
1350 if (cat_item->size != logical_data_item_table[position].size ||
1351 cat_item->total_records != logical_data_item_table[position].total_records)
1352 {
1353 return;
1354 }
1355
1356 logical_data_item_table[position].default_value = cat_item->default_value;
1357
1358 if (cat_item->is_multi_default)
1359 {
1360 logical_data_item_table[position].attr &= NVRAM_ATTR_MULTI_DEFAULT;
1361 }
1362 else
1363 {
1364 logical_data_item_table[position].attr &= ~NVRAM_ATTR_MULTI_DEFAULT;
1365 }
1366}
1367
1368int ltable_enum_cmp_local(nvram_ltable_entry_struct *ent_a, nvram_ltable_entry_struct *ent_b)
1369{
1370 return (int)(ent_a->LID - ent_b->LID);
1371}
1372
1373/*****************************************************************************
1374* FUNCTION
1375* nvram_gen_construct_ltable
1376* DESCRIPTION
1377* To construct ltable.
1378* PARAMETERS
1379* None
1380* RETURNS
1381* None
1382*****************************************************************************/
1383void nvram_gen_construct_ltable(void)
1384{
1385 /*----------------------------------------------------------------*/
1386 /* Local Variables */
1387 /*----------------------------------------------------------------*/
1388 extern unsigned char nvram_ltable_begin, nvram_ltable_end;
1389 kal_uint32 i = 0, tbl_idx = 0, tbl_size;
1390 nvram_ltable_entry_struct *logical_data_item_table_bak;
1391 size_t tbl_entry_size = sizeof(nvram_ltable_entry_struct);
1392
1393 /*----------------------------------------------------------------*/
1394 /* Code Body */
1395 /*----------------------------------------------------------------*/
1396
1397 logical_data_item_table_bak = (nvram_ltable_entry_struct *)&nvram_ltable_begin;
1398 tbl_size = (kal_uint32)(&nvram_ltable_end - &nvram_ltable_begin);
1399 nvram_gen_total_lid = tbl_size/sizeof(nvram_ltable_entry_struct);
1400 logical_data_item_table = (nvram_ltable_entry_struct *) malloc(tbl_size);
1401 memcpy(logical_data_item_table, logical_data_item_table_bak, tbl_size);
1402 qsort(logical_data_item_table, nvram_gen_total_lid, tbl_entry_size, ltable_enum_cmp_local);
1403 printf("addr = %x, entry size: %d, real size: %d %s result size:%d\n", logical_data_item_table, sizeof(nvram_ltable_entry_struct), tbl_size, tbl_size%sizeof(nvram_ltable_entry_struct)?"!=":"=",nvram_gen_total_lid * sizeof(nvram_ltable_entry_struct));
1404
1405 do
1406 {
1407 printf("ltable[%d](0x%x) = %s(%d), size = %d, total_records = %d\n",
1408 i, &logical_data_item_table[i], logical_data_item_table[i].str_LID, logical_data_item_table[i].LID, logical_data_item_table[i].size, logical_data_item_table[i].total_records);
1409
1410 nvram_gen_assign_entry(&logical_data_item_table[i]);
1411
1412 }while(++i < nvram_gen_total_lid);
1413
1414#if 0
1415/* under construction !*/
1416/* under construction !*/
1417/* under construction !*/
1418/* under construction !*/
1419/* under construction !*/
1420#endif
1421}
1422
1423/*****************************************************************************
1424 * FUNCTION
1425 * nvram_gen_search_entry
1426 * DESCRIPTION
1427 * To construct ltable.
1428 * PARAMETERS
1429 * None
1430 * RETURNS
1431 * None
1432 *****************************************************************************/
1433nvram_ltable_entry_struct* nvram_gen_search_entry(nvram_lid_enum lid)
1434{
1435 /*----------------------------------------------------------------*/
1436 /* Local Variables */
1437 /*----------------------------------------------------------------*/
1438 kal_uint32 i = 0;
1439
1440 /*----------------------------------------------------------------*/
1441 /* Code Body */
1442 /*----------------------------------------------------------------*/
1443 do
1444 {
1445 if (logical_data_item_table[i].LID == lid)
1446 {
1447 return &logical_data_item_table[i];
1448 }
1449
1450 }while(++i < nvram_gen_total_lid);
1451
1452 return NULL;
1453}
1454
1455
1456#endif /* NVRAM_NOT_PRESENT */