driver.h 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. /*
  2. * driver.h - CC31xx/CC32xx Host Driver Implementation
  3. *
  4. * Copyright (C) 2014 Texas Instruments Incorporated - http://www.ti.com/
  5. *
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. *
  14. * Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in the
  16. * documentation and/or other materials provided with the
  17. * distribution.
  18. *
  19. * Neither the name of Texas Instruments Incorporated nor the names of
  20. * its contributors may be used to endorse or promote products derived
  21. * from this software without specific prior written permission.
  22. *
  23. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  24. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  25. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  26. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  27. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  28. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  29. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  30. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  31. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  32. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  33. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  34. *
  35. */
  36. #ifndef __DRIVER_INT_H__
  37. #define __DRIVER_INT_H__
  38. /*****************************************************************************/
  39. /* Macro declarations */
  40. /*****************************************************************************/
  41. #ifndef CPU_FREQ_IN_MHZ
  42. #define CPU_FREQ_IN_MHZ (200)
  43. #endif
  44. #define USEC_DELAY (50)
  45. /*****************************************************************************/
  46. /* Structure/Enum declarations */
  47. /*****************************************************************************/
  48. typedef struct
  49. {
  50. _SlOpcode_t Opcode;
  51. _SlArgSize_t TxDescLen;
  52. _SlArgSize_t RxDescLen;
  53. }_SlCmdCtrl_t;
  54. typedef struct
  55. {
  56. _u16 TxPayloadLen;
  57. _i16 RxPayloadLen;
  58. _i16 ActualRxPayloadLen;
  59. _u8 *pTxPayload;
  60. _u8 *pRxPayload;
  61. }_SlCmdExt_t;
  62. typedef struct _SlArgsData_t
  63. {
  64. _u8 *pArgs;
  65. _u8 *pData;
  66. } _SlArgsData_t;
  67. typedef struct _SlPoolObj_t
  68. {
  69. _SlSyncObj_t SyncObj;
  70. _u8 *pRespArgs;
  71. _u8 ActionID;
  72. _u8 AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */
  73. _u8 NextIndex;
  74. } _SlPoolObj_t;
  75. typedef enum
  76. {
  77. SOCKET_0,
  78. SOCKET_1,
  79. SOCKET_2,
  80. SOCKET_3,
  81. SOCKET_4,
  82. SOCKET_5,
  83. SOCKET_6,
  84. SOCKET_7,
  85. MAX_SOCKET_ENUM_IDX,
  86. #ifndef SL_TINY_EXT
  87. ACCEPT_ID = MAX_SOCKET_ENUM_IDX,
  88. CONNECT_ID,
  89. #else
  90. CONNECT_ID = MAX_SOCKET_ENUM_IDX,
  91. #endif
  92. #ifndef SL_TINY_EXT
  93. SELECT_ID,
  94. #endif
  95. GETHOSYBYNAME_ID,
  96. #ifndef SL_TINY_EXT
  97. GETHOSYBYSERVICE_ID,
  98. PING_ID,
  99. #endif
  100. START_STOP_ID,
  101. RECV_ID
  102. }_SlActionID_e;
  103. typedef struct _SlActionLookup_t
  104. {
  105. _u8 ActionID;
  106. _u16 ActionAsyncOpcode;
  107. _SlSpawnEntryFunc_t AsyncEventHandler;
  108. } _SlActionLookup_t;
  109. typedef struct
  110. {
  111. _u8 TxPoolCnt;
  112. _SlLockObj_t TxLockObj;
  113. _SlSyncObj_t TxSyncObj;
  114. }_SlFlowContCB_t;
  115. typedef enum
  116. {
  117. RECV_RESP_CLASS,
  118. CMD_RESP_CLASS,
  119. ASYNC_EVT_CLASS,
  120. DUMMY_MSG_CLASS
  121. }_SlRxMsgClass_e;
  122. typedef struct
  123. {
  124. _u8 *pAsyncBuf; /* place to write pointer to buffer with CmdResp's Header + Arguments */
  125. _u8 ActionIndex;
  126. _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */
  127. _SlRxMsgClass_e RxMsgClass; /* type of Rx message */
  128. } AsyncExt_t;
  129. typedef _u8 _SlSd_t;
  130. typedef struct
  131. {
  132. _SlCmdCtrl_t *pCmdCtrl;
  133. _u8 *pTxRxDescBuff;
  134. _SlCmdExt_t *pCmdExt;
  135. AsyncExt_t AsyncExt;
  136. }_SlFunctionParams_t;
  137. typedef struct
  138. {
  139. _SlFd_t FD;
  140. _SlLockObj_t GlobalLockObj;
  141. _SlCommandHeader_t TempProtocolHeader;
  142. P_INIT_CALLBACK pInitCallback;
  143. _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS];
  144. _u8 FreePoolIdx;
  145. _u8 PendingPoolIdx;
  146. _u8 ActivePoolIdx;
  147. _u32 ActiveActionsBitmap;
  148. _SlLockObj_t ProtectionLockObj;
  149. _SlSyncObj_t CmdSyncObj;
  150. _u8 IsCmdRespWaited;
  151. _SlFlowContCB_t FlowContCB;
  152. _u8 TxSeqNum;
  153. _u8 RxDoneCnt;
  154. _u8 SocketNonBlocking;
  155. _u8 SocketTXFailure;
  156. /* for stack reduction the parameters are globals */
  157. _SlFunctionParams_t FunctionParams;
  158. _u8 ActionIndex;
  159. }_SlDriverCb_t;
  160. extern _volatile _u8 RxIrqCnt;
  161. extern _SlDriverCb_t* g_pCB;
  162. extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc;
  163. /*****************************************************************************/
  164. /* Function prototypes */
  165. /*****************************************************************************/
  166. extern void _SlDrvDriverCBInit(void);
  167. extern void _SlDrvDriverCBDeinit(void);
  168. extern void _SlDrvRxIrqHandler(void *pValue);
  169. extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
  170. extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
  171. extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
  172. extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
  173. extern void _sl_HandleAsync_InitComplete(void *pVoidBuf);
  174. extern void _sl_HandleAsync_Connect(void *pVoidBuf);
  175. #ifndef SL_TINY_EXT
  176. extern _i16 _SlDrvBasicCmd(_SlOpcode_t Opcode);
  177. extern void _sl_HandleAsync_Accept(void *pVoidBuf);
  178. extern void _sl_HandleAsync_DnsGetHostByService(void *pVoidBuf);
  179. extern void _sl_HandleAsync_Select(void *pVoidBuf);
  180. #endif
  181. extern void _sl_HandleAsync_DnsGetHostByName(void *pVoidBuf);
  182. extern void _sl_HandleAsync_DnsGetHostByAddr(void *pVoidBuf);
  183. extern void _sl_HandleAsync_PingResponse(void *pVoidBuf);
  184. extern void _SlDrvNetAppEventHandler(void* pArgs);
  185. extern void _SlDrvDeviceEventHandler(void* pArgs);
  186. extern void _sl_HandleAsync_Stop(void *pVoidBuf);
  187. extern _u8 _SlDrvWaitForPoolObj(_u8 ActionID, _u8 SocketID);
  188. extern void _SlDrvReleasePoolObj(_u8 pObj);
  189. extern _u16 _SlDrvAlignSize(_u16 msgLen);
  190. extern _u8 _SlDrvProtectAsyncRespSetting(_u8 *pAsyncRsp, _u8 ActionID, _u8 SocketID);
  191. extern void _SlDrvSyncObjWaitForever(_SlSyncObj_t *pSyncObj);
  192. extern void _SlDrvSyncObjSignal(_SlSyncObj_t *pSyncObj);
  193. extern void _SlDrvObjLock(_SlLockObj_t *pLockObj, _SlTime_t Timeout);
  194. extern void _SlDrvObjLockWaitForever(_SlLockObj_t *pLockObj);
  195. extern void _SlDrvProtectionObjLockWaitForever();
  196. extern void _SlDrvObjUnLock(_SlLockObj_t *pLockObj);
  197. extern void _SlDrvProtectionObjUnLock();
  198. extern void _SlDrvMemZero(void* Addr, _u16 size);
  199. extern void _SlDrvResetCmdExt(_SlCmdExt_t* pCmdExt);
  200. #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3))
  201. #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3))
  202. #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \
  203. (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayloadLen)) : \
  204. (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen)))
  205. #endif /* __DRIVER_INT_H__ */