SimpleLink CC3120/CC3220 Host Driver  Version 2.0.1.22
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 - https://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 /* Macro declarations */
66 /*****************************************************************************/
67 
68 #ifndef CPU_FREQ_IN_MHZ
69  #define CPU_FREQ_IN_MHZ (200)
70 #endif
71 #define USEC_DELAY (50)
72 
73 #define SL_DRV_PROTECTION_OBJ_UNLOCK() (void)_SlDrvProtectionObjUnLock();
74 #define SL_DRV_PROTECTION_OBJ_LOCK_FOREVER() (void)_SlDrvProtectionObjLockWaitForever();
75 #define SL_DRV_OBJ_UNLOCK(pObj) (void)_SlDrvObjUnLock(pObj);
76 #define SL_DRV_OBJ_LOCK_FOREVER(pObj) (void)_SlDrvObjLockWaitForever(pObj);
77 #define SL_DRV_SYNC_OBJ_SIGNAL(pObj) (void)_SlDrvSyncObjSignal(pObj);
78 #define SL_DRV_SYNC_OBJ_CLEAR(pObj) (void)sl_SyncObjWait(pObj,SL_OS_NO_WAIT);
79 
80 
81 #ifdef SL_TINY
82 #define SL_DRV_SYNC_OBJ_WAIT_FOREVER(SyncObj) (void)_SlDrvSyncObjWaitForever(SyncObj);
83 #define SL_DRV_LOCK_GLOBAL_LOCK_FOREVER(Flags) (void)_SlDrvObjGlobalLockWaitForever(Flags);
84 #define SL_DRV_LOCK_GLOBAL_UNLOCK(bDecrementApiInProgress) (void)_SlDrvGlobalObjUnLock(bDecrementApiInProgress);
85 #else
86 #define SL_DRV_SYNC_OBJ_WAIT_FOREVER(SyncObj) { \
87 if (SL_API_ABORTED == _SlDrvSyncObjWaitForever(SyncObj)) \
88 { \
89  return SL_API_ABORTED; \
90 } \
91 }
92 #define SL_DRV_SYNC_OBJ_WAIT_TIMEOUT(SyncObj, timeoutVal, opcode) { \
93 if (SL_API_ABORTED == _SlDrvSyncObjWaitTimeout(SyncObj, timeoutVal, opcode)) \
94 { \
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 #endif
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_SET_RESTART_REQUIRED (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_RESTART_REQUIRED) /* bit 8 indicates restart is required due to fatal error */
144 #define SL_UNSET_RESTART_REQUIRED (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_RESTART_REQUIRED)) /* bit 8 indicates restart is required due to fatal error */
145 #define SL_SET_DEVICE_STARTED (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_DEVICE_STARTED) /* bit 9 indicates device is started */
146 #define SL_UNSET_DEVICE_STARTED (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_DEVICE_STARTED)) /* bit 9 indicates device is started */
147 
148 #define SL_SET_DEVICE_STOP_IN_PROGRESS (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_STOP_IN_PROGRESS) /* bit 10 indicates there is stop in progress */
149 #define SL_UNSET_DEVICE_STOP_IN_PROGRESS (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_STOP_IN_PROGRESS)) /* bit 10 indicates there is stop in progress */
150 
151 /* Start in progress */
152 #define SL_SET_DEVICE_START_IN_PROGRESS (g_SlDeviceStatus |= _SL_DRV_STATUS_BIT_START_IN_PROGRESS) /* bit 11 indicates there is start in progress */
153 #define SL_UNSET_DEVICE_START_IN_PROGRESS (g_SlDeviceStatus &= (~_SL_DRV_STATUS_BIT_START_IN_PROGRESS)) /* bit 11 indicates there is start in progress */
154 
155 
156 #define SL_SET_DEVICE_STATUS(x) (g_SlDeviceStatus = ((g_SlDeviceStatus & 0xFF00) | (_u16)x) ) /* bits 0-7 devStatus from NWP */
157 
158 #define _SL_PENDING_RX_MSG(pDriverCB) (RxIrqCnt != (pDriverCB)->RxDoneCnt)
159 
160 /*****************************************************************************/
161 /* Structure/Enum declarations */
162 /*****************************************************************************/
163 
164 typedef struct
165 {
166  _u32 TSPrev;
167  _u32 TSCurr;
168  _u32 DeltaTicks;
169  _u32 DeltaTicksReminder;
170  _i32 Total10MSecUnits;
172 
173 typedef struct
174 {
175  _u8 *pAsyncMsgBuff;
176  _u8 bInCmdContext;
178 
179 typedef struct
180 {
181  _SlOpcode_t Opcode;
182  _SlArgSize_t TxDescLen;
183  _SlArgSize_t RxDescLen;
184 }_SlCmdCtrl_t;
185 
186 typedef struct
187 {
188  _u16 TxPayload1Len;
189  _u16 TxPayload2Len;
190  _i16 RxPayloadLen;
191  _i16 ActualRxPayloadLen;
192  _u8 *pTxPayload1;
193  _u8 *pTxPayload2;
194  _u8 *pRxPayload;
195 }_SlCmdExt_t;
196 
197 typedef struct _SlArgsData_t
198 {
199  _u8 *pArgs;
200  _u8 *pData;
201 } _SlArgsData_t;
202 
203 typedef struct _SlPoolObj_t
204 {
205  _SlSyncObj_t SyncObj;
206  _u8 *pRespArgs;
207  _u8 ActionID;
208  _u8 AdditionalData; /* use for socketID and one bit which indicate supprt IPV6 or not (1=support, 0 otherwise) */
209  _u8 NextIndex;
210 
211 } _SlPoolObj_t;
212 
213 typedef enum
214 {
215  SOCKET_0,
216  SOCKET_1,
217  SOCKET_2,
218  SOCKET_3,
219  SOCKET_4,
220  SOCKET_5,
221  SOCKET_6,
222  SOCKET_7,
223  SOCKET_8,
224  SOCKET_9,
225  SOCKET_10,
226  SOCKET_11,
227  SOCKET_12,
228  SOCKET_13,
229  SOCKET_14,
230  SOCKET_15,
231  MAX_SOCKET_ENUM_IDX,
232 #ifndef SL_TINY
233  ACCEPT_ID = MAX_SOCKET_ENUM_IDX,
234  CONNECT_ID,
235 #else
236  CONNECT_ID = MAX_SOCKET_ENUM_IDX,
237 #endif
238 #ifndef SL_TINY
239  SELECT_ID,
240 #endif
241  GETHOSYBYNAME_ID,
242 #ifndef SL_TINY
243  GETHOSYBYSERVICE_ID,
244  PING_ID,
245  NETAPP_RECEIVE_ID,
246 #endif
247  START_STOP_ID,
248  NETUTIL_CMD_ID,
249  CLOSE_ID,
250  /**********/
251  RECV_ID /* Please note!! this member must be the last in this action enum */
252 }_SlActionID_e;
253 
254 typedef struct _SlActionLookup_t
255 {
256  _u8 ActionID;
257  _u16 ActionAsyncOpcode;
258  _SlSpawnEntryFunc_t AsyncEventHandler;
259 
261 
262 typedef struct
263 {
264  _u8 TxPoolCnt;
265  _u16 MinTxPayloadSize;
266  _SlLockObj_t TxLockObj;
267  _SlSyncObj_t TxSyncObj;
269 
270 typedef enum
271 {
272  RECV_RESP_CLASS,
273  CMD_RESP_CLASS,
274  ASYNC_EVT_CLASS,
275 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
276  MULTI_SELECT_RESP_CLASS,
277 #endif
278  DUMMY_MSG_CLASS
279 }_SlRxMsgClass_e;
280 
281 typedef struct
282 {
283  _u8 *pAsyncBuf; /* place to write pointer to buffer with CmdResp's Header + Arguments */
284  _u8 ActionIndex;
285  _SlSpawnEntryFunc_t AsyncEvtHandler; /* place to write pointer to AsyncEvent handler (calc-ed by Opcode) */
286  _SlRxMsgClass_e RxMsgClass; /* type of Rx message */
287 } AsyncExt_t;
288 
289 typedef _u8 _SlSd_t;
290 
291 typedef struct
292 {
293  _SlCmdCtrl_t *pCmdCtrl;
294  _u8 *pTxRxDescBuff;
295  _SlCmdExt_t *pCmdExt;
296  AsyncExt_t AsyncExt;
298 
299 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
300 
301 typedef struct SlSelectEntry_t
302 {
303  SlSelectAsyncResponse_t Response;
304  _u32 TimeStamp;
305  _u16 readlist;
306  _u16 writelist;
307  _u8 ObjIdx;
309 
310 typedef struct _SlMultiSelectCB_t
311 {
312  _u16 readsds;
313  _u16 writesds;
314  _u16 CtrlSockFD;
315  _u8 ActiveSelect;
316  _u8 ActiveWaiters;
317  _BasicResponse_t SelectCmdResp;
318  _SlSyncObj_t SelectSyncObj;
319  _SlLockObj_t SelectLockObj;
320  _SlSelectEntry_t* SelectEntry[MAX_CONCURRENT_ACTIONS];
322 
323 #else
324 
325 typedef enum
326 {
327  SOCK_TRIGGER_READY,
328  SOCK_TRIGGER_WAITING_FOR_RESP,
329  SOCK_TRIGGER_RESP_RECEIVED
330 } _SlSockTriggerState_e;
331 
332 typedef struct
333 {
334  _SlSockTriggerState_e State;
335  _u8 ObjPoolIdx;
337 
338 typedef struct
339 {
343 
344 #endif
345 
346 #ifdef SL_INC_INTERNAL_ERRNO
347 
348 #define SL_DRVER_ERRNO_FLAGS_UNREAD (1)
349 
350 typedef struct
351 {
352 #ifdef SL_PLATFORM_MULTI_THREADED
353  _i32 Id;
354 #endif
355  _i32 Errno;
356 #ifdef SL_PLATFORM_MULTI_THREADED
357  _u8 Index;
358  _u8 Flags;
359 #endif
360 
362 #endif
363 
364 typedef struct
365 {
366  _SlFd_t FD;
367  _SlCommandHeader_t TempProtocolHeader;
368  P_INIT_CALLBACK pInitCallback;
369 
370  _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS];
371  _u8 FreePoolIdx;
372  _u8 PendingPoolIdx;
373  _u8 ActivePoolIdx;
374  _u32 ActiveActionsBitmap;
375  _SlLockObj_t ProtectionLockObj;
376 
377  _SlSyncObj_t CmdSyncObj;
378  _u8 WaitForCmdResp;
379  _SlFlowContCB_t FlowContCB;
380  _u8 TxSeqNum;
381  _u8 RxDoneCnt;
382  _u16 SocketNonBlocking;
383  _u16 SocketTXFailure;
384  /* for stack reduction the parameters are globals */
385  _SlFunctionParams_t FunctionParams;
386 
387  _u8 ActionIndex;
388  _i8 ApiInProgressCnt; /* Counts how many APIs are in progress */
389 
390 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
391  /* Multiple Select Control block */
392  _SlMultiSelectCB_t MultiSelectCB;
393 #endif
394 
395 #if defined(slcb_SocketTriggerEventHandler)
396  /* Trigger mode control block */
397  _SlSockTriggerSelect_t SocketTriggerSelect;
398 #endif
399 
400 #ifdef SL_INC_INTERNAL_ERRNO
401  _SlDrvErrno_t Errno[MAX_CONCURRENT_ACTIONS];
402 #ifdef SL_PLATFORM_MULTI_THREADED
403  _SlLockObj_t ErrnoLockObj;
404  _u8 ErrnoIndex;
405 #endif
406 #endif
407 
409 
410 extern _volatile _u8 RxIrqCnt;
411 
412 extern _SlLockObj_t GlobalLockObj;
413 extern _u16 g_SlDeviceStatus;
414 
415 extern _SlDriverCb_t* g_pCB;
416 extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc;
417 
418 /*****************************************************************************/
419 /* Function prototypes */
420 /*****************************************************************************/
421 extern _SlReturnVal_t _SlDrvDriverCBInit(void);
422 extern _SlReturnVal_t _SlDrvDriverCBDeinit(void);
423 extern _SlReturnVal_t _SlDrvRxIrqHandler(void *pValue);
424 extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
425 extern _SlReturnVal_t _SlDrvCmdSend_noLock(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
426 extern _SlReturnVal_t _SlDrvCmdSend_noWait(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
427 extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void *pTxRxDescBuff , _SlCmdExt_t *pCmdExt);
428 extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
429 extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
430 extern _SlReturnVal_t _SlDeviceHandleAsync_InitComplete(void *pVoidBuf);
431 extern _SlReturnVal_t _SlSocketHandleAsync_Connect(void *pVoidBuf);
432 extern _SlReturnVal_t _SlSocketHandleAsync_Close(void *pVoidBuf);
433 extern _SlReturnVal_t _SlDrvGlobalObjUnLock(_u8 bDecrementApiInProgress);
434 extern _SlReturnVal_t _SlDrvDriverIsApiAllowed(_u16 Silo);
435 extern _SlReturnVal_t _SlDrvMsgReadSpawnCtx(void *pValue);
436 
437 
438 #ifndef SL_TINY
439 extern _i16 _SlDrvBasicCmd(_SlOpcode_t Opcode);
440 extern _SlReturnVal_t _SlSocketHandleAsync_Accept(void *pVoidBuf);
441 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByService(void *pVoidBuf);
442 extern _SlReturnVal_t _SlSocketHandleAsync_Select(void *pVoidBuf);
443 
444 #ifdef slcb_GetTimestamp
445 extern void _SlDrvStartMeasureTimeout(_SlTimeoutParams_t *pTimeoutInfo, _u32 TimeoutInMsec);
446 extern _u8 _SlDrvIsTimeoutExpired(_SlTimeoutParams_t *pTimeoutInfo);
447 extern void _SlDrvSleep(_u16 DurationInMsec);
448 #endif
449 
450 #endif
451 
452 
453 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByName(void *pVoidBuf);
454 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByAddr(void *pVoidBuf);
455 extern _SlReturnVal_t _SlNetAppHandleAsync_PingResponse(void *pVoidBuf);
456 extern _SlReturnVal_t _SlNetAppEventHandler(void* pArgs);
457 
458 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
459 extern void _SlDrvDispatchHttpServerEvents(SlNetAppHttpServerEvent_t *slHttpServerEvent, SlNetAppHttpServerResponse_t *slHttpServerResponse);
460 #endif
461 
462 #if defined(slcb_NetAppRequestHdlr) || defined(EXT_LIB_REGISTERED_NETAPP_REQUEST_EVENTS)
463 extern void _SlDrvDispatchNetAppRequestEvents(SlNetAppRequest_t *slNetAppRequestEvent, SlNetAppResponse_t *slNetAppResponse);
464 #endif
465 
466 extern void _SlDeviceHandleAsync_Stop(void *pVoidBuf);
467 extern void _SlNetUtilHandleAsync_Cmd(void *pVoidBuf);
468 extern _u8 _SlDrvWaitForPoolObj(_u8 ActionID, _u8 SocketID);
469 extern void _SlDrvReleasePoolObj(_u8 pObj);
470 extern _u16 _SlDrvAlignSize(_u16 msgLen);
471 extern _u8 _SlDrvProtectAsyncRespSetting(_u8 *pAsyncRsp, _SlActionID_e ActionID, _u8 SocketID);
472 extern void _SlNetAppHandleAsync_NetAppReceive(void *pVoidBuf);
473 
474 
475 extern _SlReturnVal_t _SlDeviceEventHandler(void* pEventInfo);
476 extern _SlReturnVal_t _SlDrvSyncObjWaitForever(_SlSyncObj_t *pSyncObj);
477 extern _SlReturnVal_t _SlDrvObjLockWaitForever(_SlLockObj_t *pLockObj);
478 extern _SlReturnVal_t _SlDrvSyncObjWaitTimeout(_SlSyncObj_t *pSyncObj,
479  _u32 timeoutVal,
480  _u32 asyncEventOpcode);
481 
482 extern _SlReturnVal_t _SlDrvSyncObjSignal(_SlSyncObj_t *pSyncObj);
483 extern _SlReturnVal_t _SlDrvObjLock(_SlLockObj_t *pLockObj, _SlTime_t Timeout);
484 extern _SlReturnVal_t _SlDrvProtectionObjLockWaitForever(void);
485 extern _SlReturnVal_t _SlDrvObjUnLock(_SlLockObj_t *pLockObj);
486 extern _SlReturnVal_t _SlDrvProtectionObjUnLock(void);
487 
488 extern void _SlDrvMemZero(void* Addr, _u16 size);
489 extern void _SlDrvResetCmdExt(_SlCmdExt_t* pCmdExt);
490 
491 extern _i8 _SlDrvIsApiInProgress(void);
492 extern void _SlDrvHandleResetRequest(const void* pIfHdl, _i8* pDevName);
493 
494 #ifndef SL_TINY
495 extern void _SlDrvHandleFatalError(_u32 errorId, _u32 info1, _u32 info2);
496 extern void _SlDrvHandleAssert(void);
497 
498 #endif
499 
500 _i32 _SlDrvSetErrno(_i32 Errno);
501 _i32* _SlDrvallocateErrno(_i32 Errno);
502 
503 #ifndef SL_INC_INTERNAL_ERRNO
504 extern int slcb_SetErrno(int Errno);
505 #endif
506 
507 #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3))
508 #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3))
509 
510 
511 #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \
512  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayload1Len + pCmdExt->TxPayload2Len)) : \
513  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen)))
514 
515 #ifdef __cplusplus
516 }
517 #endif /* __cplusplus */
518 
519 #endif /* __DRIVER_INT_H__ */
Definition: driver.h:301