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