PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData) { PVRSRV_ERROR eError; IMG_HANDLE hBlockAlloc; PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_ENV_PER_PROCESS_DATA), phOsPrivateData, &hBlockAlloc, "Environment per Process Data"); if (eError != PVRSRV_OK) { *phOsPrivateData = IMG_NULL; PVR_DPF((PVR_DBG_ERROR, "%s: OSAllocMem failed (%d)", __FUNCTION__, eError)); return eError; } psEnvPerProc = (PVRSRV_ENV_PER_PROCESS_DATA *)*phOsPrivateData; OSMemSet(psEnvPerProc, 0, sizeof(*psEnvPerProc)); psEnvPerProc->hBlockAlloc = hBlockAlloc; LinuxMMapPerProcessConnect(psEnvPerProc); return PVRSRV_OK; }
PVRSRV_ERROR OSPerProcessPrivateDataInit(IMG_HANDLE *phOsPrivateData) { PVRSRV_ERROR eError; IMG_HANDLE hBlockAlloc; PVRSRV_ENV_PER_PROCESS_DATA *psEnvPerProc; eError = OSAllocMem(PVRSRV_OS_NON_PAGEABLE_HEAP, sizeof(PVRSRV_ENV_PER_PROCESS_DATA), phOsPrivateData, &hBlockAlloc, "Environment per Process Data"); if (eError != PVRSRV_OK) { *phOsPrivateData = IMG_NULL; PVR_DPF((PVR_DBG_ERROR, "%s: OSAllocMem failed (%d)", __FUNCTION__, eError)); return eError; } psEnvPerProc = (PVRSRV_ENV_PER_PROCESS_DATA *)*phOsPrivateData; OSMemSet(psEnvPerProc, 0, sizeof(*psEnvPerProc)); psEnvPerProc->hBlockAlloc = hBlockAlloc; /* Linux specific mmap processing */ LinuxMMapPerProcessConnect(psEnvPerProc); #if defined(SUPPORT_DRI_DRM) && defined(PVR_SECURE_DRM_AUTH_EXPORT) /* Linked list of PVRSRV_FILE_PRIVATE_DATA structures */ INIT_LIST_HEAD(&psEnvPerProc->sDRMAuthListHead); #endif #if defined(SUPPORT_ION) OSSNPrintf(psEnvPerProc->azIonClientName, ION_CLIENT_NAME_SIZE, "pvr_ion_client-%d", OSGetCurrentProcessIDKM()); psEnvPerProc->psIONClient = ion_client_create(gpsIonDev, psEnvPerProc->azIonClientName); if (IS_ERR_OR_NULL(psEnvPerProc->psIONClient)) { PVR_DPF((PVR_DBG_ERROR, "OSPerProcessPrivateDataInit: Couldn't create " "ion client for per process data")); return PVRSRV_ERROR_OUT_OF_MEMORY; } #endif /* defined(SUPPORT_ION) */ return PVRSRV_OK; }