int syslink_frameq_close(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_close ((FrameQ_Handle *)&(cargs->args.close.handle)); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/* * ======== _ACPY3_init ======== * Initialize the ACPY3 module */ static void _ACPY3_init(Void) { GT_0trace(CURTRACE, GT_ENTER, "_ACPY3_init > Enter\n"); if (refCount == 0) { #ifndef _ACPY3_CPUCOPY_ _ACPY3_qdmaInit(); #endif initQdmaSettings(); #ifndef _ACPY3_CPUCOPY_ _ACPY3_lock = LockMP_create(_ACPY3_SEMKEY); GT_assert(CURTRACE, _ACPY3_lock != NULL); #endif } /* count references even if no allocation is done */ /* so that memory free is done only when last node requires ACPY3 */ refCount++; GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_ELEMENTSIZE, ACPY3_PaRamRegs, acnt)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_NUMELEMENTS, ACPY3_PaRamRegs, bcnt)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_ELEMENTINDEX_SRC, ACPY3_PaRamRegs, srcElementIndex)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_ELEMENTINDEX_DST, ACPY3_PaRamRegs, dstElementIndex)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_FRAMEINDEX_SRC, ACPY3_PaRamRegs, srcFrameIndex)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_FRAMEINDEX_DST, ACPY3_PaRamRegs, dstFrameIndex)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_NUMFRAMES, ACPY3_PaRamRegs, ccnt)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_SRCADDR, ACPY3_PaRamRegs, src)); GT_assert(CURTRACE, verifyOffset(ACPY3_PARAMFIELD_DSTADDR, ACPY3_PaRamRegs, dst)); GT_0trace(CURTRACE, GT_ENTER, "_ACPY3_init > Exit\n"); }
/* * ======== unmarshallMsg ======== */ static XDAS_Int32 unmarshallMsg(IVIDDEC_Handle h, XDM_BufDesc *inBufs, XDM_BufDesc *outBufs, IVIDDEC_InArgs *inArgs, IVIDDEC_OutArgs *outArgs, _VIDDEC_Msg *msg, XDAS_Int32 retVal) { VISA_Handle visa = (VISA_Handle)h; IVIDDEC_OutArgs *pMsgOutArgs; Int i; /* * Do a wholesale replace of skeleton returned structure. * Pointer conversion of fields in outArgs is done below (only * in the case of a successful return value). */ pMsgOutArgs = (IVIDDEC_OutArgs *)((UInt)(&(msg->cmd.process.inArgs)) + inArgs->size); if (VISA_isChecked()) { /* ensure the codec didn't change outArgs->size */ GT_assert(CURTRACE, pMsgOutArgs->size == outArgs->size); } memcpy(outArgs, pMsgOutArgs, outArgs->size); /* if VISA_call was successful, also unmarshall outBufs */ if (retVal == VIDDEC_EOK) { /* unmarshall the output data: outBufs and outArgs. */ /* The outBufs may have changed * - [dm]TODO:H find out if outBufs can change so we can save some * cycles! and outArgs buffers may have been provided. All these * values are "raw", as seen by the DSP, so those physical addresses * must be converted to user addresses first. */ for (i = 0; i < msg->cmd.process.numOutBufs; i++) { outBufs->bufSizes[i] = msg->cmd.process.outBufSizes[i]; outBufs->bufs[i] = Memory_getBufferVirtualAddress( (UInt32)msg->cmd.process.outBufs[i], msg->cmd.process.outBufSizes[i]); } /* pointers in outArgs.displayBufs are physical, so convert them */ for (i = 0; i < outArgs->displayBufs.numBufs; i++) { outArgs->displayBufs.bufs[i] = Memory_getBufferVirtualAddress( (UInt32)(outArgs->displayBufs.bufs[i]), outArgs->displayBufs.bufSizes[i]); } } /* Note that we did *nothing* with inBufs nor inArgs. This should be ok. */ VISA_freeMsg(visa, (VISA_Msg)msg); return (retVal); }
/* * ======== ACPY3_wait ======== * Wait for all submitted DMA transfer on this logical channel to complete. */ Void ACPY3_wait(IDMA3_Handle handle) { GT_1trace(CURTRACE, GT_ENTER, "ACPY3_wait> Enter " "(handle=0x%x)\n",handle); GT_assert(CURTRACE, handle != NULL); ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->hooks,handle,\ ACPY3_INSTR_WAIT_ENTER); /* * Wait for a channel only once. Set the 'pending' flag whenever new * transfer is submitted, then clear it when ACPY3_wait* is issued. */ if (!handle->transferPending) { ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->hooks,handle, ACPY3_INSTR_WAIT_EXIT); GT_0trace(CURTRACE, GT_4CLASS, "_ACPY3_start> No transfer" " pending\n"); GT_0trace(CURTRACE, GT_ENTER, "_ACPY3_start> Exit\n"); return; /* already waited since last start. */ } doTransfer(handle); /* * Mark channel handle state to indicate pending transfer has completed * and 'wait' done */ handle->transferPending = FALSE; ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->hooks,handle,\ ACPY3_INSTR_WAIT_EXIT); GT_assert(CURTRACE, handle->transferPending == FALSE); GT_0trace(CURTRACE, GT_ENTER, "ACPY3_wait> Exit\n"); }
/* * @brief Function to get the valid data start offset in framebuffer * identified by the frame buffer number in a given frame. * * @param buf frame. * @param frameBufNum frame buffer number. */ UInt32 FrameQ_getFrameBufDataStartOffset(FrameQ_Frame frame, UInt32 frameBufNum ) { UInt32 offSet = -1; FrameQ_FrameBufInfo *frameBufInfo; GT_2trace (curTrace, GT_ENTER, "FrameQ_getFrameBufDataStartOffset", frame, frameBufNum); GT_assert (curTrace, (NULL != frame)); GT_assert (curTrace, (frame->numFrameBuffers > frameBufNum)) ; frameBufInfo = (FrameQ_FrameBufInfo *)&(frame->frameBufInfo[0]); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (frame->numFrameBuffers < frameBufNum) { /*! @retval 0xFFFFFFFF frameBufNum provided should be less * from 0 to number of frame buffers -1 */ GT_setFailureReason (curTrace, GT_4CLASS, "FrameQ_getFrameBufDataStartOffset", FrameQ_E_INVALIDARG, "frameBufNum provided should be less from 0 to " "number of frame buffers -1 .!"); } else { #endif /*#if !defined(SYSLINK_BUILD_OPTIMIZE)*/ offSet = frameBufInfo[frameBufNum].startOffset; #if !defined(SYSLINK_BUILD_OPTIMIZE) } #endif /*#if !defined(SYSLINK_BUILD_OPTIMIZE)*/ GT_1trace (curTrace, GT_LEAVE, "FrameQ_getFrameBufDataStartOffset", offSet); /*! @retval size frame buffer data start offset in the frame buffer */ return (offSet) ; }
/*! * @brief Function to wait for interrupt to be cleared. * * @param procId Remote processor ID * @param intId interrupt id * * @sa Omap3530IpcInt_sendInterrupt */ Int32 Omap3530IpcInt_waitClearInterrupt (UInt16 procId, UInt32 intId) { Int32 status = OMAP3530IPCINT_SUCCESS; GT_2trace (curTrace,GT_ENTER,"Omap3530IpcInt_waitClearInterrupt", procId, intId); GT_assert (curTrace, (ArchIpcInt_object.isSetup == TRUE)); GT_assert (curTrace, (procId < MultiProc_MAXPROCESSORS)); /* Wait for GPP to clear the previous interrupt */ while ((REG32((Omap3530IpcInt_state.mailboxBase + MAILBOX_MSGSTATUS_1_OFFSET)) & 7 )); GT_1trace (curTrace,GT_LEAVE,"Omap3530IpcInt_waitClearInterrupt", status); /*! @retval OMAP3530IPCINT_SUCCESS Wait for interrupt clearing successfully completed. */ return status; }
int syslink_frameq_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = FrameQ_destroy (); GT_assert (curTrace, ( out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * Handler for messageq destroy API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_messageq_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { MessageQDrv_CmdArgs * out = (MessageQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = MessageQ_destroy (); GT_assert (curTrace, ( out->apiStatus >= 0)); if (out->apiStatus >= 0) remove_ocb_res(ocb, DCMD_MESSAGEQ_DESTROY, NULL, NULL); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(MessageQDrv_CmdArgs))); }
/** * Handler for shared region detach API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_detach(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_detach (cargs->args.attach.remoteProcId); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
/* * ======== ACPY3_fastConfigure32b ======== */ Void ACPY3_fastConfigure32b(IDMA3_Handle restrict handle, ACPY3_ParamField32b fieldId, Uns value, short transferNo) { ACPY3_PaRamRegs * paRamCache; #ifndef _ACPY3_CPUCOPY_ UInt32 physVal; Int size; #endif GT_assert(CURTRACE, handle != NULL); GT_assert(CURTRACE, handle->protocol == &ACPY3_PROTOCOL); GT_assert(CURTRACE, transferNo >= 0); GT_assert(CURTRACE, transferNo < ((ACPY3_MoreEnv *)(handle->env))->numPaRams); GT_assert(CURTRACE, !handle->transferPending); GT_4trace(CURTRACE, GT_ENTER, "ACPY3_fastConfigure32b> " "Enter (handle=0x%x, fieldId=0x%x, value=0x%x, transferNo=%d)\n", handle, fieldId, value, transferNo); paRamCache = (ACPY3_PaRamRegs *)ACPY3_getPaRamCache(handle, transferNo); #ifndef _ACPY3_CPUCOPY_ /* Address fields must be converted to physical address */ size = 4; /* Otherwise we have to read the registers */ if ((fieldId == ACPY3_PARAMFIELD_SRCADDR) || (fieldId == ACPY3_PARAMFIELD_DSTADDR)) { physVal = (UInt32)MEMUTILS_getPhysicalAddr((Ptr)value); *((Uns *)((Uns)paRamCache + fieldId)) = physVal; } else { /* Non-address field */ *((Uns *)((Uns)paRamCache + fieldId)) = value; } #else *((Uns *)((Uns)paRamCache + fieldId)) = value; #endif GT_0trace(CURTRACE, GT_ENTER, "ACPY3_fastConfigure32b> Exit\n"); }
/* * @brief Function to get the valid data size of a framebuffer * identified by the frame buffer number in a given frame. * * @param buf frame. * @param frameBufNum frame buffer number. */ UInt32 FrameQ_getFrameBufValidSize(FrameQ_Frame frame, UInt32 frameBufNum ) { UInt32 size = 0; FrameQ_FrameBufInfo *frameBufInfo; GT_2trace (curTrace, GT_ENTER, "FrameQ_getFrameBufValidSize", frame, frameBufNum); GT_assert (curTrace, (NULL != frame)); GT_assert (curTrace, (frame->numFrameBuffers > frameBufNum)) ; frameBufInfo = (FrameQ_FrameBufInfo *)&(frame->frameBufInfo[0]); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (frame->numFrameBuffers < frameBufNum) { /*! @retval 0 frameBufNum provided should be less * from 0 to number of frame buffers -1 */ GT_setFailureReason (curTrace, GT_4CLASS, "FrameQ_getFrameBufValidSize", FrameQ_E_INVALIDARG, "frameBufNum provided should be less from 0 to " "number of frame buffers -1 .!"); } else { #endif /*#if !defined(SYSLINK_BUILD_OPTIMIZE)*/ size = frameBufInfo[frameBufNum].validSize; #if !defined(SYSLINK_BUILD_OPTIMIZE) } #endif /*#if !defined(SYSLINK_BUILD_OPTIMIZE)*/ GT_1trace (curTrace, GT_LEAVE, "FrameQ_getFrameBufValidSize", size); /*! @retval size frame buffer valid size */ return (size) ; }
/** * Handler for shared region start API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_start(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_start (); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
/** * Handler for shared region setup API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_setup(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); SharedRegion_Config *config = (SharedRegion_Config*)(cargs+1); SharedRegion_Region *region = (SharedRegion_Region *)(config+1); UInt16 i; out->apiStatus = SharedRegion_setup (config); GT_assert (curTrace, (out->apiStatus >= 0)); for (i = 0; i < config->numEntries; i++) { SharedRegion_getRegionInfo (i, ®ion[i]); if (region[i].entry.isValid == TRUE) { /* Convert the kernel virtual address to physical * addresses */ region[i].entry.base = MemoryOS_translate ( (Ptr)region[i].entry.base, Memory_XltFlags_Virt2Phys); GT_assert (curTrace, (region[i].entry.base != NULL)); } } if (out->apiStatus >= 0) { /* Add this call to the list to be cleaned-up */ add_ocb_res(ocb, DCMD_SHAREDREGION_DESTROY, (int)NULL, NULL); } SETIOV(&ctp->iov[0], &msg->o, sizeof(msg->o) + sizeof(SharedRegionDrv_CmdArgs)); SETIOV(&ctp->iov[1], config, sizeof(SharedRegion_Config) ); SETIOV(&ctp->iov[2], region, config->numEntries*sizeof(SharedRegion_Region)); return _RESMGR_NPARTS(3); }
/* ARGSUSED - this line tells the compiler not to warn about unused args. */ IRES_Status IRES_MEMTCM_getMemRecs(IRES_Handle handle, IRES_ProtocolArgs * resProtocolArgs, IALG_MemRec *memRecs) { /* IRES_MEMTCM_ProtocolArgs * protocolArgs = (IRES_MEMTCM_ProtocolArgs *)resProtocolArgs; */ GT_3trace(ti_sdo_fc_ires_memtcm_GTMask, GT_ENTER, "_IRES_MEMTCM_getMemRecs> Enter (handle=0x%x, " "resProtocolArgs=0x%x, memRecs=0x%x)\n", handle, resProtocolArgs, memRecs); GT_assert(ti_sdo_fc_ires_memtcm_GTMask, memRecs != NULL); GT_assert(ti_sdo_fc_ires_memtcm_GTMask, resProtocolArgs != NULL); memRecs[0].alignment = 4; memRecs[0].size = sizeof(IRES_MEMTCM_Obj); /* * IALG_EXTERNAL because we don't care where this memory is allocated */ memRecs[0].space = IALG_ESDATA; /* * Memory should be persistent. */ memRecs[0].attrs = IALG_PERSIST; GT_2trace(ti_sdo_fc_ires_memtcm_GTMask, GT_4CLASS, "_IRES_MEMTCM_getMemRecs> Requesting memory of size 0x%x, " "alignment 0x%x, space IALG_ESDATA, attrs IALG_PERSIST)\n", memRecs[0].size, memRecs[0].alignment); GT_0trace(ti_sdo_fc_ires_memtcm_GTMask, GT_ENTER, "_IRES_MEMTCM_getMemRecs> Exit (status=IRES_OK)\n" ); return (IRES_OK); /* number of MemRecs */ }
int syslink_frameq_setup(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb){ FrameQDrv_CmdArgs *cargs = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); FrameQDrv_CmdArgs *out = (FrameQDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); FrameQ_Config *config = (FrameQ_Config*)(cargs+1); out->apiStatus = FrameQ_setup (config); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/* * ======== processWait ======== */ static XDAS_Int32 processWait(IVIDENC1_Handle h, IVIDEO1_BufDescIn *inBufs, XDM_BufDesc *outBufs, IVIDENC1_InArgs *inArgs, IVIDENC1_OutArgs *outArgs, UInt timeout) { XDAS_Int32 retVal; _VIDENC1_Msg *msg; VISA_Handle visa = (VISA_Handle)h; GT_assert(CURTRACE, !VISA_isLocal(visa)); /* wait for completion of "last" message */ retVal = VISA_wait(visa, (VISA_Msg *)&msg, timeout); if (msg != NULL) { GT_assert(CURTRACE, msg->visa.cmd == _VIDENC1_CPROCESS); retVal = unmarshallMsg(h, inBufs, outBufs, inArgs, outArgs, msg, retVal); } return retVal; }
/** * Handler for heap buf mp destroy API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_heapbufmp_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { HeapBufMPDrv_CmdArgs * out = (HeapBufMPDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = HeapBufMP_destroy (); GT_assert (curTrace, (out->apiStatus >= 0)); if (out->apiStatus >= 0) { /* Remove this call from the list to be cleaned-up */ remove_ocb_res(ocb, DCMD_HEAPBUFMP_DESTROY, (int)NULL, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(HeapBufMPDrv_CmdArgs))); }
/* ARGSUSED - this line tells the compiler not to warn about unused args. */ IRES_Status IRES_SDMA_getMemRecs(IRES_Handle handle, IRES_ProtocolArgs * resProtocolArgs, IALG_MemRec *memRecs) { GT_3trace(ti_sdo_fc_ires_sdma_GTMask, GT_ENTER, "_IRES_SDMA_getMemRecs> Enter (handle=0x%x, " "resProtocolArgs=0x%x, memRecs=0x%x)\n", handle, resProtocolArgs, memRecs); GT_assert(ti_sdo_fc_ires_sdma_GTMask, memRecs != NULL); GT_assert(ti_sdo_fc_ires_sdma_GTMask, resProtocolArgs != NULL); memRecs[0].alignment = 4; /* * IALG_EXTERNAL because we don't care where this memory is allocated */ memRecs[0].space = IALG_ESDATA; /* * Memory should be persistent. */ memRecs[0].attrs = IALG_PERSIST; /* * Size of this handle depends on number of Logical Channels requested */ memRecs[0].size = (sizeof(IRES_SDMA_Obj) + sizeof(SDMA_ChannelDescriptor)); GT_2trace(ti_sdo_fc_ires_sdma_GTMask, GT_4CLASS, "_IRES_SDMA_getMemRecs> Requesting memory of size 0x%x, " "alignment 0x%x, space IALG_ESDATA, attrs IALG_PERSIST)\n", memRecs[0].size, memRecs[0].alignment); GT_0trace(ti_sdo_fc_ires_sdma_GTMask, GT_ENTER, "_IRES_SDMA_getMemRecs> Exit (status=IRES_OK)\n" ); return (IRES_OK); /* number of MemRecs */ }
/* * ======== OsalKfile_close ======== */ Int OsalKfile_close (OsalKfile_Handle * fileHandle) { Int status = OSALKFILE_SUCCESS; OsalKfile_Object * fileObject = NULL; mm_segment_t fs; GT_1trace (curTrace, GT_ENTER, "OsalKfile_close", fileHandle); GT_assert (curTrace, (fileHandle != NULL)); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (fileHandle == NULL) { /*! @retval OSALKFILE_E_INVALIDARG NULL provided for argument fileHandle. */ status = OSALKFILE_E_INVALIDARG; GT_setFailureReason (curTrace, GT_4CLASS, "OsalKfile_close", status, "NULL provided for argument fileHandle"); } else if (*fileHandle == NULL) { /*! @retval OSALKFILE_E_HANDLE NULL file handle provided. */ status = OSALKFILE_E_HANDLE; GT_setFailureReason (curTrace, GT_4CLASS, "OsalKfile_close", status, "NULL file handle provided."); } else { #endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) */ fileObject = (OsalKfile_Object *) *fileHandle; fs = get_fs(); set_fs (KERNEL_DS); filp_close (fileObject->fileDesc, NULL); set_fs (fs); Memory_free (NULL, fileObject, sizeof(OsalKfile_Object)); /* Reset user's file handle pointer. */ *fileHandle = NULL; #if !defined(SYSLINK_BUILD_OPTIMIZE) } #endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) */ GT_1trace (curTrace, GT_LEAVE, "OsalKfile_close", status); /*! @retval OSALKFILE_SUCCESS Operation successfully completed. */ return status; }
/*! * @brief Deletes an instance of Semaphore object. * * @param mutexHandle Semaphore object handle which needs to be deleted. * * @sa OsalSemaphore_create */ Int OsalSemaphore_delete(OsalSemaphore_Handle *semHandle) { Int status = OSALSEMAPHORE_SUCCESS; OsalSemaphore_Object **semObj = (OsalSemaphore_Object **)semHandle; int osStatus = 0; GT_1trace (curTrace, GT_ENTER, "OsalSemaphore_delete", semHandle); GT_assert (curTrace, (semHandle != NULL)); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (semHandle == NULL) { status = OSALSEMAPHORE_E_INVALIDARG; GT_setFailureReason (curTrace, GT_4CLASS, "OsalSemaphore_delete", status, "NULL provided for argument semHandle"); } else if (*semHandle == NULL) { status = OSALSEMAPHORE_E_HANDLE; GT_setFailureReason (curTrace, GT_4CLASS, "OsalSemaphore_delete", status, "NULL Semaphore handle provided."); } else { #endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) */ osStatus = sem_destroy(&((*semObj)->lock)); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (osStatus < 0) { status = OSALSEMAPHORE_E_HANDLE; GT_setFailureReason (curTrace, GT_4CLASS, "OsalSemaphore_delete", status, "Failed to destroy semaphore"); } #endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) */ Memory_free(NULL, *semHandle, sizeof (OsalSemaphore_Object)); *semHandle = NULL; #if !defined(SYSLINK_BUILD_OPTIMIZE) } #endif /* #if !defined(SYSLINK_BUILD_OPTIMIZE) */ GT_1trace (curTrace, GT_LEAVE, "OsalSemaphore_delete", status); return status; }
Void DM8168DUCATIMMU_disable(PwrMgr_Handle handle) { PwrMgr_Object * pwrMgrHandle = (PwrMgr_Object *) handle; DM8168DUCATIPWR_Object * object = NULL; GT_1trace (curTrace, GT_ENTER, "DM8168DUCATIMMU_disable", handle); GT_assert (curTrace, (handle != NULL)); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (handle == NULL) { /*! @retval PWRMGR_E_HANDLE Invalid argument */ GT_setFailureReason (curTrace, GT_4CLASS, "DM8168DUCATIMMU_enable", PWRMGR_E_FAIL, "Invalid handle specified"); } else { #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ object = (DM8168DUCATIPWR_Object *) pwrMgrHandle->object; GT_assert (curTrace, (object != NULL)); /* This code is specific for apps to run */ REG(object->ducatibaseVA) = 0x10000; REG(object->ducatibaseVA + 0x04) = 0x9; REG(object->ducatibaseVA + 0x08) = 0xE7FEE7FE; /* Flush the unicache so as to succeed in subsequent runs */ REG(object->ducatiMmuVA + 0x0CA8) = 0x400; /* DO NOT Disable the Ducati Logic*/ #if !defined(SYSLINK_BUILD_OPTIMIZE) } #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ GT_0trace (curTrace, GT_LEAVE, "DM8168DUCATIMMU_disable"); }
/** * Handler for shared region set entry API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_setentry(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * cargs = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->i)); SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); SharedRegion_Entry *entry = (SharedRegion_Entry*)(cargs+1); entry->base = Memory_translate ((Ptr)cargs->args.setEntry.entry.base, Memory_XltFlags_Phys2Virt); GT_assert (curTrace, (entry->base != (UInt32)NULL)); out->apiStatus = SharedRegion_setEntry (cargs->args.setEntry.id, entry); GT_assert (curTrace, (out->apiStatus >= 0)); if (out->apiStatus >= 0) { /* Add this call to the list to be cleaned-up */ add_ocb_res(ocb, DCMD_SHAREDREGION_CLEARENTRY, (int)cargs->args.setEntry.id, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
/* * ======= ACPY3_waitLinked ======== * Blocking wait for an individual transfer in a Linked transfer to finish. * Requires the individual transfer indicated by the 'waitId' * to be configured as synchronous, otherwise returns immediately. */ Void ACPY3_waitLinked(IDMA3_Handle handle, unsigned short waitId) { GT_2trace(CURTRACE, GT_ENTER, "ACPY3_waitLinked> Enter " "(handle=0x%x, waitId=%d)\n", handle, waitId); GT_assert(CURTRACE, (handle != NULL) && (waitId < handle->numTccs)); ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->extendedHooks, handle, ACPY3_INSTR_WAITLINKED_ENTER); /* * Wait for a channel only once. Set the 'pending' flag whenever new * transfer is submitted, then clear it when ACPY3_wait* is issued. */ if (handle->transferPending == FALSE) { ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->extendedHooks, handle, ACPY3_INSTR_WAITLINKED_EXIT); GT_0trace(CURTRACE, GT_4CLASS, "ACPY3_waitLinked> " "No transfer pending \n"); GT_0trace(CURTRACE, GT_ENTER, "ACPY3_waitLinked> Exit\n"); return; /* already waited since last start. */ } if (waitId == (handle->numTccs - 1)) { GT_0trace(CURTRACE, GT_4CLASS, "ACPY3_waitLinked> " "Waiting on the last transfer\n"); ACPY3_wait(handle); } else { doTransfer(handle); } /* * Mark channel handle state to indicate pending transfer has completed * and 'wait' done */ handle->transferPending = FALSE; ACPY3_INSTR_CALLHOOKFXN(((ACPY3_MoreEnv *)(handle->env))->extendedHooks, handle, ACPY3_INSTR_WAITLINKED_EXIT); GT_0trace(CURTRACE, GT_ENTER, "ACPY3_waitLinked> Exit\n"); }
/* * ======== processWait ======== */ static XDAS_Int32 processWait(ISPHDEC_Handle h, XDM_BufDesc *inBufs, XDM_BufDesc *outBufs, ISPHDEC_InArgs *inArgs, ISPHDEC_OutArgs *outArgs, UInt timeout) { XDAS_Int32 retVal; _SPHDEC_Msg *msg; VISA_Handle visa = (VISA_Handle)h; GT_assert(CURTRACE, !VISA_isLocal(visa)); /* wait for completion of "last" message */ retVal = VISA_wait(visa, (VISA_Msg *)&msg, timeout); /* * Unmarshall outArgs if there is a msg to unmarshall. */ if (msg != NULL) { GT_assert(CURTRACE, msg->visa.cmd == _SPHDEC_CPROCESS); unmarshallMsg(h, inBufs, outBufs, inArgs, outArgs, msg); } return (retVal); }
/* * @brief API to get the pointer to the extended header.Apps has to use this * API to get pointer to their application defined exteneded header * that starts after the bsee frame header. * * @param buf frame. */ Ptr FrameQ_getExtendedHeaderPtr(FrameQ_Frame frame) { Ptr extHeaderPtr = NULL; UInt32 offset; GT_assert (curTrace, (NULL != frame)); offset = ( sizeof (FrameQ_FrameHeader) + ( (frame->numFrameBuffers - 1) * sizeof (FrameQ_FrameBufInfo))); extHeaderPtr = (Ptr) ( (UInt32)frame + offset); return(extHeaderPtr); }
/* * ======== RMM_delete ======== */ Void RMM_delete(RMM_Handle rmm) { Uns size; //DBC_require(rmm != NULL); GT_assert(ti_sdo_fc_dman3_GTMask, rmm != NULL); /* Free the buffer of RMM_Headers */ if (rmm->headers) { size = rmm->nHeaders * sizeof(RMM_Header); (rmm->freeFxn)(rmm->segid, (Void *)((UInt32)rmm + rmm->headers), size); } (rmm->freeFxn)(rmm->segid, rmm, sizeof(RMM_Obj)); }
/*! * @brief Function to clear the specified interrupt received from the DSP. * * @param procId Remote processor ID * @param intId interrupt id * * @sa Omap3530IpcInt_sendInterrupt */ UInt32 Omap3530IpcInt_clearInterrupt (UInt16 procId, UInt32 intId) { UInt32 retVal; GT_2trace (curTrace,GT_ENTER,"Omap3530IpcInt_clearInterrupt", procId, intId); GT_assert (curTrace, (ArchIpcInt_object.isSetup == TRUE)); GT_assert (curTrace, (procId < MultiProc_MAXPROCESSORS)); /* Read the register to get the entry from the mailbox FIFO */ retVal = REG32(Omap3530IpcInt_state.mailboxBase + MAILBOX_MESSAGE_1_OFFSET) ; /* Clear the IRQ status. * If there are more in the mailbox FIFO, it will re-assert. */ REG32(Omap3530IpcInt_state.mailboxBase + MAILBOX_IRQSTATUS_0_OFFSET) = 0x4 ;/* mailbox 1*/ GT_0trace (curTrace, GT_LEAVE, "Omap3530IpcInt_clearInterrupt"); /*! @retval Value Value received with the interrupt. */ return retVal ; }
/** * Handler for shared region destroy API. * * \param ctp Thread's associated context information. * \param msg The actual devctl() message. * \param ocb OCB associated with client's session. * * \return POSIX errno value. * * \retval EOK Success. * \retval ENOTSUP Unsupported devctl(). */ int syslink_sharedregion_destroy(resmgr_context_t *ctp, io_devctl_t *msg, syslink_ocb_t *ocb) { SharedRegionDrv_CmdArgs * out = (SharedRegionDrv_CmdArgs *) (_DEVCTL_DATA (msg->o)); out->apiStatus = SharedRegion_destroy (); GT_assert (curTrace, (out->apiStatus >= 0)); if (out->apiStatus >= 0) { /* Remove this call from the list to be cleaned-up */ remove_ocb_res(ocb, DCMD_SHAREDREGION_DESTROY, (int)NULL, NULL); } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(SharedRegionDrv_CmdArgs))); }
/*! * @brief Function to finalize the Omap3530IpcInt module * * @sa Omap3530IpcInt_setup */ Void Omap3530IpcInt_destroy (Void) { GT_0trace (curTrace, GT_ENTER, "Omap3530IpcInt_destroy"); GT_assert (curTrace, (ArchIpcInt_object.isSetup == TRUE)); ArchIpcInt_object.isSetup = FALSE; ArchIpcInt_object.obj = NULL; ArchIpcInt_object.fxnTable = NULL; iounmap((unsigned int *)Omap3530IpcInt_state.archCoreCmBase); iounmap((unsigned int *)Omap3530IpcInt_state.mailboxBase); GT_0trace (curTrace, GT_ENTER, "Omap3530IpcInt_destroy"); }
/*! * @brief Function to initialize the HAL object * * @param halObj Return parameter: Pointer to the HAL object * @param initParams Optional initialization parameters * * @sa OMAPL1XX_halExit * OMAPL1XX_phyShmemInit */ Int OMAPL1XX_halInit (Ptr * halObj, Ptr params) { Int status = PROCESSOR_SUCCESS; OMAPL1XX_HalObject * halObject = NULL; GT_2trace (curTrace, GT_ENTER, "OMAPL1XX_halInit", halObj, params); GT_assert (curTrace, (halObj != NULL)); (Void) params ; /* Not used. */ *halObj = Memory_calloc (NULL, sizeof (OMAPL1XX_HalObject), 0, NULL); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (*halObj == NULL) { /*! @retval PROCESSOR_E_MEMORY Memory allocation failed */ status = PROCESSOR_E_MEMORY; GT_setFailureReason (curTrace, GT_4CLASS, "OMAPL1XX_halInit", status, "Memory allocation failed for HAL object!"); } else { #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ halObject = (OMAPL1XX_HalObject *) *halObj; halObject->offsetPsc0 = OFFSET_PSC0; halObject->offsetSysModule = OFFSET_SYSTEM_MODULE; status = OMAPL1XX_phyShmemInit (*halObj); #if !defined(SYSLINK_BUILD_OPTIMIZE) if (status < 0) { GT_setFailureReason (curTrace, GT_4CLASS, "OMAPL1XX_halInit", status, "OMAPL1XX_phyShmemInit failed!"); Memory_free (NULL, *halObj, sizeof (OMAPL1XX_HalObject)); *halObj = NULL; } } #endif /* if !defined(SYSLINK_BUILD_OPTIMIZE) */ GT_1trace (curTrace, GT_LEAVE, "OMAPL1XX_halInit", status); /*! @retval PROCESSOR_SUCCESS Operation successful */ return status; }