/*
* 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__*/