Exemplo n.º 1
0
static
Void  DisplayLink_drvFreeFrameInfo(DisplayLink_Obj * pObj,
                                   FVID2_FrameList *frameList)
{
    Int i;
    FVID2_Frame *frame;
    DisplayLink_FrameInfo *frameInfo;
    Int32 status;

    for (i = 0; i < frameList->numFrames; i++)
    {
        frame = frameList->frames[i];
        if (DISPLAY_LINK_BLANK_FRAME_CHANNEL_NUM != frame->channelNum)
        {
            frameInfo = frame->appData;
            UTILS_assert(UTILS_ARRAYISVALIDENTRY(frameInfo,
                                    pObj->frameInfo.infoMem));
            status =
              Utils_quePut(&pObj->frameInfo.infoQ,
                           frameInfo,
                           BIOS_NO_WAIT);
            UTILS_assert(status == 0);
        }
    }
}
Exemplo n.º 2
0
static
Void DisplayLink_drvFreeRtParams(DisplayLink_Obj * pObj,
                                 FVID2_FrameList *freeFrameList)
{
    Int32 status;
    DisplayLink_drvRtParams *rtParams;

    rtParams = freeFrameList->perListCfg;
    if (rtParams)
    {
        UTILS_COMPILETIME_ASSERT(
          offsetof(DisplayLink_drvRtParams,dispRtPrms) == 0);
        UTILS_assert(UTILS_ARRAYISVALIDENTRY(rtParams,pObj->rtParams.paramsMem));
        status = Utils_quePut(&pObj->rtParams.freeQ,
                              rtParams,
                              BIOS_NO_WAIT);
        UTILS_assert(status == 0);
    }

}
Exemplo n.º 3
0
static
Void  DisplayLink_validateFrameList(DisplayLink_Obj * pObj,
                                    FVID2_FrameList *frameList)
{
    static Bool enableValidate = FALSE;
    FVID2_Frame *frame;
    DisplayLink_FrameInfo *frameInfo;
    Int i;

    if (enableValidate)
    {
        for (i = 0; i < frameList->numFrames; i++)
        {
            frame = frameList->frames[i];
            if (DISPLAY_LINK_BLANK_FRAME_CHANNEL_NUM !=
                frame->channelNum)
            {
                frameInfo = frame->appData;
                UTILS_assert(UTILS_ARRAYISVALIDENTRY(frameInfo,
                                                     pObj->frameInfo.infoMem));
            }
        }
    }
}
Exemplo n.º 4
0
Int32 IpcFramesInLink_putEmptyFrames(Utils_TskHndl * pTsk, UInt16 queId,
                                    FVID2_FrameList * pFrameBufList)
{
    IpcFramesInLink_Obj *pObj = (IpcFramesInLink_Obj *) pTsk->appData;
    UInt32 bufId;
    FVID2_Frame *pFrameBuf;
    Int32 status;
    SystemIpcFrames_ListElem *pListElem = NULL;
    UInt32 curTime;
    System_FrameInfo *frmInfo;

#ifdef SYSTEM_DEBUG_IPC_RT
    Vps_printf(" %d: IPC_FRAMES_IN   : Releasing %d framebufs !!!\n",
               Utils_getCurTimeInMsec(), pFrameBufList->numFrames);
#endif

    if ((pFrameBufList->numFrames)
         &&
         (IPC_FRAMES_IN_LINK_STATE_ACTIVE == pObj->state))
    {
        UTILS_assert(pFrameBufList->numFrames <= FVID2_MAX_FVID_FRAME_PTR);
        curTime = Utils_getCurTimeInMsec();
        pObj->stats.freeCount += pFrameBufList->numFrames;
        for (bufId = 0; bufId < pFrameBufList->numFrames; bufId++)
        {
            pFrameBuf = pFrameBufList->frames[bufId];
            frmInfo   = pFrameBuf->appData;
            UTILS_assert(frmInfo != NULL);

            pListElem = (SystemIpcFrames_ListElem *) frmInfo->pOrgListMPElem;
            UTILS_assert(pListElem->frameBuf.phyAddr[0][0]  ==
                         pFrameBuf->addr[0][0]);
            UTILS_assert(UTILS_ARRAYISVALIDENTRY(pFrameBuf,pObj->freeFrameMem));
            UTILS_assert(SYSTEM_IPC_FRAMES_GET_BUFSTATE(pListElem->bufState)
                          == IPC_FRAMEBUF_STATE_DEQUEUED);
            status = Utils_quePut(&pObj->freeFrameQue,pFrameBuf,BIOS_NO_WAIT);
            UTILS_assert(status == FVID2_SOK);
            if (curTime > pListElem->frameBuf.reserved[0])
            {
                pObj->stats.totalRoundTrip += (curTime - pListElem->frameBuf.reserved[0]);
            }
            SYSTEM_IPC_FRAMES_SET_BUFSTATE(pListElem->bufState,
                                         IPC_FRAMEBUF_STATE_INQUE);
            status =
                ListMP_putTail(pObj->listMPInHndl, (ListMP_Elem *) pListElem);
            UTILS_assert(status == ListMP_S_SUCCESS);
        }

        if (pObj->createArgs.baseCreateParams.notifyPrevLink)
        {
//    		Vps_printf("593:System_ipcSendNotify,id=%d\n",pObj->createArgs.baseCreateParams.inQueParams.prevLinkId);

            System_ipcSendNotify(pObj->createArgs.baseCreateParams.inQueParams.
                                 prevLinkId);
        }
    }
    if (IPC_FRAMES_IN_LINK_STATE_INACTIVE == pObj->state)
    {
        Vps_printf(" %d: IPC_FRAMES_IN:Warning! Free Frames invoked after link delete\n",
                     Utils_getCurTimeInMsec());
    }
    return IPC_FRAMES_IN_LINK_S_SUCCESS;
}
Exemplo n.º 5
0
static
Int32 DisplayLink_drvDeQueue(DisplayLink_Obj * pObj,
                             FVID2_FrameList *freeFrameList,
                             UInt32 *freeQueId)
{
    Int32 status,i;
    FVID2_Frame *frame;
    FVID2_FrameList tmpFreeFrameList;
    DisplayLink_FrameInfo *frameInfo;

    freeFrameList->numFrames = 0;
    tmpFreeFrameList.numFrames = 0;
    *freeQueId = DISPLAY_LINK_INVALID_INQUEID;
    status =
        FVID2_dequeue(pObj->displayHndl,&tmpFreeFrameList,0,
                      BIOS_NO_WAIT);
    if (FVID2_SOK == status)
    {
        pObj->dequeCount += tmpFreeFrameList.numFrames;

        if (tmpFreeFrameList.numFrames)
        {
            pObj->maxQueueCount++;
#ifdef SYSTEM_DEBUG_DISPLAY_RT
            Vps_printf(" %d: DISPLAY: Deque %d frames\n",
                       Utils_getCurTimeInMsec(),
                       tmpFreeFrameList.numFrames);
#endif
            DisplayLink_drvFreeRtParams(pObj,&tmpFreeFrameList);
        }
        for (i = 0; i < tmpFreeFrameList.numFrames;i++)
        {
            frame = tmpFreeFrameList.frames[i];
            if (DISPLAY_LINK_BLANK_FRAME_CHANNEL_NUM !=
                frame->channelNum)
            {
                frameInfo = frame->appData;
                UTILS_assert(UTILS_ARRAYISVALIDENTRY(frameInfo,pObj->frameInfo.infoMem));
                *freeQueId = frameInfo->activeQueueId;
                if (frameInfo->isFieldPair)
                {
                    UInt32 curTime;

                    curTime = Utils_getCurTimeInMsec();
                    UTILS_assert(freeFrameList->numFrames <
                                 UTILS_ARRAYSIZE(freeFrameList->frames));
                    freeFrameList->frames[freeFrameList->numFrames] =
                                 frameInfo->origFrame[0];
                    pObj->drvTopFieldLatency +=
                    (curTime - frameInfo->origFrame[0]->timeStamp);
                    pObj->numTopFields++;
                    freeFrameList->numFrames++;
                    UTILS_assert(freeFrameList->numFrames <
                                 UTILS_ARRAYSIZE(freeFrameList->frames));
                    freeFrameList->frames[freeFrameList->numFrames] =
                                 frameInfo->origFrame[1];
                    freeFrameList->numFrames++;
                    pObj->numBufsInDriver--;
                }
                else
                {
                    /* If not field pair, restore original appData */
                    frame->appData = frameInfo->origFrameInfo;
                    UTILS_assert(freeFrameList->numFrames <
                                 UTILS_ARRAYSIZE(freeFrameList->frames));
                    freeFrameList->frames[freeFrameList->numFrames] =
                                 frame;
                    freeFrameList->numFrames++;
                    pObj->numBufsInDriver--;
                }
                status =
                  Utils_quePut(&pObj->frameInfo.infoQ,
                               frameInfo,
                               BIOS_NO_WAIT);
                UTILS_assert(status == 0);
            }
        }
    }
    return status;
}