blob: 4dca6b6e30366761f8d4738a28c397eb8fa967a4 [file] [log] [blame]
jam76bcf0c2015-10-02 21:01:281// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
rockotb04b89b52016-06-09 03:58:565#include "mojo/edk/embedder/entrypoints.h"
6
Avi Drissman2e88ac372015-12-21 18:14:577#include <stdint.h>
8
jam76bcf0c2015-10-02 21:01:289#include "mojo/edk/embedder/embedder_internal.h"
10#include "mojo/edk/system/core.h"
rockot85dce0862015-11-13 01:33:5911#include "mojo/public/c/system/buffer.h"
12#include "mojo/public/c/system/data_pipe.h"
13#include "mojo/public/c/system/functions.h"
14#include "mojo/public/c/system/message_pipe.h"
rockot28a287e2016-05-24 02:51:3715#include "mojo/public/c/system/platform_handle.h"
rockotc637caf9b2016-02-10 09:57:0816#include "mojo/public/c/system/wait_set.h"
jam76bcf0c2015-10-02 21:01:2817
18using mojo::edk::internal::g_core;
19
jam76bcf0c2015-10-02 21:01:2820// Definitions of the system functions.
21extern "C" {
rockotc637caf9b2016-02-10 09:57:0822
rockotb04b89b52016-06-09 03:58:5623MojoTimeTicks MojoGetTimeTicksNowImpl() {
jam76bcf0c2015-10-02 21:01:2824 return g_core->GetTimeTicksNow();
25}
26
rockotb04b89b52016-06-09 03:58:5627MojoResult MojoCloseImpl(MojoHandle handle) {
jam76bcf0c2015-10-02 21:01:2828 return g_core->Close(handle);
29}
30
rockotb04b89b52016-06-09 03:58:5631MojoResult MojoWaitImpl(MojoHandle handle,
32 MojoHandleSignals signals,
33 MojoDeadline deadline,
34 MojoHandleSignalsState* signals_state) {
jam76bcf0c2015-10-02 21:01:2835 return g_core->Wait(handle, signals, deadline, signals_state);
36}
37
rockotb04b89b52016-06-09 03:58:5638MojoResult MojoWaitManyImpl(const MojoHandle* handles,
39 const MojoHandleSignals* signals,
40 uint32_t num_handles,
41 MojoDeadline deadline,
42 uint32_t* result_index,
43 MojoHandleSignalsState* signals_states) {
jam76bcf0c2015-10-02 21:01:2844 return g_core->WaitMany(handles, signals, num_handles, deadline, result_index,
45 signals_states);
46}
47
rockotb04b89b52016-06-09 03:58:5648MojoResult MojoWatchImpl(MojoHandle handle,
49 MojoHandleSignals signals,
50 MojoWatchCallback callback,
51 uintptr_t context) {
rockot49b69e6b272016-03-02 03:46:3752 return g_core->Watch(handle, signals, callback, context);
53}
54
rockotb04b89b52016-06-09 03:58:5655MojoResult MojoCancelWatchImpl(MojoHandle handle, uintptr_t context) {
rockot49b69e6b272016-03-02 03:46:3756 return g_core->CancelWatch(handle, context);
57}
58
rockotb04b89b52016-06-09 03:58:5659MojoResult MojoAllocMessageImpl(uint32_t num_bytes,
60 const MojoHandle* handles,
61 uint32_t num_handles,
62 MojoAllocMessageFlags flags,
63 MojoMessageHandle* message) {
rockot72d05a462016-04-26 19:56:5064 return g_core->AllocMessage(num_bytes, handles, num_handles, flags, message);
65}
66
rockotb04b89b52016-06-09 03:58:5667MojoResult MojoFreeMessageImpl(MojoMessageHandle message) {
rockot72d05a462016-04-26 19:56:5068 return g_core->FreeMessage(message);
69}
70
rockotb04b89b52016-06-09 03:58:5671MojoResult MojoGetMessageBufferImpl(MojoMessageHandle message, void** buffer) {
rockot72d05a462016-04-26 19:56:5072 return g_core->GetMessageBuffer(message, buffer);
73}
74
rockotb04b89b52016-06-09 03:58:5675MojoResult MojoCreateWaitSetImpl(MojoHandle* wait_set_handle) {
rockotc637caf9b2016-02-10 09:57:0876 return g_core->CreateWaitSet(wait_set_handle);
77}
78
rockotb04b89b52016-06-09 03:58:5679MojoResult MojoAddHandleImpl(MojoHandle wait_set_handle,
80 MojoHandle handle,
81 MojoHandleSignals signals) {
rockotc637caf9b2016-02-10 09:57:0882 return g_core->AddHandle(wait_set_handle, handle, signals);
83}
84
rockotb04b89b52016-06-09 03:58:5685MojoResult MojoRemoveHandleImpl(MojoHandle wait_set_handle, MojoHandle handle) {
rockotc637caf9b2016-02-10 09:57:0886 return g_core->RemoveHandle(wait_set_handle, handle);
87}
88
rockotb04b89b52016-06-09 03:58:5689MojoResult MojoGetReadyHandlesImpl(
90 MojoHandle wait_set_handle,
91 uint32_t* count,
92 MojoHandle* handles,
93 MojoResult* results,
94 struct MojoHandleSignalsState* signals_states) {
rockotc637caf9b2016-02-10 09:57:0895 return g_core->GetReadyHandles(wait_set_handle, count, handles, results,
96 signals_states);
97}
98
rockotb04b89b52016-06-09 03:58:5699MojoResult MojoCreateMessagePipeImpl(
100 const MojoCreateMessagePipeOptions* options,
101 MojoHandle* message_pipe_handle0,
102 MojoHandle* message_pipe_handle1) {
jam76bcf0c2015-10-02 21:01:28103 return g_core->CreateMessagePipe(options, message_pipe_handle0,
104 message_pipe_handle1);
105}
106
rockotb04b89b52016-06-09 03:58:56107MojoResult MojoWriteMessageImpl(MojoHandle message_pipe_handle,
108 const void* bytes,
109 uint32_t num_bytes,
110 const MojoHandle* handles,
111 uint32_t num_handles,
112 MojoWriteMessageFlags flags) {
jam76bcf0c2015-10-02 21:01:28113 return g_core->WriteMessage(message_pipe_handle, bytes, num_bytes, handles,
114 num_handles, flags);
115}
116
rockotb04b89b52016-06-09 03:58:56117MojoResult MojoWriteMessageNewImpl(MojoHandle message_pipe_handle,
118 MojoMessageHandle message,
119 MojoWriteMessageFlags flags) {
rockot72d05a462016-04-26 19:56:50120 return g_core->WriteMessageNew(message_pipe_handle, message, flags);
121}
122
rockotb04b89b52016-06-09 03:58:56123MojoResult MojoReadMessageImpl(MojoHandle message_pipe_handle,
124 void* bytes,
125 uint32_t* num_bytes,
126 MojoHandle* handles,
127 uint32_t* num_handles,
128 MojoReadMessageFlags flags) {
jam76bcf0c2015-10-02 21:01:28129 return g_core->ReadMessage(
130 message_pipe_handle, bytes, num_bytes, handles, num_handles, flags);
131}
132
rockotb04b89b52016-06-09 03:58:56133MojoResult MojoReadMessageNewImpl(MojoHandle message_pipe_handle,
134 MojoMessageHandle* message,
135 uint32_t* num_bytes,
136 MojoHandle* handles,
137 uint32_t* num_handles,
138 MojoReadMessageFlags flags) {
rockot72d05a462016-04-26 19:56:50139 return g_core->ReadMessageNew(
140 message_pipe_handle, message, num_bytes, handles, num_handles, flags);
141}
142
rockotb04b89b52016-06-09 03:58:56143MojoResult MojoFuseMessagePipesImpl(MojoHandle handle0, MojoHandle handle1) {
rockotb1e74df2016-03-14 13:18:30144 return g_core->FuseMessagePipes(handle0, handle1);
145}
146
rockotb04b89b52016-06-09 03:58:56147MojoResult MojoCreateDataPipeImpl(const MojoCreateDataPipeOptions* options,
148 MojoHandle* data_pipe_producer_handle,
149 MojoHandle* data_pipe_consumer_handle) {
jam76bcf0c2015-10-02 21:01:28150 return g_core->CreateDataPipe(options, data_pipe_producer_handle,
151 data_pipe_consumer_handle);
152}
153
rockotb04b89b52016-06-09 03:58:56154MojoResult MojoWriteDataImpl(MojoHandle data_pipe_producer_handle,
155 const void* elements,
156 uint32_t* num_elements,
157 MojoWriteDataFlags flags) {
jam76bcf0c2015-10-02 21:01:28158 return g_core->WriteData(data_pipe_producer_handle, elements, num_elements,
159 flags);
160}
161
rockotb04b89b52016-06-09 03:58:56162MojoResult MojoBeginWriteDataImpl(MojoHandle data_pipe_producer_handle,
163 void** buffer,
164 uint32_t* buffer_num_elements,
165 MojoWriteDataFlags flags) {
jam76bcf0c2015-10-02 21:01:28166 return g_core->BeginWriteData(data_pipe_producer_handle, buffer,
167 buffer_num_elements, flags);
168}
169
rockotb04b89b52016-06-09 03:58:56170MojoResult MojoEndWriteDataImpl(MojoHandle data_pipe_producer_handle,
171 uint32_t num_elements_written) {
jam76bcf0c2015-10-02 21:01:28172 return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written);
173}
174
rockotb04b89b52016-06-09 03:58:56175MojoResult MojoReadDataImpl(MojoHandle data_pipe_consumer_handle,
176 void* elements,
177 uint32_t* num_elements,
178 MojoReadDataFlags flags) {
jam76bcf0c2015-10-02 21:01:28179 return g_core->ReadData(data_pipe_consumer_handle, elements, num_elements,
180 flags);
181}
182
rockotb04b89b52016-06-09 03:58:56183MojoResult MojoBeginReadDataImpl(MojoHandle data_pipe_consumer_handle,
184 const void** buffer,
185 uint32_t* buffer_num_elements,
186 MojoReadDataFlags flags) {
jam76bcf0c2015-10-02 21:01:28187 return g_core->BeginReadData(data_pipe_consumer_handle, buffer,
188 buffer_num_elements, flags);
189}
190
rockotb04b89b52016-06-09 03:58:56191MojoResult MojoEndReadDataImpl(MojoHandle data_pipe_consumer_handle,
192 uint32_t num_elements_read) {
jam76bcf0c2015-10-02 21:01:28193 return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read);
194}
195
rockotb04b89b52016-06-09 03:58:56196MojoResult MojoCreateSharedBufferImpl(
jam76bcf0c2015-10-02 21:01:28197 const struct MojoCreateSharedBufferOptions* options,
198 uint64_t num_bytes,
199 MojoHandle* shared_buffer_handle) {
200 return g_core->CreateSharedBuffer(options, num_bytes, shared_buffer_handle);
201}
202
rockotb04b89b52016-06-09 03:58:56203MojoResult MojoDuplicateBufferHandleImpl(
jam76bcf0c2015-10-02 21:01:28204 MojoHandle buffer_handle,
205 const struct MojoDuplicateBufferHandleOptions* options,
206 MojoHandle* new_buffer_handle) {
207 return g_core->DuplicateBufferHandle(buffer_handle, options,
208 new_buffer_handle);
209}
210
rockotb04b89b52016-06-09 03:58:56211MojoResult MojoMapBufferImpl(MojoHandle buffer_handle,
212 uint64_t offset,
213 uint64_t num_bytes,
214 void** buffer,
215 MojoMapBufferFlags flags) {
jam76bcf0c2015-10-02 21:01:28216 return g_core->MapBuffer(buffer_handle, offset, num_bytes, buffer, flags);
217}
218
rockotb04b89b52016-06-09 03:58:56219MojoResult MojoUnmapBufferImpl(void* buffer) {
jam76bcf0c2015-10-02 21:01:28220 return g_core->UnmapBuffer(buffer);
221}
222
rockotb04b89b52016-06-09 03:58:56223MojoResult MojoWrapPlatformHandleImpl(const MojoPlatformHandle* platform_handle,
224 MojoHandle* mojo_handle) {
rockot28a287e2016-05-24 02:51:37225 return g_core->WrapPlatformHandle(platform_handle, mojo_handle);
226}
227
rockotb04b89b52016-06-09 03:58:56228MojoResult MojoUnwrapPlatformHandleImpl(MojoHandle mojo_handle,
229 MojoPlatformHandle* platform_handle) {
rockot28a287e2016-05-24 02:51:37230 return g_core->UnwrapPlatformHandle(mojo_handle, platform_handle);
231}
232
rockotb04b89b52016-06-09 03:58:56233MojoResult MojoWrapPlatformSharedBufferHandleImpl(
rockot28a287e2016-05-24 02:51:37234 const MojoPlatformHandle* platform_handle,
235 size_t num_bytes,
236 MojoPlatformSharedBufferHandleFlags flags,
237 MojoHandle* mojo_handle) {
238 return g_core->WrapPlatformSharedBufferHandle(platform_handle, num_bytes,
239 flags, mojo_handle);
240}
241
rockotb04b89b52016-06-09 03:58:56242MojoResult MojoUnwrapPlatformSharedBufferHandleImpl(
rockot28a287e2016-05-24 02:51:37243 MojoHandle mojo_handle,
244 MojoPlatformHandle* platform_handle,
245 size_t* num_bytes,
246 MojoPlatformSharedBufferHandleFlags* flags) {
247 return g_core->UnwrapPlatformSharedBufferHandle(mojo_handle, platform_handle,
248 num_bytes, flags);
249}
250
jam76bcf0c2015-10-02 21:01:28251} // extern "C"
rockotb04b89b52016-06-09 03:58:56252
253namespace mojo {
254namespace edk {
255
256MojoSystemThunks MakeSystemThunks() {
257 MojoSystemThunks system_thunks = {sizeof(MojoSystemThunks),
258 MojoGetTimeTicksNowImpl,
259 MojoCloseImpl,
260 MojoWaitImpl,
261 MojoWaitManyImpl,
262 MojoCreateMessagePipeImpl,
263 MojoWriteMessageImpl,
264 MojoReadMessageImpl,
265 MojoCreateDataPipeImpl,
266 MojoWriteDataImpl,
267 MojoBeginWriteDataImpl,
268 MojoEndWriteDataImpl,
269 MojoReadDataImpl,
270 MojoBeginReadDataImpl,
271 MojoEndReadDataImpl,
272 MojoCreateSharedBufferImpl,
273 MojoDuplicateBufferHandleImpl,
274 MojoMapBufferImpl,
275 MojoUnmapBufferImpl,
276 MojoCreateWaitSetImpl,
277 MojoAddHandleImpl,
278 MojoRemoveHandleImpl,
279 MojoGetReadyHandlesImpl,
280 MojoWatchImpl,
281 MojoCancelWatchImpl,
282 MojoFuseMessagePipesImpl,
283 MojoWriteMessageNewImpl,
284 MojoReadMessageNewImpl,
285 MojoAllocMessageImpl,
286 MojoFreeMessageImpl,
287 MojoGetMessageBufferImpl,
288 MojoWrapPlatformHandleImpl,
289 MojoUnwrapPlatformHandleImpl,
290 MojoWrapPlatformSharedBufferHandleImpl,
291 MojoUnwrapPlatformSharedBufferHandleImpl};
292 return system_thunks;
293}
294
295} // namespace edk
296} // namespace mojo