OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/edk/embedder/entrypoints.h" | |
6 | |
7 #include <stdint.h> | 5 #include <stdint.h> |
8 | 6 |
9 #include "mojo/edk/embedder/embedder_internal.h" | 7 #include "mojo/edk/embedder/embedder_internal.h" |
10 #include "mojo/edk/system/core.h" | 8 #include "mojo/edk/system/core.h" |
11 #include "mojo/public/c/system/buffer.h" | 9 #include "mojo/public/c/system/buffer.h" |
12 #include "mojo/public/c/system/data_pipe.h" | 10 #include "mojo/public/c/system/data_pipe.h" |
13 #include "mojo/public/c/system/functions.h" | 11 #include "mojo/public/c/system/functions.h" |
14 #include "mojo/public/c/system/message_pipe.h" | 12 #include "mojo/public/c/system/message_pipe.h" |
15 #include "mojo/public/c/system/platform_handle.h" | 13 #include "mojo/public/c/system/platform_handle.h" |
16 #include "mojo/public/c/system/wait_set.h" | 14 #include "mojo/public/c/system/wait_set.h" |
17 | 15 |
18 using mojo::edk::internal::g_core; | 16 using mojo::edk::internal::g_core; |
19 | 17 |
20 // Definitions of the system functions. | 18 // Definitions of the system functions. |
21 extern "C" { | 19 extern "C" { |
22 | 20 |
23 MojoTimeTicks MojoGetTimeTicksNowImpl() { | 21 MojoTimeTicks MojoGetTimeTicksNow() { |
24 return g_core->GetTimeTicksNow(); | 22 return g_core->GetTimeTicksNow(); |
25 } | 23 } |
26 | 24 |
27 MojoResult MojoCloseImpl(MojoHandle handle) { | 25 MojoResult MojoClose(MojoHandle handle) { |
28 return g_core->Close(handle); | 26 return g_core->Close(handle); |
29 } | 27 } |
30 | 28 |
31 MojoResult MojoWaitImpl(MojoHandle handle, | 29 MojoResult MojoWait(MojoHandle handle, |
32 MojoHandleSignals signals, | 30 MojoHandleSignals signals, |
33 MojoDeadline deadline, | 31 MojoDeadline deadline, |
34 MojoHandleSignalsState* signals_state) { | 32 MojoHandleSignalsState* signals_state) { |
35 return g_core->Wait(handle, signals, deadline, signals_state); | 33 return g_core->Wait(handle, signals, deadline, signals_state); |
36 } | 34 } |
37 | 35 |
38 MojoResult MojoWaitManyImpl(const MojoHandle* handles, | 36 MojoResult MojoWaitMany(const MojoHandle* handles, |
39 const MojoHandleSignals* signals, | 37 const MojoHandleSignals* signals, |
40 uint32_t num_handles, | 38 uint32_t num_handles, |
41 MojoDeadline deadline, | 39 MojoDeadline deadline, |
42 uint32_t* result_index, | 40 uint32_t* result_index, |
43 MojoHandleSignalsState* signals_states) { | 41 MojoHandleSignalsState* signals_states) { |
44 return g_core->WaitMany(handles, signals, num_handles, deadline, result_index, | 42 return g_core->WaitMany(handles, signals, num_handles, deadline, result_index, |
45 signals_states); | 43 signals_states); |
46 } | 44 } |
47 | 45 |
48 MojoResult MojoWatchImpl(MojoHandle handle, | 46 MojoResult MojoWatch(MojoHandle handle, |
49 MojoHandleSignals signals, | 47 MojoHandleSignals signals, |
50 MojoWatchCallback callback, | 48 MojoWatchCallback callback, |
51 uintptr_t context) { | 49 uintptr_t context) { |
52 return g_core->Watch(handle, signals, callback, context); | 50 return g_core->Watch(handle, signals, callback, context); |
53 } | 51 } |
54 | 52 |
55 MojoResult MojoCancelWatchImpl(MojoHandle handle, uintptr_t context) { | 53 MojoResult MojoCancelWatch(MojoHandle handle, uintptr_t context) { |
56 return g_core->CancelWatch(handle, context); | 54 return g_core->CancelWatch(handle, context); |
57 } | 55 } |
58 | 56 |
59 MojoResult MojoAllocMessageImpl(uint32_t num_bytes, | 57 MojoResult MojoAllocMessage(uint32_t num_bytes, |
60 const MojoHandle* handles, | 58 const MojoHandle* handles, |
61 uint32_t num_handles, | 59 uint32_t num_handles, |
62 MojoAllocMessageFlags flags, | 60 MojoAllocMessageFlags flags, |
63 MojoMessageHandle* message) { | 61 MojoMessageHandle* message) { |
64 return g_core->AllocMessage(num_bytes, handles, num_handles, flags, message); | 62 return g_core->AllocMessage(num_bytes, handles, num_handles, flags, message); |
65 } | 63 } |
66 | 64 |
67 MojoResult MojoFreeMessageImpl(MojoMessageHandle message) { | 65 MojoResult MojoFreeMessage(MojoMessageHandle message) { |
68 return g_core->FreeMessage(message); | 66 return g_core->FreeMessage(message); |
69 } | 67 } |
70 | 68 |
71 MojoResult MojoGetMessageBufferImpl(MojoMessageHandle message, void** buffer) { | 69 MojoResult MojoGetMessageBuffer(MojoMessageHandle message, void** buffer) { |
72 return g_core->GetMessageBuffer(message, buffer); | 70 return g_core->GetMessageBuffer(message, buffer); |
73 } | 71 } |
74 | 72 |
75 MojoResult MojoCreateWaitSetImpl(MojoHandle* wait_set_handle) { | 73 MojoResult MojoCreateWaitSet(MojoHandle* wait_set_handle) { |
76 return g_core->CreateWaitSet(wait_set_handle); | 74 return g_core->CreateWaitSet(wait_set_handle); |
77 } | 75 } |
78 | 76 |
79 MojoResult MojoAddHandleImpl(MojoHandle wait_set_handle, | 77 MojoResult MojoAddHandle(MojoHandle wait_set_handle, |
80 MojoHandle handle, | 78 MojoHandle handle, |
81 MojoHandleSignals signals) { | 79 MojoHandleSignals signals) { |
82 return g_core->AddHandle(wait_set_handle, handle, signals); | 80 return g_core->AddHandle(wait_set_handle, handle, signals); |
83 } | 81 } |
84 | 82 |
85 MojoResult MojoRemoveHandleImpl(MojoHandle wait_set_handle, MojoHandle handle) { | 83 MojoResult MojoRemoveHandle(MojoHandle wait_set_handle, MojoHandle handle) { |
86 return g_core->RemoveHandle(wait_set_handle, handle); | 84 return g_core->RemoveHandle(wait_set_handle, handle); |
87 } | 85 } |
88 | 86 |
89 MojoResult MojoGetReadyHandlesImpl( | 87 MojoResult MojoGetReadyHandles(MojoHandle wait_set_handle, |
90 MojoHandle wait_set_handle, | 88 uint32_t* count, |
91 uint32_t* count, | 89 MojoHandle* handles, |
92 MojoHandle* handles, | 90 MojoResult* results, |
93 MojoResult* results, | 91 struct MojoHandleSignalsState* signals_states) { |
94 struct MojoHandleSignalsState* signals_states) { | |
95 return g_core->GetReadyHandles(wait_set_handle, count, handles, results, | 92 return g_core->GetReadyHandles(wait_set_handle, count, handles, results, |
96 signals_states); | 93 signals_states); |
97 } | 94 } |
98 | 95 |
99 MojoResult MojoCreateMessagePipeImpl( | 96 MojoResult MojoCreateMessagePipe(const MojoCreateMessagePipeOptions* options, |
100 const MojoCreateMessagePipeOptions* options, | 97 MojoHandle* message_pipe_handle0, |
101 MojoHandle* message_pipe_handle0, | 98 MojoHandle* message_pipe_handle1) { |
102 MojoHandle* message_pipe_handle1) { | |
103 return g_core->CreateMessagePipe(options, message_pipe_handle0, | 99 return g_core->CreateMessagePipe(options, message_pipe_handle0, |
104 message_pipe_handle1); | 100 message_pipe_handle1); |
105 } | 101 } |
106 | 102 |
107 MojoResult MojoWriteMessageImpl(MojoHandle message_pipe_handle, | 103 MojoResult MojoWriteMessage(MojoHandle message_pipe_handle, |
108 const void* bytes, | 104 const void* bytes, |
109 uint32_t num_bytes, | 105 uint32_t num_bytes, |
110 const MojoHandle* handles, | 106 const MojoHandle* handles, |
111 uint32_t num_handles, | 107 uint32_t num_handles, |
112 MojoWriteMessageFlags flags) { | 108 MojoWriteMessageFlags flags) { |
113 return g_core->WriteMessage(message_pipe_handle, bytes, num_bytes, handles, | 109 return g_core->WriteMessage(message_pipe_handle, bytes, num_bytes, handles, |
114 num_handles, flags); | 110 num_handles, flags); |
115 } | 111 } |
116 | 112 |
117 MojoResult MojoWriteMessageNewImpl(MojoHandle message_pipe_handle, | 113 MojoResult MojoWriteMessageNew(MojoHandle message_pipe_handle, |
118 MojoMessageHandle message, | 114 MojoMessageHandle message, |
119 MojoWriteMessageFlags flags) { | 115 MojoWriteMessageFlags flags) { |
120 return g_core->WriteMessageNew(message_pipe_handle, message, flags); | 116 return g_core->WriteMessageNew(message_pipe_handle, message, flags); |
121 } | 117 } |
122 | 118 |
123 MojoResult MojoReadMessageImpl(MojoHandle message_pipe_handle, | 119 MojoResult MojoReadMessage(MojoHandle message_pipe_handle, |
124 void* bytes, | 120 void* bytes, |
125 uint32_t* num_bytes, | 121 uint32_t* num_bytes, |
126 MojoHandle* handles, | 122 MojoHandle* handles, |
127 uint32_t* num_handles, | 123 uint32_t* num_handles, |
128 MojoReadMessageFlags flags) { | 124 MojoReadMessageFlags flags) { |
129 return g_core->ReadMessage( | 125 return g_core->ReadMessage( |
130 message_pipe_handle, bytes, num_bytes, handles, num_handles, flags); | 126 message_pipe_handle, bytes, num_bytes, handles, num_handles, flags); |
131 } | 127 } |
132 | 128 |
133 MojoResult MojoReadMessageNewImpl(MojoHandle message_pipe_handle, | 129 MojoResult MojoReadMessageNew(MojoHandle message_pipe_handle, |
134 MojoMessageHandle* message, | 130 MojoMessageHandle* message, |
135 uint32_t* num_bytes, | 131 uint32_t* num_bytes, |
136 MojoHandle* handles, | 132 MojoHandle* handles, |
137 uint32_t* num_handles, | 133 uint32_t* num_handles, |
138 MojoReadMessageFlags flags) { | 134 MojoReadMessageFlags flags) { |
139 return g_core->ReadMessageNew( | 135 return g_core->ReadMessageNew( |
140 message_pipe_handle, message, num_bytes, handles, num_handles, flags); | 136 message_pipe_handle, message, num_bytes, handles, num_handles, flags); |
141 } | 137 } |
142 | 138 |
143 MojoResult MojoFuseMessagePipesImpl(MojoHandle handle0, MojoHandle handle1) { | 139 MojoResult MojoFuseMessagePipes(MojoHandle handle0, MojoHandle handle1) { |
144 return g_core->FuseMessagePipes(handle0, handle1); | 140 return g_core->FuseMessagePipes(handle0, handle1); |
145 } | 141 } |
146 | 142 |
147 MojoResult MojoCreateDataPipeImpl(const MojoCreateDataPipeOptions* options, | 143 MojoResult MojoCreateDataPipe(const MojoCreateDataPipeOptions* options, |
148 MojoHandle* data_pipe_producer_handle, | 144 MojoHandle* data_pipe_producer_handle, |
149 MojoHandle* data_pipe_consumer_handle) { | 145 MojoHandle* data_pipe_consumer_handle) { |
150 return g_core->CreateDataPipe(options, data_pipe_producer_handle, | 146 return g_core->CreateDataPipe(options, data_pipe_producer_handle, |
151 data_pipe_consumer_handle); | 147 data_pipe_consumer_handle); |
152 } | 148 } |
153 | 149 |
154 MojoResult MojoWriteDataImpl(MojoHandle data_pipe_producer_handle, | 150 MojoResult MojoWriteData(MojoHandle data_pipe_producer_handle, |
155 const void* elements, | 151 const void* elements, |
156 uint32_t* num_elements, | 152 uint32_t* num_elements, |
157 MojoWriteDataFlags flags) { | 153 MojoWriteDataFlags flags) { |
158 return g_core->WriteData(data_pipe_producer_handle, elements, num_elements, | 154 return g_core->WriteData(data_pipe_producer_handle, elements, num_elements, |
159 flags); | 155 flags); |
160 } | 156 } |
161 | 157 |
162 MojoResult MojoBeginWriteDataImpl(MojoHandle data_pipe_producer_handle, | 158 MojoResult MojoBeginWriteData(MojoHandle data_pipe_producer_handle, |
163 void** buffer, | 159 void** buffer, |
164 uint32_t* buffer_num_elements, | 160 uint32_t* buffer_num_elements, |
165 MojoWriteDataFlags flags) { | 161 MojoWriteDataFlags flags) { |
166 return g_core->BeginWriteData(data_pipe_producer_handle, buffer, | 162 return g_core->BeginWriteData(data_pipe_producer_handle, buffer, |
167 buffer_num_elements, flags); | 163 buffer_num_elements, flags); |
168 } | 164 } |
169 | 165 |
170 MojoResult MojoEndWriteDataImpl(MojoHandle data_pipe_producer_handle, | 166 MojoResult MojoEndWriteData(MojoHandle data_pipe_producer_handle, |
171 uint32_t num_elements_written) { | 167 uint32_t num_elements_written) { |
172 return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written); | 168 return g_core->EndWriteData(data_pipe_producer_handle, num_elements_written); |
173 } | 169 } |
174 | 170 |
175 MojoResult MojoReadDataImpl(MojoHandle data_pipe_consumer_handle, | 171 MojoResult MojoReadData(MojoHandle data_pipe_consumer_handle, |
176 void* elements, | 172 void* elements, |
177 uint32_t* num_elements, | 173 uint32_t* num_elements, |
178 MojoReadDataFlags flags) { | 174 MojoReadDataFlags flags) { |
179 return g_core->ReadData(data_pipe_consumer_handle, elements, num_elements, | 175 return g_core->ReadData(data_pipe_consumer_handle, elements, num_elements, |
180 flags); | 176 flags); |
181 } | 177 } |
182 | 178 |
183 MojoResult MojoBeginReadDataImpl(MojoHandle data_pipe_consumer_handle, | 179 MojoResult MojoBeginReadData(MojoHandle data_pipe_consumer_handle, |
184 const void** buffer, | 180 const void** buffer, |
185 uint32_t* buffer_num_elements, | 181 uint32_t* buffer_num_elements, |
186 MojoReadDataFlags flags) { | 182 MojoReadDataFlags flags) { |
187 return g_core->BeginReadData(data_pipe_consumer_handle, buffer, | 183 return g_core->BeginReadData(data_pipe_consumer_handle, buffer, |
188 buffer_num_elements, flags); | 184 buffer_num_elements, flags); |
189 } | 185 } |
190 | 186 |
191 MojoResult MojoEndReadDataImpl(MojoHandle data_pipe_consumer_handle, | 187 MojoResult MojoEndReadData(MojoHandle data_pipe_consumer_handle, |
192 uint32_t num_elements_read) { | 188 uint32_t num_elements_read) { |
193 return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read); | 189 return g_core->EndReadData(data_pipe_consumer_handle, num_elements_read); |
194 } | 190 } |
195 | 191 |
196 MojoResult MojoCreateSharedBufferImpl( | 192 MojoResult MojoCreateSharedBuffer( |
197 const struct MojoCreateSharedBufferOptions* options, | 193 const struct MojoCreateSharedBufferOptions* options, |
198 uint64_t num_bytes, | 194 uint64_t num_bytes, |
199 MojoHandle* shared_buffer_handle) { | 195 MojoHandle* shared_buffer_handle) { |
200 return g_core->CreateSharedBuffer(options, num_bytes, shared_buffer_handle); | 196 return g_core->CreateSharedBuffer(options, num_bytes, shared_buffer_handle); |
201 } | 197 } |
202 | 198 |
203 MojoResult MojoDuplicateBufferHandleImpl( | 199 MojoResult MojoDuplicateBufferHandle( |
204 MojoHandle buffer_handle, | 200 MojoHandle buffer_handle, |
205 const struct MojoDuplicateBufferHandleOptions* options, | 201 const struct MojoDuplicateBufferHandleOptions* options, |
206 MojoHandle* new_buffer_handle) { | 202 MojoHandle* new_buffer_handle) { |
207 return g_core->DuplicateBufferHandle(buffer_handle, options, | 203 return g_core->DuplicateBufferHandle(buffer_handle, options, |
208 new_buffer_handle); | 204 new_buffer_handle); |
209 } | 205 } |
210 | 206 |
211 MojoResult MojoMapBufferImpl(MojoHandle buffer_handle, | 207 MojoResult MojoMapBuffer(MojoHandle buffer_handle, |
212 uint64_t offset, | 208 uint64_t offset, |
213 uint64_t num_bytes, | 209 uint64_t num_bytes, |
214 void** buffer, | 210 void** buffer, |
215 MojoMapBufferFlags flags) { | 211 MojoMapBufferFlags flags) { |
216 return g_core->MapBuffer(buffer_handle, offset, num_bytes, buffer, flags); | 212 return g_core->MapBuffer(buffer_handle, offset, num_bytes, buffer, flags); |
217 } | 213 } |
218 | 214 |
219 MojoResult MojoUnmapBufferImpl(void* buffer) { | 215 MojoResult MojoUnmapBuffer(void* buffer) { |
220 return g_core->UnmapBuffer(buffer); | 216 return g_core->UnmapBuffer(buffer); |
221 } | 217 } |
222 | 218 |
223 MojoResult MojoWrapPlatformHandleImpl(const MojoPlatformHandle* platform_handle, | 219 MojoResult MojoWrapPlatformHandle(const MojoPlatformHandle* platform_handle, |
224 MojoHandle* mojo_handle) { | 220 MojoHandle* mojo_handle) { |
225 return g_core->WrapPlatformHandle(platform_handle, mojo_handle); | 221 return g_core->WrapPlatformHandle(platform_handle, mojo_handle); |
226 } | 222 } |
227 | 223 |
228 MojoResult MojoUnwrapPlatformHandleImpl(MojoHandle mojo_handle, | 224 MojoResult MojoUnwrapPlatformHandle(MojoHandle mojo_handle, |
229 MojoPlatformHandle* platform_handle) { | 225 MojoPlatformHandle* platform_handle) { |
230 return g_core->UnwrapPlatformHandle(mojo_handle, platform_handle); | 226 return g_core->UnwrapPlatformHandle(mojo_handle, platform_handle); |
231 } | 227 } |
232 | 228 |
233 MojoResult MojoWrapPlatformSharedBufferHandleImpl( | 229 MojoResult MojoWrapPlatformSharedBufferHandle( |
234 const MojoPlatformHandle* platform_handle, | 230 const MojoPlatformHandle* platform_handle, |
235 size_t num_bytes, | 231 size_t num_bytes, |
236 MojoPlatformSharedBufferHandleFlags flags, | 232 MojoPlatformSharedBufferHandleFlags flags, |
237 MojoHandle* mojo_handle) { | 233 MojoHandle* mojo_handle) { |
238 return g_core->WrapPlatformSharedBufferHandle(platform_handle, num_bytes, | 234 return g_core->WrapPlatformSharedBufferHandle(platform_handle, num_bytes, |
239 flags, mojo_handle); | 235 flags, mojo_handle); |
240 } | 236 } |
241 | 237 |
242 MojoResult MojoUnwrapPlatformSharedBufferHandleImpl( | 238 MojoResult MojoUnwrapPlatformSharedBufferHandle( |
243 MojoHandle mojo_handle, | 239 MojoHandle mojo_handle, |
244 MojoPlatformHandle* platform_handle, | 240 MojoPlatformHandle* platform_handle, |
245 size_t* num_bytes, | 241 size_t* num_bytes, |
246 MojoPlatformSharedBufferHandleFlags* flags) { | 242 MojoPlatformSharedBufferHandleFlags* flags) { |
247 return g_core->UnwrapPlatformSharedBufferHandle(mojo_handle, platform_handle, | 243 return g_core->UnwrapPlatformSharedBufferHandle(mojo_handle, platform_handle, |
248 num_bytes, flags); | 244 num_bytes, flags); |
249 } | 245 } |
250 | 246 |
251 } // extern "C" | 247 } // extern "C" |
252 | |
253 namespace mojo { | |
254 namespace edk { | |
255 | |
256 MojoSystemThunks 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 | |
OLD | NEW |