SimpleLink CC3120/CC3220 Host Driver  Version 2.0.1.27
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 } _SlPoolObj_t;
211 
212 typedef enum
213 {
214  SOCKET_0,
215  SOCKET_1,
216  SOCKET_2,
217  SOCKET_3,
218  SOCKET_4,
219  SOCKET_5,
220  SOCKET_6,
221  SOCKET_7,
222  SOCKET_8,
223  SOCKET_9,
224  SOCKET_10,
225  SOCKET_11,
226  SOCKET_12,
227  SOCKET_13,
228  SOCKET_14,
229  SOCKET_15,
230  MAX_SOCKET_ENUM_IDX,
231 #ifndef SL_TINY
232  ACCEPT_ID = MAX_SOCKET_ENUM_IDX,
233  CONNECT_ID,
234 #else
235  CONNECT_ID = MAX_SOCKET_ENUM_IDX,
236 #endif
237 #ifndef SL_TINY
238  SELECT_ID,
239 #endif
240  GETHOSYBYNAME_ID,
241 #ifndef SL_TINY
242  GETHOSYBYSERVICE_ID,
243  PING_ID,
244  NETAPP_RECEIVE_ID,
245 #endif
246  START_STOP_ID,
247  NETUTIL_CMD_ID,
248  CLOSE_ID,
249  START_TLS_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 typedef struct
347 {
348  _SlFd_t FD;
349  _SlCommandHeader_t TempProtocolHeader;
350  P_INIT_CALLBACK pInitCallback;
351 
352  _SlPoolObj_t ObjPool[MAX_CONCURRENT_ACTIONS];
353  _u8 FreePoolIdx;
354  _u8 PendingPoolIdx;
355  _u8 ActivePoolIdx;
356  _u32 ActiveActionsBitmap;
357  _SlLockObj_t ProtectionLockObj;
358 
359  _SlSyncObj_t CmdSyncObj;
360  _u8 WaitForCmdResp;
361  _SlFlowContCB_t FlowContCB;
362  _u8 TxSeqNum;
363  _u8 RxDoneCnt;
364  _u16 SocketNonBlocking;
365  _u16 SocketTXFailure;
366  /* for stack reduction the parameters are globals */
367  _SlFunctionParams_t FunctionParams;
368 
369  _u8 ActionIndex;
370  _i8 ApiInProgressCnt; /* Counts how many APIs are in progress */
371 
372 #if (defined(SL_PLATFORM_MULTI_THREADED) && !defined(slcb_SocketTriggerEventHandler))
373  /* Multiple Select Control block */
374  _SlMultiSelectCB_t MultiSelectCB;
375 #endif
376 
377 #if defined(slcb_SocketTriggerEventHandler)
378  /* Trigger mode control block */
379  _SlSockTriggerSelect_t SocketTriggerSelect;
380 #endif
381 
383 
384 extern _volatile _u8 RxIrqCnt;
385 
386 extern _SlLockObj_t GlobalLockObj;
387 extern _u16 g_SlDeviceStatus;
388 
389 extern _SlDriverCb_t* g_pCB;
390 extern P_SL_DEV_PING_CALLBACK pPingCallBackFunc;
391 
392 /*****************************************************************************/
393 /* Function prototypes */
394 /*****************************************************************************/
395 extern _SlReturnVal_t _SlDrvDriverCBInit(void);
396 extern _SlReturnVal_t _SlDrvDriverCBDeinit(void);
397 extern _SlReturnVal_t _SlDrvRxIrqHandler(void *pValue);
398 extern _SlReturnVal_t _SlDrvCmdOp(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
399 extern _SlReturnVal_t _SlDrvCmdSend_noLock(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
400 extern _SlReturnVal_t _SlDrvCmdSend_noWait(_SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
401 extern _SlReturnVal_t _SlDrvCmdSend(_SlCmdCtrl_t *pCmdCtrl , void *pTxRxDescBuff , _SlCmdExt_t *pCmdExt);
402 extern _SlReturnVal_t _SlDrvDataReadOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
403 extern _SlReturnVal_t _SlDrvDataWriteOp(_SlSd_t Sd, _SlCmdCtrl_t *pCmdCtrl , void* pTxRxDescBuff , _SlCmdExt_t* pCmdExt);
404 extern _SlReturnVal_t _SlDeviceHandleAsync_InitComplete(void *pVoidBuf);
405 extern _SlReturnVal_t _SlSocketHandleAsync_Connect(void *pVoidBuf);
406 extern _SlReturnVal_t _SlSocketHandleAsync_Close(void *pVoidBuf);
407 extern _SlReturnVal_t _SlDrvGlobalObjUnLock(_u8 bDecrementApiInProgress);
408 extern _SlReturnVal_t _SlDrvDriverIsApiAllowed(_u16 Silo);
409 extern _SlReturnVal_t _SlDrvMsgReadSpawnCtx(void *pValue);
410 
411 
412 #ifndef SL_TINY
413 extern _i16 _SlDrvBasicCmd(_SlOpcode_t Opcode);
414 extern _SlReturnVal_t _SlSocketHandleAsync_Accept(void *pVoidBuf);
415 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByService(void *pVoidBuf);
416 extern _SlReturnVal_t _SlSocketHandleAsync_Select(void *pVoidBuf);
417 extern _SlReturnVal_t _SlSocketHandleAsync_StartTLS(void *pVoidBuf);
418 
419 #ifdef slcb_GetTimestamp
420 extern void _SlDrvStartMeasureTimeout(_SlTimeoutParams_t *pTimeoutInfo, _u32 TimeoutInMsec);
421 extern _u8 _SlDrvIsTimeoutExpired(_SlTimeoutParams_t *pTimeoutInfo);
422 extern void _SlDrvSleep(_u16 DurationInMsec);
423 #endif
424 
425 #endif
426 
427 
428 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByName(void *pVoidBuf);
429 extern _SlReturnVal_t _SlNetAppHandleAsync_DnsGetHostByAddr(void *pVoidBuf);
430 extern _SlReturnVal_t _SlNetAppHandleAsync_PingResponse(void *pVoidBuf);
431 extern _SlReturnVal_t _SlNetAppEventHandler(void* pArgs);
432 
433 #if defined(slcb_NetAppHttpServerHdlr) || defined(EXT_LIB_REGISTERED_HTTP_SERVER_EVENTS)
434 extern void _SlDrvDispatchHttpServerEvents(SlNetAppHttpServerEvent_t *slHttpServerEvent, SlNetAppHttpServerResponse_t *slHttpServerResponse);
435 #endif
436 
437 #if defined(slcb_NetAppRequestHdlr) || defined(EXT_LIB_REGISTERED_NETAPP_REQUEST_EVENTS)
438 extern void _SlDrvDispatchNetAppRequestEvents(SlNetAppRequest_t *slNetAppRequestEvent, SlNetAppResponse_t *slNetAppResponse);
439 #endif
440 
441 extern void _SlDeviceHandleAsync_Stop(void *pVoidBuf);
442 extern void _SlNetUtilHandleAsync_Cmd(void *pVoidBuf);
443 extern _u8 _SlDrvWaitForPoolObj(_u8 ActionID, _u8 SocketID);
444 extern void _SlDrvReleasePoolObj(_u8 pObj);
445 extern _u16 _SlDrvAlignSize(_u16 msgLen);
446 extern _u8 _SlDrvProtectAsyncRespSetting(_u8 *pAsyncRsp, _SlActionID_e ActionID, _u8 SocketID);
447 extern void _SlNetAppHandleAsync_NetAppReceive(void *pVoidBuf);
448 
449 
450 extern _SlReturnVal_t _SlDeviceEventHandler(void* pEventInfo);
451 extern _SlReturnVal_t _SlDrvSyncObjWaitForever(_SlSyncObj_t *pSyncObj);
452 extern _SlReturnVal_t _SlDrvObjLockWaitForever(_SlLockObj_t *pLockObj);
453 extern _SlReturnVal_t _SlDrvSyncObjWaitTimeout(_SlSyncObj_t *pSyncObj,
454  _u32 timeoutVal,
455  _u32 asyncEventOpcode);
456 
457 extern _SlReturnVal_t _SlDrvSyncObjSignal(_SlSyncObj_t *pSyncObj);
458 extern _SlReturnVal_t _SlDrvObjLock(_SlLockObj_t *pLockObj, _SlTime_t Timeout);
459 extern _SlReturnVal_t _SlDrvProtectionObjLockWaitForever(void);
460 extern _SlReturnVal_t _SlDrvObjUnLock(_SlLockObj_t *pLockObj);
461 extern _SlReturnVal_t _SlDrvProtectionObjUnLock(void);
462 
463 extern void _SlDrvMemZero(void* Addr, _u16 size);
464 extern void _SlDrvResetCmdExt(_SlCmdExt_t* pCmdExt);
465 
466 extern _i8 _SlDrvIsApiInProgress(void);
467 extern void _SlDrvHandleResetRequest(const void* pIfHdl, _i8* pDevName);
468 
469 #ifndef SL_TINY
470 extern void _SlDrvHandleFatalError(_u32 errorId, _u32 info1, _u32 info2);
471 extern void _SlDrvHandleAssert(void);
472 
473 #endif
474 
475 #define _SL_PROTOCOL_ALIGN_SIZE(msgLen) (((msgLen)+3) & (~3))
476 #define _SL_IS_PROTOCOL_ALIGNED_SIZE(msgLen) (!((msgLen) & 3))
477 
478 
479 #define _SL_PROTOCOL_CALC_LEN(pCmdCtrl,pCmdExt) ((pCmdExt) ? \
480  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen) + _SL_PROTOCOL_ALIGN_SIZE(pCmdExt->TxPayload1Len + pCmdExt->TxPayload2Len)) : \
481  (_SL_PROTOCOL_ALIGN_SIZE(pCmdCtrl->TxDescLen)))
482 
483 #ifdef __cplusplus
484 }
485 #endif /* __cplusplus */
486 
487 #endif /* __DRIVER_INT_H__ */
Definition: driver.h:301