1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 #ifndef _SYSCALL_DO_H_
18 #define _SYSCALL_DO_H_
19 
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #ifdef _OS_BUILD_
26     #error "Syscalls should not be called from OS code"
27 #endif
28 
29 #include <cpu/syscallDo.h>
30 #include <sensors.h>
31 #include <syscall.h>
32 #include <stdarg.h>
33 #include <gpio.h>
34 #include <osApi.h>
35 #include <seos.h>
36 #include <util.h>
37 
38 #include <syscall_defs.h>
39 
40 
41 //system syscalls live here
eOsEventSubscribe(uint32_t tid,uint32_t evtType)42 static inline bool eOsEventSubscribe(uint32_t tid, uint32_t evtType)
43 {
44     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_SUBCRIBE), tid, evtType);
45 }
46 
eOsEventUnsubscribe(uint32_t tid,uint32_t evtType)47 static inline bool eOsEventUnsubscribe(uint32_t tid, uint32_t evtType)
48 {
49     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_UNSUBCRIBE), tid, evtType);
50 }
51 
eOsEnqueueEvt(uint32_t evtType,void * evtData,uint32_t tidOfWhoWillFreeThisEvent)52 static inline bool eOsEnqueueEvt(uint32_t evtType, void *evtData, uint32_t tidOfWhoWillFreeThisEvent) // tidOfWhoWillFreeThisEvent is likely your TID
53 {
54     return syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_ENQUEUE), evtType, evtData, tidOfWhoWillFreeThisEvent);
55 }
56 
eOsEnqueueEvtOrFree(uint32_t evtType,void * evtData,EventFreeF evtFreeF,uint32_t tidOfWhoWillFreeThisEvent)57 static inline bool eOsEnqueueEvtOrFree(uint32_t evtType, void *evtData, EventFreeF evtFreeF, uint32_t tidOfWhoWillFreeThisEvent) // tidOfWhoWillFreeThisEvent is likely your TID
58 {
59     bool success = eOsEnqueueEvt(evtType, evtData, tidOfWhoWillFreeThisEvent);
60     if (!success && evtFreeF)
61         evtFreeF(evtData);
62     return success;
63 }
64 
eOsEnqueuePrivateEvt(uint32_t evtType,void * evtData,uint32_t tidOfWhoWillFreeThisEvent,uint32_t toTid)65 static inline bool eOsEnqueuePrivateEvt(uint32_t evtType, void *evtData, uint32_t tidOfWhoWillFreeThisEvent, uint32_t toTid)
66 {
67     return syscallDo4P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_ENQUEUE_PRIVATE), evtType, evtData, tidOfWhoWillFreeThisEvent, toTid);
68 }
69 
eOsRetainCurrentEvent(TaggedPtr * evtFreeingInfoP)70 static inline bool eOsRetainCurrentEvent(TaggedPtr *evtFreeingInfoP)
71 {
72     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_RETAIN_EVT), evtFreeingInfoP);
73 }
74 
eOsFreeRetainedEvent(uint32_t evtType,void * evtData,TaggedPtr * evtFreeingInfoP)75 static inline bool eOsFreeRetainedEvent(uint32_t evtType, void *evtData, TaggedPtr *evtFreeingInfoP)
76 {
77     return syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_EVENTQ, SYSCALL_OS_MAIN_EVTQ_FREE_RETAINED), evtType, evtData, evtFreeingInfoP);
78 }
79 
eOsLogvInternal(enum LogLevel level,const char * str,uintptr_t args_list)80 static inline void eOsLogvInternal(enum LogLevel level, const char *str, uintptr_t args_list)
81 {
82     (void)syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_LOGGING, SYSCALL_OS_MAIN_LOG_LOGV), level, str, args_list);
83 }
84 
eOsLogv(enum LogLevel level,const char * str,va_list vl)85 static inline void eOsLogv(enum LogLevel level, const char *str, va_list vl)
86 {
87     eOsLogvInternal(level, str, VA_LIST_TO_INTEGER(vl));
88 }
89 
eOsLog(enum LogLevel level,const char * str,...)90 static inline void eOsLog(enum LogLevel level, const char *str, ...)
91 {
92     va_list vl;
93 
94     va_start(vl, str);
95     eOsLogvInternal(level, str, VA_LIST_TO_INTEGER(vl));
96     va_end(vl);
97 }
98 
eOsSensorSignalInternalEvt(uint32_t handle,uint32_t intEvtNum,uint32_t value1,uint64_t value2)99 static inline const struct SensorInfo* eOsSensorSignalInternalEvt(uint32_t handle, uint32_t intEvtNum, uint32_t value1, uint64_t value2)
100 {
101     uint32_t value2_lo = value2;
102     uint32_t value2_hi = value2 >> 32;
103 
104     return (const struct SensorInfo*)syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_SIGNAL), handle, intEvtNum, value1, value2_lo, value2_hi);
105 }
106 
eOsSensorRegister(const struct SensorInfo * si,uint32_t tid,void * cookie,bool initComplete)107 static inline uint32_t eOsSensorRegister(const struct SensorInfo *si, uint32_t tid, void *cookie, bool initComplete)
108 {
109     return syscallDo4P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_REG), si, tid, cookie, (int)initComplete);
110 }
111 
eOsSensorUnregister(uint32_t handle)112 static inline bool eOsSensorUnregister(uint32_t handle)
113 {
114     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_UNREG), handle);
115 }
116 
eOsSensorRegisterInitComplete(uint32_t handle)117 static inline bool eOsSensorRegisterInitComplete(uint32_t handle)
118 {
119     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_REG_INIT_COMP), handle);
120 }
121 
eOsSensorFind(uint32_t sensorType,uint32_t idx,uint32_t * handleP)122 static inline const struct SensorInfo* eOsSensorFind(uint32_t sensorType, uint32_t idx, uint32_t *handleP)
123 {
124     return (const struct SensorInfo*)syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_FIND), sensorType, idx, handleP);
125 }
126 
eOsSensorRequest(uint32_t clientId,uint32_t sensorHandle,uint32_t rate,uint64_t latency)127 static inline bool eOsSensorRequest(uint32_t clientId, uint32_t sensorHandle, uint32_t rate, uint64_t latency)
128 {
129     uint32_t latency_lo = latency;
130     uint32_t latency_hi = latency >> 32;
131 
132     return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_REQUEST), clientId, sensorHandle, rate, latency_lo, latency_hi);
133 }
134 
eOsSensorRequestRateChange(uint32_t clientId,uint32_t sensorHandle,uint32_t newRate,uint64_t newLatency)135 static inline bool eOsSensorRequestRateChange(uint32_t clientId, uint32_t sensorHandle, uint32_t newRate, uint64_t newLatency)
136 {
137     uint32_t newLatency_lo = newLatency;
138     uint32_t newLatency_hi = newLatency >> 32;
139 
140     return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_RATE_CHG), clientId, sensorHandle, newRate, newLatency_lo, newLatency_hi);
141 }
142 
eOsSensorRelease(uint32_t clientId,uint32_t sensorHandle)143 static inline bool eOsSensorRelease(uint32_t clientId, uint32_t sensorHandle)
144 {
145     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_RELEASE), clientId, sensorHandle);
146 }
147 
eOsSensorTriggerOndemand(uint32_t clientId,uint32_t sensorHandle)148 static inline bool eOsSensorTriggerOndemand(uint32_t clientId, uint32_t sensorHandle)
149 {
150     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_TRIGGER), clientId, sensorHandle);
151 }
152 
eOsSensorGetCurRate(uint32_t sensorHandle)153 static inline uint32_t eOsSensorGetCurRate(uint32_t sensorHandle)
154 {
155     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_GET_RATE), sensorHandle);
156 }
157 
eOsSensorGetTime(void)158 static inline uint64_t eOsSensorGetTime(void)
159 {
160     uint64_t timeNanos;
161     syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SENSOR, SYSCALL_OS_MAIN_SENSOR_GET_TIME), &timeNanos);
162     return timeNanos;
163 }
164 
eOsTimGetTime(void)165 static inline uint64_t eOsTimGetTime(void)
166 {
167     uint64_t timeNanos;
168     syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_TIME, SYSCALL_OS_MAIN_TIME_GET_TIME), &timeNanos);
169     return timeNanos;
170 }
171 
eOsTimTimerSet(uint64_t length,uint32_t jitterPpm,uint32_t driftPpm,uint32_t tid,void * cookie,bool oneShot)172 static inline uint32_t eOsTimTimerSet(uint64_t length, uint32_t jitterPpm, uint32_t driftPpm, uint32_t tid, void* cookie, bool oneShot)
173 {
174     uint32_t lengthLo = length;
175     uint32_t lengthHi = length >> 32;
176 
177     return syscallDoGeneric(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_TIME, SYSCALL_OS_MAIN_TIME_SET_TIMER), lengthLo, lengthHi, jitterPpm, driftPpm, tid, cookie, (int)oneShot);
178 }
179 
eOsTimTimerCancel(uint32_t timerId)180 static inline bool eOsTimTimerCancel(uint32_t timerId)
181 {
182     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_TIME, SYSCALL_OS_MAIN_TIME_CANCEL_TIMER), timerId);
183 }
184 
eOsHeapAlloc(uint32_t sz)185 static inline void* eOsHeapAlloc(uint32_t sz)
186 {
187     return (void*)syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_HEAP, SYSCALL_OS_MAIN_HEAP_ALLOC), sz);
188 }
189 
eOsHeapFree(void * ptr)190 static inline void eOsHeapFree(void* ptr)
191 {
192     (void)syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_HEAP, SYSCALL_OS_MAIN_HEAP_FREE), ptr);
193 }
194 
eOsSlabAllocatorNew(uint32_t itemSz,uint32_t itemAlign,uint32_t numItems)195 static inline struct SlabAllocator* eOsSlabAllocatorNew(uint32_t itemSz, uint32_t itemAlign, uint32_t numItems)
196 {
197     return (struct SlabAllocator*)syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SLAB, SYSCALL_OS_MAIN_SLAB_NEW), itemSz, itemAlign, numItems);
198 }
199 
eOsSlabAllocatorDestroy(struct SlabAllocator * allocator)200 static inline void eOsSlabAllocatorDestroy(struct SlabAllocator* allocator)
201 {
202     (void)syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SLAB, SYSCALL_OS_MAIN_SLAB_DESTROY), allocator);
203 }
204 
eOsSlabAllocatorAlloc(struct SlabAllocator * allocator)205 static inline void* eOsSlabAllocatorAlloc(struct SlabAllocator* allocator)
206 {
207     return (void *)syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SLAB, SYSCALL_OS_MAIN_SLAB_ALLOC), allocator);
208 }
209 
eOsSlabAllocatorFree(struct SlabAllocator * allocator,void * ptrP)210 static inline void eOsSlabAllocatorFree(struct SlabAllocator* allocator, void* ptrP)
211 {
212     (void)syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_SLAB, SYSCALL_OS_MAIN_SLAB_FREE), allocator, ptrP);
213 }
214 
eOsHostGetTime(void)215 static inline uint64_t eOsHostGetTime(void)
216 {
217     uint64_t timeNanos;
218     syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_HOST, SYSCALL_OS_MAIN_HOST_GET_TIME), &timeNanos);
219     return timeNanos;
220 }
221 
eOsRtcGetTime(void)222 static inline uint64_t eOsRtcGetTime(void)
223 {
224     uint64_t timeNanos;
225     syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_MAIN, SYSCALL_OS_MAIN_RTC, SYSCALL_OS_MAIN_RTC_GET_TIME), &timeNanos);
226     return timeNanos;
227 }
228 
eOsGpioRequest(uint32_t gpioNum)229 static inline struct Gpio* eOsGpioRequest(uint32_t gpioNum)
230 {
231     return (struct Gpio*)syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_REQ), gpioNum);
232 }
233 
eOsGpioRelease(struct Gpio * __restrict gpio)234 static inline void eOsGpioRelease(struct Gpio* __restrict gpio)
235 {
236     syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_REL), gpio);
237 }
238 
eOsGpioConfigInput(const struct Gpio * __restrict gpio,int32_t gpioSpeed,enum GpioPullMode pull)239 static inline void eOsGpioConfigInput(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull)
240 {
241     syscallDo3P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_CFG_IN), gpio, gpioSpeed, pull);
242 }
243 
eOsGpioConfigOutput(const struct Gpio * __restrict gpio,int32_t gpioSpeed,enum GpioPullMode pull,enum GpioOpenDrainMode odrMode,bool value)244 static inline void eOsGpioConfigOutput(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull, enum GpioOpenDrainMode odrMode, bool value)
245 {
246     syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_CFG_OUT), gpio, gpioSpeed, pull, odrMode, value);
247 }
248 
eOsGpioConfigAlt(const struct Gpio * __restrict gpio,int32_t gpioSpeed,enum GpioPullMode pull,enum GpioOpenDrainMode odrMode,uint32_t altFunc)249 static inline void eOsGpioConfigAlt(const struct Gpio* __restrict gpio, int32_t gpioSpeed, enum GpioPullMode pull, enum GpioOpenDrainMode odrMode, uint32_t altFunc)
250 {
251     syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_CFG_ALT), gpio, gpioSpeed, pull, odrMode, altFunc);
252 }
253 
eOsGpioGet(const struct Gpio * __restrict gpio)254 static inline bool eOsGpioGet(const struct Gpio* __restrict gpio)
255 {
256     return !!syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_GET), gpio);
257 }
258 
eOsGpioSet(const struct Gpio * __restrict gpio,bool value)259 static inline void eOsGpioSet(const struct Gpio* __restrict gpio, bool value)
260 {
261     syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_GPIO, SYSCALL_OS_DRV_GPIO_SET), gpio, value);
262 }
263 
eOsI2cMasterRequest(uint32_t busId,uint32_t speedInHz)264 static inline int eOsI2cMasterRequest(uint32_t busId, uint32_t speedInHz)
265 {
266     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_MASTER, SYSCALL_OS_DRV_I2CM_REQ), busId, speedInHz);
267 }
268 
eOsI2cMasterRelease(uint32_t busId)269 static inline int eOsI2cMasterRelease(uint32_t busId)
270 {
271     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_MASTER, SYSCALL_OS_DRV_I2CM_REL), busId);
272 }
273 
eOsI2cMasterTxRx(uint32_t busId,uint32_t addr,const void * txBuf,size_t txSize,void * rxBuf,size_t rxSize,uint32_t cbkTid,void * cookie)274 static inline int eOsI2cMasterTxRx(uint32_t busId, uint32_t addr, const void *txBuf, size_t txSize, void *rxBuf, size_t rxSize, uint32_t cbkTid, void *cookie)
275 {
276     return syscallDoGeneric(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_MASTER, SYSCALL_OS_DRV_I2CM_TXRX), busId, addr, txBuf, txSize, rxBuf, rxSize, cbkTid, cookie);
277 }
278 
eOsI2cSlaveRequest(uint32_t busId,uint32_t addr)279 static inline int eOsI2cSlaveRequest(uint32_t busId, uint32_t addr)
280 {
281     return syscallDo2P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_SLAVE, SYSCALL_OS_DRV_I2CS_REQ), busId, addr);
282 }
283 
eOsI2cSlaveRelease(uint32_t busId)284 static inline int eOsI2cSlaveRelease(uint32_t busId)
285 {
286     return syscallDo1P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_SLAVE, SYSCALL_OS_DRV_I2CS_REL), busId);
287 }
288 
eOsI2cSlaveEnableRx(uint32_t busId,void * rxBuf,size_t rxSize,uint32_t cbkTid,void * cookie)289 static inline void eOsI2cSlaveEnableRx(uint32_t busId, void *rxBuf, size_t rxSize, uint32_t cbkTid, void *cookie)
290 {
291     syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_SLAVE, SYSCALL_OS_DRV_I2CS_RX_EN), busId, rxBuf, rxSize, cbkTid, cookie);
292 }
293 
eOsI2cSlaveTxPreamble(uint32_t busId,uint8_t byte,uint32_t cbkTid,void * cookie)294 static inline int eOsI2cSlaveTxPreamble(uint32_t busId, uint8_t byte, uint32_t cbkTid, void *cookie)
295 {
296     return syscallDo4P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_SLAVE, SYSCALL_OS_DRV_I2CS_TX_PRE), busId, byte, cbkTid, cookie);
297 }
298 
eOsI2cSlaveTxPacket(uint32_t busId,const void * txBuf,size_t txSize,uint32_t cbkTid,void * cookie)299 static inline int eOsI2cSlaveTxPacket(uint32_t busId, const void *txBuf, size_t txSize, uint32_t cbkTid, void *cookie)
300 {
301     return syscallDo5P(SYSCALL_NO(SYSCALL_DOMAIN_OS, SYSCALL_OS_DRIVERS, SYSCALL_OS_DRV_I2C_SLAVE, SYSCALL_OS_DRV_I2CS_TX_PKT), busId, txBuf, txSize, cbkTid, cookie);
302 }
303 
304 #ifdef __cplusplus
305 }
306 #endif
307 
308 #endif
309 
310