summaryrefslogtreecommitdiff
path: root/jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c
diff options
context:
space:
mode:
authorHemant Hariyani <hemanthariyani@ti.com>2014-11-25 14:55:21 -0600
committerHemant Hariyani <hemanthariyani@ti.com>2014-11-25 14:55:21 -0600
commit61b0359352629226e33d2ab8ce1dc0e47508b344 (patch)
tree53273fd24fb72f220bd9c92dd6dcaccb136dea6a /jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c
parent7c6e610647e4f2ab0fff64cd68d1d7bda05a635f (diff)
downloadproprietary-open-jacinto-61b0359352629226e33d2ab8ce1dc0e47508b344.tar.gz
jacinto6: sgx-bin: update sgx binaries and source for drm/gem support
Adds sgx km source and ddk binaries with gem support. Change-Id: I22f6dbec3e5ed3202a803d4cdb48e12fc2877220 Signed-off-by: Hemant Hariyani <hemanthariyani@ti.com>
Diffstat (limited to 'jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c')
-rw-r--r--jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c161
1 files changed, 161 insertions, 0 deletions
diff --git a/jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c b/jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c
index 2321a69..29ef9f1 100644
--- a/jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c
+++ b/jacinto6/sgx_src/eurasia_km/services4/srvkm/bridged/bridged_pvr_bridge.c
@@ -1392,6 +1392,154 @@ PVRSRVUnwrapExtMemoryBW(IMG_UINT32 ui32BridgeID,
return 0;
}
+#if defined(SUPPORT_DRM_GEM)
+static IMG_INT
+PVRSRVMapDmabufBW(IMG_UINT32 ui32BridgeID,
+ PVRSRV_BRIDGE_IN_MAP_DMABUF *psMapDmabufIN,
+ PVRSRV_BRIDGE_OUT_MAP_DMABUF *psMapDmabufOUT,
+ PVRSRV_PER_PROCESS_DATA *psPerProc)
+{
+ PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo;
+ IMG_UINT64 ui64Stamp;
+
+ psMapDmabufOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase,
+ &psMapDmabufIN->hDevCookie,
+ psMapDmabufIN->hDevCookie,
+ PVRSRV_HANDLE_TYPE_DEV_NODE);
+ if (psMapDmabufOUT->eError != PVRSRV_OK)
+ {
+ PVR_DPF((PVR_DBG_ERROR, "%s: Failed to lookup device node handle", __FUNCTION__));
+ return 0;
+ }
+
+ psMapDmabufOUT->eError = PVRSRVLookupHandle(psPerProc->psHandleBase,
+ &psMapDmabufIN->hDevMemHeap,
+ psMapDmabufIN->hDevMemHeap,
+ PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP);
+ if (psMapDmabufOUT->eError != PVRSRV_OK)
+ {
+ PVR_DPF((PVR_DBG_ERROR, "%s: Failed to lookup memory context handle", __FUNCTION__));
+ return 0;
+ }
+
+ psMapDmabufOUT->eError = PVRSRVMapDmabufKM(psPerProc,
+ psMapDmabufIN->hDevCookie,
+ psMapDmabufIN->hDevMemHeap,
+ psMapDmabufIN->ui32NumFDs,
+ psMapDmabufIN->ai32BufferFDs,
+ psMapDmabufIN->ui32Attribs,
+ psMapDmabufIN->ui32ChunkCount,
+ psMapDmabufIN->auiOffset,
+ psMapDmabufIN->auiSize,
+ &psMapDmabufOUT->uiDmabufBufferSize,
+ &psKernelMemInfo,
+ &ui64Stamp);
+ if (psMapDmabufOUT->eError != PVRSRV_OK)
+ {
+ PVR_DPF((PVR_DBG_ERROR, "%s: Failed to map ion handle", __FUNCTION__));
+ return 0;
+ }
+
+ OSMemSet(&psMapDmabufOUT->sClientMemInfo,
+ 0,
+ sizeof(psMapDmabufOUT->sClientMemInfo));
+
+ psMapDmabufOUT->sClientMemInfo.pvLinAddrKM =
+ psKernelMemInfo->pvLinAddrKM;
+
+ psMapDmabufOUT->sClientMemInfo.pvLinAddr = 0;
+ psMapDmabufOUT->sClientMemInfo.sDevVAddr = psKernelMemInfo->sDevVAddr;
+ psMapDmabufOUT->sClientMemInfo.ui32Flags = psKernelMemInfo->ui32Flags;
+ psMapDmabufOUT->sClientMemInfo.uAllocSize = psKernelMemInfo->uAllocSize;
+
+ /* No mapping info, we map through ion */
+ psMapDmabufOUT->sClientMemInfo.hMappingInfo = IMG_NULL;
+
+#if defined(SUPPORT_MEMINFO_IDS)
+ psMapDmabufOUT->sClientMemInfo.ui64Stamp = ui64Stamp;
+#endif
+
+ PVRSRVAllocHandleNR(psPerProc->psHandleBase,
+ &psMapDmabufOUT->sClientMemInfo.hKernelMemInfo,
+ psKernelMemInfo,
+ PVRSRV_HANDLE_TYPE_MEM_INFO,
+ PVRSRV_HANDLE_ALLOC_FLAG_NONE);
+
+ if(psMapDmabufIN->ui32Attribs & PVRSRV_MEM_NO_SYNCOBJ)
+ {
+ /* signal no syncinfo */
+ OSMemSet(&psMapDmabufOUT->sClientSyncInfo,
+ 0,
+ sizeof (PVRSRV_CLIENT_SYNC_INFO));
+ psMapDmabufOUT->sClientMemInfo.psClientSyncInfo = IMG_NULL;
+ }
+ else
+ {
+ /* and setup the sync info */
+#if !defined(PVRSRV_DISABLE_UM_SYNCOBJ_MAPPINGS)
+ psMapDmabufOUT->sClientSyncInfo.psSyncData =
+ psKernelMemInfo->psKernelSyncInfo->psSyncData;
+ psMapDmabufOUT->sClientSyncInfo.sWriteOpsCompleteDevVAddr =
+ psKernelMemInfo->psKernelSyncInfo->sWriteOpsCompleteDevVAddr;
+ psMapDmabufOUT->sClientSyncInfo.sReadOpsCompleteDevVAddr =
+ psKernelMemInfo->psKernelSyncInfo->sReadOpsCompleteDevVAddr;
+ psMapDmabufOUT->sClientSyncInfo.sReadOps2CompleteDevVAddr =
+ psKernelMemInfo->psKernelSyncInfo->sReadOps2CompleteDevVAddr;
+
+ psMapDmabufOUT->sClientSyncInfo.hMappingInfo =
+ psKernelMemInfo->psKernelSyncInfo->psSyncDataMemInfoKM->sMemBlk.hOSMemHandle;
+#endif
+
+ PVRSRVAllocSubHandleNR(psPerProc->psHandleBase,
+ &psMapDmabufOUT->sClientSyncInfo.hKernelSyncInfo,
+ psKernelMemInfo->psKernelSyncInfo,
+ PVRSRV_HANDLE_TYPE_SYNC_INFO,
+ PVRSRV_HANDLE_ALLOC_FLAG_NONE,
+ psMapDmabufOUT->sClientMemInfo.hKernelMemInfo);
+
+ psMapDmabufOUT->sClientMemInfo.psClientSyncInfo =
+ &psMapDmabufOUT->sClientSyncInfo;
+ }
+ return 0;
+}
+
+static IMG_INT
+PVRSRVUnmapDmabufBW(IMG_UINT32 ui32BridgeID,
+ PVRSRV_BRIDGE_IN_UNMAP_DMABUF *psUnmapDmabufIN,
+ PVRSRV_BRIDGE_RETURN *psUnmapDmabufOUT,
+ PVRSRV_PER_PROCESS_DATA *psPerProc)
+{
+ IMG_VOID *pvKernelMemInfo;
+
+ PVRSRV_BRIDGE_ASSERT_CMD(ui32BridgeID, PVRSRV_BRIDGE_UNMAP_DMABUF);
+
+ psUnmapDmabufOUT->eError =
+ PVRSRVLookupHandle(psPerProc->psHandleBase,
+ &pvKernelMemInfo,
+ psUnmapDmabufIN->psKernelMemInfo,
+ PVRSRV_HANDLE_TYPE_MEM_INFO);
+
+ if(psUnmapDmabufOUT->eError != PVRSRV_OK)
+ {
+ return 0;
+ }
+
+ psUnmapDmabufOUT->eError = PVRSRVUnmapDmabufKM(pvKernelMemInfo);
+
+ if(psUnmapDmabufOUT->eError != PVRSRV_OK)
+ {
+ return 0;
+ }
+
+ psUnmapDmabufOUT->eError =
+ PVRSRVReleaseHandle(psPerProc->psHandleBase,
+ psUnmapDmabufIN->psKernelMemInfo,
+ PVRSRV_HANDLE_TYPE_MEM_INFO);
+
+ return 0;
+}
+#endif /* SUPPORT_ION */
+
#if defined(SUPPORT_ION)
static IMG_INT
PVRSRVMapIonHandleBW(IMG_UINT32 ui32BridgeID,
@@ -2124,6 +2272,15 @@ PVRSRVGetMiscInfoBW(IMG_UINT32 ui32BridgeID,
return 0;
}
+ if((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_GET_DRM_FD_PRESENT) != 0)
+ {
+ PVR_DPF((PVR_DBG_ERROR, "Get DRM FD BW"));
+ }
+ if((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_SET_DRM_FD_PRESENT) != 0)
+ {
+ PVR_DPF((PVR_DBG_ERROR, "Set DRM FD BW"));
+ }
+
if (((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_MEMSTATS_PRESENT) != 0) ||
((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_DDKVERSION_PRESENT) != 0) ||
((psGetMiscInfoIN->sMiscInfo.ui32StateRequest & PVRSRV_MISC_INFO_FREEMEM_PRESENT) != 0))
@@ -4489,6 +4646,10 @@ CommonBridgeInit(IMG_VOID)
SetDispatchTableEntry(PVRSRV_BRIDGE_CHG_DEV_MEM_ATTRIBS, PVRSRVChangeDeviceMemoryAttributesBW);
SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DEV_MEMORY_2, PVRSRVMapDeviceMemoryBW);
SetDispatchTableEntry(PVRSRV_BRIDGE_EXPORT_DEVICEMEM_2, PVRSRVExportDeviceMemBW);
+#if defined(SUPPORT_DRM_GEM)
+ SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_DMABUF, PVRSRVMapDmabufBW);
+ SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_DMABUF, PVRSRVUnmapDmabufBW);
+#endif
#if defined(SUPPORT_ION)
SetDispatchTableEntry(PVRSRV_BRIDGE_MAP_ION_HANDLE, PVRSRVMapIonHandleBW);
SetDispatchTableEntry(PVRSRV_BRIDGE_UNMAP_ION_HANDLE, PVRSRVUnmapIonHandleBW);