Txn/TxnQueue.c
author shahar_levi@ti.com
Tue, 29 Jun 2010 12:34:26 +0100
changeset 0 10c42ec6c05f
permissions -rw-r--r--
version WiLink_Driver_6.1.1.0.8
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
 * TxnQueue.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
/** \file   TxnQueue.c 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    41
 *  \brief  The transaction-queue module. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    42
 *
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    43
 * The Transaction Queue encapsulates the bus access from a functional driver (WLAN, BT).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    44
 * This TI proprietary module presents the same interface and same behavior for different 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    45
 *     bus configuration: SDIO (multi or single function) or SPI and for different modes 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    46
 *     of operation: Synchronous, a-synchronous or combination of both. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    47
 * It will also be used over the RS232 interface (using wUART protocol) which is applicable 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    48
 *     for RS applications (on PC).
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
 * The TxnQ module provides the following requirements:
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    51
 *     Inter process protection on queue's internal database and synchronization between 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    52
 *         functional drivers that share the bus.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    53
 *     Support multiple queues per function, handled by priority. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    54
 *     Support the TTxnStruct API (as the Bus Driver) with the ability to manage commands 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    55
 *         queuing of multiple functions on top of the Bus Driver. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    56
 *     The TxnQ (as well as the layers above it) is agnostic to the bus driver used beneath it 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    57
 *         (SDIO, WSPI or wUART), since all bus drivers introduce the same API and hide bus details. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    58
 *     The TxnQ has no OS dependencies. It supports access from multiple OS threads.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    59
 * Note: It is assumed that any transaction forwarded to the TxnQ has enough resources in HW. 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    60
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    61
 *  \see    TxnQueue.h
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    62
 */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    63
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    64
#define __FILE_ID__  FILE_ID_123
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    65
#include "tidef.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    66
#include "report.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    67
#include "context.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    68
#include "osApi.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    69
#include "TxnDefs.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    70
#include "BusDrv.h"
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    71
#include "TxnQueue.h"
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
 * Defines
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    77
 ************************************************************************/
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    78
#define MAX_FUNCTIONS       4   /* Maximum 4 functional drivers (including Func 0 which is for bus control) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    79
#define MAX_PRIORITY        2   /* Maximum 2 prioritys per functional driver */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    80
#define TXN_QUE_SIZE        QUE_UNLIMITED_SIZE
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    81
#define TXN_DONE_QUE_SIZE   QUE_UNLIMITED_SIZE
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    82
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    83
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    84
/************************************************************************
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    85
 * Types
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
/* Functional driver's SM States */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    89
typedef enum
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    90
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    91
    FUNC_STATE_NONE,              /* Function not registered */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    92
	FUNC_STATE_STOPPED,           /* Queues are stopped */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    93
	FUNC_STATE_RUNNING,           /* Queues are running */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    94
	FUNC_STATE_RESTART            /* Wait for current Txn to finish before restarting queues */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    95
} EFuncState;
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
/* The functional drivers registered to TxnQ */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    98
typedef struct 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
    99
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   100
    EFuncState      eState;             /* Function crrent state */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   101
    TI_UINT32       uNumPrios;          /* Number of queues (priorities) for this function */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   102
	TTxnQueueDoneCb fTxnQueueDoneCb;    /* The CB called by the TxnQueue upon full transaction completion. */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   103
	TI_HANDLE       hCbHandle;          /* The callback handle */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   104
    TTxnStruct *    pSingleStep;        /* A single step transaction waiting to be sent */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   105
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   106
} TFuncInfo;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   107
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
/* The TxnQueue module Object */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   110
typedef struct _TTxnQObj
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
    TI_HANDLE	    hOs;		   	 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   113
    TI_HANDLE	    hReport;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   114
    TI_HANDLE	    hContext;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   115
	TI_HANDLE	    hBusDrv;
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
    TFuncInfo       aFuncInfo[MAX_FUNCTIONS];  /* Registered functional drivers - see above */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   118
    TI_HANDLE       aTxnQueues[MAX_FUNCTIONS][MAX_PRIORITY];  /* Handle of the Transactions-Queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   119
    TI_HANDLE       hTxnDoneQueue;      /* Queue for completed transactions not reported to yet to the upper layer */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   120
    TTxnStruct *    pCurrTxn;           /* The transaction currently processed in the bus driver (NULL if none) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   121
    TI_UINT32       uMinFuncId;         /* The minimal function ID actually registered (through txnQ_Open) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   122
    TI_UINT32       uMaxFuncId;         /* The maximal function ID actually registered (through txnQ_Open) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   123
    TI_BOOL         bSchedulerBusy;     /* If set, the scheduler is currently running so it shouldn't be reentered */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   124
    TI_BOOL         bSchedulerPend;     /* If set, a call to the scheduler was postponed because it was busy */
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
    /* Environment dependent: TRUE if needed and allowed to protect TxnDone in critical section */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   127
    TTxnDoneCb      fConnectCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   128
    TI_HANDLE       hConnectCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   129
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   130
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   131
    TI_HANDLE       pAggregQueue;       /* While Tx aggregation in progress, saves its queue pointer to ensure continuity */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   132
