1c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* 2c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Copyright (c) 2010, Texas Instruments Incorporated 3c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * All rights reserved. 4c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 5c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * Redistribution and use in source and binary forms, with or without 6c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * modification, are permitted provided that the following conditions 7c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * are met: 8c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 9c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions of source code must retain the above copyright 10c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer. 11c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 12c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Redistributions in binary form must reproduce the above copyright 13c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * notice, this list of conditions and the following disclaimer in the 14c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * documentation and/or other materials provided with the distribution. 15c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 16c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * * Neither the name of Texas Instruments Incorporated nor the names of 17c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * its contributors may be used to endorse or promote products derived 18c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * from this software without specific prior written permission. 19c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 20c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 22c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 27c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 28c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 29c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 30c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 32c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 33c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 34c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @file omx_rpc_stub.c 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This file contains methods that provides the functionality for 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the OpenMAX1.1 DOMX Framework RPC Stub implementations. 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\src 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @rev 1.0 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*============================================================== 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================ 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 30-Apr-2010 Abhishek Ranka : Fixed GetExtension issue 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/ 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * INCLUDE FILES 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 55e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#include <errno.h> 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <string.h> 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <stdio.h> 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <unistd.h> 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc.h" 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc_utils.h" 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_proxy_common.h" 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc_stub.h" 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <OMX_TI_Common.h> 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_interfaces.h> 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <linux/rpmsg_omx.h> 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "rpmsg_omx_defs.h" 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * EXTERNS 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * MACROS - LOCAL 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//#define RPC_MSGPIPE_SIZE (4) 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_MSG_SIZE_FOR_PIPE (sizeof(OMX_PTR)) 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* When this is defined ETB/FTB calls are made in sync mode. Undefining will 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * result in these calls being sent via async mode. Sync mode leads to correct 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * functionality as per OMX spec but has a slight performance penalty. Async 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * mode sacrifices strict adherence to spec for some gain in performance. */ 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_SYNC_MODE 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_getPacket(nPacketSize, pPacket) do { \ 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPacket = TIMM_OSAL_Malloc(nPacketSize, TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); \ 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_assert(pPacket != NULL, RPC_OMX_ErrorInsufficientResources, \ 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Error Allocating RCM Message Frame"); \ 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memset(pPacket, 0, nPacketSize); \ 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_freePacket(pPacket) do { \ 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(pPacket != NULL) TIMM_OSAL_Free(pPacket); \ 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, nSize) do { \ 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status = write(hCtx->fd_omx, pPacket, nPacketSize); \ 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); \ 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPacket = NULL; \ 103e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if(status < 0 && errno == ENXIO) { \ 104e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_assert(0, RPC_OMX_ErrorHardware, "Write failed - Ducati in faulty state"); \ 105e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } \ 106e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if(status != (signed)nPacketSize) { \ 107e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_ERROR("Write failed returning status = 0x%x",status); \ 108e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_assert(0, RPC_OMX_ErrorUndefined, "Write failed"); \ 109e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } \ 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eError = TIMM_OSAL_ReadFromPipe(hCtx->pMsgPipe[nFxnIdx], &pRetPacket, \ 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_MSG_SIZE_FOR_PIPE, (TIMM_OSAL_U32 *)(&nSize), TIMM_OSAL_SUSPEND); \ 112c925a3ba719d6d8c92685bc4efcedd12f31d5288Devaraj Rangasamy RPC_assert(eError == TIMM_OSAL_ERR_NONE, eError, \ 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Read failed"); \ 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*Set bit 31 on fxn idx as it is static function*/ 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize) do { \ 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket = (struct omx_packet *)pPacket; \ 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pData = pOmxPacket->data; \ 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->desc |= OMX_DESC_MSG << OMX_DESC_TYPE_SHIFT; \ 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->msg_id = 0; \ 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->flags = OMX_POOLID_JOBID_DEFAULT; \ 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->fxn_idx = (nFxnIdx | 0x80000000); \ 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->result = 0; \ 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pOmxPacket->data_size = nPacketSize; \ 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev//Async to be checked later - most probably same as sync but without the read 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#if 0 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_sendPacket_async(HRCM, pPacket, nFxnIdx) do { \ 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPacket->nFxnIdx = nFxnIdx; \ 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status = RcmClient_execCmd(HRCM, pPacket); \ 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(status < 0) { \ 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(HRCM, pPacket); \ 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPacket = NULL; \ 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_assert(0, RPC_OMX_RCM_ErrorExecFail, \ 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "RcmClient_exec failed"); \ 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } \ 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_checkAsyncErrors(rcmHndl, pPacket) do { \ 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev status = RcmClient_checkForError(rcmHndl, &pPacket); \ 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(status < 0) { \ 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(rcmHndl, pPacket); \ 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPacket = NULL; \ 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } \ 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_assert(status >= 0, RPC_OMX_RCM_ClientFail, \ 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev "Async error check returned error"); \ 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetHandle() 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetHandle 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [OUT] : The RPC context handle. 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param cComponentName [IN] : Name of the component that is to be created 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * on Remote core. 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pAppData [IN] : The AppData passed by the user. 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCallBacks [IN] : The callback pointers passed by the caller. 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : This is return value returned by the remote 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * component. 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetHandle(OMX_HANDLETYPE hRPCCtx, 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING cComponentName, OMX_PTR pAppData, 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_CALLBACKTYPE * pCallBacks, OMX_ERRORTYPE * eCompReturn) 170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = NULL; 179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hActualComp = NULL; 180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("RPC_GetHandle: Recieved GetHandle request from %s", 186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cComponentName); 187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_HANDLE; 189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Packing data"); 193c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 194c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 195c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 197c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, cComponentName, 199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_MAX_STRINGNAME_SIZE); 200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pAppData, OMX_PTR); 201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Sending data"); 203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, hComp, OMX_HANDLETYPE); 212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Remote Handle 0x%x", hComp); 213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hCtx->hRemoteHandle = hComp; 214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* The handle received above is used for all communications 215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev with the remote component but is not the actual component 216c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev handle (it is actually the rpc context handle which 217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev contains lot of other info). The handle recd. below is the 218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev actual remote component handle. This is used at present for 219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev mark buffer implementation since in that case it is not 220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev feasible to send the context handle */ 221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, hActualComp, 222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE); 223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Actual Remote Comp Handle 0x%x", hActualComp); 224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hCtx->hActualRemoteCompHandle = hActualComp; 225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Save context information */ 228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev hCtx->pAppData = pAppData; 229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 233e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_FreeHandle() 245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_FreeHandle 246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_FreeHandle(OMX_HANDLETYPE hRPCCtx, 252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_FREE_HANDLE; 268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 286e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_SetParameter() 299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_SetParameter 300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nParamIndex [IN] : Same as nParamIndex received at the proxy. 302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCompParam [IN] : Same as pCompParam recieved at the proxy. 303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_SetParameter(OMX_HANDLETYPE hRPCCtx, 308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INDEXTYPE nParamIndex, OMX_PTR pCompParam, 309e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_PTR pLocBufNeedMap, OMX_U32 nNumOfLocalBuf, OMX_ERRORTYPE * eCompReturn) 310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 structSize = 0; 322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 324c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_SET_PARAMETER; 325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompParam) >= 0 ) { 329e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (nNumOfLocalBuf == 1) { 330e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, 331e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_MAP_INFO_TYPE); 332e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 333e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen else if (nNumOfLocalBuf == 2) { 334e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_TWO_BUF, 335e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_MAP_INFO_TYPE); 336e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen } 337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = (pLocBufNeedMap - pCompParam) + 338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); 340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nParamIndex, OMX_INDEXTYPE); 350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = RPC_UTIL_GETSTRUCTSIZE(pCompParam); 351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCompParam, structSize); 352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 361e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetParameter() 373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetParameter 374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nParamIndex [IN] : Same as nParamIndex received at the proxy. 376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCompParam [IN] : Same as pCompParam recieved at the proxy. 377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetParameter(OMX_HANDLETYPE hRPCCtx, 382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INDEXTYPE nParamIndex, OMX_PTR pCompParam, 383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) 384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nDataOffset = 0, nOffset = 0; 392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 structSize = 0; 396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_PARAMETER; 401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 403c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompParam) >= 0 ) { 405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, 406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = (pLocBufNeedMap - pCompParam) + 408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); 410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nParamIndex, OMX_INDEXTYPE); 420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nDataOffset = nPos; 421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = RPC_UTIL_GETSTRUCTSIZE(pCompParam); 422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCompParam, structSize); 423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*pCompParam is returned in the same location in which it was sent */ 433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYGEN(pRetData, nDataOffset, pCompParam, 434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize); 435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 440e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //In case of Error Hardware this packet gets freed in omx_rpc.c 441e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 443c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 445c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 446c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 447c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 448c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 449c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 450c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 451c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 452c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_SetConfig() 453c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_SetConfig 454c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 455c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nConfigIndex [IN] : Same as nConfigIndex received at the proxy. 456c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCompConfig [IN] : Same as pCompConfig recieved at the proxy. 457c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 458c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 459c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 460c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 461c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_SetConfig(OMX_HANDLETYPE hRPCCtx, 462c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INDEXTYPE nConfigIndex, OMX_PTR pCompConfig, 463c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) 464c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 465c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 466c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 467c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 468c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 469c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 470c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 471c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 472c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 473c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 474c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 structSize = 0; 475c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 476c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 477c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 478c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 479c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_SET_CONFIG; 480c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 481c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 482c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 483c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompConfig) >= 0 ) { 484c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, 485c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 486c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = (pLocBufNeedMap - pCompConfig) + 487c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 488c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); 489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 490c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 491c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 492c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 493c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 494c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 495c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 496c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 497c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 498c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nConfigIndex, OMX_INDEXTYPE); 499c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = RPC_UTIL_GETSTRUCTSIZE(pCompConfig); 500c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCompConfig, structSize); 501c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 502c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 503c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 504c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 505c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 506c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 507c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 508c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 509e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 510c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 511c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 512c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 513c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 514c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 515c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 516c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 517c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 518c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetConfig() 519c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetConfig 520c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 521c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nConfigIndex [IN] : Same as nConfigIndex received at the proxy. 522c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCompConfig [IN] : Same as pCompConfig recieved at the proxy. 523c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 524c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 525c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 526c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 527c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetConfig(OMX_HANDLETYPE hRPCCtx, 528c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INDEXTYPE nConfigIndex, OMX_PTR pCompConfig, 529c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pLocBufNeedMap, OMX_ERRORTYPE * eCompReturn) 530c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 531c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 532c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 533c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 534c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 535c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 536c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 537c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0, nDataOffset = 0; 538c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 539c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 540c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 541c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 structSize = 0; 542c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 543c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 544c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 545c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 546c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_CONFIG; 547c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 548c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 549c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 550c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pLocBufNeedMap != NULL && (pLocBufNeedMap - pCompConfig) >= 0 ) { 551c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, 552c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 553c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = (pLocBufNeedMap - pCompConfig) + 554c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 555c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_INDEXTYPE); 556c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else { 557c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 558c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 559c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 560c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 561c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 562c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 563c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 564c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 565c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nConfigIndex, OMX_INDEXTYPE); 566c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nDataOffset = nPos; 567c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = RPC_UTIL_GETSTRUCTSIZE(pCompConfig); 568c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCompConfig, structSize); 569c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 570c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 571c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 572c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 573c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 574c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 575c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == RPC_OMX_ErrorNone) 576c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 577c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 578c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*pCompParam is returned in the same location in which it was sent */ 579c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYGEN(pRetData, nDataOffset, pCompConfig, 580c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize); 581c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 582c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 583c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 584c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 585c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 586e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 587c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 588c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 589c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 590c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 591c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 592c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 593c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 594c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 595c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 596c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 597c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_SendCommand() 598c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_SendCommand 599c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 600c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCmd [IN] : Same as eCmd received at the proxy. 601c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nParam [IN] : Same as nParam recieved at the proxy. 602c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pCmdData [IN] : Same as pCmdData recieved at the proxy. 603c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 604c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 605c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 606c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 607c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_SendCommand(OMX_HANDLETYPE hRPCCtx, 608c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_COMMANDTYPE eCmd, OMX_U32 nParam, OMX_PTR pCmdData, 609c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 610c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 611c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 612c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 613c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 614c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 615c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 616c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 617c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 618c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 619c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 620c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 structSize = 0; 621c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 622c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 623c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 624c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 625c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_SEND_CMD; 626c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 627c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 628c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 629c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 630c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 631c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 632c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 633c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 634c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 635c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, eCmd, OMX_COMMANDTYPE); 636c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nParam, OMX_U32); 637c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 638c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pCmdData != NULL && eCmd == OMX_CommandMarkBuffer) 639c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 640c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*The RPC_UTIL_GETSTRUCTSIZE will not work here since OMX_MARKTYPE structure 641c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev does not have nSize field */ 642c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = sizeof(OMX_MARKTYPE); 643c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCmdData, structSize); 644c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else if (pCmdData != NULL) 645c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 646c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev structSize = RPC_UTIL_GETSTRUCTSIZE(pCmdData); 647c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, pCmdData, structSize); 648c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 649c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 650c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 651c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 652c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 653c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 654c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 655c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 656c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 657c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 658e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 659c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 660c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 661c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 662c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 663c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 664c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 665c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 666c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 667c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 668c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 669c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetState() 670c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetState 671c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 672c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pState [OUT] : State variable, to be filled in and returned by 673c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the remote component.. 674c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 675c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 676c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 677c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 678c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetState(OMX_HANDLETYPE hRPCCtx, OMX_STATETYPE * pState, 679c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 680c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 681c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 682c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 683c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 684c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 685c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 686c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 687c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 688c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 689c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 690c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 691c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 692c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 693c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 694c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 695c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_STATE; 696c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 697c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 698c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 699c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 700c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 701c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 702c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 703c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 704c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 705c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 706c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 707c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 708c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 709c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 710c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 711c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 712c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 713c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 714c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, pState, OMX_STATETYPE); 715c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 716c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 717c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 718c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 719c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 720e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 721c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 722c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 723c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 724c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 725c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 726c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 727c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 728c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 729c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 730c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 731c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetComponentVersion() 732c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetComponentVersion 733c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 734c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pComponentName [OUT] : Component name, to be filled in and returned 735c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * by the remote component. 736c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pComponentVersion [OUT] : Component version info, to be filled in and 737c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * returned by the remote component. 738c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pSpecVersion [OUT] : Spec version info, to be filled in and 739c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * returned by the remote component. 740c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pComponentUUID [OUT] : Component UUID info, to be filled in and 741c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * returned by the remote component (optional). 742c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote 743c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * component. 744c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 745c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 746c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 747c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetComponentVersion(OMX_HANDLETYPE hRPCCtx, 748c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING pComponentName, OMX_VERSIONTYPE * pComponentVersion, 749c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VERSIONTYPE * pSpecVersion, OMX_UUIDTYPE * pComponentUUID, 750c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 751c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 752c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 753c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 754c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 755c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 756c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 757c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 758c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 759c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 760c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 761c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 762c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 763c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 764c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 765c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 766c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_VERSION; 767c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 768c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 769c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 770c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 771c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 772c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 773c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 774c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 775c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 776c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 777c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 778c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 779c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 780c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 781c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 782c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 783c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 784c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 785c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYGEN(pRetData, nPos, pComponentName, 786c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_MAX_STRINGNAME_SIZE); 787c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, pComponentVersion, 788c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VERSIONTYPE); 789c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, pSpecVersion, 790c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VERSIONTYPE); 791e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen memcpy(pComponentUUID,(OMX_UUIDTYPE *)( (OMX_U32)pRetData + nPos), sizeof(OMX_UUIDTYPE)); 792c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 793c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 794c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 795c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 796c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 797e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 798c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 799c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 800c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 801c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 802c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 803c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 804c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 805c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 806c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 807c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_GetExtensionIndex() 808c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_GetExtensionIndex 809c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hRPCCtx [IN] : The RPC context handle. 810c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param cParameterName [IN] : The parameter name sent by the user. 811c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pIndexType [OUT] : Index type returned by the remote component. 812c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn [OUT] : Return value returned by the remote component. 813c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 814c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 815c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 816c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_GetExtensionIndex(OMX_HANDLETYPE hRPCCtx, 817c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_STRING cParameterName, OMX_INDEXTYPE * pIndexType, 818c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 819c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 820c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 821c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 822c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 823c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 824c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 825c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 826c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 827c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 828c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 829c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 830c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 831c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 832c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 833c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_GET_EXT_INDEX; 834c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 835c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 836c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 837c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 838c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 839c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 840c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 841c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 842c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 843c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 844c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDCOPYGEN(pData, nPos, cParameterName, 845c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_MAX_STRINGNAME_SIZE); 846c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 847c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 848c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 849c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 850c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 851c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 852c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 853c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 854c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 855c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, pIndexType, 856c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INDEXTYPE); 857c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 858c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 859c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 860c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 861c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 862e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 863c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 864c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 865c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 866c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 867c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 868c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 869c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ***************************** DATA APIs ******************************** */ 870c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 871c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 872c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 873c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_AllocateBuffer() 874c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_AllcateBuffer() 875c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) 876c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param *data : Pointer to the RCM message/buffer received 877c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 878c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 879c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 880c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 881c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 882c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_AllocateBuffer(OMX_HANDLETYPE hRPCCtx, 883c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_IN OMX_U32 nPortIndex, 884c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 * pBufHeaderRemote, OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, 885c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 886c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 887c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 888c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 889c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 890c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 891c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 892c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 893c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 894c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 895c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 896c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 897c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL; 898c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE *pBufferHdr = *ppBufferHdr; 899c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 900c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 901c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 902c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 903c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_ALLOCATE_BUFFER; 904c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 905c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 906c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 907c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 908c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 909c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 910c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 911c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 912c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 913c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); 914c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pAppPrivate, OMX_PTR); 915c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nSizeBytes, OMX_U32); 916c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 917c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 918c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 919c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 920c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 921c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 922c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 923c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 924c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 925c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, *pBufHeaderRemote, OMX_U32); 926c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //save platform private before overwriting 927c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPlatformPrivate = (*ppBufferHdr)->pPlatformPrivate; 928c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //RPC_GETFIELDCOPYTYPE(pData, nPos, pBufferHdr, OMX_BUFFERHEADERTYPE); 929c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Copying each field of the header separately due to padding issues in 930c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev the buffer header structure */ 931c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nSize, OMX_U32); 932c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nVersion, 933c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VERSIONTYPE); 934c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pBuffer, 935c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U8 *); 936c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nAllocLen, 937c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 938c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFilledLen, 939c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 940c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nOffset, 941c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 942c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pAppPrivate, 943c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR); 944c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 945c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pPlatformPrivate, OMX_PTR); 946c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 947c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pInputPortPrivate, OMX_PTR); 948c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 949c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pOutputPortPrivate, OMX_PTR); 950c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 951c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->hMarkTargetComponent, OMX_HANDLETYPE); 952c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pMarkData, 953c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR); 954c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTickCount, 955c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 956c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTimeStamp, 957c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TICKS); 958c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFlags, 959c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 960c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 961c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nInputPortIndex, OMX_U32); 962c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 963c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nOutputPortIndex, OMX_U32); 964c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 965c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (*ppBufferHdr)->pPlatformPrivate = pPlatformPrivate; 966c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 967c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef TILER_BUFF 968c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" Copying plat pvt. "); 969c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //if (offset != 0) 970c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 971c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, 972c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_PLATFORMPRIVATE 973c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *) ((*ppBufferHdr)->pPlatformPrivate), 974c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PLATFORMPRIVATE); 975c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Done copying plat pvt., aux buf = 0x%x", 976c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE 977c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *) ((*ppBufferHdr)->pPlatformPrivate))-> 978c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pAuxBuf1); 979c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 980c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 981c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 982c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } else 983c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 984c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //DOMX_DEBUG("OMX Error received: 0x%x", 985c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev // pRPCMsg->msgHeader.nOMXReturn); 986c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 987c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 988c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 989c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 990c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 991e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 992c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 993c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 994c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 995c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 996c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 997c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 998c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 999c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 1000c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_UseBuffer() 1001c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_AllcateBuffer() 1002c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param hComp: This is the handle on the Remote core, the proxy will replace 1003c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev it's handle with actual OMX Component handle that recides on the specified core 1004c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param ppBufferHdr: 1005c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param nPortIndex: 1006c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param pAppPrivate: 1007c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param eCompReturn: This is return value that will be supplied by Proxy to the caller. 1008c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This is actual return value returned by the Remote component 1009c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 1010c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 1011c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 1012c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1013c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1014c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_UseBuffer(OMX_HANDLETYPE hRPCCtx, 1015c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_INOUT OMX_BUFFERHEADERTYPE ** ppBufferHdr, OMX_U32 nPortIndex, 1016c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pAppPrivate, OMX_U32 nSizeBytes, OMX_U8 * pBuffer, 1017c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 * pBufHeaderRemote, OMX_ERRORTYPE * eCompReturn) 1018c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1019c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1020c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 1021c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 1022c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = 1023c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev NULL, pRetData = NULL; 1024c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 1025c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 1026c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 1027c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 1028c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 1029c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 1030c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TI_PLATFORMPRIVATE *pPlatformPrivate = NULL; 1031c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE *pBufferHdr = *ppBufferHdr; 1032c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 1033c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE eMapInfo = RPC_OMX_MAP_INFO_NONE; 1034c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR pMetaDataBuffer = NULL; 1035c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 a =32; 1036c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1037c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 1038c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1039c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_USE_BUFFER; 1040c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 1041c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 1042c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1043c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Marshaling data"); 1044c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Buffer mapping required */ 1045c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eMapInfo = RPC_OMX_MAP_INFO_ONE_BUF; 1046c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)-> 1047c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pAuxBuf1 != NULL) 1048c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eMapInfo = RPC_OMX_MAP_INFO_TWO_BUF; 1049c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)-> 1050c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pMetaDataBuffer != NULL) 1051c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eMapInfo = RPC_OMX_MAP_INFO_THREE_BUF; 1052c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1053c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Offset is the location of the buffer pointer from the start of the data packet */ 1054c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = 1055c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 1056c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_U32) + sizeof(OMX_PTR) + 1057c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_U32); 1058c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, eMapInfo, RPC_OMX_MAP_INFO_TYPE); 1059c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 1060c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1061c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 1062c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); 1063c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pAppPrivate, OMX_PTR); 1064c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nSizeBytes, OMX_U32); 1065c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1066c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBuffer, OMX_U32); 1067c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("eMapInfo = %x",eMapInfo); 1068c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eMapInfo >= RPC_OMX_MAP_INFO_TWO_BUF) 1069c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1070c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, 1071c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr-> 1072c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPlatformPrivate)->pAuxBuf1, OMX_U32); 1073c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("UV buffer fd= %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)->pAuxBuf1); 1074c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1075c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1076c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eMapInfo >= RPC_OMX_MAP_INFO_THREE_BUF) 1077c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1078c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, 1079c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr-> 1080c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPlatformPrivate)->pMetaDataBuffer, OMX_U32); 1081c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Metadata buffer = %d",((OMX_TI_PLATFORMPRIVATE *)pBufferHdr->pPlatformPrivate)->pMetaDataBuffer); 1082c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1083c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1084c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("About to send packet"); 1085c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 1086c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 1087c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG("Remote call returned"); 1088c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1089c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 1090c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1091c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (*eCompReturn == OMX_ErrorNone) 1092c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1093c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pRetData = ((struct omx_packet *) pRetPacket)->data; 1094c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, *pBufHeaderRemote, OMX_U32); 1095c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //save platform private before overwriting 1096c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPlatformPrivate = (*ppBufferHdr)->pPlatformPrivate; 1097c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1098c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Copying each field of the header separately due to padding issues in 1099c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev the buffer header structure */ 1100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nSize, OMX_U32); 1101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nVersion, 1102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_VERSIONTYPE); 1103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* 1104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev Do not expect buffer pointer - local buffer pointer is already 1105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev present in the local header. 1106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pBuffer, 1107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U8 *); 1108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nAllocLen, 1110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 1111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFilledLen, 1112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 1113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nOffset, 1114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 1115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pAppPrivate, 1116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR); 1117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Do not expect PlatformPrivate from Ducati 1118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //RPC_GETFIELDVALUE(pRetData, nPos,pBufferHdr->pPlatformPrivate, OMX_PTR); 1119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 1120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pInputPortPrivate, OMX_PTR); 1121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 1122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->pOutputPortPrivate, OMX_PTR); 1123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 1124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->hMarkTargetComponent, OMX_HANDLETYPE); 1125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->pMarkData, 1126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_PTR); 1127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTickCount, 1128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 1129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nTimeStamp, 1130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_TICKS); 1131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, pBufferHdr->nFlags, 1132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32); 1133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 1134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nInputPortIndex, OMX_U32); 1135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDVALUE(pRetData, nPos, 1136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nOutputPortIndex, OMX_U32); 1137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev //Do not expect PlatformPrivate from Ducati 1139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* 1140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (*ppBufferHdr)->pPlatformPrivate = pPlatformPrivate; 1141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" Copying plat pvt. "); 1143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_GETFIELDCOPYTYPE(pRetData, nPos, 1144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_TI_PLATFORMPRIVATE *) ((*ppBufferHdr)-> 1145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pPlatformPrivate), OMX_TI_PLATFORMPRIVATE);*/ 1146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Resetting size as it might be diff on Ducati due to padding issues */ 1148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE); 1149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 1152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 1153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 1154e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 1155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 1156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 1158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 1159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 1163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_FreeBuffer() 1164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_AllcateBuffer() 1165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) 1166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param *data : Pointer to the RCM message/buffer received 1167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 1168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 1169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 1170c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1171c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1172c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_FreeBuffer(OMX_HANDLETYPE hRPCCtx, 1173c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_IN OMX_U32 nPortIndex, OMX_IN OMX_U32 BufHdrRemote, OMX_U32 pBuffer, 1174c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 1175c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1176c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 1177c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 1178c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 1179c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 1180c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 1181c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 1182c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 1183c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 1184c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 1185c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 1186c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1187c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 1188c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1189c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_FREE_BUFFER; 1190c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 1191c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 1192c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1193e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /*Offset is the location of the buffer pointer from the start of the data packet */ 1194e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen nOffset = sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 1195e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen sizeof(OMX_HANDLETYPE) + sizeof(OMX_U32) + sizeof(OMX_U32); 1196c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 1197e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_ONE_BUF, 1198c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 1199c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 1200c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1201c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 1202c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nPortIndex, OMX_U32); 1203c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, BufHdrRemote, OMX_U32); 1204c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /* Buffer is being sent separately only to catch NULL buffer errors 1205c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev in PA mode */ 1206c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBuffer, OMX_U32); 1207c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1208c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 1209c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 1210c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1211c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 1212c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1213c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 1214c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 1215c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 1216e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 1217c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 1218c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1219c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 1220c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 1221c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1222c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1223c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1224c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1225c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 1226c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_EmptyThisBuffer() 1227c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 1228c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) 1229c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param *data : Pointer to the RCM message/buffer received 1230c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 1231c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 1232c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 1233c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1234c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1235c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1236c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_EmptyThisBuffer(OMX_HANDLETYPE hRPCCtx, 1237c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBufferHdr, OMX_U32 BufHdrRemote, 1238c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn, OMX_BOOL bMapBuffer) 1239c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1240c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 1241c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 1242c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 1243c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 1244c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 1245c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 1246c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 1247c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 1248c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U8 *pAuxBuf1 = NULL; 1249c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 1250c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE eMapInfo = RPC_OMX_MAP_INFO_NONE; 1251c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef RPC_SYNC_MODE 1252c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 1253c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1254c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1255c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 1256c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1257c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_EMPTYTHISBUFFER; 1258c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 1259c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 1260c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1261c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(bMapBuffer == OMX_TRUE) 1262c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1263c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev pAuxBuf1 = ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1; 1264c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Buffer mapping required */ 1265c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1 == NULL) 1266c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eMapInfo = RPC_OMX_MAP_INFO_ONE_BUF; 1267c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else 1268c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev eMapInfo = RPC_OMX_MAP_INFO_TWO_BUF; 1269c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*Offset is the location of the buffer pointer from the start of the data packet */ 1270c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nOffset = 1271c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(RPC_OMX_MAP_INFO_TYPE) + sizeof(OMX_U32) + 1272c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_HANDLETYPE) + sizeof(OMX_BUFFERHEADERTYPE *) + 3*sizeof(OMX_U32) + 1273c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev sizeof(OMX_TICKS) + sizeof(OMX_HANDLETYPE) + sizeof(OMX_PTR) + 3*sizeof(OMX_U32); 1274c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1275c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1276c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, eMapInfo, RPC_OMX_MAP_INFO_TYPE); 1277c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1278c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 1279c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1280c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 1281c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, 1282c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_BUFFERHEADERTYPE *) BufHdrRemote, OMX_BUFFERHEADERTYPE *); 1283c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1284c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFilledLen, OMX_U32); 1285c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOffset, OMX_U32); 1286c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFlags, OMX_U32); 1287c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nTimeStamp, OMX_TICKS); 1288c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->hMarkTargetComponent, 1289c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE); 1290c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->pMarkData, OMX_PTR); 1291c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nAllocLen, OMX_U32); 1292c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOutputPortIndex, OMX_U32); 1293c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nInputPortIndex, OMX_U32); 1294c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1295c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(bMapBuffer == OMX_TRUE) 1296c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1297c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->pBuffer, OMX_U32); 1298c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (eMapInfo == RPC_OMX_MAP_INFO_TWO_BUF) 1299c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev { 1300c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, 1301c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ((OMX_TI_PLATFORMPRIVATE *) pBufferHdr->pPlatformPrivate)->pAuxBuf1, OMX_U32); 1302c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1303c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } 1304c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1305c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" pBufferHdr = %x BufHdrRemote %x", pBufferHdr, 1306c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BufHdrRemote); 1307c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1308c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef RPC_SYNC_MODE 1309c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 1310c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 1311c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1312c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 1313c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 1314c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_async(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, 1315c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx); 1316c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_checkAsyncErrors(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket); 1317c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1318c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = OMX_ErrorNone; 1319c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1320c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1321c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 1322c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 1323c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 1324e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 1325c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 1326c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1327c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 1328c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 1329c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1330c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1331c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1332c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1333c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 1334c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name RPC_FillThisBuffer() 1335c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief Remote invocation stub for OMX_AllcateBuffer() 1336c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param size : Size of the incoming RCM message (parameter used in the RCM alloc call) 1337c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param *data : Pointer to the RCM message/buffer received 1338c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return RPC_OMX_ErrorNone = Successful 1339c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @sa TBD 1340c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 1341c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1342c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1343c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_FillThisBuffer(OMX_HANDLETYPE hRPCCtx, 1344c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBufferHdr, OMX_U32 BufHdrRemote, 1345c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_ERRORTYPE * eCompReturn) 1346c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1347c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 1348c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 1349c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPacketSize = RPC_PACKET_SIZE; 1350c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_FXN_IDX_TYPE nFxnIdx; 1351c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 1352c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_S32 status = 0; 1353c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_CONTEXT *hCtx = hRPCCtx; 1354c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 1355c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U8 *pAuxBuf1 = NULL; 1356c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev struct omx_packet *pOmxPacket = NULL; 1357c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef RPC_SYNC_MODE 1358c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 1359c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1360c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1361c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_ENTER(""); 1362c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1363c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx = RPC_OMX_FXN_IDX_FILLTHISBUFFER; 1364c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_getPacket(nPacketSize, pPacket); 1365c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 1366c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1367c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev /*No buffer mapping required */ 1368c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, 1369c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_MAP_INFO_TYPE); 1370c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, nOffset, OMX_U32); 1371c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1372c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 1373c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, 1374c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev (OMX_BUFFERHEADERTYPE *) BufHdrRemote, OMX_BUFFERHEADERTYPE *); 1375c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1376c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFilledLen, OMX_U32); 1377c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOffset, OMX_U32); 1378c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nFlags, OMX_U32); 1379c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nAllocLen, OMX_U32); 1380c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nOutputPortIndex, OMX_U32); 1381c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_SETFIELDVALUE(pData, nPos, pBufferHdr->nInputPortIndex, OMX_U32); 1382c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1383c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_DEBUG(" pBufferHdr = %x BufHdrRemote %x", pBufferHdr, 1384c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev BufHdrRemote); 1385c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1386c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef RPC_SYNC_MODE 1387c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 1388c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nSize); 1389c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1390c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 1391c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1392c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#else 1393c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_sendPacket_async(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket, 1394c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev nFxnIdx); 1395c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_checkAsyncErrors(hCtx->ClientHndl[RCM_DEFAULT_CLIENT], pPacket); 1396c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1397c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *eCompReturn = OMX_ErrorNone; 1398c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 1399c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1400c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev EXIT: 1401c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (pPacket) 1402c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pPacket); 1403e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket && *eCompReturn != OMX_ErrorHardware) 1404c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_freePacket(pRetPacket); 1405c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1406c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev DOMX_EXIT(""); 1407c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return eRPCError; 1408c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1409c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1410c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1411c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ***************************** EMPTY APIs ******************************** */ 1412c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1413c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1414c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/** 1415c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @name EMPTY-STUB 1416c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @brief 1417c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @param 1418c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @return 1419c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 1420c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 1421c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ===========================================================================*/ 1422c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_EventHandler(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, 1423c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_EVENTTYPE eEvent, OMX_U32 nData1, OMX_U32 nData2, OMX_PTR pEventData) 1424c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1425c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return RPC_OMX_ErrorNone; 1426c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1427c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1428c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_EmptyBufferDone(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, 1429c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBuffer) 1430c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1431c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return RPC_OMX_ErrorNone; 1432c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1433c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1434c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevOMX_ERRORTYPE RPC_FillBufferDone(OMX_HANDLETYPE hRPCCtx, OMX_PTR pAppData, 1435c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_BUFFERHEADERTYPE * pBuffer) 1436c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1437c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev return RPC_OMX_ErrorNone; 1438c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1439c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 1440c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevRPC_OMX_ERRORTYPE RPC_ComponentTunnelRequest(OMX_HANDLETYPE hRPCCtx, 1441e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_IN OMX_U32 nPort, OMX_HANDLETYPE hTunneledRemoteHandle, 1442c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nTunneledPort, OMX_INOUT OMX_TUNNELSETUPTYPE * pTunnelSetup, 1443e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_ERRORTYPE * eCompReturn) 1444c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 1445e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_ERRORTYPE eRPCError = RPC_OMX_ErrorNone; 1446e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TIMM_OSAL_ERRORTYPE eError = TIMM_OSAL_ERR_NONE; 1447e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 nPacketSize = RPC_PACKET_SIZE; 1448e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_CONTEXT *hCtx = hRPCCtx; 1449e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_HANDLETYPE hComp = hCtx->hRemoteHandle; 1450e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_CONTEXT *hTunneledCtx = hTunneledRemoteHandle; 1451e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_HANDLETYPE hTunneledComp = hTunneledCtx->hRemoteHandle; 1452e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_OMX_FXN_IDX_TYPE nFxnIdx; 1453e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen struct omx_packet *pOmxPacket = NULL; 1454e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_U32 nPos = 0, nSize = 0, nOffset = 0; 1455e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen OMX_S32 status = 0; 1456e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#ifdef RPC_SYNC_MODE 1457e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen TIMM_OSAL_PTR pPacket = NULL, pRetPacket = NULL, pData = NULL; 1458e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen#endif 1459e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1460e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen printf(" Entering rpc:domx_stub.c:ComponentTunnelRequest\n"); 1461e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1462e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen nFxnIdx = RPC_OMX_FXN_IDX_COMP_TUNNEL_REQUEST; 1463e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_getPacket(nPacketSize, pPacket); 1464e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_initPacket(pPacket, pOmxPacket, pData, nFxnIdx, nPacketSize); 1465e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1466e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen /*Pack the values into a packet*/ 1467e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen //Marshalled:[>ParentComp|>ParentPort|>TunnelComp|>TunneledPort>TunnelSetup] 1468e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, RPC_OMX_MAP_INFO_NONE, RPC_OMX_MAP_INFO_TYPE); 1469e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, hComp, OMX_HANDLETYPE); 1470e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, nPort, OMX_U32); 1471e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, hTunneledComp, OMX_HANDLETYPE); 1472e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_SETFIELDVALUE(pData, nPos, nTunneledPort, OMX_U32); 1473e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen printf("\n after RPC_sendPacket_sync"); 1474e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_sendPacket_sync(hCtx, pPacket, nPacketSize, nFxnIdx, pRetPacket, 1475e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen nSize); 1476e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1477e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen printf("\n after RPC_sendPacket_sync: *eCompReturn : 0x%x\n", (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result)); 1478e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen *eCompReturn = (OMX_ERRORTYPE) (((struct omx_packet *) pRetPacket)->result); 1479e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1480e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen EXIT: 1481e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pPacket) 1482e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_freePacket(pPacket); 1483e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen if (pRetPacket) 1484e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen RPC_freePacket(pRetPacket); 1485e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1486e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen DOMX_EXIT(""); 1487e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen return eRPCError; 1488e4b5eb97c1ebb41905d9acb8cf1c0992688152e9Mike J. Chen 1489c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 1490