/* * CmdQueue.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 CmdQueue.h * \brief CmdQueue internal defenitions * * \see CmdQueue.c */ #ifndef _CMDQUEUE_H_ #define _CMDQUEUE_H_ /***************************************************************************** ** Defines ** *****************************************************************************/ #define CMDQUEUE_QUEUE_DEPTH 30 #define CMDQUEUE_HISTORY_DEPTH 5 #define CMDQUEUE_INFO_ELEM_HEADER_LEN 4 #define RC_CONVERT(rc) \ (rc == TXN_STATUS_OK || rc == TXN_STATUS_COMPLETE || rc == TXN_STATUS_PENDING || rc == TI_OK) ? TI_OK : TI_NOK /***************************************************************************** ** Enums ** *****************************************************************************/ typedef enum { CMDQUEUE_EVENT_RUN, CMDQUEUE_EVENT_COMPLETE, CMDQUEUE_EVENT_NUM } ECmdQueueSmEvents; typedef enum { CMDQUEUE_STATE_IDLE, CMDQUEUE_STATE_WAIT_FOR_COMPLETION } ECmdQueueSmStates; /***************************************************************************** ** Structures ** *****************************************************************************/ /* CmdQueue Node */ typedef struct { /* Command Type Config/interrogat ... */ Command_e cmdType; TI_UINT32 uParamsLen; void* fCb; TI_HANDLE hCb; /* Param for config */ TI_UINT8 aParamsBuf[MAX_CMD_PARAMS]; /* A returned value buffer */ TI_UINT8* pInterrogateBuf; } TCmdQueueNode; /* Saved CallBack Node In case of Recovery*/ typedef struct { void* fCb; TI_HANDLE hCb; /* A returned value buffer */ TI_UINT8* pInterrogateBuf; } TCmdQueueRecoveryNode; typedef void (*TCmdQueueCb) (TI_HANDLE handle, TI_UINT16 uMboxStatus); typedef void (*TCmdQueueGenericCb)(TI_HANDLE handle, TI_UINT16 uCmdType, TI_UINT16 uCmdID, TI_UINT32 status); /** \struct TCmdQueue * \brief CmdQueue structure * * \par Description * * \sa */ typedef struct { /* Handles */ TI_HANDLE hOs; TI_HANDLE hReport; TI_HANDLE hCmdMBox; TI_HANDLE hTwIf; /* SM */ ECmdQueueSmStates state; TCmdQueueGenericCb fCmdCompleteCb; TI_HANDLE hCmdCompleteCb; TCmdQueueCb fFailureCb; TI_HANDLE hFailureCb; /* Queues */ TCmdQueueNode aCmdQueue [CMDQUEUE_QUEUE_DEPTH]; TCmdQueueRecoveryNode aRecoveryQueue [CMDQUEUE_QUEUE_DEPTH]; /* Indexes & counters */ TI_UINT32 head; TI_UINT32 tail; TI_UINT32 uNumberOfCommandInQueue; TI_UINT32 uMaxNumberOfCommandInQueue; TI_UINT32 uNumberOfRecoveryNodes; #ifdef TI_DBG TI_UINT32 uCmdSendCounter; TI_UINT32 uCmdCompltCounter; #endif /* Error handling */ TI_BOOL bErrorFlag; /* Mbox status */ TI_BOOL bMboxEnabled; /* Notify that we have already awaken the chip */ TI_BOOL bAwake; } TCmdQueue; #endif