1d6aed566Sopenharmony_ci/*
2d6aed566Sopenharmony_ci * Copyright (c) 2020-2021 Huawei Device Co., Ltd.
3d6aed566Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4d6aed566Sopenharmony_ci * you may not use this file except in compliance with the License.
5d6aed566Sopenharmony_ci * You may obtain a copy of the License at
6d6aed566Sopenharmony_ci *
7d6aed566Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8d6aed566Sopenharmony_ci *
9d6aed566Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10d6aed566Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11d6aed566Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12d6aed566Sopenharmony_ci * See the License for the specific language governing permissions and
13d6aed566Sopenharmony_ci * limitations under the License.
14d6aed566Sopenharmony_ci */
15d6aed566Sopenharmony_ci
16d6aed566Sopenharmony_ci#include "riscv_hal.h"
17d6aed566Sopenharmony_ci#include "los_debug.h"
18d6aed566Sopenharmony_ci#include "soc.h"
19d6aed566Sopenharmony_ci#include "plic.h"
20d6aed566Sopenharmony_ci
21d6aed566Sopenharmony_ci#ifdef __cplusplus
22d6aed566Sopenharmony_ci#if __cplusplus
23d6aed566Sopenharmony_ciextern "C" {
24d6aed566Sopenharmony_ci#endif
25d6aed566Sopenharmony_ci#endif
26d6aed566Sopenharmony_ci
27d6aed566Sopenharmony_ciVOID HalIrqDisable(UINT32 vector)
28d6aed566Sopenharmony_ci{
29d6aed566Sopenharmony_ci    if (vector <= RISCV_SYS_MAX_IRQ) {
30d6aed566Sopenharmony_ci        CLEAR_CSR(mie, 1 << vector);
31d6aed566Sopenharmony_ci    } else {
32d6aed566Sopenharmony_ci        PlicIrqDisable(vector);
33d6aed566Sopenharmony_ci    }
34d6aed566Sopenharmony_ci}
35d6aed566Sopenharmony_ci
36d6aed566Sopenharmony_ciVOID HalIrqEnable(UINT32 vector)
37d6aed566Sopenharmony_ci{
38d6aed566Sopenharmony_ci    if (vector <= RISCV_SYS_MAX_IRQ) {
39d6aed566Sopenharmony_ci        SET_CSR(mie, 1 << vector);
40d6aed566Sopenharmony_ci    } else {
41d6aed566Sopenharmony_ci        PlicIrqEnable(vector);
42d6aed566Sopenharmony_ci    }
43d6aed566Sopenharmony_ci}
44d6aed566Sopenharmony_ci
45d6aed566Sopenharmony_ciVOID HalSetLocalInterPri(UINT32 interPriNum, UINT16 prior)
46d6aed566Sopenharmony_ci{
47d6aed566Sopenharmony_ci    PlicIrqSetPrio(interPriNum, prior);
48d6aed566Sopenharmony_ci}
49d6aed566Sopenharmony_ci
50d6aed566Sopenharmony_ciBOOL HalBackTraceFpCheck(UINT32 value)
51d6aed566Sopenharmony_ci{
52d6aed566Sopenharmony_ci    if (value >= (UINT32)(UINTPTR)(&__bss_end)) {
53d6aed566Sopenharmony_ci        return TRUE;
54d6aed566Sopenharmony_ci    }
55d6aed566Sopenharmony_ci
56d6aed566Sopenharmony_ci    if ((value >= (UINT32)(UINTPTR)(&__start_and_irq_stack_top)) && (value < (UINT32)(UINTPTR)(&__except_stack_top))) {
57d6aed566Sopenharmony_ci        return TRUE;
58d6aed566Sopenharmony_ci    }
59d6aed566Sopenharmony_ci
60d6aed566Sopenharmony_ci    return FALSE;
61d6aed566Sopenharmony_ci}
62d6aed566Sopenharmony_ci
63d6aed566Sopenharmony_ciVOID HalPlicInit(VOID)
64d6aed566Sopenharmony_ci{
65d6aed566Sopenharmony_ci    PlicIrqInit();
66d6aed566Sopenharmony_ci
67d6aed566Sopenharmony_ci    HalIrqEnable(RISCV_MACH_EXT_IRQ);
68d6aed566Sopenharmony_ci}
69d6aed566Sopenharmony_ci
70d6aed566Sopenharmony_ci#ifdef __cplusplus
71d6aed566Sopenharmony_ci#if __cplusplus
72d6aed566Sopenharmony_ci}
73d6aed566Sopenharmony_ci#endif
74d6aed566Sopenharmony_ci#endif
75