1 /*
2  * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
3  *
4  * UniProton is licensed under Mulan PSL v2.
5  * You can use this software according to the terms and conditions of the Mulan PSL v2.
6  * You may obtain a copy of Mulan PSL v2 at:
7  *          http://license.coscl.org.cn/MulanPSL2
8  * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
9  * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
10  * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
11  * See the Mulan PSL v2 for more details.
12  * Create: 2009-12-22
13  * Description: 队列模块内部头文件。
14  */
15 #ifndef PRT_QUEUE_EXTERNAL_H
16 #define PRT_QUEUE_EXTERNAL_H
17 
18 #include "prt_queue.h"
19 #include "prt_list_external.h"
20 #include "prt_cpu_external.h"
21 
22 /* 模块间宏定义 */
23 #define OS_QUEUE_NODE_HEAD_LEN (sizeof(struct QueNode) - 2)
24 
25 /* 队列状态 */
26 #define OS_QUEUE_UNUSED 0 /* 队列没有使用 */
27 #define OS_QUEUE_USED 1 /* 已经被使用 */
28 
29 #define OS_QUEUE_PID_INVALID       0xFFFFU /* 节点未使用 */
30 #define OS_QUEUE_NODE_SIZE_ALIGN   0x2U
31 
32 #define GET_QUEUE_HANDLE(queueId) (((struct TagQueCb *)g_allQueue) + (queueId))
33 
34 #define OS_QUEUE_INNER_ID(queueId)  ((queueId) - 1)
35 #define OS_QUEUE_ID(innerId)  ((innerId) + 1)
36 
37 #define OS_QUEUE_NAME_LEN   16
38 
39 /* 队列控制块结构体 */
40 struct TagQueCb {
41     /* 队列起始地址指针 */
42     U8 *queue;
43     /* 队列状态 */
44     U16 queueState;
45     /* 队列长度(队列节点个数) */
46     U16 nodeNum;
47     /* 每个节点长度,单位word */
48     U16 nodeSize;
49     /* 当前队列头下标 */
50     U16 queueHead;
51     /* 当前队列尾下标 */
52     U16 queueTail;
53     /* 队列节点使用的峰值 */
54     U16 nodePeak;
55     /* 队列写资源计数器 */
56     U16 writableCnt;
57     /* 队列读资源计数器 */
58     U16 readableCnt;
59     /* 写队列超时LIST */
60     struct TagListObject writeList;
61     /* 读队列超时LIST */
62     struct TagListObject readList;
63 };
64 
65 /* 队列节点的数据结构 */
66 struct QueNode {
67     /* 源PID */
68     U16 srcPid;
69     /* 节点长度 */
70     U16 size;
71     /* buf是初始化申请的,长度>=1 */
72     U8 buf[2];
73 };
74 
75 /* 队列最大个数 */
76 extern U16 g_maxQueue;
77 extern struct TagQueCb *g_allQueue;
78 
79 #endif /* PRT_QUEUE_EXTERNAL_H */
80