Ejemplo n.º 1
0
Int32 IpcFramesInLink_init()
{
    Int32 status;
    System_LinkObj linkObj;
    UInt32 ipcFramesInId;
    IpcFramesInLink_Obj *pObj;
    char tskName[32];
    UInt32 procId = System_getSelfProcId();

   // UTILS_COMPILETIME_ASSERT(offsetof(SystemIpcFrames_ListElem, frameBuf) == 0);
    UTILS_COMPILETIME_ASSERT(offsetof(SystemIpcFrames_ListElem, frameBuf) == 0);
    UTILS_COMPILETIME_ASSERT(offsetof(VIDFrame_Buf, reserved) == 0);
    UTILS_COMPILETIME_ASSERT(sizeof(((SystemIpcFrames_ListElem *) 0)->frameBuf.reserved) ==
                             sizeof(ListMP_Elem));
    for (ipcFramesInId = 0; ipcFramesInId < IPC_FRAMES_IN_LINK_OBJ_MAX; ipcFramesInId++)
    {
        pObj = &gIpcFramesInLink_obj[ipcFramesInId];

        memset(pObj, 0, sizeof(*pObj));

        pObj->tskId =
            SYSTEM_MAKE_LINK_ID(procId,
                                SYSTEM_LINK_ID_IPC_FRAMES_IN_0) + ipcFramesInId;

        pObj->state = IPC_FRAMES_IN_LINK_STATE_INACTIVE;
        linkObj.pTsk = &pObj->tsk;
        linkObj.linkGetFullFrames = NULL;
        linkObj.linkPutEmptyFrames = NULL;
        linkObj.linkGetFullFrames = IpcFramesInLink_getFullFrames;
        linkObj.linkPutEmptyFrames = IpcFramesInLink_putEmptyFrames;
        linkObj.getLinkInfo = IpcFramesInLink_getLinkInfo;

        System_registerLink(pObj->tskId, &linkObj);

        UTILS_SNPRINTF(tskName, "IPC_FRAMES_IN%d", ipcFramesInId);

        System_ipcRegisterNotifyCb(pObj->tskId, IpcFramesInLink_notifyCb);

        status = Utils_tskCreate(&pObj->tsk,
                                 IpcFramesInLink_tskMain,
                                 IPC_LINK_TSK_PRI,
                                 gIpcFramesInLink_tskStack[ipcFramesInId],
                                 IPC_LINK_TSK_STACK_SIZE, pObj, tskName);
        UTILS_assert(status == FVID2_SOK);
    }

    return status;
}
Ejemplo n.º 2
0
static
Void  DisplayLink_drvCreateFrameInfo(DisplayLink_Obj * pObj)
{
    Int32 status,i;
    struct DisplayLink_FrameInfoObj *frameInfo =
        &pObj->frameInfo;

    UTILS_COMPILETIME_ASSERT(UTILS_ARRAYSIZE(frameInfo->infoQMem) ==
                             UTILS_ARRAYSIZE(frameInfo->infoMem));
    status =
    Utils_queCreate(&frameInfo->infoQ,
                    UTILS_ARRAYSIZE(frameInfo->infoQMem),
                    &frameInfo->infoQMem[0],
                    UTILS_QUE_FLAG_NO_BLOCK_QUE);
    UTILS_assert(status == 0);
    for (i = 0; i < UTILS_ARRAYSIZE(frameInfo->infoMem);i++)
    {
        DisplayLink_FrameInfo *frameInfoElem;

        frameInfoElem = &frameInfo->infoMem[i];
        status =
        Utils_quePut(&frameInfo->infoQ,frameInfoElem,
                     BIOS_NO_WAIT);
        UTILS_assert(status == 0);
    }
    return;
}
Ejemplo n.º 3
0
static
Void DisplayLink_drvCreateRtParams(DisplayLink_Obj * pObj)
{
    Int32 status;
    Int i;

    UTILS_COMPILETIME_ASSERT(UTILS_ARRAYSIZE(pObj->rtParams.freeQMem)
                             ==
                             UTILS_ARRAYSIZE(pObj->rtParams.paramsMem));
    status =
    Utils_queCreate(&pObj->rtParams.freeQ,
                    UTILS_ARRAYSIZE(pObj->rtParams.freeQMem),
                    pObj->rtParams.freeQMem,
                    UTILS_QUE_FLAG_NO_BLOCK_QUE);
    UTILS_assert(0 == status);
    for (i = 0; i < UTILS_ARRAYSIZE(pObj->rtParams.paramsMem); i++)
    {
        DisplayLink_drvRtParams *rtParams = &pObj->rtParams.paramsMem[i];
        rtParams->dispRtPrms.inFrmPrms = &rtParams->inFrmPrms;
        status = Utils_quePut(&pObj->rtParams.freeQ,
                              rtParams,
                              BIOS_NO_WAIT);
        UTILS_assert(0 == status);
    }
}
Ejemplo n.º 4
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);
    }

}
Ejemplo n.º 5
0
static Void IpcFramesInLink_copyFrameInfo(IpcFramesInLink_Obj * pObj,
                                          VIDFrame_Buf *src,
                                          FVID2_Frame  *dst,
                                          volatile SharedRegion_SRPtr srPtr[VIDFRAME_MAX_FIELDS][VIDFRAME_MAX_PLANES])
{
    Int i;
    UInt32 numPlanes;
    Uint32 fieldIdx;
    System_FrameInfo *frmInfo;

    //UTILS_assert(pObj->inQueInfo.numQue == 1);
    UTILS_COMPILETIME_ASSERT(VIDFRAME_MAX_FIELDS == FVID2_MAX_FIELDS);
    UTILS_COMPILETIME_ASSERT(VIDFRAME_MAX_PLANES == FVID2_MAX_PLANES);
    numPlanes =
      IpcFrameInLink_mapDataFormat2NumPlanes((FVID2_DataFormat)
        pObj->inQueInfo.queInfo[0].chInfo[src->channelNum].dataFormat);
    for (i = 0; i < numPlanes; i++)
    {
        if (src->fid == FVID2_FID_BOTTOM)
        {
            fieldIdx = 1;
        }
        else
        {
            fieldIdx = 0;
        }
        /* Force field idx to 0 irrespective of top/bot field since
         * other links expect in this format
         */
        fieldIdx = 0;

        if (SYSTEM_MT_TILEDMEM ==
            pObj->inQueInfo.queInfo[0].chInfo[src->channelNum].memType)
        {
            dst->addr[fieldIdx][i] = (Ptr)src->phyAddr[fieldIdx][i];
        }
        else
        {
            if (srPtr[fieldIdx][i] != IPC_LINK_INVALID_SRPTR)
            {
                dst->addr[fieldIdx][i] = SharedRegion_getPtr(srPtr[fieldIdx][i]);
            }
            else
            {
                /*!WARNING. Assume phyiscalAddr == VirtualAddr on RTOS side.
                 * This will break once we have mmu on RTOS side
                 * TODO: Invoke syslink API on RTOS side to map virt2phy
                 */
                dst->addr[fieldIdx][i] = src->phyAddr[fieldIdx][i];
            }
        }
    }
    dst->channelNum = src->channelNum;
    UTILS_assert(dst->channelNum < pObj->info.queInfo[0].numCh);
    dst->fid        = src->fid;
    dst->timeStamp  = src->timeStamp;
    dst->blankData    = NULL;
    dst->drvData      = NULL;
    dst->perFrameCfg  = NULL;
    dst->subFrameInfo = NULL;
    frmInfo           = dst->appData;
    UTILS_assert(frmInfo != NULL);
    frmInfo->pOrgListMPElem  = src;

    frmInfo->rtChInfo.height  = src->frameHeight;
    frmInfo->rtChInfo.width  = src->frameWidth;
    frmInfo->rtChInfo.pitch[0]  = src->framePitch[0];
    frmInfo->rtChInfo.pitch[1]  = src->framePitch[1];
    /* HACK HACK HACK !!! modify rtChInfoUpdate = TRUE once the 
       next link support dynamic resolution change */
    frmInfo->rtChInfoUpdate = TRUE;//FALSE;

}