Txn/TxnQueue.h
changeset 0 10c42ec6c05f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Txn/TxnQueue.h	Tue Jun 29 12:34:26 2010 +0100
@@ -0,0 +1,278 @@
+/*
+ * TxnQueue.h
+ *
+ * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved.      
+ * All rights reserved.      
+ * 
+ * This program and the accompanying materials are made available under the 
+ * terms of the Eclipse Public License v1.0 or BSD License which accompanies
+ * this distribution. The Eclipse Public License is available at
+ * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below.                                   
+ *                                                                       
+ * Redistribution and use in source and binary forms, with or without    
+ * modification, are permitted provided that the following conditions    
+ * are met:                                                              
+ *                                                                       
+ *  * Redistributions of source code must retain the above copyright     
+ *    notice, this list of conditions and the following disclaimer.      
+ *  * Redistributions in binary form must reproduce the above copyright  
+ *    notice, this list of conditions and the following disclaimer in    
+ *    the documentation and/or other materials provided with the         
+ *    distribution.                                                      
+ *  * Neither the name Texas Instruments nor the names of its            
+ *    contributors may be used to endorse or promote products derived    
+ *    from this software without specific prior written permission.      
+ *                                                                       
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/** \file   TxnQueue.h 
+ *  \brief  TxnQueue module API definition                                  
+ *
+ *  \see    TxnQueue.c
+ */
+
+#ifndef __TXN_QUEUE_API_H__
+#define __TXN_QUEUE_API_H__
+
+
+#include "TxnDefs.h"
+#include "BusDrv.h"
+
+
+
+/************************************************************************
+ * Defines
+ ************************************************************************/
+
+
+/************************************************************************
+ * Macros
+ ************************************************************************/
+
+
+/************************************************************************
+ * Types
+ ************************************************************************/
+
+
+/************************************************************************
+ * Functions
+ ************************************************************************/
+/** \brief	Create the TxnQ module
+ * 
+ * \param  hOs - Handle to Os Abstraction Layer
+ * \return Handle of the allocated object, NULL if allocation failed 
+ * 
+ * \par Description
+ * Allocate and clear the module's object
+ *
+ * \sa	txnQ_Destroy
+ */ 
+TI_HANDLE   txnQ_Create (TI_HANDLE hOs);
+
+/** \brief	Destroy the module
+ * 
+ * \param  The module's object
+ * \return TI_OK on success or TI_NOK on failure 
+ * 
+ * \par Description
+ * Destroy bus driver and free the module's object
+ *
+ * \sa	txnQ_Create
+ */ 
+TI_STATUS   txnQ_Destroy (TI_HANDLE hTxnQ);
+
+/** \brief	Init module
+ * 
+ * \param  hTxnQ     - The module's object
+ * \param  hOs       - Handle to Os Abstraction Layer
+ * \param  hReport   - Handle to report module
+ * \param  hContext  - Handle to context module
+ * \return void        
+ * 
+ * \par Description
+ *
+ * \sa
+ */ 
+void        txnQ_Init (TI_HANDLE hTxnQ, 
+					   TI_HANDLE hOs, 
+					   TI_HANDLE hReport, 
+					   TI_HANDLE hContext);
+
+/** \brief	Configure bus driver
+ * 
+ * \param  hTxnQ      - The module's object
+ * \param  pBusDrvCfg - A union used for per-bus specific configuration. 
+ * \param  pRxDmaBufLen - The Rx DMA buffer length in bytes (needed as a limit of the Rx aggregation length)
+ * \param  pTxDmaBufLen - The Tx DMA buffer length in bytes (needed as a limit of the Tx aggregation length)
+ * \return TI_OK / TI_NOK
+ * 
+ * \par Description
+ * Called by DrvMain (future - by Chip-Manager).
+ * Configure the bus driver with its connection configuration (such as baud-rate, bus width etc) 
+ * and establish the physical connection. Done once (and not per functional driver startup). 
+ * 
+ * \sa
+ */ 
+TI_STATUS   txnQ_ConnectBus (TI_HANDLE hTxnQ, 
+							 TBusDrvCfg *pBusDrvCfg,
+							 TTxnDoneCb fConnectCb,
+							 TI_HANDLE  hConnectCb, 
+                             TI_UINT32  *pRxDmaBufLen,
+                             TI_UINT32  *pTxDmaBufLen);
+
+/** \brief	Disconnect bus driver
+ * 
+ * \param  hTxnQ      - The module's object
+ * \return TI_OK / TI_NOK
+ * 
+ * \par Description
+ * Called by DrvMain (future - by Chip-Manager).
+ * Disconnect the bus driver.
+ * 
+ * \sa
+ */ 
+TI_STATUS   txnQ_DisconnectBus (TI_HANDLE hTxnQ);
+
+/** \brief	Register functional driver to TxnQ
+ * 
+ * \param  hTxnQ           - The module's object
+ * \param  uFuncId         - The calling functional driver
+ * \param  uNumPrios       - The number of queues/priorities
+ * \param  fTxnQueueDoneCb - The callback to call upon full transaction completion.
+ * \param  hCbHandle       - The callback handle                              
+ * \return TI_OK / TI_NOK
+ * 
+ * \par Description
+ * Called by each functional driver (WLAN, future-BT) that uses the TxnQ.
+ * Save driver's info and create its queues. 
+ * Perform in critical section to prevent preemption from TxnDone.
+ * 
+ * \sa	txnQ_Close
+ */ 
+TI_STATUS   txnQ_Open (TI_HANDLE       hTxnQ, 
+                       TI_UINT32       uFuncId, 
+                       TI_UINT32       uNumPrios, 
+                       TTxnQueueDoneCb fTxnQueueDoneCb,
+                       TI_HANDLE       hCbHandle);
+
+/** \brief	Unregister functional driver from TxnQ
+ * 
+ * \param  hTxnQ      - The module's object
+ * \param  uFuncId    - The calling functional driver
+ * \return void
+ * \sa     txnQ_Open
+ * 
+ * \par Description
+ * Called by registered functional driver that uses the TxnQ to unregister.
+ * Clear the function's data and destroy its queues. 
+ * Perform in critical section to prevent preemption from TxnDone.
+ * 
+ * \sa	txnQ_Open
+ */ 
+void        txnQ_Close (TI_HANDLE  hTxnQ, TI_UINT32 uFuncId);
+
+/** \brief	Restart caller's queues
+ * 
+ * \param  hTxnQ      - The module's object
+ * \param  uFuncId    - The calling functional driver
+ * \return COMPLETE if queues were restarted, PENDING if waiting for TxnDone to restart queues
+ * 
+ * \par Description
+ * Called upon functional driver stop command or upon recovery. 
+ * If no transaction in progress for the calling function, clear its queues (call the CBs). 
+ * If a transaction from this function is in progress, just set state to RESTART and when 
+ * called back upon TxnDone clear the queues.
+ * Perform in critical section to prevent preemption from TxnDone.
+ * \note   
+ * The Restart applies only to the calling function's queues.
+ * 
+ * \sa	txnQ_ClearQueues
+ */ 
+ETxnStatus  txnQ_Restart (TI_HANDLE hTxnQ, TI_UINT32 uFuncId);
+
+/** \brief	Run caller's queues
+ * 
+ * \param  hTxnQ   - The module's object
+ * \param  uFuncId - The calling functional driver
+ * \return void
+ * 
+ * \par Description
+ * Enable TxnQ scheduler to process transactions from the calling function's queues.
+ * Run scheduler to issue transactions as possible.
+ * Run in critical section to protect from preemption by TxnDone.
+ * 
+ * \sa	txnQ_ClearQueues
+ */ 
+void        txnQ_Run (TI_HANDLE hTxnQ, TI_UINT32 uFuncId);
+
+/** \brief	Stop caller's queues
+ * 
+ * \param  hTxnQ   - The module's object
+ * \param  uFuncId - The calling functional driver
+ * \return void
+ * 
+ * \par Description
+ * Disable TxnQ scheduler to process transactions from the calling function's queues.
+ * 
+ * \sa
+ */ 
+void        txnQ_Stop (TI_HANDLE hTxnQ, TI_UINT32 uFuncId);
+
+/** \brief	Issue a new transaction
+ * 
+ * \param  hTxnQ - The module's object
+ * \param  pTxn  - The transaction object 
+ * \return COMPLETE if input pTxn completed in this context, PENDING if not, ERROR if failed
+ * 
+ * \par Description
+ * Called by the functional driver to initiate a new transaction.
+ * In critical section save transaction and call scheduler.
+ * 
+ * \sa
+ */ 
+ETxnStatus  txnQ_Transact (TI_HANDLE hTxnQ, TTxnStruct *pTxn);
+
+/** 
+ * \fn     txnQ_ClearQueues
+ * \brief  Clear the function queues
+ * 
+ * Clear the specified function queues and call its CB for each Txn with status=RECOVERY.
+ * 
+ * \note   Called in critical section.
+ * \param  hTxnQ            - The module's object
+ * \param  uFuncId          - The calling functional driver
+ * \return void
+ * \sa     
+ */ 
+void        txnQ_ClearQueues (TI_HANDLE hTxnQ, TI_UINT32 uFuncId);
+
+
+#ifdef TI_DBG
+/** \brief	Print Txn Queues
+ * 
+ * \param  hTxnQ - The module's object
+ * \return void
+ * 
+ * \par Description
+ * 
+ * \sa
+ */ 
+    void txnQ_PrintQueues (TI_HANDLE hTxnQ);
+#endif
+
+
+
+#endif /*__TXN_QUEUE_API_H__*/