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