WS63 SDK 文档 7021f4f@fbb_ws63
ws63 和 ws63e 解决方案的 SDK 文档
载入中...
搜索中...
未找到
oal_queue.h
浏览该文件的文档.
1/*
2 * Copyright (c) HiSilicon (Shanghai) Technologies Co., Ltd. 2012-2023. All rights reserved.
3 * Description: oal_queue 的头文件
4 * Create: 2012年11月29日
5 */
6
7#ifndef __OAL_QUEUE_H__
8#define __OAL_QUEUE_H__
9
10#include "oal_types.h"
11#include "oal_mem_hcm.h"
12
13#include "common_dft_rom.h"
14
15#ifdef __cplusplus
16#if __cplusplus
17extern "C" {
18#endif
19#endif
20
21#undef THIS_FILE_ID
22#define THIS_FILE_ID OAM_FILE_ID_OAL_QUEUE_H
23
24#define OAL_QUEUE_DESTROY
25
26typedef struct {
27 osal_u8 element_cnt; /* 本队列中已经存放的元素个数 */
28 osal_u8 max_elements; /* 本队列中所能存放的最大元素个数 */
29 osal_u8 tail_index; /* 指向下一个元素入队位置的索引 */
30 osal_u8 head_index; /* 指向当前元素出队位置的索引 */
31 osal_ulong *pul_buf; /* 队列缓存 */
33
34typedef struct {
35 osal_u16 element_cnt; /* 本队列中已经存放的元素个数 */
36 osal_u16 max_elements; /* 本队列中所能存放的最大元素个数 */
37 osal_u16 tail_index; /* 指向下一个元素入队位置的索引 */
38 osal_u16 head_index; /* 指向当前元素出队位置的索引 */
39 osal_ulong *pul_buf; /* 队列缓存 */
41
42/*****************************************************************************
43 函 数 名 : oal_queue_set
44 功能描述 : 设置队列参数
45 输入参数 : queue : 队列指针
46 pul_buf : 指向队列缓冲区的指针
47 max_elements: 最大元素个数
48 输出参数 : 无
49 返 回 值: 无
50
51 修改历史 :
52 1.日 期 : 2012年10月23日
53 修改内容 : 新生成函数
54
55*****************************************************************************/
56OAL_STATIC OAL_INLINE osal_void oal_queue_set(oal_queue_stru *queue, osal_ulong *pul_buf, osal_u8 max_elements)
57{
58 queue->pul_buf = pul_buf;
59
60 queue->tail_index = 0;
61 queue->head_index = 0;
62 queue->element_cnt = 0;
63 queue->max_elements = max_elements;
64}
65
66OAL_STATIC OAL_INLINE osal_void oal_queue_set_16(oal_queue_stru_16 *queue, osal_ulong *pul_buf, osal_u16 max_elements)
67{
68 queue->pul_buf = pul_buf;
69
70 queue->tail_index = 0;
71 queue->head_index = 0;
72 queue->element_cnt = 0;
73 queue->max_elements = max_elements;
74}
75
76/*****************************************************************************
77 函 数 名 : oal_queue_enqueue
78 功能描述 : 元素入队
79 输入参数 : queue: 队列指针
80 p_element: 元素指针
81 输出参数 : 无
82 返 回 值 : OAL_SUCC 或其它错误码
83
84 修改历史:
85 1.日 期 : 2012年10月17日
86 修改内容 : 新生成函数
87
88*****************************************************************************/
89OAL_STATIC OAL_INLINE osal_u32 oal_queue_enqueue(oal_queue_stru *queue, osal_void *p_element)
90{
91 osal_u8 tail_index;
92
93 /* 异常: 队列已满 */
94 if (queue->element_cnt == queue->max_elements) {
95 return OAL_FAIL;
96 }
97
98 tail_index = queue->tail_index;
99
100 /* 将元素的地址保存在队列中 */
101 queue->pul_buf[tail_index] = (uintptr_t)p_element;
102
103 tail_index++;
104
105 queue->tail_index = ((tail_index >= queue->max_elements) ? 0 : tail_index);
106
107 queue->element_cnt++;
108
109 return OAL_SUCC;
110}
111
112OAL_STATIC OAL_INLINE osal_u32 oal_queue_enqueue_16(oal_queue_stru_16 *queue, osal_void *p_element)
113{
114 osal_u16 tail_index;
115
116 /* 异常: 队列已满 */
117 if (queue->element_cnt == queue->max_elements) {
118 return OAL_FAIL;
119 }
120
121 tail_index = queue->tail_index;
122
123 /* 将元素的地址保存在队列中 */
124 queue->pul_buf[tail_index] = (uintptr_t)p_element;
125
126 tail_index++;
127
128 queue->tail_index = ((tail_index >= queue->max_elements) ? 0 : tail_index);
129
130 queue->element_cnt++;
131
132 return OAL_SUCC;
133}
134
135OAL_STATIC OAL_INLINE osal_u32 oal_queue_enqueue_8user(oal_queue_stru_16 *queue, osal_void *p_element)
136{
137 osal_u16 tail_index;
138 osal_u16 tail_index_next;
139
140 /* 异常: 队列已满 */
141 if (queue->element_cnt == queue->max_elements) {
142 return OAL_FAIL;
143 }
144
145 tail_index = (queue->tail_index > 0) ? (queue->tail_index - 1) : (queue->max_elements - 1);
146
147 /* 将元素的地址保存在队列中 */
148 queue->pul_buf[tail_index] = (uintptr_t)p_element;
149
150 queue->tail_index = tail_index;
151
152 tail_index_next = (tail_index + 1 < queue->max_elements) ? (tail_index + 1) : 0;
153 /* 保证element 1(user idx 0) 一直处于tail index */
154 if ((queue->element_cnt > 0) && (queue->pul_buf[tail_index_next] == 1)) {
155 queue->pul_buf[tail_index_next] = (uintptr_t)p_element;
156 queue->pul_buf[tail_index] = 1;
157 }
158
159 queue->element_cnt++;
160
161 return OAL_SUCC;
162}
163
164/*****************************************************************************
165 函 数 名 : oal_queue_dequeue
166 功能描述 : 元素出队
167 输入参数 : queue: 队列指针
168 输出参数 : 无
169 返 回 值 : 成功: 事件指针
170 失败: OAL_PTR_NULL
171
172 修改历史 :
173 1.日 期 : 2012年10月17日
174 修改内容 : 新生成函数
175
176*****************************************************************************/
177OAL_STATIC OAL_INLINE osal_void* oal_queue_dequeue(oal_queue_stru *queue)
178{
179 osal_u8 head_index;
180 osal_void *p_element;
181
182 /* 异常: 队列为空 */
183 if (queue->element_cnt == 0) {
184 return OAL_PTR_NULL;
185 }
186
187 head_index = queue->head_index;
188
189 p_element = (osal_void *)(uintptr_t)queue->pul_buf[head_index];
190
191 head_index++;
192
193 queue->head_index = ((head_index >= queue->max_elements) ? 0 : head_index);
194 queue->element_cnt--;
195
196 return p_element;
197}
198
199OAL_STATIC OAL_INLINE osal_void *oal_queue_dequeue_8user(oal_queue_stru_16 *queue)
200{
201 osal_u16 tail_index;
202 osal_void *p_element;
203
204 /* 异常: 队列为空 */
205 if (queue->element_cnt == 0) {
206 return OAL_PTR_NULL;
207 }
208
209 tail_index = queue->tail_index;
210
211 p_element = (osal_void *)(uintptr_t)queue->pul_buf[tail_index];
212
213 tail_index++;
214
215 queue->tail_index = (tail_index >= queue->max_elements) ? 0 : tail_index;
216 queue->element_cnt--;
217
218 return p_element;
219}
220
221#ifdef __cplusplus
222 #if __cplusplus
223 }
224 #endif
225#endif
226
227#endif /* end of oal_data_stru.h */
@ OAL_FAIL
Definition common_error_code_rom.h:570
@ OAL_SUCC
Definition common_error_code_rom.h:18
#define OAL_INLINE
Definition driver_soc_common.h:47
#define OAL_PTR_NULL
Definition oal_types_device_rom.h:30
unsigned char osal_u8
Definition osal_types.h:11
void osal_void
Definition osal_types.h:29
unsigned int osal_u32
Definition osal_types.h:13
unsigned short osal_u16
Definition osal_types.h:12
unsigned long osal_ulong
Definition osal_types.h:15
#define OAL_STATIC
Definition soc_wifi_service_api.c:30
Definition oal_queue.h:34
osal_u16 max_elements
Definition oal_queue.h:36
osal_u16 tail_index
Definition oal_queue.h:37
osal_ulong * pul_buf
Definition oal_queue.h:39
osal_u16 head_index
Definition oal_queue.h:38
osal_u16 element_cnt
Definition oal_queue.h:35
Definition oal_queue.h:26
osal_u8 element_cnt
Definition oal_queue.h:27
osal_u8 max_elements
Definition oal_queue.h:28
osal_ulong * pul_buf
Definition oal_queue.h:31
osal_u8 tail_index
Definition oal_queue.h:29
osal_u8 head_index
Definition oal_queue.h:30
unsigned int uintptr_t
Definition td_type.h:65