| /* |
| * TxnQueue.h |
| * |
| * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. |
| * All rights reserved. |
| * |
| * 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__*/ |