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