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