File: mod_table.h

package info (click to toggle)
fastrpc 1.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 2,816 kB
  • sloc: ansic: 30,070; makefile: 230; sh: 31
file content (112 lines) | stat: -rw-r--r-- 3,431 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
// Copyright (c) 2024, Qualcomm Innovation Center, Inc. All rights reserved.
// SPDX-License-Identifier: BSD-3-Clause

#ifndef MOD_TABLE_H
#define MOD_TABLE_H

#include "remote64.h"
#include "AEEStdDef.h"

#ifdef __cplusplus
extern "C"
{
#endif

/**
 * multi-domain support
 *
 * multi domain modules return remote_handl64 on open/close, but mod_table
 * creates uint32_t handles as the "remote" facing handle.  These fit nicely
 * into the transport layer.
 *
 */

/**
  * register a static component for invocations
  * this can be called at any time including from a static constructor
  *
  * name, name of the interface to register
  * pfn, function pointer to the skel invoke function
  *
  * for example:
  *   __attribute__((constructor)) static void my_module_ctor(void) {
  *      mod_table_register_static("my_module", my_module_skel_invoke);
  *   }
  *
  */
int mod_table_register_static(const char* name, int (*pfn)(uint32_t sc, remote_arg* pra));

/**
  * same as register_static, but module with user defined handle lifetimes.
  */
int mod_table_register_static1(const char* uri, int (*pfn)(remote_handle64 h,uint32_t sc, remote_arg* pra));

/**
  * register a static component for invocations
  * this can be called at any time including from a static constructor
  *
  * overrides will be tried first, then dynamic modules, then regular
  * static modules.  This api should only be use by system components
  * that will never be upgradable.
  *
  * name, name of the interface to register
  * pfn, function pointer to the skel invoke function
  *
  * for example:
  *   __attribute__((constructor)) static void my_module_ctor(void) {
  *      mod_table_register_static("my_module", my_module_skel_invoke);
  *   }
  *
  */
int mod_table_register_static_override(const char* name, int(*pfn)(uint32_t sc, remote_arg* pra));

/**
  * same as register_static, but module with user defined handle lifetimes.
  */
int mod_table_register_static_override1(const char* uri, int(*pfn)(remote_handle64,uint32_t sc, remote_arg* pra));

/**
 * Open a module and get a handle to it
 *
 * in_name, name of module to open
 * handle, Output handle
 * dlerr, Error String (if an error occurs)
 * dlerrorLen, Length of error String (if an error occurs)
 * pdlErr, Error identifier
 */
int mod_table_open(const char* in_name, remote_handle* handle, char* dlerr, int dlerrorLen, int* pdlErr);

/**
 * invoke a handle in the mod table
 *
 * handle, handle to invoke
 * sc, scalars, see remote.h for documentation.
 * pra, args, see remote.h for documentation.
 */
int mod_table_invoke(remote_handle handle, uint32_t sc, remote_arg* pra);

/**
 * Closes a handle in the mod table
 *
 * handle, handle to close
 * errStr, Error String (if an error occurs)
 * errStrLen, Length of error String (if an error occurs)
 * pdlErr, Error identifier
 */
int mod_table_close(remote_handle handle, char* errStr, int errStrLen, int* pdlErr);

/**
 * internal use only
 */
int mod_table_register_const_handle(remote_handle handle, const char* in_name, int (*pfn)(uint32_t sc, remote_arg* pra));
/**
 * @param remote, the handle we should expect from the transport layer
 * @param local, the local handle that will be passed to pfn
 */
int mod_table_register_const_handle1(remote_handle remote, remote_handle64 local, const char* uri, int (*pfn)(remote_handle64 h, uint32_t sc, remote_arg* pra));

#ifdef __cplusplus
}
#endif

#endif // MOD_TABLE_H