blob: fcc9eb0105264dea00878406abb298a82b43c21e [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_multi_folder.c
41 *
42 * Project:
43 * --------
44 * MAUI
45 *
46 * Description:
47 * ------------
48 * NVRAM feature: support multi folders
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 * removed!
72 * removed!
73 * removed!
74 * removed!
75 *
76 * removed!
77 * removed!
78 * removed!
79 * removed!
80 * removed!
81 * removed!
82 * removed!
83 * removed!
84 * removed!
85 * removed!
86 *
87 * removed!
88 * removed!
89 * removed!
90 * removed!
91 *
92 * removed!
93 * removed!
94 * removed!
95 * removed!
96 *
97 * removed!
98 * removed!
99 * removed!
100 *
101 * removed!
102 * removed!
103 * removed!
104 *
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 * removed!
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 * removed!
197 * removed!
198 *
199 *
200 * removed!
201 * removed!
202 *
203 *
204 * removed!
205 * removed!
206 *
207 *
208 * removed!
209 * removed!
210 *
211 *
212 * removed!
213 * removed!
214 *
215 *
216 * removed!
217 * removed!
218 *
219 *
220 * removed!
221 * removed!
222 *
223 *
224 *
225 *------------------------------------------------------------------------------
226 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
227 *============================================================================
228 ****************************************************************************/
229
230/*****************************************************************************
231 * Include
232 *****************************************************************************/
233#include "kal_general_types.h"
234#include "kal_public_api.h"
235
236#include "fs_type.h"
237#include "fs_func.h"
238#include "fs_errcode.h"
239
240#include "nvram_main.h"
241#include "nvram_defs.h"
242#include "ex_public.h"
243#include "stdio.h"
244#include "stdarg.h"
245#include "us_timer.h"
246
247/***********************************************************
248 * Static Variable
249 ***********************************************************/
250
251extern nvram_ee_info_type* nvram_ee_info;
252extern kal_char nvram_trace_dump_temp_buffer[];
253extern kal_char nvram_trace_dump_buffer[];
254extern kal_mutexid g_nvram_dump_trace_mutex;
255extern kal_wchar nvram_trace_filename[];
256extern FS_HANDLE nvram_trace_file_hdl;
257extern kal_uint32 nvram_trace_dump_buffer_offset;
258
259
260/* marco to form absolute path and filename */
261/* File System with wide character interface */
262
263#if defined (__NVRAM_UT_TEST__) && !defined (__NVRAM_LID_CACHE__)
264
265#define NVRAM_FS_MAKE_LID_PATH_FILENAME_1( buf, name ) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
266 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_DATAITEM_PATH, name);\
267 else \
268 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_DATAITEM_PATH, name)
269
270#ifdef __NVRAM_MULTI_FOLDERS__
271/* core folder */
272#define NVRAM_FS_MAKE_CORE_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
273 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_COREITEM_PATH, name);\
274 else \
275 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_COREITEM_PATH, name)
276
277#define NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
278 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_CALIBRAT_DATAITEM_PATH, name);\
279 else \
280 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_CALIBRAT_DATAITEM_PATH, name)
281
282#define NVRAM_FS_MAKE_CRITICAL_IMPT_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
283 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_IMPT_DATAITEM_PATH, name);\
284 else \
285 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPT_DATAITEM_PATH, name)
286
287#define NVRAM_FS_MAKE_CUST_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
288 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_CUST_DATAITEM_PATH, name);\
289 else \
290 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_CUST_DATAITEM_PATH, name)
291
292#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
293 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH, name);\
294 else \
295 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH, name)
296
297#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME2(buf, name) if((is_insulation_access) && (nvram_test_task1_id) && (kal_get_current_task()==nvram_test_task1_id))\
298 kal_wsprintf( buf, "%s\\%s", NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH2, name);\
299 else \
300 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH2, name)
301
302#endif
303
304
305#else
306
307#define NVRAM_FS_MAKE_LID_PATH_FILENAME_1( buf, name ) \
308 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_DATAITEM_PATH, name)
309
310#ifdef __NVRAM_MULTI_FOLDERS__
311/* core folder */
312#define NVRAM_FS_MAKE_CORE_PATH_FILENAME(buf, name) \
313 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_COREITEM_PATH, name);
314
315#define NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(buf, name) \
316 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_CALIBRAT_DATAITEM_PATH, name);
317
318#define NVRAM_FS_MAKE_CRITICAL_IMPT_PATH_FILENAME(buf, name) \
319 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPT_DATAITEM_PATH, name);
320
321#define NVRAM_FS_MAKE_CUST_PATH_FILENAME(buf, name) \
322 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_CUST_DATAITEM_PATH, name);
323
324#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(buf, name) \
325 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH, name);
326
327#define NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME2(buf, name) \
328 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_IMPORTNT_DATAITEM_PATH2, name);
329
330#endif
331
332#endif //__NVRAM_UT_TEST__
333
334#define NVRAM_FS_MAKE_OTA_PATH_FILENAME(buf, name) \
335 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_OTA_DATAITEM_PATH, name);
336
337#ifdef __NVRAM_BACKUP_DISK_FAT__
338#define NVRAM_FS_MAKE_BACKUP_PATH_FILENAME(buf, name) \
339 kal_wsprintf( buf, "%s\\%s", NVRAM_FS_BACKUP_ROOT_PATH, name);
340#endif
341
342extern module_type stack_get_active_module_id( void );
343
344/***********************************************************
345 * Global Variable
346 **********************************************************/
347
348/***********************************************************
349 * Local Function
350 **********************************************************/
351
352/***********************************************************
353 * Global Function
354 **********************************************************/
355
356
357#define FOLDER_PATH
358/*****************************************************************************
359 * FUNCTION
360 * nvram_query_folder_index
361 * DESCRIPTION
362 * Get the index of folder
363 * PARAMETERS
364 * category
365 * RETURNS
366 * Success or Fail
367 *****************************************************************************/
368
369nvram_folder_enum nvram_query_folder_index_ex(nvram_category_enum category, kal_bool first_copy)
370{
371 /*----------------------------------------------------------------*/
372 /* Local Variables */
373 /*----------------------------------------------------------------*/
374 nvram_folder_enum folder_index;
375
376 /*----------------------------------------------------------------*/
377 /* Code Body */
378 /*----------------------------------------------------------------*/
379#ifdef __NVRAM_MULTI_FOLDERS__
380 if (NVRAM_IS_CATEGORY_INTERNAL(category))
381 {
382 folder_index = NVRAM_NVD_CORE;
383 }
384 else if (NVRAM_IS_CATEGORY_CALIBRAT(category))
385 {
386 folder_index = NVRAM_NVD_CALI;
387 }
388 else if (NVRAM_IS_CATEGORY_IMPORTANT(category))
389 {
390 folder_index = NVRAM_NVD_IMPT;
391 }
392 #ifdef __NVRAM_READ_RESERVED_FILE__
393 else if (NVRAM_IS_CATEGORY_RESERVED(category))
394 {
395 folder_index = NVRAM_NVD_BACKUP;
396 }
397 #endif
398 #if defined(__CCCIFS_SUPPORT__)
399 else if (NVRAM_IS_CATEGORY_IMPORTANT_L4(category))
400 {
401 #if defined(__MTK_TARGET__) && defined(__NVRAM_IMPORTANT_PARTITIONS__)
402 if (!first_copy)
403 folder_index = NVRAM_NVD_IMPNT2;
404 else
405 #endif
406 folder_index = NVRAM_NVD_IMPNT;
407 }
408 else if (NVRAM_IS_CATEGORY_IMPORTANT_L1(category))
409 {
410 folder_index = NVRAM_NVD_IMPNT;
411 }
412 #endif
413 #ifdef __NVRAM_CUSTOM_SENSITIVE__
414 else if (NVRAM_IS_CATEGORY_CUSTOM_SENSITIVE(category))
415 {
416 folder_index = NVRAM_NVD_CUST;
417 }
418 #endif
419 else
420#endif /* __NVRAM_MULTI_FOLDERS__ */
421 {
422 folder_index = NVRAM_NVD_DATA;
423 }
424
425 return folder_index;
426}
427
428nvram_folder_enum nvram_query_folder_index(nvram_category_enum category)
429{
430 return nvram_query_folder_index_ex(category, KAL_TRUE);
431}
432
433
434/*****************************************************************************
435 * FUNCTION
436 * nvram_query_work_path
437 * DESCRIPTION
438 * Get the path of nvram folder
439 * PARAMETERS
440 * folder_idx
441 * RETURNS
442 * Success or Fail
443 *****************************************************************************/
444kal_char * nvram_query_work_path(nvram_folder_enum folder_idx)
445{
446 /*----------------------------------------------------------------*/
447 /* Local Variables */
448 /*----------------------------------------------------------------*/
449
450 /*----------------------------------------------------------------*/
451 /* Code Body */
452 /*----------------------------------------------------------------*/
453 switch (folder_idx)
454 {
455 case NVRAM_NVD_DATA:
456 {
457 #if defined (__NVRAM_UT_TEST__)
458 if((is_insulation_access) &&
459 (nvram_test_task1_id) &&
460 (kal_get_current_task()==nvram_test_task1_id))
461 return (kal_char *)NVRAM_TEST_FS_DATAITEM_PATH;
462 else
463 #endif
464 return (kal_char *)NVRAM_FS_DATAITEM_PATH;
465 }
466#ifdef __NVRAM_MULTI_FOLDERS__
467 case NVRAM_NVD_CORE:
468 {
469 #if defined (__NVRAM_UT_TEST__)
470 if((is_insulation_access) &&
471 (nvram_test_task1_id) &&
472 (kal_get_current_task()==nvram_test_task1_id))
473 return (kal_char *)NVRAM_TEST_FS_COREITEM_PATH;
474 else
475 #endif
476 return (kal_char *)NVRAM_FS_COREITEM_PATH;
477 }
478 case NVRAM_NVD_CALI:
479 {
480 #if defined (__NVRAM_UT_TEST__)
481 if((is_insulation_access) &&
482 (nvram_test_task1_id) &&
483 (kal_get_current_task()==nvram_test_task1_id))
484 return (kal_char *)NVRAM_TEST_FS_CALIBRAT_DATAITEM_PATH;
485 else
486 #endif
487 return (kal_char *)NVRAM_FS_CALIBRAT_DATAITEM_PATH;
488 }
489 case NVRAM_NVD_IMPT:
490 {
491 #if defined (__NVRAM_UT_TEST__)
492 if((is_insulation_access) &&
493 (nvram_test_task1_id) &&
494 (kal_get_current_task()==nvram_test_task1_id))
495 return (kal_char *)NVRAM_TEST_FS_IMPT_DATAITEM_PATH;
496 else
497 #endif
498 return (kal_char *)NVRAM_FS_IMPT_DATAITEM_PATH;
499 }
500 case NVRAM_NVD_BACKUP:
501 {
502 return (kal_char *)NVRAM_FS_OTA_DATAITEM_PATH;
503 }
504 #if defined(__CCCIFS_SUPPORT__)
505 case NVRAM_NVD_IMPNT:
506 {
507 #if defined (__NVRAM_UT_TEST__)
508 if((is_insulation_access) &&
509 (nvram_test_task1_id) &&
510 (kal_get_current_task()==nvram_test_task1_id))
511 return (kal_char *)NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH;
512 else
513 #endif
514 return (kal_char *)NVRAM_FS_IMPORTNT_DATAITEM_PATH;
515 }
516
517 #if defined(__MTK_TARGET__) && defined(__NVRAM_IMPORTANT_PARTITIONS__)
518 case NVRAM_NVD_IMPNT2:
519 {
520 #if defined (__NVRAM_UT_TEST__)
521 if((is_insulation_access) &&
522 (nvram_test_task1_id) &&
523 (kal_get_current_task()==nvram_test_task1_id))
524 return (kal_char *)NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH2;
525 else
526 #endif
527 return (kal_char *)NVRAM_FS_IMPORTNT_DATAITEM_PATH2;
528 }
529 #endif
530
531 #endif
532 #ifdef __NVRAM_CUSTOM_SENSITIVE__
533 case NVRAM_NVD_CUST:
534 {
535 #if defined (__NVRAM_UT_TEST__)
536 if((is_insulation_access) &&
537 (nvram_test_task1_id) &&
538 (kal_get_current_task()==nvram_test_task1_id))
539 return (kal_char *)NVRAM_TEST_FS_CUST_DATAITEM_PATH;
540 else
541 #endif
542 return (kal_char *)NVRAM_FS_CUST_DATAITEM_PATH;
543 }
544 #endif
545#endif /* __NVRAM_MULTI_FOLDERS__ */
546 default:
547 {
548 NVRAM_EXT_ASSERT(KAL_FALSE,(kal_uint32)folder_idx, NVRAM_LOC_INVALID_FOLDER_1, 0);
549 break;
550 }
551 }
552
553 return NULL;
554}
555
556
557/*****************************************************************************
558 * FUNCTION
559 * nvram_query_file_name
560 * DESCRIPTION
561 * Get file full name
562 * PARAMETERS
563 * folder_idx :
564 * nvramname : nvram file
565 * filename : full name of nvram file
566 * RETURNS
567 * Success or Fail
568 *****************************************************************************/
569kal_wchar * nvram_query_file_name(nvram_folder_enum folder_idx, kal_char *nvramname, kal_wchar *filename)
570{
571 /*----------------------------------------------------------------*/
572 /* Local Variables */
573 /*----------------------------------------------------------------*/
574
575 /*----------------------------------------------------------------*/
576 /* Code Body */
577 /*----------------------------------------------------------------*/
578 switch (folder_idx)
579 {
580 case NVRAM_NVD_DATA:
581 {
582 NVRAM_FS_MAKE_LID_PATH_FILENAME_1(filename, nvramname);
583 break;
584 }
585 #ifdef __NVRAM_MULTI_FOLDERS__
586 case NVRAM_NVD_CORE:
587 {
588 NVRAM_FS_MAKE_CORE_PATH_FILENAME(filename, nvramname);
589 break;
590 }
591 case NVRAM_NVD_CALI:
592 {
593 NVRAM_FS_MAKE_CRITICAL_CALIBRAT_PATH_FILENAME(filename, nvramname);
594 break;
595 }
596 case NVRAM_NVD_IMPT:
597 {
598 NVRAM_FS_MAKE_CRITICAL_IMPT_PATH_FILENAME(filename, nvramname);
599 break;
600 }
601 #if defined(__CCCIFS_SUPPORT__)
602 case NVRAM_NVD_IMPNT:
603 {
604 NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME(filename, nvramname);
605 break;
606 }
607
608 #if defined(__MTK_TARGET__) && defined(__NVRAM_IMPORTANT_PARTITIONS__)
609 case NVRAM_NVD_IMPNT2:
610 {
611 NVRAM_FS_MAKE_IMPORTNT_PATH_FILENAME2(filename, nvramname);
612 break;
613 }
614 #endif
615
616 #endif
617 case NVRAM_NVD_BACKUP:
618 {
619 NVRAM_FS_MAKE_OTA_PATH_FILENAME(filename, nvramname);
620 break;
621 }
622
623 #ifdef __NVRAM_CUSTOM_SENSITIVE__
624 case NVRAM_NVD_CUST:
625 {
626 NVRAM_FS_MAKE_CUST_PATH_FILENAME(filename, nvramname);
627 break;
628 }
629 #endif
630 #endif /* __NVRAM_MULTI_FOLDERS__ */
631 #ifdef __NVRAM_BACKUP_DISK_FAT__
632 case NVRAM_NVD_BAK:
633 {
634 NVRAM_FS_MAKE_BACKUP_PATH_FILENAME(filename, nvramname);
635 break;
636 }
637 #endif
638 default:
639 {
640 NVRAM_EXT_ASSERT(KAL_FALSE,(kal_uint32)folder_idx, NVRAM_LOC_INVALID_FOLDER_2, 0);
641 break;
642 }
643 }
644
645 return filename;
646}
647
648/*****************************************************************************
649 * FUNCTION
650 * nvram_query_file_name
651 * DESCRIPTION
652 * Get file full name
653 * PARAMETERS
654 * folder_idx :
655 * nvramname : nvram file
656 * filename : full name of nvram file
657 * RETURNS
658 * Success or Fail
659 *****************************************************************************/
660kal_wchar * nvram_query_file_name_by_path(kal_wchar *folder_path, kal_wchar *filename)
661{
662 /*----------------------------------------------------------------*/
663 /* Local Variables */
664 /*----------------------------------------------------------------*/
665 kal_uint32 path_length = 0;
666 kal_wchar *temp = NULL;
667
668 path_length = kal_wstrlen(folder_path);
669 temp = folder_path + path_length;
670 while(*temp != '\\')
671 {
672 temp--;
673 }
674 temp++;
675 filename = kal_wstrcpy(filename, temp);
676
677
678 return filename;
679
680}
681
682/*****************************************************************************
683 * FUNCTION
684 * nvram_query_ex_file_name
685 * DESCRIPTION
686 * Get file full name
687 * PARAMETERS
688 * folder_idx :
689 * nvramname : nvram file
690 * filename : full name of nvram file
691 * RETURNS
692 * Success or Fail
693 *****************************************************************************/
694kal_wchar * nvram_query_ex_file_name(nvram_folder_enum folder_idx, kal_wchar *nvramname, kal_wchar *filename)
695{
696 /*----------------------------------------------------------------*/
697 /* Local Variables */
698 /*----------------------------------------------------------------*/
699
700 /*----------------------------------------------------------------*/
701 /* Code Body */
702 /*----------------------------------------------------------------*/
703#ifdef __NVRAM_MULTI_FOLDERS__
704 if (folder_idx == NVRAM_NVD_CORE)
705 {
706#if defined (__NVRAM_UT_TEST__)
707 if((is_insulation_access) &&
708 (nvram_test_task1_id) &&
709 (kal_get_current_task()==nvram_test_task1_id))
710 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_COREITEM_PATH, nvramname);
711 else
712#endif
713 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_COREITEM_PATH, nvramname);
714 }
715 else if (folder_idx == NVRAM_NVD_CALI)
716 {
717#if defined (__NVRAM_UT_TEST__)
718 if((is_insulation_access) &&
719 (nvram_test_task1_id) &&
720 (kal_get_current_task()==nvram_test_task1_id))
721 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_CALIBRAT_DATAITEM_PATH, nvramname);
722 else
723#endif
724 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_CALIBRAT_DATAITEM_PATH, nvramname);
725 }
726 else if (folder_idx == NVRAM_NVD_IMPT)
727 {
728#if defined (__NVRAM_UT_TEST__)
729 if((is_insulation_access) &&
730 (nvram_test_task1_id) &&
731 (kal_get_current_task()==nvram_test_task1_id))
732 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_IMPT_DATAITEM_PATH, nvramname);
733 else
734#endif
735 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_IMPT_DATAITEM_PATH, nvramname);
736 }
737 #if defined(__CCCIFS_SUPPORT__)
738 else if (folder_idx == NVRAM_NVD_IMPNT)
739 {
740#if defined (__NVRAM_UT_TEST__)
741 if((is_insulation_access) &&
742 (nvram_test_task1_id) &&
743 (kal_get_current_task()==nvram_test_task1_id))
744 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_IMPORTNT_DATAITEM_PATH, nvramname);
745 else
746#endif
747 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_IMPORTNT_DATAITEM_PATH, nvramname);
748 }
749 #endif
750 #ifdef __NVRAM_CUSTOM_SENSITIVE__
751 else if (folder_idx == NVRAM_NVD_CUST)
752 {
753#if defined (__NVRAM_UT_TEST__)
754 if((is_insulation_access) &&
755 (nvram_test_task1_id) &&
756 (kal_get_current_task()==nvram_test_task1_id))
757 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_CUST_DATAITEM_PATH, nvramname);
758 else
759#endif
760 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_CUST_DATAITEM_PATH, nvramname);
761 }
762 #endif
763 else if (folder_idx == NVRAM_NVD_DATA)
764#endif /* __NVRAM_MULTI_FOLDERS__ */
765 {
766#if defined (__NVRAM_UT_TEST__)
767 if((is_insulation_access) &&
768 (nvram_test_task1_id) &&
769 (kal_get_current_task()==nvram_test_task1_id))
770 kal_wsprintf(filename, "%s\\%w", NVRAM_TEST_FS_DATAITEM_PATH, nvramname);
771 else
772#endif
773 kal_wsprintf(filename, "%s\\%w", NVRAM_FS_DATAITEM_PATH, nvramname);
774 }
775
776 return filename;
777}
778
779
780/*****************************************************************************
781 * FUNCTION
782 * nvram_delete_certain_folder
783 * DESCRIPTION
784 * Delete all files in certain folder
785 * PARAMETERS
786 * folder_idx : [in]
787 * RETURNS
788 * Success or Fail
789 *****************************************************************************/
790static nvram_errno_enum nvram_create_certain_folder(nvram_folder_enum folder_idx)
791{
792 /*----------------------------------------------------------------*/
793 /* Local Variables */
794 /*----------------------------------------------------------------*/
795 kal_wchar filename[NVRAM_MAX_PATH_LEN];
796 kal_int32 Ret;
797
798 /*----------------------------------------------------------------*/
799 /* Code Body */
800 /*----------------------------------------------------------------*/
801 kal_wsprintf(filename, "%s", nvram_query_work_path(folder_idx));
802 NVRAM_FS_START_EX(FS_OP_GETATTRIBUTES,filename);
803 Ret = FS_GetAttributes(filename);
804 NVRAM_FS_END(FS_OP_GETATTRIBUTES,Ret);
805 if (Ret < FS_NO_ERROR)
806 {
807 /* Return value should be FS_FILE_NOT_FOUND (-9) only, others treat as fatal error */
808 NVRAM_FS_START_EX(FS_OP_CREATEDIR,filename);
809 Ret = FS_CreateDir((const kal_wchar*)filename);
810 NVRAM_FS_END(FS_OP_CREATEDIR,Ret);
811 if (Ret == FS_NO_ERROR)
812 return NVRAM_ERRNO_SUCCESS;
813 }
814
815 MD_TRC_FUNC_NVRAM_CREATE_ALL_FOLDER(Ret);
816 return NVRAM_ERRNO_FOLDER_EXIST;
817}
818
819
820/*****************************************************************************
821 * FUNCTION
822 * nvram_create_all_folder
823 * DESCRIPTION
824 * create all the folders
825 * PARAMETERS
826 * void
827 * RETURNS
828 * status
829 *****************************************************************************/
830nvram_errno_enum nvram_create_all_folder(void)
831{
832 /*----------------------------------------------------------------*/
833 /* Local Variables */
834 /*----------------------------------------------------------------*/
835 kal_int32 loop_idx;
836 nvram_errno_enum result = NVRAM_ERRNO_SUCCESS;
837
838 /*----------------------------------------------------------------*/
839 /* Code Body */
840 /*----------------------------------------------------------------*/
841 for (loop_idx = NVRAM_FOLDER_TOTAL - 1; loop_idx >= NVRAM_FOLDER_BEGIN; loop_idx--)
842 {
843 if (nvram_create_certain_folder(loop_idx) == NVRAM_ERRNO_FOLDER_EXIST)
844 {
845 result = NVRAM_ERRNO_FOLDER_EXIST;
846 }
847
848 MD_TRC_FUNC_NVRAM_CREATE_ALL_FOLDER(loop_idx);
849 }
850
851 return result;
852}
853
854
855/*****************************************************************************
856 * FUNCTION
857 * nvram_delete_certain_folder
858 * DESCRIPTION
859 * Delete all files in certain folder
860 * PARAMETERS
861 * folder_idx : [in]
862 * RETURNS
863 * Success or Fail
864 *****************************************************************************/
865static kal_bool nvram_delete_certain_folder(nvram_folder_enum folder_idx)
866{
867 /*----------------------------------------------------------------*/
868 /* Local Variables */
869 /*----------------------------------------------------------------*/
870 FS_HANDLE handle;
871 FS_DOSDirEntry fileinfo;
872 WCHAR namepattern[32];
873
874#if defined(__MTK_TARGET__) && defined(__NVRAM_IMPORTANT_PARTITIONS__) && defined(__CCCIFS_SUPPORT__)
875 WCHAR filename[NVRAM_MAX_PATH_LEN];
876#else
877 WCHAR filename[NVRAM_FILE_LEN + 1];
878#endif
879 kal_int32 result = FS_NO_ERROR;
880 WCHAR fullfilename[NVRAM_MAX_PATH_LEN];
881 kal_uint32 retval;
882 /*----------------------------------------------------------------*/
883 /* Code Body */
884 /*----------------------------------------------------------------*/
885 /*
886 * FS_XDelete will cut the folder, here we can't call it.
887 */
888
889#if defined(__MTK_TARGET__) && defined(__NVRAM_IMPORTANT_PARTITIONS__) && defined(__CCCIFS_SUPPORT__)
890 if ((folder_idx == NVRAM_NVD_IMPNT) || (folder_idx == NVRAM_NVD_IMPNT2))
891 { // SML should never be deleted
892 return KAL_TRUE;
893 }
894#endif
895
896 nvram_query_file_name(folder_idx, "*", namepattern);
897
898 #ifndef __LOW_COST_SUPPORT_ULC__
899 NVRAM_FS_START_EX(FS_OP_FINDFIRST, namepattern);
900 handle = FS_FindFirst(namepattern, 0, FS_ATTR_DIR, &fileinfo, filename, sizeof(filename));
901 NVRAM_FS_END(FS_OP_FINDFIRST,handle);
902 if (handle > 0)
903 {
904 do
905 {
906 nvram_query_ex_file_name(folder_idx, filename, fullfilename);
907
908
909 NVRAM_FS_START_EX(FS_OP_DELETE, fullfilename);
910 retval = FS_Delete(fullfilename);
911 NVRAM_FS_END(FS_OP_DELETE,retval);
912 if (retval != FS_NO_ERROR)
913 {
914 NVRAM_FS_START(FS_OP_FINDCLOSE);
915 result = FS_FindClose(handle);
916 NVRAM_FS_END(FS_OP_FINDCLOSE,result);
917 return KAL_FALSE;
918 }
919 NVRAM_FS_START(FS_OP_FINDNEXT);
920 result = FS_FindNext(handle, &fileinfo, filename, sizeof(filename));
921 NVRAM_FS_END(FS_OP_FINDNEXT,result);
922 }
923 while (result == FS_NO_ERROR);
924 }
925 else
926 {
927 return KAL_FALSE;
928 }
929
930 NVRAM_FS_START(FS_OP_FINDCLOSE);
931 result = FS_FindClose(handle);
932 NVRAM_FS_END(FS_OP_FINDCLOSE,result);
933#else /* __LOW_COST_SUPPORT_ULC__ */
934 while(1)
935 {
936 NVRAM_FS_START_EX(FS_OP_FINDFIRST, namepattern);
937 handle = FS_FindFirst(namepattern, 0, FS_ATTR_DIR, &fileinfo, filename, sizeof(filename));
938 NVRAM_FS_END(FS_OP_FINDFIRST,handle);
939 if (handle > 0)
940 {
941 NVRAM_FS_START(FS_OP_FINDCLOSE);
942 result = FS_FindClose(handle);
943 NVRAM_FS_END(FS_OP_FINDCLOSE,result);
944
945 nvram_query_ex_file_name(folder_idx, filename, fullfilename);
946
947 NVRAM_FS_START_EX(FS_OP_DELETE,fullfilename);
948 retval = FS_Delete(fullfilename);
949 NVRAM_FS_END(FS_OP_DELETE,retval);
950 if (retval != FS_NO_ERROR)
951 {
952 return KAL_FALSE;
953 }
954 }
955 else
956 {
957 break;
958 }
959 }
960#endif /* __LOW_COST_SUPPORT_ULC__ */
961
962 return KAL_TRUE;
963}
964
965
966/*****************************************************************************
967 * FUNCTION
968 * nvram_delete_all_nvram_files
969 * DESCRIPTION
970 *
971 * PARAMETERS
972 * void
973 * RETURNS
974 *
975 *****************************************************************************/
976kal_bool nvram_delete_all_nvram_files(nvram_bootup_enum bootup_type)
977{
978 /*----------------------------------------------------------------*/
979 /* Local Variables */
980 /*----------------------------------------------------------------*/
981 kal_int32 loop_idx;
982
983 /*----------------------------------------------------------------*/
984 /* Code Body */
985 /*----------------------------------------------------------------*/
986 MD_TRC_FUNC_NVRAM_DELETE_ALL_NVRAM_FILES(bootup_type);
987 switch (bootup_type)
988 {
989 case NVRAM_FIRST_BOOTUP:
990 {
991 for (loop_idx = NVRAM_FOLDER_TOTAL - 1; loop_idx >= NVRAM_FOLDER_BEGIN; loop_idx--)
992 {
993 nvram_delete_certain_folder(loop_idx);
994 }
995 break;
996 }
997
998 case NVRAM_NORMAL_BOOTUP:
999 {
1000 nvram_delete_certain_folder(NVRAM_NVD_DATA);
1001 #if !defined(__CCCIFS_SUPPORT__)
1002 #ifdef __NVRAM_MULTI_FOLDERS__
1003 nvram_delete_certain_folder(NVRAM_NVD_CALI);
1004 #endif /* __NVRAM_MULTI_FOLDERS__ */
1005 #endif
1006 break;
1007 }
1008
1009 default:
1010 break;
1011 }
1012
1013 return KAL_TRUE;
1014}
1015
1016