1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *    http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <sys/stat.h>
17 #include "stdlib.h"
18 #include "ohos_mem_pool.h"
19 #include "hiview_log.h"
20 #include "los_debug.h"
21 #if (LOSCFG_SUPPORT_FATFS == 1)
22 #include "fatfs.h"
23 #endif /* LOSCFG_SUPPORT_FATFS == 1 */
24 #if (LOSCFG_SUPPORT_LITTLEFS == 1)
25 #include "lfs.h"
26 #endif /* LOSCFG_SUPPORT_LITTLEFS == 1 */
27 
28 /**
29  * @brief implement for hilog_lite featured/mini
30  * @notice hilog_lite mini converts '%s' to '%p'
31  */
HilogProc_Impl(const HiLogContent *hilogContent, uint32 len)32 boolean HilogProc_Impl(const HiLogContent *hilogContent, uint32 len)
33 {
34     char tempOutStr[LOG_FMT_MAX_LEN] = {0};
35     if (LogContentFmt(tempOutStr, sizeof(tempOutStr), hilogContent) > 0) {
36         printf(tempOutStr);
37     }
38     return TRUE;
39 }
40 
41 #if (LOSCFG_SUPPORT_FATFS == 1)
SetupDefaultVolToPartTable(void)42 void SetupDefaultVolToPartTable(void)
43 {
44     int i = 0;
45     PARTITION defaultVToP[FF_VOLUMES] = {
46         {0, 1, 1},     /* "0:" ==> Physical drive 1, 1st partition */
47         {1, 1, 2},     /* "1:" ==> Physical drive 1, 2nd partition */
48         {2, 1, 3},     /* "2:" ==> Physical drive 1, 3rd partition */
49         {3, 1, 4}      /* "3:" ==> Physical drive 1, 4th partition */
50     };
51 
52     for (i = 0; i < FF_VOLUMES; i++) {
53         SetupVolToPartTable(i, defaultVToP[i], GetCfiBlkOps());
54     }
55 }
56 #endif /* LOSCFG_SUPPORT_FATFS == 1 */
57 
_init(void)58 void _init(void) {}
_fini(void)59 void _fini(void) {}
60 extern void __libc_fini_array (void);
61 
SystemAdapterInit(void)62 void SystemAdapterInit(void)
63 {
64     UINT32 ret = 0;
65 
66     /* _start in crt0.S have been replaced by los_start.S in riscv32_virt,
67      * so call this functions here for initialization and destruction of c++ global var
68      */
69     if (atexit(__libc_fini_array) != 0) {
70         PRINT_ERR("register exit proc error!\n");
71     };
72     __libc_init_array();
73 
74 #if (LOSCFG_SUPPORT_LITTLEFS == 1)
75     if (LittlefsDriverInit(1) == 0) {
76         struct lfs_config *littlefsConfig = GetCfiLfsCfg();
77         ret = mount(NULL, "/data", "littlefs", 0, littlefsConfig);
78         if (ret != LOS_OK) {
79             PRINT_ERR("Mount Littlefs error:0x%x\n", ret);
80         }
81     }
82 #elif (LOSCFG_SUPPORT_FATFS == 1)
83     SetupDefaultVolToPartTable();
84     /* mount fs in fat.img,for font.ttf used by graphic */
85     if (ret = mount("p0", "/data", "vfat", 0, NULL)) {
86         PRINT_ERR("Mount Fatfs error:0x%x\n", ret);
87     }
88 #endif /* LOSCFG_SUPPORT_FATFS == 1 */
89 
90     /* bootstrap init */
91     OHOS_SystemInit();
92 
93     /* register hilog output func for mini */
94     HiviewRegisterHilogProc(HilogProc_Impl);
95 }
96 
97 /**
98  * @brief implement for ohos_mem_pool.h
99  */
OhosMalloc(MemType type, uint32 size)100 void *OhosMalloc(MemType type, uint32 size)
101 {
102     if (size == 0) {
103         return NULL;
104     }
105     return malloc(size);
106 }
107 
OhosFree(void *ptr)108 void OhosFree(void *ptr)
109 {
110     free(ptr);
111 }
112 
113 /* implementation for js_app_host.h: LP_TaskBegin */
LP_TaskBegin(void)114 void LP_TaskBegin(void)
115 {
116 }
117 
118 /* implementation for js_app_host.h: LP_TaskEnd */
LP_TaskEnd(void)119 void LP_TaskEnd(void)
120 {
121 }
122 
123 /**
124  * @brief adapter for js_ability.cpp
125  * #ifdef OHOS_ACELITE_PRODUCT_WATCH
126  */
RestoreSystemWrapper(const char *crashMessage)127 void RestoreSystemWrapper(const char *crashMessage)
128 {
129     printf("%s\n", crashMessage);
130 }
131