int syslink_frameq_put(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_Frame frame; FrameQ_FrameBufInfo *frameBufInfo; Ptr virtPtr; Ptr addr; int i; /* Convert frame address and frame buffer address in to knl virtual * format. */ frame = Memory_translate (cargs->args.put.frame, Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(frame != NULL)); frameBufInfo = (FrameQ_FrameBufInfo *)&(frame->frameBufInfo[0]); for(i = 0; i < frame->numFrameBuffers; i++) { addr = (Ptr)frameBufInfo[i].bufPtr; virtPtr = Memory_translate(addr, Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(virtPtr != NULL)); frameBufInfo[i].bufPtr = (UInt32)virtPtr; } out->apiStatus = FrameQ_put (cargs->args.put.handle, frame); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
int syslink_frameq_getv(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_Frame *framePtr = NULL; UInt32 *filledQueueId = NULL; FrameQ_FrameBufInfo *frameBufInfo; Ptr phyPtr; Ptr addr; UInt32 j; int i; framePtr = (FrameQ_Frame*)(cargs+1); filledQueueId = (UInt32*)(framePtr + cargs->args.getv.numFrames); out->apiStatus = FrameQ_getv (cargs->args.getv.handle, framePtr, (Ptr)filledQueueId, &cargs->args.getv.numFrames); SETIOV(&ctp->iov[0], &msg->o, sizeof(msg->o) + sizeof(FrameQDrv_CmdArgs)); if ((out->apiStatus >= 0) && (cargs->args.getv.numFrames > 0)) { for (i = 0; i < cargs->args.getv.numFrames; i++) { /* Convert Frame and frame buffer address in frame * to physical address formatso that user space api * convert this physical address in to user space * virtual format. */ frameBufInfo = (FrameQ_FrameBufInfo *) &(framePtr[i]->frameBufInfo[0]); for(j = 0; j < framePtr[i]->numFrameBuffers; j++) { addr = (Ptr)frameBufInfo[j].bufPtr; phyPtr = Memory_translate( addr, Memory_XltFlags_Virt2Phys); GT_assert(curTrace,(phyPtr != NULL)); frameBufInfo[j].bufPtr = (UInt32)phyPtr; } framePtr[i] = Memory_translate( framePtr[i], Memory_XltFlags_Virt2Phys); } SETIOV(&ctp->iov[1], framePtr, sizeof (UInt32) * cargs->args.getv.numFrames); return _RESMGR_NPARTS(2); } return _RESMGR_NPARTS(1); }
Int32 Vsys_allocBuf(UInt32 srRegId, UInt32 bufSize, UInt32 bufAlign, Vsys_AllocBufInfo *bufInfo) { IHeap_Handle heapHndl; heapHndl = SharedRegion_getHeap(srRegId); OSA_assert(heapHndl != NULL); bufInfo->virtAddr = NULL; bufInfo->physAddr = NULL; bufInfo->srPtr = 0; bufInfo->virtAddr = Memory_alloc(heapHndl, bufSize, bufAlign, NULL); if(bufInfo->virtAddr==NULL) return -1; bufInfo->physAddr = Memory_translate (bufInfo->virtAddr, Memory_XltFlags_Virt2Phys); if(bufInfo->physAddr==NULL) return -1; bufInfo->srPtr = SharedRegion_getSRPtr(bufInfo->virtAddr,srRegId); return 0; }
int syslink_frameq_putv(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_Frame *framePtr = NULL; UInt32 *filledQueueId = NULL; FrameQ_FrameBufInfo *frameBufInfo; Ptr virtPtr; Ptr addr; UInt32 j; int i; framePtr = (FrameQ_Frame*)(cargs+1); filledQueueId = (UInt32*)(framePtr + cargs->args.putv.numFrames); for (i = 0; i < cargs->args.putv.numFrames; i++) { /* Convert frame address and frame buffer address in to knl * virtual format. */ framePtr[i] = Memory_translate (framePtr[i], Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(framePtr[i] != NULL)); frameBufInfo = (FrameQ_FrameBufInfo *) &(framePtr[i]->frameBufInfo[0]); for(j = 0; j < framePtr[i]->numFrameBuffers; j++) { addr = (Ptr)frameBufInfo[j].bufPtr; virtPtr = Memory_translate(addr, Memory_XltFlags_Phys2Virt); GT_assert(curTrace,(virtPtr != NULL)); frameBufInfo[j].bufPtr = (UInt32)virtPtr; } } out->apiStatus = FrameQ_putv (cargs->args.putv.handle, (FrameQ_Frame*)framePtr, (Ptr)filledQueueId, cargs->args.putv.numFrames); GT_assert (curTrace, (out->apiStatus >= 0)); return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
Int32 AVSYNC_GetSharedDataStructure() { Int32 status = 0; SystemVpss_AvSyncSharedObjPtr avsyncSharedObjPtr; status = System_linkControl( SYSTEM_LINK_ID_M3VPSS, SYSTEM_M3VPSS_CMD_GET_AVSYNC_SHAREDOBJ_PTR, &avsyncSharedObjPtr, sizeof(avsyncSharedObjPtr), TRUE ); pAvSyncInfo_obj = Memory_translate((Ptr)avsyncSharedObjPtr.pAvSyncSharedObjPtr, Memory_XltFlags_Phys2Virt); return status; }
int syslink_frameq_get(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_Frame frame; FrameQ_FrameBufInfo *frameBufInfo; Ptr phyPtr; Ptr addr; UInt32 j; out->apiStatus = FrameQ_get (cargs->args.get.handle, &frame); if (out->apiStatus >= 0) { /* Convert Frame and frame buffer address in frame to physical * address formatso that user space api convert this physical * address in to user space virtual format. */ frameBufInfo = (FrameQ_FrameBufInfo *) &(frame->frameBufInfo[0]); for(j = 0; j < frame->numFrameBuffers; j++) { addr = (Ptr)frameBufInfo[j].bufPtr; phyPtr = Memory_translate(addr, Memory_XltFlags_Virt2Phys); GT_assert(curTrace,(phyPtr != NULL)); frameBufInfo[j].bufPtr = (UInt32)phyPtr; } out->args.get.frame = Memory_translate( frame, Memory_XltFlags_Virt2Phys); } else { out->args.get.frame = NULL; } return (_RESMGR_PTR (ctp, &msg->o, sizeof (msg->o) + sizeof(FrameQDrv_CmdArgs))); }
/** * 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))); }