utils/queue.c
author Brendan Donegan <brendand@symbian.org>
Thu, 22 Jul 2010 16:32:19 +0100
changeset 3 904d75accdc0
parent 0 10c42ec6c05f
permissions -rw-r--r--
Added package_definition and removed abld.bat files
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     1
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     2
 * queue.c
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     3
 *
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     4
 * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     5
 * All rights reserved.      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     6
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     7
 * This program and the accompanying materials are made available under the 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     8
 * terms of the Eclipse Public License v1.0 or BSD License which accompanies
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
     9
 * this distribution. The Eclipse Public License is available at
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    10
 * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below.                                   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    11
 *                                                                       
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    12
 * Redistribution and use in source and binary forms, with or without    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    13
 * modification, are permitted provided that the following conditions    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    14
 * are met:                                                              
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    15
 *                                                                       
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    16
 *  * Redistributions of source code must retain the above copyright     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    17
 *    notice, this list of conditions and the following disclaimer.      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    18
 *  * Redistributions in binary form must reproduce the above copyright  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    19
 *    notice, this list of conditions and the following disclaimer in    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    20
 *    the documentation and/or other materials provided with the         
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    21
 *    distribution.                                                      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    22
 *  * Neither the name Texas Instruments nor the names of its            
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    23
 *    contributors may be used to endorse or promote products derived    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    24
 *    from this software without specific prior written permission.      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    25
 *                                                                       
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    26
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    27
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    28
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    29
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    30
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    31
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    32
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    33
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    34
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    35
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    36
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    37
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    38
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    39
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    40
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    41
/** \file   queue.c 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    42
 *  \brief  This module provides generic queueing services, including enqueue, dequeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    43
 *            and requeue of any object that contains TQueNodeHdr in its structure.                                  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    44
 *
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    45
 *  \see    queue.h
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    46
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    47
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    48
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    49
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    50
#define __FILE_ID__  FILE_ID_130
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    51
#include "report.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    52
#include "queue.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    53
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    54
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    55
/* Queue structure */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    56
typedef struct 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    57
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    58
    TQueNodeHdr tHead;          /* The queue first node */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    59
    TI_UINT32   uCount;         /* Current number of nodes in queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    60
    TI_UINT32   uLimit;         /* Upper limit of nodes in queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    61
    TI_UINT32   uMaxCount;      /* Maximum uCount value (for debug) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    62
    TI_UINT32   uOverflow;      /* Number of overflow occurences - couldn't insert node (for debug) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    63
    TI_UINT32   uNodeHeaderOffset; /* Offset of NodeHeader field from the entry of the queued item */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    64
	TI_HANDLE   hOs;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    65
	TI_HANDLE   hReport; 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    66
} TQueue;	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    67
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    68
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    69
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    70
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    71
 *              INTERNAL  FUNCTIONS 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    72
 *        =============================== 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    73
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    74
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    75
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    76
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    77
 *  InsertNode():  Insert new node between pPrev and pNext 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    78
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    79
static INLINE void InsertNode( TQueNodeHdr *pNode, TQueNodeHdr *pPrev, TQueNodeHdr *pNext)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    80
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    81
	pNext->pPrev = pNode;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    82
	pNode->pNext = pNext;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    83
	pNode->pPrev = pPrev;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    84
	pPrev->pNext = pNode;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    85
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    86
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    87
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    88
 *  RemoveNode():  Remove node from between pPrev and pNext 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    89
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    90
static INLINE void RemoveNode( TQueNodeHdr *pPrev, TQueNodeHdr *pNext)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    91
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    92
	pNext->pPrev = pPrev;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    93
	pPrev->pNext = pNext;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    94
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    95
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    96
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    97
 *  AddToHead():  Add node to queue head (last in queue) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    98
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    99
static INLINE void AddToHead( TQueNodeHdr *pNode, TQueNodeHdr *pListHead)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   100
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   101
	InsertNode (pNode, pListHead, pListHead->pNext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   102
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   103
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   104
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   105
 *  AddToTail():  Add node to queue tail (first in queue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   106
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   107
static INLINE void AddToTail( TQueNodeHdr *pNode, TQueNodeHdr *pListHead)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   108
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   109
	InsertNode( pNode, pListHead->pPrev, pListHead );
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   110
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   111
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   112
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   113
 *  DelFromTail():  Delete node from queue tail (first in queue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   114
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   115
static INLINE void DelFromTail (TQueNodeHdr *pNode)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   116
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   117
	RemoveNode (pNode->pPrev, pNode->pNext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   118
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   119
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   120
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   121
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   122
/*
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   123
 *              EXTERNAL  FUNCTIONS 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   124
 *        =============================== 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   125
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   126
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   127
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   128
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   129
 * \fn     que_Create 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   130
 * \brief  Create a queue. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   131
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   132
 * Allocate and init a queue object.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   133
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   134
 * \note    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   135
 * \param  hOs               - Handle to Os Abstraction Layer
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   136
 * \param  hReport           - Handle to report module
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   137
 * \param  uLimit            - Maximum items to store in queue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   138
 * \param  uNodeHeaderOffset - Offset of NodeHeader field from the entry of the queued item.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   139
 * \return Handle to the allocated queue 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   140
 * \sa     que_Destroy
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   141
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   142
TI_HANDLE que_Create (TI_HANDLE hOs, TI_HANDLE hReport, TI_UINT32 uLimit, TI_UINT32 uNodeHeaderOffset)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   143
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   144
	TQueue *pQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   145
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   146
	/* allocate queue module */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   147
	pQue = os_memoryAlloc (hOs, sizeof(TQueue),MemoryNormal);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   148
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   149
	if (!pQue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   150
	{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   151
		WLAN_OS_REPORT (("Error allocating the Queue Module\n"));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   152
		return NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   153
	}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   154
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   155
    os_memoryZero (hOs, pQue, sizeof(TQueue));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   156
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   157
	/* Intialize the queue header */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   158
    pQue->tHead.pNext = pQue->tHead.pPrev = &pQue->tHead;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   159
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   160
	/* Set the Queue parameters */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   161
    pQue->hOs               = hOs;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   162
    pQue->hReport           = hReport;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   163
	pQue->uLimit            = uLimit;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   164
	pQue->uNodeHeaderOffset = uNodeHeaderOffset;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   165
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   166
	return (TI_HANDLE)pQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   167
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   168
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   169
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   170
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   171
 * \fn     que_Destroy
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   172
 * \brief  Destroy the queue. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   173
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   174
 * Free the queue memory.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   175
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   176
 * \note   The queue's owner should first free the queued items!
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   177
 * \param  hQue - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   178
 * \return TI_OK on success or TI_NOK on failure 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   179
 * \sa     que_Create
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   180
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   181
TI_STATUS que_Destroy (TI_HANDLE hQue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   182
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   183
    TQueue *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   184
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   185
    /* Alert if the queue is unloaded before it was cleared from items */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   186
    if (pQue->uCount)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   187
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   188
        TRACE0(pQue->hReport, REPORT_SEVERITY_ERROR, "que_Destroy() Queue Not Empty!!");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   189
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   190
    /* free Queue object */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   191
	os_memoryFree (pQue->hOs, pQue, sizeof(TQueue));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   192
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   193
    return TI_OK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   194
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   195
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   196
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   197
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   198
 * \fn     que_Init 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   199
 * \brief  Init required handles 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   200
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   201
 * Init required handles.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   202
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   203
 * \note    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   204
 * \param  hQue      - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   205
 * \param  hOs       - Handle to Os Abstraction Layer
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   206
 * \param  hReport   - Handle to report module
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   207
 * \return TI_OK on success or TI_NOK on failure  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   208
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   209
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   210
TI_STATUS que_Init (TI_HANDLE hQue, TI_HANDLE hOs, TI_HANDLE hReport)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   211
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   212
	TQueue *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   213
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   214
    pQue->hOs = hOs;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   215
    pQue->hReport = hReport;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   216
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   217
	return TI_OK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   218
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   219
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   220
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   221
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   222
 * \fn     que_Enqueue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   223
 * \brief  Enqueue an item 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   224
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   225
 * Enqueue an item at the queue's head (last in queue).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   226
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   227
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   228
 * \param  hQue   - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   229
 * \param  hItem  - Handle to queued item
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   230
 * \return TI_OK if item was queued, or TI_NOK if not queued due to overflow
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   231
 * \sa     que_Dequeue, que_Requeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   232
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   233
TI_STATUS que_Enqueue (TI_HANDLE hQue, TI_HANDLE hItem)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   234
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   235
	TQueue      *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   236
    TQueNodeHdr *pQueNodeHdr;  /* the Node-Header in the given item */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   237
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   238
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   239
    /* Check queue limit */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   240
	if(pQue->uCount < pQue->uLimit)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   241
	{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   242
        /* Find NodeHeader in the given item */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   243
        pQueNodeHdr = (TQueNodeHdr *)((TI_UINT8*)hItem + pQue->uNodeHeaderOffset);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   244
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   245
        
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   246
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   247
      
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   248
            /* Check that (pNext == NULL) --> Sanity check that this item was dequeued before */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   249
            if (pQueNodeHdr->pNext)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   250
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   251
                TRACE0(pQue->hReport, REPORT_SEVERITY_ERROR, "que_Enqueue(): Trying to enqueue an item that wasn't dequeued!");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   252
                return TI_NOK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   253
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   254
            
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   255
        /* Enqueue item and increment items counter */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   256
		AddToHead (pQueNodeHdr, &pQue->tHead);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   257
		pQue->uCount++;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   258
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   259
        #ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   260
		    if (pQue->uCount > pQue->uMaxCount)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   261
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   262
                pQue->uMaxCount = pQue->uCount;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   263
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   264
            TRACE0(pQue->hReport, REPORT_SEVERITY_INFORMATION , "que_Enqueue(): Enqueued Successfully\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   265
        #endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   266
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   267
        return TI_OK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   268
	}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   269
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   270
	/* 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   271
	 *  Queue is overflowed, return TI_NOK.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   272
	 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   273
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   274
	pQue->uOverflow++;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   275
TRACE0(pQue->hReport, REPORT_SEVERITY_WARNING , "que_Enqueue(): Queue Overflow\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   276
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   277
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   278
	return TI_NOK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   279
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   280
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   281
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   282
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   283
 * \fn     que_Dequeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   284
 * \brief  Dequeue an item 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   285
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   286
 * Dequeue an item from the queue's tail (first in queue).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   287
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   288
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   289
 * \param  hQue - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   290
 * \return pointer to dequeued item or NULL if queue is empty
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   291
 * \sa     que_Enqueue, que_Requeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   292
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   293
TI_HANDLE que_Dequeue (TI_HANDLE hQue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   294
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   295
    TQueue   *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   296
	TI_HANDLE hItem;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   297
 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   298
    if (pQue->uCount)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   299
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   300
        /* Queue is not empty, take packet from the queue tail */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   301
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   302
        /* find pointer to the node entry */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   303
         hItem = (TI_HANDLE)((TI_UINT8*)pQue->tHead.pPrev - pQue->uNodeHeaderOffset); 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   304
        
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   305
         DelFromTail (pQue->tHead.pPrev);    /* remove node from the queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   306
         pQue->uCount--;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   307
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   308
         #ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   309
            /* Clear the pNext so we can do a sanity check when enqueuing this structre in the future */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   310
            ((TQueNodeHdr *)((TI_UINT8*)hItem + pQue->uNodeHeaderOffset))->pNext = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   311
         #endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   312
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   313
         return (hItem);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   314
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   315
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   316
	/* Queue is empty */    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   317
    TRACE0(pQue->hReport, REPORT_SEVERITY_INFORMATION , "que_Dequeue(): Queue is empty\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   318
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   319
    return NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   320
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   321
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   322
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   323
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   324
 * \fn     que_Requeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   325
 * \brief  Requeue an item 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   326
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   327
 * Requeue an item at the queue's tail (first in queue).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   328
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   329
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   330
 * \param  hQue   - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   331
 * \param  hItem  - Handle to queued item
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   332
 * \return TI_OK if item was queued, or TI_NOK if not queued due to overflow
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   333
 * \sa     que_Enqueue, que_Dequeue
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   334
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   335
TI_STATUS que_Requeue (TI_HANDLE hQue, TI_HANDLE hItem)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   336
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   337
    TQueue      *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   338
    TQueNodeHdr *pQueNodeHdr;  /* the NodeHeader in the given item */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   339
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   340
    /* 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   341
	 *  If queue's limits not exceeded add the packet to queue's tail and return TI_OK 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   342
	 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   343
    if (pQue->uCount < pQue->uLimit)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   344
	{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   345
        /* Find NodeHeader in the given item */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   346
        pQueNodeHdr = (TQueNodeHdr *)((TI_UINT8*)hItem + pQue->uNodeHeaderOffset);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   347
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   348
        /* Enqueue item and increment items counter */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   349
		AddToTail (pQueNodeHdr, &pQue->tHead);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   350
		pQue->uCount++;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   351
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   352
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   353
		if (pQue->uCount > pQue->uMaxCount)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   354
			pQue->uMaxCount = pQue->uCount;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   355
TRACE0(pQue->hReport, REPORT_SEVERITY_INFORMATION , "que_Requeue(): Requeued successfully\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   356
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   357
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   358
		return TI_OK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   359
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   360
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   361
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   362
	/* 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   363
	 *  Queue is overflowed, return TI_NOK.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   364
	 *  Note: This is not expected in the current design, since Tx packet may be requeued
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   365
	 *          only right after it was dequeued in the same context so the queue can't be full.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   366
	 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   367
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   368
    pQue->uOverflow++;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   369
TRACE0(pQue->hReport, REPORT_SEVERITY_ERROR , "que_Requeue(): Queue Overflow\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   370
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   371
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   372
    return TI_NOK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   373
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   374
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   375
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   376
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   377
 * \fn     que_Size
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   378
 * \brief  Return queue size 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   379
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   380
 * Return number of items in queue.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   381
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   382
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   383
 * \param  hQue - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   384
 * \return TI_UINT32 - the items count
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   385
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   386
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   387
TI_UINT32 que_Size (TI_HANDLE hQue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   388
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   389
    TQueue *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   390
 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   391
    return (pQue->uCount);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   392
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   393
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   394
	
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   395
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   396
 * \fn     que_Print
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   397
 * \brief  Print queue status
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   398
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   399
 * Print the queue's parameters (not the content).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   400
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   401
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   402
 * \param  hQue - The queue object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   403
 * \return void
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   404
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   405
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   406
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   407
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   408
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   409
void que_Print(TI_HANDLE hQue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   410
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   411
	TQueue *pQue = (TQueue *)hQue;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   412
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   413
    WLAN_OS_REPORT(("que_Print: Count=%u MaxCount=%u Limit=%u Overflow=%u NodeHeaderOffset=%u Next=0x%x Prev=0x%x\n",
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   414
                    pQue->uCount, pQue->uMaxCount, pQue->uLimit, pQue->uOverflow, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   415
                    pQue->uNodeHeaderOffset, pQue->tHead.pNext, pQue->tHead.pPrev));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   416
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   417
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   418
#endif /* TI_DBG */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   419
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   420
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   421