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_FUNCTIONS_H
17 #define FILLP_FUNCTIONS_H
18 
19 #include "fillp_os.h"
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #define FILLP_FD_CLR   (g_fillpOsSocketLibFun.fillpFuncFdClr)
26 #define FILLP_FD_SET   (g_fillpOsSocketLibFun.fillpFuncFdSet)
27 #define FILLP_FD_ISSET (g_fillpOsSocketLibFun.fillpFuncFdIsSet)
28 
29 
30 #define FILLP_FD_CREATE_FD_SET   (g_fillpOsSocketLibFun.fillpFuncCreateFdSet)
31 #define FILLP_FD_DESTROY_FD_SET  (g_fillpOsSocketLibFun.fillpFuncDestroyFdSet)
32 #define FILLP_FD_COPY_FD_SET     (g_fillpOsSocketLibFun.fillpFuncCopyFdSet)
33 
34 
35 #define FILLP_GETSOCKOPT               (g_fillpOsSocketLibFun.getSockOpt)
36 #define FILLP_SETSOCKOPT               (g_fillpOsSocketLibFun.setSockOpt)
37 #define FILLP_IOCTLSOCKET              (g_fillpOsSocketLibFun.ioctl)
38 #define FILLP_FCNTL                    (g_fillpOsSocketLibFun.fcntl)
39 #define FILLP_SOCKET                   (g_fillpOsSocketLibFun.socketCallbackFunc)
40 #define FILLP_BIND                     (g_fillpOsSocketLibFun.bindCallbackFunc)
41 #define FILLP_GETSOCKNAME              (g_fillpOsSocketLibFun.getSockNameCallbackFunc)
42 #define FILLP_CONNECT                  (g_fillpOsSocketLibFun.connectCallbackFunc)
43 #define FILLP_SENDTO                   (g_fillpOsSocketLibFun.sendtoCallbackFunc)
44 #define FILLP_SEND                     (g_fillpOsSocketLibFun.sendCallbackFunc)
45 #define FILLP_RECVFROM                 (g_fillpOsSocketLibFun.recvFromCallbackFunc)
46 #define FILLP_STRLEN                   (g_fillpOsBasicLibFun.fillpStrLen)
47 #define FILLP_CALLOC                   (g_fillpOsBasicLibFun.memCalloc)
48 #define FILLP_MALLOC                   (g_fillpOsBasicLibFun.memAlloc)
49 #define FILLP_FREE                     (g_fillpOsBasicLibFun.memFree)
50 #define FILLP_SELECT                   (g_fillpOsSocketLibFun.select)
51 #define FILLP_RAND                     (g_fillpOsBasicLibFun.fillpRand)
52 #define FILLP_CRYPTO_RAND              (g_fillpOsBasicLibFun.cryptoRand)
53 #define FILLP_CLOSE                    (g_fillpOsSocketLibFun.closeSocketCallbackFunc)
54 #define FILLP_MEMCHR                   (g_fillpOsBasicLibFun.memChr)
55 #define FILLP_SYS_START_NEWTHREAD      (g_fillpOsBasicLibFun.fillpCreateThread)
56 #define SYS_ARCH_INIT                  (g_fillpOsBasicLibFun.sysArcInit)
57 #define SYS_ARCH_GET_CUR_TIME_LONGLONG (g_fillpOsBasicLibFun.sysArcGetCurTimeLongLong)
58 #define CAS                            (g_fillpOsBasicLibFun.sysArchCompAndSwap)
59 #define FILLP_SLEEP_MS                 (g_fillpOsBasicLibFun.sysSleepMs)
60 #define FILLP_RTE_PAUSE                (g_fillpOsBasicLibFun.rtePause)
61 #define SYS_ARCH_ATOMIC_INC            (g_fillpOsBasicLibFun.sysArchAtomicInc)
62 #define SYS_ARCH_ATOMIC_INC_AND_TEST   (g_fillpOsBasicLibFun.sysArchAtomicIncAndTest)
63 #define SYS_ARCH_ATOMIC_DEC            (g_fillpOsBasicLibFun.sysArchAtomicDec)
64 #define SYS_ARCH_ATOMIC_DEC_AND_TEST   (g_fillpOsBasicLibFun.sysArchAtomicDecAndTest)
65 #define SYS_ARCH_ATOMIC_READ           (g_fillpOsBasicLibFun.sysArchAtomicRead)
66 #define SYS_ARCH_ATOMIC_SET            (g_fillpOsBasicLibFun.sysArchAtomicSet)
67 #define FILLP_USLEEP                   (g_fillpOsBasicLibFun.sysUsleep)
68 
69 /* Once inited with semaphore_create() in callback sysArchSemInit, it will be destroyed
70     semaphore_destroy() in sysArchSemDestroy. There is no semaphore_close() in MAC
71 */
72 #ifndef FILLP_MAC
73 #define SYS_ARCH_SEM_CLOSE           (g_fillpOsSemLibFun.sysArchSemClose)
74 #endif
75 
76 #define SYS_ARCH_SEM_INIT         (g_fillpOsSemLibFun.sysArchSemInit)
77 #define SYS_ARCH_SEM_TRYWAIT      (g_fillpOsSemLibFun.sysArchSemTryWait)
78 #define SYS_ARCH_SEM_WAIT         (g_fillpOsSemLibFun.sysArchSemWait)
79 #define SYS_ARCH_SEM_POST         (g_fillpOsSemLibFun.sysArchSemPost)
80 #define SYS_ARCH_SEM_DESTROY      (g_fillpOsSemLibFun.sysArchSemDestroy)
81 #define SYS_ARCH_SEM_WAIT_TIMEOUT (g_fillpOsSemLibFun.sysArchSemWaitTimeout)
82 #define SYS_ARCH_SCHED_YIELD      (g_fillpOsSemLibFun.sysArchSchedYield)
83 
sys_arch_compiler_barrier(void)84 static inline void sys_arch_compiler_barrier(void)
85 {
86 #ifdef FILLP_LINUX
87 #if !defined(__clang__) && (((__GNUC__ <= 4) && (__GNUC_MINOR__ < 4)) || (__GNUC__ <= 3))
88     #error "GCC 4.4.0 FIXED GCC Bug[36793] x86-64 does not get __sync_synchronize right"
89 #endif
90     __sync_synchronize();
91 #else
92     MemoryBarrier();
93 #endif
94 }
95 
96 #define SYS_ARCH_RWSEM_INIT         (g_fillpOsSemLibFun.sysArchRWSemInit)
97 #define SYS_ARCH_RWSEM_TRYRDWAIT    (g_fillpOsSemLibFun.sysArchRWSemTryRDWait)
98 #define SYS_ARCH_RWSEM_TRYWRWAIT    (g_fillpOsSemLibFun.sysArchRWSemTryWRWait)
99 #define SYS_ARCH_RWSEM_RDPOST       (g_fillpOsSemLibFun.sysArchRWSemRDPost)
100 #define SYS_ARCH_RWSEM_WRPOST       (g_fillpOsSemLibFun.sysArchRWSemWRPost)
101 #define SYS_ARCH_RWSEM_DESTROY      (g_fillpOsSemLibFun.sysArchRWSemDestroy)
102 #define SYS_ARCH_RWSEM_WAIT_TIMEOUT (g_fillpOsSemLibFun.pfSysArchRWSemWaitTimeout)
103 
104 #define FILLP_SOCKETCLOSE_CBK (g_fillpAppCbkFun.fillpSockCloseCbkFunc)
105 
106 #ifdef __cplusplus
107 }
108 #endif
109 
110 #endif /* FILLP_FUNCTIONS_H */
111