New MmRpc module and santiy test program.
authorRamsey Harris <ramsey@ti.com>
Tue, 12 Mar 2013 20:32:28 +0000 (13:32 -0700)
committerRamsey Harris <ramsey@ti.com>
Tue, 12 Mar 2013 20:32:28 +0000 (13:32 -0700)
This module provides remote procedure call functionality similar
to the omaprpc module developed for the multimedia stack. Currently,
this module builds only for Linux user mode.

Makefile.am
configure.ac
linux/src/mm/Makefile.am [new file with mode: 0644]
linux/src/tests/Makefile.am
linux/src/tests/mmrpc_test.c [new file with mode: 0644]
packages/ti/ipc/mm/MmRpc.c [new file with mode: 0644]
packages/ti/ipc/mm/MmRpc.h [new file with mode: 0644]
packages/ti/ipc/package.bld

index c739049453985aa88f92c7c52a2287e5db08be72..50bc6523086596192c7c06b10ad5e4637cb689c0 100644 (file)
@@ -33,7 +33,7 @@
 
 # the subdirectories of the project to go into
 SUBDIRS =  linux/etc linux/src/utils linux/src/api linux/src/family \
-        linux/src/daemon linux/src/tests
+        linux/src/daemon linux/src/tests linux/src/mm
 
 # hook to remove libtools library extention files (.la)
 install-exec-hook:
index c2034bd44dc6e8191fa9cfec37a5bddc8b51a71b..99672a430a08ab7ad23a7e0fd5d92f128572f0a2 100644 (file)
@@ -102,6 +102,7 @@ AC_CONFIG_FILES([linux/src/api/Makefile])
 AC_CONFIG_FILES([linux/src/family/Makefile])
 AC_CONFIG_FILES([linux/src/daemon/Makefile])
 AC_CONFIG_FILES([linux/src/tests/Makefile])
+AC_CONFIG_FILES([linux/src/mm/Makefile])
 AC_OUTPUT
 
 echo \
diff --git a/linux/src/mm/Makefile.am b/linux/src/mm/Makefile.am
new file mode 100644 (file)
index 0000000..e9e4813
--- /dev/null
@@ -0,0 +1,58 @@
+##
+##  Copyright (c) 2013, Texas Instruments Incorporated
+##
+##  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 Texas Instruments Incorporated 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+##  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+##  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+##  PURPOSE 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.
+##
+## ======== src/mm/Makefile.am ========
+##
+
+# additional include paths necessary to compile the library
+AM_CFLAGS = -Wall @AM_CFLAGS@
+
+###############################################################################
+# THE LIBRARIES TO BUILD
+###############################################################################
+
+# the library names to build (note we are building shared libs)
+lib_LTLIBRARIES = libmmrpc.la
+
+# where to install the headers on the system
+libmmrpc_ladir = $(includedir)
+
+# the list of header files that belong to the library (to be installed later)
+libmmrpc_la_HEADERS = $(top_srcdir)/packages/ti/ipc/mm/MmRpc.h
+
+# the sources to add to the library and to add to the source distribution
+libmmrpc_la_SOURCES = \
+        $(libmmrpc_la_HEADERS) \
+        $(top_srcdir)/packages/ti/ipc/mm/MmRpc.c
+
+# Add version info to the shared library
+libmmrpc_la_LDFLAGS = -version-info 1:0:0
+
+###############################################################################
index b4ddc709327be5ce5bd5ca3c00d15b37b052f5ed..86866fc2d285f743fae2f73739452efe895be455 100644 (file)
@@ -40,7 +40,7 @@ AM_CFLAGS = -I$(top_srcdir)/linux/include -I$(top_srcdir)/packages  \
 ###############################################################################
 
 # the program to build (the names of the final binaries)
-bin_PROGRAMS = ping_rpmsg
+bin_PROGRAMS = ping_rpmsg mmrpc_test
 
 if OMAP4430
   bin_PROGRAMS += MessageQApp_omap4430 MessageQBench_omap4430 \
@@ -92,6 +92,9 @@ nameServer_common_sources = \
 # list of sources for the 'ping_rpmsg' binary
 ping_rpmsg_SOURCES = ping_rpmsg.c
 
