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; 242a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal const OMX_U8 enable = 1, disable = 0; 252a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal OMX_U8 mode; 263cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal int ret; 273cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 28f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pHandle = (OMX_COMPONENTTYPE *) hComponent; 29f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 30f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal DOMX_ENTER(""); 31f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 32f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal DOMX_DEBUG("Component name provided is %s", COMPONENT_NAME); 33f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 34f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pHandle->pComponentPrivate = 35f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal (PROXY_COMPONENT_PRIVATE *) 36f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal TIMM_OSAL_Malloc(sizeof(PROXY_COMPONENT_PRIVATE), TIMM_OSAL_TRUE, 37f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 0, TIMMOSAL_MEM_SEGMENT_INT); 38f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 39f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal PROXY_assert(pHandle->pComponentPrivate != NULL, 40f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal OMX_ErrorInsufficientResources, 41f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal "ERROR IN ALLOCATING PROXY COMPONENT PRIVATE STRUCTURE"); 42f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 43f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pComponentPrivate = 44f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 45f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 46f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal TIMM_OSAL_Memset(pComponentPrivate, 0, 47f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal sizeof(PROXY_COMPONENT_PRIVATE)); 48f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 49f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pComponentPrivate->cCompName = 50f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal TIMM_OSAL_Malloc(MAX_COMPONENT_NAME_LENGTH * sizeof(OMX_U8), 51f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal TIMM_OSAL_TRUE, 0, TIMMOSAL_MEM_SEGMENT_INT); 52f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 53f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal PROXY_assert(pComponentPrivate->cCompName != NULL, 54f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal OMX_ErrorInsufficientResources, 55f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal " Error in Allocating space for proxy component table"); 56f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 57f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal // Copying component Name - this will be picked up in the proxy common 58f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal PROXY_assert(strlen(COMPONENT_NAME) + 1 < MAX_COMPONENT_NAME_LENGTH, 59f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal OMX_ErrorInvalidComponentName, 60f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal "Length of component name is longer than the max allowed"); 61f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal TIMM_OSAL_Memcpy(pComponentPrivate->cCompName, COMPONENT_NAME, 62f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal strlen(COMPONENT_NAME) + 1); 63f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 642a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal pComponentPrivate->secure_misc_drv_fd = open("/dev/rproc_user", O_SYNC | O_RDWR); 652a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if (pComponentPrivate->secure_misc_drv_fd < 0) 663cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal { 672a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("Can't open rproc_user device 0x%x\n", errno); 682a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal return OMX_ErrorInsufficientResources; 693cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal } 703cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 712a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = write(pComponentPrivate->secure_misc_drv_fd, &enable, sizeof(enable)); 722a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if(ret != 1) 732a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal { 742a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("errno from setting secure mode = %x",errno); 752a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = write(pComponentPrivate->secure_misc_drv_fd, &disable, sizeof(disable)); 762a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if (ret < 0) 772a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal { 782a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("Setting unsecure mode failed"); 792a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 802a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal 812a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = close(pComponentPrivate->secure_misc_drv_fd); 822a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if (ret < 0) 832a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal { 842a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("Can't close the driver"); 852a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 862a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal eError = OMX_ErrorInsufficientResources; 872a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal goto EXIT; 882a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 892a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal 902a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = read(pComponentPrivate->secure_misc_drv_fd, &mode, sizeof(mode)); 912a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal PROXY_assert(mode == enable, OMX_ErrorUndefined,"ERROR: We are not in secure mode"); 922a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_DEBUG("secure mode recieved from Misc driver for secure playback = 0x%x\n", mode); 933cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 94f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal eError = OMX_ProxyViddecInit(hComponent); 953cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal pHandle->ComponentDeInit = PROXY_VIDDEC_Secure_ComponentDeInit; 96f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal 97f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#ifdef USE_ION 98f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pComponentPrivate->bUseIon = OMX_TRUE; 99f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal pComponentPrivate->bMapIonBuffers = OMX_FALSE; 100f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal#endif 101f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal EXIT: 1022a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if(eError != OMX_ErrorNone) 1032a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal { 1042a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal TIMM_OSAL_Free(pHandle->pComponentPrivate); 1052a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal pHandle->pComponentPrivate = NULL; 1062a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 107f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal return eError; 108f94e0fb97765a9927e21028499f43771264f37cbSarthak Aggarwal} 1093cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1103cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak AggarwalOMX_ERRORTYPE PROXY_VIDDEC_Secure_ComponentDeInit(OMX_HANDLETYPE hComponent) 1113cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal{ 1123cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal OMX_ERRORTYPE eError = OMX_ErrorNone; 1133cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal OMX_COMPONENTTYPE *pHandle = NULL; 1143cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal PROXY_COMPONENT_PRIVATE *pComponentPrivate = NULL; 1153cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal int ret; 1162a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal const OMX_U8 disable = 0; 1173cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal int secure_misc_drv_fd; 1183cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1193cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal pHandle = (OMX_COMPONENTTYPE *) hComponent; 1203cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1213cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal pComponentPrivate = 1223cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal (PROXY_COMPONENT_PRIVATE *) pHandle->pComponentPrivate; 1233cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1243cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal secure_misc_drv_fd = pComponentPrivate->secure_misc_drv_fd; 1253cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1263cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal eError = PROXY_ComponentDeInit(hComponent); 1273cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal if(eError != OMX_ErrorNone) 1283cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal { 1293cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal DOMX_ERROR("Proxy common deinit returned error = %x",eError); 1303cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal } 1313cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal pComponentPrivate = NULL; 1323cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1332a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = write(secure_misc_drv_fd, &disable, sizeof(disable)); 1342a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if (ret < 0) 1353cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal { 1362a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("Setting unsecure mode failed"); 1372a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 1383cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1392a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal ret = close(secure_misc_drv_fd); 1402a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal if (ret < 0) 1412a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal { 1422a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal DOMX_ERROR("Can't close the driver"); 1432a0736ac288d2057129b5b8961cc5536066493c6Sarthak Aggarwal } 1443cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 1453cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal return eError; 1463cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal} 1473cf002e003ada481d0aae4ba77bb05f95be216c7Sarthak Aggarwal 148