2 * @copyright Copyright (c) 2016-2020 TOYOTA MOTOR CORPORATION.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "system_service/ss_sm_boot_access.h"
19 #include <native_service/cl_lock.h>
20 #include <native_service/cl_lockid.h>
21 #include "system_service/nor_backup.h"
22 #include "ss_rom_access_if_romaccesslibrarylog.h"
23 #include "ss_rom_access_define.h"
25 #define BAI_MTD_DEV_RO "/dev/mtd1ro" // NOR device for RO
26 #define BAI_MTD_DEV_RW "/dev/mtd1" // NOR device for RW
28 #define BAI_SERCTOR_OFFSET 0
29 #define BAI_DATA_OFFSET 0
31 void* BOOT_AccessIf::g_m_plock = NULL;
33 BOOT_AccessIf::BOOT_AccessIf(BAI_OPEN_t type)
35 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
37 if (!(m_type == BAI_OPEN_RO // LCOV_EXCL_BR_LINE 6: double check
38 || m_type == BAI_OPEN_RW)) { // LCOV_EXCL_BR_LINE 6: double check
39 AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
40 throw __LINE__; // LCOV_EXCL_LINE 6: double check
43 if (g_m_plock == NULL) {
44 g_m_plock = CL_LockMap(LOCK_BOOT_ACCESS_IF);
46 if (g_m_plock == MAP_FAILED) { // LCOV_EXCL_BR_LINE 6:impossible to confirm because g_m_plock can not be changed
47 ROM_ACCESS_ASERT(0); // LCOV_EXCL_BR_LINE 6:impossible to confirm because g_m_plock can not be changed
48 // LCOV_EXCL_BR_START 6:impossible to confirm because g_m_plock can not be changed
50 ZONE_ERR, __FUNCTION__,
51 "CL_LockMap Error, please check whether you call CL_LockProcessInit");
56 if (g_m_plock) { // LCOV_EXCL_BR_LINE 6:impossible to confirm because g_m_plock can not be changed
57 ROM_ACCESS_ASERT(0 == CL_LockGet(g_m_plock)); // LCOV_EXCL_BR_LINE 11:unexpected branch
60 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
63 BOOT_AccessIf::~BOOT_AccessIf() {
64 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
66 if (g_m_plock) { // LCOV_EXCL_BR_LINE 6:impossible to confirm because g_m_plock can not be changed
67 ROM_ACCESS_ASERT(0 == CL_LockRelease(g_m_plock)); // LCOV_EXCL_BR_LINE 11:unexpected branch
70 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
73 EFrameworkunifiedStatus BOOT_AccessIf::getBootInfo(LBM_NOR_t* p_bootInfo) {
74 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
75 EFrameworkunifiedStatus eRet = eFrameworkunifiedStatusOK;
78 if (p_bootInfo == NULL) {
79 ROM_ACCESS_ASERT(0); // LCOV_EXCL_BR_LINE 11:unexpected branch
82 ret = mtdn_backup_Read((const char *) BAI_MTD_DEV_RO, BAI_SERCTOR_OFFSET,
83 BAI_DATA_OFFSET, sizeof(LBM_NOR_t), p_bootInfo); // LCOV_EXCL_BR_LINE 11:unexpected branch
86 ROM_ACCESS_ASERT(0); // LCOV_EXCL_BR_LINE 11:unexpected branch
90 eRet = eFrameworkunifiedStatusFail;
92 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");
96 EFrameworkunifiedStatus BOOT_AccessIf::setBootInfo(LBM_NOR_t* p_bootInfo) {
97 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "+");
98 EFrameworkunifiedStatus eRet = eFrameworkunifiedStatusOK;
101 if (p_bootInfo == NULL) {
102 ROM_ACCESS_ASERT(0); // LCOV_EXCL_BR_LINE 11:unexpected branch
105 if (m_type != BAI_OPEN_RW) {
106 ROM_ACCESS_ASERT(0); // LCOV_EXCL_BR_LINE 11:unexpected branch
109 ret = mtdn_backup_Write((const char *) BAI_MTD_DEV_RW, BAI_SERCTOR_OFFSET,
110 BAI_DATA_OFFSET, sizeof(LBM_NOR_t), p_bootInfo); // LCOV_EXCL_BR_LINE 11:unexpected branch
111 if (ret != 0) { // LCOV_EXCL_BR_LINE 5:c API error case
112 AGL_ASSERT_NOT_TESTED(); // LCOV_EXCL_LINE 200: test assert
113 ROM_ACCESS_ASERT(0); // LCOV_EXCL_LINE 5:c API error case
114 throw __LINE__; // LCOV_EXCL_LINE 5:c API error case
117 eRet = eFrameworkunifiedStatusFail;
119 FRAMEWORKUNIFIEDLOG(ZONE_FUNC, __FUNCTION__, "-");