summaryrefslogtreecommitdiff
path: root/inc/mod_table.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/mod_table.h')
-rw-r--r--inc/mod_table.h138
1 files changed, 138 insertions, 0 deletions
diff --git a/inc/mod_table.h b/inc/mod_table.h
new file mode 100644
index 0000000..9e4e219
--- /dev/null
+++ b/inc/mod_table.h
@@ -0,0 +1,138 @@
+/**
+ * Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of The Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#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 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 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 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 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 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 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 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 sc, remote_arg* pra));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // MOD_TABLE_H