OLD | NEW |
(Empty) | |
| 1 // Copyright 2013 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/public/platform/native/system_thunks.h" |
| 6 |
| 7 #include <assert.h> |
| 8 #include <stddef.h> |
| 9 #include <stdint.h> |
| 10 |
| 11 #include "mojo/public/platform/native/thunk_export.h" |
| 12 |
| 13 extern "C" { |
| 14 |
| 15 static MojoSystemThunks g_thunks = {0}; |
| 16 |
| 17 MojoTimeTicks MojoGetTimeTicksNow() { |
| 18 assert(g_thunks.GetTimeTicksNow); |
| 19 return g_thunks.GetTimeTicksNow(); |
| 20 } |
| 21 |
| 22 MojoResult MojoClose(MojoHandle handle) { |
| 23 assert(g_thunks.Close); |
| 24 return g_thunks.Close(handle); |
| 25 } |
| 26 |
| 27 MojoResult MojoWait(MojoHandle handle, |
| 28 MojoHandleSignals signals, |
| 29 MojoDeadline deadline, |
| 30 struct MojoHandleSignalsState* signals_state) { |
| 31 assert(g_thunks.Wait); |
| 32 return g_thunks.Wait(handle, signals, deadline, signals_state); |
| 33 } |
| 34 |
| 35 MojoResult MojoWaitMany(const MojoHandle* handles, |
| 36 const MojoHandleSignals* signals, |
| 37 uint32_t num_handles, |
| 38 MojoDeadline deadline, |
| 39 uint32_t* result_index, |
| 40 struct MojoHandleSignalsState* signals_states) { |
| 41 assert(g_thunks.WaitMany); |
| 42 return g_thunks.WaitMany(handles, signals, num_handles, deadline, |
| 43 result_index, signals_states); |
| 44 } |
| 45 |
| 46 MojoResult MojoCreateMessagePipe(const MojoCreateMessagePipeOptions* options, |
| 47 MojoHandle* message_pipe_handle0, |
| 48 MojoHandle* message_pipe_handle1) { |
| 49 assert(g_thunks.CreateMessagePipe); |
| 50 return g_thunks.CreateMessagePipe(options, message_pipe_handle0, |
| 51 message_pipe_handle1); |
| 52 } |
| 53 |
| 54 MojoResult MojoWriteMessage(MojoHandle message_pipe_handle, |
| 55 const void* bytes, |
| 56 uint32_t num_bytes, |
| 57 const MojoHandle* handles, |
| 58 uint32_t num_handles, |
| 59 MojoWriteMessageFlags flags) { |
| 60 assert(g_thunks.WriteMessage); |
| 61 return g_thunks.WriteMessage(message_pipe_handle, bytes, num_bytes, handles, |
| 62 num_handles, flags); |
| 63 } |
| 64 |
| 65 MojoResult MojoReadMessage(MojoHandle message_pipe_handle, |
| 66 void* bytes, |
| 67 uint32_t* num_bytes, |
| 68 MojoHandle* handles, |
| 69 uint32_t* num_handles, |
| 70 MojoReadMessageFlags flags) { |
| 71 assert(g_thunks.ReadMessage); |
| 72 return g_thunks.ReadMessage(message_pipe_handle, bytes, num_bytes, handles, |
| 73 num_handles, flags); |
| 74 } |
| 75 |
| 76 MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options, |
| 77 MojoHandle* data_pipe_producer_handle, |
| 78 MojoHandle* data_pipe_consumer_handle) { |
| 79 assert(g_thunks.CreateDataPipe); |
| 80 return g_thunks.CreateDataPipe(options, data_pipe_producer_handle, |
| 81 data_pipe_consumer_handle); |
| 82 } |
| 83 |
| 84 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, |
| 85 const void* elements, |
| 86 uint32_t* num_elements, |
| 87 MojoWriteDataFlags flags) { |
| 88 assert(g_thunks.WriteData); |
| 89 return g_thunks.WriteData(data_pipe_producer_handle, elements, num_elements, |
| 90 flags); |
| 91 } |
| 92 |
| 93 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, |
| 94 void** buffer, |
| 95 uint32_t* buffer_num_elements, |
| 96 MojoWriteDataFlags flags) { |
| 97 assert(g_thunks.BeginWriteData); |
| 98 return g_thunks.BeginWriteData(data_pipe_producer_handle, buffer, |
| 99 buffer_num_elements, flags); |
| 100 } |
| 101 |
| 102 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, |
| 103 uint32_t num_elements_written) { |
| 104 assert(g_thunks.EndWriteData); |
| 105 return g_thunks.EndWriteData(data_pipe_producer_handle, num_elements_written); |
| 106 } |
| 107 |
| 108 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, |
| 109 void* elements, |
| 110 uint32_t* num_elements, |
| 111 MojoReadDataFlags flags) { |
| 112 assert(g_thunks.ReadData); |
| 113 return g_thunks.ReadData(data_pipe_consumer_handle, elements, num_elements, |
| 114 flags); |
| 115 } |
| 116 |
| 117 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, |
| 118 const void** buffer, |
| 119 uint32_t* buffer_num_elements, |
| 120 MojoReadDataFlags flags) { |
| 121 assert(g_thunks.BeginReadData); |
| 122 return g_thunks.BeginReadData(data_pipe_consumer_handle, buffer, |
| 123 buffer_num_elements, flags); |
| 124 } |
| 125 |
| 126 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, |
| 127 uint32_t num_elements_read) { |
| 128 assert(g_thunks.EndReadData); |
| 129 return g_thunks.EndReadData(data_pipe_consumer_handle, num_elements_read); |
| 130 } |
| 131 |
| 132 MojoResult MojoCreateSharedBuffer( |
| 133 const struct MojoCreateSharedBufferOptions* options, |
| 134 uint64_t num_bytes, |
| 135 MojoHandle* shared_buffer_handle) { |
| 136 assert(g_thunks.CreateSharedBuffer); |
| 137 return g_thunks.CreateSharedBuffer(options, num_bytes, shared_buffer_handle); |
| 138 } |
| 139 |
| 140 MojoResult MojoDuplicateBufferHandle( |
| 141 MojoHandle buffer_handle, |
| 142 const struct MojoDuplicateBufferHandleOptions* options, |
| 143 MojoHandle* new_buffer_handle) { |
| 144 assert(g_thunks.DuplicateBufferHandle); |
| 145 return g_thunks.DuplicateBufferHandle(buffer_handle, options, |
| 146 new_buffer_handle); |
| 147 } |
| 148 |
| 149 MojoResult MojoMapBuffer(MojoHandle buffer_handle, |
| 150 uint64_t offset, |
| 151 uint64_t num_bytes, |
| 152 void** buffer, |
| 153 MojoMapBufferFlags flags) { |
| 154 assert(g_thunks.MapBuffer); |
| 155 return g_thunks.MapBuffer(buffer_handle, offset, num_bytes, buffer, flags); |
| 156 } |
| 157 |
| 158 MojoResult MojoUnmapBuffer(void* buffer) { |
| 159 assert(g_thunks.UnmapBuffer); |
| 160 return g_thunks.UnmapBuffer(buffer); |
| 161 } |
| 162 |
| 163 MojoResult MojoCreateWaitSet(MojoHandle* wait_set) { |
| 164 assert(g_thunks.CreateWaitSet); |
| 165 return g_thunks.CreateWaitSet(wait_set); |
| 166 } |
| 167 |
| 168 MojoResult MojoAddHandle(MojoHandle wait_set, |
| 169 MojoHandle handle, |
| 170 MojoHandleSignals signals) { |
| 171 assert(g_thunks.AddHandle); |
| 172 return g_thunks.AddHandle(wait_set, handle, signals); |
| 173 } |
| 174 |
| 175 MojoResult MojoRemoveHandle(MojoHandle wait_set, MojoHandle handle) { |
| 176 assert(g_thunks.RemoveHandle); |
| 177 return g_thunks.RemoveHandle(wait_set, handle); |
| 178 } |
| 179 |
| 180 MojoResult MojoGetReadyHandles(MojoHandle wait_set, |
| 181 uint32_t* count, |
| 182 MojoHandle* handles, |
| 183 MojoResult* results, |
| 184 struct MojoHandleSignalsState* signals_states) { |
| 185 assert(g_thunks.GetReadyHandles); |
| 186 return g_thunks.GetReadyHandles(wait_set, count, handles, results, |
| 187 signals_states); |
| 188 } |
| 189 |
| 190 MojoResult MojoWatch(MojoHandle handle, |
| 191 MojoHandleSignals signals, |
| 192 MojoWatchCallback callback, |
| 193 uintptr_t context) { |
| 194 assert(g_thunks.Watch); |
| 195 return g_thunks.Watch(handle, signals, callback, context); |
| 196 } |
| 197 |
| 198 MojoResult MojoCancelWatch(MojoHandle handle, uintptr_t context) { |
| 199 assert(g_thunks.CancelWatch); |
| 200 return g_thunks.CancelWatch(handle, context); |
| 201 } |
| 202 |
| 203 MojoResult MojoFuseMessagePipes(MojoHandle handle0, MojoHandle handle1) { |
| 204 assert(g_thunks.FuseMessagePipes); |
| 205 return g_thunks.FuseMessagePipes(handle0, handle1); |
| 206 } |
| 207 |
| 208 MojoResult MojoWriteMessageNew(MojoHandle message_pipe_handle, |
| 209 MojoMessageHandle message, |
| 210 MojoWriteMessageFlags flags) { |
| 211 assert(g_thunks.WriteMessageNew); |
| 212 return g_thunks.WriteMessageNew(message_pipe_handle, message, flags); |
| 213 } |
| 214 |
| 215 MojoResult MojoReadMessageNew(MojoHandle message_pipe_handle, |
| 216 MojoMessageHandle* message, |
| 217 uint32_t* num_bytes, |
| 218 MojoHandle* handles, |
| 219 uint32_t* num_handles, |
| 220 MojoReadMessageFlags flags) { |
| 221 assert(g_thunks.ReadMessageNew); |
| 222 return g_thunks.ReadMessageNew(message_pipe_handle, message, num_bytes, |
| 223 handles, num_handles, flags); |
| 224 } |
| 225 |
| 226 MojoResult MojoAllocMessage(uint32_t num_bytes, |
| 227 const MojoHandle* handles, |
| 228 uint32_t num_handles, |
| 229 MojoAllocMessageFlags flags, |
| 230 MojoMessageHandle* message) { |
| 231 assert(g_thunks.AllocMessage); |
| 232 return g_thunks.AllocMessage( |
| 233 num_bytes, handles, num_handles, flags, message); |
| 234 } |
| 235 |
| 236 MojoResult MojoFreeMessage(MojoMessageHandle message) { |
| 237 assert(g_thunks.FreeMessage); |
| 238 return g_thunks.FreeMessage(message); |
| 239 } |
| 240 |
| 241 MojoResult MojoGetMessageBuffer(MojoMessageHandle message, void** buffer) { |
| 242 assert(g_thunks.GetMessageBuffer); |
| 243 return g_thunks.GetMessageBuffer(message, buffer); |
| 244 } |
| 245 |
| 246 MojoResult MojoWrapPlatformHandle( |
| 247 const struct MojoPlatformHandle* platform_handle, |
| 248 MojoHandle* mojo_handle) { |
| 249 assert(g_thunks.WrapPlatformHandle); |
| 250 return g_thunks.WrapPlatformHandle(platform_handle, mojo_handle); |
| 251 } |
| 252 |
| 253 MojoResult MojoUnwrapPlatformHandle( |
| 254 MojoHandle mojo_handle, |
| 255 struct MojoPlatformHandle* platform_handle) { |
| 256 assert(g_thunks.UnwrapPlatformHandle); |
| 257 return g_thunks.UnwrapPlatformHandle(mojo_handle, platform_handle); |
| 258 } |
| 259 |
| 260 MojoResult MojoWrapPlatformSharedBufferHandle( |
| 261 const struct MojoPlatformHandle* platform_handle, |
| 262 size_t num_bytes, |
| 263 MojoPlatformSharedBufferHandleFlags flags, |
| 264 MojoHandle* mojo_handle) { |
| 265 assert(g_thunks.WrapPlatformSharedBufferHandle); |
| 266 return g_thunks.WrapPlatformSharedBufferHandle(platform_handle, num_bytes, |
| 267 flags, mojo_handle); |
| 268 } |
| 269 |
| 270 MojoResult MojoUnwrapPlatformSharedBufferHandle( |
| 271 MojoHandle mojo_handle, |
| 272 struct MojoPlatformHandle* platform_handle, |
| 273 size_t* num_bytes, |
| 274 MojoPlatformSharedBufferHandleFlags* flags) { |
| 275 assert(g_thunks.UnwrapPlatformSharedBufferHandle); |
| 276 return g_thunks.UnwrapPlatformSharedBufferHandle(mojo_handle, platform_handle, |
| 277 num_bytes, flags); |
| 278 } |
| 279 |
| 280 extern "C" THUNK_EXPORT size_t MojoSetSystemThunks( |
| 281 const MojoSystemThunks* system_thunks) { |
| 282 if (system_thunks->size >= sizeof(g_thunks)) |
| 283 g_thunks = *system_thunks; |
| 284 return sizeof(g_thunks); |
| 285 } |
| 286 |
| 287 } // extern "C" |
OLD | NEW |