+# list of sources for the 'mmrpc_test' binary
+mmrpc_SOURCES = mmrpc_test.c
+
 # list of sources for the 'MessageQApp' binary
 MessageQApp_omap4430_SOURCES = $(common_sources) MessageQApp.c
 MessageQApp_omapl138_SOURCES = $(common_sources) MessageQApp.c
@@ -125,6 +128,9 @@ common_libraries = -lpthread $(top_builddir)/linux/src/api/libtiipc.la \
 # the additional libraries to link ping_rpmsg
 ping_rpmsg_LDADD = -lrt
 
+# the additional libraries to link mmrpc_test
+mmrpc_test_LDADD = $(top_builddir)/linux/src/mm/libmmrpc.la
+
 # the additional libraries needed to link MessageQApp
 MessageQApp_omap4430_LDADD = $(common_libraries) \
                 $(top_builddir)/linux/src/family/libtiipccfg_omap4430.la \
diff --git a/linux/src/tests/mmrpc_test.c b/linux/src/tests/mmrpc_test.c
new file mode 100644 (file)
index 0000000..0359382
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright (c) 2013, Texas Instruments Incorporated
+ * 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 Texas Instruments Incorporated 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE 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.
+ */
+
+/*
+ *  ======== mmrpc_test.c ========
+ */
+#include <stdio.h>
+
+#include <ti/ipc/mm/MmRpc.h>
+
+int main(int argc, char **argv)
+{
+    MmRpc_Params params;
+    MmRpc_Handle dsp_rpc;
+
+    printf("Hello world\n");
+
+    MmRpc_Params_init(&params);
+
+    dsp_rpc  = MmRpc_create("DSP", "FooServer", &params);
+
+    MmRpc_delete(&dsp_rpc);
+
+    return(0);
+}
diff --git a/packages/ti/ipc/mm/MmRpc.c b/packages/ti/ipc/mm/MmRpc.c
new file mode 100644 (file)
index 0000000..7ec3956
--- /dev/null
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * 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 Texas Instruments Incorporated 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE 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.
+ */
+
+/*
+ *  ======== MmRpc.c ========
+ */
+
+#include <stdlib.h>
+
+#include "MmRpc.h"
+
+/*
+ *  ======== MmRpc_Object ========
+ */
+typedef struct {
+    int         reserved;
+} MmRpc_Object;
+
+/*
+ *  ======== MmRpc_Params_init ========
+ */
+void MmRpc_Params_init(MmRpc_Params *params)
+{
+    params->reserved = 0;
+}
+
+/*
+ *  ======== MmRpc_create ========
+ */
+MmRpc_Handle MmRpc_create(const char *proc, const char *service,
+        const MmRpc_Params *params)
+{
+    int                 status = MmRpc_S_SUCCESS;
+    MmRpc_Object *      obj;
+
+    /* allocate the instance object */
+    obj = (MmRpc_Object *)calloc(1, sizeof(MmRpc_Object));
+
+    if (obj == NULL) {
+        status = MmRpc_E_FAIL;
+        goto leave;
+    }
+
+leave:
+    return((MmRpc_Handle)obj);
+}
+
+/*
+ *  ======== MmRpc_delete ========
+ */
+int MmRpc_delete(MmRpc_Handle *handlePtr)
+{
+    int status = MmRpc_S_SUCCESS;
+
+    /* free the instance object */
+    free((void *)(*handlePtr));
+    *handlePtr = NULL;
+
+    return(status);
+}
diff --git a/packages/ti/ipc/mm/MmRpc.h b/packages/ti/ipc/mm/MmRpc.h
new file mode 100644 (file)
index 0000000..04fabe6
--- /dev/null
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2012-2013, Texas Instruments Incorporated
+ * 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 Texas Instruments Incorporated 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 BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE 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.
+ */
+
+/** ============================================================================
+ *  @file       MmRpc.h
+ *
+ *  @brief      Multi-Media derived Remote Procedure Call
+ *
+ *  ============================================================================
+ */
+
+#ifndef ti_ipc_mm_MmRpc__include
+#define ti_ipc_mm_MmRpc__include
+
+/* add includes here */
+#include <stddef.h>
+#include <stdint.h>
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/*!
+ *  @brief  Operation is successful
+ */
+#define MmRpc_S_SUCCESS (0)
+
+/*!
+ *  @brief  Operation failed
+ */
+#define MmRpc_E_FAIL (-1)
+
+/*!
+ *  @brief  Size of parameter array in function context structure
+ */
+#define MmRpc_MAX_PARAMETERS (10)
+
+/*!
+ *  @brief  Maximum size of translation array in function context structure
+ */
+#define MmRpc_MAX_TRANSLATIONS (1024)
+
+/*!
+ *  @brief      MmRpc_Handle type
+ */
+typedef struct MmRpc_Object *MmRpc_Handle;
+
+/*!
+ *  @brief      MmRpc_ParamType enum
+ */
+typedef enum {
+    MmRpc_ParamType_Atomic = 1, /*!< atomic data type */
+    MmRpc_ParamType_ShMemPtr,   /*!< shared memory pointer */
+    MmRpc_ParamType_Ptr         /*!< data pointer */
+} MmRpc_ParamType;
+
+/*!
+ *  @brief      MmRpc_Param type
+ */
+typedef struct {
+    MmRpc_ParamType     type;   /*!< parameter type */
+    union {
+        struct {
+            size_t      size;   /*!< size of the data */
+            size_t      data;   /*!< atomic data */
+        } atomic;
+
+        struct {
+            size_t      size;   /*!< size of the data */
+            size_t      data;   /*!< pointer to data */
+            size_t      base;   /*!< base address */
+            size_t      smh;    /*!< shared memory handle */
+        } shmem;
+
+        struct {
+            size_t      size;   /*!< size of the data */
+            size_t      ptr;    /*!< pointer to data */
+        } ptr;
+    } param;
+} MmRpc_Param;
+
+typedef struct {
+    uint32_t    index;  /*!< parameter index to base pointer */
+    ptrdiff_t   offset; /*!< offset from the base address to pointer */
+    size_t      base;   /*!< user virtual address */
+} MmRpc_Txlt;
+
+/*!
+ *  @brief      Function call context structure
+ */
+typedef struct {
+    uint32_t    fxn_id;         /*!< The function to call. */
+    uint32_t    result;         /*!< The function return value. */
+    uint32_t    num_params;     /*!< Number of elements in param array. */
+    MmRpc_Param params[MmRpc_MAX_PARAMETERS];
+                                /*!< The array of parameters */
+    uint32_t num_translations;
+                                /*!< The number of translations needed
+                                 *   in the offsets array */
+    MmRpc_Txlt *translations;   /*!< array of translations */
+} MmRpc_FxnCtx;
+
+/*!
+ *  @brief      Instance create parameters
+ */
+typedef struct {
+    int reserved;
+} MmRpc_Params;
+
+/*!
+ *  @brief      Invoke a remote procedure call
+ *
+ */
+int MmRpc_call(MmRpc_Handle handle, MmRpc_FxnCtx *ctx);
+
+/*!
+ *  @brief      Create an MmRpc instance
+ *
+ */
+MmRpc_Handle MmRpc_create(const char *proc, const char *service,
+        const MmRpc_Params *params);
+
+/*!
+ *  @brief      Delete an MmRpc instance
+ *
+ */
+int MmRpc_delete(MmRpc_Handle *handlePtr);
+
+/*!
+ *  @brief      Initialize the instance create parameter structure
+ *
+ */
+void MmRpc_Params_init(MmRpc_Params *params);
+
+
+
+#if defined (__cplusplus)
+}
+#endif
+#endif /* ti_ipc_mm_MmRpc__include */
index 5c7d1f6647b11a142d9cd8b76c6ed483c5172776..a242103bf0f97f89a0d9ae9f031c2b2e3def822c 100644 (file)
@@ -47,6 +47,8 @@ Pkg.otherFiles = [
     "Notify.h",
     "SharedRegion.h",
     "package.bld",
+    "mm/MmRpc.c",
+    "mm/MmRpc.h"
 ];
 
 /* include source files in the release package */