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_utils.h 35c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * This file contains methods that provides the functionality for 36c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * the OpenMAX1.1 DOMX Framework RPC. 37c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 38c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @path \WTSD_DucatiMMSW\framework\domx\omx_rpc\inc 39c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * 40c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * @rev 1.0 41c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev */ 42c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 43c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/*============================================================== 44c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! Revision History 45c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! ============================ 46c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 29-Mar-2010 Abhishek Ranka : Revamped DOMX implementation 47c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 48c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *! 19-August-2009 B Ravi Kiran ravi.kiran@ti.com: Initial Version 49c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *================================================================*/ 50c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 51c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifndef OMX_RPC_UTILSH 52c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define OMX_RPC_UTILSH 53c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 54c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef __cplusplus 55c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchevextern "C" 56c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev{ 57c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif /* __cplusplus */ 58c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 59c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 60c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * INCLUDE FILES 61c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 62c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc.h" 63c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include "omx_rpc_internal.h" 64c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 65c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#include <timm_osal_trace.h> 66c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 67c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_ERROR(fmt,...) TIMM_OSAL_Error(fmt, ##__VA_ARGS__) 68c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_WARN(fmt,...) TIMM_OSAL_Warning(fmt, ##__VA_ARGS__) 69c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_INFO(fmt,...) TIMM_OSAL_Info(fmt, ##__VA_ARGS__) 70c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_DEBUG(fmt,...) TIMM_OSAL_Debug(fmt, ##__VA_ARGS__) 71c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_ENTER(fmt,...) TIMM_OSAL_Entering(fmt, ##__VA_ARGS__) 72c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define DOMX_EXIT(fmt,...) TIMM_OSAL_Exiting(fmt, ##__VA_ARGS__) 73c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 74c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 75c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 76c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * MACROS - ASSERTS 77c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 78c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_assert RPC_paramCheck 79c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_require RPC_paramCheck 80c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_ensure RPC_paramCheck 81c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 82c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_paramCheck(C, V, S) do { \ 83c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if (!(C)) { eRPCError = V;\ 84c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev if(S) DOMX_ERROR("failed check:" #C" - returning error: 0x%x - %s",V,S);\ 85c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev else DOMX_ERROR("failed check: %s - returning error: 0x%x",C, V); \ 86c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev goto EXIT; } \ 87c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 88c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 89c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/* ************************* OFFSET DEFINES ******************************** */ 90c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define GET_PARAM_DATA_OFFSET (sizeof(RPC_OMX_HANDLE) + sizeof(OMX_INDEXTYPE) + sizeof(OMX_U32) /*4 bytes for offset*/ ) 91c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define USE_BUFFER_DATA_OFFSET (sizeof(OMX_U32)*5) 92c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 93c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 94c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * MACROS 95c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 96c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_UTIL_GETSTRUCTSIZE(PTR) *((OMX_U32*)PTR) 97c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 98c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 99c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * MACROS - COMMON MARSHALLING UTILITIES 100c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 101c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_SETFIELDVALUE(MSGBODY, POS, VALUE, TYPE) do { \ 102c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *((TYPE *) ((OMX_U32)MSGBODY+POS)) = VALUE; \ 103c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 104c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 105c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 106c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_SETFIELDOFFSET(MSGBODY, POS, OFFSET, TYPE) do { \ 107c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *((TYPE *) ((OMX_U32)MSGBODY+POS)) = OFFSET; \ 108c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 109c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 110c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 111c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_SETFIELDCOPYGEN(MSGBODY, POS, PTR, SIZE) do { \ 112c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memcpy((OMX_U8*)((OMX_U32)MSGBODY+POS), PTR, SIZE); \ 113c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += SIZE; \ 114c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while (0) 115c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 116c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_SETFIELDCOPYTYPE(MSGBODY, POS, PSTRUCT, TYPE) do { \ 117c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *((TYPE *)((OMX_U32)MSGBODY+POS)) = *PSTRUCT; \ 118c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 119c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while (0) 120c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 121c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 122c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * MACROS - COMMON UNMARSHALLING UTILITIES 123c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 124c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_GETFIELDVALUE(MSGBODY, POS, VALUE, TYPE) do { \ 125c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev VALUE = *((TYPE *) ((OMX_U32)MSGBODY+POS)); \ 126c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 127c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 128c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 129c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_GETFIELDOFFSET(MSGBODY, POS, OFFSET, TYPE) do { \ 130c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OFFSET = *((TYPE *) ((OMX_U32)MSGBODY+POS)); \ 131c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 132c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 133c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 134c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_GETFIELDCOPYGEN(MSGBODY, POS, PTR, SIZE) do { \ 135c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev TIMM_OSAL_Memcpy(PTR, (OMX_U8*)((OMX_U32)MSGBODY+POS), SIZE); \ 136c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += SIZE; \ 137c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 138c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 139c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_GETFIELDCOPYTYPE(MSGBODY, POS, PSTRUCT, TYPE) do { \ 140c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev *PSTRUCT = *((TYPE *)((OMX_U32)MSGBODY+POS)); \ 141c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev POS += sizeof(TYPE); \ 142c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev } while(0) 143c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 144c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#define RPC_GETFIELDPATCHED(MSGBODY, OFFSET, PTR, TYPE) \ 145c322989ae6ff6769490828de1b5eda12b749cce9Iliyan MalchevPTR = (TYPE *) (MSGBODY+OFFSET); 146c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 147c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev/****************************************************************** 148c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev * FUNCTIONS 149c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ******************************************************************/ 150c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_UnMapBuffer(OMX_U32 mappedBuffer); 151c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_MapBuffer(OMX_U32 mappedBuffer); 152c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_FlushBuffer(OMX_U8 * pBuffer, OMX_U32 size, 153c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 nTargetCoreId); 154c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_InvalidateBuffer(OMX_U8 * pBuffer, 155c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 size, OMX_U32 nTargetCoreId); 156c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 157c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_UTIL_GetTargetServerName(OMX_STRING 158c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ComponentName, OMX_STRING ServerName); 159c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_UTIL_GetLocalServerName(OMX_STRING 160c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev ComponentName, OMX_STRING * ServerName); 161c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_UTIL_GenerateLocalServerName(OMX_STRING 162c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev cServerName); 163c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev RPC_OMX_ERRORTYPE RPC_UTIL_GetTargetCore(OMX_STRING cComponentName, 164c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev OMX_U32 * nCoreId); 165c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev 166c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#ifdef __cplusplus 167c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev} 168c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 169c322989ae6ff6769490828de1b5eda12b749cce9Iliyan Malchev#endif 170