Home | History | Annotate | Download | only in embedder
      1 // 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 
      5 #include "mojo/edk/embedder/entrypoints.h"
      6 
      7 #include <stdint.h>
      8 
      9 #include "mojo/edk/embedder/embedder_internal.h"
     10 #include "mojo/edk/system/core.h"
     11 #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"
     15 #include "mojo/public/c/system/platform_handle.h"
     16 #include "mojo/public/c/system/wait_set.h"
     17 
     18 using mojo::edk::internal::g_core;
     19 
     20 // Definitions of the system functions.
     21 extern "C" {
     22 
     23 MojoTimeTicks MojoGetTimeTicksNowImpl() {
     24   return g_core->GetTimeTicksNow();
     25 }
     26 
     27 MojoResult MojoCloseImpl(MojoHandle handle) {
     28   return g_core->Close(handle);
     29 }
     30 
     31 MojoResult MojoWaitImpl(MojoHandle handle,
     32                         MojoHandleSignals signals,
     33                         MojoDeadline deadline,
     34                         MojoHandleSignalsState* signals_state) {
     35   return g_core->Wait(handle, signals, deadline, signals_state);
     36 }
     37 
     38 MojoResult 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) {
     44   return g_core->WaitMany(handles, signals, num_handles, deadline, result_index,
     45                           signals_states);
     46 }
     47 
     48 MojoResult MojoWatchImpl(MojoHandle handle,
     49                          MojoHandleSignals signals,
     50                          MojoWatchCallback callback,
     51                          uintptr_t context) {
     52   return g_core->Watch(handle, signals, callback, context);
     53 }
     54 
     55 MojoResult MojoCancelWatchImpl(MojoHandle handle, uintptr_t context) {
     56   return g_core->CancelWatch(handle, context);
     57 }
     58 
     59 MojoResult MojoAllocMessageImpl(uint32_t num_bytes,
     60                                 const MojoHandle* handles,
     61                                 uint32_t num_handles,
     62                                 MojoAllocMessageFlags flags,
     63                                 MojoMessageHandle* message) {
     64   return g_core->AllocMessage(num_bytes, handles, num_handles, flags, message);
     65 }
     66 
     67 MojoResult MojoFreeMessageImpl(MojoMessageHandle message) {
     68   return g_core->FreeMessage(message);
     69 }
     70 
     71 MojoResult MojoGetMessageBufferImpl(MojoMessageHandle message, void** buffer) {
     72   return g_core->GetMessageBuffer(message, buffer);
     73 }
     74 
     75 MojoResult MojoCreateWaitSetImpl(MojoHandle* wait_set_handle) {
     76   return g_core->CreateWaitSet(wait_set_handle);
     77 }
     78 
     79 MojoResult MojoAddHandleImpl(MojoHandle wait_set_handle,
     80                              MojoHandle handle,
     81                              MojoHandleSignals signals) {
     82   return g_core->AddHandle(wait_set_handle, handle, signals);
     83 }
     84 
     85 MojoResult MojoRemoveHandleImpl(MojoHandle wait_set_handle, MojoHandle handle) {
     86   return g_core->RemoveHandle(wait_set_handle, handle);
     87 }
     88 
     89 MojoResult MojoGetReadyHandlesImpl(
     90     MojoHandle wait_set_handle,
     91     uint32_t* count,
     92     MojoHandle* handles,
     93     MojoResult* results,
     94     struct MojoHandleSignalsState* signals_states) {
     95   return g_core->GetReadyHandles(wait_set_handle, count, handles, results,
     96                                  signals_states);
     97 }
     98 
     99 MojoResult MojoCreateMessagePipeImpl(
    100     const MojoCreateMessagePipeOptions* options,
    101     MojoHandle* message_pipe_handle0,
    102     MojoHandle* message_pipe_handle1) {
    103   return g_core->CreateMessagePipe(options, message_pipe_handle0,
    104                                    message_pipe_handle1);
    105 }
    106 
    107 MojoResult 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) {
    113   return g_core->WriteMessage(message_pipe_handle, bytes, num_bytes, handles,
    114                               num_handles, flags);
    115 }
    116 
    117 MojoResult MojoWriteMessageNewImpl(MojoHandle message_pipe_handle,
    118                                    MojoMessageHandle message,
    119                                    MojoWriteMessageFlags flags) {
    120   return g_core->WriteMessageNew(message_pipe_handle, message, flags);
    121 }
    122 
    123 MojoResult MojoReadMessageImpl(MojoHandle message_pipe_handle,
    124                                void* bytes,
    125                                uint32_t* num_bytes,
    126                                MojoHandle* handles,
    127                                uint32_t* num_handles,
    128                                MojoReadMessageFlags flags) {
    129   return g_core->ReadMessage(
    130       message_pipe_handle, bytes, num_bytes, handles, num_handles, flags);
    131 }
    132 
    133 MojoResult MojoReadMessageNewImpl(MojoHandle message_pipe_handle,
    134                                   MojoMessageHandle* message,
    135                                   uint32_t* num_bytes,
    136                                   MojoHandle* handles,
    137                                   uint32_t* num_handles,
    138                                   MojoReadMessageFlags flags) {
    139   return g_core->ReadMessageNew(
    140       message_pipe_handle, message, num_bytes, handles, num_handles, flags);
    141 }
    142 
    143 MojoResult MojoFuseMessagePipesImpl(MojoHandle handle0, MojoHandle handle1) {
    144   return g_core->FuseMessagePipes(handle0, handle1);
    145 }
    146 
    147 MojoResult MojoCreateDataPipeImpl(const MojoCreateDataPipeOptions* options,
    148                                   MojoHandle* data_pipe_producer_handle,
    149                                   MojoHandle* data_pipe_consumer_handle) {
    150   return g_core->CreateDataPipe(options, data_pipe_producer_handle,
    151                                 data_pipe_consumer_handle);
    152 }
    153 
    154 MojoResult MojoWriteDataImpl(MojoHandle data_pipe_producer_handle,
    155                              const void* elements,
    156                              uint32_t* num_elements,
    157                              MojoWriteDataFlags flags) {
    158   return g_core->WriteData(data_pipe_producer_handle, elements, num_elements,
    159                            flags);
    160 }
    161 
    162 MojoResult MojoBeginWriteDataImpl(MojoHandle data_pipe_producer_handle,
    163                                   void** buffer,
    164                                   uint32_t* buffer_num_elements,
    165                                   MojoWriteDataFlags flags) {
    166   return g_core->BeginWriteData(data_pipe_producer_handle, buffer,
    167                                 buffer_num_elements, flags);
    168 }
    169 
    170 MojoResult MojoEndWriteDataImpl(MojoHandle data_pipe_producer_handle,
    171                                 uint32_t num_elements_written) {
    172   return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written);
    173 }
    174 
    175 MojoResult MojoReadDataImpl(MojoHandle data_pipe_consumer_handle,
    176                             void* elements,
    177                             uint32_t* num_elements,
    178                             MojoReadDataFlags flags) {
    179   return g_core->ReadData(data_pipe_consumer_handle, elements, num_elements,
    180                           flags);
    181 }
    182 
    183 MojoResult MojoBeginReadDataImpl(MojoHandle data_pipe_consumer_handle,
    184                                  const void** buffer,
    185                                  uint32_t* buffer_num_elements,
    186                                  MojoReadDataFlags flags) {
    187   return g_core->BeginReadData(data_pipe_consumer_handle, buffer,
    188                                buffer_num_elements, flags);
    189 }
    190 
    191 MojoResult MojoEndReadDataImpl(MojoHandle data_pipe_consumer_handle,
    192                                uint32_t num_elements_read) {
    193   return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read);
    194 }
    195 
    196 MojoResult MojoCreateSharedBufferImpl(
    197     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 
    203 MojoResult MojoDuplicateBufferHandleImpl(
    204     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 
    211 MojoResult MojoMapBufferImpl(MojoHandle buffer_handle,
    212                              uint64_t offset,
    213                              uint64_t num_bytes,
    214                              void** buffer,
    215                              MojoMapBufferFlags flags) {
    216   return g_core->MapBuffer(buffer_handle, offset, num_bytes, buffer, flags);
    217 }
    218 
    219 MojoResult MojoUnmapBufferImpl(void* buffer) {
    220   return g_core->UnmapBuffer(buffer);
    221 }
    222 
    223 MojoResult MojoWrapPlatformHandleImpl(const MojoPlatformHandle* platform_handle,
    224                                       MojoHandle* mojo_handle) {
    225   return g_core->WrapPlatformHandle(platform_handle, mojo_handle);
    226 }
    227 
    228 MojoResult MojoUnwrapPlatformHandleImpl(MojoHandle mojo_handle,
    229                                         MojoPlatformHandle* platform_handle) {
    230   return g_core->UnwrapPlatformHandle(mojo_handle, platform_handle);
    231 }
    232 
    233 MojoResult MojoWrapPlatformSharedBufferHandleImpl(
    234     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 
    242 MojoResult MojoUnwrapPlatformSharedBufferHandleImpl(
    243     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 
    251 MojoResult MojoNotifyBadMessageImpl(MojoMessageHandle message,
    252                                     const char* error,
    253                                     size_t error_num_bytes) {
    254   return g_core->NotifyBadMessage(message, error, error_num_bytes);
    255 }
    256 
    257 MojoResult MojoGetPropertyImpl(MojoPropertyType type, void* value) {
    258   return g_core->GetProperty(type, value);
    259 }
    260 
    261 }  // extern "C"
    262 
    263 namespace mojo {
    264 namespace edk {
    265 
    266 MojoSystemThunks MakeSystemThunks() {
    267   MojoSystemThunks system_thunks = {sizeof(MojoSystemThunks),
    268                                     MojoGetTimeTicksNowImpl,
    269                                     MojoCloseImpl,
    270                                     MojoWaitImpl,
    271                                     MojoWaitManyImpl,
    272                                     MojoCreateMessagePipeImpl,
    273                                     MojoWriteMessageImpl,
    274                                     MojoReadMessageImpl,
    275                                     MojoCreateDataPipeImpl,
    276                                     MojoWriteDataImpl,
    277                                     MojoBeginWriteDataImpl,
    278                                     MojoEndWriteDataImpl,
    279                                     MojoReadDataImpl,
    280                                     MojoBeginReadDataImpl,
    281                                     MojoEndReadDataImpl,
    282                                     MojoCreateSharedBufferImpl,
    283                                     MojoDuplicateBufferHandleImpl,
    284                                     MojoMapBufferImpl,
    285                                     MojoUnmapBufferImpl,
    286                                     MojoCreateWaitSetImpl,
    287                                     MojoAddHandleImpl,
    288                                     MojoRemoveHandleImpl,
    289                                     MojoGetReadyHandlesImpl,
    290                                     MojoWatchImpl,
    291                                     MojoCancelWatchImpl,
    292                                     MojoFuseMessagePipesImpl,
    293                                     MojoWriteMessageNewImpl,
    294                                     MojoReadMessageNewImpl,
    295                                     MojoAllocMessageImpl,
    296                                     MojoFreeMessageImpl,
    297                                     MojoGetMessageBufferImpl,
    298                                     MojoWrapPlatformHandleImpl,
    299                                     MojoUnwrapPlatformHandleImpl,
    300                                     MojoWrapPlatformSharedBufferHandleImpl,
    301                                     MojoUnwrapPlatformSharedBufferHandleImpl,
    302                                     MojoNotifyBadMessageImpl,
    303                                     MojoGetPropertyImpl};
    304   return system_thunks;
    305 }
    306 
    307 }  // namespace edk
    308 }  // namespace mojo
    309