blob: 1da1af3ea148093dfb5bd178095d3f71d64bbc7d [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/*******************************************************************************
2 * Copyright (C) 2007, ZTE Corporation.
3 *
4 * File Name:ring_queue.h
5 * File Mark:
6 * Description:
7 * Others:
8 * Version: 1.0
9 * Author: geanfeng
10 * Date: 2013-09-25
11 * History 1:
12 * Date:
13 * Version:
14 * Author:
15 * Modification:
16 * History 2:
17 ********************************************************************************/
18
19#ifndef _RING_QUEUE_H
20#define _RING_QUEUE_H
21
22/****************************************************************************
23* Include files
24****************************************************************************/
25#include "drvs_general.h"
26/****************************************************************************
27* Macros
28****************************************************************************/
29
30/****************************************************************************
31* Types
32****************************************************************************/
33typedef enum _T_USER_PROTECT_POLICY {
34 QUEUE_PROTECT_RAW = 0,
35 QUEUE_PROTECT_MUTEX,
36 QUEUE_PROTECT_IRQ,
37}T_USER_PROTECT_POLICY;
38
39typedef struct _T_Ring_Queue {
40 UINT8 *unit_buffer;
41 UINT32 unit_buffer_size;
42 UINT32 unit_size;
43 UINT32 unit_count;
44 UINT32 write_pos;
45 UINT32 read_pos;
46
47 T_USER_PROTECT_POLICY multi_user_protect;
48 ZOSS_SEMAPHORE_ID lock;
49}T_Ring_Queue;
50
51/****************************************************************************
52* Constants
53****************************************************************************/
54
55/****************************************************************************
56* Global Variables
57****************************************************************************/
58
59/****************************************************************************
60* Function Prototypes
61****************************************************************************/
62T_Ring_Queue *ringQueue_Create(UINT32 unit_count, UINT32 unit_size, T_USER_PROTECT_POLICY multi_user_protect);
63
64SINT32 ringQueue_Init(T_Ring_Queue *queue, UINT8 *unit_buffer,
65 UINT32 unit_count, UINT32 unit_size, T_USER_PROTECT_POLICY protect_policy);
66
67SINT32 ringQueue_Enqueue(T_Ring_Queue *queue, VOID *unit);
68
69SINT32 ringQueue_Dequeue(T_Ring_Queue *queue, VOID *unit);
70
71SINT32 ringQueue_Empty(T_Ring_Queue *queue);
72
73SINT32 ringQueue_Full(T_Ring_Queue *queue);
74
75VOID ringQueue_Fush(T_Ring_Queue *queue);
76
77VOID ringQueue_Destroy(T_Ring_Queue *queue);
78
79
80#endif/*_RING_QUEUE_H*/
81