| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- /*
- ** Id: //Department/DaVinci/BRANCHES/MT6620_WIFI_DRIVER_V2_3/include/queue.h#1
- */
- /*! \file queue.h
- \brief Definition for singly queue operations.
- In this file we define the singly queue data structure and its
- queue operation MACROs.
- */
- /*
- ** Log: queue.h
- *
- * 07 16 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration.
- * bugfix for SCN migration
- * 1) modify QUEUE_CONCATENATE_QUEUES() so it could be used to concatence with an empty queue
- * 2) before AIS issues scan request, network(BSS) needs to be activated first
- * 3) only invoke COPY_SSID when using specified SSID for scan
- *
- * 07 08 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
- *
- * 06 06 2010 kevin.huang
- * [WPD00003832][MT6620 5931] Create driver base
- * [MT6620 5931] Create driver base
- *
- * 04 20 2010 cp.wu
- * [WPD00001943]Create WiFi test driver framework on WinXP
- * .
- ** \main\maintrunk.MT6620WiFiDriver_Prj\2 2009-03-10 20:11:46 GMT mtk01426
- ** Init for develop
- **
- */
- #ifndef _QUEUE_H
- #define _QUEUE_H
- /*******************************************************************************
- * C O M P I L E R F L A G S
- ********************************************************************************
- */
- /*******************************************************************************
- * E X T E R N A L R E F E R E N C E S
- ********************************************************************************
- */
- #include "gl_typedef.h"
- /*******************************************************************************
- * C O N S T A N T S
- ********************************************************************************
- */
- /*******************************************************************************
- * D A T A T Y P E S
- ********************************************************************************
- */
- /* Singly Queue Structures - Entry Part */
- typedef struct _QUE_ENTRY_T {
- struct _QUE_ENTRY_T *prNext;
- struct _QUE_ENTRY_T *prPrev; /* For Rx buffer reordering used only */
- } QUE_ENTRY_T, *P_QUE_ENTRY_T;
- /* Singly Queue Structures - Queue Part */
- typedef struct _QUE_T {
- P_QUE_ENTRY_T prHead;
- P_QUE_ENTRY_T prTail;
- UINT_32 u4NumElem;
- } QUE_T, *P_QUE_T;
- /*******************************************************************************
- * P U B L I C D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * P R I V A T E D A T A
- ********************************************************************************
- */
- /*******************************************************************************
- * M A C R O S
- ********************************************************************************
- */
- /*
- * To resolve compiler warning of address check -Waddress
- * Redefine a ASSERT dedicate for queue operation
- */
- #if DBG
- #define QUE_ASSERT ASSERT
- #else
- #define QUE_ASSERT(_exp)
- #endif
- #define QUEUE_INITIALIZE(prQueue) \
- { \
- (prQueue)->prHead = (P_QUE_ENTRY_T)NULL; \
- (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \
- (prQueue)->u4NumElem = 0; \
- }
- #define QUEUE_IS_EMPTY(prQueue) (((P_QUE_T)(prQueue))->prHead == (P_QUE_ENTRY_T)NULL)
- #define QUEUE_IS_NOT_EMPTY(prQueue) ((prQueue)->u4NumElem > 0)
- #define QUEUE_GET_HEAD(prQueue) ((prQueue)->prHead)
- #define QUEUE_GET_TAIL(prQueue) ((prQueue)->prTail)
- #define QUEUE_GET_NEXT_ENTRY(prQueueEntry) ((prQueueEntry)->prNext)
- #define QUEUE_INSERT_HEAD(prQueue, prQueueEntry) \
- { \
- QUE_ASSERT(prQueue); \
- QUE_ASSERT(prQueueEntry); \
- (prQueueEntry)->prNext = (prQueue)->prHead; \
- (prQueue)->prHead = (prQueueEntry); \
- if ((prQueue)->prTail == (P_QUE_ENTRY_T)NULL) { \
- (prQueue)->prTail = (prQueueEntry); \
- } \
- ((prQueue)->u4NumElem)++; \
- }
- #define QUEUE_INSERT_TAIL(prQueue, prQueueEntry) \
- { \
- QUE_ASSERT(prQueue); \
- QUE_ASSERT(prQueueEntry); \
- (prQueueEntry)->prNext = (P_QUE_ENTRY_T)NULL; \
- if ((prQueue)->prTail) { \
- ((prQueue)->prTail)->prNext = (prQueueEntry); \
- } else { \
- (prQueue)->prHead = (prQueueEntry); \
- } \
- (prQueue)->prTail = (prQueueEntry); \
- ((prQueue)->u4NumElem)++; \
- }
- /* NOTE: We assume the queue entry located at the beginning of "prQueueEntry Type",
- * so that we can cast the queue entry to other data type without doubts.
- * And this macro also decrease the total entry count at the same time.
- */
- #define QUEUE_REMOVE_HEAD(prQueue, prQueueEntry, _P_TYPE) \
- { \
- QUE_ASSERT(prQueue); \
- prQueueEntry = (_P_TYPE)((prQueue)->prHead); \
- if (prQueueEntry) { \
- (prQueue)->prHead = ((P_QUE_ENTRY_T)(prQueueEntry))->prNext; \
- if ((prQueue)->prHead == (P_QUE_ENTRY_T)NULL) { \
- (prQueue)->prTail = (P_QUE_ENTRY_T)NULL; \
- } \
- ((P_QUE_ENTRY_T)(prQueueEntry))->prNext = (P_QUE_ENTRY_T)NULL; \
- ((prQueue)->u4NumElem)--; \
- } \
- }
- #define QUEUE_MOVE_ALL(prDestQueue, prSrcQueue) \
- { \
- QUE_ASSERT(prDestQueue); \
- QUE_ASSERT(prSrcQueue); \
- *(P_QUE_T)prDestQueue = *(P_QUE_T)prSrcQueue; \
- QUEUE_INITIALIZE(prSrcQueue); \
- }
- #define QUEUE_CONCATENATE_QUEUES(prDestQueue, prSrcQueue) \
- { \
- QUE_ASSERT(prDestQueue); \
- QUE_ASSERT(prSrcQueue); \
- if (prSrcQueue->u4NumElem > 0) { \
- if ((prDestQueue)->prTail) { \
- ((prDestQueue)->prTail)->prNext = (prSrcQueue)->prHead; \
- } else { \
- (prDestQueue)->prHead = (prSrcQueue)->prHead; \
- } \
- (prDestQueue)->prTail = (prSrcQueue)->prTail; \
- ((prDestQueue)->u4NumElem) += ((prSrcQueue)->u4NumElem); \
- QUEUE_INITIALIZE(prSrcQueue); \
- } \
- }
- /*******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- ********************************************************************************
- */
- /*******************************************************************************
- * F U N C T I O N S
- ********************************************************************************
- */
- #endif /* _QUEUE_H */
|