diff options
Diffstat (limited to 'domx/domx/omx_rpc/src')
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc.c | 410 | ||||
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc_config.c | 1 | ||||
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc_platform.c | 1 | ||||
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc_skel.c | 329 | ||||
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc_stub.c | 1489 | ||||
-rwxr-xr-x | domx/domx/omx_rpc/src/omx_rpc_utils.c | 446 |
6 files changed, 0 insertions, 2676 deletions
diff --git a/domx/domx/omx_rpc/src/omx_rpc.c b/domx/domx/omx_rpc/src/omx_rpc.c deleted file mode 100755 index 0743491..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc.c +++ /dev/null @@ -1,410 +0,0 @@ -/* - * Copyright (c) 2010, 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 omx_rpc_stub.c - * This file contains methods that provides the functionality for - * the OpenMAX1.1 DOMX Framework RPC Stub implementations. - * - * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\src - * - * @rev 1.0 - */ - - -/****************************************************************** - * INCLUDE FILES - ******************************************************************/ -/* ----- system and platform files ----------------------------*/ -#include <errno.h> -//#include <errno-base.h> - -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/eventfd.h> -#include <unistd.h> -#include <string.h> -#include <stdio.h> - -#include <OMX_Types.h> -#include <timm_osal_interfaces.h> -#include <timm_osal_trace.h> - - -/*-------program files ----------------------------------------*/ -#include "omx_rpc.h" -#include "omx_proxy_common.h" -#include "omx_rpc_stub.h" -#include "omx_rpc_skel.h" -#include "omx_rpc_internal.h" -#include "omx_rpc_utils.h" - -#include "rpmsg_omx_defs.h" - -#define RPC_MSGPIPE_SIZE (4) -#define RPC_MSG_SIZE_FOR_PIPE (sizeof(OMX_PTR)) -#define MAX_ATTEMPTS 15 - -#define RPC_getPacket(nPacketSize, pPacket) do { \ - pPacket = TIMM_OSAL_Malloc(nPacketSize, TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); \ - RPC_assert(pPacket != NULL, RPC_OMX_ErrorInsufficientResources, \ - "Error Allocating RCM Message Frame"); \ - } while(0) - -#define RPC_freePacket(pPacket) do { \ - if(pPacket != NULL) TIMM_OSAL_Free(pPacket); \ - } while(0) - -OMX_U8 pBufferError[RPC_PACKET_SIZE]; - -void *RPC_CallbackThread(void *data); - - -/* ===========================================================================*/ -/** -* @name RPC_InstanceInit() -* @brief RPC instance init is used for initialization. It is called once for -* every instance of an OMX component. -* @param cComponentName [IN] : Name of the component. -* @param phRPCCtx [OUT] : RPC Context structure - to be filled in and returned -* @return RPC_OMX_ErrorNone = Successful -*/ -/* ===========================================================================*/ - -RPC_OMX_ERRORTYPE RPC_InstanceInit(OMX_STRING cComponentName, - OMX_HANDLETYPE * phRPCCtx) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - RPC_OMX_CONTEXT *pRPCCtx = NULL; - OMX_S32 status = 0; - struct omx_conn_req sReq = { .name = "OMX" }; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 i = 0, nAttempts = 0; - - *(RPC_OMX_CONTEXT **) phRPCCtx = NULL; - - //pthread_t cbThread; - -// sReq.name = "OMX"; - - /*pRPCCtx contains context information for each instance */ - pRPCCtx = - (RPC_OMX_CONTEXT *) TIMM_OSAL_Malloc(sizeof(RPC_OMX_CONTEXT), - TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); - RPC_assert(pRPCCtx != NULL, RPC_OMX_ErrorInsufficientResources, - "Malloc failed"); - TIMM_OSAL_Memset(pRPCCtx, 0, sizeof(RPC_OMX_CONTEXT)); - - /*Assuming that open maintains an internal count for multi instance */ - DOMX_DEBUG("Calling open on the device"); - while (1) - { - pRPCCtx->fd_omx = open("/dev/rpmsg-omx1", O_RDWR); - if(pRPCCtx->fd_omx >= 0 || errno != ENOENT || nAttempts == MAX_ATTEMPTS) - break; - DOMX_DEBUG("errno from open= %d, REATTEMPTING OPEN!!!!",errno); - nAttempts++; - usleep(1000000); - } - if(pRPCCtx->fd_omx < 0) - { - DOMX_ERROR("Can't open device, errorno from open = %d",errno); - eError = RPC_OMX_ErrorInsufficientResources; - goto EXIT; - } - DOMX_DEBUG("Open was successful, pRPCCtx->fd_omx = %d", - pRPCCtx->fd_omx); -//AD -// strncpy(sReq.name, cComponentName, OMX_MAX_STRINGNAME_SIZE); - - DOMX_DEBUG("Calling ioctl"); - status = ioctl(pRPCCtx->fd_omx, OMX_IOCCONNECT, &sReq); - RPC_assert(status >= 0, RPC_OMX_ErrorInsufficientResources, - "Can't connect"); - - for (i = 0; i < RPC_OMX_MAX_FUNCTION_LIST; i++) - { - eError = - TIMM_OSAL_CreatePipe(&(pRPCCtx->pMsgPipe[i]), - RPC_MSGPIPE_SIZE, RPC_MSG_SIZE_FOR_PIPE, 1); - RPC_assert(eError == TIMM_OSAL_ERR_NONE, - RPC_OMX_ErrorInsufficientResources, - "Pipe creation failed"); - } - - DOMX_DEBUG("Creating event fd"); - pRPCCtx->fd_killcb = eventfd(0, 0); - RPC_assert(pRPCCtx->fd_killcb >= 0, - RPC_OMX_ErrorInsufficientResources, "Can't create kill fd"); - /*Create a listener/server thread to listen for Ducati callbacks */ - DOMX_DEBUG("Create listener thread"); - status = - pthread_create(&(pRPCCtx->cbThread), NULL, RPC_CallbackThread, - pRPCCtx); - RPC_assert(status == 0, RPC_OMX_ErrorInsufficientResources, - "Can't create cb thread"); - - EXIT: - if (eRPCError != RPC_OMX_ErrorNone) - { - RPC_InstanceDeInit(pRPCCtx); - } - else - { - *(RPC_OMX_CONTEXT **) phRPCCtx = pRPCCtx; - } - return eRPCError; -} - - - -/* ===========================================================================*/ -/** -* @name RPC_InstanceDeInit() -* @brief RPC instance deinit is used for tear down. It is called once when an -* instance of OMX component is going down. -* @param phRPCCtx [IN] : RPC Context structure. -* @return RPC_OMX_ErrorNone = Successful -*/ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_InstanceDeInit(OMX_HANDLETYPE hRPCCtx) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - RPC_OMX_CONTEXT *pRPCCtx = (RPC_OMX_CONTEXT *) hRPCCtx; - OMX_S32 status = 0; - OMX_U32 i = 0; - OMX_U64 nKillEvent = 1; - - RPC_assert(hRPCCtx != NULL, RPC_OMX_ErrorUndefined, - "NULL context handle supplied to RPC Deinit"); - - if (pRPCCtx->fd_killcb) - { - status = - write(pRPCCtx->fd_killcb, &nKillEvent, sizeof(OMX_U64)); - if (status <= 0) - { - DOMX_ERROR - ("Write to kill fd failed - cb thread may not exit"); - eRPCError = RPC_OMX_ErrorUndefined; - } else if (pRPCCtx->cbThread) - { - DOMX_DEBUG("Waiting for cb thread to exit"); - status = pthread_join(pRPCCtx->cbThread, NULL); - if (status != 0) - { - DOMX_ERROR("Join for cb thread failed"); - eRPCError = RPC_OMX_ErrorUndefined; - } - } - DOMX_DEBUG("Closing the kill fd"); - status = close(pRPCCtx->fd_killcb); - pRPCCtx->fd_killcb = 0; - if (status != 0) - { - DOMX_ERROR("Close failed on kill fd"); - eRPCError = RPC_OMX_ErrorUndefined; - } - } - - for (i = 0; i < RPC_OMX_MAX_FUNCTION_LIST; i++) - { - if (pRPCCtx->pMsgPipe[i]) - { - eError = TIMM_OSAL_DeletePipe(pRPCCtx->pMsgPipe[i]); - pRPCCtx->pMsgPipe[i] = NULL; - if (eError != TIMM_OSAL_ERR_NONE) - { - DOMX_ERROR("Pipe deletion failed"); - eRPCError = RPC_OMX_ErrorUndefined; - } - } - } - - DOMX_DEBUG("Closing the omx fd"); - if (pRPCCtx->fd_omx) - { - status = close(pRPCCtx->fd_omx); - pRPCCtx->fd_omx = 0; - if (status != 0) - { - DOMX_ERROR("Close failed on omx fd"); - eRPCError = RPC_OMX_ErrorUndefined; - } - } - - TIMM_OSAL_Free(pRPCCtx); - - EXIT: - return eRPCError; -} - - - -/* ===========================================================================*/ -/** -* @name RPC_CallbackThread() -* @brief This is the entry function of the thread which keeps spinning, waiting -* for messages from Ducati. -* @param data [IN] : The RPC Context structure is passed here. -* @return RPC_OMX_ErrorNone = Successful -*/ -/* ===========================================================================*/ -void *RPC_CallbackThread(void *data) -{ - OMX_PTR pBuffer = NULL; - RPC_OMX_CONTEXT *pRPCCtx = (RPC_OMX_CONTEXT *) data; - fd_set readfds; - OMX_S32 maxfd = 0, status = 0; - OMX_U32 nFxnIdx = 0, nPacketSize = RPC_PACKET_SIZE, nPos = 0; - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_COMPONENTTYPE *hComp = NULL; - PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; - OMX_PTR pBuff = pBufferError; - - maxfd = - (pRPCCtx->fd_killcb > - pRPCCtx->fd_omx ? pRPCCtx->fd_killcb : pRPCCtx->fd_omx) + 1; - while (1) - { - FD_ZERO(&readfds); - FD_SET(pRPCCtx->fd_omx, &readfds); - FD_SET(pRPCCtx->fd_killcb, &readfds); - - DOMX_DEBUG("Waiting for messages from remote core"); - status = select(maxfd, &readfds, NULL, NULL, NULL); - RPC_assert(status > 0, RPC_OMX_ErrorUndefined, - "select failed"); - - if (FD_ISSET(pRPCCtx->fd_killcb, &readfds)) - { - DOMX_DEBUG("Recd. kill message - exiting the thread"); - break; - } - - if (FD_ISSET(pRPCCtx->fd_omx, &readfds)) - { - DOMX_DEBUG("Recd. omx message"); - RPC_getPacket(nPacketSize, pBuffer); - status = read(pRPCCtx->fd_omx, pBuffer, nPacketSize); - if(status < 0) - { - if(errno == ENXIO) - { - for(nFxnIdx = 0; nFxnIdx < RPC_OMX_MAX_FUNCTION_LIST; nFxnIdx++) - { - ((struct omx_packet *) pBufferError)->result = OMX_ErrorHardware; - TIMM_OSAL_WriteToPipe(pRPCCtx->pMsgPipe[nFxnIdx], &pBuff, RPC_MSG_SIZE_FOR_PIPE, TIMM_OSAL_SUSPEND); - if(eError != TIMM_OSAL_ERR_NONE) - DOMX_ERROR("Write to pipe failed"); - } - /*Indicate fatal error and exit*/ - RPC_assert(0, RPC_OMX_ErrorHardware, - "Remote processor fatal error"); - } - else - { - RPC_assert(0, RPC_OMX_ErrorUndefined, - "read failed"); - } - } - - nPos = 0; - nFxnIdx = ((struct omx_packet *) pBuffer)->fxn_idx; - /*Indices from static table will have bit 31 set */ - if (nFxnIdx & 0x80000000) - nFxnIdx &= 0x0FFFFFFF; - RPC_assert(nFxnIdx < RPC_OMX_MAX_FUNCTION_LIST, - RPC_OMX_ErrorUndefined, - "Bad function index recd"); - switch (nFxnIdx) - { - case RPC_OMX_FXN_IDX_EVENTHANDLER: - RPC_SKEL_EventHandler(((struct omx_packet *) - pBuffer)->data); - RPC_freePacket(pBuffer); - pBuffer = NULL; - break; - case RPC_OMX_FXN_IDX_EMPTYBUFFERDONE: - RPC_SKEL_EmptyBufferDone(((struct omx_packet *) - pBuffer)->data); - RPC_freePacket(pBuffer); - pBuffer = NULL; - break; - case RPC_OMX_FXN_IDX_FILLBUFFERDONE: - RPC_SKEL_FillBufferDone(((struct omx_packet *) - pBuffer)->data); - RPC_freePacket(pBuffer); - pBuffer = NULL; - break; - default: - eError = - TIMM_OSAL_WriteToPipe(pRPCCtx-> - pMsgPipe[nFxnIdx], &pBuffer, - RPC_MSG_SIZE_FOR_PIPE, TIMM_OSAL_SUSPEND); - RPC_assert(eError == TIMM_OSAL_ERR_NONE, - RPC_OMX_ErrorUndefined, - "Write to pipe failed"); - break; - } - } -EXIT: - if (eRPCError != RPC_OMX_ErrorNone) - { - //AD TODO: Send error CB to client and then go back in loop to wait for killfd - if (pBuffer != NULL) - { - RPC_freePacket(pBuffer); - pBuffer = NULL; - } - /*Report all hardware errors as fatal and exit from listener thread*/ - if (eRPCError == RPC_OMX_ErrorHardware) - { - /*Implicit detail: pAppData is proxy component handle updated during - RPC_GetHandle*/ - hComp = (OMX_COMPONENTTYPE *) pRPCCtx->pAppData; - if(hComp != NULL) - { - pCompPrv = (PROXY_COMPONENT_PRIVATE *) hComp->pComponentPrivate; - /*Indicate fatal error. Users are expected to cleanup the OMX instance - to ensure all resources are cleaned up.*/ - pCompPrv->proxyEventHandler(hComp, pCompPrv->pILAppData, OMX_EventError, - OMX_ErrorHardware, 0, NULL); - } - break; - } - } - } - return (void*)0; -} diff --git a/domx/domx/omx_rpc/src/omx_rpc_config.c b/domx/domx/omx_rpc/src/omx_rpc_config.c deleted file mode 100755 index 8b13789..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc_config.c +++ /dev/null @@ -1 +0,0 @@ - diff --git a/domx/domx/omx_rpc/src/omx_rpc_platform.c b/domx/domx/omx_rpc/src/omx_rpc_platform.c deleted file mode 100755 index 8b13789..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc_platform.c +++ /dev/null @@ -1 +0,0 @@ - diff --git a/domx/domx/omx_rpc/src/omx_rpc_skel.c b/domx/domx/omx_rpc/src/omx_rpc_skel.c deleted file mode 100755 index 5b8d423..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc_skel.c +++ /dev/null @@ -1,329 +0,0 @@ -/* - * Copyright (c) 2010, 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 omx_rpc_skel.c - * This file contains methods that provides the functionality for - * the OpenMAX1.1 DOMX Framework RPC Skeleton implementations. - * - * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\src - * - * @rev 1.0 - */ - -/*============================================================== - *! Revision History - *! ============================ - *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation - *! - *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version - *================================================================*/ - -/****************************************************************** - * INCLUDE FILES - ******************************************************************/ - -#include <stdio.h> -#include <string.h> - -#include <timm_osal_interfaces.h> -#include <OMX_TI_Common.h> - -#include "omx_rpc.h" -#include "omx_proxy_common.h" -#include "omx_rpc_skel.h" -#include "omx_rpc_utils.h" -#include "omx_rpc_internal.h" - -/* FUNCTION LIST*/ -/* -RPC_OMX_ERRORTYPE RPC_SKEL_EmptyBufferDone(uint32_t size, uint32_t *data) -RPC_OMX_ERRORTYPE RPC_SKEL_FillBufferDone(uint32_t size, uint32_t *data) -RPC_OMX_ERRORTYPE RPC_SKEL_EventHandler(uint32_t size, uint32_t *data) -*/ - - -/* ===========================================================================*/ -/** - * @name RPC_SKEL_FillBufferDone() - * @brief Skeleton for OMX_AllocateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SKEL_EmptyBufferDone(void *data) -{ - - OMX_HANDLETYPE hComp; - RPC_OMX_ERRORTYPE tRPCError = RPC_OMX_ErrorNone; - OMX_U32 nfilledLen = 0; - OMX_U32 nOffset = 0; - OMX_U32 nFlags = 0; - OMX_U32 bufferHdr; - OMX_COMPONENTTYPE *pHandle = NULL; - PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; - OMX_U32 nPos = 0; - //RPC_OMX_MESSAGE *recdMsg; - OMX_U8 *pMsgBody = NULL; - //recdMsg = (RPC_OMX_MESSAGE *) (data); - - pMsgBody = data; //&recdMsg->msgBody[0]; - - DOMX_ENTER(""); - - //Marshalled:[>hComp|>bufferHdr|>nFilledLen|>nOffset|>nFlags] - - RPC_GETFIELDVALUE(pMsgBody, nPos, hComp, OMX_HANDLETYPE); - pHandle = (OMX_COMPONENTTYPE *) hComp; - pCompPrv = (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; - - RPC_GETFIELDVALUE(pMsgBody, nPos, bufferHdr, OMX_U32); - - RPC_GETFIELDVALUE(pMsgBody, nPos, nfilledLen, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nOffset, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nFlags, OMX_U32); - - tRPCError = - pCompPrv->proxyEmptyBufferDone(hComp, bufferHdr, nfilledLen, - nOffset, nFlags); - - DOMX_EXIT(""); - return tRPCError; -} - -/* ===========================================================================*/ -/** - * @name RPC_SKEL_FillBufferDone() - * @brief Skeleton for OMX_AllocateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SKEL_FillBufferDone(void *data) -{ - - OMX_HANDLETYPE hComp; - RPC_OMX_ERRORTYPE tRPCError = RPC_OMX_ErrorNone; - OMX_U32 nfilledLen = 0; - OMX_U32 nOffset = 0; - OMX_U32 nFlags = 0; - OMX_TICKS nTimeStamp; - OMX_U32 bufferHdr; - OMX_COMPONENTTYPE *pHandle = NULL; - PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; - OMX_U32 nPos = 0; - //RPC_OMX_MESSAGE *recdMsg; - OMX_U8 *pMsgBody = NULL; - OMX_HANDLETYPE hMarkTargetComponent = NULL; - OMX_PTR pMarkData = NULL; - //recdMsg = (RPC_OMX_MESSAGE *) (data); - - pMsgBody = data; //&recdMsg->msgBody[0]; - - DOMX_ENTER(""); - - //Marshalled:[>hComp|>bufferHdr|>nFilledLen|>nOffset|>nFlags|>nTimeStamp] - - RPC_GETFIELDVALUE(pMsgBody, nPos, hComp, OMX_HANDLETYPE); - pHandle = (OMX_COMPONENTTYPE *) hComp; - pCompPrv = (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; - - RPC_GETFIELDVALUE(pMsgBody, nPos, bufferHdr, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nfilledLen, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nOffset, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nFlags, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nTimeStamp, OMX_TICKS); - RPC_GETFIELDVALUE(pMsgBody, nPos, hMarkTargetComponent, - OMX_HANDLETYPE); - RPC_GETFIELDVALUE(pMsgBody, nPos, pMarkData, OMX_PTR); - - tRPCError = - pCompPrv->proxyFillBufferDone(hComp, bufferHdr, nfilledLen, - nOffset, nFlags, nTimeStamp, hMarkTargetComponent, pMarkData); - - DOMX_EXIT(""); - return tRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_SKEL_EventHandler() - * @brief Skeleton for OMX_AllocateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SKEL_EventHandler(void *data) -{ - OMX_HANDLETYPE hComp; - RPC_OMX_ERRORTYPE tRPCError = RPC_OMX_ErrorNone; - OMX_COMPONENTTYPE *pHandle = NULL; - PROXY_COMPONENT_PRIVATE *pCompPrv = NULL; - OMX_EVENTTYPE eEvent; - OMX_U32 nData1; - OMX_U32 nData2; - OMX_PTR pEventData; - OMX_U32 nPos = 0; - //RPC_OMX_MESSAGE *recdMsg; - OMX_U8 *pMsgBody = NULL; - //recdMsg = (RPC_OMX_MESSAGE *) (data); - pMsgBody = data; //&recdMsg->msgBody[0]; - - DOMX_ENTER(""); - - //Marshalled:[>hComp|>eEvent|>nData1|>nData2|>pEventData] - - RPC_GETFIELDVALUE(pMsgBody, nPos, hComp, OMX_HANDLETYPE); - pHandle = (OMX_COMPONENTTYPE *) hComp; - pCompPrv = (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; - - RPC_GETFIELDVALUE(pMsgBody, nPos, eEvent, OMX_EVENTTYPE); - RPC_GETFIELDVALUE(pMsgBody, nPos, nData1, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, nData2, OMX_U32); - RPC_GETFIELDVALUE(pMsgBody, nPos, pEventData, OMX_PTR); - - DOMX_DEBUG - ("\n**__**Got eventhandler from Remote Core succesffuly - values are : **__**"); - DOMX_DEBUG - ("hComp :0x%x,eEvent: 0x%x,nData1: 0x%x,nData2: 0x%x,pEventData: 0x%x", - hComp, eEvent, nData1, nData2, pEventData); - DOMX_DEBUG("Just Before Entering Proxy Event handler call"); - - tRPCError = - pCompPrv->proxyEventHandler(hComp, pCompPrv->pILAppData, eEvent, - nData1, nData2, pEventData); - - DOMX_EXIT(""); - return tRPCError; - -} - -/* ===========================================================================*/ -/** - * @name EMPTY-SKEL - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SKEL_GetHandle(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_SetParameter(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_GetParameter(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_FreeHandle(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_EmptyThisBuffer(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_FillThisBuffer(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_UseBuffer(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_FreeBuffer(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_SetConfig(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_GetConfig(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_GetState(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_SendCommand(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_GetComponentVersion(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_GetExtensionIndex(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_AllocateBuffer(uint32_t size, uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_SKEL_ComponentTunnelRequest(uint32_t size, - uint32_t * data) -{ - return RPC_OMX_ErrorNone; -} diff --git a/domx/domx/omx_rpc/src/omx_rpc_stub.c b/domx/domx/omx_rpc/src/omx_rpc_stub.c deleted file mode 100755 index 0c28ba1..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc_stub.c +++ /dev/null @@ -1,1489 +0,0 @@ -/* - * Copyright (c) 2010, 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 omx_rpc_stub.c - * This file contains methods that provides the functionality for - * the OpenMAX1.1 DOMX Framework RPC Stub implementations. - * - * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\src - * - * @rev 1.0 - */ - -/*============================================================== - *! Revision History - *! ============================ - *! 30-Apr-2010 Abhishek Ranka : Fixed GetExtension issue - *! - *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation - *! - *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version - *================================================================*/ -/****************************************************************** - * INCLUDE FILES - ******************************************************************/ -#include <errno.h> -#include <string.h> -#include <stdio.h> -#include <unistd.h> - -#include "omx_rpc.h" -#include "omx_rpc_utils.h" -#include "omx_proxy_common.h" -#include "omx_rpc_stub.h" -#include <OMX_TI_Common.h> -#include <timm_osal_interfaces.h> - -#include <linux/rpmsg_omx.h> -#include "rpmsg_omx_defs.h" - -/****************************************************************** - * EXTERNS - ******************************************************************/ - -/****************************************************************** - * MACROS - LOCAL - ******************************************************************/ - -//#define RPC_MSGPIPE_SIZE (4) -#define RPC_MSG_SIZE_FOR_PIPE (sizeof(OMX_PTR)) - -/* When this is defined ETB/FTB calls are made in sync mode. Undefining will - * result in these calls being sent via async mode. Sync mode leads to correct - * functionality as per OMX spec but has a slight performance penalty. Async - * mode sacrifices strict adherence to spec for some gain in performance. */ -#define RPC_SYNC_MODE - - -#define RPC_getPacket(nPacketSize, pPacket) do { \ - pPacket = TIMM_OSAL_Malloc(nPacketSize, TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); \ - RPC_assert(pPacket != NULL, RPC_OMX_ErrorInsufficientResources, \ - "Error Allocating RCM Message Frame"); \ - TIMM_OSAL_Memset(pPacket, 0, nPacketSize); \ - } while(0) - -#define RPC_freePacket(pPacket) do { \ - if(pPacket != NULL) TIMM_OSAL_Free(pPacket); \ - } while(0) - -#define RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, nSize) do { \ - status = write(hCtx->fd_omx, pPacket, nPacketSize); \ - RPC_freePacket(pPacket); \ - pPacket = NULL; \ - if(status < 0 && errno == ENXIO) { \ - RPC_assert(0, RPC_OMX_ErrorHardware, "Write failed - Ducati in faulty state"); \ - } \ - if(status != (signed)nPacketSize) { \ - DOMX_ERROR("Write failed returning status = 0x%x",status); \ - RPC_assert(0, RPC_OMX_ErrorUndefined, "Write failed"); \ - } \ - eError = TIMM_OSAL_ReadFromPipe(hCtx->pMsgPipe[nFxnIdx], &pRetPacket, \ - RPC_MSG_SIZE_FOR_PIPE, (TIMM_OSAL_U32 *)(&nSize), TIMM_OSAL_SUSPEND); \ - RPC_assert(eError == TIMM_OSAL_ERR_NONE, eError, \ - "Read failed"); \ - } while(0) - -/*Set bit 31 on fxn idx as it is static function*/ -#define RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize) do { \ - pOmxPacket = (struct omx_packet *)pPacket; \ - pData = pOmxPacket->data; \ - pOmxPacket->desc |= OMX_DESC_MSG << OMX_DESC_TYPE_SHIFT; \ - pOmxPacket->msg_id = 0; \ - pOmxPacket->flags = OMX_POOLID_JOBID_DEFAULT; \ - pOmxPacket->fxn_idx = (nFxnIdx | 0x80000000); \ - pOmxPacket->result = 0; \ - pOmxPacket->data_size = nPacketSize; \ - } while(0) - -//Async to be checked later - most probably same as sync but without the read -#if 0 - -#define RPC_sendPacket_async(HRCM, pPacket, nFxnIdx) do { \ - pPacket->nFxnIdx = nFxnIdx; \ - status = RcmClient_execCmd(HRCM, pPacket); \ - if(status < 0) { \ - RPC_freePacket(HRCM, pPacket); \ - pPacket = NULL; \ - RPC_assert(0, RPC_OMX_RCM_ErrorExecFail, \ - "RcmClient_exec failed"); \ - } \ - } while(0) - -#define RPC_checkAsyncErrors(rcmHndl, pPacket) do { \ - status = RcmClient_checkForError(rcmHndl, &pPacket); \ - if(status < 0) { \ - RPC_freePacket(rcmHndl, pPacket); \ - pPacket = NULL; \ - } \ - RPC_assert(status >= 0, RPC_OMX_RCM_ClientFail, \ - "Async error check returned error"); \ - } while(0) - -#endif -/* ===========================================================================*/ -/** - * @name RPC_GetHandle() - * @brief Remote invocation stub for OMX_GetHandle - * @param hRPCCtx [OUT] : The RPC context handle. - * @param cComponentName [IN] : Name of the component that is to be created - * on Remote core. - * @param pAppData [IN] : The AppData passed by the user. - * @param pCallBacks [IN] : The callback pointers passed by the caller. - * @param eCompReturn [OUT] : This is return value returned by the remote - * component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetHandle(OMX_HANDLETYPE hRPCCtx, - OMX_STRING cComponentName, OMX_PTR pAppData, - OMX_CALLBACKTYPE * pCallBacks, OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = NULL; - OMX_HANDLETYPE hActualComp = NULL; - OMX_S32 status = 0; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - DOMX_DEBUG("RPC_GetHandle: Recieved GetHandle request from %s", - cComponentName); - - nFxnIdx = RPC_OMX_FXN_IDX_GET_HANDLE; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - DOMX_DEBUG("Packing data"); - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDCOPYGEN(pData, nPos, cComponentName, - OMX_MAX_STRINGNAME_SIZE); - RPC_SETFIELDVALUE(pData, nPos, pAppData, OMX_PTR); - - DOMX_DEBUG("Sending data"); - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDVALUE(pRetData, nPos, hComp, OMX_HANDLETYPE); - DOMX_DEBUG("Remote Handle 0x%x", hComp); - hCtx->hRemoteHandle = hComp; - /* The handle received above is used for all communications - with the remote component but is not the actual component - handle (it is actually the rpc context handle which - contains lot of other info). The handle recd. below is the - actual remote component handle. This is used at present for - mark buffer implementation since in that case it is not - feasible to send the context handle */ - RPC_GETFIELDVALUE(pRetData, nPos, hActualComp, - OMX_HANDLETYPE); - DOMX_DEBUG("Actual Remote Comp Handle 0x%x", hActualComp); - hCtx->hActualRemoteCompHandle = hActualComp; - } - - /* Save context information */ - hCtx->pAppData = pAppData; - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_FreeHandle() - * @brief Remote invocation stub for OMX_FreeHandle - * @param hRPCCtx [IN] : The RPC context handle. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_FreeHandle(OMX_HANDLETYPE hRPCCtx, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; - OMX_S32 status = 0; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_FREE_HANDLE; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; - -} - - - -/* ===========================================================================*/ -/** - * @name RPC_SetParameter() - * @brief Remote invocation stub for OMX_SetParameter - * @param hRPCCtx [IN] : The RPC context handle. - * @param nParamIndex [IN] : Same as nParamIndex received at the proxy. - * @param pCompParam [IN] : Same as pCompParam recieved at the proxy. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SetParameter(OMX_HANDLETYPE hRPCCtx, - OMX_INDEXTYPE nParamIndex, OMX_PTR pCompParam, - OMX_PTR pLocBufNeedMap, OMX_U32 nNumOfLocalBuf, OMX_ERRORTYPE * eCompReturn) -{ - - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 structSize = 0; - struct omx_packet *pOmxPacket = NULL; - - nFxnIdx = RPC_OMX_FXN_IDX_SET_PARAMETER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompParam) >= 0 ) { - if (nNumOfLocalBuf == 1) { - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, - RPC_OMX_MAP_INFO_TYPE); - } - else if (nNumOfLocalBuf == 2) { - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_TWO_BUF, - RPC_OMX_MAP_INFO_TYPE); - } - nOffset = (pLocBufNeedMap - pCompParam) + - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); - } else { - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - } - - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nParamIndex, OMX_INDEXTYPE); - structSize = RPC_UTIL_GETSTRUCTSIZE(pCompParam); - RPC_SETFIELDCOPYGEN(pData, nPos, pCompParam, structSize); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_GetParameter() - * @brief Remote invocation stub for OMX_GetParameter - * @param hRPCCtx [IN] : The RPC context handle. - * @param nParamIndex [IN] : Same as nParamIndex received at the proxy. - * @param pCompParam [IN] : Same as pCompParam recieved at the proxy. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetParameter(OMX_HANDLETYPE hRPCCtx, - OMX_INDEXTYPE nParamIndex, OMX_PTR pCompParam, - OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nDataOffset = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 structSize = 0; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_GET_PARAMETER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompParam) >= 0 ) { - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, - RPC_OMX_MAP_INFO_TYPE); - nOffset = (pLocBufNeedMap - pCompParam) + - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); - } else { - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - } - - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nParamIndex, OMX_INDEXTYPE); - nDataOffset = nPos; - structSize = RPC_UTIL_GETSTRUCTSIZE(pCompParam); - RPC_SETFIELDCOPYGEN(pData, nPos, pCompParam, structSize); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - /*pCompParam is returned in the same location in which it was sent */ - RPC_GETFIELDCOPYGEN(pRetData, nDataOffset, pCompParam, - structSize); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - //In case of Error Hardware this packet gets freed in omx_rpc.c - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_SetConfig() - * @brief Remote invocation stub for OMX_SetConfig - * @param hRPCCtx [IN] : The RPC context handle. - * @param nConfigIndex [IN] : Same as nConfigIndex received at the proxy. - * @param pCompConfig [IN] : Same as pCompConfig recieved at the proxy. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SetConfig(OMX_HANDLETYPE hRPCCtx, - OMX_INDEXTYPE nConfigIndex, OMX_PTR pCompConfig, - OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 structSize = 0; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_SET_CONFIG; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompConfig) >= 0 ) { - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, - RPC_OMX_MAP_INFO_TYPE); - nOffset = (pLocBufNeedMap - pCompConfig) + - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); - } else { - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - } - - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nConfigIndex, OMX_INDEXTYPE); - structSize = RPC_UTIL_GETSTRUCTSIZE(pCompConfig); - RPC_SETFIELDCOPYGEN(pData, nPos, pCompConfig, structSize); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - -/* ===========================================================================*/ -/** - * @name RPC_GetConfig() - * @brief Remote invocation stub for OMX_GetConfig - * @param hRPCCtx [IN] : The RPC context handle. - * @param nConfigIndex [IN] : Same as nConfigIndex received at the proxy. - * @param pCompConfig [IN] : Same as pCompConfig recieved at the proxy. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetConfig(OMX_HANDLETYPE hRPCCtx, - OMX_INDEXTYPE nConfigIndex, OMX_PTR pCompConfig, - OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0, nDataOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 structSize = 0; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_GET_CONFIG; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompConfig) >= 0 ) { - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, - RPC_OMX_MAP_INFO_TYPE); - nOffset = (pLocBufNeedMap - pCompConfig) + - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); - } else { - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - } - - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nConfigIndex, OMX_INDEXTYPE); - nDataOffset = nPos; - structSize = RPC_UTIL_GETSTRUCTSIZE(pCompConfig); - RPC_SETFIELDCOPYGEN(pData, nPos, pCompConfig, structSize); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == RPC_OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - /*pCompParam is returned in the same location in which it was sent */ - RPC_GETFIELDCOPYGEN(pRetData, nDataOffset, pCompConfig, - structSize); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_SendCommand() - * @brief Remote invocation stub for OMX_SendCommand - * @param hRPCCtx [IN] : The RPC context handle. - * @param eCmd [IN] : Same as eCmd received at the proxy. - * @param nParam [IN] : Same as nParam recieved at the proxy. - * @param pCmdData [IN] : Same as pCmdData recieved at the proxy. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_SendCommand(OMX_HANDLETYPE hRPCCtx, - OMX_COMMANDTYPE eCmd, OMX_U32 nParam, OMX_PTR pCmdData, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 structSize = 0; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_SEND_CMD; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, eCmd, OMX_COMMANDTYPE); - RPC_SETFIELDVALUE(pData, nPos, nParam, OMX_U32); - - if (pCmdData != NULL && eCmd == OMX_CommandMarkBuffer) - { - /*The RPC_UTIL_GETSTRUCTSIZE will not work here since OMX_MARKTYPE structure - does not have nSize field */ - structSize = sizeof(OMX_MARKTYPE); - RPC_SETFIELDCOPYGEN(pData, nPos, pCmdData, structSize); - } else if (pCmdData != NULL) - { - structSize = RPC_UTIL_GETSTRUCTSIZE(pCmdData); - RPC_SETFIELDCOPYGEN(pData, nPos, pCmdData, structSize); - } - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_GetState() - * @brief Remote invocation stub for OMX_GetState - * @param hRPCCtx [IN] : The RPC context handle. - * @param pState [OUT] : State variable, to be filled in and returned by - * the remote component.. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetState(OMX_HANDLETYPE hRPCCtx, OMX_STATETYPE * pState, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_GET_STATE; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDCOPYTYPE(pRetData, nPos, pState, OMX_STATETYPE); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_GetComponentVersion() - * @brief Remote invocation stub for OMX_GetComponentVersion - * @param hRPCCtx [IN] : The RPC context handle. - * @param pComponentName [OUT] : Component name, to be filled in and returned - * by the remote component. - * @param pComponentVersion [OUT] : Component version info, to be filled in and - * returned by the remote component. - * @param pSpecVersion [OUT] : Spec version info, to be filled in and - * returned by the remote component. - * @param pComponentUUID [OUT] : Component UUID info, to be filled in and - * returned by the remote component (optional). - * @param eCompReturn [OUT] : Return value returned by the remote - * component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetComponentVersion(OMX_HANDLETYPE hRPCCtx, - OMX_STRING pComponentName, OMX_VERSIONTYPE * pComponentVersion, - OMX_VERSIONTYPE * pSpecVersion, OMX_UUIDTYPE * pComponentUUID, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_S32 status = 0; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_GET_VERSION; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDCOPYGEN(pRetData, nPos, pComponentName, - OMX_MAX_STRINGNAME_SIZE); - RPC_GETFIELDCOPYTYPE(pRetData, nPos, pComponentVersion, - OMX_VERSIONTYPE); - RPC_GETFIELDCOPYTYPE(pRetData, nPos, pSpecVersion, - OMX_VERSIONTYPE); - memcpy(pComponentUUID,(OMX_UUIDTYPE *)( (OMX_U32)pRetData + nPos), sizeof(OMX_UUIDTYPE)); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_GetExtensionIndex() - * @brief Remote invocation stub for OMX_GetExtensionIndex - * @param hRPCCtx [IN] : The RPC context handle. - * @param cParameterName [IN] : The parameter name sent by the user. - * @param pIndexType [OUT] : Index type returned by the remote component. - * @param eCompReturn [OUT] : Return value returned by the remote component. - * @return RPC_OMX_ErrorNone = Successful - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_GetExtensionIndex(OMX_HANDLETYPE hRPCCtx, - OMX_STRING cParameterName, OMX_INDEXTYPE * pIndexType, - OMX_ERRORTYPE * eCompReturn) -{ - - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_S32 status = 0; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - struct omx_packet *pOmxPacket = NULL; - - nFxnIdx = RPC_OMX_FXN_IDX_GET_EXT_INDEX; - - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDCOPYGEN(pData, nPos, cParameterName, - OMX_MAX_STRINGNAME_SIZE); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDCOPYTYPE(pRetData, nPos, pIndexType, - OMX_INDEXTYPE); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - return eRPCError; - -} - -/* ***************************** DATA APIs ******************************** */ - -/* ===========================================================================*/ -/** - * @name RPC_AllocateBuffer() - * @brief Remote invocation stub for OMX_AllcateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_AllocateBuffer(OMX_HANDLETYPE hRPCCtx, - OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_IN OMX_U32 nPortIndex, - OMX_U32 * pBufHeaderRemote, OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL; - OMX_BUFFERHEADERTYPE *pBufferHdr = *ppBufferHdr; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_ALLOCATE_BUFFER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pAppPrivate, OMX_PTR); - RPC_SETFIELDVALUE(pData, nPos, nSizeBytes, OMX_U32); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDVALUE(pRetData, nPos, *pBufHeaderRemote, OMX_U32); - //save platform private before overwriting - pPlatformPrivate = (*ppBufferHdr)->pPlatformPrivate; - //RPC_GETFIELDCOPYTYPE(pData, nPos, pBufferHdr, OMX_BUFFERHEADERTYPE); - /*Copying each field of the header separately due to padding issues in - the buffer header structure */ - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nSize, OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nVersion, - OMX_VERSIONTYPE); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pBuffer, - OMX_U8 *); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nAllocLen, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFilledLen, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nOffset, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pAppPrivate, - OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->pPlatformPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->pInputPortPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->pOutputPortPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->hMarkTargetComponent, OMX_HANDLETYPE); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pMarkData, - OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTickCount, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTimeStamp, - OMX_TICKS); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFlags, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->nInputPortIndex, OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->nOutputPortIndex, OMX_U32); - - (*ppBufferHdr)->pPlatformPrivate = pPlatformPrivate; - -#ifdef TILER_BUFF - DOMX_DEBUG(" Copying plat pvt. "); - //if (offset != 0) - { - RPC_GETFIELDCOPYTYPE(pRetData, nPos, - (OMX_TI_PLATFORMPRIVATE - *) ((*ppBufferHdr)->pPlatformPrivate), - OMX_TI_PLATFORMPRIVATE); - DOMX_DEBUG("Done copying plat pvt., aux buf = 0x%x", - ((OMX_TI_PLATFORMPRIVATE - *) ((*ppBufferHdr)->pPlatformPrivate))-> - pAuxBuf1); - } -#endif - - } else - { - //DOMX_DEBUG("OMX Error received: 0x%x", - // pRPCMsg->msgHeader.nOMXReturn); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - -/* ===========================================================================*/ -/** - * @name RPC_UseBuffer() - * @brief Remote invocation stub for OMX_AllcateBuffer() - * @param hComp: This is the handle on the Remote core, the proxy will replace - it's handle with actual OMX Component handle that recides on the specified core - * @param ppBufferHdr: - * @param nPortIndex: - * @param pAppPrivate: - * @param eCompReturn: This is return value that will be supplied by Proxy to the caller. - * This is actual return value returned by the Remote component - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UseBuffer(OMX_HANDLETYPE hRPCCtx, - OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_U32 nPortIndex, - OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, OMX_U8 * pBuffer, - OMX_U32 * pBufHeaderRemote, OMX_ERRORTYPE * eCompReturn) -{ - - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = - NULL, pRetData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL; - OMX_BUFFERHEADERTYPE *pBufferHdr = *ppBufferHdr; - struct omx_packet *pOmxPacket = NULL; - RPC_OMX_MAP_INFO_TYPE eMapInfo = RPC_OMX_MAP_INFO_NONE; - OMX_PTR pMetaDataBuffer = NULL; - OMX_U32 a =32; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_USE_BUFFER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - DOMX_DEBUG("Marshaling data"); - /*Buffer mapping required */ - eMapInfo = RPC_OMX_MAP_INFO_ONE_BUF; - if (((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> - pAuxBuf1 != NULL) - eMapInfo = RPC_OMX_MAP_INFO_TWO_BUF; - if (((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)-> - pMetaDataBuffer != NULL) - eMapInfo = RPC_OMX_MAP_INFO_THREE_BUF; - - /*Offset is the location of the buffer pointer from the start of the data packet */ - nOffset = - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_U32) + sizeof(OMX_PTR) + - sizeof(OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, eMapInfo, RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pAppPrivate, OMX_PTR); - RPC_SETFIELDVALUE(pData, nPos, nSizeBytes, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, pBuffer, OMX_U32); - DOMX_DEBUG("eMapInfo = %x",eMapInfo); - if (eMapInfo >= RPC_OMX_MAP_INFO_TWO_BUF) - { - RPC_SETFIELDVALUE(pData, nPos, - ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr-> - pPlatformPrivate)->pAuxBuf1, OMX_U32); - DOMX_DEBUG("UV buffer fd= %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)->pAuxBuf1); - } - - if (eMapInfo >= RPC_OMX_MAP_INFO_THREE_BUF) - { - RPC_SETFIELDVALUE(pData, nPos, - ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr-> - pPlatformPrivate)->pMetaDataBuffer, OMX_U32); - DOMX_DEBUG("Metadata buffer = %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)->pMetaDataBuffer); - } - - DOMX_DEBUG("About to send packet"); - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - DOMX_DEBUG("Remote call returned"); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - if (*eCompReturn == OMX_ErrorNone) - { - pRetData = ((struct omx_packet *) pRetPacket)->data; - RPC_GETFIELDVALUE(pRetData, nPos, *pBufHeaderRemote, OMX_U32); - //save platform private before overwriting - pPlatformPrivate = (*ppBufferHdr)->pPlatformPrivate; - - /*Copying each field of the header separately due to padding issues in - the buffer header structure */ - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nSize, OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nVersion, - OMX_VERSIONTYPE); - /* - Do not expect buffer pointer - local buffer pointer is already - present in the local header. - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pBuffer, - OMX_U8 *); - */ - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nAllocLen, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFilledLen, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nOffset, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pAppPrivate, - OMX_PTR); - //Do not expect PlatformPrivate from Ducati - //RPC_GETFIELDVALUE(pRetData, nPos,pBufferHdr->pPlatformPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->pInputPortPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->pOutputPortPrivate, OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->hMarkTargetComponent, OMX_HANDLETYPE); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pMarkData, - OMX_PTR); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTickCount, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTimeStamp, - OMX_TICKS); - RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFlags, - OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->nInputPortIndex, OMX_U32); - RPC_GETFIELDVALUE(pRetData, nPos, - pBufferHdr->nOutputPortIndex, OMX_U32); - - //Do not expect PlatformPrivate from Ducati - /* - (*ppBufferHdr)->pPlatformPrivate = pPlatformPrivate; - - DOMX_DEBUG(" Copying plat pvt. "); - RPC_GETFIELDCOPYTYPE(pRetData, nPos, - (OMX_TI_PLATFORMPRIVATE *) ((*ppBufferHdr)-> - pPlatformPrivate), OMX_TI_PLATFORMPRIVATE);*/ - - /*Resetting size as it might be diff on Ducati due to padding issues */ - pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); - } - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - -/* ===========================================================================*/ -/** - * @name RPC_FreeBuffer() - * @brief Remote invocation stub for OMX_AllcateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_FreeBuffer(OMX_HANDLETYPE hRPCCtx, - OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_U32 BufHdrRemote, OMX_U32 pBuffer, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - struct omx_packet *pOmxPacket = NULL; - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_FREE_BUFFER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*Offset is the location of the buffer pointer from the start of the data packet */ - nOffset = sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_U32) + sizeof(OMX_U32); - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, BufHdrRemote, OMX_U32); - /* Buffer is being sent separately only to catch NULL buffer errors - in PA mode */ - RPC_SETFIELDVALUE(pData, nPos, pBuffer, OMX_U32); - - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - -/* ===========================================================================*/ -/** - * @name RPC_EmptyThisBuffer() - * @brief - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ - -RPC_OMX_ERRORTYPE RPC_EmptyThisBuffer(OMX_HANDLETYPE hRPCCtx, - OMX_BUFFERHEADERTYPE * pBufferHdr, OMX_U32 BufHdrRemote, - OMX_ERRORTYPE * eCompReturn, OMX_BOOL bMapBuffer) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U8 *pAuxBuf1 = NULL; - struct omx_packet *pOmxPacket = NULL; - RPC_OMX_MAP_INFO_TYPE eMapInfo = RPC_OMX_MAP_INFO_NONE; -#ifdef RPC_SYNC_MODE - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; -#endif - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_EMPTYTHISBUFFER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - if(bMapBuffer == OMX_TRUE) - { - pAuxBuf1 = ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1; - /*Buffer mapping required */ - if (((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1 == NULL) - eMapInfo = RPC_OMX_MAP_INFO_ONE_BUF; - else - eMapInfo = RPC_OMX_MAP_INFO_TWO_BUF; - /*Offset is the location of the buffer pointer from the start of the data packet */ - nOffset = - sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + - sizeof(OMX_HANDLETYPE) + sizeof(OMX_BUFFERHEADERTYPE *) + 3*sizeof(OMX_U32) + - sizeof(OMX_TICKS) + sizeof(OMX_HANDLETYPE) + sizeof(OMX_PTR) + 3*sizeof(OMX_U32); - } - - RPC_SETFIELDVALUE(pData, nPos, eMapInfo, RPC_OMX_MAP_INFO_TYPE); - - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, - (OMX_BUFFERHEADERTYPE *) BufHdrRemote, OMX_BUFFERHEADERTYPE *); - - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFilledLen, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOffset, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFlags, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nTimeStamp, OMX_TICKS); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->hMarkTargetComponent, - OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->pMarkData, OMX_PTR); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nAllocLen, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOutputPortIndex, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nInputPortIndex, OMX_U32); - - if(bMapBuffer == OMX_TRUE) - { - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->pBuffer, OMX_U32); - if (eMapInfo == RPC_OMX_MAP_INFO_TWO_BUF) - { - RPC_SETFIELDVALUE(pData, nPos, - ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1, OMX_U32); - } - } - - DOMX_DEBUG(" pBufferHdr = %x BufHdrRemote %x", pBufferHdr, - BufHdrRemote); - -#ifdef RPC_SYNC_MODE - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); -#else - RPC_sendPacket_async(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, - nFxnIdx); - RPC_checkAsyncErrors(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket); - - *eCompReturn = OMX_ErrorNone; -#endif - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - -/* ===========================================================================*/ -/** - * @name RPC_FillThisBuffer() - * @brief Remote invocation stub for OMX_AllcateBuffer() - * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) - * @param *data : Pointer to the RCM message/buffer received - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_FillThisBuffer(OMX_HANDLETYPE hRPCCtx, - OMX_BUFFERHEADERTYPE * pBufferHdr, OMX_U32 BufHdrRemote, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - OMX_U8 *pAuxBuf1 = NULL; - struct omx_packet *pOmxPacket = NULL; -#ifdef RPC_SYNC_MODE - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; -#endif - - DOMX_ENTER(""); - - nFxnIdx = RPC_OMX_FXN_IDX_FILLTHISBUFFER; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*No buffer mapping required */ - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, - RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); - - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, - (OMX_BUFFERHEADERTYPE *) BufHdrRemote, OMX_BUFFERHEADERTYPE *); - - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFilledLen, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOffset, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFlags, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nAllocLen, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOutputPortIndex, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nInputPortIndex, OMX_U32); - - DOMX_DEBUG(" pBufferHdr = %x BufHdrRemote %x", pBufferHdr, - BufHdrRemote); - -#ifdef RPC_SYNC_MODE - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - -#else - RPC_sendPacket_async(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, - nFxnIdx); - RPC_checkAsyncErrors(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket); - - *eCompReturn = OMX_ErrorNone; -#endif - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket && *eCompReturn != OMX_ErrorHardware) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; -} - - -/* ***************************** EMPTY APIs ******************************** */ - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -OMX_ERRORTYPE RPC_EventHandler(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, - OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData) -{ - return RPC_OMX_ErrorNone; -} - -OMX_ERRORTYPE RPC_EmptyBufferDone(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, - OMX_BUFFERHEADERTYPE * pBuffer) -{ - return RPC_OMX_ErrorNone; -} - -OMX_ERRORTYPE RPC_FillBufferDone(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, - OMX_BUFFERHEADERTYPE * pBuffer) -{ - return RPC_OMX_ErrorNone; -} - -RPC_OMX_ERRORTYPE RPC_ComponentTunnelRequest(OMX_HANDLETYPE hRPCCtx, - OMX_IN OMX_U32 nPort, OMX_HANDLETYPE hTunneledRemoteHandle, - OMX_U32 nTunneledPort, OMX_INOUT OMX_TUNNELSETUPTYPE * pTunnelSetup, - OMX_ERRORTYPE * eCompReturn) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; - OMX_U32 nPacketSize = RPC_PACKET_SIZE; - RPC_OMX_CONTEXT *hCtx = hRPCCtx; - OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; - RPC_OMX_CONTEXT *hTunneledCtx = hTunneledRemoteHandle; - OMX_HANDLETYPE hTunneledComp = hTunneledCtx->hRemoteHandle; - RPC_OMX_FXN_IDX_TYPE nFxnIdx; - struct omx_packet *pOmxPacket = NULL; - OMX_U32 nPos = 0, nSize = 0, nOffset = 0; - OMX_S32 status = 0; -#ifdef RPC_SYNC_MODE - TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; -#endif - - printf(" Entering rpc:domx_stub.c:ComponentTunnelRequest\n"); - - nFxnIdx = RPC_OMX_FXN_IDX_COMP_TUNNEL_REQUEST; - RPC_getPacket(nPacketSize, pPacket); - RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); - - /*Pack the values into a packet*/ - //Marshalled:[>ParentComp|>ParentPort|>TunnelComp|>TunneledPort>TunnelSetup] - RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, RPC_OMX_MAP_INFO_TYPE); - RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nPort, OMX_U32); - RPC_SETFIELDVALUE(pData, nPos, hTunneledComp, OMX_HANDLETYPE); - RPC_SETFIELDVALUE(pData, nPos, nTunneledPort, OMX_U32); - printf("\n after RPC_sendPacket_sync"); - RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, - nSize); - - printf("\n after RPC_sendPacket_sync: *eCompReturn : 0x%x\n", (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result)); - *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); - - EXIT: - if (pPacket) - RPC_freePacket(pPacket); - if (pRetPacket) - RPC_freePacket(pRetPacket); - - DOMX_EXIT(""); - return eRPCError; - -} diff --git a/domx/domx/omx_rpc/src/omx_rpc_utils.c b/domx/domx/omx_rpc/src/omx_rpc_utils.c deleted file mode 100755 index b1e47a8..0000000 --- a/domx/domx/omx_rpc/src/omx_rpc_utils.c +++ /dev/null @@ -1,446 +0,0 @@ -/* - * Copyright (c) 2010, 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 omx_rpc_utils.c - * This file contains methods that provides the functionality for - * the OpenMAX1.1 DOMX Framework RPC. - * - * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\src - * - * @rev 1.0 - */ - -/*============================================================== - *! Revision History - *! ============================ - *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation - *! - *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version - *================================================================*/ -/****************************************************************** - * INCLUDE FILES - ******************************************************************/ -#include <string.h> -#include <stdio.h> - -#include "omx_rpc.h" -#include "omx_rpc_internal.h" -#include "omx_rpc_utils.h" -#include <MultiProc.h> -#include <ProcMgr.h> - -extern char rcmservertable[MAX_PROC][MAX_SERVER_NAME_LENGTH]; -extern char Core_Array[MAX_PROC][MAX_CORENAME_LENGTH]; - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UTIL_GetTargetServerName(OMX_STRING ComponentName, - OMX_STRING ServerName) -{ - OMX_U8 count = 0; - OMX_U8 i = 0; - OMX_U8 servertable_idx = 0; - OMX_STRING str; - char Core[MAX_CORENAME_LENGTH]; - - DOMX_ENTER(""); - DOMX_DEBUG(" Calling Component Name %s", ComponentName); - - while (*ComponentName != '\0') - { - if (*ComponentName == '.') - { - count++; - if (count == 2) - { - ComponentName++; - str = ComponentName; - - while (*str != '.') - { - Core[i] = *str; - i++; - str++; - } - Core[i] = '\0'; - break; - } - - } - - ComponentName++; - } - - DOMX_DEBUG(" CORE NAME RECOVERED: %s", Core); - DOMX_DEBUG - ("____________________________________________________________"); - DOMX_DEBUG("Recovering Server Table Index"); - for (i = 0; i < CORE_MAX; i++) - { - - if (strcmp(Core, Core_Array[i]) == 0) - { - servertable_idx = i; - DOMX_DEBUG("Recovered Server table index = %d", i); - break; - } - } - strncpy(ServerName, (OMX_STRING) rcmservertable[servertable_idx], - MAX_SERVER_NAME_LENGTH); - DOMX_DEBUG(" ServerName recovered = %s", ServerName); - - return RPC_OMX_ErrorNone; -} - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UTIL_GetLocalServerName(OMX_STRING ComponentName, - OMX_STRING * ServerName) -{ -/* Implementation returns only current core ID - But this is a place holder to abstract out the -default server and other additional servers available on the current core. This additional servers -should be available in the RPC global that is indexed using the calling component name*/ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_U8 servertable_idx = 0; - - servertable_idx = MultiProc_getId(NULL); //This can be replace with the mechanism to obtain new addition rcm servers - if (MultiProc_INVALIDID != servertable_idx) - *ServerName = rcmservertable[servertable_idx]; - else - eRPCError = RPC_OMX_ErrorUndefined; - - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_UTIL_GenerateLocalServerName() - * @brief This function generates a server name to be used while creating the - * RCM server. The name is based on the pid so that eacj process gets a - * unique server name. - * @param cServerName - This is filled in and returned with a valid value. - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UTIL_GenerateLocalServerName(OMX_STRING cServerName) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S32 pid = 0; - OMX_U32 nProcId = 0; - - pid = getpid(); - /*Using pid as the server name, thus limiting to only 1 server per process. - This limitaion is partly enforce by syslink as well since max size of server - name is 32 so only pid can fit into the name */ - sprintf(cServerName, "%ld", pid); - - nProcId = MultiProc_getId(NULL); - if (MultiProc_INVALIDID != nProcId) - /*Fill the server table with the newly generated name */ - strncpy(rcmservertable[nProcId], cServerName, - MAX_SERVER_NAME_LENGTH); - else - eRPCError = RPC_OMX_ErrorUndefined; - - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_UTIL_GetTargetCore() - * @brief This function gets the target core id by parsing the component name. - * It is assumed that component names follow the convention - * <OMX>.<Company Name>.<Core Name>.<Domain>.<Component Details> with - * all characters in upper case for e.g. OMX.TI.DUCATI1.VIDEO.H264E - * @param cComponentName - Name of the component. - * @param nCoreId - Core ID, this is filled in and returned. - * @return RPC_OMX_ErrorNone = Successful - * @sa TBD - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UTIL_GetTargetCore(OMX_STRING cComponentName, - OMX_U32 * nCoreId) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S8 cCoreName[MAX_SERVER_NAME_LENGTH] = { 0 }; - OMX_S32 ret = 0; - OMX_U32 i = 0; - - ret = - sscanf(cComponentName, "%*[^'.'].%*[^'.'].%[^'.'].%*s", - cCoreName); - RPC_assert(ret == 1, RPC_OMX_ErrorBadParameter, - "Incorrect component name"); - - for (i = 0; i < CORE_MAX; i++) - { - if (strcmp((char *)cCoreName, Core_Array[i]) == 0) - break; - } - RPC_assert(i < CORE_MAX, RPC_OMX_ErrorBadParameter, - "Unknown core name"); - *nCoreId = i; - - EXIT: - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief the Api creates the RCM client on the target core(where the component sits). -This happens in the context of the Default RCM server on the target core. -The RCM server name to connect for this client will be the default RCM server on the calling core. -This can be provided as an option as the name that you pass in the string server is used as the RCM server name -input to the client create call. -@Default_RcmServer - The default rcm server on the target core -@Server - The name of the server on the calling core to connect to - * @param - * @return - * - */ -/* ===========================================================================*/ -/* -RPC_OMX_ERRORTYPE RPC_GetTargetClient(OMX_STRING Default_RcmServer, OMX_STRING server, rcmhHndl) -{ - - -} -*/ - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_MapBuffer(OMX_U32 mappedBuffer) -{ - DOMX_ENTER(""); - DOMX_DEBUG("Empty implementation "); - //PlaceHolder for Mapping Buffers - Cuurently no implementation here - return RPC_OMX_ErrorNone; -} - -/* ===========================================================================*/ -/** - * @name EMPTY-STUB - * @brief - * @param - * @return - * - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_UnMapBuffer(OMX_U32 mappedBuffer) -{ - DOMX_ENTER(""); - DOMX_DEBUG("Empty implementation "); - //PlaceHolder for UnMapping Buffers - Cuurently no implementation here - return RPC_OMX_ErrorNone; -} - -/* ===========================================================================*/ -/** - * @name RPC_FlushBuffer - * @brief Used to flush buffers from cache to memory. Used when buffers are - * being transferred across processor boundaries. - * @param pBuffer : Pointer to the data that has to be flushed. - * size : Size of the data to be flushed. - * nTargetCoreId : Core to which buffer is being transferred. - * @return RPC_OMX_ErrorNone : Success. - * RPC_OMX_ErrorUndefined : Flush operation failed. - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_FlushBuffer(OMX_U8 * pBuffer, OMX_U32 size, - OMX_U32 nTargetCoreId) -{ - DOMX_ENTER(""); - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S32 nStatus = 0; - - DOMX_DEBUG("About to flush %d bytes", size); - nStatus = ProcMgr_flushMemory((OMX_PTR) pBuffer, size, - (ProcMgr_ProcId) nTargetCoreId); - RPC_assert(nStatus >= 0, RPC_OMX_ErrorUndefined, - "Cache flush failed"); - - EXIT: - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_InvalidateBuffer - * @brief Used to flush buffers from cache to memory. Used when buffers are - * being transferred across processor boundaries. - * @param pBuffer : Pointer to the data that has to be flushed. - * size : Size of the data to be flushed. - * nTargetCoreId : Core to which buffer is being transferred. - * @return RPC_OMX_ErrorNone : Success. - * RPC_OMX_ErrorUndefined : Invalidate operation failed. - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_InvalidateBuffer(OMX_U8 * pBuffer, OMX_U32 size, - OMX_U32 nTargetCoreId) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S32 nStatus = 0; - DOMX_ENTER(""); - - DOMX_DEBUG("About to invalidate %d bytes", size); - nStatus = ProcMgr_invalidateMemory((OMX_PTR) pBuffer, size, - (ProcMgr_ProcId) nTargetCoreId); - RPC_assert(nStatus >= 0, RPC_OMX_ErrorUndefined, - "Cache invalidate failed"); - - EXIT: - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_Util_AcquireJobId - * @brief Used to get a new job id from syslink - all messages sent with the - * same job id will be processed serially. Messages with different job id - * will be processed parallely. - * @param hRPCCtx : RPC context handle. - * pJobId : Pointer to job id - this'll be filled in and returned. - * @return RPC_OMX_ErrorNone : Success. - * Any other : Operation failed. - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_Util_AcquireJobId(RPC_OMX_CONTEXT * hRPCCtx, - OMX_U16 * pJobId) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S32 nStatus = 0; - DOMX_ENTER(""); - - nStatus = - RcmClient_acquireJobId(hRPCCtx->ClientHndl[RCM_DEFAULT_CLIENT], - pJobId); - RPC_assert(nStatus >= 0, RPC_OMX_ErrorUndefined, - "Acquire job id failed"); - - EXIT: - DOMX_EXIT("eRPCError = %d", eRPCError); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_Util_ReleaseJobId - * @brief Used to release job id to syslink. Once release, this job id cannot be - * reused. - * @param hRPCCtx : RPC context handle. - * nJobId : Job ID to be released. - * @return RPC_OMX_ErrorNone : Success. - * Any other : Operation failed. - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_Util_ReleaseJobId(RPC_OMX_CONTEXT * hRPCCtx, - OMX_U16 nJobId) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - OMX_S32 nStatus = 0; - DOMX_ENTER(""); - - nStatus = - RcmClient_releaseJobId(hRPCCtx->ClientHndl[RCM_DEFAULT_CLIENT], - nJobId); - RPC_assert(nStatus >= 0, RPC_OMX_ErrorUndefined, - "Release job id failed"); - - EXIT: - DOMX_EXIT("eRPCError = %d", eRPCError); - return eRPCError; -} - - - -/* ===========================================================================*/ -/** - * @name RPC_Util_GetPoolId - * @brief Used to get pool id. Messages sent with same pool id will get - * processed at the same priority on remote core. - * @param hRPCCtx : RPC context handle. - * pPoolId : Pointer to pool id - this'll be filled in and - * returned. - * @return RPC_OMX_ErrorNone : Success. - * Any other : Operation failed. - */ -/* ===========================================================================*/ -RPC_OMX_ERRORTYPE RPC_Util_GetPoolId(RPC_OMX_CONTEXT * hRPCCtx, - OMX_U16 * pPoolId) -{ - RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; - DOMX_ENTER(""); - - *pPoolId = 0x8001; - -//EXIT: - DOMX_EXIT("eRPCError = %d", eRPCError); - return eRPCError; -} |