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