#endif
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
} TTxnQObj;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   135
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   136
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   137
/************************************************************************
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   138
 * Internal functions prototypes
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   139
 ************************************************************************/
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   140
static void         txnQ_TxnDoneCb    (TI_HANDLE hTxnQ, void *hTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   141
static ETxnStatus   txnQ_RunScheduler (TTxnQObj *pTxnQ, TTxnStruct *pInputTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   142
static ETxnStatus   txnQ_Scheduler    (TTxnQObj *pTxnQ, TTxnStruct *pInputTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   143
static TTxnStruct  *txnQ_SelectTxn    (TTxnQObj *pTxnQ);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   144
static void         txnQ_ConnectCB    (TI_HANDLE hTxnQ, void *hTxn);
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   147
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
 *
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   150
 *   Module functions implementation
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   151
 *
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   152
 ************************************************************************/
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
TI_HANDLE txnQ_Create (TI_HANDLE hOs)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   155
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   156
    TI_HANDLE  hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   157
    TTxnQObj  *pTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   158
    TI_UINT32  i;
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
    hTxnQ = os_memoryAlloc(hOs, sizeof(TTxnQObj),MemoryNormal);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   161
    if (hTxnQ == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   162
        return NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   163
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   164
    pTxnQ = (TTxnQObj *)hTxnQ;
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
    os_memoryZero(hOs, hTxnQ, sizeof(TTxnQObj));
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
    pTxnQ->hOs             = hOs;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   169
    pTxnQ->pCurrTxn        = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   170
    pTxnQ->uMinFuncId      = MAX_FUNCTIONS; /* Start at maximum and save minimal value in txnQ_Open */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   171
    pTxnQ->uMaxFuncId      = 0;             /* Start at minimum and save maximal value in txnQ_Open */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   172
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   173
    pTxnQ->pAggregQueue    = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   174
#endif
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
    for (i = 0; i < MAX_FUNCTIONS; i++)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   177
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   178
        pTxnQ->aFuncInfo[i].eState          = FUNC_STATE_NONE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   179
        pTxnQ->aFuncInfo[i].uNumPrios       = 0;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   180
        pTxnQ->aFuncInfo[i].pSingleStep     = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   181
        pTxnQ->aFuncInfo[i].fTxnQueueDoneCb = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   182
        pTxnQ->aFuncInfo[i].hCbHandle       = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   183
    }
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
    /* Create the Bus-Driver module */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   186
    pTxnQ->hBusDrv = busDrv_Create (hOs);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   187
    if (pTxnQ->hBusDrv == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   188
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   189
        WLAN_OS_REPORT(("%s: Error - failed to create BusDrv\n", __FUNCTION__));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   190
        txnQ_Destroy (hTxnQ);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   191
        return NULL;
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   194
    return pTxnQ;
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
TI_STATUS txnQ_Destroy (TI_HANDLE hTxnQ)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   198
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   199
    TTxnQObj *pTxnQ = (TTxnQObj*)hTxnQ;
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
    if (pTxnQ)
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
        if (pTxnQ->hBusDrv) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   204
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   205
            busDrv_Destroy (pTxnQ->hBusDrv);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   206
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   207
        if (pTxnQ->hTxnDoneQueue) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   208
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   209
            que_Destroy (pTxnQ->hTxnDoneQueue);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   210
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   211
        os_memoryFree (pTxnQ->hOs, pTxnQ, sizeof(TTxnQObj));     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   212
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   213
    return TI_OK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   214
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   215
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   216
void txnQ_Init (TI_HANDLE hTxnQ, TI_HANDLE hOs, TI_HANDLE hReport, TI_HANDLE hContext)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   217
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   218
    TTxnQObj  *pTxnQ = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   219
    TI_UINT32  uNodeHeaderOffset;
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
    pTxnQ->hOs             = hOs;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   222
    pTxnQ->hReport         = hReport;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   223
    pTxnQ->hContext        = hContext;
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
    /* Create the TxnDone queue. */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   226
    uNodeHeaderOffset = TI_FIELD_OFFSET(TTxnStruct, tTxnQNode); 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   227
    pTxnQ->hTxnDoneQueue = que_Create (pTxnQ->hOs, pTxnQ->hReport, TXN_DONE_QUE_SIZE, uNodeHeaderOffset);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   228
    if (pTxnQ->hTxnDoneQueue == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   229
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   230
        TRACE0(pTxnQ->hReport, REPORT_SEVERITY_ERROR, ": TxnDone queue creation failed!\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   231
    }
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
    busDrv_Init (pTxnQ->hBusDrv, hReport);
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   236
TI_STATUS txnQ_ConnectBus (TI_HANDLE  hTxnQ, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   237
                           TBusDrvCfg *pBusDrvCfg, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   238
                           TTxnDoneCb fConnectCb, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   239
                           TI_HANDLE  hConnectCb, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   240
                           TI_UINT32  *pRxDmaBufLen,
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   241
                           TI_UINT32  *pTxDmaBufLen)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   242
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   243
    TTxnQObj *pTxnQ = (TTxnQObj*) hTxnQ;
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
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_ConnectBus()\n");
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
    pTxnQ->fConnectCb = fConnectCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   248
    pTxnQ->hConnectCb = hConnectCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   249
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   250
    return busDrv_ConnectBus (pTxnQ->hBusDrv, pBusDrvCfg, txnQ_TxnDoneCb, hTxnQ, txnQ_ConnectCB);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   251
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   252
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   253
TI_STATUS txnQ_DisconnectBus (TI_HANDLE hTxnQ)
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
    TTxnQObj *pTxnQ = (TTxnQObj*) hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   256
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   257
    return busDrv_DisconnectBus (pTxnQ->hBusDrv);
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   260
TI_STATUS txnQ_Open (TI_HANDLE       hTxnQ, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   261
                     TI_UINT32       uFuncId, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   262
                     TI_UINT32       uNumPrios, 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   263
                     TTxnQueueDoneCb fTxnQueueDoneCb,
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   264
                     TI_HANDLE       hCbHandle)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   265
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   266
    TTxnQObj     *pTxnQ = (TTxnQObj*) hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   267
    TI_UINT32     uNodeHeaderOffset;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   268
    TI_UINT32     i;
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
    if (uFuncId >= MAX_FUNCTIONS  ||  uNumPrios > MAX_PRIORITY) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   271
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   272
        TRACE2(pTxnQ->hReport, REPORT_SEVERITY_ERROR, ": Invalid Params!  uFuncId = %d, uNumPrios = %d\n", uFuncId, uNumPrios);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   273
        return TI_NOK;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   274
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   275
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   276
    CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
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
    /* Save functional driver info */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   279
    pTxnQ->aFuncInfo[uFuncId].uNumPrios       = uNumPrios;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   280
    pTxnQ->aFuncInfo[uFuncId].fTxnQueueDoneCb = fTxnQueueDoneCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   281
    pTxnQ->aFuncInfo[uFuncId].hCbHandle       = hCbHandle;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   282
    pTxnQ->aFuncInfo[uFuncId].eState          = FUNC_STATE_STOPPED;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   283
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   284
    /* Create the functional driver's queues. */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   285
    uNodeHeaderOffset = TI_FIELD_OFFSET(TTxnStruct, tTxnQNode); 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   286
    for (i = 0; i < uNumPrios; i++)
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
        pTxnQ->aTxnQueues[uFuncId][i] = que_Create (pTxnQ->hOs, pTxnQ->hReport, TXN_QUE_SIZE, uNodeHeaderOffset);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   289
        if (pTxnQ->aTxnQueues[uFuncId][i] == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   290
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   291
            TRACE0(pTxnQ->hReport, REPORT_SEVERITY_ERROR, ": Queues creation failed!\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   292
            CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   293
            return TI_NOK;
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
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   296
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   297
    /* Update functions actual range (to optimize Txn selection loops - see txnQ_SelectTxn) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   298
    if (uFuncId < pTxnQ->uMinFuncId) 
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
        pTxnQ->uMinFuncId = uFuncId;
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
    if (uFuncId > pTxnQ->uMaxFuncId) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   303
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   304
        pTxnQ->uMaxFuncId = uFuncId;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   305
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   306
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   307
    CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   308
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   309
    TRACE2(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, ": Function %d registered successfully, uNumPrios = %d\n", uFuncId, uNumPrios);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   310
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   311
    return TI_OK;
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   314
void txnQ_Close (TI_HANDLE  hTxnQ, TI_UINT32 uFuncId)
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
    TTxnQObj     *pTxnQ = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   317
    TI_UINT32     i;
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
    CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
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
    /* Destroy the functional driver's queues */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   322
    for (i = 0; i < pTxnQ->aFuncInfo[uFuncId].uNumPrios; i++)
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
        que_Destroy (pTxnQ->aTxnQueues[uFuncId][i]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   325
    }
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
    /* Clear functional driver info */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   328
    pTxnQ->aFuncInfo[uFuncId].uNumPrios       = 0;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   329
    pTxnQ->aFuncInfo[uFuncId].fTxnQueueDoneCb = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   330
    pTxnQ->aFuncInfo[uFuncId].hCbHandle       = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   331
    pTxnQ->aFuncInfo[uFuncId].eState          = FUNC_STATE_NONE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   332
    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   333
    /* Update functions actual range (to optimize Txn selection loops - see txnQ_SelectTxn) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   334
    pTxnQ->uMinFuncId      = MAX_FUNCTIONS; 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   335
    pTxnQ->uMaxFuncId      = 0;             
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   336
    for (i = 0; i < MAX_FUNCTIONS; i++) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   337
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   338
        if (pTxnQ->aFuncInfo[i].eState != FUNC_STATE_NONE) 
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
            if (i < pTxnQ->uMinFuncId) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   341
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   342
                pTxnQ->uMinFuncId = i;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   343
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   344
            if (i > pTxnQ->uMaxFuncId) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   345
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   346
                pTxnQ->uMaxFuncId = i;
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
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   349
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   350
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   351
    CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   352
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   353
    TRACE1(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, ": Function %d Unregistered\n", uFuncId);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   354
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   355
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   356
ETxnStatus txnQ_Restart (TI_HANDLE hTxnQ, TI_UINT32 uFuncId)
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
    TTxnQObj *pTxnQ = (TTxnQObj*) hTxnQ;
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
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Restart()\n");
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
    CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   363
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   364
    /* If a Txn from the calling function is in progress, set state to RESTART return PENDING */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   365
    if (pTxnQ->pCurrTxn) 
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
        if (TXN_PARAM_GET_FUNC_ID(pTxnQ->pCurrTxn) == uFuncId)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   368
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   369
            pTxnQ->aFuncInfo[uFuncId].eState = FUNC_STATE_RESTART;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   370
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   371
            CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   372
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   373
            TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Restart(): pCurrTxn pending\n");
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
            /* Return PENDING to indicate that the restart will be completed later (in TxnDone) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   376
            return TXN_STATUS_PENDING;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   377
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   378
    }
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
    CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
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
    /* Clear the calling function's queues (call function CB with status=RECOVERY) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   383
    txnQ_ClearQueues (hTxnQ, uFuncId);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   384
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   385
    /* Return COMPLETE to indicate that the restart was completed */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   386
    return TXN_STATUS_COMPLETE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   387
}
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
void txnQ_Run (TI_HANDLE hTxnQ, TI_UINT32 uFuncId)
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
    TTxnQObj *pTxnQ = (TTxnQObj*) hTxnQ;
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
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   394
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Run()\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   395
    if (pTxnQ->aFuncInfo[uFuncId].eState != FUNC_STATE_STOPPED) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   396
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   397
        TRACE2(pTxnQ->hReport, REPORT_SEVERITY_WARNING, "txnQ_Run(): Called while func %d state is %d!\n", uFuncId, pTxnQ->aFuncInfo[uFuncId].eState);
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
#endif
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
    /* Enable function's queues */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   402
    pTxnQ->aFuncInfo[uFuncId].eState = FUNC_STATE_RUNNING;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   403
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   404
    /* Send queued transactions as possible */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   405
    txnQ_RunScheduler (pTxnQ, NULL); 
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
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   408
void txnQ_Stop (TI_HANDLE hTxnQ, TI_UINT32 uFuncId)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   409
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   410
    TTxnQObj *pTxnQ = (TTxnQObj*) hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   411
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   412
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   413
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Stop()\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   414
    if (pTxnQ->aFuncInfo[uFuncId].eState != FUNC_STATE_RUNNING) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   415
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   416
        TRACE2(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_Stop(): Called while func %d state is %d!\n", uFuncId, pTxnQ->aFuncInfo[uFuncId].eState);
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
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
    /* Enable function's queues */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   421
    pTxnQ->aFuncInfo[uFuncId].eState = FUNC_STATE_STOPPED;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   422
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   423
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   424
ETxnStatus txnQ_Transact (TI_HANDLE hTxnQ, TTxnStruct *pTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   425
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   426
    TTxnQObj    *pTxnQ   = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   427
    TI_UINT32    uFuncId = TXN_PARAM_GET_FUNC_ID(pTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   428
    ETxnStatus   rc;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   429
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   430
    if (TXN_PARAM_GET_SINGLE_STEP(pTxn)) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   431
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   432
        pTxnQ->aFuncInfo[uFuncId].pSingleStep = pTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   433
        TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Transact(): Single step Txn\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   434
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   435
    else 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   436
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   437
        TI_STATUS eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   438
        TI_HANDLE hQueue = pTxnQ->aTxnQueues[uFuncId][TXN_PARAM_GET_PRIORITY(pTxn)];
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   439
        CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   440
        eStatus = que_Enqueue (hQueue, (TI_HANDLE)pTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   441
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   442
        if (eStatus != TI_OK)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   443
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   444
            TRACE3(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_Transact(): Enqueue failed, pTxn=0x%x, HwAddr=0x%x, Len0=%d\n", pTxn, pTxn->uHwAddr, pTxn->aLen[0]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   445
            return TXN_STATUS_ERROR;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   446
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   447
        TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Transact(): Regular Txn\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   448
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   449
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   450
    /* Send queued transactions as possible */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   451
    rc = txnQ_RunScheduler (pTxnQ, pTxn); 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   452
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   453
    return rc;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   454
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   455
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   456
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   457
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   458
 * \fn     txnQ_ConnectCB
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   459
 * \brief  Pending Connection completion CB
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   460
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   461
 *  txnQ_ConnectBus CB
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   462
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   463
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   464
 * \param  hTxnQ - The module's object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   465
 * \param  pTxn  - The completed transaction object 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   466
 * \return void
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   467
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   468
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   469
static void txnQ_ConnectCB (TI_HANDLE hTxnQ, void *hTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   470
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   471
    TTxnQObj   *pTxnQ   = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   472
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   473
    /* Call the Client Connect CB */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   474
    pTxnQ->fConnectCb (pTxnQ->hConnectCb, NULL);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   475
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   476
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   477
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   478
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   479
 * \fn     txnQ_TxnDoneCb
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   480
 * \brief  Pending Transaction completion CB
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   481
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   482
 * Called back by bus-driver upon pending transaction completion in TxnDone context (external!).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   483
 * Enqueue completed transaction in TxnDone queue and call scheduler to send queued transactions.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   484
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   485
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   486
 * \param  hTxnQ - The module's object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   487
 * \param  pTxn  - The completed transaction object 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   488
 * \return void
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   489
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   490
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   491
static void txnQ_TxnDoneCb (TI_HANDLE hTxnQ, void *hTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   492
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   493
    TTxnQObj   *pTxnQ   = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   494
    TTxnStruct *pTxn    = (TTxnStruct *)hTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   495
    TI_UINT32   uFuncId = TXN_PARAM_GET_FUNC_ID(pTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   496
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   497
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   498
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_TxnDoneCb()\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   499
    if (pTxn != pTxnQ->pCurrTxn) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   500
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   501
        TRACE2(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_TxnDoneCb(): CB returned pTxn 0x%x  while pCurrTxn is 0x%x !!\n", pTxn, pTxnQ->pCurrTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   502
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   503
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   504
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   505
    /* If the function of the completed Txn is waiting for restart */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   506
    if (pTxnQ->aFuncInfo[uFuncId].eState == FUNC_STATE_RESTART) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   507
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   508
        TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_TxnDoneCb(): Handling restart\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   509
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   510
        /* First, Clear the restarted function queues  */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   511
        txnQ_ClearQueues (hTxnQ, uFuncId);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   512
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   513
        /* Call function CB for current Txn with restart indication */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   514
        TXN_PARAM_SET_STATUS(pTxn, TXN_PARAM_STATUS_RECOVERY);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   515
        pTxnQ->aFuncInfo[uFuncId].fTxnQueueDoneCb (pTxnQ->aFuncInfo[uFuncId].hCbHandle, pTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   516
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   517
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   518
    /* In the normal case (no restart), enqueue completed transaction in TxnDone queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   519
    else 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   520
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   521
        TI_STATUS eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   522
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   523
        CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   524
        eStatus = que_Enqueue (pTxnQ->hTxnDoneQueue, (TI_HANDLE)pTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   525
        if (eStatus != TI_OK)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   526
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   527
            TRACE3(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_TxnDoneCb(): Enqueue failed, pTxn=0x%x, HwAddr=0x%x, Len0=%d\n", pTxn, pTxn->uHwAddr, pTxn->aLen[0]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   528
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   529
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   530
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   531
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   532
    /* Indicate that no transaction is currently processed in the bus-driver */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   533
    pTxnQ->pCurrTxn = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   534
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   535
    /* Send queued transactions as possible (TRUE indicates we are in external context) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   536
    txnQ_RunScheduler (pTxnQ, NULL); 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   537
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   538
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   539
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   540
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   541
 * \fn     txnQ_RunScheduler
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   542
 * \brief  Send queued transactions
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   543
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   544
 * Run the scheduler, which issues transactions as long as possible.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   545
 * Since this function is called from either internal or external (TxnDone) context,
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   546
 *   it handles reentry by setting a bSchedulerPend flag, and running the scheduler again
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   547
 *   when its current iteration is finished.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   548
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   549
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   550
 * \param  pTxnQ            - The module's object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   551
 * \param  pInputTxn - The transaction inserted in the current context (NULL if none)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   552
 * \return COMPLETE if pCurrTxn completed in this context, PENDING if not, ERROR if failed
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   553
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   554
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   555
static ETxnStatus txnQ_RunScheduler (TTxnQObj *pTxnQ, TTxnStruct *pInputTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   556
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   557
    TI_BOOL bFirstIteration;  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   558
	ETxnStatus eStatus = TXN_STATUS_NONE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   559
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   560
    TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_RunScheduler()\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   561
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   562
    CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   563
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   564
    /* If the scheduler is currently busy, set bSchedulerPend flag and exit */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   565
    if (pTxnQ->bSchedulerBusy)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   566
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   567
        TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_RunScheduler(): Scheduler is busy\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   568
        pTxnQ->bSchedulerPend = TI_TRUE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   569
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   570
        return TXN_STATUS_PENDING;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   571
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   572
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   573
    /* Indicate that the scheduler is currently busy */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   574
    pTxnQ->bSchedulerBusy = TI_TRUE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   575
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   576
    CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   577
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   578
    bFirstIteration = TI_TRUE;  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   579
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   580
    /* 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   581
     * Run the scheduler while it has work to do 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   582
     */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   583
    while (1)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   584
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   585
        /* If first scheduler iteration, save its return code to return the original Txn result */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   586
        if (bFirstIteration) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   587
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   588
            eStatus = txnQ_Scheduler (pTxnQ, pInputTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   589
            bFirstIteration = TI_FALSE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   590
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   591
        /* This is for handling pending calls when the scheduler was busy (see above) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   592
        else 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   593
        {    
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   594
            TRACE0(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_RunScheduler(): Handle pending scheduler call\n");
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   595
            txnQ_Scheduler (pTxnQ, NULL);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   596
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   597
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   598
        CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   599
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   600
        /* If no pending calls, clear the busy flag and return the original caller Txn status */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   601
        if (!pTxnQ->bSchedulerPend) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   602
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   603
            pTxnQ->bSchedulerBusy = TI_FALSE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   604
            CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   605
            return eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   606
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   607
        pTxnQ->bSchedulerPend = TI_FALSE;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   608
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   609
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   610
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   611
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   612
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   613
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   614
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   615
 * \fn     txnQ_Scheduler
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   616
 * \brief  Send queued transactions
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   617
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   618
 * Issue transactions as long as they are available and the bus is not occupied.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   619
 * Call CBs of completed transactions, except completion of pInputTxn (covered by the return value).
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   620
 * Note that this function is called from either internal or external (TxnDone) context.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   621
 * However, the txnQ_RunScheduler which calls it, prevents scheduler reentry.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   622
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   623
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   624
 * \param  pTxnQ     - The module's object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   625
 * \param  pInputTxn - The transaction inserted in the current context (NULL if none)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   626
 * \return COMPLETE if pInputTxn completed in this context, PENDING if not, ERROR if failed
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   627
 * \sa     txnQ_RunScheduler
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   628
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   629
static ETxnStatus txnQ_Scheduler (TTxnQObj *pTxnQ, TTxnStruct *pInputTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   630
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   631
    ETxnStatus eInputTxnStatus;  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   632
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   633
    /* Use as return value the status of the input transaction (PENDING unless sent and completed here) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   634
    eInputTxnStatus = TXN_STATUS_PENDING;  
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   635
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   636
    /* if a previous transaction is in progress, return PENDING */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   637
    if (pTxnQ->pCurrTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   638
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   639
        TRACE1(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Scheduler(): pCurrTxn isn't null (0x%x) so exit\n", pTxnQ->pCurrTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   640
        return TXN_STATUS_PENDING;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   641
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   642
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   643
    /* Loop while transactions are available and can be sent to bus driver */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   644
    while (1)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   645
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   646
        TTxnStruct   *pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   647
        ETxnStatus    eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   648
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   649
        /* Get next enabled transaction by priority. If none, exit loop. */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   650
        CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   651
        pSelectedTxn = txnQ_SelectTxn (pTxnQ);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   652
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   653
        if (pSelectedTxn == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   654
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   655
            break;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   656
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   657
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   658
        /* Save transaction in case it will be async (to indicate that the bus driver is busy) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   659
        pTxnQ->pCurrTxn = pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   660
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   661
        /* Send selected transaction to bus driver */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   662
        eStatus = busDrv_Transact (pTxnQ->hBusDrv, pSelectedTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   663
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   664
        /* If we've just sent the input transaction, use the status as the return value */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   665
        if (pSelectedTxn == pInputTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   666
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   667
            eInputTxnStatus = eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   668
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   669
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   670
        TRACE3(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Scheduler(): Txn 0x%x sent, status = %d, eInputTxnStatus = %d\n", pSelectedTxn, eStatus, eInputTxnStatus);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   671
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   672
        /* If transaction completed */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   673
        if (eStatus != TXN_STATUS_PENDING)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   674
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   675
            pTxnQ->pCurrTxn = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   676
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   677
            /* If it's not the input transaction, enqueue it in TxnDone queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   678
            if (pSelectedTxn != pInputTxn)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   679
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   680
                TI_STATUS eStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   681
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   682
                CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   683
                eStatus = que_Enqueue (pTxnQ->hTxnDoneQueue, (TI_HANDLE)pSelectedTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   684
                if (eStatus != TI_OK)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   685
                {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   686
                    TRACE3(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_Scheduler(): Enqueue failed, pTxn=0x%x, HwAddr=0x%x, Len0=%d\n", pSelectedTxn, pSelectedTxn->uHwAddr, pSelectedTxn->aLen[0]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   687
                }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   688
                CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   689
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   690
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   691
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   692
        /* If pending Exit loop! */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   693
        else 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   694
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   695
            break;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   696
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   697
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   698
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   699
    /* Dequeue completed transactions and call their functional driver CB */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   700
    /* Note that it's the functional driver CB and not the specific CB in the Txn! */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   701
    while (1)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   702
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   703
        TTxnStruct      *pCompletedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   704
        TI_UINT32        uFuncId;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   705
        TTxnQueueDoneCb  fTxnQueueDoneCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   706
        TI_HANDLE        hCbHandle;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   707
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   708
        CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   709
        pCompletedTxn   = (TTxnStruct *) que_Dequeue (pTxnQ->hTxnDoneQueue);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   710
        CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   711
        if (pCompletedTxn == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   712
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   713
            /* Return the status of the input transaction (PENDING unless sent and completed here) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   714
            return eInputTxnStatus;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   715
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   716
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   717
        TRACE1(pTxnQ->hReport, REPORT_SEVERITY_INFORMATION, "txnQ_Scheduler(): Calling TxnDone for Txn 0x%x\n", pCompletedTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   718
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   719
        uFuncId         = TXN_PARAM_GET_FUNC_ID(pCompletedTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   720
        fTxnQueueDoneCb = pTxnQ->aFuncInfo[uFuncId].fTxnQueueDoneCb;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   721
        hCbHandle       = pTxnQ->aFuncInfo[uFuncId].hCbHandle;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   722
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   723
        fTxnQueueDoneCb (hCbHandle, pCompletedTxn);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   724
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   725
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   726
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   727
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   728
/** 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   729
 * \fn     txnQ_SelectTxn
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   730
 * \brief  Select transaction to send
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   731
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   732
 * Called from txnQ_RunScheduler() which is protected in critical section.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   733
 * Select the next enabled transaction by priority.
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   734
 * 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   735
 * \note   
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   736
 * \param  pTxnQ - The module's object
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   737
 * \return The selected transaction to send (NULL if none available)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   738
 * \sa     
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   739
 */ 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   740
static TTxnStruct *txnQ_SelectTxn (TTxnQObj *pTxnQ)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   741
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   742
    TTxnStruct *pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   743
    TI_UINT32   uFunc;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   744
    TI_UINT32   uPrio;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   745
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   746
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   747
    /* If within Tx aggregation, dequeue Txn from same queue, and if not NULL return it */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   748
    if (pTxnQ->pAggregQueue)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   749
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   750
        pSelectedTxn = (TTxnStruct *) que_Dequeue (pTxnQ->pAggregQueue);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   751
        if (pSelectedTxn != NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   752
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   753
            /* If aggregation ended, reset the aggregation-queue pointer */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   754
            if (TXN_PARAM_GET_AGGREGATE(pSelectedTxn) == TXN_AGGREGATE_OFF) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   755
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   756
                if ((TXN_PARAM_GET_FIXED_ADDR(pSelectedTxn) != TXN_FIXED_ADDR) ||
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   757
                    (TXN_PARAM_GET_DIRECTION(pSelectedTxn)  != TXN_DIRECTION_WRITE))
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   758
                {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   759
                    TRACE2(pTxnQ->hReport, REPORT_SEVERITY_ERROR, "txnQ_SelectTxn: Mixed transaction during aggregation, HwAddr=0x%x, TxnParams=0x%x\n", pSelectedTxn->uHwAddr, pSelectedTxn->uTxnParams);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   760
                }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   761
                pTxnQ->pAggregQueue = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   762
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   763
            return pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   764
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   765
        return NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   766
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   767
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   768
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   769
    /* For all functions, if single-step Txn waiting, return it (sent even if function is stopped) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   770
    for (uFunc = pTxnQ->uMinFuncId; uFunc <= pTxnQ->uMaxFuncId; uFunc++)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   771
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   772
        pSelectedTxn = pTxnQ->aFuncInfo[uFunc].pSingleStep;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   773
        if (pSelectedTxn != NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   774
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   775
            pTxnQ->aFuncInfo[uFunc].pSingleStep = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   776
            return pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   777
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   778
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   779
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   780
    /* For all priorities from high to low */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   781
    for (uPrio = 0; uPrio < MAX_PRIORITY; uPrio++)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   782
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   783
        /* For all functions */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   784
        for (uFunc = pTxnQ->uMinFuncId; uFunc <= pTxnQ->uMaxFuncId; uFunc++)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   785
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   786
            /* If function running and uses this priority */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   787
            if (pTxnQ->aFuncInfo[uFunc].eState == FUNC_STATE_RUNNING  &&
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   788
                pTxnQ->aFuncInfo[uFunc].uNumPrios > uPrio)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   789
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   790
                /* Dequeue Txn from current func and priority queue, and if not NULL return it */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   791
                pSelectedTxn = (TTxnStruct *) que_Dequeue (pTxnQ->aTxnQueues[uFunc][uPrio]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   792
                if (pSelectedTxn != NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   793
                {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   794
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   795
                    /* If aggregation begins, save the aggregation-queue pointer to ensure continuity */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   796
                    if (TXN_PARAM_GET_AGGREGATE(pSelectedTxn) == TXN_AGGREGATE_ON) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   797
                    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   798
                        pTxnQ->pAggregQueue = pTxnQ->aTxnQueues[uFunc][uPrio];
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   799
                    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   800
#endif
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   801
                    return pSelectedTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   802
                }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   803
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   804
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   805
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   806
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   807
    /* If no transaction was selected, return NULL */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   808
    return NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   809
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   810
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   811
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   812
void txnQ_ClearQueues (TI_HANDLE hTxnQ, TI_UINT32 uFuncId)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   813
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   814
    TTxnQObj        *pTxnQ = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   815
    TTxnStruct      *pTxn;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   816
    TI_UINT32        uPrio;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   817
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   818
    CONTEXT_ENTER_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   819
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   820
    pTxnQ->aFuncInfo[uFuncId].pSingleStep = NULL;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   821
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   822
    /* For all function priorities */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   823
    for (uPrio = 0; uPrio < pTxnQ->aFuncInfo[uFuncId].uNumPrios; uPrio++)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   824
    {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   825
        while (1) 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   826
        {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   827
            /* Dequeue Txn from current priority queue */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   828
            pTxn = (TTxnStruct *) que_Dequeue (pTxnQ->aTxnQueues[uFuncId][uPrio]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   829
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   830
            /* If NULL Txn (queue empty), exit while loop */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   831
            if (pTxn == NULL)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   832
            {
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   833
                break;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   834
            }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   835
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   836
            /* 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   837
             * Drop on Restart 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   838
             * do not call fTxnQueueDoneCb (hCbHandle, pTxn) callback 
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   839
             */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   840
        }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   841
    }
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   842
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   843
    /* Clear state - for restart (doesn't call txnQ_Open) */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   844
    pTxnQ->aFuncInfo[uFuncId].eState = FUNC_STATE_RUNNING;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   845
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   846
    CONTEXT_LEAVE_CRITICAL_SECTION (pTxnQ->hContext);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   847
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   848
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   849
#ifdef TI_DBG
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   850
void txnQ_PrintQueues (TI_HANDLE hTxnQ)
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   851
{
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   852
    TTxnQObj    *pTxnQ   = (TTxnQObj*)hTxnQ;
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   853
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   854
    WLAN_OS_REPORT(("Print TXN queues\n"));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   855
    WLAN_OS_REPORT(("================\n"));
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   856
    que_Print(pTxnQ->aTxnQueues[TXN_FUNC_ID_WLAN][TXN_LOW_PRIORITY]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   857
    que_Print(pTxnQ->aTxnQueues[TXN_FUNC_ID_WLAN][TXN_HIGH_PRIORITY]);
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   858
}
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   859
#endif /* TI_DBG */
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   860
10c42ec6c05f version WiLink_Driver_6.1.1.0.8
shahar_levi@ti.com
parents:
diff changeset
   861