yuezonghe | 824eb0c | 2024-06-27 02:32:26 -0700 | [diff] [blame^] | 1 | /*******************************************************************************
|
| 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 | ****************************************************************************/
|
| 33 | typedef enum _T_USER_PROTECT_POLICY {
|
| 34 | QUEUE_PROTECT_RAW = 0,
|
| 35 | QUEUE_PROTECT_MUTEX,
|
| 36 | QUEUE_PROTECT_IRQ,
|
| 37 | }T_USER_PROTECT_POLICY;
|
| 38 |
|
| 39 | typedef 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 | ****************************************************************************/
|
| 62 | T_Ring_Queue *ringQueue_Create(UINT32 unit_count, UINT32 unit_size, T_USER_PROTECT_POLICY multi_user_protect);
|
| 63 |
|
| 64 | SINT32 ringQueue_Init(T_Ring_Queue *queue, UINT8 *unit_buffer,
|
| 65 | UINT32 unit_count, UINT32 unit_size, T_USER_PROTECT_POLICY protect_policy);
|
| 66 |
|
| 67 | SINT32 ringQueue_Enqueue(T_Ring_Queue *queue, VOID *unit);
|
| 68 |
|
| 69 | SINT32 ringQueue_Dequeue(T_Ring_Queue *queue, VOID *unit);
|
| 70 |
|
| 71 | SINT32 ringQueue_Empty(T_Ring_Queue *queue);
|
| 72 |
|
| 73 | SINT32 ringQueue_Full(T_Ring_Queue *queue);
|
| 74 |
|
| 75 | VOID ringQueue_Fush(T_Ring_Queue *queue);
|
| 76 |
|
| 77 | VOID ringQueue_Destroy(T_Ring_Queue *queue);
|
| 78 |
|
| 79 |
|
| 80 | #endif/*_RING_QUEUE_H*/
|
| 81 |
|