index 0b7093d102663f9b9c85b13e8dbd68329686a91d..957bf6966e32bc4faecd2999e010304499a1b02f 100644 (file)
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
*/\r
- \r
+\r
#include <stdlib.h>\r
#include <stdint.h>\r
#include <string.h>\r
#include <xdc/runtime/IHeap.h>\r
#include <xdc/runtime/knl/Thread.h>\r
#include <xdc/std.h>\r
+#include <ti/sysbios/utils/Load.h>\r
\r
#include "dce_priv.h"\r
#include "dce_rpc.h"\r
/* DCE Server static function declarations */\r
static Int32 engine_open(UInt32 size, UInt32 *data);\r
static Int32 engine_close(UInt32 size, UInt32 *data);\r
+static Int32 get_rproc_info(UInt32 size, UInt32 *data);\r
\r
/* VIDDEC2 Decoder Server static function declarations */\r
static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params);\r
-static int viddec2_reloc(VIDDEC2_Handle handle, uint8_t *ptr, uint32_t len); \r
-static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams, \r
+static int viddec2_reloc(VIDDEC2_Handle handle, uint8_t *ptr, uint32_t len);\r
+static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams,\r
VIDDEC2_Status *status );\r
static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs,\r
XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs );\r
-static int viddec2_delete(VIDDEC2_Handle handle); \r
- \r
+static int viddec2_delete(VIDDEC2_Handle handle);\r
+\r
static struct {\r
CreateFxn create;\r
ControlFxn control;\r
},\r
};\r
\r
-\r
+#define UNIVERSAL_COPY_EXAMPLE\r
/* Static version string buffer.\r
* Note: codec version can be large. For example, h264vdec needs more than\r
* 58 characters, or the query will fail. */\r
* it gets populated in the future versions of framework components.\r
*\r
* Forced off mode during video decode/encode is not supported. */\r
-#if 0 \r
+#if 0\r
static void dce_suspend()\r
{\r
INFO("Preparing for suspend...");\r
}\r
#endif\r
\r
+#ifdef UNIVERSAL_COPY_EXAMPLE\r
static void get_universal_version(UNIVERSAL_Handle h, char *buffer, unsigned size)\r
{\r
UNIVERSAL_DynamicParams params =\r
@@ -180,20 +183,59 @@ static void get_universal_version(UNIVERSAL_Handle h, char *buffer, unsigned siz
ERROR("Unknown version Error = %d:: buffer = %p size = %d", s, buffer, size);\r
}\r
}\r
+#else\r
+static void get_viddec2_version(VIDDEC2_Handle h, char *buffer, unsigned size)\r
+{\r
+ VIDDEC2_DynamicParams params =\r
+ {\r
+ .size = sizeof(VIDDEC2_DynamicParams),\r
+ };\r
+\r
+ VIDDEC2_Status status =\r
+ {\r
+ .size = sizeof(VIDDEC2_Status),\r
+ .data =\r
+ {\r
+ .buf = (XDAS_Int8 *)buffer,\r
+ .bufSize = (XDAS_Int32)size,\r
+ },\r
+ };\r
+\r
+ XDAS_Int32 s;\r
+\r
+ memset(buffer, 0, size);\r
+ s = VIDDEC2_control(h, XDM_GETVERSION, ¶ms, &status);\r
+\r
+ if( s != VIDDEC2_EOK ) {\r
+ ERROR("Unknown version Error = %d:: buffer = %p size = %d", s, buffer, size);\r
+ }\r
+}\r
+\r
+#endif\r
\r
// VIDDEC2_create wrapper, to display version string in the trace.\r
static VIDDEC2_Handle viddec2_create(Engine_Handle engine, String name, VIDDEC2_Params *params)\r
{\r
+#ifdef UNIVERSAL_COPY_EXAMPLE\r
UNIVERSAL_Handle h;\r
\r
DEBUG(">> engine=%08x, name=%s, params=%p", engine, name, params);\r
\r
h = UNIVERSAL_create(engine, name, (IUNIVERSAL_Params*)params);\r
- \r
- get_universal_version(h, version_buffer, VERSION_SIZE);\r
- \r
- INFO("Created codec %s: version %s", name, version_buffer);\r
-\r
+ if(h){\r
+ get_universal_version(h, version_buffer, VERSION_SIZE);\r
+ INFO("Created codec %s: version %s", name, version_buffer);\r
+ }\r
+#else\r
+ VIDDEC2_Handle h;\r
+\r
+ h = VIDDEC2_create(engine, name, params);\r
+\r
+ if( h ) {\r
+ get_viddec2_version(h, version_buffer, VERSION_SIZE);\r
+ INFO("Created viddec2 %s: version %s", name, version_buffer);\r
+ }\r
+#endif\r
return ((VIDDEC2_Handle)h);\r
}\r
\r
\r
}\r
\r
-static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams, \r
+static int viddec2_control(VIDDEC2_Handle handle, VIDDEC2_Cmd id, VIDDEC2_DynamicParams *dynParams,\r
VIDDEC2_Status *status )\r
{\r
int ret = 0;\r
+#ifdef UNIVERSAL_COPY_EXAMPLE\r
UNIVERSAL_DynamicParams udynParam;\r
UNIVERSAL_Status ustatus;\r
- \r
+\r
udynParam.size = sizeof(UNIVERSAL_DynamicParams);\r
ustatus.size = sizeof(UNIVERSAL_Status);\r
- //System_printf("command id is %d\n", id);\r
\r
if(id == XDM_GETVERSION){\r
ustatus.data.numBufs = 1;\r
ustatus.data.descs[0].buf = status->data.buf;\r
ustatus.data.descs[0].bufSize = status->data.bufSize;\r
}\r
- \r
- ret = UNIVERSAL_control((UNIVERSAL_Handle)handle, (UNIVERSAL_Cmd)id, \r
+\r
+ ret = UNIVERSAL_control((UNIVERSAL_Handle)handle, (UNIVERSAL_Cmd)id,\r
&udynParam, &ustatus);\r
\r
/*universal copy supports only XDM_GETVERSION cmd id */\r
- /*This is to return success to VIDDEC2 application in case of other cmd ids */ \r
+ /*This is to return success to VIDDEC2 application in case of other cmd ids */\r
if(ret == IUNIVERSAL_EFAIL)ret = IUNIVERSAL_EOK;\r
- \r
+#else\r
+ ret = VIDDEC2_control(handle, id, dynParams, status);\r
+#endif\r
return ret;\r
}\r
\r
static int viddec2_process(VIDDEC2_Handle handle, XDM1_BufDesc *inBufs,\r
XDM_BufDesc *outBufs, VIDDEC2_InArgs *inArgs, VIDDEC2_OutArgs *outArgs )\r
-{ \r
+{\r
int ret = 0;\r
+#ifdef UNIVERSAL_COPY_EXAMPLE\r
XDM1_BufDesc inBuf, outBuf;\r
UNIVERSAL_InArgs inArg;\r
UNIVERSAL_OutArgs outArg;\r
- \r
+\r
inArg.size = sizeof(UNIVERSAL_InArgs);\r
- outArg.size = sizeof(UNIVERSAL_OutArgs); \r
+ outArg.size = sizeof(UNIVERSAL_OutArgs);\r
outArg.extendedError = 0;\r
- //System_printf("Before VIDDEC2 process\n");\r
- \r
- //System_printf("outptr = 0x%x, size = %d\n",outBufs->bufs[0],outBufs->bufSizes[0]);\r
+\r
inBuf.numBufs = 1;\r
outBuf.numBufs = 1;\r
inBuf.descs[0].buf = inBufs->descs[0].buf;\r
inBuf.descs[0].bufSize = inBufs->descs[0].bufSize;\r
- \r
+\r
outBuf.descs[0].buf = outBufs->bufs[0];\r
outBuf.descs[0].bufSize = outBufs->bufSizes[0];\r
- \r
- ret = UNIVERSAL_process((UNIVERSAL_Handle)handle, &inBuf, &outBuf, NULL, \r
- &inArg, &outArg);\r
\r
- //System_printf("After VIDDEC2 process\n");\r
- return ret; \r
+ ret = UNIVERSAL_process((UNIVERSAL_Handle)handle, &inBuf, &outBuf, NULL,\r
+ &inArg, &outArg);\r
+#else\r
+ ret = VIDDEC2_process(handle, inBufs, outBufs, inArgs, outArgs);\r
+#endif\r
+ return ret;\r
}\r
\r
static int viddec2_delete(VIDDEC2_Handle handle)\r
{\r
- //System_printf("Deleting VIDDEC2\n"); \r
+#ifdef UNIVERSAL_COPY_EXAMPLE\r
UNIVERSAL_delete((UNIVERSAL_Handle)handle);\r
+#else\r
+ VIDDEC2_delete(handle);\r
+#endif\r
return 0;\r
}\r
- \r
+\r
\r
/*\r
* RPC message handlers\r
\r
FCSettings_init();\r
Diags_setMask(FCSETTINGS_MODNAME "+12345678LEXAIZFS");\r
- \r
+\r
CESettings_init();\r
Diags_setMask(CESETTINGS_MODNAME "+12345678LEXAIZFS");\r
- \r
+\r
/*\r
* Enable use of runtime Diags_setMask per module:\r
*\r
Diags_setMask("ti.ipc.rpmsg.RPMessage=EXLFS");\r
Diags_setMask("ti.ipc.rpmsg.VirtQueue=EXLFS");\r
}\r
- \r
+\r
CERuntime_init();\r
\r
if( !suspend_initialised ) {\r
dce_engine_open *engine_open_msg = (dce_engine_open *)payload[0].data;\r
Engine_Handle eng_handle = NULL;\r
Uint32 num_params = MmRpc_NUM_PARAMETERS(size);\r
- \r
+\r
DEBUG(">> engine_open");\r
if( num_params != 1 ) {\r
ERROR("Invalid number of params sent");\r
}\r
\r
dce_inv(engine_open_msg);\r
- \r
+\r
eng_handle = Engine_open(engine_open_msg->name, engine_open_msg->engine_attrs, &engine_open_msg->error_code);\r
DEBUG("<< engine=%08x, ec=%d", eng_handle, engine_open_msg->error_code);\r
- \r
+\r
dce_clean(engine_open_msg);\r
\r
return ((Int32)eng_handle);\r
return (0);\r
}\r
\r
+#define INFO_TYPE_CPU_LOAD 0\r
+#define INFO_TYPE_TOTAL_HEAP_SIZE 1\r
+#define INFO_TYPE_AVAILABLE_HEAP_SIZE 2\r
+\r
+static Int32 get_rproc_info(UInt32 size, UInt32 *data)\r
+{\r
+ MmType_Param *payload = (MmType_Param *)data;\r
+ Uint32 info_type = (Uint32)payload[0].data;\r
+ Uint32 output = 0;\r
+ Memory_Stats stats;\r
+\r
+ switch(info_type)\r
+ {\r
+ case INFO_TYPE_CPU_LOAD:\r
+ output = Load_getCPULoad();\r
+ break;\r
+\r
+ case INFO_TYPE_TOTAL_HEAP_SIZE:\r
+ Memory_getStats(NULL, &stats);\r
+ output = stats.totalSize;\r
+ break;\r
+\r
+ case INFO_TYPE_AVAILABLE_HEAP_SIZE:\r
+ Memory_getStats(NULL, &stats);\r
+ output = stats.totalFreeSize;\r
+ break;\r
+\r
+ default:\r
+ System_printf("\n ERROR: Invalid INFO TYPE chosen \n");\r
+ break;\r
+ }\r
+\r
+ return output;\r
+}\r
+\r
+\r
/*\r
* codec_create\r
*/\r
ERROR("invalid number of params sent");\r
return (-1);\r
}\r
- \r
+\r
if(codec_id != OMAP_DCE_VIDDEC2){\r
ERROR("invalid codec id sent");\r
return (-1);\r
dce_inv(static_params);\r
\r
codec_handle = (void *)codec_fxns[codec_id].create(engine, codec_name, static_params);\r
- \r
+\r
DEBUG("<< codec_handle=%08x", codec_handle);\r
\r
dce_clean(static_params);\r
ERROR("invalid number of params sent");\r
return (-1);\r
}\r
- \r
+\r
if(codec_id != OMAP_DCE_VIDDEC2){\r
ERROR("invalid codec id sent");\r
return (-1);\r
dce_inv(status);\r
\r
ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, cmd_id, dyn_params, status);\r
- \r
+\r
DEBUG("<< result=%d", ret);\r
\r
dce_clean(dyn_params);\r
ERROR("invalid number of params sent");\r
return (-1);\r
}\r
- \r
+\r
if(codec_id != OMAP_DCE_VIDDEC2){\r
ERROR("invalid codec id sent");\r
return (-1);\r
}\r
- \r
+\r
version_buf = (void *)(H2P((MemHeader *)((IVIDDEC2_Status *)status)->data.buf));\r
- \r
+\r
dce_inv(dyn_params);\r
dce_inv(status);\r
dce_inv(version_buf);\r
- \r
+\r
ret = (uint32_t) codec_fxns[codec_id].control(codec_handle, XDM_GETVERSION, dyn_params, status);\r
\r
DEBUG("<< result=%d", ret);\r
void *outBufptr = (void *)payload[6].data;\r
Int32 ret = 0;\r
void *outBufSize = NULL;\r
- \r
+\r
DEBUG(">> codec_process");\r
\r
if( num_params != 7 ) {\r
ERROR("invalid codec id sent");\r
return (-1);\r
}\r
- \r
+\r
outBufSize = (void *)(H2P((MemHeader *)((XDM_BufDesc *)outBufs)->bufSizes));\r
\r
dce_inv(inBufs);\r
dce_inv(outArgs);\r
dce_inv(outBufptr);\r
dce_inv(outBufSize);\r
- \r
+\r
DEBUG(">> codec=%p, inBufs=%p, outBufs=%p, inArgs=%p, outArgs=%p codec_id=%d",\r
codec, inBufs, outBufs, inArgs, outArgs, codec_id);\r
\r
ret = codec_fxns[codec_id].process((void *)codec, inBufs, outBufs, inArgs, outArgs);\r
- \r
+\r
\r
DEBUG("<< ret=%d extendedError=%08x", ret, ((VIDDEC3_OutArgs *)outArgs)->extendedError);\r
\r
ERROR("invalid number of params sent");\r
return (-1);\r
}\r
- \r
+\r
if(codec_id != OMAP_DCE_VIDDEC2){\r
ERROR("invalid codec id sent");\r
return (-1);\r
{ "codec_control", (RcmServer_MsgFxn) codec_control },\r
{ "codec_get_version", (RcmServer_MsgFxn) codec_get_version },\r
{ "codec_process", (RcmServer_MsgFxn) codec_process },\r
- { "codec_delete", (RcmServer_MsgFxn) codec_delete }\r
+ { "codec_delete", (RcmServer_MsgFxn) codec_delete },\r
+ { "get_rproc_info", (RcmServer_MsgFxn) get_rproc_info }\r
};\r
\r
/* DCE Server skel function table */\r
{ MmType_Dir_Out, MmType_Param_S32, 1 }, // return\r
{ MmType_Dir_In, MmType_Param_U32, 1 },\r
{ MmType_Dir_In, MmType_Param_U32, 1 }\r
- } }\r
+ } },\r
+ { "get_rproc_info", 2,\r
+ {\r
+ { MmType_Dir_Out, MmType_Param_S32, 1 }, // return\r
+ { MmType_Dir_In, MmType_Param_U32, 1 }\r
+ } }\r
};\r
\r
static MmType_FxnSigTab dce_fxnSigTab =\r
{\r
int err = 0;\r
dce_connect dce_connect_msg;\r
- \r
+\r
err = MmServiceMgr_init(); // MmServiceMgr_init() will always return MmServiceMgr_S_SUCCESS.\r
\r
// setup the RCM Server create params\r
\r
// Get the Service Manager handle\r
err = MmServiceMgr_register(SERVER_NAME, &rpc_Params, &dce_fxnSigTab, dce_SrvDelNotification);\r
- \r
+\r
if( err < 0 ) {\r
DEBUG("failed to start " SERVER_NAME " \n");\r
//err = -1;\r
params.instance->name = "dce-server";\r
params.priority = Thread_Priority_ABOVE_NORMAL;\r
Task_create(dce_main, ¶ms, NULL);\r
- \r
+\r
return (TRUE);\r
}\r
\r