1 /*
2  * Copyright (C) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FILLP_CALLBACKS_H
17 #define FILLP_CALLBACKS_H
18 
19 #include "fillptypes.h"
20 #ifdef __cplusplus
21 extern "C" {
22 #endif
23 
24 /**
25  * @ingroup Callbacks
26  * @brief
27  * This callback is for calloc system function to allocate the requested memory.
28  *
29  * @param[in] items Indicates the number of elements to be allocated.
30  * @param[in] size size of elements.
31  * @return
32  * This function returns a pointer to the allocated memory or return NULL in case of failure of the request.
33  */
34 typedef void  *(*FillpMemCallocFunc)(IN FILLP_UINT32 items, IN FILLP_UINT32 size);
35 
36 /**
37  * @ingroup Callbacks
38  * @brief
39  * This callback is for malloc system function to allocate the requested memory.
40  *
41  * @param[in] size Indicates the memory size to be allocated.
42  * @return
43  * This function returns a pointer to the allocated memory or returns NULL if the request fails.
44  */
45 typedef void *(*FillpMemAllocFunc)(IN FILLP_UINT32 size);
46 
47 /**
48  * @ingroup Callbacks
49  * @brief
50  * This callback is for free system function to free the memory block.
51  *
52  * @param[in] addr Indicates the address of the memory to be freed.
53  * @return
54  * On success : FILLP_SUCCESS
55  * On failure : other error codes.
56  */
57 typedef void (*FillpMemFreeFunc)(IN void *addr);
58 
59 /**
60  * @ingroup Callbacks
61  * @brief
62  * This is a callback for memset_s system function to fill the specified memory block with the specified characters.
63  *
64  * @param[in] dest Pointer to destination memory buffer.
65  * @param[in] destMax Length of destination memory buffer.
66  * @param[in] character Character to be set.
67  * @param[in] count Number of bytes to set.
68  * @return
69  * On success : FILLP_SUCCESS
70  * On failure : other error codes.
71  */
72 typedef FILLP_INT (*FillpMemSetFunc)(void *dest, size_t destMax, int c, size_t count);
73 
74 /**
75  * @ingroup Callbacks
76  * @brief
77  * This callback is for memcpy_s system function to copy memory.
78  *
79  * @param[out] dest Indicates a pointer to the destination memory buffer.
80  * @param[in] destMax Indicates the size of the destination memory buffer.
81  * @param[in] src Indicates a pointer to the source memory buffer.
82  * @param[in] count Indicates the number of bytes to copy.
83  * @return
84  * On success : FILLP_SUCCESS
85  * On failure : other error codes.
86  */
87 typedef FILLP_INT (*FillpMemCopyFunc)(void *dest, size_t destMax, const void *src, size_t count);
88 
89 /**
90  * @ingroup Callbacks
91  * @brief
92  * This callback is for string concatenations system function to concatenate strings.
93  *
94  * @param[out] dest Indicates a pointer to the destination memory buffer.
95  * @param[in] destMax Indicates the length of the destination memory buffer.
96  * @param[in] src Indicates a pointer to the source memory buffer.
97  * @param[in] count Indicates the number of bytes to be copy.
98  * @return
99  * On success : 0
100  * On failure : other error codes.
101  */
102 typedef FILLP_INT (*FillpStrncatFunc)(char *strDest, size_t destMax, const char *strSrc, size_t count);
103 
104 /**
105  * @ingroup Callbacks
106  * @brief
107  * Callback for string copy system function.
108  *
109  * @param[out] dest Indicates a pointer to  the  destination memory buffer.
110  * @param[in] destMax Indicates the length of the destination memory buffer.
111  * @param[in] src Indicates a pointer to the source memory buffer.
112  * @param[in] count Indicates the number of bytes to be copied.
113  * @return
114  * On success : 0
115  * On truncation : STRUNCATE
116  * On failure : other error codes.
117  */
118 typedef FILLP_INT (*FillpStrncpyFunc)(char *strDest, size_t destMax, const char *strSrc, size_t count);
119 
120 /**
121  * @ingroup Callbacks
122  * @brief
123  * This is a callback for strlen system function to get the length of a string.
124  *
125  * @param[in] str Pointer to string.
126  * @return
127  * This returns length of the string.
128  */
129 typedef FILLP_UINT32 (*FillpStrLenFunc)(IN FILLP_CHAR *str);
130 
131 /**
132  * @ingroup Callbacks
133  * @brief
134  * This is a callback for select system function to allow a program to check multiple file descriptors.
135  *
136  * @param[in] maxFd Indicates the fd value to be selected.
137  * @param[in] readFds Indicates the fd for read.
138  * @param[in] writeFds Indicates the fd for write.
139  * @param[out] exceptFds Indicates the fd for errors.
140  * @param[in] timeVal Indicates the max time for select to wait.
141  * @return
142  * On success : Total number of socket handles that are ready.
143  * On failure : other error codes.
144  */
145 typedef FILLP_INT (*FillpSelectFunc)(IN FILLP_INT maxFd, IN void *readFds,
146     IN void *writeFds, IO void *exceptFds, IN void *timeVal);
147 
148 /**
149  * @ingroup Callbacks
150  * @brief
151  * This callback is for the ioctl socket to control the I/O mode of a socket.
152  *
153  * @param[in] fd Indicates the connection fd.
154  * @param[in] cmd Indicates the command to perform on socket.
155  * @param[in] args Indicates arguments for socket.
156  * @return
157  * On success : 0
158  * On failure : other error codes.
159  */
160 typedef FILLP_INT (*FillpIoctlFunc)(IN FILLP_INT fd, IN FILLP_INT cmd, IN FILLP_ULONG *args);
161 
162 /**
163  * @ingroup Callbacks
164  * @brief
165  * This callback is for the fcntl system function to manipulate file descriptor.
166  *
167  * @param[in] fd Indicates a connection file descriptor.
168  * @param[in] cmd Indicates the command to perform on socket.
169  * @param[in] val Indicates the arguments for socket.
170  * @return
171  * On success : value based on command
172  * On failure : other error codes.
173  */
174 typedef FILLP_INT (*FillpFcntlFunc)(IN FILLP_INT fd, IN FILLP_INT cmd, IN FILLP_INT val);
175 
176 /**
177  * @ingroup Callbacks
178  * @brief
179  * This callback is to set the socket option.
180  *
181  * @param[in] fd Indicates the socket file descriptor.
182  * @param[in] level Indicates the socket level.
183  * @param[in] optName Indicates the socket option name.
184  * @param[in] optVal Indicates the socket option value.
185  * @param[in] optLen Indicates the socket option length.
186  * @return
187  * On success : FILLP_SUCCESS
188  * On failure : other error codes.
189  */
190 typedef FILLP_INT (*FillpSetSockOptFunc)(IN FILLP_INT fd, IN FILLP_INT level,
191     IN FILLP_INT optName, IN FILLP_CONST void *optVal, IN FILLP_INT optLen);
192 
193 /**
194  * @ingroup Callbacks
195  * @brief
196  * This callback is to get the socket options.
197  *
198  * @param[in] fd Indicates the socket file descriptor.
199  * @param[in] level Indicates the socket level.
200  * @param[in] optName Indicates the socket option name.
201  * @param[out] optVal Indicates the socket option value.
202  * @param[out] optLen Indicates the socket option length.
203  * @return
204  * On success : FILLP_SUCCESS
205  * On failure : other error codes.
206  */
207 typedef FILLP_INT (*FillpGetSockOptFunc)(IN FILLP_INT fd, IN FILLP_INT level,
208     IN FILLP_INT optName, IO void *optVal, IO FILLP_INT *optLen);
209 
210 /**
211  * @ingroup Callbacks
212  * @brief
213  * This callback is for the rand system function to generate random number.
214  *
215  * @return
216  * On success : integer value between 0 and RAND_MAX
217  * On failure : other error codes.
218  */
219 typedef FILLP_UINT32 (*FillpRandFunc)(IN void);
220 
221 /**
222  * @ingroup Callbacks
223  * @brief
224  * This callback is for generating the cryptographic quality random number.
225  *
226  * @return
227  * On success : integer value between 0 and RAND_MAX
228  * On failure : other error codes.
229  */
230 typedef FILLP_UINT32 (*FillpCryptoRandFunc)(IN void);
231 
232 /**
233  * @ingroup Callbacks
234  * @brief
235  * This callback is for memchr system function to search the first occurrence of the character
236  * in the first n bytes of the string.
237  *
238  * @param[in] fd Indicates the pointer to the block of memory where the search is performed.
239  * @param[in] c Indicates the value to be passed as an int, but the function performs a
240  * byte by per byte search using the unsigned char conversion of this value.
241  * @param[in] n Indicates the number of bytes to be analyzed.
242  * @return
243  * This returns a pointer to the matching byte or FILLP_NULL_PTR if the character does not
244  * occur in the given memory area.
245  */
246 typedef void *(*FillpMemChrFunc)(IN FILLP_CONST void *fd, IN FILLP_INT c, IN FILLP_SIZE_T n);
247 
248 /**
249  * @ingroup Callbacks
250  * @brief
251  * This callback is to create the thread.
252  *
253  * @param[in] param Indicates a pointer to the ThreadParam struct.
254  * @param[out] threadId O|Indicates the thread ID.
255  * @return
256  * On success : 0
257  * On failure : other error codes.
258  */
259 typedef FILLP_INT (*FillpCreateThreadFunc)(IN void *param, IO void *threadId);
260 
261 /**
262  * @ingroup Callbacks
263  * @brief
264  * This is a callback for the system architecture initialization function.
265  *
266  * @return
267  * On success : ERR_OK
268  * On failure : ERR_FAILURE.
269  */
270 typedef FILLP_INT (*FillpSysArcInitFunc)(IN void);
271 
272 /**
273  * @ingroup Callbacks
274  * @brief
275  * This callback is to get the system current time in long format.
276  *
277  * @return
278  * On success : FILLP_SUCCESS
279  * On failure : error.
280  */
281 typedef FILLP_LLONG (*FillpSysArcGetCurTimeFunc)(IN void);
282 
283 /**
284  * @ingroup Callbacks
285  * @brief
286  * This callback is to increment(increases by 1) the value of the specified variable as an atomic operation.
287  *
288  * @param[in,out] var Indicates the variable to increment.
289  * @param[in] val Indicates the value of the variable.
290  * @return
291  * Returns the resulting incremented value.
292  */
293 typedef FILLP_INT (*FillpSysArchAtomicIncFunc)(IO SysArchAtomic *var, FILLP_INT val);
294 
295 /**
296  * @ingroup Callbacks
297  * @brief
298  * This callback is to increment(increases by 1) the value of the specified variable and
299  * test whether the resulting incremented value is 0 as an atomic operation.
300  *
301  * @param[in,out] var Indicates the variable to increment.
302  * @return
303  * Returns the checking result whether the resulting incremented value is 0 or not.
304  */
305 typedef FILLP_BOOL (*FillpSysArchAtomicIncAndTestFunc)(IO SysArchAtomic *var);
306 
307 /**
308  * @ingroup Callbacks
309  * @brief
310  * This callback is to decrement(decreases by 1) the value of the specified variable as an atomic operation.
311  *
312  * @param[in,out] var Indicates the variable to decrement.
313  * @param[in] val Indicates the value of the variable.
314  * @return
315  * It returns the resulting decremented value.
316  */
317 typedef FILLP_INT (*FillpSysArchAtomicDecFunc)(IO SysArchAtomic *var, FILLP_INT val);
318 
319 /**
320  * @ingroup Callbacks
321  * @brief
322  * This callback is to decrement(decreases by 1) the value of the specified variable and
323  * test whether the resulting decremented value is 0 as an atomic operation.
324  *
325  * @param[in,out] var Indicates the variable to increment.
326  * @return
327  * Returns the checking result whether the resulting decremented value is 0 or not.
328  */
329 typedef FILLP_BOOL (*FillpSysArchAtomicDecAndTestFunc)(IO SysArchAtomic *var);
330 
331 /**
332  * @ingroup Callbacks
333  * @brief
334  * This callback is to read the value of the specified variable as an atomic operation.
335  *
336  * @param[out] var Variable to read.
337  * @return
338  * This return the read atomic variable.
339  */
340 typedef FILLP_INT (*FillpSysArchAtomicReadFunc)(IO SysArchAtomic *var);
341 
342 /**
343  * @ingroup Callbacks
344  * @brief
345  * This callback is to set the value of the specified variable as an atomic operation.
346  *
347  * @param[in] var A pointer to the value to be exchanged.
348  * @param[in] newValue The value to be exchanged with the value pointed to by var.
349  * @return
350  * It return the initial value of var parameter.
351  */
352 typedef FILLP_INT (*FillpSysArchAtomicSetFunc)(IN SysArchAtomic *var, IN FILLP_INT newValue);
353 
354 /**
355  * @ingroup Callbacks
356  * @brief
357  * This callback is to perform an atomic compare-and-exchange operation on the specified values.
358  *
359  * @param[out] sem Indicates a pointer to the destination value.
360  * @param[in] oldValue Indicates the exchange value.
361  * @param[in] newValue Indicates the value to compare to sem.
362  * @return
363  * This returns the initial value of sem parameter.
364  */
365 typedef FILLP_INT (*FillpSysArchCompAndSwapFunc)(IO volatile FILLP_ULONG *sem,
366     IN volatile FILLP_ULONG oldValue, IN volatile FILLP_ULONG newValue);
367 
368 /**
369  * @ingroup Callbacks
370  * @brief
371  * This callback is for sleep system function.
372  *
373  * @param[in] time The time interval(in milliseconds)for which execution is to be suspended.
374  * @return
375  * void
376  */
377 typedef void (*FillpSysSleepMsFunc)(IN FILLP_UINT time); /* In Millseconds */
378 
379 /**
380  * @ingroup Callbacks
381  * @brief
382  * This callback for the usleep system function to suspend execution for microsecond intervals.
383  *
384  * @param[in] time The time interval for which execution is to be suspended, in microseconds.
385  * @return
386  * It returns 0 on success or -1 on error.
387  */
388 typedef FILLP_INT (*FillpSysUSleepFunc)(IN FILLP_UINT time); /* us */
389 
390 /**
391  * @ingroup Callbacks
392  * @brief
393  * This callback is for _mm_pause function to PAUSE instruction for tight loops (avoid busy waiting).
394  *
395  * @return
396  * void
397  */
398 typedef void (*FillpRtePauseFunc)(void);
399 
400 /**
401  * @ingroup Callbacks
402  * @brief
403  * This callback is for init_sem system function to initialize the semaphore.
404  *
405  * @param[in] sem Indicates a pointer to semaphore.
406  * @param[in] value Indicates the value of the initialized semaphore.
407  * @return
408  * Initialize the semaphore in sem on successful or error on failure.
409  */
410 typedef FILLP_INT (*FillpSemFunc)(IO SYS_ARCH_SEM *sem, IN FILLP_ULONG value);
411 
412 /**
413  * @ingroup Callbacks
414  * @brief
415  * This callback is to lock the semaphore referenced by sem only if the semaphore is currently not locked.
416  *
417  * @param[out] sem Indicates a pointer to a semaphore to be locked.
418  * @return
419  * On success : FILLP_SUCCESS
420  * On failure : error.
421  */
422 typedef FILLP_INT (*FillpSemTryWaitFunc)(IN SYS_ARCH_SEM *sem);
423 
424 /**
425  * @ingroup Callbacks
426  * @brief
427  * This callback is to lock the semaphore referenced by sem by performing a semaphore lock operation on that semaphore.
428  *
429  * @param[in] sem Indicates a pointer to a semaphore to be locked.
430  * @return
431  * On success : FILLP_SUCCESS
432  * On failure : error.
433  *
434  */
435 typedef FILLP_INT (*FillpSemWaitFunc)(IN SYS_ARCH_SEM *sem);
436 
437 /**
438  * @ingroup Callbacks
439  * @brief
440  * This callback unlocks the semaphore referenced by the sem parameter by performing a semaphore
441  * unlock operation on that semaphore.
442  *
443  * @param[in] sem Indicates a pointer to the semaphore to be unlocked.
444  * @return
445  * On success : FILLP_SUCCESS
446  * On failure : error.
447  */
448 typedef FILLP_INT (*FillpSemPostFunc)(IN SYS_ARCH_SEM *sem);
449 
450 /**
451  * @ingroup Callbacks
452  * @brief
453  * This callback is to destroy the unnamed semaphore indicated by sem.
454  *
455  * @param[in] sem Indicates a pointer to the semaphore to be destroyed.
456  * @return
457  * On success : FILLP_SUCCESS
458  * On failure : error.
459  */
460 typedef FILLP_INT (*FillpSemDestroyFunc)(IN SYS_ARCH_SEM *sem);
461 
462 /**
463  * @ingroup Callbacks
464  * @brief
465  * This is a callback for SYS_ARCH_SEM_CLOSE.
466  *
467  * @param[in] sem Indicates a pointer to SYS_ARCH_RW_SEM.
468  *
469  * @return
470  * On success : zero
471  * On failure : error.
472  *
473  */
474 typedef FILLP_INT (*FillpRWSemInitFunc)(IO SYS_ARCH_RW_SEM *sem);
475 
476 /**
477  * @ingroup Callbacks
478  * @brief
479  * This callback is to lock the read semaphore referenced by sem only if the semaphore is currently not locked.
480  *
481  * @param[in] *sem Indicates a pointer to semaphore to be locked.
482  *
483  * @return
484  * On success : zero
485  * On failure : error.
486  */
487 typedef FILLP_INT (*FillpRWSemTryRDWaitFunc)(IN SYS_ARCH_RW_SEM *sem);
488 
489 /**
490  * @ingroup Callbacks
491  * @brief
492  * This callback is used to lock the write semaphore referenced by sem only if the semaphore is currently not locked.
493  *
494  * @param[in] *sem Indicates a pointer to the semaphore to be locked.
495  * @return
496  * On success : zero
497  * On failure : error.
498  */
499 typedef FILLP_INT (*FillpRWSemTryWRWaitFunc)(IN SYS_ARCH_RW_SEM *sem);
500 
501 /**
502  * @ingroup Callbacks
503  * @brief
504  * This callback for sem_wait system function.
505  *
506  * @param[in] *sem Indicates a pointer to SYS_ARCH_RW_SEM.
507  * @return
508  * On success : zero
509  * On failure : error.
510  */
511 typedef FILLP_INT (*FillpRWSemWRWaitFunc)(IN SYS_ARCH_RW_SEM *sem);
512 
513 /**
514  * @ingroup Callbacks
515  * @brief
516  * Callback for sem_post system function.
517  *
518  * @param[in] *sem Indicates a pointer to SYS_ARCH_RW_SEM.
519  * @return
520  * On success : zero
521  * On failure : error.
522  */
523 typedef FILLP_INT (*FillpRWSemRDPostFunc)(IN SYS_ARCH_RW_SEM *sem);
524 
525 /**
526  * @ingroup Callbacks
527  * @brief
528  * Callback for sem_post system function.
529  *
530  * @param[in] *sem Indicates a pointer to SYS_ARCH_RW_SEM.
531  * @return
532  * On success : zero
533  * On failure : error.
534  */
535 typedef FILLP_INT (*FillpRWSemWRPostFunc)(IN SYS_ARCH_RW_SEM *sem);
536 
537 /**
538  * @ingroup Callbacks
539  * @brief
540  * Callback for sem_destroy system function.
541  *
542  * @param[in] *sem Indicates a pointer to SYS_ARCH_RW_SEM.
543  * @return
544  * On success : zero
545  * On failure : error.
546  */
547 typedef FILLP_INT (*FillpRWSemDestroyFunc)(IN SYS_ARCH_RW_SEM *sem);
548 
549 /**
550  * @ingroup Callbacks
551  * @brief
552  * This is a callback for creating a socket.
553  *
554  * @param[in] domain Indicates the address family.
555  * @param[in] type Indicates the new socket.
556  * @param[in] protocol Indicates the protocol to be used.
557  * @return
558  * On success : zero
559  * On failure : error.
560  */
561 typedef FILLP_INT32 (*FillpCreateSocketFunc)(IN FILLP_INT32 domain, IN FILLP_INT32 type, IN FILLP_INT32 protocol);
562 
563 /**
564  * @ingroup Callbacks
565  * @brief
566  * This callback associates(bind) a local address with a socket.
567  *
568  * @param[in] fd Specifies the file descriptor of the socket to be bound.
569  * @param[in] myAddr Points to a SockAddr structure containing the address to be bound to the socket.
570  * @param[in] addrLen Specifies the length of the SockAddr structure pointed to by the pvMyaddr argument.
571  * @return
572  * On success : zero
573  * On failure : error.
574  */
575 typedef FILLP_INT32 (*FillpBindSocketFunc)(IN FILLP_INT32 fd, IN FILLP_CONST void *myAddr, IN FILLP_INT32 addrLen);
576 
577 /**
578  * @ingroup Callbacks
579  * @brief
580  * This callback is to close an existing socket.
581  *
582  * @param[in] ifd Indicates the descriptor identifying the socket to close.
583  * @return
584  * On success : zero
585  * On failure : error.
586  */
587 typedef FILLP_INT32 (*FillpCloseSocketFunc)(IN FILLP_INT32 fd);
588 
589 /**
590  * @ingroup Callbacks
591  * @brief
592  * This callback is used to send system function to send messages on socket.
593  *
594  * @param[in] fd Specifies the socket file descriptor.
595  * @param[in] buf Points to a buffer containing the message to be sent.
596  * @param[in] len Specifies the buffer length.
597  * @param[in] flags Specifies the type of message transmission.
598  * @param[in] to Points to a SockAddr structure containing the destination address.
599  * @param[in] toLen Specifies the length of the SockAddr structure.
600  * @return
601  * On success :  Number of bytes sent
602  * On failure : error.
603  */
604 typedef FILLP_INT (*FillpSendtoFunc)(IN FILLP_INT fd, IN FILLP_CONST void *buf,
605     IN FILLP_SIZE_T len, IN FILLP_INT flags, IN FILLP_CONST void *to, IN FILLP_SIZE_T toLen);
606 
607 /**
608  * @ingroup Callbacks
609  * @brief
610  * This is a callback for the send system function to send a message on a socket.
611  *
612  * @param[in] fd Specifies the socket file descriptor.
613  * @param[in] buffer Points to the buffer containing the message to send.
614  * @param[in] bytes Specifies the length of the message in bytes.
615  * @param[in] flags Specifies the type of message transmission.
616  * @return
617  * On success :  Number of bytes sent
618  * On failure : error.
619  */
620 typedef FILLP_INT (*FillpSendFunc)(IN FILLP_INT fd, IN FILLP_CONST void *buffer,
621     IN FILLP_INT bytes, IN FILLP_INT flags);
622 
623 /**
624  * @ingroup Callbacks
625  * @brief
626  * This is a callback for for sending multiple messages on a socket in a single
627  * system call. Equivalent to sendmmsg() in kernel.
628  *
629  * @param[in] fd Specifies the socket file descriptor.
630  * @param[in] buffer Points to the buffer containing the message to send.
631  * @param[in] size Specifies the number of elements sent out.
632  * @param[in] flags Indicates the flags.
633  * @return
634  * On success : Number of data elements sent
635  * On failure : error.
636  */
637 typedef FILLP_INT (*FillpSendFuncmmsg)(IN FILLP_INT fd, IN FILLP_CONST void *buffer,
638     IN FILLP_UINT32 size, IN FILLP_UINT32 flags);
639 
640 /**
641  * @ingroup Callbacks
642  * @brief
643  * This is a callback for the receiving multiple messages on a socket in a
644  * single system call. equivalent to recvmmsg( ) in kernel.
645  *
646  * @param[in] fd Specifies the socket file descriptor.
647  * @param[in] buffer Points to the buffer containing the message to receive.
648  * @param[in] size Specifies the number of elements which can be received.
649  * @param[in] flags Indicates the flags.
650  * @param[in] timeout Indicates the timeout value.
651  * @return
652  * On success : Number of data elements received.
653  * On failure : error.
654  */
655 typedef FILLP_INT (*FillpRecvmmsgFunc)(IN FILLP_INT fd, IN FILLP_CONST void *buffer,
656     IN FILLP_UINT32 size, IN FILLP_UINT32 flags, IN void *timeout);
657 
658 /**
659  * @ingroup Callbacks
660  * @brief
661  * This is a callback for the getsockname system function to get the socket name.
662  *
663  * @param[in] fd Indicates the socket file descriptor.
664  * @param[in] myAddr Indicates the address which the socket is bound to.
665  * @param[out] addrLen Indicates the address length.
666  * @return
667  * On success :  Number of bytes sent
668  * On failure : error.
669  */
670 typedef FILLP_INT32 (*FillpGetSockNameFunc)(IN FILLP_INT32 fd, IN void *myAddr, IO void *addrLen);
671 
672 /**
673  * @ingroup Callbacks
674  * @brief
675  * This is a callback to connect system function to initiate a connection on a socket.
676  *
677  * @param[in] fd Indicates the socket file descriptor.
678  * @param[in] myAddr Indicates the address which the socket is bound to.
679  * @param[out] addrLen Indicates the address length.
680  * @return
681  * On success : Number of bytes sent
682  * On failure : error.
683  */
684 typedef FILLP_INT32 (*FillpConnectFunc)(IN FILLP_INT32 fd, IN FILLP_CONST void *myAddr,
685     IN FILLP_INT32 addrLen);
686 
687 typedef void *FT_FD_SET;
688 
689 /**
690  * @ingroup Callbacks
691  * @brief
692  * This callback is to clear the file descriptor set.
693  *
694  * @param[in] fd socket fd.
695  * @param[in] socketDescriptorSet socket descriptor set
696  * @return
697  */
698 typedef void (*FillpFdClrFunc)(IN FILLP_UINT fd, IN FT_FD_SET socketDescriptorSet);
699 
700 /**
701  * @ingroup Callbacks
702  * @brief
703  * This callback is set the socket in the file descriptor set.
704  *
705  * @param[in] fd Indicates the socket file descriptor.
706  * @param[in] socketDescriptorSet Indicates the socket descriptor set.
707  * @return
708  */
709 typedef void (*FillpFdSetFunc)(IN FILLP_UINT fd, IN FT_FD_SET socketDescriptorSet);
710 
711 /**
712  * @ingroup Callbacks
713  * @brief
714  * This callback is check if this socket ID is already set in the file descriptor set.
715  *
716  * @param[in] fd Indicates the socket file descriptor.
717  * @param[in] socketDescriptorSet Indicates the socket descriptor set.
718  * @return
719  */
720 typedef FILLP_INT (*FillpFdIsSetFunc)(IN FILLP_INT fd, IN FT_FD_SET socketDescriptorSet);
721 
722 /**
723  * @ingroup Callbacks
724  * @brief
725  * This callback is to create a file descriptor set.
726  *
727  * @return
728  * FT_FD_SET File Descriptor set
729  *
730  */
731 typedef FT_FD_SET (*FillpCreateFdSetFunc)(void);
732 
733 /**
734  * @ingroup Callbacks
735  * @brief
736  * This callback is to free the file descriptor set which was created using the
737  * callback function FillpCreateFdSetFunc.
738  *
739  * @return
740  */
741 typedef void (*FillpDestroyFdSetFunc)(IN FT_FD_SET destroySocketFdSet);
742 
743 /**
744  * @ingroup Callbacks
745  * @brief
746  * This callback is to copy from one file descriptor set to another
747  *
748  * @param[out] dstFdSet Indicates the destination file descriptor set to which it is copied.
749  * @param[in] srcFdSet Indicates the source file descriptor set from which it is being copied.
750  * @return
751  */
752 typedef FILLP_INT32 (*FillpCopyFdSetFunc)(IO FT_FD_SET dstFdSet, IN FT_FD_SET srcFdSet);
753 
754 /**
755  * @ingroup Callbacks
756  * @brief
757  * This callback to receive from system callback to receive a message from a socket.
758  *
759  * @param[in] fd Specifies the socket file descriptor.
760  * @param[out] *buf Points to the buffer where the message should be stored.
761  * @param[in] len Specifies the length in bytes of the buffer pointed to by the buff argument.
762  * @param[in] flags Specifies the type of message reception.
763  * @param[out] *from Points to a SockAddr structure in which the sending address is to be stored.
764  * @param[in] *fromLen Specifies the length of the SockAddr structure pointed to by the from argument.
765  * @return
766  * On success : Length of the message in bytes.
767  * On failure : error.
768  */
769 typedef FILLP_INT (*FillpRecvfromFunc)(IN FILLP_INT fd, OUT void *buf,
770     IN FILLP_SIZE_T len, IN FILLP_INT flags, OUT void *from, IO FILLP_SIZE_T *fromLen);
771 
772 /**
773  * @ingroup Callbacks
774  * @brief
775  * This callback is to send a message to a socket.
776  *
777  * @param[in] fd Indicates a socket ID.
778  * @param[in] *msg Specifies the message which needs to be sent.
779  * @param[in] flags Specifies the type of message.
780  * @return
781  * On success : Sends the message.
782  * On failure : error code.
783  */
784 typedef FILLP_INT (*FillpSendFuncmsg)(IN FILLP_INT fd,
785     IN FILLP_CONST void *msg, IN FILLP_INT flags);
786 
787 /**
788  * @ingroup Callbacks
789  * @brief
790  * This callback is to receive a message from a socket.
791  *
792  * @param[in] fd Indicates a socket file descriptor.
793  * @param[in] *msg Indicates a message received.
794  * @param[in] flags Specifies the type of message.
795  * @return
796  * On success : Receives the message.
797  * On failure : error code.
798  */
799 typedef FILLP_INT (*FillpRecvmsgFunc)(IN FILLP_INT fd, IN void *msg, IN FILLP_INT flags);
800 
801 /**
802  * @ingroup Callbacks
803  * @brief
804  * This callback is for sys_arch_sem_close.
805  *
806  * @param[in] sem Indicates the shared memory.
807  * @return
808  * On success : FILLP_SUCCESS
809  * On failure : FILLP_FAILURE
810  */
811 typedef FILLP_INT (*FillpSysArchSemCloseFunc)(SYS_ARCH_SEM *sem);
812 
813 /**
814  * @ingroup Callbacks
815  * @brief
816  * This callback is to lock the semaphore referenced by the sem parameter as in the semaphore wait function.
817  * However, if the semaphore cannot be locked without waiting for another process or *thread to unlock the semaphore
818  * by performing a semaphore post  function, this wait shall be terminated when the specified timeout expires.
819  *
820  * @param[in] sem Pointer to named semaphore structure.
821  * @param[in] timeout Indicates the time to wait.
822  * @return
823  * On success : Zero
824  * On failure : FILLP_FAILURE
825  * @note Application must provide functionality which does not have impact with system time change.
826  */
827  /* callback for SYS_ARCH_SEM_WAIT_TIMEOUT */
828 typedef FILLP_INT (*FillpSysArchSemWaitTimeoutFunc)(SYS_ARCH_SEM *sem, FILLP_SLONG timeout);
829 
830 /**
831  * @ingroup Callbacks
832  * @brief
833  * This callback is for sched_yield system function to yield the processor.
834  *
835  * @return
836  * Zero on success OR Error code on failure.
837  */
838  /* callback for SYS_ARCH_SCHED_YIELD */
839 typedef FILLP_INT (*FillpSysArchSchedYieldFunc)(void);
840 
841 /* lower layer call back function structure */
842 typedef struct FillpSysLibSockCallbackFuncStruct {
843     /* Function pointer variable to register the create socket callback function. */
844     FillpCreateSocketFunc socketCallbackFunc;
845     /* Function pointer variable to register bind socket callback function. */
846     FillpBindSocketFunc bindCallbackFunc;
847     /* Function pointer variable to register close socket callback function. */
848     FillpCloseSocketFunc closeSocketCallbackFunc;
849     /* Indicates a variable to register select callback function. */
850     FillpSelectFunc select;
851     /* Indicates a variable to register ioctl callback function. */
852     FillpIoctlFunc ioctl;
853     /* Indicates a variable to register fcntl callback function. */
854     FillpFcntlFunc fcntl;
855     /* Indicates a variable to register fcntl callback function. */
856     FillpSetSockOptFunc setSockOpt;
857     /* Indicates a variable to register fcntl callback function. */
858     FillpGetSockOptFunc getSockOpt;
859     /* Indicates a pointer to a variable to register  set socket option. */
860     FillpRecvfromFunc recvFromCallbackFunc;
861     /* Indicates a pointer to a variable to register  get socket option. */
862     FillpSendtoFunc sendtoCallbackFunc;
863     /* Indicates a function pointer variable to register  Sendto callback function. */
864     FillpSendFunc sendCallbackFunc;
865     /* Indicates a function pointer variable to register get socket name callback function. */
866     FillpGetSockNameFunc getSockNameCallbackFunc;
867     /* Indicates a function pointer variable to register the connect callback function. */
868     FillpConnectFunc connectCallbackFunc;
869     /* Indicates a function pointer variable to register callback function to call the required FD_CLR macro. */
870     FillpFdClrFunc fillpFuncFdClr;
871     /* Indicates a function pointer variable to register callback function to call the required FD_SET macro. */
872     FillpFdSetFunc fillpFuncFdSet;
873     /* Indicates a function pointer variable to register callback function to call the required FD_ISSET macro. */
874     FillpFdIsSetFunc fillpFuncFdIsSet;
875     /* Indicates a function pointer variable to register callback function to call fd_set. */
876     FillpCreateFdSetFunc fillpFuncCreateFdSet;
877     /* Indicates a function pointer variable to register callback function to
878      * destroy fd_set which was created by FillpCreateFdSetFunc. */
879     FillpDestroyFdSetFunc fillpFuncDestroyFdSet;
880     /* Indicates a function pointer variable to register callback function to copy fd_set. */
881     FillpCopyFdSetFunc fillpFuncCopyFdSet;
882 } FillpSysLibSockCallbackFuncSt;
883 
884 /**
885  * Provides variables to semaphore callback functions.
886  */
887 typedef struct FillpSysLibSemCallbackFuncStruct {
888     /* Function pointer variable to register semaphore close callback function. */
889     FillpSysArchSemCloseFunc sysArchSemClose;
890     /* Function pointer variable to semaphore Init callback function. */
891     FillpSemFunc sysArchSemInit;
892     /* Function pointer variable to semaphore try wait callback function. */
893     FillpSemTryWaitFunc sysArchSemTryWait;
894     /* Function pointer variable to semaphore wait callback function. */
895     FillpSemWaitFunc sysArchSemWait;
896     /* Function pointer variable to semaphore post callback function. */
897     FillpSemPostFunc sysArchSemPost;
898     /* Function pointer variable to register semaphore destroy callback function. */
899     FillpSemDestroyFunc sysArchSemDestroy;
900     /* Function pointer variable to FillpRWSemInitFunc. */
901     FillpRWSemInitFunc sysArchRWSemInit;
902     /* Function pointer variable to FillpRWSemTryRDWaitFunc. */
903     FillpRWSemTryRDWaitFunc sysArchRWSemTryRDWait;
904     /* Function pointer variable to FillpRWSemTryWRWaitFunc. */
905     FillpRWSemTryWRWaitFunc sysArchRWSemTryWRWait;
906     /* Function pointer variable to FillpRWSemRDPostFunc. */
907     FillpRWSemRDPostFunc sysArchRWSemRDPost;
908     /* Function pointer variable to FillpRWSemWRPostFunc. */
909     FillpRWSemWRPostFunc sysArchRWSemWRPost;
910     /* Function pointer variable to FillpRWSemDestroyFunc. */
911     FillpRWSemDestroyFunc sysArchRWSemDestroy;
912     /* Function pointer variable to semaphore wait timeout callback function. */
913     FillpSysArchSemWaitTimeoutFunc sysArchSemWaitTimeout;
914     /* Function pointer variable to register system shared yield  callback function. */
915     FillpSysArchSchedYieldFunc sysArchSchedYield;
916 } FillpSysLibSemCallbackFuncSt;
917 
918 
919 /**
920 * Structure of basic callback functions.
921 */
922 typedef struct FillpSysLibBasicCallbackFuncStruct {
923     FillpMemCallocFunc memCalloc; /* Memory  calloc callback function. */
924     FillpMemAllocFunc memAlloc; /* Memory  allocation callback function. */
925     FillpMemFreeFunc memFree; /* Memory  free callback function. */
926     FillpStrLenFunc fillpStrLen; /* String length callback function. */
927     FillpRandFunc fillpRand; /* String SprintfS callback function. */
928     FillpCreateThreadFunc fillpCreateThread; /* String SprintfS callback function. */
929     FillpSysArcInitFunc sysArcInit; /* SYS_ARCH_INIT callback function. */
930     FillpSysArcGetCurTimeFunc sysArcGetCurTimeLongLong; /* sys_arch_get_cur_time_longlong callback function. */
931     FillpSysArchAtomicIncFunc sysArchAtomicInc; /* SYS_ARCH_ATOMIC_INC callback function. */
932     FillpSysArchAtomicIncAndTestFunc sysArchAtomicIncAndTest; /* SYS_ARCH_ATOMIC_INC_AND_TEST callback function. */
933     FillpSysArchAtomicDecFunc sysArchAtomicDec; /* SysArchAtomic_DEC callback function. */
934     FillpSysArchAtomicDecAndTestFunc sysArchAtomicDecAndTest; /* SYS_ARCH_ATOMIC_DEC_AND_TEST callback function. */
935     FillpSysArchAtomicReadFunc sysArchAtomicRead; /* SYS_ARCH_ATOMIC_READ callback function. */
936     FillpSysArchAtomicSetFunc sysArchAtomicSet; /* SYS_ARCH_ATOMIC_SET callback function. */
937     FillpSysArchCompAndSwapFunc sysArchCompAndSwap; /* SYS_ARCH_SEM_WAIT_TIMEOUT callback function. */
938     FillpSysSleepMsFunc sysSleepMs; /* FILLP_SLEEP_MS callback function. */
939     FillpSysUSleepFunc sysUsleep; /* sleep in seconds callback function. */
940     FillpRtePauseFunc rtePause; /* rte_pause callback function. */
941     FillpCryptoRandFunc cryptoRand; /* Cryptographic quality random number callback function. */
942     FillpMemChrFunc memChr; /* MemChr callback function. */
943 } FillpSysLibBasicCallbackFuncSt;
944 
945 /**
946 * Provides callbacks for FillP SysLib.
947 */
948 typedef struct FillpSysLibCallbackFuncStruct {
949     FillpSysLibBasicCallbackFuncSt sysLibBasicFunc; /* Indicates a callback to SystLibBasicFunc. */
950     FillpSysLibSemCallbackFuncSt sysLibSemFunc; /* Indicates a callback to SysLibSemFunc. */
951     FillpSysLibSockCallbackFuncSt sysLibSockFunc; /* Indicates a callback to SysLibSockFunc. */
952 } FillpSysLibCallbackFuncSt;
953 
954 #ifdef __cplusplus
955 }
956 #endif
957 
958 #endif
959