SimpleLink CC31xx/CC32xx Host Driver  Version 3.0.1.46
Simplifies the implementation of Internet connectivity
driver.h
1 /*
2  * driver.h - CC31xx/CC32xx Host Driver Implementation
3  *
4  * Copyright (C) 2017 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 
37 #ifndef __DRIVER_INT_H__
38 #define __DRIVER_INT_H__
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 #include <ti/drivers/net/wifi/source/protocol.h>
45 
46 #define TIMEOUT_STATE_EXPIRY (0)
47 #define TIMEOUT_ONE_MORE_SHOT (1)
48 #define TIMEOUT_STATE_INIT_VAL (2)
49 
50 /* Timeouts for the sync objects */
51 #ifndef SL_DRIVER_TIMEOUT_SHORT
52 #define SL_DRIVER_TIMEOUT_SHORT (10000) /* msec units */
53 #endif
54 #ifndef SL_DRIVER_TIMEOUT_LONG
55 #define SL_DRIVER_TIMEOUT_LONG (65535) /* msec units */
56 #endif
57 
58 #define INIT_COMPLETE_TIMEOUT SL_DRIVER_TIMEOUT_LONG
59 #define STOP_DEVICE_TIMEOUT SL_DRIVER_TIMEOUT_LONG
60 
61 #ifndef SYNC_PATTERN_TIMEOUT_IN_MSEC
62 #define SYNC_PATTERN_TIMEOUT_IN_MSEC (50) /* the sync patttern timeout in milliseconds units */
63 #endif
64 
65 #define GLOBAL_LOCK_FLAGS_NONE (0x0)
66 #define GLOBAL_LOCK_FLAGS_UPDATE_API_IN_PROGRESS (0x1) /* Bit 0 */
67 #define GLOBAL_LOCK_FLAGS_PROVISIONING_STOP_API (0x2) /* Bit 1*/
68 #define GLOBAL_LOCK_FLAGS_STARTING_DEVICE (0x4) /* Bit 2 */
69 /*****************************************************************************/
70 /* Macro declarations */
71 /*****************************************************************************/
72 
73 #ifndef CPU_FREQ_IN_MHZ
74  #define CPU_FREQ_IN_MHZ (200)
75 #endif
76 #define USEC_DELAY (50)
77 
78 #define SL_DRV_PROTECTION_OBJ_UNLOCK() LOCK_OK_CHECK(_SlDrvProtectionObjUnLock());
79 #define SL_DRV_PROTECTION_OBJ_LOCK_FOREVER() LOCK_OK_CHECK(_SlDrvProtectionObjLockWaitForever());
80 #define SL_DRV_OBJ_UNLOCK(pObj) LOCK_OK_CHECK(_SlDrvObjUnLock(pObj));
81 #define SL_DRV_OBJ_LOCK_FOREVER(pObj) LOCK_OK_CHECK(_SlDrvObjLockWaitForever(pObj));
82 #define SL_DRV_SYNC_OBJ_SIGNAL(pObj) _SlDrvSyncObjSignal(pObj);
83 #define SL_DRV_SYNC_OBJ_CLEAR(pObj) sl_SyncObjWait(pObj,SL_OS_NO_WAIT);
84 
85 #define SL_DRV_SYNC_OBJ_WAIT_FOREVER(SyncObj) { \
86 if (SL_API_ABORTED == _SlDrvSyncObjWaitForever(SyncObj)) \
87 { \
88  return SL_API_ABORTED; \
89 } \
90 }
91 #define SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(SyncObj, timeoutVal, opcode) { \
92 if (SL_API_ABORTED == _SlDrvSyncObjWaitTimeout(SyncObj, timeoutVal, opcode)) \
93 { \
94  _SlDrvReleasePoolObj(g_pCB->FunctionParams.AsyncExt.ActionIndex); \
95  return SL_API_ABORTED; \
96 } \
97 }
98 #define SL_DRV_LOCK_GLOBAL_LOCK_FOREVER(Flags) { \
99 _SlReturnVal_t retVal; \
100  \
101 retVal = _SlDrvObjGlobalLockWaitForever(Flags); \
102 if (retVal) \
103 { \
104  return retVal; \
105 } \
106 }
107 
108 #define SL_DRV_LOCK_GLOBAL_UNLOCK(bDecrementApiInProgress) { \
109 _SlReturnVal_t retVal; \
110  \
111 retVal = _SlDrvGlobalObjUnLock(bDecrementApiInProgress); \
112 if (retVal) \
113 { \
114  return retVal; \
115 } \
116 }
117 
118 
119 #define SL_IS_RESTART_REQUIRED (g_SlDeviceStatus & _SL_DRV_STATUS_BIT_RESTART_REQUIRED) /* bit 8 indicates restart is required due to fatal error */
120 #define SL_IS_DEVICE_STARTED (g_SlDeviceStatus & _SL_DRV_STATUS_BIT_DEVICE_STARTED) /* bit 9 indicates device is started */
121 #define SL_IS_DEVICE_LOCKED (g_SlDeviceStatus & _SL_DEV_STATUS_BIT_LOCKED) /* bits 0-7 devStatus from NWP, bit 2 = device locked */
122 #define SL_IS_PROVISIONING_ACTIVE (!!(g_SlDeviceStatus & _SL_DEV_STATUS_BIT_PROVISIONING_ACTIVE)) /* bits 0-7 devStatus from NWP, bit 3 = provisioning active */
123 #define SL_IS_PROVISIONING_INITIATED_BY_USER (!!(g_SlDeviceStatus & _SL_DEV_STATUS_BIT_PROVISIONING_USER_INITIATED)) /* bits 0-7 devStatus from NWP, bit 4 = provisioning initiated by the user */
124 #define SL_IS_PROVISIONING_API_ALLOWED (!!(g_SlDeviceStatus & _SL_DEV_STATUS_BIT_PROVISIONING_ENABLE_API))
125 #define SL_IS_DEVICE_STOP_IN_PROGRESS (!!(g_SlDeviceStatus & _SL_DRV_STATUS_BIT_STOP_IN_PROGRESS))
126 #define SL_IS_DEVICE_START_IN_PROGRESS (!!(g_SlDeviceStatus & _SL_DRV_STATUS_BIT_START_IN_PROGRESS))
127 
128 #define SL_IS_PROVISIONING_IN_PROGRESS (!!(g_SlDeviceStatus & ( _SL_DEV_STATUS_BIT_PROVISIONING_USER_INITIATED | _SL_DEV_STATUS_BIT_PROVISIONING_ACTIVE)))
129 /* Check the following conditions:
130  1. Device started
131  2. Restart device is not required
132  3. Provisioning is active
133  4. Provisioning was already initiated by the user
134  5. Device is not locked
135 */
136 #define SL_IS_COMMAND_ALLOWED ((g_SlDeviceStatus & (_SL_DRV_STATUS_BIT_DEVICE_STARTED | \
137  _SL_DRV_STATUS_BIT_RESTART_REQUIRED | \
138  _SL_DEV_STATUS_BIT_PROVISIONING_ACTIVE | \
139  _SL_DEV_STATUS_BIT_PROVISIONING_USER_INITIATED | \
140  _SL_DRV_STATUS_BIT_STOP_IN_PROGRESS | \
141  _SL_DEV_STATUS_BIT_LOCKED)) == 0x200)
142 
143 #define SL_IS_GLOBAL_LOCK_INIT (g_SlDeviceStatus & _SL_DRV_STATUS_BIT_GLOBAL_LOCK_INIT)
144 #define SL_SET_GLOBAL_LOCK_INIT (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_GLOBAL_LOCK_INIT)
145 #define SL_UNSET_GLOBAL_LOCK_INIT (g_SlDeviceStatus &= (~ _SL_DRV_STATUS_BIT_GLOBAL_LOCK_INIT))
146 
147 #define SL_SET_RESTART_REQUIRED (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_RESTART_REQUIRED) /* bit 8 indicates restart is required due to fatal error */
148 #define SL_UNSET_RESTART_REQUIRED (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_RESTART_REQUIRED)) /* bit 8 indicates restart is required due to fatal error */
149 #define SL_SET_DEVICE_STARTED (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_DEVICE_STARTED) /* bit 9 indicates device is started */
150 #define SL_UNSET_DEVICE_STARTED (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_DEVICE_STARTED)) /* bit 9 indicates device is started */
151 
152 #define SL_SET_DEVICE_STOP_IN_PROGRESS (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_STOP_IN_PROGRESS) /* bit 10 indicates there is stop in progress */
153 #define SL_UNSET_DEVICE_STOP_IN_PROGRESS (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_STOP_IN_PROGRESS)) /* bit 10 indicates there is stop in progress */
154 
155 /* Start in progress */
156 #define SL_SET_DEVICE_START_IN_PROGRESS (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_START_IN_PROGRESS) /* bit 11 indicates there is start in progress */
157 #define SL_UNSET_DEVICE_START_IN_PROGRESS (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_START_IN_PROGRESS)) /* bit 11 indicates there is start in progress */
158 
159 #define SL_SET_DEVICE_STATUS(x) (g_SlDeviceStatus = ((g_SlDeviceStatus & 0xFF00) | (_u16)x) ) /* bits 0-7 devStatus from NWP */
160 
161 #define _SL_PENDING_RX_MSG(pDriverCB) (RxIrqCnt != (pDriverCB)->RxDoneCnt)
162 
163 /*****************************************************************************/
164 /* Structure/Enum declarations */
165 /*****************************************************************************/
166 
167 typedef struct _SlSpawnMsgItem_s
168 {
169  _SlSpawnEntryFunc_t AsyncHndlr;
170  _u8 ActionIndex;
171  void *Buffer;
172  struct _SlSpawnMsgItem_s *next;
174 
175 
176 typedef struct
177 {
178  _u32 TSPrev;
179  _u32 TSCurr;
180  _u32 DeltaTicks;
181  _u32 DeltaTicksReminder;
182  _i32 Total10MSecUnits;
184 
185 typedef struct
186 {
187  _u8 *pAsyncMsgBuff;
188  _u8 bInCmdContext;
190 
191 typedef struct
192 {
193  _SlOpcode_t Opcode;
194  _SlArgSize_t TxDescLen;
195  _SlArgSize_t RxDescLen;
196 }_SlCmdCtrl_t;
197 
198 typedef struct
199 {
200  _u16 TxPayload1Len;
201  _u16 TxPayload2Len;
202  _i16 RxPayloadLen;
203  _i16 ActualRxPayloadLen;
204  _u8 *pTxPayload1;
205  _u8 *pTxPayload2;
206  _u8 *pRxPayload;
207 }_SlCmdExt_t;
208 
209 typedef struct _SlArgsData_t
210 {
211  _u8 *pArgs;
212  _u8 *pData;
213 } _SlArgsData_t;
214 
215 typedef struct _SlPoolObj_t
216 {
217  _SlSyncObj_t SyncObj;
218  _u8 *pRespArgs;
219  _u8 ActionID;
220  _u8 AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */
221  _u8 NextIndex;
222 } _SlPoolObj_t;
223 
224 typedef enum
225 {
226  SOCKET_0,
227  SOCKET_1,
228  SOCKET_2,
229  SOCKET_3,
230  SOCKET_4,
231  SOCKET_5,
232  SOCKET_6,
233  SOCKET_7,
234  SOCKET_8,
235  SOCKET_9,
236  SOCKET_10,
237  SOCKET_11,
238  SOCKET_12,
239  SOCKET_13,
240  SOCKET_14,
241  SOCKET_15,
242  MAX_SOCKET_ENUM_IDX,
243  ACCEPT_ID = MAX_SOCKET_ENUM_IDX,
244  CONNECT_ID,
245  SELECT_ID,
246  GETHOSYBYNAME_ID,
247  GETHOSYBYSERVICE_ID,
248  PING_ID,
249  NETAPP_RECEIVE_ID,
250  START_STOP_ID,
251  NETUTIL_CMD_ID,
252  CLOSE_ID,
253  START_TLS_ID,
254  /**********/
255  RECV_ID /* Please note!! this member must be the last in this action enum */
256 }_SlActionID_e;
257 
258 typedef struct _SlActionLookup_t
259 {
260  _u8 ActionID;
261  _u16 ActionAsyncOpcode;
262  _SlSpawnEntryFunc_t AsyncEventHandler;
263 
265 
266 typedef struct
267 {
268  _u8 TxPoolCnt;
269  _u16 MinTxPayloadSize;
270  _SlLockObj_t TxLockObj;
271  _SlSyncObj_t TxSyncObj;
273 
274 typedef enum
275 {
276  RECV_RESP_CLASS,
277  CMD_RESP_CLASS,
278  ASYNC_EVT_CLASS,
279 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
280  MULTI_SELECT_RESP_CLASS,
281 #endif
282  DUMMY_MSG_CLASS
283 }_SlRxMsgClass_e;
284 
285 typedef struct
286 {
287  _u8 ActionIndex;
288  _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */
289  _SlRxMsgClass_e RxMsgClass; /* type of Rx message */
290 } AsyncExt_t;
291 
292 typedef _u8 _SlSd_t;
293 
294 typedef struct
295 {
296  _SlCmdCtrl_t *pCmdCtrl;
297  _u8 *pTxRxDescBuff;
298  _SlCmdExt_t *pCmdExt;
299  AsyncExt_t AsyncExt;
301 
302 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
303 
304 typedef struct SlSelectEntry_t
305 {
306  SlSelectAsyncResponse_t Response;
307  _u32 TimeStamp;
308  _u16 readlist;
309  _u16 writelist;
310  _u8 ObjIdx;
312 
313 typedef struct _SlMultiSelectCB_t
314 {
315  _u16 readsds;
316  _u16 writesds;
317  _u16 CtrlSockFD;
318  _u8 ActiveSelect;
319  _u8 ActiveWaiters;
320  _BasicResponse_t SelectCmdResp;
321  _SlSyncObj_t SelectSyncObj;
322  _SlLockObj_t SelectLockObj;
323  _SlSelectEntry_t* SelectEntry[MAX_CONCURRENT_ACTIONS];
325 
326 #else
327 
328 typedef enum
329 {
330  SOCK_TRIGGER_READY,
331  SOCK_TRIGGER_WAITING_FOR_RESP,
332  SOCK_TRIGGER_RESP_RECEIVED
333 } _SlSockTriggerState_e;
334 
335 typedef struct
336 {
337  _SlSockTriggerState_e State;
338  _u8 ObjPoolIdx;
340 
341 typedef struct
342 {
346 
347 #endif
348 
349 typedef struct
350 {
351  _SlFd_t FD;
352  _SlCommandHeader_t TempProtocolHeader;
353  P_INIT_CALLBACK pInitCallback;
354 
355  _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS];
356  _u8 FreePoolIdx;
357  _u8 PendingPoolIdx;
358  _u8 ActivePoolIdx;
359  _u32 ActiveActionsBitmap;
360  _SlLockObj_t ProtectionLockObj;
361 
362  _SlSyncObj_t CmdSyncObj;
363  _u8 WaitForCmdResp;
364  _SlFlowContCB_t FlowContCB;
365  _u8 TxSeqNum;
366  _u8 RxDoneCnt;
367  _u16 SocketNonBlocking;
368  _u16 SocketTXFailure;
369  /* for stack reduction the parameters are globals */
370  _SlFunctionParams_t FunctionParams;
371 
372  _u8 ActionIndex;
373  _i8 ApiInProgressCnt; /* Counts how many APIs are in progress */
374 
375 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
376  /* Multiple Select Control block */
377  _SlMultiSelectCB_t MultiSelectCB;
378 #endif
379 
380 #if defined(slcb_SocketTriggerEventHandler)
381  /* Trigger mode control block */
382  _SlSockTriggerSelect_t SocketTriggerSelect;
383 #endif
384 
385 #ifdef SL_MEMORY_MGMT_DYNAMIC
386  _SlSpawnMsgItem_t *spawnMsgList;
387 #endif
388  _u8 NumOfDeletedSyncObj;
390 
391 typedef struct
392 {
393  _SlSpawnEntryFunc_t AsyncHndlr;
394  _u8 ActionIndex;
395  _u8 Buffer[SL_ASYNC_MAX_MSG_LEN];
397 
398 extern _volatile _u8 RxIrqCnt;
399 
400 extern _SlLockObj_t GlobalLockObj;
401 extern _u16 g_SlDeviceStatus;
402 
403 extern _SlDriverCb_t* g_pCB;
404 extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc;
405 
406 /*****************************************************************************/
407 /* Function prototypes */
408 /*****************************************************************************/
409 extern _SlReturnVal_t _SlDrvDriverCBInit(void);
410 extern _SlReturnVal_t _SlDrvDriverCBDeinit(void);
411 extern _SlReturnVal_t _SlDrvRxIrqHandler(void *pValue);
412 extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
413 extern _SlReturnVal_t _SlDrvCmdSend_noLock(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
414 extern _SlReturnVal_t _SlDrvCmdSend_noWait(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
415 extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void *pTxRxDescBuff , _SlCmdExt_t *pCmdExt);
416 extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
417 extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
418 extern _SlReturnVal_t _SlDeviceHandleAsync_InitComplete(void *pVoidBuf);
419 extern _SlReturnVal_t _SlSocketHandleAsync_Connect(void *pVoidBuf);
420 extern _SlReturnVal_t _SlSocketHandleAsync_Close(void *pVoidBuf);
421 extern _SlReturnVal_t _SlDrvGlobalObjUnLock(_u8 bDecrementApiInProgress);
422 extern _SlReturnVal_t _SlDrvObjGlobalLockWaitForever(_u32 Flags);
423 extern _SlReturnVal_t _SlDrvDriverIsApiAllowed(_u16 Silo);
424 extern _SlReturnVal_t _SlDrvMsgReadSpawnCtx(void *pValue);
425 extern void _SlInternalSpawnWaitForEvent(void);
426 extern void _SlDrvSetGlobalLockOwner(_u8 Owner);
427 #if (!defined (SL_PLATFORM_EXTERNAL_SPAWN))
428 extern _u8 _SlDrvIsSpawnOwnGlobalLock();
429 #endif
430 extern _SlReturnVal_t _SlDrvBasicCmd(_SlOpcode_t Opcode);
431 extern _SlReturnVal_t _SlSocketHandleAsync_Accept(void *pVoidBuf);
432 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByService(void *pVoidBuf);
433 extern _SlReturnVal_t _SlSocketHandleAsync_Select(void *pVoidBuf);
434 extern _SlReturnVal_t _SlSocketHandleAsync_StartTLS(void *pVoidBuf);
435 extern _SlReturnVal_t _SlDrvReleaseAllActivePendingPoolObj();
436 
437 #ifdef slcb_GetTimestamp
438 extern void _SlDrvStartMeasureTimeout(_SlTimeoutParams_t *pTimeoutInfo, _u32 TimeoutInMsec);
439 extern _u8 _SlDrvIsTimeoutExpired(_SlTimeoutParams_t *pTimeoutInfo);
440 extern void _SlDrvSleep(_u16 DurationInMsec);
441 #endif
442 
443 #if defined(SL_PLATFORM_MULTI_THREADED)
444 extern void * pthread_self(void);
445 #endif
446 
447 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByName(void *pVoidBuf);
448 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByAddr(void *pVoidBuf);
449 extern _SlReturnVal_t _SlNetAppHandleAsync_PingResponse(void *pVoidBuf);
450 extern _SlReturnVal_t _SlNetAppEventHandler(void* pArgs);
451 
452 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
453 extern void _SlDrvDispatchHttpServerEvents(SlNetAppHttpServerEvent_t *slHttpServerEvent, SlNetAppHttpServerResponse_t *slHttpServerResponse);
454 #endif
455 
456 #if defined(slcb_NetAppRequestHdlr) || defined(EXT_LIB_REGISTERED_NETAPP_REQUEST_EVENTS)
457 extern void _SlDrvDispatchNetAppRequestEvents(SlNetAppRequest_t *slNetAppRequestEvent, SlNetAppResponse_t *slNetAppResponse);
458 #endif
459 
460 extern void _SlDeviceHandleAsync_Stop(void *pVoidBuf);
461 extern void _SlNetUtilHandleAsync_Cmd(void *pVoidBuf);
462 extern _SlReturnVal_t _SlDrvWaitForPoolObj(_u8 ActionID, _u8 SocketID);
463 extern _SlReturnVal_t _SlDrvReleasePoolObj(_u8 pObj);
464 extern void _SlDrvReleaseAllPendingPoolObj();
465 extern _SlReturnVal_t _SlDrvAlignSize(_u16 msgLen);
466 extern _SlReturnVal_t _SlDrvProtectAsyncRespSetting(_u8 *pAsyncRsp, _SlActionID_e ActionID, _u8 SocketID);
467 extern void _SlNetAppHandleAsync_NetAppReceive(void *pVoidBuf);
468 
469 
470 extern _SlReturnVal_t _SlDeviceEventHandler(void* pEventInfo);
471 extern _SlReturnVal_t _SlDrvSyncObjWaitForever(_SlSyncObj_t *pSyncObj);
472 extern _SlReturnVal_t _SlDrvObjLockWaitForever(_SlLockObj_t *pLockObj);
473 extern _SlReturnVal_t _SlDrvSyncObjWaitTimeout(_SlSyncObj_t *pSyncObj,
474  _u32 timeoutVal,
475  _u32 asyncEventOpcode);
476 
477 extern _SlReturnVal_t _SlDrvSyncObjSignal(_SlSyncObj_t *pSyncObj);
478 extern _SlReturnVal_t _SlDrvObjLock(_SlLockObj_t *pLockObj, _SlTime_t Timeout);
479 extern _SlReturnVal_t _SlDrvProtectionObjLockWaitForever(void);
480 extern _SlReturnVal_t _SlDrvObjUnLock(_SlLockObj_t *pLockObj);
481 extern _SlReturnVal_t _SlDrvProtectionObjUnLock(void);
482 
483 extern void _SlDrvMemZero(void* Addr, _u16 size);
484 extern void _SlDrvResetCmdExt(_SlCmdExt_t* pCmdExt);
485 
486 extern _i8 _SlDrvIsApiInProgress(void);
487 extern void _SlDrvHandleResetRequest(const void* pIfHdl, _i8* pDevName);
488 extern _SlReturnVal_t _SlDrvWaitForInternalAsyncEvent(_u8 ObjIdx, _u32 Timeout, _SlOpcode_t Opcode);
489 extern _SlReturnVal_t _SlSpawnMsgListInsert(_u16 AsyncEventLen, _u8 *pAsyncBuf);
490 extern _SlReturnVal_t _SlSpawnMsgListProcess(void);
491 extern _u16 _SlSpawnMsgListGetCount(void);
492 extern void _SlDrvHandleFatalError(_u32 errorId, _u32 info1, _u32 info2);
493 extern void _SlDrvHandleAssert(void);
494 extern void _SlFindAndReleasePendingCmd();
495 
496 #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3))
497 #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3))
498 
499 
500 #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \
501  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayload1Len + pCmdExt->TxPayload2Len)) : \
502  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen)))
503 
504 #ifdef __cplusplus
505 }
506 #endif /* __cplusplus */
507 
508 #endif /* __DRIVER_INT_H__ */
Definition: driver.h:304