[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/interface/service/stacklib/lcd_ip_cqueue.h b/mcu/interface/service/stacklib/lcd_ip_cqueue.h
new file mode 100644
index 0000000..9056c6d
--- /dev/null
+++ b/mcu/interface/service/stacklib/lcd_ip_cqueue.h
@@ -0,0 +1,738 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*****************************************************************************
+ *
+ * Filename:
+ * ---------
+ * lcd_ip_cqueue.h
+ *
+ * Project:
+ * --------
+ * Maui_Software
+ *
+ * Description:
+ * ------------
+ * This file defines Generic circular queue data structure definition
+ *
+ * Author:
+ * -------
+ * -------
+ *
+ *============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *============================================================================
+ ****************************************************************************/
+/*******************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2002
+*
+*******************************************************************************/
+
+/*********************************************************************
+ (C) _____ (year of first publication) Sasken communication
+ Technologies Limited, All rights reserved.
+* This file provides a template for .c files. This space
+* should be used to describe the file contents
+* Component-specific prefix : xxxx
+*********************************************************************/
+
+#ifndef _LCD_IP_CQUEUE_H
+#define _LCD_IP_CQUEUE_H
+
+/*************************************************************************
+ * Include the common header file
+ *************************************************************************/
+#if defined(__MTK_TARGET__)
+#include "kal_itc.h"
+#else
+#include "kal_hrt_api.h"
+#endif
+
+/*************************************************************************
+ * Macros With Parameters
+ *************************************************************************/
+#if defined(__MTK_TARGET__)
+#define LCD_IP_CQUEUE_MT_LOCK(_lock) \
+ unsigned int irq_status = 0, mt_status = 0, prio = 0; \
+ KAL_ITC_LOCK_TAKE_DI_DMT_PRIO(_lock, irq_status, mt_status, prio)
+
+#define LCD_IP_CQUEUE_MT_UNLOCK(_lock) \
+ KAL_ITC_LOCK_GIVE_EI_EMT_PRIO((_lock), irq_status, mt_status, prio)
+#else
+#define LCD_IP_CQUEUE_MT_LOCK(_lock) \
+ kal_hrt_take_itc_lock(KAL_ITC_ISR_Q, KAL_INFINITE_WAIT)
+
+#define LCD_IP_CQUEUE_MT_UNLOCK(_lock) \
+ kal_hrt_give_itc_lock(KAL_ITC_ISR_Q)
+#endif
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _type is the type of item to be put in queue.
+* _length is the size of the queue.
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE(_type, _length) \
+ struct { \
+ unsigned int head; \
+ unsigned int tail; \
+ unsigned int multiple; \
+ unsigned int max_used_item; \
+ unsigned int total_item; \
+ kal_bool is_full; \
+ _type queue[_length]; \
+ }
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INIT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INIT(_q) \
+do{ \
+ (_q).head = (_q).tail = 0; \
+ (_q).multiple = 1; \
+ (_q).max_used_item = 0; \
+ (_q).total_item = (sizeof((_q).queue)*(_q).multiple / sizeof((_q).queue[0])); \
+ (_q).is_full = KAL_FALSE; \
+}while(0)
+
+#define LCD_IP_CQUEUE_INIT_N(_q, n) \
+do{ \
+ (_q).head = (_q).tail = 0; \
+ (_q).multiple = n; \
+ (_q).max_used_item = 0; \
+ (_q).total_item = (sizeof((_q).queue)*(_q).multiple / sizeof((_q).queue[0])); \
+ (_q).is_full = KAL_FALSE; \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INSERT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _item is the item to be inserted to the queue
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/* (_q).tail = ((_q).tail + 1) % (sizeof((_q).queue)*(_q).multiple/sizeof((_q).queue[0])); */
+#define LCD_IP_CQUEUE_INSERT(_q, _item) \
+do{ \
+ (_q).queue[(_q).tail] = _item; \
+ (_q).tail++; \
+ if ((_q).tail == (_q).total_item) \
+ (_q).tail = 0; \
+ if ((_q).head == (_q).tail) { (_q).is_full = KAL_TRUE; } \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INSERT_DISCARD
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INSERT_DISCARD(_q) \
+do{ \
+ /* (_q).queue[(_q).tail] = _item; */ \
+ (_q).tail++; \
+ if ((_q).tail == (_q).total_item) \
+ (_q).tail = 0; \
+ if ((_q).head == (_q).tail) { (_q).is_full = KAL_TRUE; } \
+}while(0)
+
+/*************************************************************************
+ * FUNCTION
+ * LCD_IP_CQUEUE_INSERT_HEAD
+ *
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ * _q is the structure variable of the queue
+ * _item is the item to be inserted to the queue
+ *
+ * RETURNS
+ *
+ * GLOBALS AFFECTED
+ *
+ *************************************************************************/
+
+#define LCD_IP_CQUEUE_INSERT_HEAD(_q, _item) \
+do{ \
+ if((_q).head == 0) {(_q).head = (_q).total_item; } \
+ (_q).head--; \
+ (_q).queue[(_q).head] = _item; \
+ if ((_q).head == (_q).tail) { (_q).is_full = KAL_TRUE; } \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_REMOVE
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _item is the variable to which removed item is stored
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/*(_q).head = ((_q).head + 1) % (sizeof((_q).queue)*(_q).multiple/sizeof((_q).queue[0]));*/
+
+#define LCD_IP_CQUEUE_REMOVE(_q, _item) \
+do{ \
+ _item = (_q).queue[(_q).head]; \
+ (_q).head++; \
+ if((_q).head == (_q).total_item) \
+ (_q).head = 0; \
+ if ((_q).is_full == KAL_TRUE) \
+ (_q).is_full = KAL_FALSE; \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_DISCARD
+*
+* DESCRIPTION
+* Just for removing last node from CQUEUE
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+/*(_q).head = ((_q).head + 1) % (sizeof((_q).queue)*(_q).multiple/sizeof((_q).queue[0]));*/
+#define LCD_IP_CQUEUE_DISCARD(_q) \
+do{ \
+ /*_item = (_q).queue[(_q).head];*/ \
+ (_q).head++; \
+ if((_q).head == (_q).total_item) \
+ (_q).head = 0; \
+ if ((_q).is_full == KAL_TRUE) \
+ (_q).is_full = KAL_FALSE; \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_NUM_OF_ITEMS
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _num_of_items is the variable to which the
+* number of items in the queue is assigned
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_NUM_OF_ITEMS(_q,_num_of_items) \
+do{ \
+ if((_q).is_full) \
+ _num_of_items = (_q).total_item; \
+ else if((_q).tail >= (_q).head) \
+ _num_of_items = (_q).tail - (_q).head; \
+ else \
+ _num_of_items = (_q).tail + (_q).total_item - (_q).head; \
+}while(0)
+
+#define LCD_IP_CQUEUE_RETURN_NUM_OF_ITEMS(_q) \
+ ((_q).is_full ? ((_q).total_item) : \
+ ((_q).tail >= (_q).head ? ((_q).tail - (_q).head) : \
+ ((_q).tail + (_q).total_item - (_q).head)))
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INDEX
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _index is the index position of the queue from which queue item to be accessed
+* _item is the variable to which element at index is stored.
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INDEX(_q,_index,_item) \
+do{ \
+ if(((_q).head + _index) > ((_q).total_item - 1)) \
+ { \
+ /*user need to ensure index must be in scope [0,q->size-1], which is the valid-scope*/ \
+ ASSERT(((_q).head + _index - (_q).total_item) <= ((_q).total_item - 1)); \
+ _item = (_q).queue[(_q).head + _index - (_q).total_item]; \
+ } \
+ else \
+ _item = (_q).queue[(_q).head + _index]; \
+}while(0)
+
+
+#define LCD_IP_CQUEUE_UPDATE_MAX(_q, _max) \
+do{ \
+ LCD_IP_CQUEUE_NUM_OF_ITEMS(_q, _max); \
+ if (_max > (_q).max_used_item) \
+ { \
+ (_q).max_used_item = _max; \
+ } \
+ else if (_max < (_q).max_used_item) \
+ { \
+ _max = (_q).max_used_item; \
+ } \
+}while(0)
+
+#define LCD_UP_CQUEUE_UPDATE_MAX(_q, _max) LCD_IP_CQUEUE_UPDATE_MAX(_q, _max)
+
+/* _q is the structure variable of the queue */
+#define LCD_IP_CQUEUE_IS_FULL(_q) ((_q).is_full)
+#define LCD_IP_CQUEUE_IS_EMPTY(_q) (((_q).head == (_q).tail) && !(_q).is_full)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _type is the type of item to be put in queue.
+* _length is the size of the queue.
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+#define LCD_IP_CQUEUE_MT(_type, _length) \
+ struct { \
+ unsigned int head; \
+ unsigned int tail; \
+ unsigned int multiple; \
+ unsigned int max_used_item; \
+ unsigned int total_item; \
+ unsigned int lock_flag; \
+ kal_bool is_full; \
+ _type queue[_length]; \
+ }
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INIT_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INIT_N_MT(_q, n) \
+ do{ \
+ (_q).head = (_q).tail = 0; \
+ (_q).multiple = n; \
+ (_q).max_used_item = 0; \
+ (_q).total_item = (sizeof((_q).queue)*(_q).multiple / sizeof((_q).queue[0])); \
+ (_q).lock_flag = 0; \
+ (_q).is_full = KAL_FALSE; \
+ }while(0)
+
+#define LCD_IP_CQUEUE_INIT_MT(_q) LCD_IP_CQUEUE_INIT_N_MT(_q, 1)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INSERT_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _item is the item to be inserted to the queue
+* _is_full is the queue full flag before insert item
+*
+* RETURNS
+* _is_full
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INSERT_MT(_q, _item, _is_full) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (!LCD_IP_CQUEUE_IS_FULL(_q)) { \
+ _is_full = KAL_FALSE; \
+ LCD_IP_CQUEUE_INSERT(_q, _item); \
+ } else { \
+ _is_full = KAL_TRUE; \
+ } \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INSERT_DISCARD_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _is_full is the queue full flag before insert item
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INSERT_DISCARD_MT(_q, _is_full) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (!LCD_IP_CQUEUE_IS_FULL(_q)) { \
+ _is_full = KAL_FALSE; \
+ LCD_IP_CQUEUE_INSERT_DISCARD(_q); \
+ } else { \
+ _is_full = KAL_TRUE; \
+ } \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+
+/*************************************************************************
+ * FUNCTION
+ * LCD_IP_CQUEUE_INSERT_HEAD_MT
+ *
+ * DESCRIPTION
+ *
+ * PARAMETERS
+ * _q is the structure variable of the queue
+ * _item is the item to be inserted to the queue
+ * _is_full is the queue full flag before insert item
+ *
+ * RETURNS
+ * _is_full
+ *
+ * GLOBALS AFFECTED
+ *
+ *************************************************************************/
+
+#define LCD_IP_CQUEUE_INSERT_HEAD_MT(_q, _item, _is_full) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (!LCD_IP_CQUEUE_IS_FULL(_q)) { \
+ _is_full = KAL_FALSE; \
+ LCD_IP_CQUEUE_INSERT_HEAD(_q, _item); \
+ } else { \
+ _is_full = KAL_TRUE; \
+ } \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_REMOVE_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _item is the variable to which removed item is stored
+* _is_empty is the queue empty flag before remove item
+*
+* RETURNS
+* _is_empty
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_REMOVE_MT(_q, _item, _is_empty) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (!LCD_IP_CQUEUE_IS_EMPTY(_q)) { \
+ _is_empty = KAL_FALSE; \
+ LCD_IP_CQUEUE_REMOVE(_q, _item); \
+ } else { \
+ _is_empty = KAL_TRUE; \
+ } \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_DISCARD_MT
+*
+* DESCRIPTION
+* Just for removing last node from CQUEUE
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _is_empty is the queue empty flag before remove item
+*
+* RETURNS
+* _is_empty
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_DISCARD_MT(_q, _is_empty) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (!LCD_IP_CQUEUE_IS_EMPTY(_q)) { \
+ _is_empty = KAL_FALSE; \
+ LCD_IP_CQUEUE_DISCARD(_q); \
+ } else { \
+ _is_empty = KAL_TRUE; \
+ } \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_NUM_OF_ITEMS_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _num_of_items is the variable to which the
+* number of items in the queue is assigned
+*
+* RETURNS
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_NUM_OF_ITEMS_MT(_q,_num_of_items) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if((_q).is_full) \
+ _num_of_items = (_q).total_item; \
+ else if((_q).tail >= (_q).head) \
+ _num_of_items = (_q).tail - (_q).head; \
+ else \
+ _num_of_items = (_q).tail + (_q).total_item - (_q).head; \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+/*************************************************************************
+* FUNCTION
+* LCD_IP_CQUEUE_INDEX_MT
+*
+* DESCRIPTION
+*
+* PARAMETERS
+* _q is the structure variable of the queue
+* _index is the index position of the queue from which queue item to be accessed
+* _item is the variable to which element at index is stored.
+* _is_full is the queue full flag before insert item
+* _is_empty is the queue empty flag before remove item
+*
+* RETURNS
+* _is_full, _is_empty
+*
+* GLOBALS AFFECTED
+*
+*************************************************************************/
+
+#define LCD_IP_CQUEUE_INDEX_MT(_q,_index,_item, _is_full, _is_empty) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ if (LCD_IP_CQUEUE_IS_FULL(_q)) \
+ _is_full = KAL_TRUE; \
+ else \
+ _is_full = KAL_FALSE; \
+ if (LCD_IP_CQUEUE_IS_EMPTY(_q) || (_index >= LCD_IP_CQUEUE_RETURN_NUM_OF_ITEMS(_q))) \
+ _is_empty = KAL_TRUE; \
+ else \
+ _is_empty = KAL_FALSE; \
+ LCD_IP_CQUEUE_INDEX(_q,_index,_item); \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+#define LCD_IP_CQUEUE_IS_FULL_MT(_q, _is_full) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ _is_full = LCD_IP_CQUEUE_IS_FULL(_q); \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+#define LCD_IP_CQUEUE_IS_EMPTY_MT(_q, _is_empty) \
+do{ \
+ LCD_IP_CQUEUE_MT_LOCK((_q).lock_flag); \
+ _is_empty = LCD_IP_CQUEUE_IS_EMPTY(_q); \
+ LCD_IP_CQUEUE_MT_UNLOCK((_q).lock_flag); \
+}while(0)
+
+
+#endif /* _LCD_IP_CQUEUE_H */