omx_proxy_videodec_secure.c revision 3cf002e003ada481d0aae4ba77bb05f95be216c7
1f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#include <stdio.h>
2f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#include <string.h>
3f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#include <assert.h>
4f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#include "omx_proxy_common.h"
5f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#include <timm_osal_interfaces.h>
63cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal#include <sys/ioctl.h>
73cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal#include <errno.h>
83cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal#include <sys/stat.h>
93cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal#include <fcntl.h>
10f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
11f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#define COMPONENT_NAME "OMX.TI.DUCATI1.VIDEO.DECODER.secure"
12f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
133cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwalextern OMX_U32 DUCATI_IN_SECURE_MODE;
143cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwalextern OMX_U32 SECURE_COMPONENTS_RUNNING;
153cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
163cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwalextern OMX_ERRORTYPE OMX_ProxyViddecInit(OMX_HANDLETYPE hComponent);
173cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak AggarwalOMX_ERRORTYPE PROXY_VIDDEC_Secure_ComponentDeInit(OMX_HANDLETYPE hComponent);
183cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
19f94e0fb97765a9927e21028499f43771264f37cbSarthak AggarwalOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent)
20f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal{
21f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	OMX_ERRORTYPE eError = OMX_ErrorNone;
22f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	OMX_COMPONENTTYPE *pHandle = NULL;
23f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL;
243cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	OMX_U8 enable = 1, mode;
253cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	int ret;
263cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
27f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pHandle = (OMX_COMPONENTTYPE *) hComponent;
28f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
29f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	DOMX_ENTER("");
30f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
31f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME);
32f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
33f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pHandle->pComponentPrivate =
34f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    (PROXY_COMPONENT_PRIVATE *)
35f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE,
36f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    0, TIMMOSAL_MEM_SEGMENT_INT);
37f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
38f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	PROXY_assert(pHandle->pComponentPrivate != NULL,
39f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    OMX_ErrorInsufficientResources,
40f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE");
41f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
42f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pComponentPrivate =
43f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
44f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
45f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	TIMM_OSAL_Memset(pComponentPrivate, 0,
46f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal		sizeof(PROXY_COMPONENT_PRIVATE));
47f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
48f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pComponentPrivate->cCompName =
49f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8),
50f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT);
51f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
52f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	PROXY_assert(pComponentPrivate->cCompName != NULL,
53f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    OMX_ErrorInsufficientResources,
54f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    " Error in Allocating space for proxy component table");
55f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
56f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	// Copying component Name - this will be picked up in the proxy common
57f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH,
58f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    OMX_ErrorInvalidComponentName,
59f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    "Length of component name is longer than the max allowed");
60f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME,
61f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	    strlen(COMPONENT_NAME) + 1);
62f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
633cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	if(DUCATI_IN_SECURE_MODE == 0)
643cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	{
653cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		DUCATI_IN_SECURE_MODE = 1;
663cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		pComponentPrivate->secure_misc_drv_fd = open("/dev/rproc_user", O_SYNC | O_RDWR);
673cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		if (pComponentPrivate->secure_misc_drv_fd < 0)
683cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		{
693cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal			DOMX_ERROR("Can't open rproc_user device 0x%x\n", errno);
703cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal			return OMX_ErrorInsufficientResources;
713cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		}
723cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
733cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		ret = write(pComponentPrivate->secure_misc_drv_fd, &enable, sizeof(enable));
743cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal                if(ret != 1)
753cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal                {
763cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal                        DOMX_ERROR("errno from setting secure mode = %x",errno);
773cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal                }
783cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		PROXY_assert(ret == 1, OMX_ErrorUndefined,"ERROR: Unable to set secure mode");
793cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		DOMX_DEBUG("ret value from Misc driver for secure playback = 0x%x\n", ret);
803cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
813cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		ret = read(pComponentPrivate->secure_misc_drv_fd, &mode, sizeof(mode));
823cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		PROXY_assert(mode == enable, OMX_ErrorUndefined,"ERROR: We are not in secure mode");
833cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		DOMX_DEBUG("secure mode recieved from Misc driver for secure playback = 0x%x\n", mode);
843cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	}
853cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
863cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	SECURE_COMPONENTS_RUNNING++;
873cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
88f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	eError = OMX_ProxyViddecInit(hComponent);
893cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	pHandle->ComponentDeInit = PROXY_VIDDEC_Secure_ComponentDeInit;
90f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal
91f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#ifdef USE_ION
92f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pComponentPrivate->bUseIon = OMX_TRUE;
93f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	pComponentPrivate->bMapIonBuffers = OMX_FALSE;
94f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#endif
95f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal	EXIT:
96f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal		return eError;
97f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal}
983cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
993cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak AggarwalOMX_ERRORTYPE PROXY_VIDDEC_Secure_ComponentDeInit(OMX_HANDLETYPE hComponent)
1003cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal{
1013cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	OMX_ERRORTYPE eError = OMX_ErrorNone;
1023cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	OMX_COMPONENTTYPE *pHandle = NULL;
1033cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1043cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	int ret;
1053cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	OMX_U8 disable = 0;
1063cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        int secure_misc_drv_fd;
1073cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1083cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	pHandle = (OMX_COMPONENTTYPE *) hComponent;
1093cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1103cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	pComponentPrivate =
1113cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	    (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
1123cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1133cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        secure_misc_drv_fd = pComponentPrivate->secure_misc_drv_fd;
1143cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1153cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        eError = PROXY_ComponentDeInit(hComponent);
1163cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        if(eError != OMX_ErrorNone)
1173cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        {
1183cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal                DOMX_ERROR("Proxy common deinit returned error = %x",eError);
1193cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        }
1203cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal        pComponentPrivate = NULL;
1213cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1223cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	if(DUCATI_IN_SECURE_MODE == 1 && SECURE_COMPONENTS_RUNNING == 1)
1233cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	{
1243cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		ret = write(secure_misc_drv_fd, &disable, sizeof(disable));
1253cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		if (ret < 0)
1263cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		{
1273cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal			DOMX_ERROR("Setting unsecure mode failed");
1283cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		}
1293cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1303cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		ret = close(secure_misc_drv_fd);
1313cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		if (ret < 0)
1323cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		{
1333cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal			DOMX_ERROR("Can't close the driver");
1343cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		}
1353cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal		DUCATI_IN_SECURE_MODE = 0;
1363cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	}
1373cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1383cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	SECURE_COMPONENTS_RUNNING--;
1393cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
1403cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal	return eError;
1413cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal}
1423cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal
143