blob: 42e741719227913bb4e0cab4fec9a50ca073e22e [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
Ken Rockotdba46db2018-07-04 18:41:045#include "mojo/core/entrypoints.h"
rockotb04b89b52016-06-09 03:58:566
Avi Drissman2e88ac372015-12-21 18:14:577#include <stdint.h>
8
Ken Rockotdba46db2018-07-04 18:41:049#include "mojo/core/core.h"
rockot85dce0862015-11-13 01:33:5910#include "mojo/public/c/system/buffer.h"
11#include "mojo/public/c/system/data_pipe.h"
12#include "mojo/public/c/system/functions.h"
13#include "mojo/public/c/system/message_pipe.h"
rockot28a287e2016-05-24 02:51:3714#include "mojo/public/c/system/platform_handle.h"
Ken Rockot0db0bcf2018-07-12 22:01:1215#include "mojo/public/c/system/quota.h"
jam76bcf0c2015-10-02 21:01:2816
Ken Rockot898d796d52018-03-23 19:03:5217namespace {
jam76bcf0c2015-10-02 21:01:2818
Ken Rockotdba46db2018-07-04 18:41:0419mojo::core::Core* g_core;
Ken Rockot898d796d52018-03-23 19:03:5220
jam76bcf0c2015-10-02 21:01:2821extern "C" {
rockotc637caf9b2016-02-10 09:57:0822
Ken Rockot773a51f2018-03-24 09:01:1223MojoResult MojoInitializeImpl(const struct MojoInitializeOptions* options) {
24 NOTREACHED() << "Do not call MojoInitialize() as an EDK embedder!";
25 return MOJO_RESULT_OK;
26}
27
rockotb04b89b52016-06-09 03:58:5628MojoTimeTicks MojoGetTimeTicksNowImpl() {
jam76bcf0c2015-10-02 21:01:2829 return g_core->GetTimeTicksNow();
30}
31
rockotb04b89b52016-06-09 03:58:5632MojoResult MojoCloseImpl(MojoHandle handle) {
jam76bcf0c2015-10-02 21:01:2833 return g_core->Close(handle);
34}
35
rockotc7949542017-03-16 09:03:4736MojoResult MojoQueryHandleSignalsStateImpl(
37 MojoHandle handle,
38 MojoHandleSignalsState* signals_state) {
39 return g_core->QueryHandleSignalsState(handle, signals_state);
40}
41
Ken Rockotc12080c2018-05-03 18:10:2142MojoResult MojoCreateMessagePipeImpl(
43 const MojoCreateMessagePipeOptions* options,
44 MojoHandle* message_pipe_handle0,
45 MojoHandle* message_pipe_handle1) {
46 return g_core->CreateMessagePipe(options, message_pipe_handle0,
47 message_pipe_handle1);
rockot49b69e6b272016-03-02 03:46:3748}
49
Ken Rockotc12080c2018-05-03 18:10:2150MojoResult MojoWriteMessageImpl(MojoHandle message_pipe_handle,
51 MojoMessageHandle message,
52 const MojoWriteMessageOptions* options) {
53 return g_core->WriteMessage(message_pipe_handle, message, options);
rockot9eadaba2017-03-15 23:57:4754}
55
Ken Rockotc12080c2018-05-03 18:10:2156MojoResult MojoReadMessageImpl(MojoHandle message_pipe_handle,
57 const MojoReadMessageOptions* options,
58 MojoMessageHandle* message) {
59 return g_core->ReadMessage(message_pipe_handle, options, message);
rockot9eadaba2017-03-15 23:57:4760}
61
Ken Rockotc12080c2018-05-03 18:10:2162MojoResult MojoFuseMessagePipesImpl(
63 MojoHandle handle0,
64 MojoHandle handle1,
65 const MojoFuseMessagePipesOptions* options) {
66 return g_core->FuseMessagePipes(handle0, handle1, options);
rockot49b69e6b272016-03-02 03:46:3767}
68
Ken Rockotf3208fc2018-03-07 20:35:0869MojoResult MojoCreateMessageImpl(const MojoCreateMessageOptions* options,
70 MojoMessageHandle* message) {
71 return g_core->CreateMessage(options, message);
72}
73
Ken Rockotc12080c2018-05-03 18:10:2174MojoResult MojoDestroyMessageImpl(MojoMessageHandle message) {
75 return g_core->DestroyMessage(message);
76}
77
Ken Rockotf3208fc2018-03-07 20:35:0878MojoResult MojoSerializeMessageImpl(
79 MojoMessageHandle message,
80 const MojoSerializeMessageOptions* options) {
81 return g_core->SerializeMessage(message, options);
Ken Rockot15b2b0b2017-06-12 20:36:0582}
83
Ken Rockot8e49dd72018-03-07 18:06:4084MojoResult MojoAppendMessageDataImpl(
Ken Rockotfdf158da2017-06-12 20:45:2985 MojoMessageHandle message,
Ken Rockot8e49dd72018-03-07 18:06:4086 uint32_t additional_payload_size,
87 const MojoHandle* handles,
88 uint32_t num_handles,
89 const MojoAppendMessageDataOptions* options,
Ken Rockotfdf158da2017-06-12 20:45:2990 void** buffer,
Ken Rockot8e49dd72018-03-07 18:06:4091 uint32_t* buffer_size) {
92 return g_core->AppendMessageData(message, additional_payload_size, handles,
93 num_handles, options, buffer, buffer_size);
94}
95
96MojoResult MojoGetMessageDataImpl(MojoMessageHandle message,
97 const MojoGetMessageDataOptions* options,
98 void** buffer,
99 uint32_t* num_bytes,
100 MojoHandle* handles,
101 uint32_t* num_handles) {
102 return g_core->GetMessageData(message, options, buffer, num_bytes, handles,
103 num_handles);
rockot72d05a462016-04-26 19:56:50104}
105
Ken Rockotf3208fc2018-03-07 20:35:08106MojoResult MojoSetMessageContextImpl(
Ken Rockot559b70d2017-07-17 22:35:24107 MojoMessageHandle message,
108 uintptr_t context,
109 MojoMessageContextSerializer serializer,
Ken Rockotf3208fc2018-03-07 20:35:08110 MojoMessageContextDestructor destructor,
111 const MojoSetMessageContextOptions* options) {
112 return g_core->SetMessageContext(message, context, serializer, destructor,
113 options);
Ken Rockot559b70d2017-07-17 22:35:24114}
115
Ken Rockotf3208fc2018-03-07 20:35:08116MojoResult MojoGetMessageContextImpl(
117 MojoMessageHandle message,
118 const MojoGetMessageContextOptions* options,
119 uintptr_t* context) {
120 return g_core->GetMessageContext(message, options, context);
Ken Rockot15b2b0b2017-06-12 20:36:05121}
122
Ken Rockotc12080c2018-05-03 18:10:21123MojoResult MojoNotifyBadMessageImpl(
124 MojoMessageHandle message,
125 const char* error,
Ken Rockot1da30ca2018-05-17 00:02:59126 uint32_t error_num_bytes,
Ken Rockotc12080c2018-05-03 18:10:21127 const MojoNotifyBadMessageOptions* options) {
128 return g_core->NotifyBadMessage(message, error, error_num_bytes, options);
rockotb1e74df2016-03-14 13:18:30129}
130
rockotb04b89b52016-06-09 03:58:56131MojoResult MojoCreateDataPipeImpl(const MojoCreateDataPipeOptions* options,
132 MojoHandle* data_pipe_producer_handle,
133 MojoHandle* data_pipe_consumer_handle) {
jam76bcf0c2015-10-02 21:01:28134 return g_core->CreateDataPipe(options, data_pipe_producer_handle,
135 data_pipe_consumer_handle);
136}
137
rockotb04b89b52016-06-09 03:58:56138MojoResult MojoWriteDataImpl(MojoHandle data_pipe_producer_handle,
139 const void* elements,
140 uint32_t* num_elements,
Ken Rockotc12080c2018-05-03 18:10:21141 const MojoWriteDataOptions* options) {
jam76bcf0c2015-10-02 21:01:28142 return g_core->WriteData(data_pipe_producer_handle, elements, num_elements,
Ken Rockotc12080c2018-05-03 18:10:21143 options);
jam76bcf0c2015-10-02 21:01:28144}
145
rockotb04b89b52016-06-09 03:58:56146MojoResult MojoBeginWriteDataImpl(MojoHandle data_pipe_producer_handle,
Ken Rockotc12080c2018-05-03 18:10:21147 const MojoBeginWriteDataOptions* options,
rockotb04b89b52016-06-09 03:58:56148 void** buffer,
Ken Rockotc12080c2018-05-03 18:10:21149 uint32_t* buffer_num_elements) {
150 return g_core->BeginWriteData(data_pipe_producer_handle, options, buffer,
151 buffer_num_elements);
jam76bcf0c2015-10-02 21:01:28152}
153
rockotb04b89b52016-06-09 03:58:56154MojoResult MojoEndWriteDataImpl(MojoHandle data_pipe_producer_handle,
Ken Rockotc12080c2018-05-03 18:10:21155 uint32_t num_elements_written,
156 const MojoEndWriteDataOptions* options) {
157 return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written,
158 options);
jam76bcf0c2015-10-02 21:01:28159}
160
rockotb04b89b52016-06-09 03:58:56161MojoResult MojoReadDataImpl(MojoHandle data_pipe_consumer_handle,
Ken Rockotc12080c2018-05-03 18:10:21162 const MojoReadDataOptions* options,
rockotb04b89b52016-06-09 03:58:56163 void* elements,
Ken Rockotc12080c2018-05-03 18:10:21164 uint32_t* num_elements) {
165 return g_core->ReadData(data_pipe_consumer_handle, options, elements,
166 num_elements);
jam76bcf0c2015-10-02 21:01:28167}
168
rockotb04b89b52016-06-09 03:58:56169MojoResult MojoBeginReadDataImpl(MojoHandle data_pipe_consumer_handle,
Ken Rockotc12080c2018-05-03 18:10:21170 const MojoBeginReadDataOptions* options,
rockotb04b89b52016-06-09 03:58:56171 const void** buffer,
Ken Rockotc12080c2018-05-03 18:10:21172 uint32_t* buffer_num_elements) {
173 return g_core->BeginReadData(data_pipe_consumer_handle, options, buffer,
174 buffer_num_elements);
jam76bcf0c2015-10-02 21:01:28175}
176
rockotb04b89b52016-06-09 03:58:56177MojoResult MojoEndReadDataImpl(MojoHandle data_pipe_consumer_handle,
Ken Rockotc12080c2018-05-03 18:10:21178 uint32_t num_elements_read,
179 const MojoEndReadDataOptions* options) {
180 return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read,
181 options);
jam76bcf0c2015-10-02 21:01:28182}
183
rockotb04b89b52016-06-09 03:58:56184MojoResult MojoCreateSharedBufferImpl(
jam76bcf0c2015-10-02 21:01:28185 uint64_t num_bytes,
Ken Rockotc12080c2018-05-03 18:10:21186 const MojoCreateSharedBufferOptions* options,
jam76bcf0c2015-10-02 21:01:28187 MojoHandle* shared_buffer_handle) {
Ken Rockotc12080c2018-05-03 18:10:21188 return g_core->CreateSharedBuffer(num_bytes, options, shared_buffer_handle);
jam76bcf0c2015-10-02 21:01:28189}
190
rockotb04b89b52016-06-09 03:58:56191MojoResult MojoDuplicateBufferHandleImpl(
jam76bcf0c2015-10-02 21:01:28192 MojoHandle buffer_handle,
Lei Zhang7b818882018-03-24 01:38:40193 const MojoDuplicateBufferHandleOptions* options,
jam76bcf0c2015-10-02 21:01:28194 MojoHandle* new_buffer_handle) {
195 return g_core->DuplicateBufferHandle(buffer_handle, options,
196 new_buffer_handle);
197}
198
rockotb04b89b52016-06-09 03:58:56199MojoResult MojoMapBufferImpl(MojoHandle buffer_handle,
200 uint64_t offset,
201 uint64_t num_bytes,
Ken Rockotc12080c2018-05-03 18:10:21202 const MojoMapBufferOptions* options,
203 void** buffer) {
204 return g_core->MapBuffer(buffer_handle, offset, num_bytes, options, buffer);
jam76bcf0c2015-10-02 21:01:28205}
206
rockotb04b89b52016-06-09 03:58:56207MojoResult MojoUnmapBufferImpl(void* buffer) {
jam76bcf0c2015-10-02 21:01:28208 return g_core->UnmapBuffer(buffer);
209}
210
Lei Zhang7b818882018-03-24 01:38:40211MojoResult MojoGetBufferInfoImpl(MojoHandle buffer_handle,
Ken Rockotc12080c2018-05-03 18:10:21212 const MojoGetBufferInfoOptions* options,
Lei Zhang7b818882018-03-24 01:38:40213 MojoSharedBufferInfo* info) {
214 return g_core->GetBufferInfo(buffer_handle, options, info);
215}
216
Ken Rockotc12080c2018-05-03 18:10:21217MojoResult MojoCreateTrapImpl(MojoTrapEventHandler handler,
218 const MojoCreateTrapOptions* options,
219 MojoHandle* trap_handle) {
220 return g_core->CreateTrap(handler, options, trap_handle);
221}
222
223MojoResult MojoAddTriggerImpl(MojoHandle trap_handle,
224 MojoHandle handle,
225 MojoHandleSignals signals,
226 MojoTriggerCondition condition,
227 uintptr_t context,
228 const MojoAddTriggerOptions* options) {
229 return g_core->AddTrigger(trap_handle, handle, signals, condition, context,
230 options);
231}
232
233MojoResult MojoRemoveTriggerImpl(MojoHandle trap_handle,
234 uintptr_t context,
235 const MojoRemoveTriggerOptions* options) {
236 return g_core->RemoveTrigger(trap_handle, context, options);
237}
238
239MojoResult MojoArmTrapImpl(MojoHandle trap_handle,
240 const MojoArmTrapOptions* options,
Ken Rockot7831a952018-07-12 01:11:30241 uint32_t* num_blocking_events,
242 MojoTrapEvent* blocking_events) {
243 return g_core->ArmTrap(trap_handle, options, num_blocking_events,
244 blocking_events);
Ken Rockotc12080c2018-05-03 18:10:21245}
246
Ken Rockot88be0452018-05-16 17:31:04247MojoResult MojoWrapPlatformHandleImpl(
rockot28a287e2016-05-24 02:51:37248 const MojoPlatformHandle* platform_handle,
Ken Rockot88be0452018-05-16 17:31:04249 const MojoWrapPlatformHandleOptions* options,
rockot28a287e2016-05-24 02:51:37250 MojoHandle* mojo_handle) {
Ken Rockota22cf312018-06-21 19:56:54251 return g_core->WrapPlatformHandle(platform_handle, options, mojo_handle);
rockot28a287e2016-05-24 02:51:37252}
253
Ken Rockot88be0452018-05-16 17:31:04254MojoResult MojoUnwrapPlatformHandleImpl(
rockot28a287e2016-05-24 02:51:37255 MojoHandle mojo_handle,
Ken Rockot88be0452018-05-16 17:31:04256 const MojoUnwrapPlatformHandleOptions* options,
257 MojoPlatformHandle* platform_handle) {
Ken Rockota22cf312018-06-21 19:56:54258 return g_core->UnwrapPlatformHandle(mojo_handle, options, platform_handle);
Ken Rockot88be0452018-05-16 17:31:04259}
260
261MojoResult MojoWrapPlatformSharedMemoryRegionImpl(
262 const MojoPlatformHandle* platform_handles,
263 uint32_t num_platform_handles,
264 uint64_t num_bytes,
265 const MojoSharedBufferGuid* guid,
266 MojoPlatformSharedMemoryRegionAccessMode access_mode,
267 const MojoWrapPlatformSharedMemoryRegionOptions* options,
268 MojoHandle* mojo_handle) {
269 return g_core->WrapPlatformSharedMemoryRegion(
270 platform_handles, num_platform_handles, num_bytes, guid, access_mode,
271 options, mojo_handle);
272}
273
274MojoResult MojoUnwrapPlatformSharedMemoryRegionImpl(
275 MojoHandle mojo_handle,
276 const MojoUnwrapPlatformSharedMemoryRegionOptions* options,
277 MojoPlatformHandle* platform_handles,
278 uint32_t* num_platform_handles,
279 uint64_t* num_bytes,
Ken Rockot61a3aab2017-06-20 16:19:57280 MojoSharedBufferGuid* guid,
Ken Rockot88be0452018-05-16 17:31:04281 MojoPlatformSharedMemoryRegionAccessMode* access_mode) {
282 return g_core->UnwrapPlatformSharedMemoryRegion(
283 mojo_handle, options, platform_handles, num_platform_handles, num_bytes,
284 guid, access_mode);
rockot28a287e2016-05-24 02:51:37285}
286
Ken Rockotf86cdb8b2018-05-19 23:35:01287MojoResult MojoCreateInvitationImpl(const MojoCreateInvitationOptions* options,
288 MojoHandle* invitation_handle) {
289 return g_core->CreateInvitation(options, invitation_handle);
290}
291
292MojoResult MojoAttachMessagePipeToInvitationImpl(
293 MojoHandle invitation_handle,
Ken Rockot189566cd2018-05-24 21:04:17294 const void* name,
295 uint32_t name_num_bytes,
Ken Rockotf86cdb8b2018-05-19 23:35:01296 const MojoAttachMessagePipeToInvitationOptions* options,
297 MojoHandle* message_pipe_handle) {
Ken Rockot189566cd2018-05-24 21:04:17298 return g_core->AttachMessagePipeToInvitation(
299 invitation_handle, name, name_num_bytes, options, message_pipe_handle);
Ken Rockotf86cdb8b2018-05-19 23:35:01300}
301
302MojoResult MojoExtractMessagePipeFromInvitationImpl(
303 MojoHandle invitation_handle,
Ken Rockot189566cd2018-05-24 21:04:17304 const void* name,
305 uint32_t name_num_bytes,
Ken Rockotf86cdb8b2018-05-19 23:35:01306 const MojoExtractMessagePipeFromInvitationOptions* options,
307 MojoHandle* message_pipe_handle) {
Ken Rockot189566cd2018-05-24 21:04:17308 return g_core->ExtractMessagePipeFromInvitation(
309 invitation_handle, name, name_num_bytes, options, message_pipe_handle);
Ken Rockotf86cdb8b2018-05-19 23:35:01310}
311
312MojoResult MojoSendInvitationImpl(
313 MojoHandle invitation_handle,
314 const MojoPlatformProcessHandle* process_handle,
315 const MojoInvitationTransportEndpoint* transport_endpoint,
316 MojoProcessErrorHandler error_handler,
317 uintptr_t error_handler_context,
318 const MojoSendInvitationOptions* options) {
319 return g_core->SendInvitation(invitation_handle, process_handle,
320 transport_endpoint, error_handler,
321 error_handler_context, options);
322}
323
324MojoResult MojoAcceptInvitationImpl(
325 const MojoInvitationTransportEndpoint* transport_endpoint,
326 const MojoAcceptInvitationOptions* options,
327 MojoHandle* invitation_handle) {
328 return g_core->AcceptInvitation(transport_endpoint, options,
329 invitation_handle);
330}
331
Ken Rockot0db0bcf2018-07-12 22:01:12332MojoResult MojoSetQuotaImpl(MojoHandle handle,
333 MojoQuotaType type,
334 uint64_t limit,
335 const MojoSetQuotaOptions* options) {
336 return g_core->SetQuota(handle, type, limit, options);
337}
338
339MojoResult MojoQueryQuotaImpl(MojoHandle handle,
340 MojoQuotaType type,
341 const MojoQueryQuotaOptions* options,
342 uint64_t* current_limit,
343 uint64_t* current_usage) {
344 return g_core->QueryQuota(handle, type, options, current_limit,
345 current_usage);
346}
347
jam76bcf0c2015-10-02 21:01:28348} // extern "C"
rockotb04b89b52016-06-09 03:58:56349
Ken Rockot898d796d52018-03-23 19:03:52350MojoSystemThunks g_thunks = {sizeof(MojoSystemThunks),
Ken Rockot773a51f2018-03-24 09:01:12351 MojoInitializeImpl,
Ken Rockot898d796d52018-03-23 19:03:52352 MojoGetTimeTicksNowImpl,
353 MojoCloseImpl,
354 MojoQueryHandleSignalsStateImpl,
355 MojoCreateMessagePipeImpl,
356 MojoWriteMessageImpl,
357 MojoReadMessageImpl,
Ken Rockotc12080c2018-05-03 18:10:21358 MojoFuseMessagePipesImpl,
359 MojoCreateMessageImpl,
360 MojoDestroyMessageImpl,
361 MojoSerializeMessageImpl,
362 MojoAppendMessageDataImpl,
363 MojoGetMessageDataImpl,
364 MojoSetMessageContextImpl,
365 MojoGetMessageContextImpl,
366 MojoNotifyBadMessageImpl,
Ken Rockot898d796d52018-03-23 19:03:52367 MojoCreateDataPipeImpl,
368 MojoWriteDataImpl,
369 MojoBeginWriteDataImpl,
370 MojoEndWriteDataImpl,
371 MojoReadDataImpl,
372 MojoBeginReadDataImpl,
373 MojoEndReadDataImpl,
374 MojoCreateSharedBufferImpl,
375 MojoDuplicateBufferHandleImpl,
376 MojoMapBufferImpl,
377 MojoUnmapBufferImpl,
Lei Zhang7b818882018-03-24 01:38:40378 MojoGetBufferInfoImpl,
Ken Rockot898d796d52018-03-23 19:03:52379 MojoCreateTrapImpl,
380 MojoAddTriggerImpl,
381 MojoRemoveTriggerImpl,
382 MojoArmTrapImpl,
Ken Rockot898d796d52018-03-23 19:03:52383 MojoWrapPlatformHandleImpl,
384 MojoUnwrapPlatformHandleImpl,
Ken Rockot88be0452018-05-16 17:31:04385 MojoWrapPlatformSharedMemoryRegionImpl,
Ken Rockotf86cdb8b2018-05-19 23:35:01386 MojoUnwrapPlatformSharedMemoryRegionImpl,
387 MojoCreateInvitationImpl,
388 MojoAttachMessagePipeToInvitationImpl,
389 MojoExtractMessagePipeFromInvitationImpl,
390 MojoSendInvitationImpl,
Ken Rockot0db0bcf2018-07-12 22:01:12391 MojoAcceptInvitationImpl,
392 MojoSetQuotaImpl,
393 MojoQueryQuotaImpl};
Ken Rockot898d796d52018-03-23 19:03:52394
395} // namespace
396
rockotb04b89b52016-06-09 03:58:56397namespace mojo {
Ken Rockotdba46db2018-07-04 18:41:04398namespace core {
rockotb04b89b52016-06-09 03:58:56399
Ken Rockot898d796d52018-03-23 19:03:52400// static
401Core* Core::Get() {
402 return g_core;
403}
404
405void InitializeCore() {
406 g_core = new Core;
407}
408
409const MojoSystemThunks& GetSystemThunks() {
410 return g_thunks;
rockotb04b89b52016-06-09 03:58:56411}
412
Ken Rockotdba46db2018-07-04 18:41:04413} // namespace core
rockotb04b89b52016-06-09 03:58:56414} // namespace mojo