/* * ======== MemMgr_Free_skel ======== */ Int32 MemMgr_Free_skel(UInt32 size, UInt32 *data) { void *ptr; Int32 rval; UInt16 remoteProcId; // printf("--> MemMgr_Free_skel(size: %d, data: 0x%x)\n", // (int)size, (unsigned int)data); /* setup a call frame */ remoteProcId = (UInt16)data[0]; ptr = (void *)(data[1]); // printf("ptr: 0x%x\n", (unsigned int)ptr); /* invoke the requested api */ rval = (Int32)MemMgr_Free(ptr); // printf("<-- MemMgr_Free_skel, %d\n", (int)rval); return(rval); }
/*! * @brief Free memory allocated by SysLinkMemUtils_alloc * * This function is called by remote processor application to * Free a previous allocated userspace buffer. * * @param dataSize Size of the marshalled data packet * @param data Marshalled data packet * * @sa SysLinkMemUtils_alloc */ Int32 SysLinkMemUtils_free (UInt32 dataSize, UInt32 * data) { FreeArgs * args = (FreeArgs *)data; Ptr ua; Int32 status; GT_2trace (curTrace, GT_ENTER, "SysLinkMemUtils_free", dataSize, data); ua = _SysLinkMemUtils_removeMapElement (args->bufPtr); if (!ua) { status = PROCMGR_E_INVALIDARG; #if !defined(SYSLINK_BUILD_OPTIMIZE) GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "Not valid address"); #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ } else { status = SysLinkMemUtils_unmap ((UInt32)ua, PROC_SYSM3); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (status < 0) { GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "SysLinkMemUtils_unmap failed!"); } #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ status = MemMgr_Free (ua); } GT_1trace (curTrace, GT_LEAVE, "SysLinkMemUtils_free", status); return !!status; }
/*! * @brief Allocate memory for remote processor application * * This function is called by remote processor application to * Allocate a buffer. * * @param dataSize Size of the marshalled data packet * @param data Marshalled data packet * * @sa SysLinkMemUtils_free */ Int32 SysLinkMemUtils_alloc (UInt32 dataSize, UInt32 * data) { AllocArgs * args = (AllocArgs *)data; Int i; MemAllocBlock * memBlock = NULL; Ptr allocedPtr = NULL; UInt32 retAddr = 0; UInt32 size = 0; Int32 status = PROCMGR_SUCCESS; SyslinkMemUtils_MpuAddrToMap mpuAddrList [1]; GT_2trace (curTrace, GT_ENTER, "SysLinkMemUtils_alloc", dataSize, data); memBlock = Memory_calloc (NULL, sizeof (MemAllocBlock) * args->numBuffers, 0); if (!memBlock) { status = PROCMGR_E_MEMORY; #if !defined(SYSLINK_BUILD_OPTIMIZE) GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "Error allocating memBlock"); #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ } else { for (i = 0; i < args->numBuffers; i++) { memBlock [i].pixelFormat = args->params [i].pixelFormat; memBlock [i].dim.area.width = args->params [i].width; memBlock [i].dim.area.height = args->params [i].height; memBlock [i].dim.len = args->params [i].length; } } if (status == PROCMGR_SUCCESS) { /* Allocation */ allocedPtr = MemMgr_Alloc (memBlock, args->numBuffers); if (!allocedPtr) { status = PROCMGR_E_MEMORY; #if !defined(SYSLINK_BUILD_OPTIMIZE) GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "Error MemMgr buffer"); #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ } } if (status == PROCMGR_SUCCESS) { for (i = 0; i < args->numBuffers; i++) { args->params [i].stride = memBlock [i].stride; args->params [i].ptr = memBlock [i].ptr; } size = _SysLinkMemUtils_bufferSize (memBlock, args->numBuffers); mpuAddrList [0].mpuAddr = (UInt32)allocedPtr; mpuAddrList [0].size = size; status = SysLinkMemUtils_map (mpuAddrList, 1, &retAddr, ProcMgr_MapType_Tiler, PROC_SYSM3); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (status != PROCMGR_SUCCESS) { GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "Error in SysLinkMemUtils_map"); } #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ } if (status == PROCMGR_SUCCESS) { status = _SysLinkMemUtils_insertMapElement ((Ptr)retAddr, allocedPtr, size); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (status != PROCMGR_SUCCESS) { GT_setFailureReason (curTrace, GT_4CLASS, (Char *)__func__, status, "Error in SysLinkMemUtils_InsertMapElement"); } #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ } if (status != PROCMGR_SUCCESS) { if (retAddr) { SysLinkMemUtils_unmap (retAddr, PROC_SYSM3); } if (allocedPtr) { MemMgr_Free (allocedPtr); } } if (memBlock) Memory_free (NULL, memBlock, 1); GT_1trace (curTrace, GT_LEAVE, "SysLinkMemUtils_alloc", retAddr); return retAddr; }
/*========================================================*/ OMX_ERRORTYPE SampleTest_DeInitBuffers(SampleCompTestCtxt * pContext) { OMX_ERRORTYPE eError = OMX_ErrorNone; OMX_U8 *pBuffer; BufferList *pBufferList; BufferList *pTemp; OMX_U32 nRetVal = 0; pTemp = pContext->pInBufferList; while (pTemp) { pBufferList = (BufferList *) pTemp; pBuffer = (OMX_U8 *) pTemp->pOrigBufHdr->pBuffer; printf("\nCalling Free Buffer on port no. %d\n", pTemp->pOrigBufHdr->nInputPortIndex); eError = OMX_FreeBuffer(pContext->hComp, pTemp->pOrigBufHdr->nInputPortIndex, pTemp->pOrigBufHdr); OMX_TEST_BAIL_IF_ERROR(eError); if (pContext->bClientAllocBuf) { #ifdef OMX_SAMPLE_TILER_TEST nRetVal = MemMgr_Free(pBuffer); if (nRetVal) { printf("\nError in MemMgr free\n"); } #else TIMM_OSAL_Free(pBuffer); #endif } pTemp = pTemp->pNextBuf; if (pBufferList) TIMM_OSAL_Free(pBufferList); } pContext->pInBufferList = NULL; pTemp = pContext->pOutBufferList; while (pTemp) { pBufferList = (BufferList *) pTemp; pBuffer = (OMX_U8 *) pTemp->pOrigBufHdr->pBuffer; printf("\nCalling Free Buffer on port no. %d\n", pTemp->pOrigBufHdr->nOutputPortIndex); eError = OMX_FreeBuffer(pContext->hComp, pTemp->pOrigBufHdr->nOutputPortIndex, pTemp->pOrigBufHdr); OMX_TEST_BAIL_IF_ERROR(eError); if (pContext->bClientAllocBuf) { #ifdef OMX_SAMPLE_TILER_TEST nRetVal = MemMgr_Free(pBuffer); if (nRetVal) { printf("\nError in MemMgr free\n"); } #else TIMM_OSAL_Free(pBuffer); #endif } pTemp = pTemp->pNextBuf; if (pBufferList) TIMM_OSAL_Free(pBufferList); } pContext->pOutBufferList = NULL; OMX_TEST_BAIL: return eError; }