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