1/*
2 * Copyright 2014 The Chromium Authors. All rights reserved.
3 * Use of this source code is governed by a BSD-style license that can be
4 * found in the LICENSE file.
5 */
6
7#ifndef PPAPI_NACL_IRT_PUBLIC_IRT_PPAPI_H_
8#define PPAPI_NACL_IRT_PUBLIC_IRT_PPAPI_H_
9
10#include <stddef.h>
11
12#include "ppapi/c/ppp.h"
13
14struct PP_StartFunctions {
15  int32_t (*PPP_InitializeModule)(PP_Module module_id,
16                                  PPB_GetInterface get_browser_interface);
17  void (*PPP_ShutdownModule)(void);
18  const void* (*PPP_GetInterface)(const char* interface_name);
19};
20
21struct PP_ThreadFunctions {
22  /*
23   * This is a cut-down version of pthread_create()/pthread_join().
24   * We omit thread creation attributes and the thread's return value.
25   *
26   * We use uintptr_t as the thread ID type because pthread_t is not
27   * part of the stable ABI; a user thread library might choose an
28   * arbitrary size for its own pthread_t.
29   */
30  int (*thread_create)(uintptr_t* tid,
31                       void (*func)(void* thread_argument),
32                       void* thread_argument);
33  int (*thread_join)(uintptr_t tid);
34};
35
36#define NACL_IRT_PPAPIHOOK_v0_1 "nacl-irt-ppapihook-0.1"
37struct nacl_irt_ppapihook {
38  int (*ppapi_start)(const struct PP_StartFunctions*);
39  void (*ppapi_register_thread_creator)(const struct PP_ThreadFunctions*);
40};
41
42#endif  // PPAPI_NACL_IRT_PUBLIC_IRT_PPAPI_H_
43