1 /*
2  * Copyright (c) 2001-2019, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #include "cc_pal_types.h"
8 #include "FreeRTOS.h"
9 #include "task.h"
10 
11 int32_t g_apbcCntr;
12 
CC_PalApbcCntrInit(void)13 void CC_PalApbcCntrInit(void)
14 {
15     g_apbcCntr = 0;
16     return;
17 }
18 
CC_PalApbcCntrValue(void)19 int32_t CC_PalApbcCntrValue(void)
20 {
21     return g_apbcCntr;
22 }
23 
CC_PalApbcModeSelect(CCBool isApbcInc)24 CCError_t CC_PalApbcModeSelect(CCBool isApbcInc)
25 {
26     CCError_t rc = CC_OK;
27 
28     switch (isApbcInc){
29     case CC_FALSE:
30         taskENTER_CRITICAL();
31         g_apbcCntr--;
32         taskEXIT_CRITICAL();
33         break;
34     case CC_TRUE:
35         taskENTER_CRITICAL();
36         g_apbcCntr++;
37         taskEXIT_CRITICAL();
38         break;
39     default:
40         return CC_FAIL;
41     }
42 
43     if(g_apbcCntr < 0 ){
44         /* illegal state - exit with error */
45         return 1;
46     }
47 
48     return rc;
49 }
50