1 2/**************************************************************************** 3**+-----------------------------------------------------------------------+** 4**| |** 5**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved. |** 6**| All rights reserved. |** 7**| |** 8**| Redistribution and use in source and binary forms, with or without |** 9**| modification, are permitted provided that the following conditions |** 10**| are met: |** 11**| |** 12**| * Redistributions of source code must retain the above copyright |** 13**| notice, this list of conditions and the following disclaimer. |** 14**| * Redistributions in binary form must reproduce the above copyright |** 15**| notice, this list of conditions and the following disclaimer in |** 16**| the documentation and/or other materials provided with the |** 17**| distribution. |** 18**| * Neither the name Texas Instruments nor the names of its |** 19**| contributors may be used to endorse or promote products derived |** 20**| from this software without specific prior written permission. |** 21**| |** 22**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |** 23**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |** 24**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |** 25**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |** 26**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |** 27**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |** 28**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |** 29**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |** 30**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |** 31**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |** 32**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |** 33**| |** 34**+-----------------------------------------------------------------------+** 35****************************************************************************/ 36 37/*********************************************************************************/ 38/* */ 39/* MODULE: CmdMBox.h */ 40/* PURPOSE: Acx mailbox object api */ 41/* */ 42/**********************************************************************************/ 43#ifndef _CMDMBOX_H_ 44#define _CMDMBOX_H_ 45 46#include "whalCommon.h" 47#include "whalHwDefs.h" 48 49/***************************************************************************** 50 ** Defines ** 51 *****************************************************************************/ 52 /* wait for a Mail box command to complete */ 53#define CMDMBOX_WAIT_TIMEOUT 500 /* ms */ 54 55#define CMDMBOX_HEADER_LEN 4 56#define CMDMBOX_INFO_ELEM_HEADER_LEN 4 57#define CMDMBOX_WAIT_CMPLT_STALL_TIME 50 /* us */ 58#define CMDMBOX_US_TO_MS 1000 59 60/***************************************************************************** 61 ** Enums ** 62 *****************************************************************************/ 63typedef enum 64{ 65 CMDMBOX_EVENT_SEND_CMD, 66 CMDMBOX_EVENT_CMD_CMPLT, 67 CMDMBOX_EVENT_BUS_READY, 68 CMDMBOX_EVENT_TXN_CMPLT, 69 CMDMBOX_EVENT_GET_RESULT, 70 CMDMBOX_EVENT_NUM, 71} CmdMBox_SMEvents_e; 72 73typedef enum 74{ 75 CMDMBOX_STATE_SENDCMD_NORMAL_IDLE = 0, 76 CMDMBOX_STATE_SENDCMD_NORMAL_WAIT_BUS, 77 CMDMBOX_STATE_SENDCMD_NORMAL_WAIT_TXN_BUF, 78 CMDMBOX_STATE_SENDCMD_NORMAL_WRITE_TRIG_v, 79 CMDMBOX_STATE_SENDCMD_NORMAL_WAIT_TXN_TRIG, 80} CmdMBox_SMStates_SendCmd_Normal_e; 81 82typedef enum 83{ 84 CMDMBOX_STATE_SENDCMD_BLOCKING_IDLE = 10, 85 CMDMBOX_STATE_SENDCMD_BLOCKING_WAIT_BUS, 86 CMDMBOX_STATE_SENDCMD_BLOCKING_WAIT_TXN_BUF, 87 CMDMBOX_STATE_SENDCMD_BLOCKING_WRITE_TRIG_v, 88 CMDMBOX_STATE_SENDCMD_BLOCKING_WAIT_TXN_TRIG, 89 CMDMBOX_STATE_SENDCMD_BLOCKING_POLL_CMPLT_v, 90 CMDMBOX_STATE_SENDCMD_BLOCKING_FINISH_v, 91} CmdMBox_SMStates_SendCmd_Blocking_e; 92 93typedef enum 94{ 95 CMDMBOX_STATE_GETRESULT_NORMAL_IDLE = 20, 96 CMDMBOX_STATE_GETRESULT_NORMAL_WAIT_TXN, 97} CmdMBox_SMStates_GetResult_Normal_e; 98 99typedef enum 100{ 101 CMDMBOX_STATE_GETRESULT_BLOCKING_IDLE = 30, 102 CMDMBOX_STATE_GETRESULT_BLOCKING_WAIT_TXN, 103 CMDMBOX_STATE_NUM, 104} CmdMBox_SMStates_GetResult_Blocking_e; 105 106/***************************************************************************** 107 ** Types ** 108 *****************************************************************************/ 109typedef struct _CmdMBox_T CmdMBox_T; 110typedef int (*SM_Func_t)(CmdMBox_T* pCmdMBox, CmdMBox_SMEvents_e event); 111 112 113/***************************************************************************** 114 ** Structures ** 115 *****************************************************************************/ 116 117struct _CmdMBox_T 118{ 119 /* handles */ 120 TI_HANDLE hOs; 121 TI_HANDLE hReport; 122 TI_HANDLE hTNETWIF; 123 TI_HANDLE hFwEvent; 124 TI_HANDLE hTimer; 125 TI_HANDLE hCmdQueue; 126 127 /* SM */ 128 CmdMBox_SMStates_GetResult_Normal_e GetResultNormal_State; 129 CmdMBox_SMStates_GetResult_Blocking_e GetResultBlocking_State; 130 CmdMBox_SMStates_SendCmd_Normal_e SendCmdNormal_State; 131 CmdMBox_SMStates_SendCmd_Blocking_e SendCmdBlocking_State; 132 SM_Func_t ActiveSM; 133 SM_Func_t SendCmdSM; 134 SM_Func_t GetResultSM; 135 136 /* HW params */ 137 /* use a struct to read buffers from the bus - used for extra bytes reserving */ 138 PADDING (Command_t HW_CmdMBox) 139 140 UINT32 CmdMBox_FW_address; 141 UINT32 CmdLen; 142 143 UINT8* GetResult_ParamsBuf; 144 UINT32 GetResult_ParamsLen; 145 146 BOOLEAN useOpt; 147 148 TNETWIF_callback_t fCb; 149 TI_HANDLE hCb; 150}; 151 152/***************************************************************************** 153 ** Internal functions definitions ** 154 *****************************************************************************/ 155int CmdMBox_SM_GetResultNormal(CmdMBox_T* pCmdMBox, CmdMBox_SMEvents_e event); 156int CmdMBox_SM_GetResultBlocking(CmdMBox_T* pCmdMBox, CmdMBox_SMEvents_e event); 157int CmdMBox_SM_SendCmdNormal(CmdMBox_T* pCmdMBox, CmdMBox_SMEvents_e event); 158int CmdMBox_SM_SendCmdBlocking(CmdMBox_T* pCmdMBox, CmdMBox_SMEvents_e event); 159 160/***************************************************************************** 161 ** CB functions definitions ** 162 *****************************************************************************/ 163void CmdMBox_TimeOut(TI_HANDLE hCmdMBox); 164void CmdMBox_TxnCmplt(TI_HANDLE hCmdMBox, UINT8 module_id ,TI_STATUS status); 165void CmdMBox_BusReady(TI_HANDLE hCmdMBox, UINT8 module_id ,TI_STATUS status); 166 167#endif 168