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 |