• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
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  * Description: event
15  *
16  * Create: 2021-12-16
17  */
18 
19 #include <los_event.h>
20 #include <los_memory.h>
21 #include "soc_osal.h"
22 #include "osal_inner.h"
23 
24 #define BIT_31 (1 << 31)
25 
osal_event_init(osal_event * event_obj)26 int osal_event_init(osal_event *event_obj)
27 {
28     unsigned int ret;
29     if (event_obj == NULL || event_obj->event != NULL) {
30         osal_log("parameter invalid!\n");
31         return OSAL_FAILURE;
32     }
33     event_obj->event = (EVENT_CB_S *)LOS_MemAlloc((void*)m_aucSysMem0, sizeof(EVENT_CB_S));
34     if (event_obj->event == NULL) {
35         osal_log("LOS_MemAlloc failed!\n");
36         return OSAL_FAILURE;
37     }
38     ret = LOS_EventInit(event_obj->event);
39     if (ret != LOS_OK) {
40         LOS_MemFree((void*)m_aucSysMem0, event_obj->event);
41         event_obj->event = NULL;
42         osal_log("LOS_EventInit failed! ret = %#x.\n", ret);
43         return OSAL_FAILURE;
44     }
45     return OSAL_SUCCESS;
46 }
osal_event_write(osal_event * event_obj,unsigned int mask)47 int osal_event_write(osal_event *event_obj, unsigned int mask)
48 {
49     unsigned int ret;
50     if (event_obj == NULL || (mask & BIT_31) == 1) {
51         osal_log("parameter invalid! mask=%#x.\n", mask);
52         return OSAL_FAILURE;
53     }
54     ret = LOS_EventWrite(event_obj->event, mask);
55     if (ret != OSAL_SUCCESS) {
56         osal_log("LOS_EventWrite failed! ret = %#x.\n", ret);
57         return OSAL_FAILURE;
58     }
59     return OSAL_SUCCESS;
60 }
osal_event_read(osal_event * event_obj,unsigned int mask,unsigned int timeout_ms,unsigned int mode)61 int osal_event_read(osal_event *event_obj, unsigned int mask, unsigned int timeout_ms, unsigned int mode)
62 {
63     unsigned int ret;
64     unsigned int timeout;
65     if (event_obj == NULL || (mask & BIT_31) == 1) {
66         osal_log("parameter invalid! mask=%#x.\n", mask);
67         return OSAL_FAILURE;
68     }
69     timeout = (timeout_ms == OSAL_EVENT_FOREVER) ? LOS_WAIT_FOREVER : LOS_MS2Tick(timeout_ms);
70     ret = LOS_EventRead(event_obj->event, mask, mode, timeout);
71     if (!ret || (ret & LOS_ERRTYPE_ERROR)) {
72         osal_log("LOS_EventRead failed! ret=%#x. mask=%#x. mode=%#x\n", ret, mask, mode);
73         return OSAL_FAILURE;
74     } else {
75         return (int)ret;
76     }
77 }
osal_event_clear(osal_event * event_obj,unsigned int mask)78 int osal_event_clear(osal_event *event_obj, unsigned int mask)
79 {
80     unsigned int ret;
81     if (event_obj == NULL) {
82         osal_log("parameter invalid!\n");
83         return OSAL_FAILURE;
84     }
85     ret = LOS_EventClear(event_obj->event, ~mask);
86     if (ret != OSAL_SUCCESS) {
87         osal_log("LOS_EventClear failed! ret = %#x.\n", ret);
88         return OSAL_FAILURE;
89     }
90     return OSAL_SUCCESS;
91 }
92 
osal_event_destroy(osal_event * event_obj)93 int osal_event_destroy(osal_event *event_obj)
94 {
95     unsigned int ret;
96     if (event_obj == NULL) {
97         osal_log("parameter invalid!\n");
98         return OSAL_FAILURE;
99     }
100     ret = LOS_EventDestroy(event_obj->event);
101     LOS_MemFree((void*)m_aucSysMem0, event_obj->event);
102     event_obj->event = NULL;
103     if (ret != OSAL_SUCCESS) {
104         osal_log("LOS_EventDestroy failed! ret = %#x.\n", ret);
105         return OSAL_FAILURE;
106     }
107     return OSAL_SUCCESS;
108 }
109