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
|